吳志強(qiáng),馬春波,敖發(fā)良
(桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林 541004)
基于Winpcap的郵件還原系統(tǒng)的實(shí)現(xiàn)*
吳志強(qiáng),馬春波,敖發(fā)良
(桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林 541004)
隨著互聯(lián)網(wǎng)的普及,SMTP/POP3協(xié)議傳輸方式下的郵件已成為最簡(jiǎn)便、最經(jīng)濟(jì)的通信方式,但許多有害的郵件信息也隨之而來(lái)。針對(duì)這些問(wèn)題,在VC開(kāi)發(fā)環(huán)境下,研究并實(shí)現(xiàn)了基于Winpcap的郵件監(jiān)控及還原系統(tǒng)。該系統(tǒng)設(shè)計(jì)了多線程模塊,可以同時(shí)處理50個(gè)郵件及附件信息,并對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲、過(guò)濾與重組、信頭解碼、附件處理、信體內(nèi)容提取等模塊進(jìn)行了算法優(yōu)化。功能測(cè)試和驗(yàn)證結(jié)果表明,該系統(tǒng)穩(wěn)定、可擴(kuò)展,達(dá)到實(shí)時(shí)性要求。
Winpcap;數(shù)據(jù)包捕獲;郵件重組;多線程;郵件解碼
當(dāng)前流行的電子郵件收發(fā)主要有兩種方式:第一種是使用 Fire-Fox、IE等瀏覽器軟件登錄 ISP的 Web站點(diǎn);第二種是使用Foxmail、Outlook等郵件客戶(hù)端軟件連接郵件服務(wù)器,通過(guò)SMTP/POP3協(xié)議收發(fā)郵件。這里主要討論基于SMTP/POP3協(xié)議郵件信息的獲取與還原技術(shù)。實(shí)驗(yàn)結(jié)果表明,本系統(tǒng)有效實(shí)現(xiàn)了郵件信息捕獲和信息還原等功能,具有較高的效率和較好的時(shí)實(shí)性。
Winpcap[1-3]為數(shù)據(jù)包捕獲提供了一套標(biāo)準(zhǔn)接口,它是由伯克利分組捕獲庫(kù)派生而來(lái)的分組捕獲庫(kù),在Win32平臺(tái)上實(shí)現(xiàn)對(duì)底層包的捕獲,其體系結(jié)構(gòu)包括3個(gè)模塊:(1)NPF(內(nèi)核級(jí)的數(shù)據(jù)報(bào)過(guò)濾器)核心的包過(guò)濾驅(qū)動(dòng)程序;(2)底層的動(dòng)態(tài)連接庫(kù) Packet.dll(數(shù)據(jù)包低級(jí)驅(qū)動(dòng)程序庫(kù))為Win32平臺(tái)提供了一個(gè)公共的接口;(3)高層的獨(dú)立于操作系統(tǒng)的庫(kù)Wpcap.dll(數(shù)據(jù)包高級(jí)驅(qū)動(dòng)程序庫(kù))[4]。
監(jiān)控主體可以分為郵件服務(wù)器端監(jiān)控、郵件客戶(hù)端監(jiān)控和第三方網(wǎng)絡(luò)監(jiān)控。本文闡述的是基于第三方網(wǎng)絡(luò)監(jiān)控的郵件安全監(jiān)控系統(tǒng),即將網(wǎng)絡(luò)上的關(guān)于郵件協(xié)議的數(shù)據(jù)包進(jìn)行截獲,并結(jié)合內(nèi)容檢測(cè)技術(shù)和協(xié)議分析技術(shù)對(duì)郵件進(jìn)行有效監(jiān)聽(tīng)。這種監(jiān)控方式允許在各個(gè)組織內(nèi)部靈活配置監(jiān)控規(guī)則,并且響應(yīng)迅速。
網(wǎng)卡具有4種工作模式:直接模式、多播傳送模式、廣播模式和混雜模式[5]。網(wǎng)卡的缺省工作模式包含廣播模式和直接模式,即它只接收廣播幀與發(fā)給對(duì)應(yīng)地址的幀。如果采用混雜模式,網(wǎng)卡將接收同一網(wǎng)絡(luò)內(nèi)所有主機(jī)所發(fā)送的數(shù)據(jù)包。
由于系統(tǒng)主要分析SMTP/POP3協(xié)議傳輸方式下的郵件信息獲取,因此主要針對(duì)SMTP協(xié)議、POP3協(xié)議網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行分析。根據(jù)協(xié)議特點(diǎn)只需要對(duì)感興趣的網(wǎng)絡(luò)連接進(jìn)行數(shù)據(jù)重組,其他協(xié)議的網(wǎng)絡(luò)數(shù)據(jù)可以直接丟棄。所以只要獲取端口地址為25和110的數(shù)據(jù)包即可,如圖1所示。
圖1 SMTP/POP3協(xié)議的郵件信息獲取流程圖
整個(gè)系統(tǒng)的設(shè)計(jì)可分為兩個(gè)部分:一個(gè)郵件監(jiān)控部分,計(jì)算機(jī)運(yùn)行在Windows系統(tǒng)下,目的是截獲經(jīng)過(guò)網(wǎng)卡的郵件數(shù)據(jù)包;另一個(gè)是郵件解析和還原部分,主要目的是對(duì)SMTP/POP3文件進(jìn)行解析,還原成原來(lái)的可讀郵件信息,并對(duì)還原后的文件進(jìn)行閱讀查看、刪除等管理操作,系統(tǒng)的總體框架如圖2所示。系統(tǒng)由包捕獲功能模塊、IP協(xié)議數(shù)據(jù)解析模塊、TCP協(xié)議數(shù)據(jù)解析過(guò)濾模塊、郵件協(xié)議解析模塊、郵件解碼模塊、郵件保存模塊組成。
圖2 系統(tǒng)的總體框架
下面重點(diǎn)分析系統(tǒng)中郵件重組和解碼等關(guān)鍵問(wèn)題和算法的設(shè)計(jì)。
SMTP/POP3協(xié)議采用會(huì)話方式工作,通信雙方通過(guò)命令請(qǐng)求和命令響應(yīng)進(jìn)行交互,完成郵件的發(fā)送或接收。提取基于SMTP/POP3協(xié)議傳輸?shù)泥]件信息關(guān)鍵在于郵件會(huì)話的識(shí)別。下面以POP3為例,說(shuō)明交互過(guò)程[6]。
基于POP3/SMTP協(xié)議的郵件信息還原涉及四方面的內(nèi)容:數(shù)據(jù)包保存、重要域值提取、郵件內(nèi)容的解析以及附件的解析還原。
下面主要介紹面向傳輸層的數(shù)據(jù)分析還原,總流程如圖3所示。
圖3 網(wǎng)絡(luò)數(shù)據(jù)包分析流程圖
在對(duì)郵件協(xié)議交互過(guò)程有很深刻的認(rèn)識(shí)后可對(duì)電子郵件數(shù)據(jù)包進(jìn)行截獲。為了提高運(yùn)行速度,防止丟包現(xiàn)象,提高還原文件效率,優(yōu)化程序,作者創(chuàng)建3個(gè)線程分別執(zhí)行任務(wù):
(1)主線程是Winpcap抓包,整個(gè)系統(tǒng)在貫徹主線程的基礎(chǔ)上對(duì)網(wǎng)絡(luò)層、傳輸層和應(yīng)用層進(jìn)行了分析和研究;
(2)線程1是協(xié)議分析,網(wǎng)絡(luò)通信有很多協(xié)議,因此協(xié)議分析是關(guān)鍵,針對(duì)不同的協(xié)議有不同的分析方法,因此系統(tǒng)具有良好的可擴(kuò)展性,可方便地添加對(duì)新的網(wǎng)絡(luò)協(xié)議的支持;
(3)線程2是對(duì)電子郵件數(shù)據(jù)包的解析并還原,因此當(dāng)捕獲郵件文件數(shù)據(jù)包時(shí),打開(kāi)線程組2,可以同時(shí)循環(huán)接收和保存50個(gè)郵件,不過(guò)此時(shí)這些線程是休眠狀態(tài),可能客服端只是對(duì)SMTP/POP3服務(wù)器的一般交互過(guò)程,沒(méi)有郵件傳輸,因此要仔細(xì)觀察和分析整個(gè)郵件服務(wù)器交互過(guò)程,如果分析客戶(hù)端郵件發(fā)送動(dòng)作時(shí),觸發(fā)線程2進(jìn)行郵件信息的重組、保存,直到完整地保存了整個(gè)郵件及附件后關(guān)閉線程。
此時(shí)作者設(shè)計(jì)了SMTP/POP3郵件信息重組子流程圖,如圖4所示。
郵件數(shù)據(jù)包重組的策略也是文件還原系統(tǒng)的核心,下面詳細(xì)說(shuō)明捕獲和重組算法:
(1)根據(jù) SMTP/POP3命令的參數(shù),監(jiān)聽(tīng)端口號(hào) 25(或110)來(lái)分析服務(wù)器與客服端之間的交互過(guò)程;
(2)對(duì)經(jīng)過(guò)網(wǎng)卡數(shù)據(jù)包的命令進(jìn)行字符串匹配,當(dāng)匹配的字符串 DATA(Data)成功時(shí);客服端要向 SMTP服務(wù)器發(fā)送郵件,創(chuàng)建文件名為 EmailFile[file_num/50],這時(shí)打開(kāi)可以同時(shí)處理50個(gè)郵件的線程2進(jìn)行監(jiān)聽(tīng),跳至(4);
(3)當(dāng)匹配的字符串RETR成功時(shí),客服端要向POP3客戶(hù)端接收郵件,創(chuàng)建文件名為EmailFile1[file1_num/50],這時(shí)打開(kāi)可以同時(shí)處理50個(gè)郵件的線程2進(jìn)行監(jiān)聽(tīng),跳 至(5);
(4)把SMTP數(shù)據(jù)包的當(dāng)前序列碼為sequence和數(shù)據(jù)偏移量data_len保存,設(shè)置標(biāo)記位STRAT=1下一個(gè)包的序列碼為next_seq_num[file_num/50]。其大小為:next_seq_num[file_num/50]=sequence+data_len;保存發(fā)送郵件;跳至(6);
(5)把當(dāng)前POP3數(shù)據(jù)包的序列碼為sequence和數(shù)據(jù)偏移量data_len保存,設(shè)置標(biāo)記位STRAT1=1下一個(gè)包的序列碼為next_seq_num[file1_num/50],其大小為:next_seq_num[file1_num/50]=sequence+data_len;保存接收郵件,跳至(7);
(6)開(kāi)始重組SMTP郵件數(shù)據(jù)包并把當(dāng)前序列碼記為sequence和數(shù)據(jù)偏移量 data_len,上次一個(gè)包的序列碼為next_seq_num[i]。以大小為50的循環(huán)序列進(jìn)行一一判斷:當(dāng)滿(mǎn)足next_seq_num[i]==sequence,則為該文件EmailFile[file_num/50]的數(shù)據(jù),不等則丟棄,這樣的目的是為了在監(jiān)聽(tīng)多郵件傳輸時(shí)確保不會(huì)導(dǎo)致捕獲的數(shù)據(jù)混亂,跳至(8);
圖4 郵件捕獲和重組流程圖
(7)開(kāi)始重組POP3郵件數(shù)據(jù)包并把當(dāng)前序列碼即為sequence和數(shù)據(jù)偏移量 data_len,上次一個(gè)包的序列碼為next_seq_num[i]。以周期為50的序列進(jìn)行判斷:next_seq_num[i]==sequence,則為該文件 EmailFile1[file1_num/50]的數(shù)據(jù),不等則丟棄,這樣的目的是為了在重組多郵件傳輸時(shí)確保不會(huì)導(dǎo)致捕獲的數(shù)據(jù)混亂;
(8)當(dāng)數(shù)據(jù)包以一個(gè)QUIT命令來(lái)結(jié)束數(shù)據(jù)連接,則郵件SMTP/POP3郵件傳輸結(jié)束,設(shè)置標(biāo)記位STRAT為0,設(shè)置標(biāo)記位 STRAT1為 0;
(9)關(guān)閉文件,關(guān)閉線程,停止郵件捕獲和重組子程序。
從算法可以得出,首先識(shí)別郵件會(huì)話狀態(tài)的方法來(lái)確定郵件信息、重組郵件數(shù)據(jù)包,并保存在臨時(shí)文件夾,待郵件數(shù)據(jù)包解析和還原時(shí)調(diào)用。只需捕獲端口是80、25或110的數(shù)據(jù)包。
互聯(lián)網(wǎng)上使用的電子郵件基本都遵循MIME規(guī)范,MIME郵件傳遞實(shí)際是一個(gè)經(jīng)過(guò)特殊編碼并以約定格式進(jìn)行網(wǎng)絡(luò)傳輸?shù)?,因此只需提取存?chǔ)在郵件各種域中的位置、格式和編碼信息,根據(jù)這些信息從字符序列中提取出對(duì)應(yīng)的字符內(nèi)容對(duì)其進(jìn)行解碼,就可以得到需要的有關(guān)內(nèi)容。下面是帶附件和不帶附件的郵件信息提取和解析模塊設(shè)計(jì)。流程圖如圖5所示。
圖5 郵件內(nèi)容解析流程圖
這個(gè)部分主要是郵件內(nèi)容的關(guān)鍵字匹配,主要采用精確關(guān)鍵字匹配,它將待檢索的數(shù)據(jù)串和關(guān)鍵詞組成的模式串進(jìn)行逐字比較,只有在數(shù)據(jù)串中發(fā)現(xiàn)與模式串完全一致的部分之后,關(guān)鍵詞匹配才算成功。把郵件各部分內(nèi)容讀取到字符串?dāng)?shù)組中,再根據(jù)MIME規(guī)范進(jìn)行編寫(xiě)相應(yīng)的解碼函數(shù),經(jīng)過(guò)郵件解析,提取電子郵件各部分(如發(fā)信人、收信人、主題、正文等),并對(duì)包含編碼的部分進(jìn)行解碼(Base64、Quoted-Printable等),還原為可理解的電子郵件。郵件正文數(shù)據(jù)包可能分幾個(gè)子段進(jìn)行傳輸,此時(shí)要循環(huán)調(diào)用函數(shù) mult_bodydecode(),當(dāng)有附件時(shí),先把正文內(nèi)容解碼之后,才進(jìn)行附件的解碼,這也是調(diào)用附件解碼函數(shù)Email_Attachment()對(duì)附件進(jìn)行還原。直到整個(gè)郵件解析完成才關(guān)閉文件和線程,完成郵件的還原。
本系統(tǒng)主要是在編程上優(yōu)化,提高數(shù)據(jù)包的分析和解碼效率和速度,由本文可以看出郵件數(shù)據(jù)分析、過(guò)濾、重組、解析、還原算法建立在基于Winpcap基礎(chǔ)之上,因此,該系統(tǒng)保留了Winpcap的抓包特點(diǎn)的同時(shí),也克服了Winpcap部分不足。主要體現(xiàn)在以下兩點(diǎn):進(jìn)一步提高了分析的速度,同時(shí)大大提高分析的準(zhǔn)確性;節(jié)約了協(xié)議分析時(shí)間。
文中設(shè)計(jì)的網(wǎng)絡(luò)安全監(jiān)控系統(tǒng),選擇Windows2000作系統(tǒng)平臺(tái),利用VC++6.0編寫(xiě)程序,它是基于系統(tǒng)的底層進(jìn)行設(shè)計(jì),與操作系統(tǒng)緊密結(jié)合。通過(guò)在局域網(wǎng)中的使用和分析,它能實(shí)時(shí)地、動(dòng)態(tài)地對(duì)局域網(wǎng)內(nèi)的所有上網(wǎng)主機(jī)進(jìn)行監(jiān)視、控制與管理,系統(tǒng)穩(wěn)定、效果好。
[1]張偉,王韜,潘艷輝,等.基于Winpcap的數(shù)據(jù)包捕獲及應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(7):1649-1651.
[2]循序漸進(jìn)學(xué)習(xí)使用Winpcap[EB/OL].中國(guó)協(xié)議分析網(wǎng).http://www.cnpaf.net/,2005.
[3]李雪瑩,劉寶旭,許榕生.基于 WinPcap的網(wǎng)絡(luò)監(jiān)控系統(tǒng)性能優(yōu)化[J].計(jì)算機(jī)工程,2004,30(1):8-9.
[4]趙英男,張秉權(quán).MIME郵件結(jié)構(gòu)格式分析[J].軟件技術(shù),2001,20(2):50-53.
[5]秦根建,張秉權(quán).網(wǎng)絡(luò)數(shù)據(jù)包截獲機(jī)制研究[J].兵工自動(dòng)化,2003,22(6):2-3.
[6]唐燕.POP3協(xié)議解析及簡(jiǎn)單實(shí)現(xiàn)[J].網(wǎng)絡(luò)通訊與安全,2007,16(2):951-952.
Implementation of an email recovering system based on Winpcap
Wu Zhiqiang,Ma Chunbo,Ao Faliang
(College of Information&Communication,Guilin University of Electronic Technology,Guilin 541004,China)
With the prevalence of the Internet,email of SMTP/POP3 protocol has become the most convenient and economical communications means,yet along goes a great deal of harmful information.According to these problem,this article proposes an email security monitoring and recovering system which is based on Winpcap in VC software environment on Windows system.This system which designs the multi-thread modul can deal with 50 email and information of accessories at one time the system presents some improvement in algorithm,includeing capturing,filtering and reordering of the network packages,email-header decoding,attachmentprocessing and bodies-content and so on.The experiment indicates that this system can be extended greatly,good stability and meet the real-time request.
Winpcap;packets capture;email reassemble;multi-thread;mail decoding
TP393.08
A
1674-7720(2011)02-0058-04
國(guó)家自然科學(xué)基金(60862001);廣西教育廳基金(200808MS004);廣西信息與通訊技術(shù)重點(diǎn)實(shí)驗(yàn)室基金(10908);廣西研究生科研創(chuàng)新項(xiàng)目(20101059508m15)
2010-06-28)
吳志強(qiáng),男,1983年生,碩士研究生,主要研究方向:網(wǎng)絡(luò)安全,信息還原。
網(wǎng)絡(luò)安全與數(shù)據(jù)管理2011年2期