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

snort实现入侵检测功能 一、安装 概念 用snort软件打造入侵监测系统: 入侵监测系统和防火墙关系 总结:从概念上我们可以看出防火墙是针对黑客攻击的一种被动的防御,IDS则是主动出击寻找潜在的攻击者;防火墙相当于一个机构的门卫,收到各种限制和区域的影响,即凡是防火墙允许的行为都是合法的,而IDS则相当于巡逻兵,不受范围和限制的约束,这也造成了IDS存在误报和漏报的情况出现。 IDS是继防火墙之后的又一道防线,防火墙是防御,IDS是主动检测,两者相结合有力的保证了内部系统的安全; IDS实时检测可以及时发现一些防火墙没有发现 阅读详情
创建时间:2005-12-27 更新时间:2005-12-28
文章属性:原创
文章提交:
stardust (stardust_at_xfocus.org)

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
10 00 00 00                                     // Data Representation: 10000000
2c 05                                           // Frag Length: 1324
00 00                                           // Auth Length: 0
01 00 00 00                                     // Call ID: 1
04 05 00 00                                     // Alloc hint: 1284
00 00                                           // Context ID: 0
07 00                                           // Opnum: 7

e0 0c 6b 90 0b c7 67 10 b3 17 00 dd 01 06 62 da // Object UUID,16字节长,这里并不应该是当前填的这个,但不影响攻击
00 00                                           // param0开始,2字节
00 00                                           // 填充字节,4字节对齐
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // param1开始,24字节
00 00 00 00 00 00 00 00
06 00 00 00                                     // param2开始,参数最大可能长度,当前值为0x06
00 00 00 00                                     // 参数最小可能长度,当前值为0x00
06 00 00 00                                     // 参数实际长度,当前值为0x06
31 00 31 00 31 00 31 00 31 00 00 00             // 参数串,Unicode格式的串,长度为6*2=12字节
07 00 00 00                                     // param3开始,参数最大可能长度,当前值为0x07
00 00 00 00                                     // 参数最小可能长度,当前值为0x00
07 00 00 00                                     // 参数实际长度,当前值为0x07
31 00 31 00 31 00 31 00 31 00 31 00 00 00       // 参数串,Unicode格式的串,长度为7*2=14字节
00 00                                           // 填充字节,4字节对齐
58 02 00 00                                     // param4开始,参数最大可能长度,当前值为0x258=600>37,畸形!导致攻击
00 00 00 00                                     // 参数最小可能长度,当前值为0x00
2b 02 00 00                                     // 参数实际长度,当前值为550
cc cc cc cc cc 00 cc 00 cc 00 cc 00 cc 00 cc 00 // 以下为参数串,不重要


攻击请求的检测
--------------

近期出现的Dasher蠕虫使用了改写后的Swan代码作为攻击传播的手段之一,针对这个特定的攻击代码,可以写出如下一个针对检测畸形BuildContextW()请求的Snort规则来方便地检测攻击:

alert tcp $EXTERNAL_NET any -> $HOME_NET 1024: (msg:"EXPLOIT MSDTC Overflow Attempt"; flow:to_server,established; content:"|05 00 00 83|"; offset:0; depth:4; content:"|2c 05|"; offset:8; depth:2; content:"|e0 0c 6b 90 0b c7 67 10 b3 17 00 dd 01 06 62 da|"; offset:24; depth:16; content:"|cc 00 cc 00 cc 00 cc 00 cc 00 cc 00 cc 00 cc 00|"; offset:208; dsize:1024; reference:url,
www.microsoft.com/technet/security/bulletin/MS05-051.mspx; rev:5;)

规则的匹配要点如下:

1. TCP协议
2. 目标端口大于等于1024
3. DCE RPC头的主次版本号,“/x05/x00”
4. DCE RPC头的Packet type: Request (0),“/x00”
5. DCE RPC头的Packet Flags: 0x83,Object位置位,带Object,“/x83”
6. DCE RPC头的Frag Length: 1324,“/x2c/x05”
7. Object UUID,“/xe0/x0c/x6b/x90/x0b/xc7/x67/x10/xb3/x17/x00/xdd/x01/x06/x62/xda”
8. 一些攻击代码带的特征串,“/xcc/x00/xcc/x00/xcc/x00/xcc/x00/xcc/x00/xcc/x00/xcc/x00/xcc/x00”
9. 数据区长度等于1024

