吳志強,馬春波,敖發良
(桂林電子科技大學 信息與通信學院,廣西 桂林 541004)
基于Winpcap的郵件還原系統的實現*
吳志強,馬春波,敖發良
(桂林電子科技大學 信息與通信學院,廣西 桂林 541004)
隨著互聯網的普及,SMTP/POP3協議傳輸方式下的郵件已成為最簡便、最經濟的通信方式,但許多有害的郵件信息也隨之而來。針對這些問題,在VC開發環境下,研究并實現了基于Winpcap的郵件監控及還原系統。該系統設計了多線程模塊,可以同時處理50個郵件及附件信息,并對網絡數據包的捕獲、過濾與重組、信頭解碼、附件處理、信體內容提取等模塊進行了算法優化。功能測試和驗證結果表明,該系統穩定、可擴展,達到實時性要求。
Winpcap;數據包捕獲;郵件重組;多線程;郵件解碼
當前流行的電子郵件收發主要有兩種方式:第一種是使用 Fire-Fox、IE等瀏覽器軟件登錄 ISP的 Web站點;第二種是使用Foxmail、Outlook等郵件客戶端軟件連接郵件服務器,通過SMTP/POP3協議收發郵件。這里主要討論基于SMTP/POP3協議郵件信息的獲取與還原技術。實驗結果表明,本系統有效實現了郵件信息捕獲和信息還原等功能,具有較高的效率和較好的時實性。
Winpcap[1-3]為數據包捕獲提供了一套標準接口,它是由伯克利分組捕獲庫派生而來的分組捕獲庫,在Win32平臺上實現對底層包的捕獲,其體系結構包括3個模塊:(1)NPF(內核級的數據報過濾器)核心的包過濾驅動程序;(2)底層的動態連接庫 Packet.dll(數據包低級驅動程序庫)為Win32平臺提供了一個公共的接口;(3)高層的獨立于操作系統的庫Wpcap.dll(數據包高級驅動程序庫)[4]。
監控主體可以分為郵件服務器端監控、郵件客戶端監控和第三方網絡監控。本文闡述的是基于第三方網絡監控的郵件安全監控系統,即將網絡上的關于郵件協議的數據包進行截獲,并結合內容檢測技術和協議分析技術對郵件進行有效監聽。這種監控方式允許在各個組織內部靈活配置監控規則,并且響應迅速。
網卡具有4種工作模式:直接模式、多播傳送模式、廣播模式和混雜模式[5]。網卡的缺省工作模式包含廣播模式和直接模式,即它只接收廣播幀與發給對應地址的幀。如果采用混雜模式,網卡將接收同一網絡內所有主機所發送的數據包。
由于系統主要分析SMTP/POP3協議傳輸方式下的郵件信息獲取,因此主要針對SMTP協議、POP3協議網絡數據進行分析。根據協議特點只需要對感興趣的網絡連接進行數據重組,其他協議的網絡數據可以直接丟棄。所以只要獲取端口地址為25和110的數據包即可,如圖1所示。

圖1 SMTP/POP3協議的郵件信息獲取流程圖
整個系統的設計可分為兩個部分:一個郵件監控部分,計算機運行在Windows系統下,目的是截獲經過網卡的郵件數據包;另一個是郵件解析和還原部分,主要目的是對SMTP/POP3文件進行解析,還原成原來的可讀郵件信息,并對還原后的文件進行閱讀查看、刪除等管理操作,系統的總體框架如圖2所示。系統由包捕獲功能模塊、IP協議數據解析模塊、TCP協議數據解析過濾模塊、郵件協議解析模塊、郵件解碼模塊、郵件保存模塊組成。

圖2 系統的總體框架
下面重點分析系統中郵件重組和解碼等關鍵問題和算法的設計。
SMTP/POP3協議采用會話方式工作,通信雙方通過命令請求和命令響應進行交互,完成郵件的發送或接收。提取基于SMTP/POP3協議傳輸的郵件信息關鍵在于郵件會話的識別。下面以POP3為例,說明交互過程[6]。
基于POP3/SMTP協議的郵件信息還原涉及四方面的內容:數據包保存、重要域值提取、郵件內容的解析以及附件的解析還原。
下面主要介紹面向傳輸層的數據分析還原,總流程如圖3所示。

