开源安全运维平台OSSIM疑难解析:提高篇

978-7-115-50647-4
作者: 李晨光
译者:
编辑: 傅道坤
分类: 运维

图书目录:

详情

本书精选了OSSIM日常运维操作中总结的许多疑难问题,是OSSIM运维工程师故障速查手册,专门针对OSSIM故障解答来编写。本书主要介绍重点强调安全事件分类聚合、提取流程、关联分析算法、Snort规则分析等技巧,介绍日志收集方法和标准化实现思路以及在OSSIM中用HIDS/NIDS、Netflow抓包分析异常流量的方法,深入分析了Openvas架构和脚本分析方法。

图书摘要

版权信息

书名:开源安全运维平台OSSIM疑难解析:提高篇

ISBN:978-7-115-50647-4

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    李晨光

责任编辑 傅道坤

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


OSSIM(Open Source Security Information Management,开源安全信息管理)系统是一个非常流行和完整的开源安全架构体系,通过将开源产品进行集成,从而提供一种能实现安全监控功能的基础平台。

本书精选了作者在OSSIM日常运维操作中遇到的许多疑难杂症,并给出了相应的解决方案。本书共分为12章,内容包括入侵检测Snort与Suricata,基于主机的入侵检测—OSSEC,漏洞扫描OpenVAS,Memcache、RabbitMQ与Redis协同工作,日志采集与分析,关联分析技术,资产管理,网络流量与主机高可用监控,NetFlow流量分析,OSSIM前端汉化技巧,压力测试及性能监控,数据包抓包分析技巧等。

本书非常适合具有一定SIEM(Security Information and Event Management,安全信息和事件管理)系统实施经验的技术经理或中高级运维工程师阅读,还可以作为开源技术研究人员、网络安全管理人员的参考资料。


李晨光,OSSIM布道师、资深网络架构师、UNIX/Linux系统安全专家、中国计算机学会高级会员。他写作的《Linux企业应用案例精解》《UNIX/Linux网络日志分析与流量监控》《开源安全运维平台OSSIM最佳实践》在图书市场上具有相当抢眼的表现与上佳口碑,且中文繁体字版本也被输出到中国台湾。

李晨光先生还是51CTO、ChinaUnix、OSChina等社区的专家博主,撰写的技术博文被国内各大IT技术社区广泛转载,还曾多次受邀在国内系统架构师大会和网络信息安全大会上发表技术演讲。


目前,OSSIM 在中国移动、中国电信、中国石油、华为等大型企业内得到应用推广,这些企业在安全运营中心(SOC)的基础上组建了 OSSIM 运维和二次开发团队,但图书市场缺乏专门讲解OSSIM运维和开发的书籍。为了解答OSSIM运维工程师在工作中遇见的疑难问题,本书应运而生。

本书借助作者在OSSIM领域长达10年的开发应用实践经验,以大量实际问题为线索,阐述了基于插件收集的日志并实现标准化、安全事件规范化分类、关联分析的精髓。书中给出的参考答案有利于读者深入理解各种问题,让读者主动思考问题,从而避免死读书。书中展示的所有问题原型均来自大型企业中复杂的生产环境,给出的参考答案也是作者认为比较好的一种处理方案。

本书编写形式新颖,表达方式独特,图文并茂,通俗易懂,有很强的实用性。读者在学习和阅读的过程中可以针对自己感兴趣的问题得到及时、明确的解答。在满足碎片化阅读的同时,本书还通过近百道课后习题加深读者对 OSSIM 系统的理解。

本书介绍了开源OSSIM系统安装部署以及运维管理的若干疑难问题,共分12章。

本书精选了作者在OSSIM日常运维操作中总结的300多个疑难问题,是OSSIM运维工程师故障速查手册,专门针对OSSIM故障解答而编写。本书适合具有一定SIEM系统实施经验的技术经理或中高级运维工程师阅读,还可作为信息安全专家和相关领域研究人员的参考书,也可作为高等学校网络工程和信息安全专业的教材。

关于版本

在本书中,软件的安装环境为Debian Linux 8.0。在安装其他软件时,必须符合该版本要求。

关于菜单的描述

OSSIM的前台界面复杂,书中经常会用一串带箭头的单词表达菜单的路径,例如Web UI中的Dashboards→Overview→Executive,表示Web界面下鼠标依次单击Dashboards、Overview,最后到达Executive仪表盘。

路径问题

除非特别说明,本书所涉及路径均指在OSSIM系统下的路径,而不是其他Linux发行版。终端控制台是指通过root登录系统,然后输入ossim-setup启动OSSIM终端控制台的界面。

在终端控制台下,选择Jailbreak系统菜单就能进入root shell,登录日志会保存在文件/var/log/ossim/root_access.log中。

SIEM事件分析控制台

SIEM控制台是指通过Web UI进入系统,在菜单Analysis→SIEM下的界面。

关于OSSIM服务器端与传感器端的约定

本书讲述的OSSIM服务器端均指通过AlienVault USM安装的系统,包括OSSIM四大组件,传感器端是通过AlienVault Sensor安装的系统。

关于地图显示问题

所有地图信息均来自谷歌地图,大家在做实验前确保已连上谷歌地图,而且使用系统中的OTX时也需要能连接到谷歌地图。

浏览器约定

OSSIM Web UI适合采用Safari 7.0、Google Chrome 44.0、IE 10.0以上的浏览器访问。

实验环境下载

本书涉及的软件较多,其中一些重要的软件可到异步社区的本书页面中统一获取。

与其他Linux系统一样,在学习OSSIM的过程中也会出现各种问题和故障。由于网上能直接找到的资料有限,所以很多新手都担心出现问题,在面对问题时都很局促,特别是当一个个问题接踵而来时会显得无可奈何。

学习OSSIM可以充分暴露你的“知识短板”,这体现在编程语言、数据库、操作系统、TCP/IP、网络安全的各个方面,不过通过解决在 OSSIM 里遇到的问题,就会逐步弥补这些短板。学习就是一个发现问题与解决问题的过程,只要掌握了 OSSIM 的体系结构和运行原理,很多问题都可以迎刃而解。当然前提是我们已经具备了下面所列的这些扎实的基本功:

要成为OSSIM系统运维人员,面对问题时头脑中必须有一个清晰、明确的故障解决思路,一般有以下5个步骤。

以上只是解决问题的基本步骤,实验失败是一段充满教育性的成长经历,没有失败积累经验,何谈成功呢?失败次数越多,你对它的理解就越深,离突破性成功就越近。但很多人却不这么看,他们在安装配置OSSIM的过程中,接连遇到一两个失败的经历就对这款工具没什么兴趣以至于最后放弃。

在安装阶段遇到的典型问题有下面这些。

除此之外,还有路由不通、图形无法显示、抓不到包、采集不到日志等许多故障。无论你是新手还是专家,只要坚持学习OSSIM,就会不断遇到各种问题。老问题解决了,换个环境,新问题还会不断发生。如果都能逐一化解,那么你的业务能力和分析问题、解决问题的能力会逐步增强。

在系统出现问题时,大家通常会上网寻找答案,比如通过QQ群、百度、谷歌或者AlienVault社区、Blog等方式。在这些地方,他们往往将自己的报错信息粘到网上,便坐等答案出现(其实“坐等”“跪求”都无济于事)。

在专家眼里,是否对你提出的技术问题进行解答,很大程度上取决于提问的方式与此问题的难度。一些读者在提问前不深入思考,也不做功课,而是随便提出问题,想利用守株待兔的方式轻易获取问题的答案,这样能取得真经吗?不经历风雨又怎能见到彩虹!

从另一个方面看,专家会觉得你自己不愿意付出,在浪费他们的时间,因此你自然也不会得到想要的结果。专家最喜欢那些真正对问题有兴趣并愿意主动参与解决问题的人,而且只有提出有技术含量的问题,他才会花时间为你回答问题。

提问前的准备工作

作为提问者,必须表现出解决此问题的积极态度,应该提前做些功课,举例如下。

问题描述技巧

在描述问题时,请遵循以下技巧。

附件格式及注意事项

有些读者在提问时,喜欢贴一堆日志或者几张图然后发问,前因后果都不讲清楚,就想着获得答案。提问都懒得说清楚,专家也懒得回复。所以,请稍微花一些时间组织语言,把问题说清楚。注意体现文字的准确性和你思考问题的积极性。

最好把问题连同故障截图(提供完整截图)作为附件发给专家,建议使用标准的文件格式发送,以下是参考格式。

首先感谢我的父母多年来的养育之恩;其次感谢在我各个求学阶段给予帮助和支持的老师;最后感谢我的妻子,正因为有了她的精心照顾,我才能全身心地投入到图书创作中。

由于作者水平有限,书中难免会出现错误和不准确的地方,恳请读者批评指正。如果您有更多宝贵意见,欢迎给我发邮件或者通过我的微信公众号进行反馈。本书的勘误也会通过公众号进行发布。请读者扫描下面的二维码进行关注。

2019年7月    


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

本书提供如下资源:

要获得以上配套资源,请在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

如果您是教师,希望获得教学配套资源,请在社区本书页面中直接联系本书的责任编辑。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。

异步社区

微信服务号


关键术语

Snort规则为文本格式,存储在/etc/snort/rules中,如触发规则,Snort会有5种动作类型。

在OSSIM 4.1中HIDS使用了Snort 2.9.3版本,在配置文件/etc/snort/snort.conf中Snort提供了14种预处理插件,下面介绍7种常用预处理插件的功能。

Scapy是一个强大的交互式数据包处理程序,它不但能够构造或者解码网络协议数据包,还能够发送、捕捉、匹配请求和回复包等。Scapy可以处理端口扫描、路由跟踪、探测或网络发现(类似于hping、NMAP、arpspoof、arping、p0f的功能)。

Scapy有大部分网络协议的构造函数。Scapy可以根据函数构造一个或多个数据包。

看这样一个实例。在OSSIM中打开文件/etc/snort/rules/rpc.rules,找到第36行内容,如图1-1所示。

图1-1 Snort规则

下面分析触发规则。sid=1923的规则由3个content选项构成,在图1-1中标记为1、2、3。由于使用了UDP,所以不需要TCP三次握手和四次断开。

理解了content的含义之后,现在针对UDP进行测试,步骤如下。

步骤1.安装Scapy。

#apt-get update
#apt-get install scapy

步骤2.构造和发送数据包。

以IP类对象为例构造一个数据包,定义为UDP类对象。操作过程如图1-2所示。

图1-2 使用Scapy构造和发送数据包

该实例涉及两个对象:IP对象和UDP对象,其中UDP为IP的载荷。测试完成后按Ctrl+D组合键退出程序。

Snort有3种工作模式,分别为嗅探器模式、分组数据包记录模式与网络入侵检测模式。

Snort使用Libpcap包捕获库。在该模式下,Snort使用网络接口的混杂模式读取并解析数据包。该模式使用的命令如下所示。

localhost:~# snort -v
Running in packet dump mode
        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Decoding Ethernet
        --== Initialization Complete ==--
   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.3.1 IPv6 GRE (Build 40) 
   ''''  By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
           Copyright (C) 1998-2012 Sourcefire, Inc., et al.
           Using libpcap version 1.1.1
           Using PCRE version: 8.02 2010-03-19
           Using ZLIB version: 1.2.3.4

Commencing packet processing (pid=5053) 

注意,这里的参数是小写的字母v,大写字母V用来显示Snort版本。以上只显示了TCP/IP网络数据包头信息,如果想查看应用层数据信息,则需要输入以下命令。

#snort –vd

此命令不会将日志记录到/var/log/snort/目录中。

Snort还可以提取部分感兴趣的数据,例如输入如下命令只读取有关ICMP包的数据:

#snort –dvr snort.log.140493321 icmp

输入如下命令只读取有关TCP包的数据:

#snort –dvr snort.log.140493321 tcp

如果只记录某个网段的数据,操作命令如下(注意,当前有log目录):

alienvault:~# snort -vde -l ./log -h 10.32.14.0/24

该命令的部分输出如下:

Running in packet logging mode
        --== Initializing Snort ==--
Initializing Output Plugins!
Log directory = ./log    //日志存储路径
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".    //从eth0网卡获取网络流量
Decoding Ethernet
        --== Initialization Complete ==--
   ,,_     -*> Snort! &lt;*-
  o"  )~   Version 2.9.3.1 IPv6 GRE (Build 40) 
   ''''  By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
           Copyright (C) 1998-2012 Sourcefire, Inc., et al.
           Using libpcap version 1.1.1
           Using PCRE version: 8.02 2010-03-19
           Using ZLIB version: 1.2.3.4

Commencing packet processing (pid=4569)    //开始数据包处理进程
^C*** Caught Int-Signal
=======================================================================
Run time for packet processing was 5.193675 seconds    //分析数据包的时间开销
Snort processed 7 packets.
Snort ran for 0 days 0 hours 0 minutes 5 seconds
   Pkts/sec:                1        //接收数据包的平均速率(单位为包/秒)
=======================================================================
Packet I/O Totals:          //网络数据包输入/输出总计
   Received:                7    //已接收数量
   Analyzed:                7 (100.000%)  //已分析数量
    Dropped:                0 (  0.000%)
   Filtered:                0 (  0.000%)
Outstanding:                0 (  0.000%)
   Injected:                0
=======================================================================
Breakdown by protocol (includes rebuilt packets):    //按协议进行分类(包括重建的数据包)
        Eth:                7 (100.000%)
       VLAN:                0 (  0.000%)
        IP4:                4 ( 57.143%)
       Frag:                0 (  0.000%)
       ICMP:                0 (  0.000%)
        UDP:                0 (  0.000%)
        TCP:                4 ( 57.143%)
        IP6:                0 (  0.000%)
    IP6 Ext:                0 (  0.000%)
   IP6 Opts:                0 (  0.000%)
      Frag6:                0 (  0.000%)
      ICMP6:                0 (  0.000%)
       UDP6:                0 (  0.000%)
       TCP6:                0 (  0.000%)
     Teredo:                0 (  0.000%)
    ICMP-IP:                0 (  0.000%)
      EAPOL:                0 (  0.000%)
    IP4/IP4:                0 (  0.000%)
    IP4/IP6:                0 (  0.000%)
    IP6/IP4:                0 (  0.000%)
    IP6/IP6:                0 (  0.000%)
        GRE:                0 (  0.000%)
    GRE Eth:                0 (  0.000%)
   GRE VLAN:                0 (  0.000%)
    GRE IP4:                0 (  0.000%)
    GRE IP6:                0 (  0.000%)
GRE IP6 Ext:                0 (  0.000%)
   GRE PPTP:                0 (  0.000%)
    GRE ARP:                0 (  0.000%)
    GRE IPX:                0 (  0.000%)
   GRE Loop:                0 (  0.000%)
       MPLS:                0 (  0.000%)
        ARP:                3 ( 42.857%)
        IPX:                0 (  0.000%)
   Eth Loop:                0 (  0.000%)
   Eth Disc:                0 (  0.000%)
   IP4 Disc:                0 (  0.000%)
   IP6 Disc:                0 (  0.000%)
   TCP Disc:                0 (  0.000%)
   UDP Disc:                0 (  0.000%)
  ICMP Disc:                0 (  0.000%)
All Discard:                0 (  0.000%)
      Other:                0 (  0.000%)
Bad Chk Sum:                2 ( 28.571%)
    Bad TTL:                0 (  0.000%)
     S5 G 1:                0 (  0.000%)
     S5 G 2:                0 (  0.000%)
      Total:                7
