Snort 初探

概述

Snort 是免費 Network Intrusion Prevention System(NIPS) 及 Network Intrusion Detection System (NIDS) 軟件,其具有對數據流量分析和對網絡數據包進行協(xié)議分析處理的能力箭昵,通過靈活可定制的規(guī)則庫(Rule)呵晨,可對處理的報文內容進行搜索和匹配随闺,能夠檢測出各種攻擊卒废,并進行實時預警里逆。

軟件采用雙授權:

  • 源代碼及社區(qū)版本規(guī)則庫使用 GPLv2 授權
  • 專用規(guī)則庫(Proprietary Snort Rules)使用 "Non-Commercial Use License"授權娇妓,只允許個人使用,不可用作商業(yè)

架構

  • Packet Decoder辫塌,從接口收幀漏策,作報文粗解析(Ethernet/WIFI/IP/UDP/TCP/GRE等),最深解析到 IP 協(xié)議字段的首部臼氨,將報文送到 Preprocessor
  • Preprocessor掺喻,使用 Plugin 解析報文板壮,主要 Plugin 如 HTTP/FTP/SSH 等等 preprocessor plugin恨胚,使用規(guī)則(preprocessor rule)做初解析及執(zhí)行行為(alert/log/pass/drop/sdrop/rject 等),分片報文在這個階段進行重組
  • Detetction Engine,Snort 的核心模塊繁调,將從 preprocessor 送來的報文進行更精確的規(guī)則(snort rule)匹配晒来,包括:應用竭宰、流方向兼贡、報文模式匹配等,后執(zhí)行行為
  • Logging and Alerting System只酥,對于規(guī)則匹配中需觸發(fā) Log 及告警的流進行處理褥实,寫入本地文件 /var/log/snort 目錄
  • Output Modules,將 Log 及告警通過 Unix Socket, WindowsPopup, SNMP Trap 等方式提交到日志服務器或數據庫

規(guī)則

Decoder 與 Preprocessor 規(guī)則

Decoder 階段使用 snort.conf 文件中 config disbale_decode_alerts 參數配置告警行為裂允,通過 config enable_decode_drops 參數的優(yōu)先級高于 rule 中的 drop 行為優(yōu)先級

Decoder 與 Preprocessor 的 Rule 通過配置文件保存在源代碼的 preproc_rules/ 目錄损离,對應于 decoder.rulespreprocessor.rules 文件, Decoder 與 Preprocessor 的 Rule 的啟用需要在 snort.conf 中增加相應的配置:


    var PREPROC_RULE_PATH /path/to/preproc_rules
    ...
    include $PREPROC_RULE_PATH/preprocessor.rules
    include $PREPROC_RULE_PATH/decoder.rules

Decoder 與 Preprocessor 的 Rule 支持以下行為:

  • alert绝编,發(fā)送告警信息
  • log僻澎,記錄 Log 信息
  • pass,通過瓮增,正常轉發(fā)
  • drop,丟棄報文哩俭,并記錄
  • sdrop绷跑,丟棄報文,不記錄
  • reject凡资,丟棄報文砸捏,并記錄,對于 TCP 報文隙赁,回應 RESET垦藏,對于 UDP 回應 ICMP Port unreachable

Rule 的樣例 "對于 Ether-Type 為 0x0800 但 IPv4 首部中協(xié)議版本號不為 v4 的報文進行告警" 描述如下:

alert ( msg: "DECODE_NOT_IPV4_DGRAM"; sid: 1; gid: 116; rev: 1; \
        metadata: rule-type decode ; classtype:protocol-command-decode;)

Snort 支持多種類似的 Decoder 與 Preprocessor 處理,詳細信息如下:

基本上常見的應用協(xié)議 Preprocessor 都支持

Detection 規(guī)則

Snort Detection 的 Rule 規(guī)則由 Rule Header 與 Options 兩個部分構成

伞访,

  • Rule Header掂骏,描述流的行為及基本特征,描述串為固定格式信息 [行為][協(xié)議][IP地址][端口號][流方向][IP地址][端口號] 七類信息
  • Rule Opitons厚掷,描述流的精確匹配信息弟灼,包括:HTTP 首部、Cookie冒黑、UA田绑、特定偏移的字串,等等抡爹,這個是 Snort 最強大的部分掩驱,也是 Snort 的核心部分

下面的例子: 從 $BAD_NETK 網絡任意源端口到 $HOME 網絡的 80 端口 且有效載荷中包含十六進制為 0x47 0x45 0x54(即 "GET")字符串的報文

