OSSIM开源安全信息管理系统(九)

2021SC@SDUSC




本周继续分析 OSSIM 系统 Framework 部分的源代码,对 Framework.py 所引用的其他类进行进一步分析。
同时,会对 OSSIM 的可疑流量检测技术进行部分分析,其余内容放在下周进行

一、源代码分析:

get_current_backup_files(self)

该函数主要功能为获取当前的备份文件,并将结果存放到 backup_files 中

def get_current_backup_files(self):
	backup_files = []
    try:
        backup_files = glob.glob(os.path.join(self.__bkConfig['backup_dir'], 'insert*.sql.gz'))
    except Exception as err:
        logger.error("An error occurred while reading the current database backups %s" % str(err))
    return backup_files

checkDiskUsage(self)

该函数主要功能为检查最大磁盘使用率,判断当前空闲可用空间是否可以满足最小可用空间的需要

def checkDiskUsage(self):
    mega = 1024 * 1024

下面涉及到一个磁盘文件系统相关的函数 statvfs() :

os.statvfs(): 该方法主要用于返回包含文件描述符 fd 的文件的文件系统的信息。

返回值:

  • f_bsize: 文件系统块大小
  • f_frsize: 分栈大小
  • f_blocks: 文件系统数据块总数
  • f_bfree: 可用块数
  • f_bavail:非超级用户可获取的块数
  • f_files: 文件结点总数
  • f_ffree: 可用文件结点数
  • f_favail: 非超级用户的可用文件结点数
  • f_fsid: 文件系统标识 ID
  • f_flag: 挂载标记
  • f_namemax: 最大文件长度
disk_state = os.statvfs('/var/ossim/')

#当前可用空间以及最小可用空间的计算(以兆字节为单位)。
capacity = float((disk_state.f_bsize * disk_state.f_blocks)/mega)
free_space = float( (disk_state.f_bsize * disk_state.f_bavail) / mega)
percentage_free_space = (free_space * 100)/capacity
min_free_space_allowed  = 10
try:
    min_free_space_allowed = 100 - int(_CONF[VAR_BACKUP_MAX_DISKUSAGE])
except Exception,e:
    logger.error("Error when calculating free disk space: %s" % str(e))

可用空间大小的比较

#日志输出相关允许的最小可用空间和当前可用空间的信息
logger.debug("Min free space allowed: %s - current free space: %s" %(min_free_space_allowed,percentage_free_space))

#比较最小可用空间和当前可用空间的大小,如果最小可用空间大于当前可用空间,返回 false
if percentage_free_space < min_free_space_allowed:
    return False
return True

__is_process_running(self, process_name="")

该函数主要功能为检查系统中是否有指定进程正在运行

使用函数 commands.getoutput 来执行 shell 命令,在Python 2中,经常使用 commands 模块来执行 shell 的命令,尤其是常用 getstatusoutput() 函数。但是在 python 3 中没有此函数了。
grep:-v 反向查找,为了去除包含 grep、tail 的进程行 ,避免影响最终数据的正确性 。
wc -l 显示行数

def __is_process_running(self, process_name=""):
    try:
        num_process = int(commands.getoutput("ps auxwww | grep %s | grep -v grep | grep -v tail | wc -l" % process_name))
        if num_process > 0:
            return True
    except Exception, e:
        logger.warning("Error checking process status '%s': %s" % process_name, str(e))

    return False

二、可疑流量检测技术

在大多数网络流量分析中,较为有效的检测方法是基于特征码的检测,因为恶意流量(例如病毒、僵尸网络、木马、蠕虫、Rootkit等)在构造和内容上都不同于正常流量,所以我们可以创建攻击特征来进行比对检测。

1、通过特征检测

以 OSSIM 系统中的 Snort 为例,一个恶意流量的特征可以被创建成一个规则,而载入 Snort 检测引擎(负责特征匹配)。

Snort 是如何对规则进行处理的?重点要了解 Snort 检测引擎如何工作,下面看个例子:

alert icmp $EXTERNAL_NET any ->$HOME_NET any (msg:"ICMP PING NMAP";dsize:0;type: 8;)

该规则表示:对于来自外部网络、有效载荷数据为空,并且 ICMP 类型值为 8 的 ICMP 流量产生报警。

这里假设一个场景:攻击者利用 Nmap 工具对一个网段进行扫描,这里利用 nmap ping 的一个特点,它将 ICMP 类型域值设定为 8,并且有效载荷为空。攻击者发送这样的数据包,发现了该网段存活的主机,进而再对其进行更深入的扫描。

由于 Snort 监控的端口在交换机上做了端口镜像,那么在该网段发生的所有扫描都会被记录下来。


2、检测可疑的载荷

Snort 特征并不只是检测 IP 数据包头部的数据,还能进行深度检测。我们需要检测隐藏在一个看似正常的数据包中的可疑载荷,例如:在 OSSIM 4 系统中,打开 /etc/snort/rules/deleted.rules 文件,查看第 5807 行的规则,内容如下所示:

5807 alert tcp $EXTERNAL_NET any -> $HONE_ NET 139 (msg:"DELETED NETBIOS SMB IPC$  unicode share access"; flow:established, to_seruer; content :"1001"; depth:1; content :"IFFISMBu"; within:5; distance:3; bygte_test:1,&,128,6,relative; pcre:"/^.{27}/sR"; byte_jump:2,7,little,relative; content:"II00IPI00ICI00 24 00 00 001"; distance:2; nocase: flowbits:set,smb,tree.connect.ipc; flowbits:noalert; classtype:protocol-command-decode; sid:538; rev:17;)

这条规则的含义为:对任何一个净载荷中含有 “I|00|P|00|C|00 24 00 00 00|,并且数据包头表明是从外部网络发给运行 SMB (Server Message Block)服务的计算机的 TCP 流量产生报警。在检测中发现,sid=538 所占比例比较大,这种净载荷可能会引起 Windows 系统缓冲区溢出,最终机器崩溃。只有这种净载荷是从外部发给运行 NETBIOS (TCP139 端口)的计算机时,才需要注意这一规则。

SMB 协议基于 TCP-NETBIOS ,NetBIOS 相关的端口分别是:137、138、139。其中,137 端口表示 NETBIOS Name Service,138 端口表示 NETBIOS Datagram Service,139 端口表示 NETBIOS Session Service。


3、检测具体元素

从系统性能上考虑,Snort 特征可以具体针对特殊协议的某一个元素描述进行检测

一个示例:
查看 /etc/snort/rules/web-iis.rules 文件中第 136 行内容,内容如下所示:

136 alert tcp $EXTERNAL_NET any -> $HTIP_SERUERS $HTTP_PORTS (msg:"WEB-IIS ISAPI .ida attempt"; flow:to_server,established; content:".ida?"; fast_pattern; nocase; http_uri: metadata:service http; reference:arachnids,552; reference:bugtraq,1065; reference:cve,2000-0071; reference:cve,2001-0540; classtype:web-application-attack; sid:1243; rev:19;)

这个规则代表对任何一个来自外部网络发往本地 Web 服务器,并且 URL 中包含 .ida? 的网络流量将产生报警。

Microsoft IIS .IDA/.IDQ ISAPI 扩展远程路径泄露漏洞出现在 Windows NT/2000 的系统中,是个古老的漏洞了。.ida 扩展名是 Windows NT/2000 系统索引服务的组件,通过 IIS 的 .ida.idq 映射可以使用 Index Server 检索,IIS 对于不存在的 .ida.idq、文件的访问请求没有很好地处理。可能导致 WEB 服务器泄露网站文件的绝对路径。

比如,对于未修复 MS01-033 补丁的一台 Windows 2000 Server IIS 服务器,就会遭受 CodeRed.F (红色代码)病毒的攻击,并向其他未打补丁的机器传播,被攻击的具体现象是发出大量 GET/default.ida?XXXX 请求,那么这种含有 .ida 的流量就会被 Snort 发现并报警。对于这类漏洞,最新的 Windows 系统已消除。



本篇文章部分内容参考或转载自下列文章及书籍。侵权即删。

参考书籍:

  • 《开源安全运维平台OSSIM疑难解析(入门篇)》——李晨光著
  • 《开源安全运维平台OSSIM疑难解析(提高篇)》——李晨光著
  • 《开源安全运维平台:OSSIM最佳实践》——李晨光著

参考文章:

  • https://blog.51cto.com/chenguang/2426473
  • https://blog.csdn.net/lcgweb/article/details/101284949
  • https://blog.51cto.com/chenguang/1665012
  • https://www.cnblogs.com/lsdb/p/10000061.html
  • https://blog.51cto.com/chenguang/1691090
  • https://blog.51cto.com/chenguang/category10.html
  • https://blog.51cto.com/topic/ossim.html
  • https://blog.csdn.net/isinstance/article/details/53694361
  • https://blog.51cto.com/chenguang/1332329
  • https://www.cnblogs.com/airoot/p/8072727.html
  • https://blog.51cto.com/chenguang/1738731
  • https://blog.csdn.net/security_yj/article/details/120153992

上一篇:OSSIM开源安全信息管理系统(八)
下一篇:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌兮_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值