上述的规则无疑缺陷多多,因为是针对特定攻击代码的而不是基于漏洞成因的,误报的可能性虽然不大,但漏报的可能非常大,对攻击代码稍加修改即可躲过此规则的检测:攻击代码可以改成不带Object,包长完全可以不等于1024,Object的UUID可以也可以改为任意值,攻击包里的“/xcc/x00/xcc/x00/xcc/x00”填充串也可以改成别的。

新版Snort提供了新的匹配选项和功能,具体细节可以参看Snort的手册或我写的贴子:

Snort 2.x数据区搜索规则选项的改进
http://www.xfocus.net/releases/200509/a824.html

利用这些新增的匹配能力可以写出如下基于原理的检测规则:

alert tcp any any -> any 1024:1050 (flow:to_server,established; content: "|05 00 00|"; offset: 0;depth: 3; byte_test: 1, >, 128, 3, little; byte_test: 2, >, 100, 8, little; content: "|07 00|"; offset: 22; depth: 2; byte_jump: 4, 76, multiplier 2, align, little; pcre: "/......../R"; byte_jump: 4, 0, relative, align, multiplier 2, little; byte_test: 4, >, 37, 0, relative, little; msg: "DCE-RPC MSDTC Malform Opnum 7 Request (MS05-051 with object)"; rev:3;)

匹配要点结合上面的攻击报文解码分析如下:

05                                              // content: "|05 00 00|"; offset: 0;depth: 3;,匹配DCE RPC主次版本号和包类型
00                                              //
00                                              //
83                                              // byte_test: 1, >, 128, 3, little;,值大于128,表示最高位的Object位置位
10 00 00 00                                     //
2c 05                                           // byte_test: 2, >, 100, 8, little;,值大于100,要使攻击成功,请求不能太小
00 00                                           //
01 00 00 00                                     //
04 05 00 00                                     //
00 00                                           //
07 00                                           // content: "|07 00|"; offset: 22; depth: 2;,Opnum 7,BuildContextW()调用

e0 0c 6b 90 0b c7 67 10 b3 17 00 dd 01 06 62 da //
00 00                                           // param0
00 00                                           //
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // param1
00 00 00 00 00 00 00 00
06 00 00 00                                     // param2
00 00 00 00                                     //
06 00 00 00                                     // byte_jump: 4, 76, multiplier 2, align, little;,当前匹配指针跳到下一个参数开始处
31 00 31 00 31 00 31 00 31 00 00 00             //
07 00 00 00                                     // param3,pcre: "/......../R"; ,跳过总8个字节长的两个长度字段
00 00 00 00                                     //
07 00 00 00                                     // byte_jump: 4, 0, relative, align, multiplier 2, little; ,跳到下一个参数开始处
31 00 31 00 31 00 31 00 31 00 31 00 00 00       //
00 00                                           //
58 02 00 00                                     // param4,byte_test: 4, >, 37, 0, relative, little;,检查param4的最大可能长度是否大于37,大于的话则认为是攻击
00 00 00 00                                     //
2b 02 00 00                                     //
cc cc cc cc cc 00 cc 00 cc 00 cc 00 cc 00 cc 00 //


告警关联
--------

如上改进后的规则可以从原理上检测到畸形的Opnum为7的畸形BuildContextW()请求,但是即使如此还是有很大的问题:其一,由于目标端口的不确定性,规则可能匹配到其他运行在各种不同端口上的各种不同的协议;其二,即使匹配的对象就是DCE RPC协议,还是有可能匹配到其他类型的操作,所以上述规则虽然在大多数情况下不会有漏报,但很有可能导致误报。如果能够关联此畸形的BuildContextW()请求和之前的DCE-RPC BIND MSDTC操作,那么基本上就不会有什么误报了。

匹配DCE-RPC BIND MSDTC的操作是很简单的,可以用如下规则:

alert tcp any any -> any 1024:1050 (flow:to_server,established; content: "|05 00 0b|"; offset: 0; depth: 3; byte_test: 2, =, 72, 8, little; content: "|e0 0c 6b 90 0b c7 67 10 b3 17 00 dd 01 06 62 da|"; offset: 32; depth: 16; msg: "DCE-RPC MSDTC BIND Request"; rev:1;)

