Suricata規(guī)則編寫-HTTP關(guān)鍵字[轉(zhuǎn)]

轉(zhuǎn)自:http://blog.csdn.net/wuyangbotianshi/article/details/44854121

1.簡介

之前的常用關(guān)鍵字中介紹了content以及許多修飾它的關(guān)鍵字谱仪,除此之外,http協(xié)議中還有一些修飾content的關(guān)鍵字,也是由于http協(xié)議使用量較大,關(guān)鍵字較多抡驼,因此單獨拿出來學習屿附。參考:HTTP協(xié)議-維基百科

2.Request和Response

http協(xié)議包括了http request和http response數(shù)據(jù)包葱色。通常卸伞,由HTTP客戶端發(fā)起一個request請求抹镊,創(chuàng)建一個到服務器指定端口(默認是80端口)的TCP連接。HTTP服務器則在那個端口監(jiān)聽客戶端的請求荤傲。一旦收到請求垮耳,服務器會向客戶端返回一個狀態(tài),比如”HTTP/1.1 200 OK”遂黍,以及返回的內(nèi)容终佛,如請求的文件、錯誤消息雾家、或者其它信息铃彰。

2.1 http request

http request請求包括請求行、請求頭芯咧、空行和內(nèi)容豌研。一個普通的request請求如下:

這里寫圖片描述

紅框部分是請求行,GET表示http method唬党,除了GET還有POST,PUT,HEAD等;后面的/webshell/c99_locus7s.php則是http uri鬼佣;HTTP/1.1則是版本驶拱,可以是0.9、1.0和1.1晶衷。綠框部分是請求頭蓝纲,也就是http head阴孟,除了HOST字段必須要有,其余字段都是可選的税迷。藍框部分是空行永丝,只允許有\(zhòng)r\n。由于這個包是GET方法箭养,因此沒有內(nèi)容慕嚷,如果是POST等方法后面會跟上內(nèi)容。

2.2 http response

http response應答包括應答行毕泌,頭部喝检,空行和內(nèi)容,整體結(jié)構(gòu)和request差不多撼泛,下圖是針對上節(jié)request的應答包:

這里寫圖片描述

紅框部分挠说,HTTP/1.1是http版本,后面的200是返回的狀態(tài)碼愿题,OK是狀態(tài)信息损俭。綠框部分是http header,藍框部分則是返回的html頁面潘酗,也就是結(jié)果杆兵。

3.HTTP關(guān)鍵字

3.1 http_method

http_method是content的修飾符,表示其所修飾的content只匹配http method部分崎脉。http可以使用的方法包括:GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS, CONNECT和PATCH拧咳。下面這個例子匹配GET方法,無論是否加http_method都能匹配:

image.png

但是下面這種情況就必須加http_method關(guān)鍵字囚灼,因為在http的uri部分也有GET:

這里寫圖片描述

3.2 http_uri和http_raw_uri

http_uri和http_raw_uri這兩個關(guān)鍵字都是說明所修飾的content是用來匹配http uri部分的內(nèi)容骆膝。所不同的是http_uri指在匹配之前先對URI進行標準化,所謂的標準化就是對數(shù)據(jù)包中的uri按照RFC文檔規(guī)定進行一定的轉(zhuǎn)化灶体,包括保留語義轉(zhuǎn)化阅签、一般保留語義轉(zhuǎn)化、改變語義轉(zhuǎn)化蝎抽。保留語義轉(zhuǎn)化有以下幾種,詳細的解釋參考URL標準化-維基百科

將url中的協(xié)議政钟、域名等轉(zhuǎn)化為小寫,比如HTTP://www.Example.com/ → http://www.example.com/
將以%開頭的轉(zhuǎn)義字符中的字母轉(zhuǎn)化為大寫樟结,比如http://www.example.com/a%c2%b1b → http://www.example.com/a%C2%B1b
將以%開頭但在可見字符范圍內(nèi)的進行轉(zhuǎn)化养交,比如http://www.example.com/%7Eusername/ → http://www.example.com/~username/
移出默認的端口號,比如http對應的80端口

而http_raw_uri則是直接對uri進行匹配瓢宦。下面這兩個關(guān)鍵字用法的一個例子:

這里寫圖片描述

3.3 uricontent

uricontent的作用和http_uri相同碎连,都是匹配uri部分的,不同的是uricontent可以獨立使用驮履,相當于content+http_uri的效果鱼辙。但是官方文檔里說明這個關(guān)鍵字已經(jīng)被棄用廉嚼,但目前還對其進行支持。

image.png

3.4 http_header和http_raw_header

和http_uri一樣倒戏,http_header也是只匹配http的header部分的內(nèi)容(不包括cookie)怠噪,http_raw_header則是匹配沒有標準化過的header(參考HTTP header),簡單來說就是標準化的header在每個字段的結(jié)尾\r\n之前都會去掉其余的空白字符杜跷。兩個簡單的例子:

image.png

image.png

3.5 http_cookie

http_cookie從http_header中獨立出來傍念,但其使用方法和前幾個關(guān)鍵字并無區(qū)別,這里就直接貼出例子了:

image.png

3.6 http_user_agent

