徐國(guó)天
(中國(guó)刑警學(xué)院 遼寧 沈陽(yáng) 110035)
基于DNS協(xié)議和ICMP重定向的數(shù)據(jù)監(jiān)聽(tīng)方法研究
徐國(guó)天
(中國(guó)刑警學(xué)院 遼寧 沈陽(yáng) 110035)
對(duì)基于DNS協(xié)議和ICMP重定向的數(shù)據(jù)監(jiān)聽(tīng)方法進(jìn)行了詳細(xì)的論述,對(duì)監(jiān)聽(tīng)的三個(gè)主要環(huán)節(jié):ICMP重定向、截獲并轉(zhuǎn)發(fā)DNS數(shù)據(jù)報(bào)、監(jiān)聽(tīng)通信數(shù)據(jù)并提取敏感信息進(jìn)行了詳細(xì)的研究,深入分析了監(jiān)聽(tīng)各個(gè)環(huán)節(jié)截獲數(shù)據(jù)報(bào)的基本格式以及轉(zhuǎn)發(fā)過(guò)程中對(duì)報(bào)文的修改,得出利用DNS協(xié)議和ICMP重定向技術(shù)可對(duì)局域網(wǎng)內(nèi)的特定主機(jī)實(shí)施數(shù)據(jù)監(jiān)聽(tīng)的結(jié)論。
DNSICMP重定向 監(jiān)聽(tīng)
數(shù)據(jù)監(jiān)聽(tīng)是指捕獲、分析網(wǎng)絡(luò)中其他主機(jī)傳輸?shù)臄?shù)據(jù)包,從中提取出敏感信息。在交換式網(wǎng)絡(luò)內(nèi),通常使用ARP欺騙實(shí)施數(shù)據(jù)監(jiān)聽(tīng)。但隨著360防火墻、ARP靜態(tài)綁定、交換機(jī)端口綁定等措施的采用,這種方法受到有效限制。近年來(lái),基于ICMP重定向的數(shù)據(jù)監(jiān)聽(tīng)方法成為研究的熱點(diǎn),這種方法不受ARP欺騙防護(hù)措施的限制,可在交換式網(wǎng)絡(luò)內(nèi)實(shí)施數(shù)據(jù)監(jiān)聽(tīng)。
攻擊者通過(guò)發(fā)送ICMP重定向報(bào)文可以在受害者主機(jī)路由表中添加一條到達(dá)特定主機(jī)的路由信息,使得受害者發(fā)往特定主機(jī)的數(shù)據(jù)包被發(fā)往攻擊者主機(jī),進(jìn)而攻擊者可以從中提取出敏感信息,如聊天記錄、賬戶(hù)數(shù)據(jù)。下圖為在受害者主機(jī)上查看到的路由信息,第一條為正常的默認(rèn)路由,它的優(yōu)先級(jí)最低,當(dāng)其他路由信息都不匹配時(shí),主機(jī)會(huì)使用這條路由將數(shù)據(jù)包轉(zhuǎn)發(fā)給網(wǎng)關(guān)(192.168.111.4)。第二條是攻擊者添加的到達(dá)10.1.1.1這臺(tái)特定主機(jī)的路由信息,它的優(yōu)先級(jí)高于默認(rèn)路由。受害者發(fā)往10.1.1.1的數(shù)據(jù)將發(fā)送給192.168.111.1,即攻擊者主機(jī),攻擊者從報(bào)文中提取出敏感信息之后,再將它轉(zhuǎn)發(fā)給網(wǎng)關(guān)。這樣一來(lái),在受害者沒(méi)有察覺(jué)的情況下,攻擊者成為了通信的“中間人”。
圖1 特定主機(jī)路由
但這種方法需要預(yù)先通過(guò)ICMP重定向報(bào)文將特定主機(jī)路由信息添加到受害者主機(jī)路由表中,在無(wú)法預(yù)知特定主機(jī)IP地址的情況下,這種方法不能應(yīng)用。為了解決這個(gè)問(wèn)題,本文設(shè)計(jì)了基于DNS協(xié)議和ICMP重定向的數(shù)據(jù)監(jiān)聽(tīng)方法。
ICMP重定向是指在特定情況下,當(dāng)路由器檢測(cè)到一臺(tái)主機(jī)使用非優(yōu)化路由時(shí),會(huì)向該主機(jī)發(fā)送一個(gè)ICMP重定向報(bào)文,要求主機(jī)改變路由,同時(shí)路由器會(huì)把初始數(shù)據(jù)報(bào)向目的地轉(zhuǎn)發(fā)。下面以圖2為例說(shuō)明ICMP重定向過(guò)程。
圖2 ICMP重定向
圖2的網(wǎng)絡(luò)地址是192.168.8.0,子網(wǎng)掩碼是255. 255.255.0,R1和R2路由器均可與因特網(wǎng)連通,正常情況下網(wǎng)絡(luò)內(nèi)所有主機(jī)的默認(rèn)網(wǎng)關(guān)均指向R1路由器的內(nèi)網(wǎng)接口,即192.168.8.254。網(wǎng)絡(luò)內(nèi)部主機(jī)發(fā)往因特網(wǎng)的數(shù)據(jù)包都要經(jīng)過(guò)R1路由器中轉(zhuǎn)。假設(shè)R1路由器的因特網(wǎng)鏈路突然異常中斷,這時(shí)R1接收到主機(jī)1發(fā)往因特網(wǎng)的IP數(shù)據(jù)報(bào),R1發(fā)現(xiàn)自己的鏈路出現(xiàn)異常不能轉(zhuǎn)發(fā)這個(gè)IP數(shù)據(jù)報(bào),并且它知道R2路由器可以轉(zhuǎn)發(fā)這個(gè)IP數(shù)據(jù)報(bào),于是它向主機(jī)1發(fā)出一個(gè)ICMP重定向報(bào)文,要求主機(jī)1將默認(rèn)網(wǎng)關(guān)更改為R2路由器,同時(shí)將這個(gè)IP數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)給R2路由器,由R2路由器完成這個(gè)IP數(shù)據(jù)報(bào)的轉(zhuǎn)發(fā)。主機(jī)1接收到ICMP重定向報(bào)文,發(fā)現(xiàn)這是默認(rèn)網(wǎng)關(guān)R1路由器發(fā)給自己的,于是它信任這個(gè)ICMP重定向報(bào)文攜帶的數(shù)據(jù),將自己的默認(rèn)網(wǎng)關(guān)修改為R2路由器,主機(jī)1發(fā)往因特網(wǎng)的后續(xù)IP數(shù)據(jù)報(bào)就直接提交給R2路由器,由它來(lái)完成轉(zhuǎn)發(fā)任務(wù)。
如果R1路由器的因特網(wǎng)鏈路得到了恢復(fù),這個(gè)信息會(huì)通過(guò)動(dòng)態(tài)路由協(xié)議(如RIP、OSPF)通知給R2路由器,R2更新自己的路由表之后發(fā)現(xiàn)到達(dá)因特網(wǎng)最優(yōu)的路徑是通過(guò)R1路由器,但網(wǎng)絡(luò)內(nèi)部主機(jī)并不了解這一信息,它們的默認(rèn)網(wǎng)關(guān)仍然指向了R2路由器。于是R2在接收到主機(jī)1發(fā)往因特網(wǎng)的IP數(shù)據(jù)報(bào)時(shí),會(huì)將這個(gè)IP數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)給R1路由器,由R1完成這個(gè)IP數(shù)據(jù)報(bào)的轉(zhuǎn)發(fā),之后R2向主機(jī)1發(fā)送一個(gè)ICMP重定向報(bào)文,通知主機(jī)1將默認(rèn)網(wǎng)關(guān)更改為R1路由器。主機(jī)1收到這個(gè)ICMP重定向報(bào)文,發(fā)現(xiàn)這是當(dāng)前的默認(rèn)網(wǎng)關(guān)R2路由器發(fā)給自己的,于是它信任這個(gè)ICMP重定向報(bào)文攜帶的數(shù)據(jù),將自己的默認(rèn)網(wǎng)關(guān)修改為R1路由器,主機(jī)1發(fā)往因特網(wǎng)的后續(xù)IP數(shù)據(jù)報(bào)就直接提交給R1路由器,由它來(lái)完成轉(zhuǎn)發(fā)任務(wù)。通過(guò)上面的分析,我們可以發(fā)現(xiàn)路由器是通過(guò)動(dòng)態(tài)路由協(xié)議(如RIP、OSPF)來(lái)識(shí)別網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)變化的,而主機(jī)是通過(guò)ICMP重定向報(bào)文來(lái)識(shí)別這種變化的,因此ICMP重定向報(bào)文在網(wǎng)絡(luò)通信中發(fā)揮了重要的作用。
主機(jī)在進(jìn)行網(wǎng)絡(luò)通信時(shí)(如瀏覽主頁(yè)、收發(fā)郵件),首先向DNS服務(wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文,請(qǐng)求將目標(biāo)主機(jī)的域名解析為IP地址,在DNS服務(wù)器返回的應(yīng)答報(bào)文中包含了目標(biāo)主機(jī)的多個(gè)IP地址,之后主機(jī)會(huì)選擇一個(gè)IP地址與目標(biāo)主機(jī)通信。
基于DNS協(xié)議和ICMP重定向的數(shù)據(jù)監(jiān)聽(tīng)流程如圖3所示,整個(gè)攻擊流程可以分為三個(gè)環(huán)節(jié):(1)對(duì)客戶(hù)機(jī)進(jìn)行ICMP重定向,在客戶(hù)機(jī)路由表中添加一條到達(dá)DNS服務(wù)器的主機(jī)路由,其中下一跳路由器為黑客主機(jī);(2)黑客主機(jī)截獲并轉(zhuǎn)發(fā)DNS數(shù)據(jù)報(bào),根據(jù)DNS應(yīng)答數(shù)據(jù)報(bào)中的IP地址對(duì)客戶(hù)主機(jī)實(shí)施多次ICMP重定向攻擊,將到達(dá)這些IP的下一跳路由器均指向黑客主機(jī);(3)黑客主機(jī)截獲、轉(zhuǎn)發(fā)客戶(hù)機(jī)收發(fā)的IP數(shù)據(jù)報(bào),從中提取出敏感信息(如賬戶(hù)、密碼)。下面具體介紹重點(diǎn)環(huán)節(jié)。
圖3 ICMP重定向攻擊步驟
2.1 通過(guò)ICMP重定向在受害者主機(jī)中添加到達(dá)DNS服務(wù)器的路由信息
構(gòu)造一個(gè)ICMP重定向報(bào)文發(fā)給受害者主機(jī),在受害者主機(jī)路由表中添加一條到達(dá)DNS服務(wù)器的路由信息,其中下一跳路由器為黑客主機(jī),這樣一來(lái),受害者發(fā)出的DNS請(qǐng)求報(bào)文將被提交給黑客主機(jī)。ICMP重定向報(bào)文如圖4所示,這個(gè)數(shù)據(jù)包共70字節(jié),由14字節(jié)的鏈路層數(shù)據(jù)、20字節(jié)的IP首部、8字節(jié)的ICMP首部、20字節(jié)的偽造IP首部和8字節(jié)的附加數(shù)據(jù)組成。
圖4 ICMP重定向報(bào)文
在鏈路層數(shù)據(jù)中,目的MAC地址是受害者主機(jī)MAC地址,源MAC地址是攻擊者主機(jī)MAC地址。此處源MAC地址不偽造成網(wǎng)關(guān)的MAC地址是為了不破壞交換機(jī)的MAC地址表。
因?yàn)榫W(wǎng)絡(luò)內(nèi)的主機(jī)只信任網(wǎng)關(guān)發(fā)出的ICMP重定向報(bào)文,攻擊者需要偽造網(wǎng)關(guān)向受害者發(fā)送這個(gè)ICMP重定向報(bào)文,因此在IP首部中、源IP地址設(shè)置網(wǎng)關(guān)的IP地址,這樣一來(lái),受害者會(huì)誤認(rèn)為這個(gè)ICMP重定向報(bào)文來(lái)自默認(rèn)網(wǎng)關(guān),進(jìn)而信任這個(gè)報(bào)文攜帶的重定向信息。目的IP地址設(shè)置為受害者主機(jī)的IP地址。length字段值為56。對(duì)IP首部20字節(jié)計(jì)算校驗(yàn)和,添入check字段。
構(gòu)造8字節(jié)ICMP首部,第1字節(jié)是ICMP類(lèi)型字段,5代表這是一個(gè)ICMP重定向報(bào)文。第2字節(jié)是代碼字段,1代表這是一個(gè)重定向主機(jī)數(shù)據(jù)報(bào)。第3、4字節(jié)是校驗(yàn)和字段,校驗(yàn)范圍包括ICMP首部開(kāi)始的36個(gè)字節(jié)數(shù)據(jù)。第5-8字節(jié)是新的網(wǎng)關(guān)地址,這里填為攻擊者主機(jī)的IP地址。受害者會(huì)將這個(gè)IP地址作為新的默認(rèn)網(wǎng)關(guān)。
構(gòu)造20字節(jié)假I(mǎi)P首部,其中源IP地址設(shè)置為受害者主機(jī)IP,目的IP地址為DNS服務(wù)器IP。其后是8字節(jié)附加數(shù)據(jù),這8字節(jié)數(shù)據(jù)按照ICMP首部格式構(gòu)造。這樣一來(lái),受害者會(huì)誤認(rèn)為這28字節(jié)數(shù)據(jù)來(lái)自自己發(fā)給DNS服務(wù)器的某個(gè)ICMP數(shù)據(jù)包,進(jìn)而在自己的路由表中添加一條到DNS服務(wù)器的路由信息,其中下一條地址設(shè)置為黑客主機(jī)IP地址。
2.2 截獲并轉(zhuǎn)發(fā)DNS數(shù)據(jù)報(bào)
下面以受害者瀏覽www.shou.com主頁(yè)為例進(jìn)行說(shuō)明。由于攻擊者已經(jīng)預(yù)先在受害者主機(jī)路由表中添加了一跳到DNS服務(wù)器的路由信息,因此受害者主機(jī)發(fā)給DNS服務(wù)器的請(qǐng)求報(bào)文被提交給黑客主機(jī),黑客重新封裝該報(bào)文之后將它轉(zhuǎn)發(fā)出去。轉(zhuǎn)發(fā)出去的數(shù)據(jù)包如圖5所示。
圖5 轉(zhuǎn)發(fā)的DNS請(qǐng)求報(bào)文
報(bào)文包括14字節(jié)鏈路層數(shù)據(jù)、20字節(jié)IP數(shù)據(jù)、8字節(jié)UDP數(shù)據(jù)、12字節(jié)DNS首部和可變長(zhǎng)度的DNS數(shù)據(jù)。
在鏈路層數(shù)據(jù)中,目的MAC地址修改為網(wǎng)關(guān)的MAC地址,源MAC地址改為黑客主機(jī)的MAC地址,使得該報(bào)文可以通過(guò)交換機(jī)正常傳遞給網(wǎng)關(guān)。
在IP數(shù)據(jù)中,源IP地址由受害者IP改為黑客IP,這樣一來(lái),DNS服務(wù)器會(huì)將應(yīng)答報(bào)文返回給黑客主機(jī),否則DNS應(yīng)答報(bào)文會(huì)直接返給受害者。重新計(jì)算IP首部20字節(jié)校驗(yàn)和,添入check字段。UDP和DNS數(shù)據(jù)不進(jìn)行任何修改。
DNS服務(wù)器收到這個(gè)請(qǐng)求報(bào)文,會(huì)認(rèn)為這是黑客主機(jī)在請(qǐng)求查詢(xún)www.sohu.com域名對(duì)應(yīng)的IP地址,于是將DNS應(yīng)答報(bào)文返回給黑客主機(jī),如圖6所示。在該應(yīng)答報(bào)文的DNS數(shù)據(jù)部分?jǐn)y帶了sohu服務(wù)器的兩個(gè)可用IP地址,即61.135.131.183和61. 135.132.65。黑客根據(jù)這兩個(gè)IP地址構(gòu)造兩個(gè)ICMP重定向報(bào)文發(fā)送給受害者,在受害者主機(jī)路由表中添加兩條到這兩個(gè)IP地址的主機(jī)路由,下一跳地址均設(shè)置為黑客主機(jī)IP。這樣一來(lái),不管受害者選擇哪個(gè)IP地址與sohu服務(wù)器通信,其收發(fā)的數(shù)據(jù)報(bào)都會(huì)經(jīng)過(guò)黑客主機(jī)中轉(zhuǎn)。
接下來(lái),黑客重新封裝這個(gè)DNS應(yīng)答報(bào)文發(fā)送給受害者。目的MAC地址修改為受害者主機(jī)MAC、源MAC地址修改為黑客主機(jī)MAC、目的IP地址修改為受害者IP、重新計(jì)算IP首部20字節(jié)校驗(yàn)和、添入check字段。
圖6 DNS應(yīng)答報(bào)文
2.3 監(jiān)聽(tīng)通信數(shù)據(jù)、提取敏感信息
受害者接收到DNS應(yīng)答報(bào)文后會(huì)從中選擇一個(gè)IP地址與目標(biāo)主機(jī)通信,由于黑客已經(jīng)預(yù)先在受害者主機(jī)路由表中添加了達(dá)到目標(biāo)主機(jī)的特定路由,并將下一跳路由器指定為自己的IP地址。這樣一來(lái),受害者發(fā)給目標(biāo)主機(jī)的通信數(shù)據(jù)都被提交給黑客主機(jī),黑客可以從中提取出賬戶(hù)、密碼等敏感信息。
用戶(hù)在登錄自己的郵箱、論壇、微博、網(wǎng)銀時(shí)都需要在網(wǎng)頁(yè)內(nèi)輸入賬戶(hù)和密碼,輸入的敏感信息會(huì)被封裝在一個(gè)特定的報(bào)文內(nèi)發(fā)送出去。截獲這個(gè)數(shù)據(jù)報(bào)并從中提取出敏感信息是黑客最為關(guān)心的一件事情。圖7給出的是黑客主機(jī)截獲的包含受害者賬戶(hù)、密碼的登錄數(shù)據(jù)報(bào)。這類(lèi)報(bào)文包括14字節(jié)鏈路層數(shù)據(jù)、20字節(jié)IP數(shù)據(jù)、20字節(jié)TCP數(shù)據(jù)和多個(gè)字節(jié)的HTTP數(shù)據(jù)。如何從中轉(zhuǎn)的海量數(shù)據(jù)報(bào)中準(zhǔn)確識(shí)別出包含敏感信息的報(bào)文呢?通過(guò)大量實(shí)驗(yàn)我們發(fā)現(xiàn)敏感信息通常使用POST方法發(fā)送,即數(shù)據(jù)報(bào)的HTTP數(shù)據(jù)部分前四個(gè)字節(jié)是“POST”,根據(jù)這個(gè)條件可以將包含敏感信息的報(bào)文過(guò)濾出來(lái)。
確定了包含敏感信息的通信報(bào)文,接下來(lái)如何從該數(shù)據(jù)報(bào)中提取出敏感信息呢?通過(guò)大量實(shí)驗(yàn)我們發(fā)現(xiàn)敏感信息通常包含在HTTP數(shù)據(jù)的content部分。這部分內(nèi)容包含在HTTP數(shù)據(jù)的尾部,并且content與上一項(xiàng)內(nèi)容之間存在一個(gè)空行,使用sniffer查看,即存在兩個(gè)字節(jié)0x0a和0x0d,分別代表回車(chē)和換行。我們以此為條件就可以提取出content數(shù)據(jù),即從HTTP數(shù)據(jù)的尾部開(kāi)始向前讀取,當(dāng)識(shí)別出0x0a和0x0d時(shí)識(shí)別結(jié)束,將這部分內(nèi)容保存下來(lái),其中就包含了敏感信息。
圖7 截獲的IP數(shù)據(jù)報(bào)
2.4 記錄連接狀態(tài)
黑客可能利用ICMP重定向攻擊對(duì)局域網(wǎng)內(nèi)的多臺(tái)主機(jī)實(shí)施數(shù)據(jù)監(jiān)聽(tīng),并且同一個(gè)受害者也可能與多個(gè)目標(biāo)進(jìn)行通信。黑客主機(jī)需要將截獲的數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)給正確主機(jī)的正確進(jìn)程,為此本文設(shè)計(jì)了如下圖所示的狀態(tài)轉(zhuǎn)換圖。其包含七個(gè)字段,從左至右依次是:源IP地址、目的IP地址、源端口、目的端口、協(xié)議類(lèi)型、序列號(hào)和定時(shí)器。
TCP是面向連接的協(xié)議,在進(jìn)行數(shù)據(jù)通信前,需要通過(guò)三次握手建立連接,在數(shù)據(jù)通信之后,使用四次揮手中斷連接。第一次握手報(bào)文一定是由受害者主機(jī)發(fā)出,黑客截獲這個(gè)報(bào)文之后會(huì)在連接狀態(tài)表中添加一條新記錄,記錄下報(bào)文的源IP地址、目的IP地址、源端口、目的端口、協(xié)議類(lèi)型、初始序列號(hào)、啟動(dòng)定時(shí)器。
當(dāng)黑客接收到一個(gè)數(shù)據(jù)報(bào),會(huì)從報(bào)文中提取出相關(guān)信息到連接狀態(tài)表中進(jìn)行匹配,如果和某條記錄匹配,就使用對(duì)應(yīng)的信息轉(zhuǎn)發(fā)這個(gè)報(bào)文,并重置定時(shí)器。如果所有記錄均不匹配,則丟棄這個(gè)報(bào)文。如果某條記錄的定時(shí)器遞減為0,說(shuō)明這條連接在10秒中內(nèi)沒(méi)有使用,對(duì)應(yīng)的TCP連接已經(jīng)關(guān)閉。每隔一秒程序會(huì)檢查一次連接狀態(tài)表,將所有記錄的定時(shí)器值減1,刪除定時(shí)器為0的記錄。
圖8 連接狀態(tài)表
本文對(duì)基于DNS協(xié)議和ICMP重定向的數(shù)據(jù)監(jiān)聽(tīng)方法進(jìn)行了詳細(xì)的論述,對(duì)三個(gè)主要環(huán)節(jié):ICMP重定向、截獲并轉(zhuǎn)發(fā)DNS數(shù)據(jù)報(bào)、監(jiān)聽(tīng)通信數(shù)據(jù)并提取敏感信息進(jìn)行了詳細(xì)的研究,深入分析了監(jiān)聽(tīng)各個(gè)環(huán)節(jié)截獲數(shù)據(jù)報(bào)的基本格式,以及轉(zhuǎn)發(fā)過(guò)程中對(duì)報(bào)文的修改,并得出利用DNS協(xié)議和ICMP重定向技術(shù)可對(duì)局域網(wǎng)內(nèi)的特定主機(jī)實(shí)施數(shù)據(jù)監(jiān)聽(tīng)的結(jié)論。
1.Behrouz A.Forouzan.數(shù)據(jù)通信與網(wǎng)絡(luò)[M].北京:機(jī)械工業(yè)出版社,2006
2.謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].北京:電子工業(yè)出版社,2008
3.裴有柱.計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)[M].北京:電子工業(yè)出版社,2009
4.Behrouz A.Forouzan.TCP/IP協(xié)議族[M].北京:清華大學(xué)出版社,2003