匹配要点结合下面的报文解码分析如下:

Transmission Control Protocol, Src Port: 4738 (4738), Dst Port: 1030 (1030), Seq: 1, Ack: 1, Len: 72
DCE RPC Bind, Fragment: Single, FragLen: 72, Call: 1
    Version: 5                                  // content: "|05 00 0b|"; offset: 0; depth: 3;,匹配DCE RPC的主次版本号及报文类型
    Version (minor): 0
    Packet type: Bind (11)
    Packet Flags: 0x03
        0... .... = Object: Not 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: 72                             // byte_test: 2, =, 72, 8, little;,匹配请求长度,此BIND请求差不多此固定长度
    Auth Length: 0
    Call ID: 1
    Max Xmit Frag: 5840
    Max Recv Frag: 5840
    Assoc Group: 0x00000000
    Num Ctx Items: 1
    Context ID: 0
        Num Trans Items: 1
        Interface UUID: 906b0ce0-c70b-1067-b317-00dd010662da  // content: "|e0 0c 6b 90 0b c7 67 10 b3 17 00 dd 01 06 62 da|"; offset: 32; depth: 16;,匹配UUID串
            Interface Ver: 1
            Interface Ver Minor: 0
            Transfer Syntax: 8a885d04-1ceb-11c9-9fe8-08002b104860
            Syntax ver: 2

