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 的文件的文件系统的信息。
返回值:
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等)在构造和内容上都不同于正常流量,所以我们可以创建攻击特征来进行比对检测。
以 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 监控的端口在交换机上做了端口镜像,那么在该网段发生的所有扫描都会被记录下来。
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。
从系统性能上考虑,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开源安全信息管理系统(八)
下一篇: