由于網友的要求和關注,本人計劃以實現IDS內容恢復和內容檢測為目標,寫一下協議恢復的編程實現,開發環境 linux。由于本人技術能力和時間有限,其內容在以后逐步編寫發布,內容有錯誤等,請大家指正。
大家對此有什么要求和看法,均可提出。
目錄
1、協議恢復接收數據部分
2、如何處理接收到的數據
3、處理保存的數據
4、內容檢測
5、需要的知識
1、協議恢復接收數據部分
軟件環境:linux+mysql
硬件環境:網卡
設置網卡為混雜模式,這樣網卡就可以監聽網絡上的數據。
本文對于接收網絡數據是通過接收mmap io輸入的原始數據包,經過一系列的處理,產生用于內容恢復、連接審計、實時監控的輸出。本文只介紹內容恢復(包括內容檢測),其他部分雷同。
如下圖所示:
第一步:打開原始socket,為了接收數據。
if ((fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) {
perror("socket()");
return 1;
}
第二步:設置MMAP BUF大小等。
req.tp_block_size = BLOCK_SIZE;
req.tp_block_nr = BLOCK_NR;
req.tp_frame_size = FRAME_SIZE;
req.tp_frame_nr = FRAME_NR;
setsockopt(fd, SOL_PACKET, PACKET_RX_RING, (char *)&req, sizeof(req))
關于packet mmap的使用見http://pusa.uv.es/~ulisses/packet_mmap/packet_mmap.txt
所說的:
From the system calls stand point, the use of PACKET_MMAP involves
the following process:
[setup] socket() -------> creation of the capture socket
setsockopt() ---> allocation of the circular buffer (ring)
mmap() ---------> maping of the allocated buffer to the
user process
[capture] poll() ---------> to wait for incoming packets
[shutdown] close() --------> destruction of the capture socket and
deallocation of all associated
resources.
http://pusa.uv.es/~ulisses/packet_mmap/tmp/RFCDocumentation%20PACKET_MMAP%20memory%20allocation_new.txt
3、處理保存的數據 我們保存的數據可以是以IP,PORT,時間等關鍵字來保存,對于TCP協議來說,一個文件就是一個完整的TCP連接了,那么現在就可以讀取文件來恢復數據了。 一般我們可以按照PORT來劃分協議,比如21端口是FTP,23端口是TELNET,80端口是HTTP等,但有寫協議可能以其他端口出現,例如HTTP,可以是8000,8080等等,可以根據數據內容來判斷協議。 假如是HTTP協議,HTTP:根據客戶端“GET、HEAD、POST”和服務端“200 OK”來判斷是否是一個完整的請求,同時獲取URL;
根據“Host:”來獲取域名;
根據“Content-Type:”來判斷文件類型;
根據“Content-Encoding: gzip”來判斷GZIP;
根據“Transfer-Encoding: chunked”來判斷是否以chunked方式編碼傳輸。
例如SMTP協議,先根據“EHLO”或“HELO”獲取用戶名,如果有認證,就根據“AUTH PLAIN”或“AUTH LOGIN”信息來獲取用戶名,它們都是以BASE64編碼(AUTH FOOBAR、AUTH CRA-MD5、AUTH DIGEST-MD5等);
根據“MAIL FROM:”,“SEND FROM:”,“SOML FROM:”來獲取發件人;
根據“RCPT TO:”來獲取收件人,這里收件人會是多個;
郵件的主體在“DATA”后面,郵件的主題從郵件里獲取“Subject:”;
根據“Content-type: multipart/mixed;”來判斷是否有附件,注意有的附件是以“begin”開始,“end”結束的。
根據服務端返回“250”來判斷郵件結束,后面如果還有DATA,那就繼續分析一個新的郵件。
這里對協議分析,我就簡單介紹一下,其他協議也一樣。根據自己的情況來增加所需要的協議。
4、內容檢測 內容檢測是在內容恢復的基礎上進行的,我們上面已經對數據進行協議恢復,那么就可以根據我們設置的關鍵字進行檢測了,對于一些數據是進行編碼的,那么我們就需要解碼后進行檢測,例如SMTP,POP3等很多是mime編碼后的數據,例如HTTP數據有的是GZIP編碼,有的加了CHUNKED等等。 我這里只是提一下,大家可以根據自己的想法,發揮想象能力,做出更好的內容來。
5、需要的知識
A、基礎知識,包括C,linux操作,socket等。
B、packet mmap io知識
C、算法 ,如AVL,hash,qsort,bm等,好的算法,提高處理效率。
D、編碼知識,如BASE64,QP,GZIP,HZ,BIG5等。
E、協議知識,大量RFC等協議實現。
F、其他經典程序,如snort,tcpdump等都有此類似功能。