0000  00 0c 29 95 cc 65 00 12 3f 99 da 9f 08 00 45 00   ..)..e..?.....E.
0010  00 70 46 95 40 00 80 06 24 1e c0 a8 07 0a c0 a8   .pF.@...$.......
0020  07 7a 12 82 04 06 80 f4 f4 d0 90 a5 58 54 50 18   .z..........XTP.
0030  ff ff 69 7e 00 00 05 00 0b 03 10 00 00 00 48 00   ..i~..........H.
0040  00 00 01 00 00 00 d0 16 d0 16 00 00 00 00 01 00   ................
0050  00 00 00 00 01 00 e0 0c 6b 90 0b c7 67 10 b3 17   ........k...g...
0060  00 dd 01 06 62 da 01 00 00 00 04 5d 88 8a eb 1c   ....b......]....
0070  c9 11 9f e8 08 00 2b 10 48 60 02 00 00 00         ......+.H`....

接下来的事就是如何关联此BIND请求和畸形的BuildContextW()请求,Snort本身不具有事件关联能力,但可以使用SEC(Simple Event Correlator)达到这个目的。SEC是一个轻量级的基于规则的事件关联引擎,这个工具完全用Perl实现,可以为多类事务提供强大的事件关联能力。如何使用工具及编写规则可以参看链接:
http://kodu.neti.ee/~risto/sec/

SEC可以读取Snort产生的告警日志的条目,结合上述的Snort规则,事件关联规则可以是如下这样:

ms05051.sec
---------------------------------- 8< -------------------------------------------
type=Single   # SEC规则类型
ptype=RegExp  # 匹配模式类型为正则表达式
pattern=^(.+) .+ DCE-RPC MSDTC Malform Opnum 7 Request .+ ([/d/.]+):?(/d*) -> ([/d/.]+):?(/d*)  # 匹配规则告警条目,匹配到畸形的BuildContextW()请求告警,并提取出告警时间,源目的IP和源目的端口
context=!MS05051$2$4 && MSDTC_BIND$2$3$4$5  # 分析上下文标记,MS05051$2$4(即“MS05051源目的IP”)是否不存在,此标记标志着已经在一段之前有相应源目的IP相关的MS05-051告警;MSDTC_BIND$2$3$4$5(即“MSDTC_BIND源IP端口目的IP端口”),是否存在,此标记标志着已经有MSDTC BIND操作发生。
desc=$1 [MSDTC MS05-051 Attack!] $2 -> $4  # 在一段时间内没有报过相应源目的IP MS05-051告警且有BIND操作的情况下,生成事件名
action=write - %s; delete MSDTC_BIND$2$3$4$5; create MS05051$2$4 60  # 输出告警,删除之前的BIND标记,创建已告警标记,超时为60秒,也就是说在60秒内不对相同源目的IP MSDTC攻击告警。

type=Single
ptype=RegExp
pattern=DCE-RPC MSDTC BIND Request .+ ([/d/.]+):?(/d*) -> ([/d/.]+):?(/d*)  # 匹配规则告警条目,匹配到MSDTC BIND操作事件
desc=$0
action=create MSDTC_BIND$1$2$3$4 2 # 创建BIND标记,以备之后可能匹配到畸形BuildContextW()请求时参考,超时2秒,也就是2秒内没有如果发现畸形BuildContextW()请求就作废而不作为参考。
---------------------------------- 8< -------------------------------------------


配置Snort与SEC协同工作
----------------------

主要的任务是配置SEC能够读取Snort告警信息的输出,这可以通过先进先出的PIPE进行。

对Snort的配置:

1. 创建先进先出的管道文件

   [root@ /usr/snort/logs]> mkfifo alert_pipe

2. 编辑snort.conf文件,插入输出告警信息到管道的配置行

   output alert_fast: alert_pipe
  
3. 重启Snort

安装并运行SEC

[root@ /usr/snort]> sec.pl -conf=ms05051.sec -input=logs/alert_pipe -debug=4
Simple Event Correlator version 2.3.2
Reading configuration from ms05051.sec
12/21-13:52:10.365657  [**] [MSDTC MS05-051 Attack!] 10.0.1.1 -> 10.0.1.113
实验六 端口扫描攻击检测 针对内外网用户的恶意扫描检测,通过snort 的端口扫描攻击检测,初步识别攻击的源 和目的地址,进行及时防御,将威胁降到最低,更好的保护公司单位网络的安全。 立即下载

相关推荐

snort网络入侵检测五种病毒

这是检测病毒的一个Word,这是在虚拟机里面病毒通信,然后抓包分析特征,制定规则。

网络入侵检测系统之Snort(二)

Environment Building ubuntu-14.04.5 daq-2.0.7 snort-2.9.16.1 ubuntu配置 sudo apt-get update sudo apt-get dist-upgrade -y sudo apt-get install -y openssh-server sudo reboot 安装snort依赖 sudo apt-get install -y build-essential sudo apt-get install -y libpcap

诗酒趁年华 683

告别GIS软件!用R语言ggplot2+ggmapcn绘制出版级世界地图(附5种投影对比图)

本文提供了一份完整的实践指南,教你如何利用R语言及其强大的ggplot2生态系统,结合ggmapcn包,绘制出出版级的世界地图。文章详细对比了五种经典地图投影(如摩尔维德、罗宾森投影)的代码实现与视觉差异,并讲解了如何添加比例尺、指北针等专业元素,最终导出高清PDF,实现从数据分析到专业可视化的全流程代码化操作,彻底告别传统GIS软件。

p5l2m9n4o6q的博客 409

【snort】snort规则编写

【作业】编写snort规则题目题目分析解决办法逻辑或的内容匹配——login 或 Initial两条规则匹配:设置flowbits规则IPV4地址匹配提交答案 题目 题目分析 本次题目对比第一次而言有不少难点: 两条规则 :两条规则同时匹配,才会命中某个报文流; 第一条规则中是对 “login” 或者 “Initial” 进行命中; has a " IPv4Address:Port " string (E.g.123.45.6.7:8080) in payload 第二条规则中的命中则是对一类地址进行匹

cwllll的博客 1873

国产操作系统应用迁移与适配

了解国产操作系统的背景及意义

2301_77609559的博客 2680

鸿蒙ijkplayer播放器调优实战:从卡顿掉帧到流畅播放RTSP,我都调了哪些参数?

本文深入解析鸿蒙平台上ijkplayer播放器优化RTSP流媒体播放的关键参数,解决卡顿、掉帧等问题。通过调整缓冲区管理、帧处理策略和网络超时设置,实现流畅播放体验,特别适用于监控和直播等高实时性场景。

weixin_29304021的博客 243

Snort的工作原理

Snort 工作流程分为以下四个主要部分: 1、包捕获/解码引擎:首先,利用libpcap从网卡捕获网络上的数据包,然后数据包经过解码引擎填入到链路层协议的包结构体中,以便对高层次的协议进行解码,如TCP和UDP端口。 2、预处理器插件:接着,数据包被送到各种各样的预处理器中,在检测引擎处理之前进行检查和操作。每个预处理器检查数据包是否应该注意、报警或者修改某些东西。 3、规则解析和检测引擎

luguifang2011的专栏 1万+

SOEM主站开发篇(1):移植SOEM主站到Linux开发板

详细介绍了SOEM主站源码移植到Linux开发板上的步骤,同时演示了如何使用Linux开发板获取EtherCAT从站的PDO映射信息。

kevin1499的博客 2399

Snort+Scapy(二)

本次实验的目的是构造规则检测连续的俩个流 if snort see two packets in a TCP flow with • first packet has “login” or “Initial” in payload, destination port is 3399; • and second packet has a “IPv4Address:Port”string(E.g. 123.45.6.7:8080) in payload. destination port is 3399; •

hxm的博客 1151

lammps蒙特卡洛MC模拟案例

在lammps中,和MC相关的模拟命令有三个:fix gcmc、fix atom/swap、fix sgcmc。在一个lammps模拟中,mc和md可同时存在,间隔运行,所以设置fix sgcmc命令的同时,可以同时设置系综(nve、nvt或者npt)。lammps官网自带案例中也有一个fix sgcmc的案例,主要模拟FeCu合金的MC建模。sgcmc命令可应用到合金的模拟中,如短程有序模拟。MC运行间隔为100步,最终的浓度比例为0.02,也就是2%的Fe原子交换为Cu原子。大家好,我是小马老师。

lammps_jiayou的博客 1827

RK3568开发笔记- (TX/RX) RGMII delayline 功能调试

本文详细介绍了RK3568芯片RGMII接口delayline功能的调试过程。针对千兆以太网通信不稳定问题,通过分析RGMII时序要求,利用RK3568内置的delayline功能补偿信号延迟。调试方法包括扫描delayline窗口、测试中间值配置、优化硬件设计等步骤。文章还总结了常见问题解决方案,如PHY选型建议和自动扫描功能配置。最终实现了千兆速率下丢包率降至0.01%以下的目标,为类似开发场景提供了实用参考。

flypig has a dream! 318

网络入侵检测--Snort软件配置文件snort.conf详解

按照配置文件的配置步骤,详细解释了配置文件的参数

小人物的编程 6962

ADS基础教程22 - 有限元电磁仿真(FEM)

一、引言二、FEM操作过程1.新建Layout1.新建Layout2.EM设置3.设置Frequency plan4.设置Output plan5.设置Options6.设置网格频率7.仿真结果三、总结介绍了在ADS中如何进行FEM仿真过程。END!}}END!

XZ_ZC的博客 2584

snort和sniffer技术原理

WinPcap可以使用在Windows 98、ME、2000、XP、Server 2003、Vista、Server 2008、Windows 7和Windows 8上,它支持多种网络协议和数据包格式,如Ethernet,IP,TCP,UDP,ICMP等。它拥有用户友好的图形用户界面,可以实时捕捉和绘制网络数据包的流动,同时还提供了深度网络和应用层协议解码、流量探测和过滤,以及多种分析工具等功能。,可以对网络流量进行审计,并生成具体的日志记录,从而帮助管理员或安全专员了解网络的使用情况和安全状况。

ryanzzzzz的博客 1546

一文看懂EMMC原理及工作过程

CMD:用于设备初始化和命令传输的双向通道, CMD信号有2种工作模式:1#:漏极开路--->用于初始化模式2#:推拉--->用于快速命令传输其中命令从eMMC主机控制器发送到eMMC设备,响应从设备发送到主机。DAT [7:0]:双向数据信号,模式包括:1(DAT0);默认情况下,通电或重置后,只有DAT0用于数据传输。DAT信号在推挽模式下工作,eMMC设备包括数据线DAT1-DAT7的内部上拉。进入4位模式后,设备立即断开线路DAT1、DAT2和DAT3的内部上拉;

Airer_00的博客 2039

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Snort规则详述

snort规则及规则后处理

weixin_51491521的博客 740

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

snort学习以及规则编写

一、结构 CIDF模型(Common Intrusion Detection Framework): 包含事 件生成器(event generator:E-boxes),分析引擎(analysis engines:A-boxes),存储机制(storage mechanisms:D-boxes),以及响应模块(countermeasures:C-boxes) SNORT数据流 snort ...

fa1lr4in的小博客 3136

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

基于网络(NIDS)

                                                                      入侵(Instruction)是个 广义的概念,不仅包括被发起攻击的人取得超出合法权限的系统的控制权,也包括搜集漏洞信息,造成拒绝访问(Denial of service)等对计算机系统造成危害的行为。 通过被动地监测网络上传输的原始流量,对获取的网络数据...

u011450981的博客 8423

snort规则编写简述

编写snort 规则 snort使用一种简单的,轻量级的规则描述语言,这种语言灵活而强大。在开发snort规则时要记住几个简单的原则。     第一, 大多数snort规则都写在一个单行上,或者在多行之间的行尾用/分隔。Snort规则被分成两个逻辑部分:规则头和规则选项。规则头包含规则的动作,协议,源和目标ip地址与网络掩码,以及源和目标端口信息;规则选项部分包含报警消息内容和要检查的

狂客队长 2万+

snort 笔记2 ----- 规则编写

为了看懂rules,可以看下文,想要写好,就没那么简单了。^-^。******************************************************************************************************************************************I 总体结构分析:alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "moun

云里雾里的专栏 2万+

入侵检测——masscan(扫描篇)

目录环境介绍工具简介数据包nmap的SYN扫描nc的TCP扫描masscan的扫描对比masscan、nc、nmap的SYN扫描规则 环境介绍 NAT模式: kali攻击方 win7受害者 Metasploitable受害者 工具简介 masscan号称是目前是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。 masscan的扫描结果类似于nmap,在内部,它更像scanrand, unicornscan, and ZMap,采用了异步传输的方式。它和这些扫描器最主要的区别是,它比这些扫描器更快。

LainWith的博客 5898

[转]如何编写snort的检测规则

如何编写snort的检测规则from:  http://kunming.cyberpolice.cn/aqjs/200010.html              摘要snort是一个强大的轻量级的网络入侵检测系统。它具有实时数据流量分析和日志IP网络数据包的能力,能够进行协议分析,对内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时

heiyeluren的blog(黑夜路人的开源世界) 5213

入侵检测——nmap

前言ping扫描UDP扫描SYN扫描 前言 这里介绍一下如何让入侵检测系统识别nmap扫描,nmap的扫描行为很多,这里介绍几个 ping扫描 命令: nmap -sn 10.71.35.0/24 根据数据包内容,你会发现一些共同点,我用红框标注了出来 itype:8 icode:0 icmp_seq:0 由于是icmp协议,所以设置协议类型为icmp,所以负载为0。你可以看到这是一个在短时间内发起大量扫描的行为,所以我还可以限制连接频率 注意:频率的控制很重要,不然极有可能无法检测到,我这里出于实.

LainWith的博客 1683

开源的 Snort 入侵检测系统中存在高危漏洞

聚焦源代码安全,网罗国内外最新资讯!编译:代码卫士开源的思科 Snort 检测和预防系统中存在一个漏洞 (CVE-2022-20685),可触发拒绝服务条件并使其无法抵御恶意流量。该漏洞的CVSS 评分为 7.5,位于 Snort 检测引擎的 Modbus 预处理器中,影响所有早于 2.9.19 之前的以及 3.1.11.0 版本的开源 Snort 项目。Snort 是...

smellycat000的专栏 737

如何编写snort的检测规则

如何编写snort的检测规则 2013年09月08日⁄ 综合⁄ 共 16976字 前言   snort是一个强大的轻量级的网络入侵检测系统。它具有实时数据流量分析和日志IP网络数据包的能力,能够进行协议分析,对内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,snort具有很好的扩展性和可移植性。本文将讲述如何开发snort规则。 1.基础 ...

weixin_30588827的博客 1596

编写snort规则检测网络攻击

Snort 规则被分成两个逻辑部分:规则头和规则选项。 规则头包含规则的 动作,协议,源和目标 ip 地址与网络掩码,以源和目标端口信息; 规则选项 部分包含报警消息内容和要检查的包的具体部分。 Alert:使用选择的报警方法生成一个警报,然后记录(log)这个包。 Alert 动作用来在一个包符合规则条件时发送告警消息。告警的发送有多种方式, 例如可以发送到文件或者控制台。 Snort 当前分析可疑包的 ip 协议有四种: tcp 、 udp、 icmp 和 ip。...

guansheng123的博客 5988
上一篇: 四项下一代入侵检测关键技术分析
下一篇: 高端技术:椭圆曲线密码体制与电子政务
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值