zoukankan      html  css  js  c++  java
  • 【转】Snort语法规则说明及实例讲解

    转载来自:【IPS分析】Snort语法规则说明及实例讲解

    方向操作符:
    方向操作符"->"表示规则所施加的流的方向。方向操作符左边的ip地址和端口号被认为是流来自的源主机,方向操作符右边的ip地址和端口信 息是目标主机,还有一个双向操作符

    "<>"。它告诉snort把地址/端口号对既作为源,又作为目标来考虑。这对于记录/分析双向对话很方 便,例如telnet或者pop3会话。用来记录一个telnet会话的两侧的流的范例如下:

    log !192.168.1.0/24 any <> 192.168.1.0/24 23

    Activate 和 dynamic 规则:

    注:Activate 和 dynamic 规则将被tagging 所代替。在snort的将来版本,Activate 和 dynamic 规则将完全被功能增强的tagging所代替。

    Activate 和 dynamic 规则对给了snort更强大的能力。你现在可以用一条规则来激活另一条规则,当这条规则适用于一些数据包时。在一些情况下这是非常有用的,例如你想设置一条规则:当一条规则结束后来完成记录。Activate规则除了包含一个选择域:activates外就和一条alert规则一样。Dynamic规则除 了包含一个不同的选择域:activated_by

    外就和log规则一样,dynamic规则还包含一个count域。

    Actevate规则除了类似一条alert规则外,当一个特定的网络事件发生时还能告诉snort加载一条规则。Dynamic规则和log规则类似,但它是当一个activate规则发生后被动态加载的。把他们放在一起如下图所示:

    activate tcp !$HOME_NET any -> $HOME_NET 143 (flags: PA; content: "|E8C0FFFFFF|/bin"; activates: 1; msg: "IMAP buffer overflow!";)
    dynamic tcp !$HOME_NET any -> $HOME_NET 143 (activated_by: 1; count: 50;)

    规则选项

    规则选项组成了snort入侵检测引擎的核心,既易用又强大还灵活。所有的snort规则选项用分号";"隔开。规则选项关键字和它们的参数用冒号":"分开。按照这种写法,snort中有42个规则选项关键字。

    msg -       在报警和包日志中打印一个消息。
    logto -      把包记录到用户指定的文件中而不是记录到标准输出。
    ttl -       检查ip头的ttl的值。
    tos -       检查IP头中TOS字段的值。
    id -        检查ip头的分片id值。
    ipoption -    查看IP选项字段的特定编码。
    fragbits -     检查IP头的分段位。
    dsize -      检查包的净荷尺寸的值 。
    flags -      检查tcp flags的值。
    seq -       检查tcp顺序号的值。
    ack -       检查tcp应答(acknowledgement)的值。
    window -      测试TCP窗口域的特殊值。
    itype -       检查icmp type的值。
    icode -      检查icmp code的值。
    icmp_id -      检查ICMP ECHO ID的值。
    icmp_seq -     检查ICMP ECHO 顺序号的值。
    content -     在包的净荷中搜索指定的样式。
    content-list   在数据包载荷中搜索一个模式集合。
    offset -     content选项的修饰符,设定开始搜索的位置 。
    depth -      content选项的修饰符,设定搜索的最大深度。
    nocase -     指定对content字符串大小写不敏感。
    session -     记录指定会话的应用层信息的内容。
    rpc -       监视特定应用/进程调用的RPC服务。
    resp -       主动反应(切断连接等)。
    react -      响应动作(阻塞web站点)。
    reference -    外部攻击参考ids。
    sid -       snort规则id。
    rev -       规则版本号。
    classtype -    规则类别标识。
    priority -    规则优先级标识号。
    uricontent -   在数据包的URI部分搜索一个内容。
    tag -        规则的高级记录行为。
    ip_proto -    IP头的协议字段值。
    sameip -     判定源IP和目的IP是否相等。
    stateless -   忽略刘状态的有效性。
    regex -     通配符模式匹配。
    distance -    强迫关系模式匹配所跳过的距离。
    within -     强迫关系模式匹配所在的范围。
    byte_test -   数字模式匹配。
    byte_jump -   数字模式测试和偏移量调整。
    flow -      这个选项要和TCP流重建联合使用。它允许规则只应用到流量流的某个方向上。这将允许规则只应用到客户端或者服务器端

    举例说明:
    例子1:

    alert tcp any any -> any 3306 
    (msg:"MySQL Server Geometry Query Integer溢出攻击"; flow:to_server,established; dsize:<300; flags:A; content:"|03|"; nocase; offset:4; depth:1; content:"select|20|geometryn|28|0x00000000000700000001"; distance:10; within:50; reference:cve,2013-1861; reference:bugtraq,58511; classtype-danger:medium; tid:14999; rev:1;)

    规则头:alert tcp any any -> any 3306 //匹配任意源IP和端口到任意目的IP和端口为3306的TCP数据包发送告警消息。
    规则选项:

    msg:"MySQL Server Geometry Query Integer溢出攻击";  //在报警和包日志中打印的消息内容。
    flow:to_server,established;               //检测向服务器发送方向的报文。
    dsize:<300;                        //应用层负载包长度小于300
    flags:A;                          //TCP flags值为10
    content:"|03|"; nocase; offset:4; depth:1;      //负载偏移4取1的值为03,不区分大小写,这块写的应该是有问题字符串有不区分大小写,16进制不涉及。

    //相对于上面的03特征向后偏移10个字节之后再取50个字节,
    //50个字节里边包含select|20|geometryn|28|0x00000000000700000001
    content:"select|20|geometryn|28|0x00000000000700000001"; distance:10; within:50;
    reference:cve,2013-1861; reference:bugtraq,58511; //可参考cve和bugtraq
    classtype-danger:medium;                //危险等级中等
    sid:20141107;                       //规则ID
    rev:1                            //版本信息,第一个版本

    例子2:
    heartbleed漏洞下行检测规则

    alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"openssl Heartbleed attack";flow:to_server,established; content:"|18 03|"; depth: 3; byte_test:2, >, 200, 3, big; byte_test:2, <, 16385, 3, big; threshold:type limit, track by_src, count 1, seconds 600; reference:cve,2014-0160; classtype:bad-unknown; sid:20140160; rev:2;)


    规则头:alert tcp $EXTERNAL_NET any -> $HOME_NET 443 EXTERNAL_NET和HOME_NET都在/etc/snort/snort.conf中配置。

    规则选项:

    msg:"openssl Heartbleed attack";                 //消息信息
    flow:to_server,established;                    //向服务器发送的请求包检测一次
    content:"|18 03|"; depth: 3;                   //头部3个字节之内存在0x1803
    byte_test:2, >, 200, 3, big;                   //从第3个字节开始取2个字节的大字节序大于200
    byte_test:2, <, 16385, 3, big;                   //从第3个字节开始取2个字节的大字节序小于16385
    threshold:type limit, track by_src, count 1, seconds 600;  //限速 600s记录一次按src地址进行记录
    reference:cve,2014-0160;                     //参考cve编号
    classtype:bad-unknown;                       //危害级别
    sid:20140160;                            //规则ID
    rev:2;                                //版本2


    附:
    bugtraq:http://www.securityfocus.com/
    cve:http://cve.mitre.org/compatible/product_type.html
    cnvd:http://www.cnvd.org.cn/
    可利用kali虚拟机中nmap,nessus,CIS或者X-scan对系统进行扫描,产生告警纪录

  • 相关阅读:
    119. Pascal's Triangle II
    118. Pascal's Triangle
    112. Path Sum
    111. Minimum Depth of Binary Tree
    110. Balanced Binary Tree
    108. Convert Sorted Array to Binary Search Tree
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    陌陌面试经历
  • 原文地址:https://www.cnblogs.com/Lthis/p/4949766.html
Copyright © 2011-2022 走看看