| 推荐:从漏洞及攻击分析到NIDS规则设计 |
| 责任编辑:古典辣M° 更新日期:2005-12-8 |
|
|
mp;A: [1]为什么执行到loc_41FE30处会产生程序异常呢? 因为ebp-78这个变量的值本来是要改变文件时间的文件名的地址,但是由于在loc_41FDC3处 对变量ebp-84的操作中会覆盖它的值,如果我们输入命令 quote mdtm 20020102112233+aaaaaaaaaaaaaaaaaaaaaaaaaa /autoexec.bat 那么这时ebp-78的值就成了61616161,而这个地址是不能仿问的,当然就产生异常了.
[2]产生异常后我们怎么执行代码呢? 在分析刚开始的时候我们已经知道程序正常的异常处理程序入口在ebp-50中,那么我们只能把 系统中有jmp ebx的代码的地址放到ebp-50中就可以了.然后ebp-54中放入nop nop jmp 6(9090EB04)
[3]要发送多少个A才能刚好覆盖ebp-50,ebp-54呢? 84h-54h=30h=48d
====================================================================
从以上的分析中我们可以抽取出要造成攻击的FTP请求报文所必须具有的特征: 1. 目标端口为FTP服务控制端口(通常是21)的TCP包 2. 包含MDTM命令 3. 命令参数以14个数字字节开始 4. 数字字节的前4字节表示年份的数字介于1980到2075之间 5. 年份后的2字节表示月份的数字介于1到12之间 6. 月份后的2字节表示日期的数字介于1到31之间 7. 日期后的2字节表示分钟的数字介于0到59之间 8. 分钟后的2字节表示秒的数字介于0到59之间 9. 数字字节后紧跟“+”或“-”字符 10. “+”或“-”字符之后紧跟48字节以上的非空格数据 11. 非空格数据后必须有一个或多个空格以分隔第二个参数 12. 空格后的包含至少一个字节的非空格字节做为第二个参数
这些特征形成特征集A。
对照Snort规则描述的特征集C,我们可以看到这两个特征集远不是重合的关系,只能算是有一个不大的交集,以此规则检测攻击出现误报和漏报几乎是必然的。
比如,带有如下payload的报文将导致误报: “MDTM 1+abc”
带有如下payload的有效攻击报文将导致漏报: “MDTM 20021122334455+1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A”
既然已经分析清楚特征集A,在正则表达式强大描述能力的支持下,我们对Snort的规则进行改进使之与特征集A尽可能地接近,可以把匹配规则修改成如下这个样子:
alert tcp $EXTERNAL_NET any -> $HOME_NET 21 (msg:"FTP MDTM command overflow attempt"; flow:to_server,established; content:"MDTM"; nocase; pcre:"/MDTM\s+\d{14}[+-][^ ]{48,}\s+.+/smi"; reference:bugtraq,9751; reference:cve,2004-0330; classtype:attempted-admin; sid:2416; rev:5;)
这个规则匹配了特征集A中1、2、3、9、10、11、12编号的特征,这个改进后的规则形成的特征集C为特征集A的一个子集,此规则可能会导致误报而不可能产生漏报。
由此可见,漏洞及攻击分析在NIDS规则设计过程中具有极端重要性,它是规则设计的起点和基础,只有清楚地定义了攻击的特征集A,才有可能有针对性的设计出准确高效的NIDS检测规则。上一页 [1] [2] [3] [4] |
|
| 上一篇文章: 打破SSS的技术封锁 |
| 下一篇文章: 推荐:PHP漏洞中的战争 |
|
|
|
|