家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生 家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生
您现在的位置:首页 >> 电脑初学知识 >> 信息正文

用Snort从原理上检测MS05-051攻击

2009-2-28 1:23:14 来源: 不详 作者:佚名 访问:0次 字号:【
    ms05-051漏洞及相关的攻击代码和蠕虫已经出现一些日子了,从ids的角度来看,如何检测利用ms05-051漏洞的攻击呢?

snort虽然提供了一些规则来检测攻击相关的请求,但并远不是攻击本身:

alert udp $external_net any -> $home_net 1024: (msg:"netbios dcerpc direct-udp ixnremote buildcontextw little endian attempt"; flowbits:isset,dce.bind.ixnremote; content:"|05|"; byte_test:1,&,16,3,relative; content:"|00|"; within:1; distance:1; content:"|07 00|"; within:2; distance:19;)
alert tcp $external_net any -> $home_net 1024: (msg:"netbios dcerpc direct v4 ixnremote buildcontextw attempt"; flow:established,to_server; content:"|04 00|"; byte_test:1,!&,16,2,relative; content:"|e0 0c|k|90 0b c7|g|10 b3 17 00 dd 01 06|b|da|"; within:16; distance:22; content:"|00 07|"; within:2; distance:28; pcre:"/^.{10}/sr";)
alert udp $external_net any -> $home_net 1024: (msg:"netbios dcerpc direct-udp v4 ixnremote buildcontextw attempt"; content:"|04 00|"; byte_test:1,!&,16,2,relative; content:"|e0 0c|k|90 0b c7|g|10 b3 17 00 dd 01 06|b|da|"; within:16; distance:22; content:"|00 07|"; within:2; distance:28; pcre:"/^.{10}/sr";)
alert tcp $external_net any -> $home_net 1024: (msg:"netbios dcerpc direct ixnremote buildcontextw attempt"; flow:established,to_server; flowbits:isset,dce.bind.ixnremote; content:"|05|"; byte_test:1,!&,16,3,relative; content:"|00|"; within:1; distance:1; content:"|00 07|"; within:2; distance:19;)
alert tcp $external_net any -> $home_net 1024: (msg:"netbios dcerpc direct ixnremote buildcontextw little endian attempt"; flow:established,to_server; flowbits:isset,dce.bind.ixnremote; content:"|05|"; byte_test:1,&,16,3,relative; content:"|00|"; within:1; distance:1; content:"|07 00|"; within:2; distance:19;)
alert udp $external_net any -> $home_net 1024: (msg:"netbios dcerpc direct-udp ixnremote buildcontextw attempt"; flowbits:isset,dce.bind.ixnremote; content:"|05|"; byte_test:1,!&,16,3,relative; content:"|00|"; within:1; distance:1; content:"|00 07|"; within:2; distance:19;)
alert tcp $external_net any -> $home_net 1024: (msg:"netbios dcerpc direct v4 ixnremote buildcontextw little endian attempt"; flow:established,to_server; content:"|04 00|"; byte_test:1,&,16,2,relative; content:"|e0 0c|k|90 0b c7|g|10 b3 17 00 dd 01 06|b|da|"; within:16; distance:22; content:"|07 00|"; within:2; distance:28; pcre:"/^.{10}/sr";)
alert udp $external_net any -> $home_net 1024: (msg:"netbios dcerpc direct-udp v4 ixnremote buildcontextw little endian attempt"; content:"|04 00|"; byte_test:1,&,16,2,relative; content:"|e0 0c|k|90 0b c7|g|10 b3 17 00 dd 01 06|b|da|"; within:16; distance:22; content:"|07 00|"; within:2; distance:28; pcre:"/^.{10}/sr";)

对于正常的请求,这些规则也可能触发告警,显然这是不令人满意的。


漏洞分析
--------

要检测攻击当然需要先对ms05-051漏洞作一下比较深入的成因分析,以下的分析完全整理自小四(scz at nsfocus dot com)的工作。

漏洞的成因在于远程调用msdtcprx!buildcontextw()时存在内存破坏问题,msdtcprx.dll!buildcontextw()对应dce-rpc 7号调用,相应的 简请求报文参数手工解码如下:

