<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    3.4 Snort Non-payload 檢測規則選項

    3.4.1 fragoffset

    fragoffset關鍵字允許將IP片段偏移字段與十進制值進行比較。要捕獲IP會話的所有第一個片段,可以使用fragbits關鍵字并結合fragoffset為0查找More fragments選項。

    3.4.1.1 格式

    `fragoffset:[!|<|>]<number>;`

    3.4.1.2 例子

        alert ip any any -> any any
            (msg:"First Fragment"; fragbits:M; fragoffset:0;)

    3.4.2 ttl

    ttl 關鍵字用于檢查IP生存時間值。此選項關鍵字用于檢測traceroute嘗試。這個關鍵字取0到255之間的數字。

    3.4.2.1 格式

        ttl:[<, >, =, <=, >=]<number>;
        ttl:[<number>]-[<number>];

    3.4.2.2 例子

    這個示例檢查一個小于3的生存時間值。

    ttl:<3;

    這個示例檢查在3和5之間的生存時間值。

    ttl:3-5;

    此示例檢查在0到5之間的生存時間值。

    ttl:-5;

    這個示例檢查生存時間在5到255之間的值。

    ttl:5-;

    其他幾個例子如下:

        ttl:<=5;
        ttl:>=5;
        ttl:=5;

    以下例子不允許ttl關鍵字:

        ttl:=>5;
        ttl:=<5;
        ttl:5-3;

    3.4.3 tos

    tos關鍵字用于檢查IP TOS字段中的特定值。

    3.4.3.1 格式

    tos:[!]<number>;

    3.4.3.2 例子

    這個示例查找不是4的tos值:

    tos:!4;

    3.4.4 id

    id關鍵字用于檢查IP ID字段中的特定值。一些工具(exploit、掃描器和其他奇怪的程序)專門為各種目的設置該字段,例如,值31337在一些黑客中非常流行。

    3.4.4.1 格式

    id:<number>;

    3.4.4.2 例子

    這個示例查找IP ID 31337。

    `id:31337;`

    3.4.5 ipopts

    ipopts關鍵字用于檢查是否存在特定的IP選項。

    可以選擇以下選項:

    rr

    • 路由記錄

    eol

    • 列表結束符

    nop

    • No Op

    ts

    • 時間標識

    sec

    • IP安全協議

    esec

    • IP擴展安全

    lsrr

    • 寬松源路由選擇

    lsrre

    • 寬松源路由選擇(用于MS99-038和CVE-1999-0909)

    ssrr

    • 嚴格源路由選擇

    satid

    • 流標識符

    any

    • 設置任何IP選項

    最常被監視的IP選項是嚴格的和寬松的來源路由,沒有在任何廣泛的互聯網應用程序中使用。

    3.4.5.1 格式

    ipopts:<rr|eol|nop|ts|sec|esec|lsrr|lsrre|ssrr|satid|any>;

    3.4.5.2 例子

    這個示例查找寬松源路由的IP選項。

    ipopts:lsrr;

    3.4.5.3 警告

    每個規則只能指定一個ipopts關鍵字。

    3.4.6 fragbits

    fragbits 關鍵字用于檢查在IP報頭中是否設置了碎片和保留位。

    可以檢查以下位:

    M

    • 更多字段

    D

    • 不分段

    R

    • 保留位

    可以設置以下修飾符來更改匹配條件:

    +
    匹配指定的位和其他位

    *
    如果設置了指定的位,則匹配

    !

    如果未設置指定的位,則匹配

    3.4.6.1 格式

    fragbits:[+*!]<[MDR]>;

    3.6.6.2 例子

    這個示例檢查是否設置了More Fragment位和Do not Fragment位。
    fragbits:MD+;

    3.4.7 dsize

    dsize關鍵字用于測試數據包payload大小。這可用于檢查可能導致緩沖區溢出的大小異常的數據包。

    3.4.7.1 格式

        dsize:min<>max;
        dsize:[<|>]<number>;

    3.4.7.2 例子

    這個示例尋找的dsize在300到400字節(包括在內)之間。

    dsize:300<>400;

    3.4.7.3 警告

    請注意,分段使得dsize對于基于TCP的協議(如HTTP)不太可靠。此外,無論有效負載的大小如何,除非協議感知刷新(PAF)將此包標記為消息的開始,否則dsize將在流重新構建的包上失敗。

    3.4.8 flags

    flags關鍵字用于檢查是否存在特定的TCP標志位。

    可以檢查以下位:

    F

    • FIN -Finish (TCP標志字節中的LSB)

    S

    • SYN - 同步序列號

    R

    • RST - 重置

    P

    • PSH - Push

    A

    • ACK - 確認

    U

    • URG - 緊急

    C

    • CWR - 減少擁塞窗口(MSB在TCP標志字節中)

    E

    • ECE - ECN- echo(如果SYN,則ECN有能力。Else,設置IP頭中的CE標志)

    0

    • 沒有設置TCP標志

    可以設置以下修飾符來更改匹配條件:

    +

    -匹配指定的位和其他位

    *

    -如果設置了指定的位,則匹配

    !

    -如果未設置指定的位,則匹配

    為了處理會話發起包(如ECN)的寫規則,其中SYN包被CWR和ECE集發送,一個選項掩碼可以通過在掩碼前面加上逗號來指定。如果希望只查找syn位的包,而不考慮保留位的值,則規則可以檢查標志值S,CE。

    3.4.8.1 格式

    flags:[!|*|+]<FSRPAUCE0>[,<FSRPAUCE>];

    3.4.8.2 例子

    這個示例檢查是否只設置了SYN和FIN位,忽略CWR(保留位1)和ECN(保留位2)。

    alert tcp any any -> any any (flags:SF,CE;)

    注意:保留的位’1’和’2’分別被’C’和’E’所取代,以匹配RFC 3168,“增加顯式擁塞通知(ECN)到IP”。對于’ flag ‘關鍵字,舊的’1’和’2’值仍然有效,但現在不贊成使用。

    3.4.9 flow

    flow關鍵字與會話跟蹤一起使用。它允許規則只適用于交通流的特定方向。

    這允許規則僅應用于客戶機或服務器。這允許與查看web頁面的$HOME_NET客戶機相關的數據包與在$HOME_NET中運行的服務器相區別。

    已建立的關鍵字將取代flags:+A,在許多地方用于顯示已建立的TCP連接。

    選項

    選項n 描述
    to_client 觸發服務器從A到B的響應
    to_server 觸發客戶端從A到B的請求
    from_client 觸發客戶端從A到B的請求
    from_server 觸發服務器從A到B的響應
    established 僅在已建立的TCP連接上觸發
    not_established 僅當沒有建立TCP連接時觸發
    stateless 觸發器與流處理器的狀態無關(對于設計成導致機器崩潰的包很有用)
    no_stream 在重新構建的流包上不觸發(對于dsize和stream5很有用)
    only_stream 僅在重新構建流包時觸發
    no_frag 不觸發重建的frag包
    only_frag 只有重建的frag包才會觸發

    3.4.9.1 格式

        flow:[(established|not_established|stateless)] 
            [,(to_client|to_server|from_client|from_server)]
            [,(no_stream|only_stream)]
            [,(no_frag|only_frag)];

    3.4.9.2 例子

        alert tcp !$HOME_NET any -> $HOME_NET 21 (msg:"cd incoming detected";
            flow:from_client; content:"CWD incoming"; nocase;)
    
        alert tcp !$HOME_NET 0 -> $HOME_NET 0 (msg:"Port 0 TCP traffic";
            flow:stateless;)

    3.4.10 flowbits

    flowbits 關鍵字與來自會話預處理器的會話跟蹤一起使用。它允許規則在傳輸協議會話期間跟蹤狀態。flowbits選項對TCP會話最有用,因為它允許規則一般地跟蹤應用程序協議的狀態。

    有幾個與流鉆頭相關的關鍵字。大多數選項都需要為被檢查的特定狀態定義一個用戶定義的名稱。一些關鍵字使用組名。如果未指定組名,則流位將屬于默認組。一個特定的流鉆頭可以屬于多個組。Flowbit名稱和組名稱應該限制為任何字母數字字符串,包括句點、破折號和下劃線。

    3.4.10.1 通用格式

        flowbits:[set|setx|unset|toggle|isset|isnotset|noalert|reset][, <bits/bats>][, <GROUP_NAME>];
        bits ::= bit[|bits]
        bats ::= bit[&bats]
    選項 描述
    set 設置當前流的指定狀態,并在指定GROUP_NAME時將它們分配給組。
    setx 設置當前流的指定狀態,并清除組中的其他狀態
    unset 取消當前流的指定狀態。
    toggle 對于指定的每個狀態,在未設置狀態時設置指定狀態,在設置狀態時取消設置。
    isset 檢查是否設置了指定的狀態。
    isnotset 檢查是否未設置指定的狀態。
    noalert 導致規則不生成警報,而不管其他檢測選項是什么。
    reset 重置給定流上的所有狀態。

    3.4.10.2 set

    此關鍵字為特定流設置分組的位。如果未指定組,則設置默認組。這個關鍵字總是返回true。

    語法:
    flowbits:set,bats[,group]
    用法:

        flowbits:set,bit1,doc;
        flowbits:set,bit2&bit3,doc;
        First rule sets bit1 in doc group, second rule sets bit2 and bit3 in doc group. 
        So doc group has bit 1, bit2 and bit3 set

    3.4.10.3 setx

    這個關鍵字將位設置為排他性分組。這將清除組中的其他位。組織必須在場。這個關鍵字總是返回true。

    語法:
    flowbits:setx,bats,group
    用法:

        flowbits: setx, bit1, doc
        flowbits: setx, bit2&bit3, doc
        First rule sets bit1 in doc group, second rule sets bit2 and bit3 in doc group.
        So doc group has bit2 and bit3 set, because bit1 is cleared by rule 2.

    3.4.10.4 unset

    此關鍵字清除為特定流指定的位,或清除組中的所有位(必須顯示組)。這個關鍵字總是返回true。

    語法:

       flowbits:unset,bats
       flowbits:unset,all,group

    用法:

       flowbits: unset, bit1  
       Clear bit1.
    
       flowbits: unset, bit1&bit2
       Clear bit1 and bit2
    
       flowbits: unset, all, doc
       This clears all bits in the doc group.

    3.4.10.5 toggle

    如果設置了flowbit,則將其取消設置。如果未設置,則設置它。切換指定的每個位或切換組中的所有位(組必須存在)。這個關鍵字總是返回true。

    語法:

       flowbits:toggle,bats
       flowbits:toggle,all,group

    用法:

       flowbits: toggle, bit1&bit2
       If bit1 is 0 and bit2 is 1 before, after this rule, bit1 is 1 and bit2 is 0.
    
       flowbits:toggle,all,doc
       Toggle all the bits in group doc as described above.

    3.4.10.6 isset

    這個關鍵字檢查一個或幾個位,看看它是否被設置。它根據下面的語法返回真或假。

    語法:

       flowbits:isset, bits => Check whether any bit is set
       flowbits:isset, bats => Check whether all bits are set
       flowbits:isset, any, group => Check whether any bit in the group is set.
       flowbits:isset, all, group => Check whether all bits in the group are set. 

    用法:

       flowbits:isset, bit1|bit2 => If either bit1 or bit2 is set, return true
       flowbits:isset, bit1&bit2 => If both bit1 and bit2 are set, return true, otherwise false
       flowbits:isset, any, doc => If any bit in group doc is set, return true
       flowbits:isset, all, doc => If all the bits in doc group are set, return true

    3.4.10.7 isnotset

    這個關鍵字與isset相反。如果isset為假,它返回真,如果isset為真,它返回假。Isnotset作用于最終結果,而不是單個位。

    語法:

       flowbits:isnotset, bits => Check whether not any bit is set
       flowbits:isnotset, bats => Check whether not all bits are set
       flowbits:isnotset, any, group => Check whether not bit in the group is set.
       flowbits:isnotset, all, group => Check whether not all bits in the group are set. 

    用法:

       flowbits:isnotset, bit1|bit2 => If either bit1 or bit2 is set, return true
       flowbits:isnotset, bit1&bit2 => If both bit1 and bit2 are set, return true, otherwise false
       flowbits:isnotset, any, doc => If any bit in group doc is set, return true
       flowbits:isnotset, all, doc => If all the bits in doc group are set, return true

    3.4.10.8 noalert

    這個關鍵字總是返回false。它允許用戶編寫規則來設置、取消設置和切換位而不產生警報。這對于編寫在正常流量上設置位并顯著減少不必要警報的流位規則最有用。這個關鍵字沒有指定位。

    flowbits:noalert;

    3.4.10.9 reset

    如果沒有指定組,此關鍵字將重置給定流上的所有狀態,否則將重置組中的所有位。這總是返回true。這個關鍵字沒有指定位。

    語法:
    flowbits:reset[,group]

    用法:

       flowbits:reset => reset all the bits in the flow
       flowbits: reset, doc => reset all the bits in the doc group

    3.4.10.10 例子

        alert tcp any 143 -> any any (msg:"IMAP login"; 
            content:"OK LOGIN"; flowbits:set,logged_in; 
            flowbits:noalert;)
    
        alert tcp any any -> any 143 (msg:"IMAP LIST"; content:"LIST"; 
            flowbits:isset,logged_in;)

    3.4.11 seq

    關鍵字seq用于檢查特定的TCP序列號。

    3.4.11.1 格式

    seq:<number>;

    3.4.11.2 例子

    這個示例查找TCP序列號為0的TCP。

    seq:0;

    3.4.12 ack

    ack 關鍵字用于檢查特定的TCP確認號碼。

    3.4.12.1 格式

    `ack:<number>;`

    3.4.12.2 例子

    此示例查找TCP確認號0。

    ack:0;

    3.4.13 window

    window關鍵字用于檢查特定的TCP窗口大小。

    3.4.13.1 格式

    window:[!]<number>;

    3.4.13.2 例子

    這個示例尋找一個TCP窗口大小為55808。

    window:55808;

    3.4.14 itype

    itype關鍵字用于檢查特定的ICMP類型值。

    3.4.14.1 格式

        itype:min<>max;
        itype:[<|>]<number>;

    3.4.14.2 例子

    這個示例查找大于30的ICMP類型。

    itype:>30;

    3.4.15 icode

    icode 關鍵字用于檢查特定的ICMP代碼值。

    3.4.15.1 格式

        icode:min<>max;
        icode:[<|>]<number>;

    第一種格式中的<>操作符檢查指定范圍內的ICMP代碼(排他)。也就是說,嚴格大于最小值,嚴格小于最大值。請注意,最小值可以為“-1”,從而允許在范圍中包含0的ICMP代碼。

    數值根據0到255之間的ICMP碼值和其他標準進行驗證。

        icode:min<>max
            -1 <= min <= 254
             1 <= max <= 256
             (max - min) > 1
    
        icode:number
            0 <= number <= 255
    
        icode:<number
            1 <= number <= 256
    
        icode:>number
            0 <= number <= 254

    3.4.15.2 例子

    這個示例查找大于30的ICMP代碼。

    icode:>30;

    這個示例查找大于0和小于30的ICMP代碼。

    icode:-1<>30;

    3.4.16 icmp_id

    icmp_id關鍵字用于檢查特定的ICMP ID值。

    這是非常有用的,因為一些隱蔽通道程序在通信時使用靜態ICMP字段。開發這個特殊的插件是為了檢測stacheldraht DDoS代理。

    3.4.16.1 格式

    icmp_id:<number>;

    3.4.16.2 例子

    這個示例查找ICMP ID為0。

    icmp_id:0;

    3.4.17 icmp_seq

    icmp_seq關鍵字用于檢查特定的ICMP序列值。

    這是非常有用的,因為一些隱蔽通道程序在通信時使用靜態ICMP字段。開發這個特殊的插件是為了檢測stacheldraht DDoS代理。

    3.4.17.1 格式

    `icmp_seq:<number>;`

    3.4.17.2 例子

    這個示例查找ICMP序列為0。

    icmp_seq:0;

    3.4.18 rpc

    rpc關鍵字用于檢查SUNRPC調用請求中的rpc應用程序、版本和過程號。

    通配符對版本號和過程號都有效,使用’*’;

    3.4.18.1 格式

    `rpc:<application number>, [<version number>|*], [<procedure number>|*]>;`

    3.4.18.2 例子

    下面的示例查找RPC portmap GETPORT請求。

    alert tcp any any -> any 111 (rpc:100000, *, 3;);

    3.4.18.3 警告

    由于具有快速的模式匹配引擎,RPC關鍵字比使用普通內容匹配查找RPC值要慢。

    3.4.19 ip_proto

    ip_proto關鍵字允許對IP協議頭進行檢查。

    3.4.19.1 格式

    ip_proto:[!|>|<] <name or number>;

    3.4.19.2 例子

    這個示例查找IGMP流量。

    alert ip any any -> any any (ip_proto:igmp;)

    3.4.20 sameip

    sameip 關鍵字允許規則檢查源ip是否與目標ip相同。

    3.4.20.1 格式

    `sameip;`

    3.4.20.2 例子

    此示例查找源IP和目標IP相同的任何流量。

    alert ip any any -> any any (sameip;)

    3.4.21 stream_reassemble

    stream_reassemble關鍵字允許規則對匹配的流量啟用或禁用TCP流重新組裝。

    注意: stream_reassemble選項僅在啟用流預處理器時可用。

    3.4.21.1 格式

    stream_reassemble:<enable|disable>, <server|client|both>[, noalert][, fastpath];

    • 可選的noalert參數會導致規則在匹配時不生成警告。
    • 可選的fastpath參數會導致Snort忽略連接的其余部分。

    3.4.21.2 例子

    例如,當我們看到HTTP 200 Ok響應消息時,要禁用客戶端流量的TCP重組,使用:

        alert tcp any 80 -> any any (flow:to_client, established; content:"200 OK";
           stream_reassemble:disable,client,noalert;)

    3.4.22 stream_size

    stream_size關鍵字允許規則根據觀察到的字節數(由TCP序列號決定)匹配流量。

    注意: stream_size選項僅在啟用流預處理器時可用。

    3.4.22.1 格式

    stream_size:<server|client|both|either>, <operator>, <number>;

    其中運算符為下列之一:

    • < - 小于
    • >- 大于
    • = - 等于
    • != - 不等于
    • <= - 小于等于
    • >= - 大于等于

    3.4.22.2 例子

    例如,尋找一個會話是少于6字節從客戶端,使用:

    alert tcp any any -> any any (stream_size:client,<,6;)

    3.4.23 Non-Payload 檢測快速參考

    下表顯示 Non-Payload檢測規則選項關鍵字:

    關鍵字 描述
    fragoffset 關鍵字fragoffset允許將IP片段偏移字段與十進制值進行比較。
    ttl ttl關鍵字用于檢查IP生存時間值。
    tos tos關鍵字用于檢查IP tos字段中的特定值。
    id id關鍵字用于檢查IP id字段中的特定值。
    ipopts 關鍵字ipopts用于檢查是否存在特定的IP選項。
    fragbits fragbits關鍵字用于檢查碎片和保留位是否在IP報頭中設置。
    dsize dsize關鍵字用于測試數據包payload大小。
    flags flags關鍵字用于檢查是否存在特定的TCP標志位。
    flow flow關鍵字允許規則僅應用于交通流的特定方向。
    flowbits 關鍵字flowbits允許規則在傳輸協議會話期間跟蹤狀態。
    seq 關鍵字seq用于檢查特定的TCP序列號。
    ack ack關鍵字用于檢查特定的TCP應答號。
    window window關鍵字用于檢查特定的TCP窗口大小。
    itype itype關鍵字用于檢查特定的ICMP類型值。
    icode icode關鍵字用于檢查特定的ICMP代碼值。
    icmp_id icmp_id關鍵字用于檢查特定的ICMP ID值。
    icmp_seq icmp_seq關鍵字用于檢查特定的ICMP序列值。
    rpc rpc關鍵字用于檢查SUNRPC調用請求中的rpc應用程序、版本和過程號。
    ip_proto 關鍵字ip_proto允許對IP協議頭進行檢查。
    sameip sameip關鍵字允許規則檢查源ip是否與目標ip相同。

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类