Rule Header

Detection 階段的 Rule Action 比 Decoder/Preprocessor 階段增加了 Activate / Dynamic 行為, Activate 定義流規(guī)則同時指定規(guī)則 ID (activates:ID),Dynmaic 規(guī)則通過指定的規(guī)則 ID 進行激活(activated_by:ID)欧穴,這兩個行為能夠組合出更靈活的 Snort Rule 規(guī)則

Rule 樣例 "檢測到非 $HOME_NET 對 IMAP(TCP 80端口) 的 buffer overflow 攻擊后民逼,記錄后續(xù)的 50 個報文首部信息" 如下:

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;)

通過 Activate/Dynamic 組合,在識別出流量后苔可,可收集后續(xù)關聯流量缴挖,以供進一步的流量分析處理。

Rule Options

規(guī)則 Options 是 Snort 的 Detetction Engine 最核心的技術焚辅,通過豐富的 Options 提供易用映屋、靈活且強大的規(guī)則定義機制,規(guī)則的 Options 為 Rule 中的 (;) 定義的部分同蜻,通過 ; 定義多個 option棚点,每個 option 內的關鍵字使用 : 標識。

包括四個分別為 flags, content, activatesmsg 關鍵字的 Option 樣例:

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

Snort 的 Rule Options 主要有以下四類:

  • general湾蔓,提供 Rule 的基本信息瘫析,并不對流量產生任何行為。
  • payload默责,對數據流的有效載荷進行查找贬循,可進行多數據關聯查找。
  • non-payload桃序,非數據載荷查找杖虾。
  • post-detection,對檢測出的特定的規(guī)則進行關聯觸發(fā)媒熊。

通用選項(General)

關鍵字
關鍵字 格式 說明
msg msg:”message text" 用于 alert/log 引擎進行信息告警/記錄及報文記錄
reference reference:<id system="">, <id>; [reference:<id system="">, <id>;]</id></id></id></id> 外部信息引用奇适,包括 URL/CVE 等等
gid <div>gid:<generator id="">;</generator></div> General ID,區(qū)分 Snort 事件分類芦鳍,ID 大于 100 是給特定 Preprocessor 與 decoder
sid sid:<snort rules="" id="">;</snort> Snort Rule ID嚷往,每個 Rule 的唯一標識
rev rev:<revision integer="">;</revision> sid 所對應 rule 的版本號
classtype classtype:<class name="">;</class> Rule 分類,Snort 已做了 4 個優(yōu)先級 34 種分類
priority priority:<priority integer="">;</priority> Rule 優(yōu)先級
metadata metadata:key1 value1, key2 value2; Key-Value 格式存儲的 Rule 擴展信息
樣例
  • msg /reference 關鍵字
alert tcp any any -> any 7070 (msg:"IDS411/dos-realaudio"; \
    flags:AP; content:"|fff4 fffd 06|"; reference:arachnids,IDS411;)

alert tcp any any -> any 21 (msg:"IDS287/ftp-wuftp260-venglin-linux"; \
    flags:AP; content:"|31c031db 31c9b046 cd80 31c031db|"; \
    reference:arachnids,IDS287; reference:bugtraq,1387; \
    reference:cve,CAN-2000-1574;)
  • gid/sid/rev 關鍵字
alert tcp any any -> any 80 (content:"BOB"; gid:1000001; sid:1; rev:1;)
  • classtype 關鍵字
alert tcp any any -> any 25 (msg:"SMTP expn root"; flags:A+; \
    content:"expn root"; nocase; classtype:attempted-recon;)
  • priority 關鍵字
alert tcp any any -> any 80 (msg:"WEB-MISC phf attempt"; flags:A+; \
    content:"/cgi-bin/phf"; priority:10;)
alert tcp any any -> any 80 (msg:"EXPLOIT ntpdx overflow"; \
    dsize:>128; classtype:attempted-admin; priority:10 )
  • metadata 關鍵字
alert tcp any any -> any 80 (msg:"Shared Library Rule Example"; \
    metadata:engine shared; metadata:soid 3|12345;)

alert tcp any any -> any 80 (msg:"Shared Library Rule Example"; \
    metadata:engine shared, soid 3|12345;)

alert tcp any any -> any 80 (msg:"HTTP Service Rule Example"; \
    metadata:service http;)

載荷選項(Payload)

關鍵字