圖3 網絡數據包分析流程圖
在對郵件協議交互過程有很深刻的認識后可對電子郵件數據包進行截獲。為了提高運行速度,防止丟包現象,提高還原文件效率,優化程序,作者創建3個線程分別執行任務:
(1)主線程是Winpcap抓包,整個系統在貫徹主線程的基礎上對網絡層、傳輸層和應用層進行了分析和研究;
(2)線程1是協議分析,網絡通信有很多協議,因此協議分析是關鍵,針對不同的協議有不同的分析方法,因此系統具有良好的可擴展性,可方便地添加對新的網絡協議的支持;
(3)線程2是對電子郵件數據包的解析并還原,因此當捕獲郵件文件數據包時,打開線程組2,可以同時循環接收和保存50個郵件,不過此時這些線程是休眠狀態,可能客服端只是對SMTP/POP3服務器的一般交互過程,沒有郵件傳輸,因此要仔細觀察和分析整個郵件服務器交互過程,如果分析客戶端郵件發送動作時,觸發線程2進行郵件信息的重組、保存,直到完整地保存了整個郵件及附件后關閉線程。
此時作者設計了SMTP/POP3郵件信息重組子流程圖,如圖4所示。
郵件數據包重組的策略也是文件還原系統的核心,下面詳細說明捕獲和重組算法:
(1)根據 SMTP/POP3命令的參數,監聽端口號 25(或110)來分析服務器與客服端之間的交互過程;
(2)對經過網卡數據包的命令進行字符串匹配,當匹配的字符串 DATA(Data)成功時;客服端要向 SMTP服務器發送郵件,創建文件名為 EmailFile[file_num/50],這時打開可以同時處理50個郵件的線程2進行監聽,跳至(4);
(3)當匹配的字符串RETR成功時,客服端要向POP3客戶端接收郵件,創建文件名為EmailFile1[file1_num/50],這時打開可以同時處理50個郵件的線程2進行監聽,跳 至(5);
(4)把SMTP數據包的當前序列碼為sequence和數據偏移量data_len保存,設置標記位STRAT=1下一個包的序列碼為next_seq_num[file_num/50]。其大小為:next_seq_num[file_num/50]=sequence+data_len;保存發送郵件;跳至(6);
(5)把當前POP3數據包的序列碼為sequence和數據偏移量data_len保存,設置標記位STRAT1=1下一個包的序列碼為next_seq_num[file1_num/50],其大小為:next_seq_num[file1_num/50]=sequence+data_len;保存接收郵件,跳至(7);
(6)開始重組SMTP郵件數據包并把當前序列碼記為sequence和數據偏移量 data_len,上次一個包的序列碼為next_seq_num[i]。以大小為50的循環序列進行一一判斷:當滿足next_seq_num[i]==sequence,則為該文件EmailFile[file_num/50]的數據,不等則丟棄,這樣的目的是為了在監聽多郵件傳輸時確保不會導致捕獲的數據混亂,跳至(8);

圖4 郵件捕獲和重組流程圖
(7)開始重組POP3郵件數據包并把當前序列碼即為sequence和數據偏移量 data_len,上次一個包的序列碼為next_seq_num[i]。以周期為50的序列進行判斷:next_seq_num[i]==sequence,則為該文件 EmailFile1[file1_num/50]的數據,不等則丟棄,這樣的目的是為了在重組多郵件傳輸時確保不會導致捕獲的數據混亂;
(8)當數據包以一個QUIT命令來結束數據連接,則郵件SMTP/POP3郵件傳輸結束,設置標記位STRAT為0,設置標記位 STRAT1為 0;
(9)關閉文件,關閉線程,停止郵件捕獲和重組子程序。
從算法可以得出,首先識別郵件會話狀態的方法來確定郵件信息、重組郵件數據包,并保存在臨時文件夾,待郵件數據包解析和還原時調用。只需捕獲端口是80、25或110的數據包。
互聯網上使用的電子郵件基本都遵循MIME規范,MIME郵件傳遞實際是一個經過特殊編碼并以約定格式進行網絡傳輸的,因此只需提取存儲在郵件各種域中的位置、格式和編碼信息,根據這些信息從字符序列中提取出對應的字符內容對其進行解碼,就可以得到需要的有關內容。下面是帶附件和不帶附件的郵件信息提取和解析模塊設計。流程圖如圖5所示。

圖5 郵件內容解析流程圖
這個部分主要是郵件內容的關鍵字匹配,主要采用精確關鍵字匹配,它將待檢索的數據串和關鍵詞組成的模式串進行逐字比較,只有在數據串中發現與模式串完全一致的部分之后,關鍵詞匹配才算成功。把郵件各部分內容讀取到字符串數組中,再根據MIME規范進行編寫相應的解碼函數,經過郵件解析,提取電子郵件各部分(如發信人、收信人、主題、正文等),并對包含編碼的部分進行解碼(Base64、Quoted-Printable等),還原為可理解的電子郵件。郵件正文數據包可能分幾個子段進行傳輸,此時要循環調用函數 mult_bodydecode(),當有附件時,先把正文內容解碼之后,才進行附件的解碼,這也是調用附件解碼函數Email_Attachment()對附件進行還原。直到整個郵件解析完成才關閉文件和線程,完成郵件的還原。
本系統主要是在編程上優化,提高數據包的分析和解碼效率和速度,由本文可以看出郵件數據分析、過濾、重組、解析、還原算法建立在基于Winpcap基礎之上,因此,該系統保留了Winpcap的抓包特點的同時,也克服了Winpcap部分不足。主要體現在以下兩點:進一步提高了分析的速度,同時大大提高分析的準確性;節約了協議分析時間。
文中設計的網絡安全監控系統,選擇Windows2000作系統平臺,利用VC++6.0編寫程序,它是基于系統的底層進行設計,與操作系統緊密結合。通過在局域網中的使用和分析,它能實時地、動態地對局域網內的所有上網主機進行監視、控制與管理,系統穩定、效果好。
[1]張偉,王韜,潘艷輝,等.基于Winpcap的數據包捕獲及應用[J].計算機工程與設計,2008,29(7):1649-1651.
[2]循序漸進學習使用Winpcap[EB/OL].中國協議分析網.http://www.cnpaf.net/,2005.
[3]李雪瑩,劉寶旭,許榕生.基于 WinPcap的網絡監控系統性能優化[J].計算機工程,2004,30(1):8-9.
[4]趙英男,張秉權.MIME郵件結構格式分析[J].軟件技術,2001,20(2):50-53.
[5]秦根建,張秉權.網絡數據包截獲機制研究[J].兵工自動化,2003,22(6):2-3.
[6]唐燕.POP3協議解析及簡單實現[J].網絡通訊與安全,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
國家自然科學基金(60862001);廣西教育廳基金(200808MS004);廣西信息與通訊技術重點實驗室基金(10908);廣西研究生科研創新項目(20101059508m15)
2010-06-28)
吳志強,男,1983年生,碩士研究生,主要研究方向:網絡安全,信息還原。