Linux护卫者 Snort的IDS功能全攻略
Snort的创始人Marty Roesch把Snort定位为轻量级的入侵检测系统。无论对小的家庭用户还是繁忙的公司网络,Snort都有能力实时分析和记录IP数据包,其基于规则的检测引擎能够检测多种变种攻击,包括CGI扫描、缓存区溢出攻击、SMB探测等。还能为确定网络中一些莫名其妙的服务都是做什么的提供帮助。使Snort能运行在众多的硬件平台和操作系统上。因为其可扩展的体系结构和开放源码的发布模式,使Snort成为入侵检测软件中非常流行的选择。经常有已经花费了数千美元购买入侵检测系统的管理员还使用Snort来填补网络中的一些缺口。从本质上说,Snort是网络数据包嗅探器。只要运行Snort时不加载规则,就可以把网络中的数据包显示出来。
但是Snort的真正价值在于把数据包经过规则处理的过程。Snort灵活的和强大的语言能对网络中的所有数据包作充分的分析,并决定如何处理任何特殊的数据包。Snort可以选择的方式有忽略、记录或告警管理员。Snort有很多种记录或告警的方法,例如syslog、写入文件、写入XML格式文件、发送WinPopup消息等。当有了新的攻击手段时,只要简单加入新的规则就可以升级Snort。
除了它的功能外,Snort最受重视的特性是其灵活的攻击特征子系统。Snort有一个可以通过互联网来添加和不断更新的攻击数据库。用户可以根据新网络攻击来创建其特征,并提交到Snort特征邮件列表中(位于http://www.snort.org/lists.html),因此,所有的Snort用户都可以从中受益。这种社区共享精神使Snort成为最新最强健的且基于网络的IDS。Snort的组成结构如图1所示。
图1 Snort 的组成结
合理安装配置Snort
这里将Snort作为IDS的一个例子,因为它相对容易部署,而且大多数管理员都能获得Snort(它是开放源代码)。如果希望安装、测试Snort,请登录Snort站点(http://www.snort.org)即可。下面以一个典型的中小网络环境为例,介绍使用Snort来实施IDS系统。在实施IDS时,面临的问题是:如何部署IDS系统。基于网络的IDS系统,大部分是通过网络交换机采集整个网络的流量信息,数据量非常大,管理员很少会有时间来正确地分析它们。其实,实施IDS的目的,主要是为了保护系统中重要的主机。网络拓朴如图2。

在这里我们采用基于主机的IDS,即在各个需要被监控的服务器上安装IDS探头软件:snort,根据各服务器自身应用的特点,定制规则,并将收集到的信息、告警等传至网管员控制台的IDS控制中心。运行Snort软件需要libpcap库支持。libpcap 是 Linux/linux 平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础。Libpcap 提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性。Libpcap 可以在绝大多数类 Linux 平台下工作,Libpcap 软件包可从 http://www.tcpdump.org/ 下载。
在IDS控制中心:网管员控制台为了管理Snort采用Web方式分析Snort日志。所需软件为:Apache、MySQL、ACID等。其中 Apache Web服务器为ACID提供运行环境。MySQL数据库服务器,用于存储Snort告警信息。
所有IDS探头产生的信息、警报等都保存在MySQL数据库中。ACID(Analysis Console for Incident Databases)是一个基于PHP的分析引擎,用于查询、管理snort探针产生的数据库。还可以用Web方式查看分析Snort日志和警报信息的软件。ACID需要Php、Adodb、Gd、Zlib等软件的支持,来实现对MySQL数据库的访问以及以图形方式表现Snort日志警报信息。所以要首先建立在一个LAMP(apache+mysql+php)服务器以及相关函数库。下面要安装IDS核心软件Snort、AIDE等软件。具体步骤这里不就不赘述了。
基于snort 的IDS保护方法
1.调节Snort规则
调节IDS/IPS是一个需要不断进行的过程。调节IDS意味着增加或删除特征或者约束特 征,以便能对所有已知的攻击报警并且产生最少的误警。需要不断调节IDS的原因有好几个:
大量告警可能会使得IDS管理员不知所措。在具有Internet、电子邮件、Web浏览和内部广播流量的繁忙的网络中,这些事件会触发许多告警。
当开始分析IDS报告的告警时,就会理解snort.conf文件中的配置设置。调节并改进这些系统变量和参数能提供更好的网络告警概貌。
新的攻击在不断出现,因此必须加入新的攻击特征。
2.保护Root账户
当今各主要操作系统都提供有一个或一组管理员账户。通过这些账户,我们可以对系统进行全面的控制和访问。而且,这些操作系统对这样的账户没有任何防范——如果这些账户使用不当,就会对操作系统造成破坏。在Linux平台上,管理员账户就是root账户。
我们必须采取各种手段对Linux系统的root账户加以保护,以防非法使用。其中的主要措施是采用不易破解的口令,但也可以限制对实际root账户的使用。一种限制使用root账户的办法是采用一种叫作sudo或SUperuserDO的程序。
sudo程序可使管理员能够把一组通常需要具有相应权限才能使用的命令交给其他用户或管理员使用,同时又不必让他们获知root用户口令。这意味着这些管理员可以被限制为只能享有完成他们的工作所需要的权限,即使其他管理员能够创建特权用户,也只能创建极少数几个,而且这些特权用户都会得到集中控制。
这一工具也可以使全职管理员能够在不必以root用户身份登录的情况下完成所要做的工作,从而保证只在真正危急的情况下才使用root账户。即管理员可以以普通用户的身份登录并完成一些常规工作,例如读取邮件、准备报告等。在需要进行管理操作时,再通过sudo程序以root用户或其他特权用户的身份登录。由于sudo程序要求进行委托,因此使用sudo完成管理操作对保证系统安全还有另外两大好处:
可以防止出现管理员以root身份登录之后又忘记自己是root身份的错误。这种错误可能给系统造成破坏。
把执行某些任务的权限委托给特定用户可以保证恰当地使用各种用户身份,只在进行管理操作时才使用特权用户。日志文件中将会记录下哪个用户做了哪些操作,而不是仅简单地记录使用了root账户。
3.减少snort工作计算机所运行的服务的数量
Internet服务为Linux系统提供了统一而一致的具体功能。有些服务是系统完成基本功能所必须的,而另外一些服务则是因为原来曾有某些应用(但现在已经不再用了)或者是按照默认配置而打开的。一般地,Linux版本使用是从/etc/xinetd.conf下运行的(例外:有些老Linux版本使用/etc/inetd.conf)。很多Linux版本都默认运行某些服务,以便为Linux服务器提供某些已有的基本功能。但这是与基本安全要求相悖的,因此取消不需要的服务对加固安全是至关重要的。其实所运行的服务越少,能使攻击者有机可乘的潜在漏洞就越少。其中finger、discard、chargen、daytime、time、talkd等服务都是历史上遗留下来的服务,还有很多其他服务则是属于特定厂商专用的服务。
在确定关于某个系统的安全职责或安装新系统时,一定要检查系统所运行的服务,并
禁用那些不必要的服务。有一点需要注意:在真正禁用之前,应针对所要做的更改做些测试,并通过监控手段确认调整后的系统仍能提供业务运营所需要的功能。
4.打补丁
很多系统管理员都熟悉“打补丁”这个名词。打补丁是非常重要但却最经常被忽视的安全工作之一。虽然在设计Linux时就考虑到了安全问题,但关于Linux的新安全漏洞还是不断被发现,而且对软件所做的新的更改也可能要求打补丁。通过不断打补丁并使系统保持最新,我们可以保证及时采用了厂商所做的对安全漏洞的修补,并且实现功能的更新。只需简单地注册到某个安全列表,就可以看到Internet上有很多关于漏洞的资料。所有机构都必须制定有关于打补丁的规程,要明确规定对重要补丁程序应做怎样的操作。Linux厂商都提供针对其产品的补丁,有些厂商则通常根据补丁程序的性质(安全补丁通常是免费的,而升级程序一般要付费)或用户是否已交纳服务费而决定是否免费提供补丁程序。下面列出的是主要的Linux 和Linux厂商及其提供补丁程序的网站:
SUSE(Linux)http://portal.suse.com/psdb/index.html
RedHat(Linux)https://www.redhat.com/security/
OpenBSD(BSD)http://www.openbsd.org/errata.html
FreeBSD(BSD)http://www.freebsd.org/security/
Sun(Solaris)http://sunsolve.sun.com/pub-cgi/show.pl?target=patchpage
5.从物理上保证Linux系统的安全
如果有人可以从物理上接触到系统,他们就能很轻松地获得root用户的访问权限:对于Solaris平台,只需在系统重启时放入安装光盘就可以更改root用户的口令;对Linux系统,启动磁盘、光盘或USB盘都可用以启动系统,并能以完全的root权限安装文件系统,从而获得root权限。绝大多数人可能不容易获得AIX安装光盘,但可启动的Linux盘则是任何人都可以根据从Internet上免费下载的代码而制作出来的;而且在很多会议上都经常分发可启动的Linux光盘。我们无法阻止人们获取免费软件,但可以把Linux和其他系统安装盘与机器分开存放。我们可以搞清与Linux有关的问题,可以禁用或从很多用户使用的机器上卸掉光驱或软驱。要采用周密的物理安全防范措施,防止对Linux系统的非授权访问。
6.保护snort配置文件
snort配置文件可能包括口令和其他应该受到保护的敏感信息。例如,如果使用的Snort具有构造指令,而且还使用了MySQL(./configure--with-mysql),那么snort.conf输出插件就类似于下面这样:
outputdatabase:log,mysql,user=snortpassword=PASSWORDdbname=snort
host=management-server.domain.local
在snort.conf文件中,口令是以明文存储的,这是需要解决的一个缺陷。在安装了这种Snort系统后,当进程启动时会查看snort.conf。一旦Snort传感器启动了,就应当将这个文件安全地存储到其他地方(如usb存储设备)然后完整地删除这个文件或者通过加密保护这个文件。数据库访问权限也需要保护。你要区别用户权限和传感器权限,还要区别用户权限和分析工具的权限。只有管理员或DBA才具有删除权限,用于向数据库添加数据的账号只需要有向数据库写入记录的权限即可。
7.使用SSL加密Snort 传感器的之间的通信
Snort 传感器和管理终端之间的通信需要保护,就像保护管理员的控制台和数据存储器之间的通信一样。在图3中,箭头表示组件之间的通信链路,链路上的通信通过SSL进行保护。

图3使用SSL加密Snort 传感器的之间的通信
总之,将Snort或其他IDS安装在网络中已经加固过的系统上;但从性能方面考虑,最好将IDS/IPS部署在一个单独的系统中。