Snort 的 Payload 選項的關鍵字(Key)非常豐富柠衅,主要分為三大類

  • 查找關鍵字:對數據流進行內容查找皮仁,包括: content, protected_content 、byte_[test/jump] 及 isdata
  • 協(xié)議關鍵字:Preprocessor 解析協(xié)議相關的選項查找
  • 修飾關鍵字:修飾查找行為的關鍵字菲宴,主要包括:nocase, rawbytes, depth, offset, distance, within, http_[cookie/header/method/uri] 等等

具體的參看下圖
![Payload Rule](http://7xjudy.com1.z0.glb.clouddn.com/2016-12-08-Payload Rule.jpg)

樣例

載荷查找樣例:


# 匹配 HTTP Cookie 中包括 ABC 與 EFG 的流
alert tcp any any -> any 80 (content:"ABC"; content:"EFG"; http_cookie;)

# 匹配 TCP 報文 ABC 之后 10 個字節(jié)內存在 EFG 的流
alert tcp any any -> any any (content:"ABC"; content:"EFG"; within:10;)

# 匹配 HTTP 報文的 URI 滿足 foo.php?id=<數值> 的流
alert tcp any any -> any 80 (content:"/foo.php?id="; pcre:"/\/foo.php?id=[0-9]{1,10}/iU";)

# 匹配 HTTP 報文首部包含 User-Agent 的流
alert tcp any any -> any 80 (content:"User-Agent:"; http_header; nocase;)

非載荷選項(Non-Payload)

關鍵字

Non-Payload 的關鍵字用于匹配 IP 層魂贬、傳輸層協(xié)議的關鍵字段,主要包括:

  • fragoffset裙顽,匹配 IP 報文中分片 offset 字段 fragoffset:[!|<|>]<number>;
  • ttl付燥,匹配 IP 首部的 TTL 字段,支持比較 ttl:[<, >, =, <=, >=]<number>;愈犹,支持數值范圍 ttl:[<number>]-[<number>];
  • tos键科,匹配 IP 首部 tos 字段 tos:[!]<number>;
  • id闻丑,匹配 IP ID 字段,id:<number>;
  • ipopts勋颖,匹配 IP 首部的選項嗦嗡,ipopts:<rr|eol|nop|ts|sec|esec|lsrr|lsrre|ssrr|satid|any>;
  • fragbits,匹配 IP 首部的分片標識饭玲,支持使用 +/*/! 進行邏輯組合 fragbits:[+*!]<[MDR]>;
  • dsize侥祭,匹配/測試 報文的載荷長度,dsize:min<>max;dsize:[<|>]<number>;
  • flags茄厘,匹配 TCP 的 Flag 字段矮冬,支持使用 +/*/! 進行邏輯組合,flags:[!|*|+]<FSRPAUCE0>[,<FSRPAUCE>];
  • flowbits次哈,匹配/設置 TCP 的 Flag 字段胎署,用于跟蹤 TCP 協(xié)議 Sesion 狀態(tài)
flowbits:[set|setx|unset|toggle|isset|isnotset|noalert|reset][, <bits/bats>][, <GROUP_NAME>];
bits ::= bit[|bits]
bats ::= bit[&bats]
  • seq,匹配 TCP 的序列號窑滞,seq:<number>;
  • ack琼牧,匹配 TCP 的 ACK 序列號,ack:<number>;
  • windows哀卫,匹配 TCP 的窗口大小巨坊,window:[!]<number>;
  • itype,匹配 ICMP 的 type 字段此改,itype:min<>max;itype:[<|>]<number>;
  • icode趾撵,匹配 ICMP 的 code 字段,icode:min<>max;icode:[<|>]<number>;
  • icmp_id带斑,匹配 ICMP 的 ID 值鼓寺,icmp_id:<number>;
  • icmp_seq勋拟,匹配 ICMP 的序列號勋磕,icmp_seq:<number>;
  • rpc,匹配 SUNRPC 請求信息敢靡,rpc:<application number>, [<version number>|*], [<procedure number>|*]>;
  • ip_proto挂滓,匹配 IP 的協(xié)議字段,ip_proto:[!|>|<] <name or number>;
  • sameip啸胧,匹配源 IP 與目的 IP 相同的流
  • stream_reassemable赶站,對 TCP 流的重組流進行設置,stream_reassemble:<enable|disable>, <server|client|both>[, noalert][, fastpath];
  • stream_size纺念,匹配指定長度的 TCP 流贝椿,stream_size:<server|client|both|either>, <operator>, <number>;
樣例

非載荷查找樣例:

# 記錄 IGMP 報文
alert ip any any -> any any (ip_proto:igmp;)

# 記錄源 IP 與目的 IP 相同報文
alert ip any any -> any any (sameip;)

# 記錄客戶端發(fā)出的小于 6 Byte 的 TCP 流
alert tcp any any -> any any (stream_size:client,<,6;)

檢測后處理選項(Post-Detection)

關鍵字
  • logto,將規(guī)則對應的信息記錄到指定的 LOG 文件中陷谱,logto:"filename";
  • session烙博,將 TCP Session 中的用戶數據報文進行記錄瑟蜈,session:[printable|binary|all];
  • resp,通過發(fā)送響應結束對 Session 的請求
  • react渣窜,向對應對的客戶送發(fā)送 WEB 頁面應答后關閉連接
  • tag铺根,匹配規(guī)則的流觸發(fā)后續(xù)報文進行記錄,可指定針對流的源[或/且]目的主機進行后續(xù)記錄乔宿,tag:host, <count>, <metric>, <direction>;tag:session[, <count>, <metric>][, exclusive];
  • activates 與 activated_by位迂,用于關聯兩個 Rule,第1個 Rule 使用 activates:id 設定 ID详瑞,第2個 Rule 使用 activated_by:id 激活
  • count掂林,修飾 activated_by,用于指定激活規(guī)則的報文個數
  • replace蛤虐,修訂先前 content 匹配的內容党饮,要求 replace 的長度與 content 一致,replace:"<string>";
  • detection_filter驳庭,事件在特定的發(fā)生頻率之后被激活刑顺,detection_filter: track <by_src|by_dst>, count <c>, seconds <s>;
樣例

檢測后處理樣例:

# 記錄 TELNET 中所有可見字符內容
log tcp any any <> any 23 (session:printable;)

# 丟棄 1 分鐘內登錄失敗超過 30 次的 SSH 請求
drop tcp 10.1.2.100 any > 10.1.1.100 22 ( \
    msg:"SSH Brute Force Attempt";
    flow:established,to_server; \
    content:"SSH"; nocase; offset:0; depth:4; \
    detection_filter:track by_src, count 30, seconds 60; \
    sid:1000001; rev:1;)

[End]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饲常,隨后出現的幾起案子蹲堂,更是在濱河造成了極大的恐慌,老刑警劉巖贝淤,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柒竞,死亡現場離奇詭異,居然都是意外死亡播聪,警方通過查閱死者的電腦和手機朽基,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來离陶,“玉大人稼虎,你說我怎么就攤上這事≌信伲” “怎么了霎俩?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沉眶。 經常有香客問我打却,道長,這世上最難降的妖魔是什么谎倔? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任柳击,我火速辦了婚禮,結果婚禮上片习,老公的妹妹穿的比我還像新娘捌肴。我一直安慰自己彤守,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布哭靖。 她就那樣靜靜地躺著具垫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪试幽。 梳的紋絲不亂的頭發(fā)上筝蚕,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音铺坞,去河邊找鬼起宽。 笑死,一個胖子當著我的面吹牛济榨,可吹牛的內容都是我干的坯沪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼擒滑,長吁一口氣:“原來是場噩夢啊……” “哼腐晾!你這毒婦竟也來了?” 一聲冷哼從身側響起丐一,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤藻糖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后库车,有當地人在樹林里發(fā)現了一具尸體巨柒,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年柠衍,在試婚紗的時候發(fā)現自己被綠了洋满。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡珍坊,死狀恐怖牺勾,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情垫蛆,我是刑警寧澤禽最,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布腺怯,位于F島的核電站袱饭,受9級特大地震影響,放射性物質發(fā)生泄漏呛占。R本人自食惡果不足惜虑乖,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晾虑。 院中可真熱鬧疹味,春花似錦仅叫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洪灯,卻和暖如春坎缭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背签钩。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工掏呼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铅檩。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓憎夷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昧旨。 傳聞我的和親對象是個殘疾皇子拾给,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容

  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network兔沃,根據使用者...
    保川閱讀 5,956評論 1 13
  • 個人認為鸣戴,Goodboy1881先生的TCP /IP 協(xié)議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評論 0 8
  • 防火墻的概念iptables的簡介iptables命令網絡防火墻NATfirewalld服務 一粘拾、防火墻的概念 (...
    哈嘍別樣閱讀 1,823評論 0 1
  • 1.這篇文章不是本人原創(chuàng)的窄锅,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,063評論 6 174
  • 1.安全技術 (1)入侵檢測與管理系統(tǒng)(Intrusion Detection Systems): 特點是不阻斷任...
    尛尛大尹閱讀 2,465評論 0 2