荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: hellsolaris (qq), 信区: Security
标  题: IDS逃避技术和策略
发信站: 荔园晨风BBS站 (Sat Nov  1 12:57:17 2003), 站内信件

当谈到  NIDS 技术时, Blackhats(安全研究员和网络入侵检测系统 NIDS的 开发者)
不断地玩点- 对位法游戏. 当 NIDS 厂商不断地用补丁与新版本还击时,BlackHat 社区
不断地开发系统去逃避或绕过 NIDS 感应器. 由於在捕获、分析、理解网络流通方面其
固有复杂性,几种常用技术可用于去利用NIDS内在弱点
这篇文章中,从头至尾我们将会讲解基本的逃避技术和提议补救方法,或在这些攻击中
应找寻什么。基于本文的目的,我们将不仅考虑完整的隐藏攻击的过程,而且还考虑用
于伪装攻击威胁性的技术。这些技术能被区分为三个特殊类别与一个一般类别(与错误
否定和糟糕的实现问题密切联系)。这种方法通过字符串匹配弱点、集成弱点和服务技
术的拒绝来攻击NIDS
基本字符串匹配弱点
基于基本字符串匹配弱点的攻击是最易执行与理解的. 以签字为基础的IDS几乎完全依赖
字符串匹配,而破坏签字的字符串匹配是常有的事。不是所有的IDS装置都是以签字为基
础,但绝大多数是。因为它是一个公开的来源工具,我们可使用Snort 签字来示范可适用
概念.
为示范基本要求,我们将试着去存取/etc/passwd 文件(一个包含使用者名字、成员、
相关的SHELL的 Unix 文件)。下列各项是一个可适用的snort签字:
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:"WEB-MISC
/etc/passwd";flags: A+; content:"/etc/passwd"; nocase;
classtype:attempted-recon; sid:1122; rev:1;)
这个签字试着去匹配字符串 /etc/passwd 。由於这个签字过分简单化的特性,它能非常
容易地改变字符串(不管它是 HTTP信息流通的事实,稍后我们将会接触). 变更字符串的
例子与GET /etc//\//passwd类似。这种风格的攻击变体可以是
/etc/rc.d/.././\passwd 和数不尽的其他例子。通过仔细创造(一般足以捕获绝大多数
变体的)签字,这种基本逃避类型相当易于抵抗。对IDS开发者公平一点,大部份比较流
行的 IDSs 有足够的匹配字符串能力以便于发现绝大多数的变体。然而,仍然有数次签字
被拙劣书写以至于允许基本字符串逃避IDS
打破IDS的字符串匹配基本技术导致更先进的、更难抵抗的、更难执行的技术。这儿有一
个例子可被用于尝试读/etc/passwd文件。通过相互作用部分例如telnet。相似的IDS签
字存在于一个(误用和后门的列举式样)尝试中是很正常的。这些签字可能找寻通常黑
客的名字,文件和程序. 在我们的尝试在交互部分从passwd文件中获取数据中,我们可
使用指令行翻译器。通过使用指令行翻译器,我们能搞乱一个简单的cat /etc/passwd命
令进入:
badguy@host$ perl ?e
‘$foo=pack(“C11”,47,101,116,99,47,112,97,115,115,119,100);
@bam=`/bin/cat/ $foo`; print”@bam\n”;’
这没有其它方法与IDS尽力想匹配的/etc/passwd字符串相似。因为IDS必须理解翻译器与
什么正传给它,所以抵抗更困难。IDS只能简单的对使用可疑翻译器的命令行发出警告,
但它不能容易的确切的匹配翻译器处理的东西。
通过融合串处理技术与字符替换技术,我们能进入更复杂的字符串混乱/处理。我们能使
用在与(平常的网络请求中的)上述例子相似的技术,因此不需要翻译器。Hex为/etc/p
asswd 编译的 url请求可以相比拟
GET %65%74%63/%70%61%73%73%77%64
or
GET %65%74%63/%70a%73%73%77d
使用常见的字符串匹配试着去捕捉每个变体,仅为这个字符串,你大概需要1000多个签
字。这还未考虑Unicode。Unicode提供个性表现的其它方法.(Unicode所代表的IDS问题
不在本文的讨论范围内,其细节可在SecurityFocus的文章IDS Evasion with Unicode中
找到)RainForestPuppy开发的HTTP 扫描工具Whisker结合了几个这样的方法,这里做些
简短描述:
-I 1 IDS-evasive mode 1 (URL encoding)
        -I 2 IDS-evasive mode 2 (/./ directory insertion)
        -I 3 IDS-evasive mode 3 (premature URL ending)
        -I 4 IDS-evasive mode 4 (long URL)
        -I 5 IDS-evasive mode 5 (fake parameter)
        -I 6 IDS-evasive mode 6 (TAB separation) (not NT/IIS)
        -I 7 IDS-evasive mode 7 (case sensitivity)
        -I 8 IDS-evasive mode 8 (Windows  delimiter)
        -I 9 IDS-evasive mode 9 (session splicing) (slow)
        -I 0 IDS-evasive mode 0 (NULL method)