--------------------------------------------------------------------------
0x00, 0x00,                                     // +0x000 param0开始,2字节长
0x00, 0x00,                                     // 填充字节,4字节对齐
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +0x004 param1开始,24字节长
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00,                         // +0x018 param2开始,参数 大可能长度,4字节长
0x00, 0x00, 0x00, 0x00,                         // 参数 小可能长度,4字节长
0x01, 0x00, 0x00, 0x00,                         // 参数实际长度,4字节长
0x00, 0x00,                                     // 参数串,unicode格式
0x00, 0x00,                                     // 填充字节,4字节对齐
0x01, 0x00, 0x00, 0x00,                         // +0x028 pwszhostname,param3开始,参数 大可能长度,4字节长
0x00, 0x00, 0x00, 0x00,                         // 参数 小可能长度,4字节长
0x01, 0x00, 0x00, 0x00,                         // 参数实际长度,4字节长
0x00, 0x00,                                     // 参数串,unicode格式
0x00, 0x00,                                     // 填充字节,4字节对齐
0x01, 0x00, 0x00, 0x00,                         // +0x038 pwszuuidstring param4开始,参数 大可能长度,4字节长,正常情况下应该是0x00000025,如果大于此值则是畸形的
0x00, 0x00, 0x00, 0x00,                         // 参数 小可能长度,4字节长
0x01, 0x00, 0x00, 0x00,                         // 参数实际长度,4字节长
0x00, 0x00,                                     // 参数串,unicode格式
0x00, 0x00,                                     // 填充字节,4字节对齐
0x01, 0x00, 0x00, 0x00,                         // +0x048 param5开始,参数 大可能长度,4字节长,正常情况下应该是0x00000025,如果大于此值则是畸形的
0x00, 0x00, 0x00, 0x00,                         // 参数 小可能长度,4字节长
0x01, 0x00, 0x00, 0x00,                         // 参数实际长度,4字节长
0x00, 0x00,                                     // 参数串,unicode格式
0x00, 0x00,                                     // 填充字节,4字节对齐
0x01, 0x00, 0x00, 0x00,                         // +0x058 pwszguidout param6开始,参数 大可能长度,4字节长
0x00, 0x00, 0x00, 0x00,                         // 参数 小可能长度,4字节长
0x01, 0x00, 0x00, 0x00,                         // 参数实际长度,4字节长
0x00, 0x00,                                     // 参数串,unicode格式
0x00, 0x00,                                     // 填充字节,4字节对齐
0x00, 0x00, 0x00, 0x00,                         // +0x068 param7
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,                         // +0x074 count
0x00, 0x00, 0x00, 0x00                          // +0x078 array[*]
                                                // +0x07c
--------------------------------------------------------------------------

该函数的第5、6形参使用了一种少见的特殊类型,当参数 大可能长度大于0x25时,可能触发内存破坏漏洞,事实上为了触发漏洞,并不要求第5、6形参本身超长。利用这个漏洞,远程攻击者可能以distributed transaction coordinator服务进程所拥有的权限在目标系统上执行任意指令。

此漏洞攻击的目标端口是可变的,可以通过查询3372端口的msdtc服务来得到目标端口,一般大于等于1024,可暴力猜测扫描。


现有攻击代码的分析
------------------

swan[at]0x557[dot]org 发布了一个攻击代码,导致攻击的畸形buildcontextw()请求如下:

transmission control protocol, src port: 4738 (4738), dst port: 1030 (1030), seq: 73, ack: 61, len: 1024
dce rpc request, fragment: single, fraglen: 1324, call: 1 ctx: 0, [resp: #9]
    version: 5
    version (minor): 0
    packet type: request (0)
    packet flags: 0x83
        1... .... = object: set
        .0.. .... = maybe: not set
        ..0. .... = did not execute: not set
        ...0 .... = multiplex: not set
        .... 0... = reserved: not set
        .... .0.. = cancel pending: not set
        .... ..1. = last frag: set
        .... ...1 = first frag: set
    data representation: 10000000
    frag length: 1324
    auth length: 0
    call id: 1
    alloc hint: 1284
    context id: 0
    opnum: 7
    object uuid: 906b0ce0-c70b-1067-b317-00dd010662da
    response in frame: 9
[packet size limited during capture: dcerpc truncated]

0000  00 0c 29 95 cc 65 00 12 3f 99 da 9f 08 00 45 00   ..)..e..?.....e.
0010  04 28 46 96 40 00 80 06 20 65 c0 a8 07 0a c0 a8   .(f.@... e......
0020  07 7a 12 82 04 06 80 f4 f5 18 90 a5 58 90 50 18   .z..........x.p.
0030  ff c3 5f 8f 00 00 05 00 00 83 10 00 00 00 2c 05   .._...........,.
0040  00 00 01 00 00 00 04 05 00 00 00 00 07 00 e0 0c   ................
0050  6b 90 0b c7 67 10 b3 17 00 dd 01 06 62 da 00 00   k...g.......b...
0060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0070  00 00 00 00 00 00 00 00 00 00 06 00 00 00 00 00   ................
0080  00 00 06 00 00 00 31 00 31 00 31 00 31 00 31 00   ......1.1.1.1.1.
0090  00 00 07 00 00 00 00 00 00 00 07 00 00 00 31 00   ..............1.
00a0  31 00 31 00 31 00 31 00 31 00 00 00 00 00 58 02   1.1.1.1.1.....x.
00b0  00 00 00 00 00 00 2b 02 00 00 cc cc cc cc cc 00   ......+.........
00c0  cc 00 cc 00 cc 00 cc 00 cc 00 cc 00 cc 00 cc 00   ................
                   ....
0420  cc 00 cc 00 cc 00 cc 00 cc 00 cc 00 cc 00 cc 00   ................
0430  cc 00 cc 00 cc 00                                 ......

从tcp数据区开始我们手工解码如下:

05                                              // dce rpc请求头开始,总24字节长,version: 5
00                                              // version (minor): 0
00                                              // packet type: request (0)
83                                              // packet flags: 0x83,带object,也就是说参数开始前有16字节长的uuid
上一页123下一页
打印本文   加入收藏   返回顶部   关闭窗口Tags:用S|Sn|no|o  

网站: http://www.hnygpx.net 报名电话:0731-5579057   13807313137 报名信箱: yp5579@263.net 咨询QQ: 361928696,873219118 

校址:湖南省长沙市雨花区红花坡路176号(正圆厂内)。 来校路线:长沙火车站售票处后坪乘135路至"鼓风站"下车,回走100米即到

电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校
中山市,固原市,银川市,玉树,海东,陇南市,酒泉市,张掖市,天水市,金昌市,兰州市,榆林市,延安市,渭南市,铜川市,阿里,山南,拉萨市,怒江,文山州,楚雄州,普洱市,昭通市,玉溪市,昆明市,毕节,铜仁,遵义市,贵阳市,甘孜州,资阳市,达州市,宜宾市,南充市,遂宁市,绵阳市,泸州市,自贡市,三亚市,崇左市,河池市,玉林市,钦州市,梧州市,柳州市,梅州市,肇庆市,湛江市,佛山市,珠海市,韶关市,湘西州,怀化市,郴州市,张家界市,邵阳市,株洲市,仙桃市,随州市,荆州市,荆门市,襄樊市,黄石市,驻马店市,信阳市,南阳市,漯河市,中卫市,石嘴山市,海西,海南藏州,黄南州,海北,甘南,庆阳市,平凉市,武威市,白银市,嘉峪关市,安康市,汉中市,咸阳市,宝鸡市,林芝,日喀则,昌都,迪庆,德宏,大理,西双版纳,红河州,临沧市,丽江市,保山市,曲靖市,黔东州,黔西州,安顺市,六盘水市,凉山州,阿坝州,雅安市,广安市,眉山市,内江市,广元市,德阳市,攀枝花市,成都市,海口市,来宾市,百色市,贵港市,北海市,桂林市,南宁市,云浮市,揭阳市,潮州市,清远市,阳江市,汕尾市,惠州市,茂名市,江门市,汕头市,深圳市,广州市,娄底市,永州市,益阳市,岳阳市,湘潭市,长沙市,恩施州,黄冈市,孝感市,鄂州市,十堰市,武汉市,周口市,商丘市,三门峡市,许昌市,焦作市,安阳市,鹤壁市,平顶山市,开封市,郑州市,聊城市,滨州市,德州市,莱芜市,日照市,泰安市,烟台市,潍坊市,东营市,淄博市,上饶市,济南市,抚州市,宜春市,赣州市,新余市,九江市,景德镇市,宁德市,南平市,泉州市,莆田市,厦门市,宣城市,亳州市,六安市,宿州市,黄山市,滁州市,安庆市,淮北市,马鞍山市,蚌埠市,芜湖市,合肥市,丽水市,舟山市,衢州市,金华市,湖州市,嘉兴市,宁波市,宿迁市,镇江市,盐城市,连云港市,苏州市,徐州市,南京市,绥化市,牡丹江市,佳木斯市,大庆市,鹤岗市,哈尔滨市,白城市,白山市,辽源市,吉林市,葫芦岛市,铁岭市,盘锦市,阜新市,锦州市,本溪市,鞍山市,沈阳市,锡林郭勒盟,通辽市,乌海市,吕梁市,忻州市,晋中市,晋城市,阳泉市,太原市,廊坊市,承德市,保定市,邯郸市,唐山市,宁夏,甘肃省,西藏,贵州省,重庆市,广西,湖南省,河南省,江西省,安徽省,江苏省,黑龙江省,辽宁省,山西省,天津市,四平市,内蒙古,吴忠市,果洛,西宁市,定西市,商洛市,西安市,那曲,黔南州,巴中市,乐山市,贺州市,防城港市,东莞市,河源市,常德市,衡阳市,咸宁市,宜昌市,濮阳市,新乡市,洛阳市,菏泽市,临沂市,威海市,济宁市,枣庄市,青岛市,吉安市,鹰潭市,萍乡市,南昌市,龙岩市,漳州市,三明市,福州市,池州市,巢湖市,阜阳市,铜陵市,淮南市,台州市,绍兴市,温州市,杭州市,泰州市,扬州市,淮安市,南通市,常州市,无锡市,大兴安岭,黑河市,七台河市,伊春市,双鸭山市,鸡西市,齐齐哈尔市,延边,松原市,通化市,长春市,朝阳市,辽阳市,营口市,丹东市,抚顺市,大连市,阿拉善盟,兴安盟,乌兰察布市,巴彦淖尔市,呼伦贝尔市,鄂尔多斯市,赤峰市,包头市,呼和浩特市,临汾市,运城市,朔州市,长治市,大同市,衡水市,沧州市,张家口市,邢台市,秦皇岛市,石家庄市,青海省,陕西省,云南省,四川省,海南省,广东省,湖北省,山东省,福建省,浙江省,上海市,吉林省,河北省,北京市