1.架構(gòu)
文件提取代碼在一些協(xié)議解析器之上工作涵妥。應(yīng)用程序?qū)咏馕銎髟诹髦亟M引擎和UDP流跟蹤之上運(yùn)行。
在HTTP的情況下,解析器負(fù)責(zé)解壓縮并在必要時(shí)解壓縮請(qǐng)求和/或響應(yīng)數(shù)據(jù)朦蕴。
這意味著流引擎指厌,重組引擎和應(yīng)用程序?qū)咏馕銎髦械脑O(shè)置都會(huì)影響文件提取的工作刊愚。
實(shí)際提取并存儲(chǔ)到磁盤(pán)的文件由規(guī)則語(yǔ)言控制。
支持的協(xié)議是:
HTTP
SMTP
FTP
NFS
SMB
2.設(shè)置
stream.checksum_validation控制流引擎是否拒絕具有無(wú)效校驗(yàn)和的數(shù)據(jù)包踩验。通常一個(gè)好主意鸥诽,但網(wǎng)絡(luò)接口執(zhí)行校驗(yàn)和卸載很多數(shù)據(jù)包可能似乎被打破。默認(rèn)情況下啟用此設(shè)置箕憾,可以通過(guò)設(shè)置為“no”來(lái)禁用此設(shè)置牡借。請(qǐng)注意,可以按接口控制校驗(yàn)和處理袭异,請(qǐng)參閱示例配置中的“checksum_checks”钠龙。
file-store.stream-depth控制流重組的完成程度。超過(guò)此值不會(huì)重新組裝。這意味著在此值之后將不再跟蹤HTTP會(huì)話(huà)俊鱼。默認(rèn)情況下刻像,使用1兆字節(jié)的設(shè)置。0將其設(shè)置為無(wú)限制并闲。如果設(shè)置為no细睡,則禁用它并考慮stream.reassembly.depth。
libhtp.default-config.request-body-limit?/?libhtp.server-config.<config> .request-body-limit控制http_client_body關(guān)鍵字跟蹤檢查HTTP請(qǐng)求主體的數(shù)量帝火,但也用于限制文件檢查溜徙。值0表示無(wú)限制。
libhtp.default-config.response-body-limit?/?libhtp.server-config.<config> .response-body-limit與請(qǐng)求主體限制類(lèi)似犀填,只適用于HTTP響應(yīng)主體蠢壹。
3.輸出
3.1?File-Store和Eve?fileinfo
有兩個(gè)輸出模塊用于記錄有關(guān)提取的文件的信息。第一個(gè)是記錄記錄eve.files的eve子記錄器fileinfo九巡。這些fileinfo記錄提供有關(guān)文件的元數(shù)據(jù)图贸,但不提供實(shí)際的文件內(nèi)容。
必須在eve輸出中啟用此選項(xiàng):
另一個(gè)輸出模塊file-store將實(shí)際文件存儲(chǔ)到磁盤(pán).
file-store使用它自己的日志目錄(默認(rèn)情況下存儲(chǔ)在默認(rèn)日志目錄)冕广,并使用日志文件的內(nèi)容的SHA256作為文件名疏日。然后將每個(gè)文件放在名為00到ff的目錄中,其中目錄共享文件名的前2個(gè)字符撒汉。例如沟优,如果解壓縮文件的SHA256十六進(jìn)制字符串以“f9bc6d ...”開(kāi)頭,則我們將文件放在目錄?filestore/f9中睬辐。
使用SHA256作為文件名允許自動(dòng)重復(fù)數(shù)據(jù)刪除提取的文件挠阁。但是,如果再次提取相同的文件溯饵,則會(huì)更新預(yù)先存在的文件的時(shí)間戳侵俗,類(lèi)似于touch命令。
可選地瓣喊,fileinfo可以將記錄寫(xiě)入其自己的文件坡慌,共享與其引用的文件相同的SHA256黔酥。為了處理每次出現(xiàn)的提取文件的元數(shù)據(jù)藻三,這些文件名包含一些額外的字段以確保唯一性。目前的格式是:
<SHA256>.<SECONDS>.<ID>.json
<SECONDS>是觸發(fā)存儲(chǔ)文件的數(shù)據(jù)包的秒數(shù)跪者,并且<ID>是Suricata實(shí)例的運(yùn)行時(shí)的唯一ID棵帽。不應(yīng)依賴(lài)這些值,僅用于確保唯一性渣玲。
這些fileinfo記錄對(duì)fileinfo記錄到eve輸出的記錄是必不可少的逗概。
3.2?File-Store(V1)
注意:文件存儲(chǔ)版本1已被版本2取代,不再推薦使用忘衍。
存儲(chǔ)的每個(gè)文件都將具有名稱(chēng)“file.<id>”逾苫。除非使用waldo選項(xiàng)卿城,否則將重置ID并覆蓋文件。如果write-meta設(shè)置為yes(默認(rèn))铅搓,則生成包含文件元數(shù)據(jù)的“file.<id> .meta”文件瑟押。如果設(shè)置了include-pid選項(xiàng),則文件將改名為“file.<pid>.<id>”星掰,元文件將為“file.<pid>.<id> .meta”多望。文件在打開(kāi)時(shí)還會(huì)帶有后綴“.tmp”,只有在最終確定時(shí)才會(huì)刪除氢烘。
3.3 File-Log(已棄用)
file-log 是一個(gè)獨(dú)立的記錄器怀偷,用于記錄有關(guān)提取的文件的信息。它已被棄用播玖,不應(yīng)使用椎工。它已被eve.files在Eve輸出取代。
4.規(guī)則
沒(méi)有規(guī)則就不會(huì)進(jìn)行提取蜀踏。最簡(jiǎn)單的規(guī)則是:
alert http any any->any any(msg:"FILE store all";filestore;sid:1;rev:1;)
這只會(huì)將所有文件存儲(chǔ)到磁盤(pán)晋渺。想要以pdf擴(kuò)展名存儲(chǔ)所有文件?
alert http any any->any any(msg:"FILE PDF file claimed";fileext:"pdf";filestore;sid:2;rev:1;)
或者更確切地說(shuō)是所有實(shí)際的PDF文件
alerthttpanyany->anyany(msg:"FILE pdf detected";filemagic:"PDF document";filestore;sid:3;rev:1;)
或者只是存儲(chǔ)來(lái)自黑名單校驗(yàn)和md5的文件脓斩?
alerthttpanyany->anyany(msg:"Black list checksum match and extract MD5";filemd5:fileextraction-chksum.list;filestore;sid:4;rev:1;)
或者只存儲(chǔ)黑名單校驗(yàn)和sha1中的文件木西?
alerthttpanyany->anyany(msg:"Black list checksum match and extract SHA1";filesha1:fileextraction-chksum.list;filestore;sid:5;rev:1;)
或者最后從黑名單校驗(yàn)和sha256存儲(chǔ)文件?
alerthttpanyany->anyany(msg:"Black list checksum match and extract SHA256";filesha256:fileextraction-chksum.list;filestore;sid:6;rev:1;)
綁定Suricata下載是一個(gè)包含更多示例規(guī)則的文件随静。在存檔中八千,轉(zhuǎn)到rules/目錄并檢查files.rules文件。
5.MD5
Suricata可以動(dòng)態(tài)計(jì)算文件的MD5校驗(yàn)和并記錄它們燎猛。
5.1?配置
在suricata yaml:
對(duì)于JSON輸出恋捆,可選:
確保depth: 0 它可以完全跟蹤所有文件
確保我們有request-body-limit:0和?response-body-limit:0
5.2 測(cè)試
出于測(cè)試目的,我們僅在file.rules(測(cè)試/示例文件)中使用此規(guī)則:
alert http any any->any any(msg:"FILE store all";filestore;sid:1;rev:1;)
上面的規(guī)則將保存通過(guò)HTTP打開(kāi)/下載的文件的所有文件數(shù)據(jù)
啟動(dòng)Suricata(-S選項(xiàng)僅加載指定的規(guī)則文件重绷,如果在suricata.yaml中啟用了任何其他規(guī)則沸停,則忽略它):
suricata -c /etc/suricata/suricata.yaml -S? file.rules? -i? eth0
元數(shù)據(jù):
在files-json.log(或eve.json)中:
{"id":1,"timestamp":"05\/01\/2012-11:10:27.693583","ipver":4,"srcip":"2.23.144.170","dstip":"192.168.1.91","protocol":6,"sp":80,"dp":51598,"http_uri":"\/en\/US\/prod\/collateral\/routers\/ps5855\/prod_brochure0900aecd8019dc1f.pdf","http_host":"www.cisco.com","http_referer":"http:\/\/www.google.com\/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDAQFjAA&url=http%3A%2F%2Fwww.cisco.com%2Fen%2FUS%2Fprod%2Fcollateral%2Frouters%2Fps5855%2Fprod_brochure0900aecd8019dc1f.pdf&ei=OqyfT9eoJubi4QTyiamhAw&usg=AFQjCNGdjDBpBDfQv2r3VogSH41V6T5x9Q","filename":"\/en\/US\/prod\/collateral\/routers\/ps5855\/prod_brochure0900aecd8019dc1f.pdf","magic":"PDF document, version 1.6","state":"CLOSED","md5":"59eba188e52467adc11bf2442ee5bf57","stored":true,"size":9485123}
{"id":12,"timestamp":"05\/01\/2012-11:12:57.421420","ipver":4,"srcip":"2.23.144.170","dstip":"192.168.1.91","protocol":6,"sp":80,"dp":51598,"http_uri":"\/en\/US\/prod\/collateral\/routers\/ps5855\/prod_brochure0900aecd8019dc1f.pdf","http_host":"www.cisco.com","http_referer":"http:\/\/www.google.com\/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDAQFjAA&url=http%3A%2F%2Fwww.cisco.com%2Fen%2FUS%2Fprod%2Fcollateral%2Frouters%2Fps5855%2Fprod_brochure0900aecd8019dc1f.pdf&ei=OqyfT9eoJubi4QTyiamhAw&usg=AFQjCNGdjDBpBDfQv2r3VogSH41V6T5x9Q","filename":"\/en\/US\/prod\/collateral\/routers\/ps5855\/prod_brochure0900aecd8019dc1f.pdf","magic":"PDF document, version 1.6","state":"CLOSED","md5":"59eba188e52467adc11bf2442ee5bf57","stored":true,"size":9485123}
5.3 沒(méi)有任何規(guī)則下記錄所有MD5
如果你想記錄MD5s的所有內(nèi)容以及通過(guò)Suricata檢查的流量,但不記錄文件本身昭卓,那么你所要做的就是禁用文件存儲(chǔ)并只啟用帶強(qiáng)制MD5的JSON輸出 - 在suricata.yaml設(shè)置如這樣:?