http_user_agent用于匹配http的User-Agent字段的內(nèi)容葱椭,它是http_header的一部分捂寿,但是把它單獨拿出來說明其出現(xiàn)的頻率比較高,用法與前幾個沒什么差別孵运。關(guān)于http_user_agent和http_header的性能對比可以參考Suricata http_user_agent vs http_header秦陋,得出的結(jié)論是http_user_agent比http_header要快大約10%,除此之外規(guī)則中使用http_user_agent的可讀性也比較好治笨。例子如下:

image.png

3.7 http_client_body和http_server_body

使用了這兩個修飾符的content表示只匹配http包中的內(nèi)容部分驳概,前者值匹配request包,而后者只匹配response旷赖。用法很簡單:

image.png

需要注意的是suricata會根據(jù)suricata.yaml配置文件中的libhtp小節(jié)對于這兩部分長度限制來進行匹配顺又,也就是說如果想要匹配的內(nèi)容在數(shù)據(jù)包中的長度超過了配置文件中的數(shù)值,則這條規(guī)則不會被匹配到等孵。目前自己的配置如下稚照,由于需要檢測webshell大馬,所以這里的response部分的值為40KB俯萌,而request則維持原來的默認配置:

image.png

3.8 http_stat_code和http_stat_msg

這兩個content修飾符分別匹配response應答包返回的狀態(tài)碼和狀態(tài)信息果录,例子如下:

image.png

3.9 file_data

file_data的作用和http_server_body差不多,都是使content匹配response body中的內(nèi)容咐熙,唯一不同的是使用了file_data關(guān)鍵字的規(guī)則弱恒,其在file_data之后的content都會受到它的影響。比如下面這條規(guī)則棋恼,值為”abc”和”xyz”的content都必須在response body里面匹配:

alert http any any -> any any (file_data; content:"abc"; content:"xyz";)

3.10 urilen

urilen關(guān)鍵字用于匹配http uri部分的長度返弹,可以使用<和>運算符,下面是幾個例子:

urilen:1;       uri長度為1字節(jié)
urilen:>1;      大于1字節(jié)
urilen:<10;     小于10字節(jié)
urilen:10<>20;  10字節(jié)和20字節(jié)之間
image.png

除此之外還可以在后面指定是否以raw uri計算長度爪飘,下面表示以raw格式來計算的uri長度不超過5字節(jié):

urilen:<5,raw;

4.小結(jié)

HTTP協(xié)議的檢測規(guī)則在所有規(guī)則中占有非常大的比例义起,比如2014年的bash破殼漏洞、2015年初的glibc ghost針對wordpress的攻擊都可以利用http數(shù)據(jù)包师崎。同時因為他也比很多其他規(guī)則要復雜并扇,因此關(guān)鍵字也更多,不過這些關(guān)鍵字用法大部分比較簡單,掌握起來也會比較容易穷蛹。

參考鏈接

https://redmine.openinfosecfoundation.org/projects/suricata/wiki/HTTP-keywords#HTTP-keywords

http://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE

http://tools.ietf.org/html/rfc2616

https://redmine.openinfosecfoundation.org/projects/suricata/wiki/HTTP-uri_normalization

http://en.wikipedia.org/wiki/URL_normalization

https://lists.openinfosecfoundation.org/pipermail/oisf-users/2011-October/000935.html

http://blog.inliniac.net/2012/07/09/suricata-http_user_agent-vs-http_header/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昼汗,隨后出現(xiàn)的幾起案子肴熏,更是在濱河造成了極大的恐慌,老刑警劉巖顷窒,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛙吏,死亡現(xiàn)場離奇詭異,居然都是意外死亡鞋吉,警方通過查閱死者的電腦和手機鸦做,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谓着,“玉大人泼诱,你說我怎么就攤上這事∩廾” “怎么了治筒?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舷蒲。 經(jīng)常有香客問我耸袜,道長,這世上最難降的妖魔是什么牲平? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任堤框,我火速辦了婚禮,結(jié)果婚禮上纵柿,老公的妹妹穿的比我還像新娘蜈抓。我一直安慰自己,他們只是感情好藐窄,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布资昧。 她就那樣靜靜地躺著,像睡著了一般荆忍。 火紅的嫁衣襯著肌膚如雪格带。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天刹枉,我揣著相機與錄音叽唱,去河邊找鬼。 笑死微宝,一個胖子當著我的面吹牛棺亭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蟋软,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼镶摘,長吁一口氣:“原來是場噩夢啊……” “哼嗽桩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凄敢,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碌冶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涝缝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扑庞,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年拒逮,在試婚紗的時候發(fā)現(xiàn)自己被綠了罐氨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡滩援,死狀恐怖栅隐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狠怨,我是刑警寧澤约啊,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站佣赖,受9級特大地震影響恰矩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憎蛤,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一外傅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俩檬,春花似錦萎胰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屈藐,卻和暖如春榔组,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背联逻。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工搓扯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人包归。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓锨推,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子换可,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理椎椰,服務發(fā)現(xiàn),斷路器沾鳄,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 原文https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html...
    梁行之閱讀 1,112評論 0 0
  • 組織:中國互動出版網(wǎng)(http://www.china-pub.com/) RFC文檔中文翻譯計劃(http://...
    Palomar閱讀 1,573評論 0 6
  • 使用 HTTP 服務器或客戶端功能必須調(diào)用require('http')俭识。 Node 里的 HTTP 接口支持協(xié)議...
    保川閱讀 1,387評論 0 1
  • Nginx API for Lua Introduction ngx.arg ngx.var.VARIABLE C...
    吃瓜的東閱讀 5,790評論 0 5