这些方法的完全描述是可在A Look At Whisker’s Anti-IDS Tactics中得到.所有的Whi
sker结合的方法(包括URI 请求的方式)已格式化,稍后被讨论的会话异常终止除外
通过在比较储存器负载量和字符串前做完所有必需的协议转化与更好的理解协议,IDS装
置处理了大多数的这些逃避技术。从流程的立场来看,所有的字符转换变贵值得注意,
一个IDS没必要去喜欢做大范围的字符转换。为减少处理负荷,开发者可能只在广为人知
的某特定信息流通的端口上的运行解码。当某协议配置以监听(并非联系IDS著明端口的
)端口时,这确实提供能力回避IDS。
最近的IDS软件发行上述的(能较好处理在知名端口上的信息流量)的技术;然而, 一年
或更早的系统却不能.
Polymorphic Shell Code
Polymorphic Shell Code更危险,最近开发了IDS装置不容易抵抗的逃避战略. K2开发的P
olymorphic Shell Code是以病毒逃避技术为基础.该技术限制缓冲溢出,在抵抗签字基
础的系统方面,比异常的或记录分析为基础的系统更有效。例如:让我们看Snort为SSH
CRC32缓冲溢出所提供的签字

alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32
overflow /bin/sh"; flags:A+; content:"/bin/sh"; reference:bugtraq,2347;
reference:cve,CVE-2001-0144; classtype:shellcode-detect; sid:1324; rev:1;)


alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32
overflow NOOP"; flags:A+; content:"|90 90 90 90 90 90 90 90 90 90 90 90
90 90 90
正如我们所见到的,第一条规则只是用目的端口与被定义的$HOME_NET 目的网络寻找str
ing /bin/sh 。第二个签字用22目的端口与$HOME_NET 目的网络寻找一些 x86 no-op字
符。Polymorphic Shell Cod使用几种方法逃避字符串匹配系统.首先,它使用其它非x90
字符去运行no-op操作。近期,在x86上使用了55个替换(少于其它体系结构)。这些被
混合在(可衡量的)伪随机的方式中去创造no-op区段。一有效no-op替换的完整列表可
在http://cansecwest.com/noplist-v1-1.txt.获得。shell code本身是使用一种 XOR
机制编译为密码。这产生了与以上签字不相似的缓冲溢出,而且可抵制标准字符串匹配

用签字为基础的设计探测polymorphic shell code是非常具有挑战性的。一些探测polym
orphic shell code思想可在下一期Security Technologies白皮书Polymorphic
Shellcodes vs. Application IDSs中找到。研究的基本前提是通过寻找一个象字符的某
特定长度模式的no-op ,polymorphic shell code能被用高准确度探测到。最近,Drago
s Ruiu发表了polymorphic pre-processor for Snort (spp_fnord),它使用与上述描述
相似的规则去探测。
这个前处理器结构是端口和相关长度. 因此,举例来说,某人可以为 polymorphic 逃避
技术配置前处理器去检查端口 80,21,23和 53. 上的信息通量。这会仍然让所有的其他
端口例如 22 因怀疑 SSH而对polymorphic 逃避技术敏感。有了高效的polymorphic 发
现引擎,
有效的装置管理能实质上减少polymorphic 逃避技术成功的可能性。
session splicing
上述的逃避方法尝试(在不涉及部分或一个攻击如何通过多样储存器分批递送的情况下
)匹配储存器里的一个字符串。Whisker有另外的网络- 水平逃避方法(叫做session
splicing)。session splicing依下列各项把字符串分割成几个数据包:
数据包编号 内 容
1 G
2 E
3 T
4 20
5 /
6 H
通过一次传递几个字节,可逃避字符串匹配。为了处理这, IDS或需要观察与理解sessio
n 或通过其它技术来发现逃避技术。Snort规定发现如下各项.
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:"WEB-MISC whisker
space splice attack"; content:"|20|"; flags:A+; dsize:1;
reference:arachnids,296; classtype:attempted-recon; reference
由于ack 旗子设置,这条规则发现流通量注定到端口80---一个在负载量和 1 的
dsize (将会实际上捕捉最初二个字节)中的地方(hex 20)。当这准确的发现这个工具
的时,
这方法可被调整以逃避IDS. 为防止这种情况,它可能采用上述的Snort规则。并且扩充
它到找寻携带 异常小的负载量的 HTTP 请求。这将会很有可能导致一些错误的警报,且
仍然能够在某种情况下被规避. 为了真正的抵抗这种情况,IDS应完全了解session(这
是很困难的)和加强处理器。有一点值得注意:大多数的现有系统的确象session,但它
们通常有他们特定的一段重新装配的时间。这能被利用依赖申请,举例来说:在
RedHat 上的Apache
对于六分钟内的session会超时,但在 Win2K 之上的 IIS 将会保持session长期有活力

它是可能每 15 分钟送一字节,而且 IIS 将会仍然考虑这有效的期间. 最新Snort版本
有能力长期观测session,也有能力留意网络水平骗局,如低的 TTL值

--

--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.44.223]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店