========================================================================
Snort exiting

下面继续讲解更复杂的实验,实验环境为OSSIM 4。在命令行上启动Snort:

#snort –l /var/log/snort/ -c /etc/snort/snort.conf

按Ctrl+C组合键退出程序,收到的信息如下所示:

[ Port Based Pattern Matching Memory ]
+- [ Aho-Corasick Summary ] -------------------------------------
| Storage Format    : Full-Q 
| Finite Automaton  : DFA
| Alphabet Size     : 256 Chars
| Sizeof State      : Variable (1,2,4 bytes)
| Instances         : 144
|     1 byte states : 132
|     2 byte states : 12
|     4 byte states : 0
| Characters        : 67366
| States            : 41455
| Transitions       : 1910758
| State Density     : 18.0%
| Patterns          : 4676
| Match States      : 4776
| Memory (MB)       : 21.56
|   Patterns        : 0.49
|   Match Lists     : 1.01
|   DFA
|     1 byte states : 0.96
|     2 byte states : 18.82
|     4 byte states : 0.00
+----------------------------------------------------------------
[ Number of patterns truncated to 20 bytes: 1332 ]
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Reload thread starting...
Reload thread started, thread 0x7fd8f6273700 (5649)
Decoding Ethernet

        --== Initialization Complete ==--

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.3.1 IPv6 GRE (Build 40) 
   ''''  By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
           Copyright (C) 1998-2012 Sourcefire, Inc., et al.
           Using libpcap version 1.1.1
           Using PCRE version: 8.02 2010-03-19
           Using ZLIB version: 1.2.3.4

           Rules Engine: SF_SNORT_DETECTION_ENGINE  Version 1.16  <Build 18>
           Preprocessor Object: SF_GTP (IPV6)  Version 1.1  <Build 1>
dcerpc2 Preprocessor Statistics
  Total sessions: 0
========================================================================
SIP Preprocessor Statistics
  Total sessions: 0
========================================================================
Snort exiting

警报数即为在日志中看到的记录数,两者一致,在另一个控制台查看日志详情,如下所示:

#tail –f /var/log/auth.log
Apr  5 06:24:04 alienvault snort[4133]: [1:2013504:3] ET POLICY GNU/Linux APT User- Agent Outbound likely related to package management [Classification: Not Suspicious Traffic] [Priority: 3] {TCP} 192.168.11.201:34939 -> 193.62.202.28:80
Apr  5 06:24:04 alienvault snort[4133]: [1:2013504:3] ET POLICY GNU/Linux APT User- Agent Outbound likely related to package management [Classification: Not Suspicious Traffic] [Priority: 3] {TCP} 192.168.11.201:34939 -> 193.62.202.28:80
Apr  5 06:24:04 alienvault snort[4133]: [1:2013504:3] ET POLICY GNU/Linux APT User- Agent Outbound likely related to package management [Classification: Not Suspicious Traffic] [Priority: 3] {TCP} 192.168.11.201:34331 -> 52.28.229.156:80
Apr  5 06:24:04 alienvault snort[4133]: [1:2013504:3] ET POLICY GNU/Linux APT User- Agent Outbound likely related to package management [Classification: Not Suspicious Traffic] [Priority: 3] {TCP} 192.168.11.201:34331 -> 52.28.229.156:80
Apr  5 06:24:04 alienvault snort[4133]: [1:2013504:3] ET POLICY GNU/Linux APT User- Agent Outbound likely related to package management [Classification: Not Suspicious Traffic] [Priority: 3] {TCP} 192.168.11.201:34331 -> 52.28.229.156:80
Apr  5 06:24:04 alienvault snort[4133]: [1:2013504:3] ET POLICY GNU/Linux APT User- Agent Outbound likely related to package management [Classification: Not Suspicious Traffic] [Priority: 3] {TCP} 192.168.11.201:34939 -> 193.62.202.28:80
Apr  5 06:24:05 alienvault snort[4133]: [1:2013504:3] ET POLICY GNU/Linux APT User- Agent Outbound likely related to package management [Classification: Not Suspicious Traffic] [Priority: 3] {TCP} 192.168.11.201:34939 -> 193.62.202.28:80
Apr  5 06:24:05 alienvault snort[4133]: [1:2013504:3] ET POLICY GNU/Linux APT User- Agent Outbound likely related to package management [Classification: Not Suspicious Traffic] [Priority: 3] {TCP} 192.168.11.201:34331 -> 52.28.229.156:80
Apr  5 06:24:05 alienvault snort[4133]: [1:2013504:3] ET POLICY GNU/Linux APT User- Agent Outbound likely related to package management [Classification: Not Suspicious Traffic] [Priority: 3] {TCP} 192.168.11.201:34331 -> 52.28.229.156:80

此时,我们还可以在SIEM控制台中看到经归一化处理的Snort事件,如图1-3所示。

图1-3 SIEM控制台中显示的Snort事件

网络入侵检测模式集成了嗅探器模式和日志模式(该模式下会把抓取的数据包存放到指定目录中),并且需要载入Snort规则库才能正常工作。操作命令如下:

#snort –vde –l ./log –h 10.32.14.0/24 –c /etc/snort/snort.conf

注意,当前目录下已有log目录。如果指定了“-l ./log”参数,则系统会将日志中原来的/var/log/snort/转储到当前目录的log目录下。

Snort不仅检测IP包头的数据,而且还对数据包进行深度检测。例如在OSSIM系统中,打开文件/etc/snort/rules/deleted.rules,查看第5807行的规则,如图1-4所示。

图1-4 Snort规则

该规则表示,如果一个包头的载荷中含有“I|00|P|00|C|00 24 00 00 00|”,则表明从外部网络发送给运行SMB服务的计算机的TCP流量触发了Snort报警。在检测中发现,“sid=538”所占比例较大,这种载荷可能会引起一些旧版本的Windows系统发生缓冲区溢出,最终导致机器崩溃。

DOS攻击类型有很多,这里以Chargen/Echo DoS攻击为例加以说明。Chargen服务端口为UDP 19,Echo为UDP 7。当UDP Chargen服务器收到一个数据包后,就会发回一个确认数据包。若它发现与客户端连接存在,则会不断发送数据包,这种往返发送的数据包就会被放大,以致占满整个网络带宽。在这里攻击者伪造了数据包,在两台开放Chargen/Echo的服务器上互相发送流量,从而造成资源耗尽,如图1-5所示。

图1-5 DoS攻击的例子

在OSSIM中打开文件/etc/snort/rules/dos.rules,第一行内容如下:

alert udp any 19 <> any 7 (msg:"DOS UDP echo+chargen bomb"; flow:to_server; reference: cve,1999-0103; reference:cve,1999-0635; classtype:attempted-dos; sid:271; rev:9;)

该特征检测的DoS条件是Chargen/Echo服务无限循环。还有一些DoS攻击会出现异常的数据输入,这些输入的内容会使服务器瘫痪。当然这是比较老的漏洞,新的操作系统不存在这种问题。

例如,记录到磁盘/var/log/newdir/目录的操作命令如下:

新建/var/log/newdir/目录文件
#snort –ved –l _/var/log/newdir/
Snort默认将日志记录到/var/log/snort/, 使用“-l”参数可改变路径。

此时Snort会把数据链路层、TCP/IP报头及应用层信息写入当前目录下的snort.log.140493321文件中,而且文件格式为二进制。

注意,“-l”参数是小写字母l。

如果想查看所记录的日志,就得使用“r”参数,操作实例如下:

#snort –dvr snort.log.140493321

有些特殊场合会同时使用多套IDS系统,在安装OSSIM的同时如果还要使用HP-Arcsight分析网络数据包,这时传统端口镜像分析器(SPAN)的方法无法满足要求。

对于上面的情况,可以采用网络分流器设备(Network Tap)来解决,它是一个独立的硬件,支持千兆甚至是万兆网络环境(比如Gigamon的方案),而且它不会对已有网络设备的负载带来影响。

手动编译安装Snort时所需的准备工作如下所示。

步骤 1.准备软件环境。在安装前,必须在交换机上设置SPAN。中高端Cisco交换机都有SPAN功能。SPAN须为一个专用端口。以下是在虚拟机环境下的实验,须把网卡设置为混杂模式。

步骤2.安装VMware Workstations虚拟机。准备SecureCRT工具。

步骤3.到异步社区的本书页面中统一获取安装资源。

步骤4.使用镜像CentOS-6.8-x86_64-mini在虚拟机中安装操作系统。

步骤5.重启系统后设置系统IP、网关及DNS。

默认安装时,网络IP是自动获取的,需要改成静态IP地址。

#ifconfig -a                                   //查看网卡配置信息
#vi/etc/sysconfig/network-scripts/ifcfg-eth0 //编辑网卡配置文件
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="00:0C:29:BA:53:4E"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="685d0725-02ab-41b9-b9bf-6a52fc68c0f8"

修改为静态IP地址的方法是将BOOTPROTO="dhcp"中的"dhcp"改为"static",然后增加以下内容(内网IP配置):

IPADDR=192.168.91.29
NETMASK=255.255.255.0
GATEWAY=192.168.91.2
DNS1=192.168.91.2
DNS2=8.8.8.8                //DNS地址的配置根据当地网络供应商进行添加

最后保存退出,重启网络服务。

步骤6.复制软件到指定目录。

将libdnet-1.12.tgz、daq-2.0.4.tar.gz、snort-2.9.7.0.tar.gz、snortrules-snapshot-2970.tar.gz这4个文件复制到CentOS 6.8系统/usr/local/src/目录下。

经过以上6个步骤之后,Snort安装的准备工作完成。另外,Snort安装配置路线图参见附录中的图1、图2。网络安装包名称及用途参见附录中的表1~表3。

准备工作完成之后,接着开始正式安装Snort。编译安装Snort需要如下几个步骤。

步骤1.安装基本环境和依赖包。

#yum install -y gcc gcc-c++ flex bison zlib* libxml2 libpcap* pcre* tcpdump git libtool curl man make

步骤2.解压Libdnet、DAQ及Snort安装包。

在服务器的安装配置过程中,大家很可能会到官网下载最新版本的源码包,但是那样就会遇到各种依赖包缺失的问题,导致无法安装成功。因为有些软件(比如Snort)要在DAQ(Data AcQuisition,数据采集器)library安装好之后才能继续安装,而只有Libdnet安装完成,才能安装DAQ。操作如下:

#cd /usr/local/src
#tar -zxvf libdnet-1.12.tgz
#tar -zxvf daq-2.0.4.tar.gz
#tar -zxvf snort-2.9.7.0.tar.gz

下面必须依次安装Libdnet、DAQ和Snort这3个包。

#cd /usr/local/src/libdnet-1.12/
#./configure
#make && make install
#cd daq-2.0.4
#./configure
#make && make install
#cd /usr/local/src/snort-2.9.7.0
#./configure --enable-sourcefire
#make && make install

步骤3.添加用户和组。

创建用户和组,并设置权限。在root身份下解包的文件权限都与root有关,所以要修改成Snort用户的属主和相关权限。

#groupadd -g 40000 snort           //新添加一个Snort组
#useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS -g snort
                                   //将Snort用户加入Snort组,并且不允许登录系统

步骤4.新建目录/var/log/snort并设置其属性。

#mkdir /var/log/snort
#chown –R snort:snort /var/log/snort

步骤5.配置Snort。

#mkdir /etc/snort/
#cd /etc/snort
# tar –zxvf /usr/local/src/snortrules-snapshot-2970.tar.gz –C .
#cp /etc/snort/etc/sid-msg.map /etc/snort
#cd /etc/snort/
#cp /usr/local/src/snort-2.9.7.0/etc/* .
#cd /etc/snort
#chown -R snort:snort *
#touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules

在/etc/snort/rules下新建white_list.rules和black_list.rules这两个文件。

#vi /etc/snort/snort.conf

设置网络变量,将第45行的ipvar HOME_NET any改为ipvar HOME_NET 192.168.x.x网段,并写成CIDR格式。也可以添加多个网段,来看下面这个例子。

ipvar HOME_NET  [192.168.0.0/16,172.16.0.0/16]
将48行ipvar EXTERNAL_NET any     改为     ipvar EXTERNAL_NET!$HOME_NET   
第104行 var RULE_PATH ../ruls   改为   var RULE_PATH /etc/snort/rules
第105行 var SO_RULE_PATH  ../so_rules 改为var SO_RULE_PATH   /etc/snort/so_rules
第106行 var PREPROC_RULE_PATH ../preproc_rules 改为 var PREPROC_RULE_PATH/etc/snort/ preproc_rules
第113行 var WHITE_LIST_PATH ../rules  改为  var WHITE_LIST_PATH   /etc/snort/rules
第114行 var BLACK_LIST_PATH ../rules    改为 var BLACK_LIST_PATH   /etc/snort/rules
config logdir:/var/log/snort/

Snort可通过数据库插件(spo_database.c和spo_databaseh)将预处理器输出的日志写入数据库,但下面的配置一方面将报警写入alert文件,另一方面将预处理器输出的日志写入到unified2格式的二进制文件中,以供Barnyard2读取使用。

将第521行修改成如下内容:

output unified2:filename snort.log,limit 128

以上几处修改完成后,保存退出。

步骤6.新建目录snort_dynamicrules并设置权限。

#mkdir -p /usr/local/lib/snort_dynamicrules
#chown -R snort:snort /usr/local/lib/snort_dynamicrules
#chmod -R 755 /usr/local/lib/snort_dynamicrules

步骤7.在/usr/sbin/目录下新建名为Snort的软链接文件。

#cd /usr/sbin
#ln -s /usr/local/bin/snort snort

步骤8.添加测试规则。

#vi /etc/snort/rules/local.rules

加入如下内容:

alert icmp any any -> $HOME_NET any (msg:"ICMP Packet Detected";sid:1000003;rev:1;)

步骤9.测试Snort。

#snort -T -i eht0 -u snort -g snort -c /etc/snort/snort.conf

如果配置正确,则系统启动后显示如下内容。

pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Set gid to 113
Set uid to 109
        --== Initialization Complete ==--
   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.3.1 IPv6 GRE (Build 40) 
   ''''  By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
           Copyright (C) 1998-2012 Sourcefire, Inc., et al.
           Using libpcap version 1.1.1
           Using PCRE version: 8.02 2010-03-19
           Using ZLIB version: 1.2.3.4
           Rules Engine: SF_SNORT_DETECTION_ENGINE  Version 1.16  <Build 18>
           Preprocessor Object: SF_GTP (IPV6)  Version 1.1  <Build 1>
           Preprocessor Object: SF_SIP (IPV6)  Version 1.1  <Build 1>
           Preprocessor Object: SF_SMTP (IPV6)  Version 1.1  <Build 9>
           Preprocessor Object: SF_IMAP (IPV6)  Version 1.0  <Build 1>
           Preprocessor Object: SF_DNS (IPV6)  Version 1.1  <Build 4>
           Preprocessor Object: SF_REPUTATION (IPV6)  Version 1.1  <Build 1>
           Preprocessor Object: SF_DCERPC2 (IPV6)  Version 1.0  <Build 3>
           Preprocessor Object: SF_MODBUS (IPV6)  Version 1.1  <Build 1>
           Preprocessor Object: SF_SSH (IPV6)  Version 1.1  <Build 3>
           Preprocessor Object: SF_SDF (IPV6)  Version 1.1  <Build 1>
           Preprocessor Object: SF_POP (IPV6)  Version 1.0  <Build 1>
           Preprocessor Object: SF_SSLPP (IPV6)  Version 1.1  <Build 4>
           Preprocessor Object: SF_FTPTELNET (IPV6)  Version 1.2  <Build 13>
           Preprocessor Object: SF_DNP3 (IPV6)  Version 1.1  <Build 1>
