入侵检测系统(IDS)是一种用于实时监控网络攻击行为并触发警报的安全工具。可以这样理解:防火墙如同守门员,负责把守入口;而IDS则更像巡逻的便衣警察,主动搜寻可疑活动。因此,掌握绕过IDS的方法,对于漏洞扫描、脚本注入、URL攻击等安全技术具有重要意义——反过来,也能帮助IDS自身不断完善。
Snort是一款广为人知的IDS工具,但它并非无懈可击。接下来,我们将探讨一种突破基于网络的IDS(如Snort)的有效手段:多态URL技术。
提到“多态”,熟悉病毒技术的朋友可能会联想到加密变形。实际上,URL多态编码与病毒多态变形有异曲同工之妙——通过不同的表现形式实现相同的访问效果。同一个URL可以使用多种编码方式呈现。当IDS进行实时检测时,会将抓取的数据包与规则集中的攻击特征字符串进行匹配——匹配成功则触发警报或拦截。但由于同一URL能够以不同形式表达,经过变形编码后的URL很可能不在IDS的规则库中,从而绕过其识别引擎,实现规避检测的目的。
多态URL编码技术种类繁多,本文介绍9种常用且具有代表性的方法。为便于说明,我们以 /msadc/msadcs.dll 这个URL为例——该路径已被Snort等主流IDS的规则集收录,直接提交必然会被拦截。
第一招:插入“/./”字符串
“./”在路径中表示当前目录,将其插入URL不会改变实际访问效果。例如,将 /msadc/msadcs.dll 改写为 /././msadc/././msadcs.dll 或 /./msadc/.//./msadcs.dll,即可扰乱IDS的匹配引擎。实验表明,此方法能成功绕过Snort等IDS。
第二招:利用ASCII码00截断
近期动网的上传漏洞就利用了此原理。计算机在处理字符串时,遇到ASCII码为00的字符会自动截断。我们可以将 /msadc/msadcs.dll 写成 /msadc/msadcs.dll Iloveheikefangxian,然后用Winhex将“.dll”与“Ilove”之间的空格修改为00的ASCII码,再通过NC配合管道符提交。这样,IDS看到的字符串与规则集中的特征不同,自然无法触发警报。这一原理应用广泛——从哲学角度看,事物相互关联,深入思考便能挖掘出内在规律。
第三招:使用路径分隔符“\”
对于微软IIS等Web服务器,“\”同样可以替代“/”作为路径分隔符。许多IDS在定义规则集时未考虑这种非标准分隔符。将 /msadc/msadcs.dll 改为 \msadc\msadcs.dll,即可绕过Snort——因为其规则集中不存在该字符串。另外,“\”的十六进制形式为%5c,此前《黑客防线》提到的“%5c暴库大法”正是利用了此特性。
第四招:十六进制编码
每个字符都可以用转义符“%”加上其十六进制ASCII码表示。例如,“/”对应%2F,其他字符类推。经过编码的URL面目全非,IDS规则集中很可能没有匹配项。但需注意,该方法对使用了HTTP预处理技术的IDS无效。
第五招:非法Unicode编码
UTF-8编码允许字符集包含超过256个字符,因此可以用多字节表示单字节字符。例如,“/”的十六进制是2F,除了标准单字节表示,还能用双字节(C0 AF)或三字节(E0 80 AF)表示。整个字符串均可采用类似编码,访问效果相同,但表现形式不同,IDS规则集中不会收录此类变体,从而绕过检测。
第六招:多余编码法(双解码)
注意,这与Unicode解码漏洞是两回事。多余编码是指对同一个字符进行多次编码。例如,“/”用%2f表示,而%2f中的%、2、f又可以分别用其十六进制表示。根据排列组合,%2f可以变为%25%32%66、%252f等多种形式。编码后的字符串很可能不在IDS规则集中,从而欺骗部分IDS。
第七招:加入虚假路径
在URL中插入“../”字符串,其后的目录实际上会被取消(因为“../”表示返回上级目录)。利用这一特性,可以干扰IDS的匹配引擎。例如,在 /msadc/msadcs.dll 中插入“../”路径,实际访问效果不变,但字符串已发生变化。
第八招:插入多斜线
用多个“/”替代单个“/”,访问效果一致。例如,////msadc////msadcs.dll,实验证明此方法能绕过某些IDS。
第九招:综合多态编码
聪明的读者想必已经明白——所谓综合,就是将前面几招组合使用,效果更佳。希望这些方法能为大家带来启发。
