潘卿
(南京林業(yè)大學(xué),江蘇 南京210037)
隨著計(jì)算機(jī)技術(shù)、通信技術(shù)和互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)購(gòu)物、網(wǎng)上消費(fèi)、電子商務(wù)等早已風(fēng)靡全球,網(wǎng)絡(luò)信息已經(jīng)成為社會(huì)發(fā)展和個(gè)人生活的重要組成部分。然而由于計(jì)算機(jī)網(wǎng)絡(luò)組成形式多樣性、終端分布廣和網(wǎng)絡(luò)的開(kāi)放性、互聯(lián)性等特征致使這些網(wǎng)絡(luò)信息容易受到來(lái)自世界各地的各種人為攻擊例如信息泄漏、信息竊取、數(shù)據(jù)篡改、數(shù)據(jù)刪添、計(jì)算機(jī)病毒等,涉及到個(gè)人的主要包括銀行賬號(hào)、密碼、個(gè)人隱私等敏感信息,網(wǎng)絡(luò)安全的形式越來(lái)越嚴(yán)峻。據(jù)某知名殺毒軟件公司統(tǒng)計(jì),平均每天檢測(cè)到的感染木馬的計(jì)算機(jī)數(shù)量為上千臺(tái),平均每天新增加的惡意程序特征就高達(dá)780 個(gè),惡意軟件最廣泛是通過(guò)互聯(lián)網(wǎng)特別是惡意網(wǎng)站進(jìn)行傳播。
為了給個(gè)人計(jì)算機(jī)加強(qiáng)網(wǎng)絡(luò)安全,避免惡意網(wǎng)站的侵襲,需要截?cái)鄲阂饩W(wǎng)站與用戶(hù)之間的正常通信,同時(shí)向用戶(hù)推送告警頁(yè)面。這樣既不會(huì)讓病毒、惡意軟件有機(jī)可乘,又讓用戶(hù)注意到已經(jīng)在訪(fǎng)問(wèn)惡意網(wǎng)站,加強(qiáng)自我管理。
通過(guò)對(duì)網(wǎng)絡(luò)嗅探器對(duì)網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包特別是HTTP 請(qǐng)求的捕獲與分析,當(dāng)發(fā)現(xiàn)HTTP 請(qǐng)求報(bào)文Host 字段與惡意網(wǎng)站列表中的網(wǎng)站名匹配時(shí),獲取組建推送告警報(bào)文所需要的MAC地址、IP 源地址、目的地址、TCP 端口、SEQ 序號(hào)和ACK 序號(hào)等通信信息[1],直接生成用戶(hù)要訪(fǎng)問(wèn)的網(wǎng)站的回應(yīng)數(shù)據(jù)包,并將告警信息成功推送至用戶(hù),從而阻止惡意網(wǎng)站內(nèi)容傳輸至用戶(hù)瀏覽器,截?cái)嗳缒抉R、病毒等惡意軟件的傳播途徑,以達(dá)到保護(hù)用戶(hù)安全的目的。
本系統(tǒng)可根據(jù)收集的惡意網(wǎng)站名單,對(duì)惡意網(wǎng)站列表進(jìn)行實(shí)時(shí)更新,并且系統(tǒng)管理員可自行選擇推送頁(yè)面,系統(tǒng)使用簡(jiǎn)單靈活,因此對(duì)訪(fǎng)問(wèn)惡意網(wǎng)站告警系統(tǒng)的應(yīng)用具有重要意義。
本系統(tǒng)主要包括網(wǎng)絡(luò)嗅探器和網(wǎng)頁(yè)推送器兩部分,其中嗅探器和網(wǎng)頁(yè)推送器是本系統(tǒng)實(shí)現(xiàn)的關(guān)鍵。網(wǎng)絡(luò)嗅探器(Sniffer 系統(tǒng)),放置于網(wǎng)絡(luò)節(jié)點(diǎn)處,對(duì)網(wǎng)絡(luò)中的數(shù)據(jù)幀進(jìn)行捕獲的一種被動(dòng)監(jiān)聽(tīng)手段,是一種常用的收集有用數(shù)據(jù)的方法,本系統(tǒng)網(wǎng)絡(luò)嗅探器主要用于捕捉用戶(hù)發(fā)出的TCP 數(shù)據(jù)包[2]。網(wǎng)頁(yè)推送器用于將告警頁(yè)面以HTTP 請(qǐng)求應(yīng)答包的形式發(fā)送至用戶(hù)主機(jī),該應(yīng)答報(bào)文必須滿(mǎn)足TCP/IP 通信協(xié)議,同時(shí)由于本系統(tǒng)一般架設(shè)于局域網(wǎng)內(nèi)部,推送報(bào)文的源MAC 地址、目的MAC 地址必須與請(qǐng)求報(bào)文對(duì)應(yīng),以實(shí)現(xiàn)將應(yīng)答報(bào)文正確傳輸至用戶(hù)計(jì)算機(jī)。
由于本系統(tǒng)包含網(wǎng)頁(yè)推送器程序,且當(dāng)系統(tǒng)運(yùn)行在局域網(wǎng)內(nèi)時(shí),MAC 地址是以太網(wǎng)通信的基礎(chǔ),因此要求本系統(tǒng)的嗅探器不僅能夠獲取請(qǐng)求報(bào)文中高層協(xié)議如IP 協(xié)議、TCP 協(xié)議等信息,還必須能抓取請(qǐng)求報(bào)文中的MAC 地址等報(bào)文底層數(shù)據(jù)。
從常見(jiàn)的嗅探器實(shí)現(xiàn)機(jī)制[3]中可以了解,WinPcap 直接從網(wǎng)卡驅(qū)動(dòng)NIC 中獲取報(bào)文,該報(bào)文包含了請(qǐng)求報(bào)文包括MAC 地址在內(nèi)的所有信息,而套接字包捕獲則僅獲取報(bào)文IP 層以上的數(shù)據(jù),對(duì)于MAC 地址信息無(wú)法獲取。
為了實(shí)現(xiàn)網(wǎng)頁(yè)推送器能夠正確填充MAC 地址,本系統(tǒng)嗅探器同樣采用的WinPcap 實(shí)現(xiàn),通過(guò)使用WinPcap 設(shè)計(jì)開(kāi)發(fā)嗅探器[4]。網(wǎng)頁(yè)推送器用于將告警頁(yè)面以HTTP 請(qǐng)求應(yīng)答包的形式發(fā)送至用戶(hù)主機(jī),因此必須滿(mǎn)足TCP/IP 通信協(xié)議。同時(shí)為了實(shí)現(xiàn)將網(wǎng)頁(yè)推送至客戶(hù)端瀏覽器,對(duì)本系統(tǒng)設(shè)計(jì)時(shí)提出了一些關(guān)鍵要求。
本文在Windows 平臺(tái)下采用MFC 實(shí)現(xiàn)了一個(gè)嗅探器程序,開(kāi)發(fā)工具使用Visual C++,該設(shè)計(jì)可以捕獲到所有經(jīng)過(guò)本地網(wǎng)卡的所有的HTTP 數(shù)據(jù)包,并可從查找符合惡意網(wǎng)站列表的報(bào)文。
在捕獲數(shù)據(jù)包前,首先需要獲取網(wǎng)卡設(shè)備列表,如圖1 所示,當(dāng)用戶(hù)單擊某一網(wǎng)卡時(shí),在列表控件中填充該網(wǎng)卡諸如名稱(chēng)、描述、IP 地址、子網(wǎng)掩碼等詳細(xì)信息。當(dāng)選中了某一網(wǎng)卡后按“確定”按鈕完成網(wǎng)卡的選擇,通過(guò)CMainFrame 的pcap_if_t*dev 成員變量保存該網(wǎng)卡。為了實(shí)現(xiàn)對(duì)惡意網(wǎng)站的管理,本系統(tǒng)設(shè)計(jì)了網(wǎng)站列表維護(hù)對(duì)話(huà)框,通過(guò)該對(duì)話(huà)框可實(shí)現(xiàn)惡意網(wǎng)站的增加、修改和刪除等操作。
當(dāng)完成網(wǎng)卡選擇、推送文件選擇和惡意網(wǎng)站列表維護(hù)后,用戶(hù)單擊“文件”菜單的“開(kāi)始”菜單項(xiàng),系統(tǒng)通過(guò)建立ReceivePacket 線(xiàn)程開(kāi)始進(jìn)行WinPcap 捕獲設(shè)置,包括打開(kāi)網(wǎng)卡、設(shè)置過(guò)濾器等,最后循環(huán)調(diào)用pcap_loop 設(shè)置的packet_handler回調(diào)函數(shù)。
圖1 網(wǎng)絡(luò)設(shè)備嗅探選擇界面
在packet_handler 中,首先分析該TCP 報(bào)文的flag 標(biāo)志,只有為用戶(hù)瀏覽器請(qǐng)求報(bào)文結(jié)束標(biāo)志PSH+ACK 有效時(shí)再進(jìn)行下一步解析判斷。根據(jù)TCP 報(bào)文結(jié)構(gòu)定義,將數(shù)據(jù)指針定位于TCP 數(shù)據(jù)區(qū),也即HTTP 報(bào)文頭位置。然后在HTTP 報(bào)文中查找是否為請(qǐng)求報(bào)文,即是否包含GET 字段內(nèi)容。繼續(xù)在HTTP 請(qǐng)求報(bào)文中定位Host 字段。根據(jù)惡意網(wǎng)站列表數(shù)據(jù)查找是否匹配,如果匹配則調(diào)用sendpkt 進(jìn)行告警頁(yè)面推送。
網(wǎng)頁(yè)推送的報(bào)文在組包時(shí),不僅要符合TCP 的數(shù)據(jù)結(jié)構(gòu),而且必須符合TCP 的數(shù)據(jù)傳輸要求[5],下列為本系統(tǒng)實(shí)現(xiàn)推送的關(guān)鍵步驟。
3.2.1 惡意網(wǎng)站匹配報(bào)文的抓?。簭腍TTP 請(qǐng)求分析中可以發(fā)現(xiàn),Host 屬性包含了用戶(hù)訪(fǎng)問(wèn)的網(wǎng)站域名,因此需在WinPcap中對(duì)抓到的報(bào)文檢查Host 屬性是否與惡意網(wǎng)站列表匹配。
3.2.2 TCP 序列號(hào)和確認(rèn):TCP 序列號(hào)和確認(rèn)號(hào)是實(shí)現(xiàn)可靠傳輸?shù)幕A(chǔ),因此推送的報(bào)文必須符合序列號(hào)、確認(rèn)號(hào)的要求,也即推送報(bào)文的SEQ 為請(qǐng)求報(bào)文的ACK,推送報(bào)文的ACK 為請(qǐng)求報(bào)文的SEQ 加上請(qǐng)求報(bào)文TCP 數(shù)據(jù)長(zhǎng)度。
3.2.3 校驗(yàn)和計(jì)算:校驗(yàn)和包括IP 頭部校驗(yàn)和TCP 數(shù)據(jù)包校驗(yàn),IP 報(bào)文的校驗(yàn)和根據(jù)源IP、目的IP 信息,而TCP 數(shù)據(jù)包校驗(yàn)既包含TCP 頭部數(shù)據(jù)、TCP 數(shù)據(jù),還包括一個(gè)源IP、目的IP和協(xié)議信息在內(nèi)的偽IP 頭部數(shù)據(jù)。
3.2.4 響應(yīng)時(shí)間:推送的報(bào)文必須先于惡意網(wǎng)站生成的應(yīng)答報(bào)文到達(dá)用戶(hù),這樣由于TCP 協(xié)議的規(guī)約,后續(xù)到達(dá)的應(yīng)答報(bào)文將被視為重傳失敗而被用戶(hù)主機(jī)丟棄。
3.2.5 報(bào)文發(fā)送:推送器必須能直接發(fā)送包含以太網(wǎng)MAC數(shù)據(jù)在內(nèi)的報(bào)文,而socket 編程無(wú)法實(shí)現(xiàn)對(duì)目的MAC、源MAC的修改,WinPacp 中則提供了pcap_sendpacket 直接發(fā)送數(shù)據(jù)報(bào)文的接口函數(shù)。
當(dāng)嗅探器捕捉到用戶(hù)瀏覽器向惡意網(wǎng)站提交的HTTP 請(qǐng)求后,由sendpkt 函數(shù)進(jìn)行發(fā)送。sendpkt 函數(shù)原型為:void sendpkt(PUSH_INFO_PTR push_info, const uint_8 *pkt_data_in); 其中,push_info 為系統(tǒng)推送信息PUSH_INFO 結(jié)構(gòu)體指針,pkt_data_in為嗅探器捕獲的數(shù)據(jù)包。在sendpkt 中需要根據(jù)捕獲的報(bào)文內(nèi)容完成推送報(bào)文的MAC 地址復(fù)制、IP 地址復(fù)制、TCP 端口復(fù)制、序列號(hào)和確認(rèn)號(hào)填充、IP 校驗(yàn)和計(jì)算以及TCP 校驗(yàn)和計(jì)算。最后調(diào)用pcap_sendpacket 完成推送報(bào)文的發(fā)送。嗅探結(jié)果如圖2 所示。
為了實(shí)現(xiàn)網(wǎng)頁(yè)推送器成功推送至用戶(hù)瀏覽器,不僅要滿(mǎn)足TCP 數(shù)據(jù)結(jié)構(gòu),還必須滿(mǎn)足TCP 通信的數(shù)據(jù)傳輸要求,且響應(yīng)時(shí)間必須先于惡意網(wǎng)站響應(yīng)時(shí)間。因此本系統(tǒng)在設(shè)計(jì)時(shí)采用了如下一些加速措施。一是提前填充確定的數(shù)據(jù)至推送報(bào)文:如以太網(wǎng)頭部類(lèi)型、IP 頭部、TCP 頭部等,并預(yù)先格式化好HTTP應(yīng)答信息。二是提前讀取推送文件:將用戶(hù)選擇的推送頁(yè)面文件提前讀取后存放在推送報(bào)文中,減少推送時(shí)間。三是將計(jì)算TCP 校驗(yàn)和所需的TCP 報(bào)文長(zhǎng)度(TCP 頭部+TCP 數(shù)據(jù)總長(zhǎng)度+偽IP 頭部)預(yù)先計(jì)算好后放于PUSH_INFO 結(jié)構(gòu)體。
圖2 數(shù)據(jù)包的簡(jiǎn)單信息
本文的主要研究?jī)?nèi)容是利用WinPcap 開(kāi)發(fā)網(wǎng)絡(luò)嗅探器和推送器實(shí)現(xiàn)惡意網(wǎng)站的告警,具體設(shè)計(jì)中通過(guò)捕捉用戶(hù)發(fā)出的IP數(shù)據(jù)包能將捕捉到的數(shù)據(jù)包中的目標(biāo)地址取出與惡意網(wǎng)站列表中的地址進(jìn)行比對(duì),如發(fā)現(xiàn)目標(biāo)地址與列表中的地址相同,即調(diào)用告警頁(yè)面推送程序;也可以人工對(duì)惡意網(wǎng)站列表進(jìn)行手動(dòng)管理。本系統(tǒng)可以作為基礎(chǔ)的惡意網(wǎng)站過(guò)濾系統(tǒng)維護(hù)普通計(jì)算機(jī)用戶(hù)的網(wǎng)絡(luò)安全,也可以用于學(xué)校機(jī)房、校園網(wǎng)等應(yīng)用場(chǎng)合,具有廣泛的應(yīng)用前景。在使用中,本系統(tǒng)不免存在一些不足之處,需要在下一步的完善中不斷進(jìn)步,例如:
4.1 本系統(tǒng)沒(méi)有對(duì)推送報(bào)文進(jìn)行TCP 分包傳輸處理,因此對(duì)推送文件的大小作了不大于1400 字節(jié)的限制,讓其包含在1個(gè)TCP 報(bào)文中。
4.2 本論文中的嗅探器只適用于基于廣播包的網(wǎng)絡(luò),不能夠?qū)ψ泳W(wǎng)內(nèi)其他的機(jī)器進(jìn)行監(jiān)聽(tīng),若想要對(duì)子網(wǎng)進(jìn)行監(jiān)聽(tīng),必須處于與此交換機(jī)同級(jí)的包交換節(jié)點(diǎn)中。
4.3 系統(tǒng)未實(shí)現(xiàn)一個(gè)獨(dú)立的網(wǎng)頁(yè)推送器。在未來(lái),可以嘗試使用過(guò)命令行參數(shù)傳遞、進(jìn)程間共享內(nèi)存通信等方式獨(dú)立設(shè)計(jì)網(wǎng)頁(yè)推送器。