1.2 检测方法局限
NIDS常用的检测方法有特征检测、异常检测、状态检测、协议分析等。实际中的商用入侵检测系统大都同时采用几种检测方法。
NIDS不能处理加密后的数据,如果数据传输中被加密,即使只是简单的替换,NIDS也难以处理,例如采用SSH、HTTPS、带密码的压缩文件等手段,都可以有效的防止NIDS的检测。 NIDS难以检测重放攻击、中间人攻击、对网络监听也无能为力。
目前的NIDS还难以有效的检测DDoS攻击。
1.2.1 系统实现局限
由于受NIDS保护的主机极其运行的程序各种各样,甚至对同一个协议的实现也不尽相同,入侵者可能利用不同系统的不同实现的差异来进行系统信息收集(例如Nmap通过TCP/IP指纹来对操作系统的识别)或者进行选择攻击,由于NIDS不大可能通晓这些系统的不同实现,故而可能被入侵者绕过。
1.2.2 异常检测的局限
异常检测通常采用统计方法来进行检测。
异常检测需要大量的原始的审计纪录,一个纯粹的统计入侵检测系统会忽略那些不会或很少产生有会影响统计规律的审计纪录的入侵,即使它具有很明显的特征。
统计方法可以被训练而适应入侵模式。当入侵者知道他的活动被监视时,他可以研究统计入侵检测系统的统计方法,并在该系统能够接受的范围内产生审计事件,逐步训练入侵检测系统,从而其相应的活动简档偏离正常范围,最终将入侵事件作为正常事件对待。
应用系统越来越复杂,许多主体活动很难以简单的统计模型来刻画,而复杂的统计模型在计算量上不能满足实时的检测要求。
统计方法中的阈值难以有效确定,太小的值会产生大量的误报,太大的值会产生大量的漏报,例如系统中配置为200个/秒半开TCP连接为SYN_Flooding,则入侵者每秒建立199个半开连接将不会被视为攻击。
1.2.2.1 缓慢扫描
异常检测常用于对端口扫描和DoS攻击的检测。NIDS存在一个流量日志的上限,如果扫描间隔超过这个上限,NIDS将忽略掉这个扫描。
尽管NIDS可以将这个上限配置得很长,但此配置越长,对系统资源要求越多,受到针对NIDS的DoS攻击的可能性就越大。
1.2.3 特征检测的局限
检测规则的更新总是落后于攻击手段的更新,目前而言,一个新的漏洞在互联网上公布,第二天就可能在网上找到用于攻击的方法和代码,但相应的检测规则平均还需要好几天才能总结出来。存在一个发现新入侵方法到用户升级规则库/知识库的时间差,对有心的入侵者,将有充足的时间进行入侵。
很多公布的攻击并没有总结出相应的检测规则或者检测规则误报率很高。并且现在越来越多的黑客倾向于不公布他们发现的漏洞,从而很难总结出这些攻击的攻击特征。
目前新的规则的整理主要为志愿者或者厂家完成,由用户自行下载使用,用户自定义的规则实际上很少,在方便了用户的同时,也方便了入侵者:入侵者可以先检查所有的规则,然后采用不会被检测到的手段来进行入侵,大大降低被NIDS发现的概率。
目前总结出的规则主要针对网络上公布的黑客工具或者方法,但对于很多以源代码发布的黑客工具而言,很多入侵者可以对源代码进行简单的修改(例如黑客经常修改特洛伊木马的代码),产生攻击方法的变体,就可以绕过NIDS的检测。
1.2.4 协议局限
对于应用层的协议,一般的NIDS只简单的处理了常用的如HTTP、FTP、SMTP等,,尚有大量的协议没有处理,也不大可能全部处理,直接针对一些特殊协议或者用户自定义协议的攻击,都能很好的绕过NIDS的检查。
1.2.5 入侵变体
1.2.5.1 HTTP攻击变体
重复的目录分割符,‘/’变为‘//’。
当前目录,‘/cgi-bin/phf’变为‘/cgi-bin/./phf’。
上级目录,‘/cgi-bin/phf’变为‘/cgi-bin/xxx/../phf’。
URL编码,‘/cgi-bin/’变为‘%2fcgi-bin/’。
使用TAB等其它分割符代替空格。
NULL方法,‘GET %00/cgi-bin/phf’。
使用GET外的其它方法,例如POST。
改变参数顺序,添加无用参数。
对于IIS,还有以下方法:
DOS/Win下目录分割符,‘/winnt/system32/cmd.exe’变为‘/winnt\system32\cmd.exe’。
大小写转换,例如cmd.exe变为CMD.EXE。
IIS二次解码,例如cmd.exe变为%2563md.exe,%25解码后为’%’,再解码%63为’c’。
UNICODE编码,例如cmd.exe变为%c0%63md.exe。由于UNICODE编码比较复杂,目前只有极少数的NIDS能够对其进行解码。
1.2.5.2 Telnet攻击变体
使用退格键。
使用Tab键进行命令补齐。
采用Shell来执行攻击代码。
采用宏。
添加无用参数。
事实上NIDS很难检测那些通过Telnet连接到服务器后进行的本地攻击。
1.2.6 TCP/IP协议局限
由于TCP/IP设计当初并没有很好的考虑安全性,故现在的IPV4的安全性令人堪忧,除了上面的由于网络结构引起的问题外,还有下面的一些局限。
1.2.6.1 IP分片
将数据包分片,有些NIDS不能对IP分片进行重组,或者超过了其处理能力,则可以绕过NIDS。
一个IP数据报最多8192个分片,NIDS的一个性能参数即为能重组的最大的IP分片数。
NIDS每接收到一个新的IP数据报的IP分片的时候,将启动一个分片重组过程,在重组完成或者超时后(一般为15秒超时)关闭此重组过程,NIDS的一个性能参数即为能同时重组的IP包数。
一个IP数据报的最大为64K,为准备接收一个IP数据报,NIDS将准备足够的内存来容纳即将到来的后续分片,NIDS的一个性能参数即为能进行重组的最大的IP数据报的长度。
结合上面的三个参数,即为NIDS在超时时间(例如15秒)内能同时准备进行最大值(例如64K)的IP数据报重组的数目。
如果NIDS接收到的数据包超过上述的极限,NIDS不得不丢包,从而发生DoS攻击。
1.2.6.2 IP重叠分片
在重组IP包分片的时候,如果碰到重叠分片的话,各个操作系统的处理方法是不一样的,例如有些系统会采用先收到的分片(Windows和Solaris),有些会采用后收到的分片(BSD和Linux),如果重叠分片的数据不一样的话,并且NIDS的处理方式与受保护主机不一样,则将导致NIDS重组后的数据包与被保护主机的数据包不一致,从而绕过NIDS的检测。
例如可以重叠TCP或UDP的目的端口,然后渗透过目前绝大多数防火墙,并可能绕过NIDS。
还可以重叠TCP的标志位,使NIDS不能正确检测到TCP FIN包,从而使NIDS很快达到能够同时监控的TCP连接数的上限;使NIDS不能正确检测到TCP SYN包,从而使NIDS检测不到应有的TCP连接。
1.2.6.3 TCP分段
如果NIDS不能进行TCP流重组,则可以通过TCP分段来绕过NIDS。
一些异常的TCP分段将迷惑一些NIDS。
1.2.6.4 TCP un-sync
在TCP中发送错误的序列号、发送重复的序列号、颠倒发送顺序等,有可能绕过NIDS。
1.2.6.5 OOB
攻击者发送OOB数据,如果被保护主机的应用程序可以处理OOB,由于NIDS不可能准确预测被保护主机收到OOB的时候缓冲区内正常数据的多少,于是可能绕过NIDS。
有些系统在处理OOB的时候,会丢弃开始的1字节数据(例如Linux下的Apache,但IIS不会),则通过在发送的多个TCP段中,包含带OOB选项的TCP段,则有可能导致NIDS流重组后的数据与受保护主机的应用程序不一致,从而绕过NIDS。
1.2.6.6 T/TCP
如果目标主机可以处理事物TCP(目前很少系统支持),攻击者可以发送事务TCP,NIDS可能不会与被保护主机上的应用程序进行同样的处理,从而可能绕过NIDS。