Snort successfully validated the configuration!
Snort exiting

如出现“Snort successfully validated the configuration!”的提示,则表示安装配置成功。

步骤10.用ping命令测试。

用ping命令进行测试的目的是为了产生报警。ping命令使用ICMP协议,在IDS中使用Libpcap函数所捕获的也是ICMP数据包。下面在Snort主机上操作:

#snort -i eth0 -c /etc/snort/snort.conf -A fast

与此同时,日志文件记录在/var/log/snort/alert和/var/log/snort/snort.log中。可用下面的命令查看。

#cd /var/log/snort/
#tail -f /var/log/snort/alert

alert文件收到报警,代表本实验成功,下面要将这些报警存储到数据库。

将Snort报警存入MySQL数据库需要如下几个步骤。

步骤1.安装MySQL数据库及PHP扩展。

#yum install -y mysql-server mysql-devel php-mysql php-pear php-gd libtool php-imap php-ldap php-mbstring php-odbc php-pear php-xml php-pecl-apc
#chkconfig --level 235 mysqld on  //将MySQL服务设置为在运行级别为2、3、5时都是开启状态
#/etc/init.d/mysqld start

步骤2.为数据库管理员root赋予密码。

#/usr/bin/mysqladmin -u root password '123456' 

注意,root用户登录phpMyAdmin时,同样使用这个密码。

步骤3.创建Snort数据库并设定读取权限。

#mysql -u root -p

输入步骤2中设置的密码“123456”。

mysql>create database snort;
mysql>use snort;
mysql>create user 'snort'@'localhost' IDENTIFIED BY '123456';

在以上命令中,“123456”是MySQL中用户Snort的密码。

接着创建名为snort、密码为“123456”的数据库用户,并赋予名为“snort”的数据库权限(先解压barnyard2-1.9.tar.gz包)。

mysql>grant create,select,update,insert,delete on snort.* to snort@localhost identified by '123456';
mysql>set password for ‘snort’@’localhost’=password('123456'); //为用户snort设置访问密码
mysql>source /usr/local/src/barnyard2-1.9/schemas/create_mysql;  //该命令不可重复输入
mysql>show tables;
mysql>flush privileges;   //刷新数据库权限
mysql>exit

注意:先解压barnyard2-2-1.13压缩包;在执行前确保Snort库被选中;barnyard2-2-1.13所在路径要正确(使用绝对路径)。

步骤4.安装和配置Barnyard2。

Barnyard2的作用是读取Snort产生的二进制事件文件并存储到MySQL中。Snort的配置文件自身含有插件,它允许将Snort报警记录到MySQL中,但这样一来,系统数据会激增。当IDS系统检测到攻击行为时,它会用INSERT语句向数据库中写入数据,导致更新非常慢。所以如果直接将Snort输出到数据库,在数据量增大时这种方案的效率并不高,故使用外部代理将报警输出到Barnyard2。

#cd /usr/local/src/
#tar zxvf barnyard2-1.9.tar.gz
#cd barnyard2-1.9/
#./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql  //此处配置参数很重要,切勿出错

#make               //见到如下内容后,才可继续安装

只有确保上面关键两步不出错,才能继续安装。

#make install

首先在/var/log/中创建目录Barnyard2和文件barnyard2.waldo。

#mkdir /var/log/barnyard2
#touch /var/log/snort/barnyard2.waldo
#chown snort.snort /var/log/snort/barnyard2.waldo

与Snort配置类似,Barnyard的初始化配置也是通过复制已有的.conf配置文件来完成。因此先将Barnyard2的配置模板文件复制到/etc/snort目录下。

#cp /usr/local/src/barnyard2-1.9/etc/barnyard2.conf /etc/snort
#vi /etc/snort/barnyard2.conf

找到对应行并将其修改成如下内容:

第44行     config logdir:/var/log/barnyard2       //该目录权限为snort.snort
第56行     config hostname: localhost
第57行     config interface: eth0
第131行    config waldo_file:/var/log/snort/barnyard2.waldo

修改完成之后保存并退出。

下面这条语句用来设置数据库访问权限,其中定义了用户名为snort,密码为123456,数据库名称为snort,主机名为localhost。

第318行  output database: log,mysql,user=snort password=123456 dbname=snort host=localhost

编辑完成后保存退出。

#chown snort.snort /var/log/barnyard2
#snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 –D

#barnyard2 –c /etc/snort/barnyard2.crnf –d/var/log/snort/
 -f snort.log –w /var/log/snort/barnyard2 waldo
 -g snort –u snort -T

此时不会看到输出结果,因为程序在后台运行(“-D”参数表示后台运行)。

同样ping主机,继续执行以下命令。

#barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log –w /var/log/snort/barnyard2.waldo

命令参数的解释如下所示。

如果在以上显示中发现最后一行出现“Waiting for new spool file”,则表示上面的操作成功。在/var/log/snort目录下有一些snort.log+times_stamp的二进制文件,这些文件由Snort输出插件所生成。

步骤5.使用下述命令查询报警信息是否存入数据库。

#mysql -u snort -p -D snort -e "select count(*) from event"

实际操作效果如下所示。

如果在count(*)下方没有数字,则表示报警信息没有存入数据库,那么需要从头检查配置过程。参数含义如下。

 [root@localhost ~]# barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log -w /var/log/snort/barnyard2.waldo -g snort -u snort
Running in Continuous mode
         --== Initializing Barnyard2 ==--
Initializing Input Plugins!
Initializing Output Plugins!
Parsing config file "/etc/snort/barnyard2.conf"
Log directory = /var/log/barnyard2
database: compiled support for (mysql)
database: configured to use mysql
database: schema version = 107
database:           host = localhost
database:           user = snort
database:  database name = snort
database:    sensor name = localhost:eth0
database:      sensor id = 1
database:     sensor cid = 1
database:  data encoding = hex
database:   detail level = full
database:     ignore_bpf = no
database: using the "log" facility

        --== Initialization Complete ==--

  ______   -*> Barnyard2 <*-
 / ,,_  \  Version 2.1.9 (Build 263)
 |o"  )~|  By the SecurixLive.com Team: http://www.securixlive.com/about.php
 + '''' +  (C) Copyright 2008-2010 SecurixLive.

           Snort by Martin Roesch & The Snort Team: http://www.snort.org/team.html
           (C) Copyright 1998-2007 Sourcefire Inc., et al.

WARNING: Ignoring corrupt/truncated waldofile '/var/log/snort/barnyard2.waldo'
Waiting for new spool file

在Q009、Q010和Q011这3个问题中,我们已经安装了Snort系统并将报警信息存入数据库。这里将讲解安装BASE(Basic Analysis and Security Engine)的步骤,Barnyard将MySQL中的Snort报警信息通过Web展示的具体原理如图1-6所示。

图1-6 Barnyard存储原理

要将存储在数据库中的日志展现在Web端,需要安装BASE(入侵检测事件展示的前端程序),这里用到的版本是base-1.4.5.tar.gz。既然用到了Web服务,那么首先需要安装好LAMP环境,然后再安装BASE包。此处服务器IP地址为192.168.1.120。具体安装步骤如下。

步骤1.安装httpd、mysql-server、mysql-devel、php、php-mysql、php-mbstring、php-mcrypt。

命令如下所示。

#yum install –y httpd mysql-server php php-mysql php-mbstring php-mcrypt mysql-devel php-gd 

步骤2.安装PHP插件(mcrypt、libmcrypt、libmcrypt-devel),命令如下所示。

#yum install –y mcrypt libmcrypt libmcrypt-devel php-pear

更新插件的时间比较长,操作如下所示。

#pear upgrade pear

步骤3.继续执行下列命令。

#pear channel-update pear.php.net

安装 Image_Graph-alpha、Image_Canvas-alpha、Image_Color、Numbers_Roman 这 4个包。

操作如下所示。

#pear channel-update pear.php.net
#pear install Image_Graph-alpha Image_Canvas-alpha Image_Color Numbers_Roman

步骤4.安装ADOdb包。

虽然PHP是建构Web系统强有力的工具,但是PHP存取数据库的功能并未标准化,MySQL使用了另一种不同且不兼容的应用程序接口。此时需要使用ADOdb作为中介进行转换。ADOdb的最大优点是不管后端数据库如何,存取数据库的方式都是一致的。目前ADOdb的最新版本是5.20,它支持的数据库种类非常多,例如MySQL、PostgreSQL、Oracle等。下面开始安装ADOdb,首先将adodb520.tar.gz解压到/var/www/html/目录下。

#tar zxvf adodb519.tar.gz –C /var/www/html/

解压后发现增加了一个目录adodb5,将这个目录改名为adodb。

#mv /var/www/html/adodb5 /var/www/html/adodb

步骤5.解压BASE包。

#tar zxvf base-1.4.5.tar.gz –C /var/www/html

解压后发现增加了一个目录base-1.4.5,接着需要对它重命名。

#mv /var/www/html/base-1.4.5/ /var/www/html/base

步骤6.修改PHP配置文件。

#vi /etc/php.ini

将第513行内容改成如下内容。

error_reporting = E_ALL & ~E_NOTICE

修改完毕保存并退出。

步骤7.改变属组并设置权限。

#chown –R apache:apache /var/www/html
#chmod -R 755 /var/www/html

步骤8.重启MySQL、Web和防火墙服务。

#service mysqld restart     //启动数据库
#service httpd restart      //重启Web服务
#service iptables stop      //关闭防火墙

步骤9.在Web界面设置BASE。

打开浏览器输入网址http://192.168.1.120/base/setup/index.php,输入完毕后弹出安装界面,如图1-7所示。

单击Continue按钮,开始选择语言和ADOdb路径,如图1-8所示。

语言项选择中文,ADOdb路径中输入/var/www/html/adodb,单击Continue按钮。接下来输入数据库名称、访问用户名和密码,如图1-9所示。

图1-7 开始设置BASE

图1-8 设置ADOdb路径

图1-9 设置数据库

下一步将管理员名称设置为root,密码依然是“123456”,Full Name不必设置,如图1-10所示。

图1-10 设置root密码

下一步开始创建BASE表结构,如图1-11、图1-12所示。

图1-11 准备创建BASE表结构

图1-12 BASE表创建完成

如果看到表acid有创建完成的提示并且BASE tables状态显示为“DONE”,则表示安装完成。单击屏幕最下方的step5…按钮结束安装。在客户机终端命令行中ping主机192.168.1.120,随后就能在BASE界面中收到ICMP报警,如图1-13所示。

图1-13 收到报警

如果在Web的BASE界面中收到ICMP报警,则表明BASE安装设置完成。

步骤10.安装phpMyAdmin。

#yum install phpmyadmin
修改配置文件
#vi /etc/httpd/conf.d/phpMyAdmin.conf
注销第24行的Deny from ALL
#service httpd restart
在Web界面下输入用户名snort,密码为123456

如果要删除报警,首先勾选需要删除的报警,然后在“动作”下拉菜单中选择“删除报警”选项,如图1-14所示。

图1-14 删除报警

PHP IDS是一套基于PHP 5.6环境开发的Web IDS系统,它利用事先定义的规则,逐项比对使用者的输入资料,以达到预防入侵的目的。PHP IDS的规则采用XML编写,放置在/usr/share/ ossim/include/IDS/default_filter.xml和all_filter.xml文件中,这些规则可以检测跨站脚本XSS攻击和SQL注入攻击。

OSSIM框架巧妙地利用了PHP IDS的特性并与Curl类库相结合,通过API分析检测来自Web应用程序的交互。IDS检测到的攻击信息可存储到数据库。

为了说明IP碎片攻击对Snort的危害,先看个例子。当路由器准备将IP分组发送到网络,而该网络又无法将这个IP分组一次全部发送完时,路由器必须将该分组分成小块,使其长度能够满足这个网络对分组大小的限制,这些分割出来的小块就叫碎片(fragment)。因此,小 IP报文又称为IP碎片。IP碎片可以独立地通过不同的路径进行转发,而且碎片不一定按照次序到达。当到达目的主机后,目的主机会重组IP碎片。现在的IDS产品基本都具有良好的IP碎片重组能力,因此IP碎片问题不会给IDS造成太大的麻烦。但是,像碎片重叠之类的技术仍会带来问题。

攻击者会利用碎片重叠方法实施攻击。当两个碎片有部分数据重叠时,其中一个碎片的数据会覆盖另一个碎片内的重叠数据。至于哪一个碎片重叠部分的数据被覆盖则由操作系统类型决定。例如,在Windows 2000和Solaris 2.x系统中,若碎片frag1先于frag2到达,frag1的数据会覆盖frag2的重叠部分;若两个碎片不按正常顺序到达,则frag2的数据会覆盖frag1的重叠部分。

图1-15中显示的是通过OSSIM的NIDS功能采集的报警,包含了Snort规则,文件名为emerging-policy.rules。

图1-15 Snort规则

下面通过表1-1对Snort规则选项逐条进行解释。

表1-1 Snort规则选项解析

规则选项 解 释
msg 当数据包检测符合规则时,发出报警信息,并将msg这个规则选项所指定的文字信息记录并显示。语法格式为msg:<message text>。在图1-15中显示为“ET POLICY Outdated Windows Flash Version IE”
reference 主要用来提供Snort引用的其他外部攻击识别系统,包括Bugtraq、Nessus、OSVDB、ArachNIDS
gid 这是可选项,用来识别所设定的规则内容属于Snort规范中的哪些事件,这些事件识别码都会预先定义在/etc/snort/gen-msg.map文件内。语法格式为gid:<generator id>。预设规则如果不使用gid识别码,那么可直接使用snort general alert进行运作,若自定义gid识别码,则最好从1 000 000以后开始编码
sid 写规则的必选项,识别所使用的Snort规则项目,这些Snort所使用的规则项目预先定义在/etc/snort/sid-msg.map文件(大小约2.7MB)内。语法格式为sid:<snort rules id>。sid所使用的范围基本上分为3大部分,具体如下。
●小于100:保留。
●100~1 000 000:Snort官方所预设配置的规则项目。
●大于1 000 000:本机自定义的Snort规则项目。
classtype 用来将规则进行分类并且赋予一个预设的优先级。Snort提供了许多不同的规则分类,这些分类可以让Snort在运行时更有弹性。语法格式为classtype:<class name>
classtype分类 含 义
Attempted-admin 试图取得管理员权限
Successful-admin 已取得管理员权限
Policy-violation 潜在隐私入侵
Shellcode-detect 发现ShellCode攻击
Trojan-activity 发现木马攻击
Web-application-attack Web应用程序攻击
Attempted-dos 拒绝服务攻击
rev 修订识别码,搭配sid使用
priority 用来指定Snort规则的优先级,其语法格式为priority:< priority integer>。如果读者在规则中使用priority,在搭配使用classtype时,由于classtype中有一个预设优先级选项,若是这个选项值被启用,那么会覆盖priority规则选项中的值
threshold 该选项代表阈值,往往添加一个数值,例如threshold:type threshold, count 5,seconds 60表示60s内发生5次就会立即报警。track by_src表示跟踪统计源IP,track by_dst表示统计目标IP地址
content 该选项允许自定义关键字,进行数据包内容搜索。语法为content: [!]"<content string>",它可以搭配关键词进行搜索,具体功能如下。
content分类 含 义
Offset 它用来指定Snort规则在搜索数据包时要从哪一个地方开始搜索,语法格式为offset:<number>。例如alert tcp any any -> any 8080 (content:"cgi-bin/open"; offset 10;depth:6;)这条规则的含义是针对传入到8080端口的TCP数据包,跳过前面10个单位内容,在其后5个单位内容的搜索cgi-bin/open的字符串
Distance 指定Snort规则在搜索数据包内容时可搜索的内容
Within 指定修饰的匹配内容
Http_header 用来指定Snort规则在搜索数据包时,要以HTTP用户端连接请求的数据包的HTTP表头内容进行搜索。与其含义类似的关键词还有Http_cookie、Http_method、Http_uri等
pcre 表示在涉及Snort规则时允许使用与Perl相兼容的表达式
uricontent 表示允许使用者通过正规表达式处理URI内容,语法格式为uricontent: [!]"<content string>"

通过Reference参数为Snort的数据包检测引入新的外部参考系统。网络安全人员需要了解如何管理这个参考系统,OSSIM中具有良好的GUI管理界面来对其管理。引用类型可以从Web UI菜单CONFIGURATION→THREAT INTELLIGENCE进入,然后打开Date Source选项卡,在图1-16中单击MANAGE REFERENCES按钮后将会开管理界面。

图1-16 查看Snort引用类型

使用新建、编辑和删除引用功能,效果如图1-17所示。

图1-17 新建Snort引用

大家可以把外部引用形象地理解为论文中的参考文献。为了说清楚这个问题,首先进入SIEM控制台,并通过数据源过滤NIDS事件。事件名称之前的5个方块都内置一个有关该事件的外部引用,如图1-18所示。

图1-18 调用外部引用

第一个链接内容展示了EMERGING THREATS(简称Snort ET规则)检测规则,如图1-19所示。

图1-19 Snort检测规则(一)

第二个链接内容如图1-20所示。

图1-20 Snort检测规则(二)

第三个链接内容是赛门铣克旗下SecurityFocus所提供的信息,如图1-21所示。

图1-21 查看PHP SQL注入信息

注意,在OSSIM众多数据源中,只有NIDS模块才使用引用功能。

OSSIM5中的Suricata模块并不支持PF_RING,先看下列命令。

#suricata --build-info |grep pf_ring

从该命令的显示结果可知,它不支持Suricata。在具体的运行模式上,它拥有3种不同的多线程工作方式以应对不同的系统架构,这3种架构的特征分析如表1-2所示。

表1-2 Suricata运行模式的策略及特征比较

策略名

策略描述

特征

auto

模块通过缓冲区交互

模块间不存在阻塞,充分发挥计算性能,核间通信开销大

auto-fp

合并解码/接收,流重组/检测模块

减少核间通信,缓冲区空间小,流重组/检测模块计算负担重

worker

各自worker独立执行所有流程

核间开销低,计算负载大,模块间存在阻塞

所以在OSSIM 5的NIDS中并不支持PF_RING,而采用auto-fp模式。

1998年,美国国防部高级规划署(Defense Advanced Research Projets Agency,DARPA)在麻省理工学院的林肯实验室采集了各种网络攻击仿真数据,它采用tcpdump工具收集各种不同的网络流量和攻击手段的模拟数据,包含了数百万个连接记录。在 1999~2000 年间,林肯实验室又对这些数据进行了更新,业界统称其为DARPA 2000数据集。这些数据专门用来测试IDS系统的各项性能。

不论是从事网络入侵检测还是OSSIM测试,都需要攻击数据集。为了检验IDS的运行效果,需要重构攻击场景。运维工程师大多是利用攻击规则、步骤,及历史上的攻击数据生成攻击链来重构攻击场景,下面的操作展示了如何使用tcpdump进行重构。

这类数据格式为outside.tcpdump,这些文件为二进制格式,不能通过文本类工具打开。

读取方法如下:

#tcpdump –nnr outside.tcpdump

输出从略。

其中参数含义如下所示。

Snort默认不打印链路层包头信息,在命令行使用vde参数可以显示链路层信息,操作如下:

localhost:~# snort -vde 
Running in packet dump mode

        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Decoding Ethernet
        --== Initialization Complete ==--
   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.3.1 IPv6 GRE (Build 40) 
   ''''  By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
           Copyright (C) 1998-2012 Sourcefire, Inc., et al.
           Using libpcap version 1.1.1
           Using PCRE version: 8.02 2010-03-19
           Using ZLIB version: 1.2.3.4
Commencing packet processing (pid=11826)
10/12-00:47:45.896799 00:0C:29:BD:5D:B6 -> 00:50:56:C0:00:08 type:0x800 len:0x22
192.168.109.100:22 -> 192.168.109.1:55506 TCP TTL:64 TOS:0x10 ID:24755 IpLen:20
DgmLen:540 DF
***AP*** Seq: 0x2CE9F4DD  Ack: 0xB7E931A1  Win: 0x9  TcpLen: 20
7B 56 21 AA C7 F3 59 B4 FA EF 00 1E 4C 9C A3 28  {V!...Y.....L..(
E9 C3 67 5B E6 79 E2 D1 4D EF 61 51 31 96 8A 1B  ..g[.y..M.aQ1...
B3 1E AB 36 3B 02 A4 26 21 F8 29 89 97 02 54 CF  ...6;..&!.)...T.
50 09 9C C1 A7 79 57 57 81 C4 70 D8 F5 3E 26 36  P....yWW..p..>&6
CF 62 B2 2B 52 B8 60 3E 43 49 B3 31 85 BA F3 63  .b.+R.`>CI.1...c
… …

类似的还有以下命令:

localhost:~# snort -veX
Running in packet dump mode
        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Decoding Ethernet
        --== Initialization Complete ==--
   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.3.1 IPv6 GRE (Build 40) 
   ''''  By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
           Copyright (C) 1998-2012 Sourcefire, Inc., et al.
           Using libpcap version 1.1.1
           Using PCRE version: 8.02 2010-03-19
           Using ZLIB version: 1.2.3.4
Commencing packet processing (pid=12549)
10/12-00:50:28.580733 00:0C:29:BD:5D:B6 -> 00:50:56:C0:00:08 type:0x800 len:0x21
192.168.109.100:22 -> 192.168.109.1:55506 TCP TTL:64 TOS:0x10 ID:24816 IpLen:20
DgmLen:524 DF
***AP*** Seq: 0x2CEA3DB1  Ack: 0xB7E93925  Win: 0x9  TcpLen: 20
0x0000: 00 50 56 C0 00 08 00 0C 29 BD 5D B6 08 00 45 10  .PV.....).]...E.
0x0010: 02 0C 60 F0 40 00 40 06 7C 35 C0 A8 6D 64 C0 A8  ..`.@.@.|5..md..
0x0020: 6D 01 00 16 D8 D2 2C EA 3D B1 B7 E9 39 25 50 18  m.....,.=...9%P.
0x0030: 00 09 5D B5 00 00 7E B2 81 6A 3D 60 54 2F 28 F8  ..]...~..j=`T/(.
… …

这里的参数-X表示从数据链路层开始输出原始数据包。

注意,当将Snort作为IDS使用时,不建议在命令行下使用-vd尤其是-vde参数,因为详细模式会将数据包信息打印到控制台,这样将严重影响Snort的性能。

Snort输出插件用来将报警输出到屏幕或转储到文件。按照功能可将输出插件分为以下几类。

1.报警模式“-A alert-mode”

Snort工作在入侵检测模式下,它的报警模式(alert-mode)又可以细分为fast、full、unsock和none这4种模式。

fast是一种快速、简单的输出插件,之所以快是因为它只记录Timestamp(时间戳)、Signature(特征)、Source IP、DestinationIP、Source port、Destination port、TCP flags和Protocol,其他信息都不记录。下面在OSSIM V 3.1环境下使用如下命令。

localhost:~# snort -A fast |more
Running in packet dump mode

        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Decoding Ethernet
        --== Initialization Complete ==--
   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.3.1 IPv6 GRE (Build 40) 
   ''''  By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
           Copyright (C) 1998-2012 Sourcefire, Inc., et al.
           Using libpcap version 1.1.1
           Using PCRE version: 8.02 2010-03-19
           Using ZLIB version: 1.2.3.4

Commencing packet processing (pid=12783)

*** Caught Int-Signal
===============================================================
Run time for packet processing was 7.377172 seconds
Snort processed 16 packets.
Snort ran for 0 days 0 hours 0 minutes 7 seconds
   Pkts/sec:        2
… …

注意,如果希望将数据保存到文件(当不使用-l参数时,默认保存位置是/var/log/snort/)中,则命令如下:

#snort –A fast –h 10.32.14.0/24 –c /etc/snort/snort.eth0.conf

full将每个产生报警的IP地址解码后的包记录下来。full比fast记录的信息更全面。

把以上命令中“-A fast”换成“-A full”就可将每个警报记录下来。

unsock的作用是建立一个UNIX域管道并向它发送警报。当然其他进程也可对该管道进行监听,目的是实时接收Snort报警数据。

#snort –A unsock
10/12-00:53:30.641142 192.168.109.100:22 -> 192.168.109.1:55506
TCP TTL:64 TOS:0x10 ID:27249 IpLen:20 DgmLen:348 DF
***AP*** Seq: 0x2CFA2851  Ack: 0xB7E94BD5  Win: 0x9  TcpLen: 20
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
10/12-00:53:30.641235 192.168.109.1:55506 -> 192.168.109.100:22
TCP TTL:128 TOS:0x0 ID:23709 IpLen:20 DgmLen:40 DF
***A**** Seq: 0xB7E94BD5  Ack: 0x2CFA2851  Win: 0x805  TcpLen: 20
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
2.tcpdump格式输出

可将Snort日志输出成tcpdump文件格式,这样可以让其他工具读取tcpdump数据,操作如下。

#vi /etc/snort/snort.eth0.conf

找到大约第389行,启用output log_tcpdump: tcpdump.log。配置参数如下所示。

# unified2
# Recommended for most installs
# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types
output unified2: filename snort_eth0, limit 128
# Additional configuration for specific types of installs
# output alert_unified2: filename snort.alert, limit 128, nostamp
# output log_unified2: filename snort.log, limit 128, nostamp 
# syslog
 output alert_syslog: LOG_AUTH LOG_ALERT
# pcap
 output log_tcpdump: tcpdump.log
3.CSV格式输出

采用 CSV 格式的主要目的是希望向其他数据库或电子表格软件输入数据。CSV(Comma- Separated Value)采用逗号分隔值,格式为文本文件。CSV格式文件可记录24类不同字段,具体含义如表1-3所示。

表1-3 规则选项关键字含义

序号

关键字

含义

1

timestamp

时间戳

2

msg

特征码

3

proto

协议

4

src

源地址

5

srcport

源端口

6

dst

目标地址

7

dstport

目标端口

8

ethsrc

源MAC

9

ethdst

目标MAC

10

ethlen

以太网帧长度

11

tcpflags

TCP标志位

12

tcpseq

TCP序列号

13

tcpack

TCP ACK号

14

tcplen

TCP长度

15

tcpwindow

TCP窗口值

16

ttl

IP头的TTL的值

17

tos

IP头中TOS字段的值

18

id

IP头的分片ID值

19

dgmlen

数据报的总长度,包括数据报头和数据报文

20

iplen

IP包长度

21

icmptype

ICMP类型

22

icmpcode

ICMP代号,默认为0

23

icmpid

ICMP报文IP头的ID,默认随机分配

24

icmpseq

ICMP echo顺序号的值

为实现CSV格式输出,首先编辑snort_eth0.conf文件。

在其中添加output alert_csv: csv.out,后面默认有24个关键字。也可按图1-22所示的参数进行输入,CSV输出如下。

alienvault:/var/log/snort# tail -f csv.out 
07/15-00:29:51.254425 ,"GPL SHELLCODE x86 inc ebx NOOP",,,,,,,
07/15-00:29:51.357178 ,"GPL SHELLCODE x86 inc ebx NOOP",,,,,,,
07/15-00:29:54.541833 ,"ET P2P eMule Kademlia Hello Request",,,,,,,
07/15-00:29:54.541846 ,"ET P2P eMule Kademlia Hello Request",,,,,,,
07/15-00:31:55.606599 ,"ET DNS Non-DNS or Non-Compliant DNS traffic on DNS port Opcode 6 or 7 set - Likely Kazy",,,,,,,
4.Syslog输出

Syslog服务器能从网络设备中收集日志信息。将Snort报警数据写入Syslog服务器有助于分析网络入侵事件。在OSSIM系统中打开/etc/snort/snort_eth0.conf,将第384行的语句output alert_syslog: LOG_AUTH LOG_ALERT启用,重启Snort后即可生效。使用下列命令观察Snort发出的报警。

#tail –f /var/log/auth.log
Jan 30 09:41:02 alienvault snort[12019]: [1:2006380:12] ET POLICY Outgoing Basic Auth Base64 HTTP Password detected unencrypted [Classification: Potential Corporate Privacy Violation] [Priority: 1] {TCP} 192.168.11.26:1706 -> 192.168.11.201:80

Syslog有3个配置选项:

启用选项的命令如下所示。

在上面的基础上加上这3个Syslog配置选项参数。

output alert_syslog: LOG_AUTH LOG_ALERT facility priority options

保存并退出,然后重启Snort即可。

5.数据库输出

数据库输出插件可将日志保存到数据库。当数据库插件关联到数据库后,可对 Snort 报警进行分类、查询和排序。

数据库插件在工作时会影响Snort的性能,当大量数据写入数据库时,必须等待磁盘 I/O响应。如果通过网络将日志转发到另一台主机的数据库中,则数据延迟会比较大。

可行方案是让Snort采用Unified的格式进行存储,以它的最大速度处理输出数据,而不像传统方式那样等到写盘完成后,再继续操作。Barnyard能将二进制数解析成它能够识别的格式,并且是完全独立于Snort运行的。报警数据被立刻写入数据库并且不影响Snort的抓包能力,所以说这种组合适合大流量环境,如 OSSIM 环境。查看配置文件/etc/snort/snort.eth0.conf的第392行。

第392行  # database
第393行# output database: alert, <db_type>, user=<username> password=<password> tes t dbname=<name> host=<hostname>
第394行# output database: log, <db_type>, user=<username> password=<password> test  
dbname=<name> host=<hostname>

这里有两个重要的选项:alert和log。第393行表示可以选择将报警数据写入数据库,第394 行表示可以同时将日志数据也写入数据库。下面查看如何使用数据库插件。对照上面参数配置如下选项。

<db_type>为数据库类型,此处为MySQL。

user=<username>为snortdb_username或者为Snort传感器创建的MySQL用户名。

password=<password>为snortdb_password或为Snort传感器创建snortdb_username的MySQL口令。

dbname=<name>为snortdb或者自己指定的入侵数据库名称。

host=<hostname>为本机环回地址127.0.0.1。

6.输出unixsock

通过Alert_unixsock可以打开UNIX套接字,并把报警信息发送到套接字中。外部程序/进程会在这个套接字上侦听并实时接收这些报警数据。例如:

output alert_unixsock

加入配置文件snort.eth0.conf后,重启Snort服务即可生效。也可通过以下命令手动启动Snort:

# snort -c /etc/snort/snort.eth0.conf

成功启动Snort后,会在/var/log/snort/下产生一个名为snort_alert的文件,如图1-22所示。

图1-22 snort_alert

接着通过运行下列脚本程序来演示该功能。这个脚本是使用Perl编写的,主要功能是将Snort传送的数据报文的报警名称通过读取unixsock信息打印到屏幕,脚本内容如图1-23所示。

图1-23 测试脚本

开始执行此Perl程序,结果如下所示。

alienvault:/tmp#./test.pl
Socket Open ...
ET P2P eMule Kademlia Hello Request
ET P2P eMule Kademlia Hello Request
ET P2P eMule Kademlia Hello Request

可以看到在屏幕上收到3条报警信息。

7.Unified格式输出

Unified插件的最大特点是速度快,它能快速输出Snort报警信息和日志信息。它可输出两类文件:报警文件和数据包日志文件。报警文件仅记录摘要信息(内容包括源IP、目的IP、协议、源端口、目的端口、报警消息ID),而日志文件包含了完整的包信息。

设置方法是启用以下配置语句:

output unified2: filename snort_eth0, limit 128

参数注释如下所示。

在/etc/snort/目录下面有两个重要的映像文件,分别是sid-msg.map和gen-msg.map。

通过名字可以看出sid-msg.map是sid和msg映射的一张映射表,它里面默认写有2 975种对应情况。要想将用户自定义规则中的msg和sid对应起来,同样也要写入此文件中。例如在OSSIM 3平台下的自定义规则如图1-24所示。

图1-24 自定义规则和BASE报警

通过图1-24可以看出,<特征>下面写的是Snort Alert[gid,sid,rev],如果发现这并不是我们想要的msg中的内容,这时候需要修改sid-msg.map文件,将这个对应关系添加上。如果在规则中使用了Reference关键词,则需要在sid-msg.map中添加关键词。

在OSSIM 4.12系统中,在查看检查器状态时会发现Snort服务显示状态为DOWN,如图1-25所示。

图1-25 查看Snort状态

Snort的状态为DOWN属于正常情况。因为在同一个系统中无法启动两个IDS系统,因此Snort和Suricata服务状态不可能同时为UP。

网络探测分为两类:主动探测和被动探测。主动探测是通过主动扫描来检查监听服务的存在与否,其优点是扫描快速和结果完整。它的缺点是具有攻击性质(大规模的并行高速扫描会对系统和网络造成的严重影响),易暴露,易受防火墙影响,只能提供网络当前的快照。当网络组成或结构发生变化时需要重新扫描。Nmap工具是主动探测工具的一种。

被动探测通过网络嗅探提取服务端相关信息,其结果不会受防火墙影响。被动探测的缺点是检测的服务不能及时发现,某些网络服务可能要花数天时间才能发现。p0f、Prads、PADS等都属于被动检测工具。

为实现这一功能,可使用如下命令:

#find /var/log/suricata/ -regextype egrep –regex "/var/log/suricata/unified2.alert.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" –atime +0 –exec rm –f {} \;

在图1-26所示的例子中,用X标注的3个文件表示24小时内访问过的日志文件,这里需要将其删除。

图1-26 查看Suricata日志

如果使用OSSIM 4.8之后的版本,则在启用Suricata时使用下列命令:

#find /var/log/suricata/ -regextype egrep -regex "/var/log/suricata/unified2.alert.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" -atime +0 -exec rm -f {} \;

在find中加入-regextype是为了支持正则语法。

一般说来,传感器放在防火墙两侧,具体有以下3种部署方案。

检测器部署在防火墙界面之外的DMZ中。DMZ是ISP和最外端防火墙界面之间的区域。这种布置使检测器可以看见所有来自外网的攻击。然而,如果攻击类型是TCP攻击,那么防火墙能阻止这种攻击,传感器可能检测不到这种攻击,这是因为许多攻击类型只能通过匹配相应字符串特征的方法才能发现,而字符串的传送只有在TCP三次握手后才能进行。虽然放在防火墙以外的检测器无法检测到某些攻击,但这仍然是对攻击进行检测的最佳部署位置。

如果攻击者发现嗅探器,就有可能对其进行攻击,从而降低攻击者的行动被审计的概率,防火墙内的系统会比外面的系统更健壮。如果检测器部署在防火墙内可减少干扰,从而减少误报。如果本应该被防火墙封锁的攻击渗透进来,那么检测器就可以检测到或能发现防火墙设置失误。将检测器放在防火墙内的最大理由就是设置良好的防火墙能够阻止大部分脚本小子的攻击,使检测器不用将大部分注意力放在这类攻击上。

这样设置具有如下优点:无须猜测是否有攻击渗透过防火墙;可以检测来自内部和外部的攻击;可以检测由于设置问题而无法通过防火墙的内部系统。这种部署方式虽然管理成本高,但对系统管理员非常有利。

从Snort对数据包处理过程的分析得知,在默认情况下,当Snort系统对一个数据包进行处理时,首先初始化DAQ(数据采集器)。由于它所调用的API是daq_load_modules,为单线程,所以这限制了Snort,故整个Snort系统处于单线程运行方式。

从数据包的截取到输出处理过程来看,Snort系统采用的是串行单线程方式,这对于多核服务器来说无疑是一个浪费。在流量很大的情况下,Snort系统因为处理能力赶不上网络流量,严重时会造成大量丢包现象的发生。不过这种性能上的不足可以采用多线程Snort方式进行弥补。OSSIM 4.8之后的版本就采用了Suricata多线程的入侵检测引擎,它们的区别见表1-4。

表1-4 Suricata与Snort对比

主要参数

Suricata

Snort

规则

1.VRT::Snort rules
2.Emerging Threats rules
3./etc/suricata/rules/

1.VRT::Snort rules
2.ET(Emerging Threats) rules
3.EmergingThreats rules
4./etc/snort/rules/

线程

多线程

单线程

日志记录

Database、unified2 logs for Barnyard

IPv6支持

支持

需要手工编译加上--enable-ipv6 option

抓包加速方式

PF_RING、packet capture accelerator(数据包捕获加速器)

无,使用Libpcap

配置文件

suricata.yaml、classification.config、reference.config、threshold.config

snort.conf、threshold.conf

带宽

1000Mbit/s

100Mbit/s

抓包离线分析

两者均支持

控制前端

Sguil、FPCGUI (Full Packet Capture GUI)、Snortsnarf、BASE

为了调整Suricata同时处理的数据包的数量,需进行如下操作。

要设置Suricata运行模式,可以编辑/etc/suricata/suricata.yaml配置文件,将其中第22行的runmode:workers改为runmode:autofp,然后保存退出。接着执行下列命令:

alienvault:~#/etc/init.d/suricata restart    //重启Suricata服务

可以查看所有的运行方式,该命令的部分显示如下:

在上述显示中,Custom Mode(自定义模式)的值为autofp,这代表自动流绑定负载均衡模式。在该模式下,数据流被分配给了空闲的线程。这时OSSIM为Suricata设置的IDS工作模式为af-packet。

Suricata事件分为fast.log、http-log、Tls-log、Dns-log、pcap-log、Alert-debug、Alert-prelude、Stats、Syslog、Eve-log、Unified-alert输出模式。为了提高系统性能,除了Eve-log、Unified-alert默认是启用状态,其他都处于禁用状态。

当匹配一条规则后,Suricata如何记录该条匹配的信息?Suricata可以在匹配一条规则后记录一条信息,该条信息包括数据包的时间戳、五元组信息、对应的签名信息等。这条信息默认存储在/var/log/suricata/eve.log文件中,主要是用来定义eve.log的配置文件。在文件/etc/suricata/suricata.yaml中找到第89~114行,其配置信息如图1-27所示。

图1-27 定义eve.log

在Suricata配置文件的第117行可以发现这个二进制文件名称为unified2.alert,它无法通过文本编辑器打开,而需要特殊程序来读取。当Suricata检测到一个可疑的数据包时便可以将整个数据包以二进制的方式存储到文件中。目前Suricata已经支持IPv4和IPv6的数据包,其输出的格式可以被Barnyard2 程序读取。OSSIM系统并没有限制单个unified2.alert的大小,而是通过计划任务定期清理该文件。

经过多级HTTP代理服务器后的IP(记录代理服务器的IP)将会隐藏。在配置文件/etc/ suricata/suricata.yaml的第133行启用X-Forwarded-For功能,该功能选项用来记录经过多个HTTP代理服务器之后客户端真正的IP地址,而不是代理服务器的IP地址,HTTP会在头里面加入一个X-Forwarded-For字段以记录原始IP以及经过的每个代理服务器的IP。启用和禁用该功能的方法如下:

Enabled:yes/no

其中,yes表示启用,no表示禁用。

HTTP日志会记录所有的HTTP流量信息,包含HTTP请求、HOST字段、URI(Uniform Resource Identifier)字段和User-Agent字段。这里是普通的输出,除此之外也可以在eve-log中指定HTTP,以便输出JSON格式的内容。

修改/etc/suricata/suricata.yaml文件的第146行,修改内容如图1-28所示。

Enabled:yes

图1-28 Suricata配置

通过customformat还可以自定义输出的格式。

利用/etc/suricata/suricata.yaml文件中第190行的pcap-log选项可以保存所有的数据包,保存文件的大小还可以通过limit参数进行限制,在OSSIM中该值为1 000MB,文件格式为log.pcap。这样在检测到问题数据包时就能更容易地找到之前的流量,以便对整个事件进行确认和分析。启用该功能非常消耗磁盘空间。为了节省空间,建议对存储文件的最大数量进行限制,将其控制在500以内。

将/etc/suricata/suricata.yaml文件的第208行改为enabled:yes即可实现。打开该选项后,Suricata 会记录每一个报警产生的详细信息,包括数据包、规则等。在生产环境中启动它并不是一个明智的行为,它会在检测流时处理和输出大量的信息,导致Suricata的性能大幅下降,建议在正式运行的OSSIM系统中关闭此项。

将/etc/suricata/suricata.yaml文件中的第233行改为enabled:yes,同时将第812行改为enabled:yes即可实现。

811    - syslog:
812            enabled:yes
813            facility: local5
814            format: "[%i] <%d> --"

Suricata在检测流量之前需要将所有的规则签名加载到内存中,而数据包在匹配规则时并不需要匹配所有的规则。事实上大量的规则都没必要匹配,比如当前数据包是基于UDP的(例如DNS和NetFlow),那么TCP的所有规则没有必要匹配。因此需要根据一定的依据对所有规则进行分组,这样数据包只需要与分组内符合条件的所有规则进行匹配即可。

在Suricata中的Profile选项分为High、Low和Medium这3种,它用来定义Suricata检测引擎的配置属性。

Suricata是多线程程序,当它在多核CPU的计算机上运行时可产生多线程,能同时处理多个网络流量。如果有一台6核的OSSIM服务器,那么可以修改Suricata里的一个配置以提高处理数据包的性能。打开文件/etc/suricata/suricata.yaml,将第452行的set-cpu-affinity改成yes,然后重启Suricata即可。

Suricata中的defragment-engine模块能对分片的IP数据包进行监视,在对分片重组后传给后续的处理模块,其中max-frags指出最大的分片数量,prealloc表明是否在程序启动时预分配部分空间,timeout则表示超时的时间。因为在数据包监测及重组的过程中,未处理的数据包都会在内存中,所以如果数量太大或是长时间未进行处理,性能就会降低,看一下图1-29所示的配置。

图1-29 Suricata配置

这是OSSIM中的默认值。在高速复杂的网络环境中,可以将memcap参数调整为最大跟踪流量所使用的内存,若系统内存在32GB以上,则建议调整该值为1 024MB,timeout调整为20。如果已经把memcap的值从默认的512调整为1 024,那么必须将第629行中的memcap值调整为2GB。同时将第1 055行的global-memcap调整为2GB。这样才能提高Suricata在复杂网络环境中的检测性能。

在图1-30中,每个字段都拥有cpu、mode和prio等3个选项,含义如下。

图1-30 查看Suricata配置

除此之外,在detect-cpu-set中还有threads字段,它可以直接指定检测线程的数量,而不是根据CPU核数来计算。上面提到的检测线程的数量可以直接指定,也可以根据CPU核数来计算。而计算系数由参数detect-thread-ratio指定,默认系数为1.5,例如用户的CPU数量为4,那只会有6个检测线程:

detect-thread-ratio: 1.5

注意,Suricata最多支持6核。若服务器的CPU核数量超过6,也不会进一步提升Suricata的检测性能。

Stream引擎的作用是重组数据包,因为数据包重组的代价比较大,所以需要的资源较多。为了避免无限制地重组超大数据包,使用depth对其进行了限制,默认为1 514,最大可调节至2 048;toserver-chunk-size和toclient-chunk-size只有超过设置的原始数据包才会调用重组。实例如下:

738  stream:
739     memcap:6gb
740     checksum-validation:no
741     prealloc-sessions:50000
742     inline:auto
743     reassembly:
744     memcap:8gb
745     depth:2mb
746     toserver-chunk-size:2560
747     toclient-chunk-size:2560
748     randomize-chunk-size:yes

Suricata的日志文件suricata.log保存在/var/log/suricata/suricata.log文件中,其路径由配置文件/etc/suricata/suricata.yaml定义。

在OSSIM 5环境下输入下列命令。

从显示中可以看出,它不支持PF_RING,因为OSSIM 5.5系统虽然集成了Suricata 3.2,工作时使用的是AF_PACKET而没启用PF_RING,但它支持NFQ模式。使用命令suricata --list-runmodes可以查看所有的运行方式。

思路:在/etc/suricata/rules/目录下有很多规则,例如emerging_pro-policy.rules文件下有几十条规则,但很多以“#”开头的行表示不加载到内存。可以删除前面行开头的“#”,然后将后面的规则部分粘贴到/etc/suricata/rules/local.rules文件中。

技术实现:由于“ET PoLICY PE EXE or DLL Windows files download HTT”这个特征码的策略ID 2018959是唯一的,所以用grep搜索关键字所在行,然后把“#”号去掉,最后粘贴到/etc/suricata/rules/local.rules文件中即可,操作步骤如下所示。

步骤1.为排除干扰,先确保local.rules是空文件。

#cat /etc/suricata/rules/local.rules

步骤2.寻找一条“ET POLICY PE EXE or DLL Windows file download HTTP”特征码的规则。

#cat /etc/suricata/rules/emerging_pro-policy.rules |grep 2018959 | cut -d '#' -f2

步骤3.如果显示无误,可以将该条规则加入local.rules文件。

重复上述过程可加入更多规则。

步骤4.添加对local.rules的引用。

在/etc/suricata/rule-files.yaml配置文件中有表示对加载规则引用的语句,其默认不含local.rules。要将新添加的规则加入local.rules文件,就必须在rule-files.yaml中加入引用,方法如下。

#vi /etc/suricata/rule-files.yaml
%YAML 1.1
---
default-rule-path: /etc/suricata/rules
rule-files:
- emerging_pro-activex.rules
- emerging_pro-attack_response.rules
emerging_pro-chat.rules
… …
local.rules

在文件最后加入以下一行内容:

local.rules

保存并退出。

步骤5.重新启动Suricata服务。

#service suricata restart

注意,在OSSIM 5.3.4以前的版本中,只要升级系统,它就会覆盖local.rules文件中的内容。为了应对这一问题,有必要经常备份local.rules的内容,以免覆盖文件。

AlienVault实验室威胁研究团队向所有OSSIM客户提供威胁情报,如IDS签名。下面提供两种更新规则和签名的方法。

方法1

要想检测AlienVault NIDS的最新威胁,应该将OSSIM中的IDS签名保持为最新。OSSIM每15min检查一次威胁情报的更新情况,用户可以主动查看OSSIM是否有新的NIDS签名可用,方法如下。

方法2

在AlienVault设置菜单中安装威胁情报更新:路径为System Preferences→Update Alienvault system→Update Threat Intelligence。

在AlienVault设置菜单中安装威胁情报更新的过程如下所示。

注意,该AlienVault控制台不显示可更新的列表,但用户可以检查更新进度。

升级过程需要十几分钟的时间。完成后,控制台将显示一条消息,指示更新成功。

更新过程信息如下所示。

Snort常作为入侵检测系统(IDS)来使用,但它也可配置为入侵防御系统(IPS),只不过功能较弱。Snort使用数据采集器(DAQ)监听防火墙数据包队列,配合Snort规则动作drop、alert等处理数据包,防火墙在Snort启动后添加链表队列。数据包经过防火墙时将交给Snort来处理,触发入侵检测规则时立刻响应动作并阻止数据包。

入侵防御系统应该直连在网络环境当中,这时需要配置网桥模式。Snort具备监听网桥的功能,防火墙也要支持网桥。

OSSIM 3系统使用的PF_RING是一种新型的网络Socket,性能优于Libpcap,它可以提高包捕获的速度。PF_RING有以下3种透明模式(transparent_mode)。

“1”和“2”模式需要特殊网卡驱动程序的支持,一般PF_RING为“0”模式。配置文件/etc/ modprobe.d/pfring.conf中,工作模式设置为0,PF_RING模块位于/lib/modules/2.6.32-5-amd64/ kernel/net/pf_ring/目录中。

Snort中的ET(Emergin Threats)规则是Suricata默认的规则集。规则库可到异步社区的本书页面中获取(文件名为emerging.rules.tar),具体操作如下所示。

步骤1.将该压缩包下载、解包,例如解压到/tmp/rules目录中。

步骤2.备份旧规则。

#cp  /etc/snort/rules /opt/rulesbackup/    //此处rulesbackup自己定义备份目录

步骤3.将新规则复制到/etc/snort/rules/目录中。

#cp /tmp/rules/*  /etc/snort/rules

步骤4.更新规则。

#cd /usr/share/ossim/scripts
#perl create_sidmap.pl /etc/snort/rules
Loading from reference_system…done
Loading from references … done
… …
Insert into sig_reference … done

步骤5.重新配置OSSIM。

#ossim-reconfig

重新配置后,新的ET规则生效。

无线入侵检测系统(WIDS)是基于入侵检测技术建立的,属于网络安全的主动防御行为,可从网络和系统内部的各项资源中主动采集信息并分析是否遭受了入侵攻击。

WIDS 主要有两种模式。第一种是使用 Monitor 模式的无线网卡,以数据链路层基于 IEEE 802.11协议原始帧为捕获对象,辅以帧头信息用以入侵检测分析,对WLAN中的接入设备进行检测认证。第二种是使用Managed模式的无线网卡,用于捕获网络层中基于IEEE 802.3协议的以太网格式数据包,用作基于主机的入侵检测认证。

在网络中加入的RADIUS(Remote Authentication Dial In User Service,远程身份验证拨入用户服务)可实现客户与AP间的相互验证,进而达到检测和隔离欺诈性AP的效果。通过下面的例子可以将分支办公室的无线网使用情况发送到总部的SIEM服务器,以便集中监控管理。

1.安装无线网卡

RTL8187这种网卡对于Linux系统来说更容易识别。在服务器上安装好无线网卡,进入控制台,输入dmesg命令即可查看到网卡的芯片型号,如图1-31所示。另外,使用lsmod |grep usbcore命令也可以查看USB网卡信息。

图1-31 检测无线网卡芯片

安装无线调试工具,命令如下所示。

#apt-get install wireless-tools

安装完这个无线工具包后,即可使用iwconfig命令检查刚添加的网卡信息,并且显示对应的设备名称,此处无线网卡的设备文件为wlan0。

# iwconfig
lo         no wireless extensions.
eth0       no wireless extensions.
wlan0      IEEE 802.11bg  ESSID:off/any  
           Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm   
           Retry  long limit:7   RTS thr:off   Fragment thr:off
           Encryption key:off
           Power Management:off
2.设置无线网卡

在调试工具安装完成之后,使用命令iwlist搜索无线网信号。首先使用如下命令启动接口:

#ifconfig wlan0 up

接着,无线网卡开始扫描整个网络环境。

#iwlist wlan0 scanning

在本实例中加入了SSID为buff的无线网。为便于调试,不要隐藏无线网的SSID。操作命令如下:

#iwconfig wlan0 essid "buff"
#dhclient wlan0

最后,加入WiFi后通过DHCP客户端动态获取IP地址,通过ifconfig命令查看获取的IP地址。wlan0设备的详细配置信息会写入文件/etc/network/interfaces。待成功加入无线网络之后开始设置无线嗅探器。

3.安装kismet

kismet是一个便利的无线网络扫描程序,它能通过检测周围的无线信号来找到非法WLAN。这里使用它来扫描无线网络。

#apt-get update               //更新源
#apt-get install kismet       //安装kismet
4.设置kismet

① 编辑/etc/kismet/kismet.conf文件,找到“source=”这一行,将其改成source=rtl8187,wlan0,wlan0-wids,保存并退出。其中rtl8187代表设备驱动,wlan0代表网卡设备名称,wlan0-wids 为描述信息。

logdefault=192.168.11.10 // OSSIM传感器IP
logtemplate=/var/log/kismet/%n_%D-%i.%l

② 在/etc/init.d/目录下新建文件wids_alienvault.sh。

#vi wids_alienvault.sh

在其中加入如下两行:

#!/bin/sh
/usr/bin/kismet_server -l xml -t kismet -f /etc/kismet/kismet.conf 2>&1 | logger -t kismet -p local7.1

③ 给脚本文件加入执行权限。

#chmod 755 /etc/init.d/wids_alienvault.sh

④ 将“/etc/init.d/wids_alienvault.sh”这条语句加入/etc/rc.local脚本的倒数第2行(也就是exit 0语句的上面)。

⑤ 在OSSIM控制台下输入ossim-setup命令,依次选择Change Sensor Settings-Enable/ Disable detector plugins,选中kismet并保存退出,这时系统会提示重新配置。在后台,系统会将kismet选项加入到/etc/ossim/ossim_setup.conf文件中。

⑥ 修改kismet配置文件。

#vi /etc/ossim/agent/plugins/kismet.cfg

找到location=/var/log/syslog这一行,将其修改为如下内容。

location=/var/log/kismet.log

⑦ 实现自动化配置。

#vi /etc/cron.hourly/kismet

在其中加入如下两行:

#!/bin/bash
/usr/bin/perl /usr/share/ossim/www/wireless/fetch_kismet.pl

然后编辑/usr/share/ossim/www/wireless/fetch_kismet.pl 这个脚本中sites所带的IP地址。

#vi /usr/share/ossim/www/wireless/fetch_kismet.pl

找到$location=$sites{$ip}这一行,将其改成$sites{'192.168.11.10'}='/var/log/kismet'。此处IP为无线传感器的IP地址。

如果配置成功,则在命令行中输入kismet命令,将显示图1-32所示的欢迎界面。

图1-32 kismet界面

5.配置Rsyslog

在/etc/rsyslog.d/目录下新建文件 wids_alienvault.conf,并在其中加入以下内容:

*.* @192.168.11.10          //此处IP为OSSIM服务器的IP地址

然后重启动Rsyslog服务。接下来就可通过tail -f /var/log/kismet.log命令来检验成果了。

6.设置OSSIM无线传感器

在OSSIM的Web UI中进入菜单DEPLOYMENT→SYSTEM CONFIGURATION,配置SENSORS,输入无线网卡名称wlan0以及IP地址192.168.11.10,要确保正确加载了kismet服务,配置界面如图1-33所示。

在传感器配置选项中,添加wlan0为监听端口,监控网段为192.168.11.0/24。注意OSSIM系统中的插件Prads、Snort、Ntop和OSSEC需处于UP状态,如图1-34所示。

图1-33 设置无线嗅探器

图1-34 配置无线网卡

可以在Network选项中验证无线网卡模式,如图1-35所示。

图1-35 无线网卡模式

最后在Web UI中的Analysis→Detection→Wireless IDS子菜单进行配置。注意,首次进入操作界面时会发现Location中无配置信息,此时应单击右上角的Setup按钮,添加一个新的Location,即为上文设置好的wlan0[192.168.11.10],如图1-36所示。

图1-36 设置Location

除了基于命令行的无线嗅探工具以外,还可以在OSSIM系统中添加基于Web的管理工具。设置完成WIDS后,即可发现周边无线信号,如图1-37所示。

图1-37 查看无线信号

启动无线嗅探器,在OSSIM的SIEM控制台中可查看kismet发来的日志信息,如图1-38所示。

图1-38 在SIEM中查看kismet日志

当在SIEM控制台中收到kismet发送的日志后,表示该设置成功。

iptables模块位于/lib/xtables目录下,模块名称以libxt开头,这些模块与netfilter模块一一对应,例如/lib/modules/2.6.32-5-amd64/kernel/net/netfilter/xt_conntrack.ko。

iptables会根据libxt_conntrack.so模块的指示去检查语法是否正确,并将Netfilter的相应模块载入到系统内存,iptables最后将规则写入规则数据库。注意,如采用OSSIM 5.5平台,则路径应改为/lib/modules/3.16.0-4-amd64/kernel/net/netfilter/。

Nmap是一款用于快速扫描网络的安全工具,它可以探测目标主机运行了哪种操作系统(包括版本信息)、提供了什么网络服务。它是把“双刃剑”,一方面可以帮助管理员获取资产信息,另一方面,如果Nmap装在攻击者的机器上,则它就成了刺探网络的“凶器”。及时发现这种扫描行为对于保护网络安全至关重要。

Nmap在使用SYN扫描进行端口识别时,为了识别目标机器的服务,首先发送探针报文,得到返回确认值后确认服务。下面使用Snort的端口扫描检测功能来产生报警事件。为了使Snort具备端口扫描检测能力,需要启用端口扫描检测插件,这种插件通过预处理报警器的方式来提供。预处理配置如下:

Preprocessor sfportscan: proto{all} memcap{1000000} sense_level{high}

在攻击主机上可使用X-Scan软件或者Zenmap检测效果。

OSSIM利用Snort系统发现Nmap扫描,Nmap扫描检测Snort规则的命令结果如图1-39、图1-40所示。

alert tcp $EXTERNAL_NET any -> $HOME_NET any

图1-39 Nmap扫描报警事件

图1-40 发现Nmap扫描

AIDE(Advanced Intrusion Detection Environment,高级入侵检测环境)属于入侵检测工具,主要用途是检查文件系统中文件的完整性。

AIDE能够构造一个指定文档的数据库,它使用aide.conf作为配置文档。AIDE数据库能够保存文档的各种属性,包括下列内容:

AIDE还能使用sha1、md5、rmd160、tiger算法以密文形式建立每个文档的校验码。AIDE是OSSIM系统中一种比较方便的系统入侵检测软件,但是它要求系统在处于“干净”状态时才能建立或更新数据库。如果在一个已经受到感染的系统中建立数据库,则入侵检测结果将不可信。

另外,入侵检测的保护对象是不经常变动的文件,例如账号列表、服务配置、系统文件等,否则将会给识别哪些改动是入侵增加难度,所以要排除例如/tmp/、/proc这样的目录。

系统环境为CentOS Linux7.2,软件环境为aide-0.15。

步骤1.安装、配置AIDE程序。

执行命令vim /etc/aide.conf,开始编辑配置文件,并在配置文件中按检测的需要进行相应修改。

步骤2.建立、更新数据库。

执行初始化,生成第一份数据库。执行命令aide –init,生成一个新数据库/var/lib/aide/aide.db. new.gz,接下来需要将旧的数据库aide.db.gz替换掉才能正常使用。

执行以下命令。

#cd /var/lib/aide/
#mv aide. db.new.gz aide.db.gz  //替换旧数据库

步骤3.替换数据库。

有时,对系统进行的修改是系统管理员所做的正常修改,而并不是黑客入侵所致。在这种情况下,可以执行命令aide –update 将之更新为新的数据库,同样需要执行命令mv aide.db.new.gz aide.db.gz替换掉旧的数据库。

步骤4.构造异常行为。

为了测试方便,将系统中的文件/bin/ps改名为/bin/ps.1,或者修改/etc/passwd。可通过执行命令aide –check来实现。

程序执行后会检测到新增文件(/bin/ps.1),删除一个文件/bin/ps,然后改变一个文件(/bin的散列值、mtime、ctime均发生改变)。

步骤5.保存入侵检测报告。

可以将检测结果保存到其他文件中,以便今后查看。将检查文件改动保存到文件的命令如下所示。

#aide --check --report=file:/tmp/aide-report-'date +%Y%m%d'.txt

步骤6.定期执行入侵检测,并发送报告。

为防止系统被恶意、不定期或频繁入侵,可以写一个计划任务,每隔一段时间就对系统进行一次入侵检测,并将检测报告发送至系统管理员邮箱,以便系统管理员能对系统的安全情况进行实时监控,并采取相应措施。

对于混合式安装的OSSIM和分布式环境下的OSSIM服务器,需要对其文件系统建立指纹库。对于单独安装的传感器来说,可以不建立指纹库。这里的实验环境为OSSIM 4.15,可使用以下步骤进行安装。

步骤1.#apt-get update          //更新源

步骤2.#apt-get install aide aide-common //安装AIDE程序

步骤3.#aideinit     //初始化程序,为系统文件建立指纹基线,创建数据库

该数据库存储在基准数据库目录中,文件为二进制格式,路径为/var/lib/aide/,执行aideinit命令会立即为系统里所有文件建立指纹数据库。

需要注意的是,该环节应在OSSIM系统安装之后并接入网络之前完成,目的是产生基准数据库。执行完指令之后会显示一行文字“AIDE database at /var/lib/aide/aide.db.new initialized”,它默认刚创建的aide.db和aide.db.new大小相同,大约为40MB。aide.db为基准库,aide.db.new为更新库文件。

步骤4.配置aide.conf,其位置为/etc/aide/aide.conf。

为AIDE检查规则配置文件,以控制目录、文件和文件属性的检查规则。在扫描的时候,AIDE根据这些规则来判断文件是否被更改。

例如在默认文件/etc/aide/aide.conf中,对于所有属于组bin、lib的目录文件,AIDE要检查下列内容:

而对于所有属于组Databases的目录和文件,AIDE只检查它们的访问权限、被链接数、所属用户、所属组是否改变(p+n+u+g)。刚安装好AIDE时,配置文件并不完善,需要做些调整。

步骤5.#vi /etc/aide/aide.conf。

在最后一行加入以下内容:

CONTENT_EX = sha256+ftype+p+u+g+n+acl+selinux+xattrs
/boot/   CONTENT_EX
/bin/    CONTENT_EX
/sbin/   CONTENT_EX
/lib/    CONTENT_EX
/lib64/   CONTENT_EX
/opt/   CONTENT_EX
/root/\..*  PERMS         //加权限检测
!/usr/src/                //!表示排除此目录,在以下几行中!均表示相同含义
!/usr/tmp/
!/tmp
!/var/log/
!/var/spool/
!/dev
!/var/run/
!/var/ossec/var/run/
!/proc/
!/var/nfsen/run

步骤6.#update-aide.conf  //使配置文件的修改立即生效

步骤7.#mkdir /var/lib/aide/please-dont-call-aide-without-parameters/。

#cp /var/lib/aide/aide.*  /var/lib/aide/please-dont-call-aide-without-parameters/

步骤8.为触发报警,修改文件/etc/passwd、/etc/rsyslog.conf中的内容。

步骤9.执行下述命令。

#aide –check  //开始检查文件的完整性,AIDE现在读取数据库并将其与磁盘中的文件进行比较
#aide
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2018-02-19 17:49:11
Summary:
  Total number of files:        73769
  Added files:                    3
  Removed files:                  2
  Changed files:                 3
---------------------------------------------------
Added files:
---------------------------------------------------
added: /bin/ps.1
added: /root/.bash_history
added: /usr/bin/ps.1
---------------------------------------------------
Removed files:
---------------------------------------------------
removed: /bin/ps
removed: /usr/bin/ps
---------------------------------------------------
Changed files:
---------------------------------------------------
changed: /etc/hosts
changed: /etc/passwd
changed: /etc/rsyslog.conf
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /etc/hosts
 SHA256   : SY9JQjIIXsgzA6K8bwS+qEDCshD7vtox , g6oUvmVizmbX69wnWTIYxvsMCcIrKINo
File: /etc/passwd
 SHA256   : /pXDKVAbuSZKZ2tr7CJBXtFUB9JPo+Qd , Ht4Qd/iDP0E/mocd4UQG7th4a9hQB144
File: /etc/rsyslog.conf
 SHA256   : RSv31aygnnokwwPFsz+EAsLHaJPtHxu7 , UWPmAJZvbRPm/zm9Q6krXiAHlrpTeu84

如果所有目录都正常且文件都在监视中,则在检查完成后大家可以看到如下提示:

All files match AIDE database.Looksokay!

注意,使用aide --verbose=255命令可以生成大量的调试信息,以帮助查看哪些文件被添加以及哪些文件被丢弃。使用该参数将在屏幕产生大量输出。

如果正常修改了服务配置文件,则应使用下面命令进行更新。

#aide –update

实用技巧如下所示。

下面列出部分测试题,以帮助读者强化对本章知识的理解。

1.在图1-41中,各个箭头所指区域分别表示什么含义?

图1-41 Snort规则

1(B) 2(N) 3(C) 4(D) 5(E) 6(D) 7(G) 8(I) 9(F) 10(H) 11(K) 12(G)

  A.这是动作执行的部分,表示只要检测到外部不受信任的可疑流量,系统就会发出报警

  B.这是规则头的部分,表示外部不受信任的网络流量流入网络中任何一个IP地址,系统就会发出报警

  C.它允许规则只应用到流量流的某个方向上。这将允许规则只应用到客户端或者服务器端,并能把内网客户端流览Web页面的数据包和内网服务器所发送的数据包区分开来。这个参数选项包括下面这些内容。

  D.寻找指定模式下的包负载,允许自定义关键字,进行数据包内容的载荷搜索

  E.只进行快速匹配搜索

  F.规则选项可以对所涉及的入侵检测规则进行分类。图1-41提示发现木马攻击,此时属于高优先级

  G.表示元数据提供了有关Snort收集的入侵检测的数据信息

  H.表示该规则对应的唯一规则ID号

  I.该选项用来提供Snort使用其他外部攻击识别系统来帮助入侵检测的外部链接地址

  J.该选项用来提供Snort使用其他内部攻击识别系统来帮助入侵检测的内部链接地址

  K.该选项是针对Snort规则所识别的修订识别码,表示第3次修改的版本

  L.该选项表示收到3次报警信息

  M.该选项的功能是当数据包检测不符合规则时,发出报警信息,内容为引号中的部分

  N.该选项的功能是当数据包检测符合规则时,记录或发出报警信息,内容为引号中的部分

2.在下列选项中属于HIDS优势的选项有(C、D、E),属于HIDS局限性的选项有(A、B)。

  A.HIDS需要将代理程序部署到每个要监视的主机上,部署烦琐

  B.HIDS不能检测网络侦察或扫描

  C.HIDS可以检测到攻击是否成功

  D.HIDS监视系统活动

  E.HIDS可检测文件或应用程序的变化

3.在下列选项中属于NIDS优势的选项有(A、B),属于NIDS局限性的选项有(D、E、F、G)。

  A.如果部署得当,NIDS能监视整个网络的流量

  B.由于NIDS只分析网络流量副本,所以这几乎不会影响网络性能

  C.NIDS可以分析加密流量

  D.NIDS无法分析加密流量

  E.NIDS需要经常升级签名(已知攻击)和规则

  F.NIDS需要特定的配置来接受流量副本

  G.NIDS无法阻止攻击

4.NIDS中的引用是用来加入新的外部参考系统,下列数据源(A)使用了外部引用。

  A.Snort

  B.Syslog

  C.Alienvault OTX  

  D.SSH

5.命令suricata --list runmodes的作用是(A)。

  A.查看所有运行方式

  B.查看Suricata运行状态

6.在OSSIM 4.15系统中,不属于嗅探类软件的是(E)。

  A.Snort

  B.Ntop

  C.NetFlow

  D.Nfsen

  E.Syslog

7.为了提高Libpcap处理数据包的效率,OSSIM 2.3平台上采用了基于零复制思想的(A)机制。这种机制避免了多次内存复制并减少了CPU的干预,故可以在高速网环境下进行数据抓包分析。

  A.PF_RING

  B.NAPI

  C.DMA

8.在手动安装IDS系统的过程中,为了实现在Web UI上浏览Snort报警,需要经历9个环节。除去安装虚拟机和操作系统以外,请按安装顺序依次在图1-42的A~G标志中选择相应软件包的名称(顺序颠倒则无法通过编译),顺序应为(F、G、E、D、C、B、A)。

图1-42 Snort安装阶梯

  A.BASE

  B.Apache PHP

  C.Barnyard2

  D.MySQL

  E.Snort

  F.Libdnet

  G.DAQ

9.网络探测化技术可以分为两类:主动探测和被动探测。主动探测是通过主动扫描来检查监听服务存在与否,主动探测的优点是扫描快速和结果完整,例如(A)程序;被动探测一般通过网络嗅探来提取服务端相关信息,例如(B、C)程序。

  A.Nmap

  B.p0f

  C.prads

  D.traceroute

10.Snort规则中由Reference选项定义所支持的外部系统,这些外部系统均由一系列网址组成,这些网址的内容保存在文件(A)中。

  A./etc/snort/reference.config

  B./etc/snort/snort.conf

11.在一套Snort系统中输入下列(D)命令会将日志记录到/var/log/snort/目录。

  A.snort -v

  B.snort -dvr

  C.snort -vde  

  D.snort -vde -c /etc/snort/snort.conf

12.OSSIM 5中Suricata默认不支持PF_RING。(√)

13.命令“suricata --build-info”可以查看Suricata的工作模式。(√)

14.NIDS通常以混杂模式进行工作,监视网络流量的副本。它通过将流量与已知攻击(也称为签名)的数据库进行比较,或通过检测流量模式中的异常来分析流量。如果识别到异常,则生成NIDS事件报警。(√)

15.Snort可以把产生报警的所有数据包内容完全记录下来。(×)

16.当Snort检测到匹配的数据包时,有几种处理方式?

在Snort中有5种处理方式,它们表示的含义如下所示。

17.在/etc/snort/rules/local.rules文件中添加一条规则,执行什么命令使其生效?

例如使用Snort检测程序添加如下规则:

alert tcp any any -> any any (msg: "DLL Windows file download"; flow: established; content:"MZ";isdataat: 76,relative;content:"This program cannot be run in DOS mode."; distance: 0; isdataat: 10,relative; content:"PE"; distance: 0; classtype: misc-activity; sid:5000789;)

在/etc/snort/rules/local.rules中添加规则后,还需要执行如下命令:

#perl  /usr/share/ossim/scripts/create_sidmap.pl  /etc/snort/rules/

最后需要重启Snort服务。


关键术语

作用? OSSEC是跨平台的入侵检测系统,以Linux平台为例,Agent主要包含以下几个进程。

在OSSIM平台中,集成的OSSEC工作在Agent/Server模式下,OSSEC的日志处理流程如图2-1所示。

图2-1 OSSEC日志处理流程图

OSSEC关键进程的功能如下所示。

Agent监控方式是在被监控主机上安装Agent软件(即代理软件),实现对数据的统一采集和管理。

Agent监控代理软件可在一台主机上实现对主机和主机应用的监控。因为Agent软件运行在被监控主机和应用端,这就对Agent软件的性能和可靠性提出了比较高的要求:Agent代理软件占用的系统资源(CPU、RAM等)要少,但是采集的数据量应比较大。只有这样,才能很好地发挥Agent代理软件的作用,同时不牺牲主机的性能。

Agentless监控方式是指在被监控应用的主机之上不安装代理软件,而是通过一些标准的协议(例如SNMP、Telnet、SSH、WMI)来采集信息。

当定制或修改OSSEC规则时,需要进行反复测试,为此可利用regexp.py工具配合检测。先利用regexp.py脚本对ossec-single-line.cfg插件进行验证。

除此之外,OSSEC系统还提供了ossec-logtest工具,它通过日志告诉用户如何解码,以及哪些信息被提取和触发了什么规则。例如,要监控Apache服务的访问日志,可将它添加到OSSEC 日志源,然后修改Agent端的配置文件ossec.conf,在其中加入如下配置。

<localfile>
<location>/var/log/apache2/access.log</location>
<log_format>apache</log_format>
</localfile>

标签<location>的内容为需要监控服务的访问日志。接下来,在命令行中使用/var/ossec/ bin/ossec-logtest命令,通过返回值判断修改或新添加的规则是否匹配成功。待成功之后再分别重启OSSEC Server和Agent端的服务,这样更为稳妥。

通过cat命令对日志进行分析,操作如下所示。

该如何处理? 故障现象:在启动OSSIM时出现服务启动失败的提示,并告知空间已满,如图2-2所示。

图2-2 剩余空间不足造成启动故障

进入系统后发现/var空间已满,查询磁盘空间的效果如图2-3所示。

图2-3 显示磁盘分区的可用空间情况

在Web UI中OSSEC服务启动失败,如图2-4所示。

图2-4 OSSEC服务启动失败

解决方法是腾出/var目录下的磁盘空间,然后重启OSSEC服务。

在OSSIM中,由于以各个网段的传感器为单位来管理监控网段内的所有Agent,所以在分布式OSSIM环境中安装、使用Agent时需要格外注意传感器所监管的各个Agent。一个简单的分布式环境如图2-5所示。

图2-5 分布式OSSEC/Agent通信流量

在图2-5中,传感器1这台主机安装了OSSEC Agent,同时还统一管理监控网段内所有 Windows、Linux的OSSEC Agent的配置文件。

由于Linux环境不支持批量部署OSSEC Agent,所以只能手动安装。手动安装OSSEC Agent时,应首先下载源码包(最新版本为2.9),然后解压Agent压缩包并开始安装。

#./install.sh      //开始安装

按下回车键之后出现下列提示信息:

OSSEC HIDS将安装在/var/ossec下。

由于编译过程较长,此处将输出过程省略。

当出现下列提示时表示安装完成。

下面开始向Server添加Agent。首先在Web下添加Agent,生成key,如图2-6所示。

图2-6 生成ossec_agent安装key

然后在命令行下执行以下操作。

输入命令#/var/ossec/bin/manage_agents。

按下回车键后输入代理名称。注意,只能输入英文,且多个代理之间不能重名。然后输入代理的IP地址192.168.109.143。在遇到An ID for the new agent[002]: 提示时直接按回车键,最后输入字母y确认添加。

接下来程序会进入到下一个界面,此时输入字母E以导入OSSEC Agent key,开始安装OSSEC HIDS。

#/var/ossec/bin/ossec-control start

这里采用的Linux系统为CentOS 6.8,下载的OSSEC安装包版本为2.9.3,在安装OSSEC Agent时可能遇到图2-7所示的报错。

图2-7 安装OSSEC Agent报错细节

根据报错信息可知,应该没有安装OpenSSL包。安装OSSEC时需要首先安装编译器,然后安装OpenSSL。在客户端的操作如下。

#yum –y install gcc openssl

OSSEC Agent配置文件位于/var/ossec/etc/ossec.conf中。

OpenVAS(开放式漏洞评估系统)用于漏洞扫描,而Nmap主要以端口和服务扫描为主,它支持漏洞脚本,但漏洞扫描很弱。Nmap主要用于主机发现、端口发现等基本信息的搜集,其中包括主机活动状态和主机端口。Nmap在OSSIM资产发现和管理中起到了很大的作用,图2-8中定义了Nmap路径来发现网络资产。

图2-8 OSSIM中定义Nmap命令

人们常常会把Nmap和OpenVAS的功能混淆。从范围上看,Nmap主要用于大范围、快速扫描,最大特点是速度快,但没有漏洞库;而OpenVAS适用于少量多次地对服务器进行漏洞扫描,它默认带有4万多个漏洞库脚本。它们虽然都属于扫描工具,但作用不同。Nmap的主要任务是端口扫描,属于轻量级扫描器,用于前期侦查。OpenVAS是一个客户端/服务器架构的工具,常用它对目标主机进行安全评估。

有关Nmap扫描的类定义在/usr/share/ossim/include/classes/scan.inc文件中可找到。在同一目录下还有几个关键类的定义(例如remote_scan.inc、asset_group_scan.inc、net_greoup_scan.inc),这些类定义都在后台调用Nmap命令进行扫描。

OSSEC被集成到OSSIM平台之后,除了具有日志分析、入侵检测系统功能外,还增加了日志关联分析报警功能。当客户机通过客户端程序将数据发回服务器端进行关联分析之后,把结果存入数据库并发出报警。相较于单独安装的OSSEC系统,集成在OSSIM中的OSSEC的一个最大区别就是增加了关联分析引擎处理事件。

在图2-9中可以看到OSSEC的事件报警流程,如下所示。

Agentd→UDP 1514→Remoted→Analysisd→Aerts.log→OSSIM_Agent→Correlation→Alarm。OSSIM中的OSSEC模块整体分为Agent、Server和关联分析模块。

可以简单地把流程理解为OSSEC Agent→OSSEC Server→写日志到/var/ossec/logs/alert/ alerts.log→ossim-agent读取日志→匹配规则发送给ossim-server。

图2-9 OSSEC事件采集原理

环境介绍:

注意,无论客户端操作系统是32位还是64位,OSSEC Agent安装程序都是32位。

步骤 1.首先检测客户端192.168.109.142是否在资源池中。在Web UI中通过选择ENVIRONMENT→ASSET & GROUPS进行查看,如图2-10所示。

图2-10 确认资产信息

如果出现客户端就可以继续安装Agent,否则需要添加资产。

步骤2.选择ENVIRONMENT→DETECTION,选择HIDS→AGENTS,检查alienvault(server)的状态是否为Active/local,接着单击ADD AGENT按钮,如图2-11所示。

图2-11 添加Agent

在资源池中选择客户端192.168.109.142,如图2-12所示。注意不要手动填写这个IP,必须通过鼠标点选得到,然后单击SAVE按钮。

图2-12 添加资产

保存之后,系统后台开始设置,如图2-13所示,这里状态为Disconnected。

图2-13 添加资产

步骤3.安装OSSEC Agent客户端,单击图2-14中箭头所示的按钮。

图2-14 下载ossec_agent安装包

找到下载程序 ossec_installer_001.exe,右键单击并以管理员身份运行程序。该可执行文件在/usr/share/ossec-generator/install/目录中。

步骤 4.运行Manage Agent程序。该程序对应的文件为C:\Users\win\AppData\Roaming\Microsoft\ Windows\Start Menu\Programs\ossec\Manage Agent,如图2-15所示。

图2-15 确定ossec_agent安装路径

OSSEC Agent安装界面如图2-16所示,应确保Agent状态为Running。

图2-16 启动OSSEC Agent Manager

如果没有启动代理,则需检查服务是否启动,如图2-17所示。

图2-17 确定OSSEC HIDS启用

Agent添加成功后,客户端192.168.109.142的状态变为Active,如图2-18所示。

图2-18 接收到OSSEC Agent传来的客户端信息

注意,如果Agent状态显示未连接,则可尝试重启OSSEC服务,同时将HIDS Control中Actions的Debug功能打开。

控制OSSEC Agent的配置文件是/var/alienvault/413d4d56-ff13-7209-7a2f-690cdca79b74/OSSEC目录下的ossec.conf文件,这里的413d4d56-ff13-7209-7a2f-690cdca79b74为系统UUID号,通过alienvault-system-id可以查看该UUID号。

步骤1.确保客户端OSSEC Agent为运行状态,接着在Web UI上重启HIDS服务,如图2-19所示。

图2-19 查看OSSEC Agent运行状态

步骤2.进入SIEM控制台,筛选数据源AlienVault HIDS插件,它可收集到Windows客户端发送的事件,如图2-20所示。

图2-20 筛选出AlienVault HIDS插件产生的事件

在SIEM控制台上查看RAW LOG数据,如图2-21所示。

图2-21 OSSEC的RAW LOG信息

在命令行下查看alerts.log文件,找到第2 914行,查看到与Web UI相同的内容,如图2-22所示。

#/var/ossec/logs/alerts/alerts.log

图2-22 查看报警信息

此时表示已连接成功,刷新浏览器页面会看到Agent状态变为Active,表示设置成功。

步骤3.在传感器端打开命令行终端,输入如下命令:

#tail –f /var/ossec/logs/alerts/alerts.log

打开另一个终端,开始抓包。

#tcpdump  host 192.168.109.142 and port 1514

同时在客户端上调整OSSEC Agent进程。

在上述步骤都设置完成之后,到Web UI中打开SIEM实时事件监控,即可收到事件。整个安装调试过程完成。

在Windows Server 2012中安装OSSEC Agent要比在Windows 7/8/10中复杂一些,具体步骤如下。

环境介绍

步骤1.Windows Server 2012上的浏览器为Internet Explorer 11,打开Web UI时系统会提示“此网站的安全证书存在问题”,这时应选择继续浏览此网站。通过安全连接查看网页,如图2-23所示。

图2-23 通过安全连接查看网页

步骤2.同时将OSSIM服务器IP加入受信任列表,如图2-24所示。

图2-24 将OSSIM服务器IP加入受信任列表

单击新建Agent按钮,此处Agent的名称通过鼠标在资源池中点击选取,而不是手动输入,如图2-25所示。

图2-25 添加Agent名称

当单击SAVE按钮之后,系统自动生成预安装的二进制文件,此时可以开始下载安装,如图2-26所示。

图2-26 下载ossec_agent

此时以管理员身份运行ossec_installer_001,如图2-27所示。在系统程序组中启动OSSEC Agent Manager,如图2-28所示。

图2-27 以管理员身份运行ossec_agent预备安装包

图2-28 启动OSSEC Agent Manager

在应用程序中打开Agent Manager,同时在Web UI上启动Debug功能,如图2-29所示。

图2-29 启动Debug

在SIEM控制台上打开实时事件显示。首先打开地址过滤,输入源地址192.168.109.142,如图2-30所示。

图2-30 过滤信息

接着会显示源地址为192.168.109.142的OSSEC Agent发来的事件,如图2-31所示。

图2-31 收到Windows报警

在传感器端,使用tcpdump命令开始抓包,如下所示。

alienvault:/# tcpdump host 192.168.11.160 and port 1514
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
02:18:53.554301 IP 192.168.11.203.48700 > localhost.alienvault.1514: UDP,length 169

安装好OSSEC Agent之后,正常状态如图2-32所示。

OSSEC Agent的连接日志可通过以下命令在字符界面上查询。

#tail –f /var/ossec/logs/alerts/alerts.log

通过Web方式也可在SIEM控制台显示事件效果,如图2-33所示。

图2-32 接收到OSSEC Agent从客户端发来的信息

图2-33 通过控制台查看报警

在客户端浏览器中打开OSSIM管理界面,在ANALYSIS→DETECTION→HIDS下,可以查看到代理已成功添加,状态为Active,如图2-34所示。将鼠标移动到ID号前面“!”位置处,这样就能查看当前Agent的工作状态。

图2-34 查看OSSEC Agent工作状态

当鼠标移动到扇形区域上时,会立刻显示出当前OSSEC日志名称及所占比例,单击该区域会调出SIEM中显示的OSSEC事件。另外在命令行下操作时,还可以知道更详细的信息。在命令行中输入以下命令来执行这个操作。

#/var/ossec/bin/agent_control –lc

OSSEC将日志存储在/var/ossec/logs/alerts目录中,其格式为/var/ossec/logs/alerts/年/月/ossecalerts日期.log,其中的年和月表示日志事件生成的年份和月份,如图2-35所示。

OSSEC日志是文本格式,这意味着可以直接查看。OSSEC日志也支持Perl脚本检索。在关联分析之后,OSSIM把重要的OSSEC报警数据按照一定格式转储到MySQL的AlienVault库中以便今后分析,这才是最重要的数据。另外,可以在SIEM控制台中通过数据源筛选快速查看HIDS事件。

图2-35 查看OSSEC报警日志

调用规则的后台文件为XML格式,其存放路径为/var/ossec/alienvault/rules/目录,如图2-36所示。

图2-36 OSSEC规则的存放路径

实验环境:

OSSEC Server和Agent之间通过UDP 1514端口通信。在故障排除过程中,监听该端口尤为重要。下面简单列举了5种方法来检测故障。

#ngrep -q -d any port 1514

#tcpdump src 192.168.11.123 and port 1514
#nc –vuz 192.168.11.2 1514

参数含义如下所示。

v:输出交互信息。

u:指定nc使用UDP。

z:表示zero,扫描时不发出任何数据。

#tshark –z io,stat,1,ip.addr==192.168.11.2
 #dumpcap -i eth0 -w udp.pcap –f "udp and host 192.168.11.2"
 #tcpdump –r udp.pcap

以上5种方法也适用于检测SSH服务、Apache服务及NetFlow服务故障。

出现这种情况时,需要在安装OSSEC Agent的Windows系统中检查Agent是否启动,重启后即可恢复。如果OSSIM服务器依然没收到日志,可以重启服务器端的ossec-control服务,方法如下。

#/var/ossec/bin/ossec-control stop      //先停止
#/var/ossec/bin/ossec-control start     //后启动

故障现象:OSSEC工作不正常,提示Disconnected错误信息,反复单击刷新按钮均无法连接服务器。遇到这类故障时,首先将两端防火墙关闭。

步骤1.输入命令/var/ossec/bin/agent_control –la。

localhost:~#/var/ossec/bin/agent_control -la
OSSEC HIDS agent_control. List of available agents:
   ID: 000, Name: localhost (server), IP: 127.0.0.1, Active/Local

步骤2.重启Apache以及alienvault-api服务。

# /etc/init.d/apache2 restart; /etc/init.d/alienvault-api restart

如果依然无法连接,则可以进行抓包分析。

步骤3.抓包分析。

为了过滤无用的数据包,只抓取主机192.168.109.100上通过UDP 1514端口发过来的数据包。为此可输入以下命令。

#tcpdump –n –v –i eth0 udp port 1514 and host 192.168.109.100

如果没有收到任何数据包,则说明客户端的Agent安装有问题,建议卸载并重装。

对于/var/log/suricata/目录下的JSON文件,先看下面的实例。通过tail命令获取到eve.json文件的内容。

#tail -n 1 /var/log/suricata/eve.json.1
{"timestamp":"2017-12-28T23:00:51.097948-0500","flow_id":1585554788675645,"in_iface":"eth0","event_type":"tls","src_ip":"192.168.11.1","src_port":64946,"dest_ip":"192.168.11.160","dest_port":443,"proto":"TCP","tls":{"subject":"CN=alienvault","issuerdn":"CN=alienvault"}}

经过下面的处理后,这个文件将更容易理解,其含义如下。

{
"timestamp":"2017-12-28T23:00:51.097948-0500",时间戳
"flow_id":1585554788675645,
"in_iface":"eth0", 接口
"event_type":"tls",日志类型
"src_ip":"192.168.11.1",源IP地址
"src_port":64946,源端口
"dest_ip":"192.168.11.160",目的IP地址
"dest_port":443,目的端口
"proto":"TCP",协议类型
"tls":{"subject":"CN=alienvault","issuerdn":"CN=alienvault"
   }
}

为了说明OSSEC报警示意,先打开/etc/ossim/agent/plugins/ossec-single-line.cfg插件,在第1段有下面的描述:

AV - Alert - "$TIMESTAMP" --> RID: "$RULEID"; RL: "$RULELEVEL"; RG: "$RULEGROUP"; RC: "$RULECOMMENT"; USER: "$DSTUSER"; SRCIP: "$SRCIP"; HOSTNAME: "$HOSTNAME"; LOCATION: "$LOCATION"; EVENT: "[INIT]$FULLLOG[END]"; </custom_alert_output>

这段描述定义了输出插件的格式。先看个例子。

打开文件/var/ossec/logs/alerts/2018/Mar/ossec-alerts-08.log,在系统中截取第2 216行内容,如下所示。

AV - Alert - "1520565635" --> RID: "5501"; RL: "3"; RG: "pam,syslog,authentication_success,"; RC: "Login session opened."; USER: "None"; SRCIP: "None"; HOSTNAME: "alienvault"; LOCATION: "/var/log/auth.log"; EVENT: "[INIT]Mar  8 22:20:34 alienvault sshd[45108]: pam_unix(sshd:session): session opened for user avapi by (uid=0)[END]";

其中各个参数表示的含义如下。

上面这段记录是/var/ossec/logs/alerts/2018/Mar/ossec-alerts-08.log文件中的一行日志,在SIEM控制台中它以表格的形式直观地体现给分析人员,如图2-37所示。

图2-37 OSSEC标准化事件与原始日志

下面列出部分测试题,以帮助读者强化对本章知识的理解。

1.当Suricata检测到一个可疑数据包时,根据事先设定的规则将整个数据包以(B)的方式存储到文件中。Suricata目前支持IPv4、IPv6的数据包,其输出格式可以被(E)程序处理,该程序可以将Suricata输出的内容存储到数据库中。

  A.文本

  B.二进制

  C.JSON

  D.XML

  E.Barnyard2 

  F.Barnyard

2.以下是OSSIM 5.5系统中Suricata的一段配置文件/etc/suricata/suricata.yaml。

第190~192行配置文件的作用是(B)。

  A.保存所有数据包,最大为1GB

  B.最大能分析1GB的数据包

3.Suricata打开alert-debug功能后会产生(B)影响。

  A.对系统无任何影响

  B.会导致检测时生成大量信息,使系统处理性能下降

4.在OSSIM 5系统中,NIDS由Suricata 3.2程序负责,其配置文件位于(A)。

  A./etc/suricata/suricata.yaml

  B./etc/suricata.yaml

5.在OSSIM 5中,Suricata默认的抓包方式为(A)模式。

  A.AF_PACKET

  B.IPFW

  C.PF_RING

6.命令suricata -c /etc/suricata/suricata.yaml -i eth0的作用是让Suricata以(A)模式启动。

  A.IDS

  B.IPS

7.命令suricata --list-runmodes的作用是(A)。

  A.列出Suricata所有运行模式

  B.列出Suricata运行参数

8.用(A)命令可以查看Suricata配置信息。

  A.suricata --build-info

  B.suricata –V

9.Suricata报警输出文件存储在(A)文件中。

  A./var/log/suricata/unified2.alert

  B./var/log/auth.log

  C./var/log/suricata/

10.分布式OSSIM系统中在(A)端使用命令行(C)可以查看各个OSSEC Agent的工作状态。

  A.Server

  B.Sensor

  C./var/ossec/bin/agent_control –lc 

  D./etc/init.d/ossec status

11.在OSSIM系统中,OSSEC模块将日志存储在(A)目录下。

  A./var/ossec/logs/alerts/

  B./var/log/ossim/

12.OSSEC Server与Agent之间的通信端口为(B)。

  A.TCP 1514

  B.UDP 1514

  C.UDP 514

13.要捕获OSSEC Server与Agent之间的通信,使用下列(A)命令最合适。

  A.ngrep –q –d any port 1514

  B.tcpdump

  C.scapy

  D.hping

14.为了在一台Windows Server 2008上安装OSSEC Agent,请根据下列选项按顺序写出正确的步骤(C、D、G)。

  A.从OSSEC官网下载Agent程序

  B.安装程序

  C.在Web UI上选择ENVIRONMENT→DETECTION菜单

  D.选择Agents,并单击ADD AGENT按钮,然后输入名称和Windows Server 2008的IP地址

  E.提取key

  F.将key复制到OSSEC Agent

  G.单击Download preconfigured agent for Windows按钮

15.在图2-38中箭头所示处通过Web UI自动部署HIDS Agent,它只能在下列(B)系统中安装成功。

  A.Linux 

  B.Windows 2000 

  C.UNIX

图2-38 部署HIDS Agent

16.Suricata工作在IDS模式下,若使用drop操作的规则,这些丢掉的数据包信息就会存储在drop.log文件中。(×)

17.Suricata和Snort都是单线程处理程序,只不过Suricata比Snort有更新的检测规则。(×)

18.Suricata在检测流量之前需要将所有的规则签名加载到内存。(√)

19.Suricata启用自带的IPS功能就可拦截网络中的有害数据包。(×)

20.通过vi/var/log/suricata/unified2.alert.1514956476命令可以以文本方式查看Suricata日志。(×)

21.OSSEC日志由纯文本格式的文件组成。(√)

22.OSSIM中HIDS数据通过在交换机设置端口镜像(SPAN)来获取。(×)

23.若Sensor系统重装导致OSSEC Server的密钥失效,那么所有OSSEC Agent连接会失效。(√)

24.OSSIM服务器防火墙规则中默认放行1514端口,故在Windows 7/8/2012系统上安装OSSEC Agent时无须客户端关闭防火墙。(√)


相关图书

综合安防系统建设与运维(初级)
综合安防系统建设与运维(初级)
Airflow实战
Airflow实战
站点可靠性工程(SRE)实战
站点可靠性工程(SRE)实战
TongWeb中间件实用教程
TongWeb中间件实用教程
分布式系统设计实践
分布式系统设计实践
开源安全运维平台OSSIM疑难解析:入门篇
开源安全运维平台OSSIM疑难解析:入门篇

相关文章

相关课程