IP Spoof技術

IP Spoof技術介紹
 2000年以來,互聯網上黑客新聞不斷,比如今年3月發生在北京的黑客攻擊事件,幾家較爲著名的ISP相繼宣稱被同一站點入侵,證據是在受害主機上通過某種形式得到了屬於被指控站點的IP紀錄,而被指責方則宣稱是有人惡意假冒該方IP,而且這種假冒非常容易實現。 雙方各執一詞,爭論不下,一方認定攻擊來自被指責方,一方則辯解說假冒IP實現極爲簡單,自己是被人暗算。

   那麼,從技術角度講,假冒IP是否可行,實現起來是不是那麼簡單呢?我們今天就談談這個話題,IP spoof (IP 電子欺騙)。


第一部分

   1.什麼是IP spoof?

   IP spoof即IP 電子欺騙,我們可以說是一臺主機設備冒充另外一臺主機的IP地址,與其它設備通信,從而達到某種目的技術。

   2.IP spoof可以實現嗎?

   可以實現,早在1985年,貝爾實驗室的一名工程師Robbert Morris在他的一篇文章A weakness in the 4.2bsd unix TCP/IP software中提出了IP spoof的概念,有興趣的讀者可參見原文: http://www.coast.net/~emv/tubed/archives/Morris_weakness_in_TCPIP.txt

但要注意的是單純憑藉IP spoof技術不可能很好的完成一次完整的攻擊,因爲現有IP spoof技術是屬於一種“盲人”式的入侵手段,下面會解釋“盲人”的概念。

   3.IP spoof的實現原理

   我們知道,IP是網絡層的一個非面向連接的協議, IP數據包的主要內容由源IP地址,目地IP地址,所傳數據構成, IP的任務就是根據每個數據報文的目的地址,路由完成報文從源地址到目的地址的傳送。至於報文在傳送過程中是否丟失或出現差錯, IP不會考慮。對IP來講,源設備與目的設備沒有什麼關係,它們是相互獨立的。IP包只是根據數據報文中的目的地址發送,因此藉助高層協議的應用程序來僞造IP地址是比較容易實現的。 與此同時,TCP作爲保障兩臺通訊設備之間數據有保證的順序傳輸的協議,是面向連接的,它需要連接雙方?quot;同意"才能進行通訊。TCP傳輸雙方傳送的每一個字節都伴隨着一個序列號(SEQ),它期待對方在接收到後產生一個應答(ACK), 應答一方面通知對方數據成功收到,另一方面告知對方希望接收的下一個字節。同時,任何兩臺設備之間欲建立TCP連接都需要一個兩方確認的起始過程,稱三次握手,可分解如下面來表示:

   第一步:請求方向服務方發送SYN,表示想發起一次TCP連接。我們假定這次的序列號是某個數值X
Trust ->Target
SYN
SEQ:X

   第二步:服務方產生SYN,ACK響應,並向請求方發送ACK, ACK的值爲X+1,表示數據成功接收到,且告知下一次希望接收到字節的SEQ是X+1。同時, 服務方向請求方發送自己的SEQ, 我們假定它的序列號是某個數值Y。
Target -> Trust
SYN,ACK
SEQ:Y
ACK:X+1

   第三步: 請求方向服務方發送ACK,表示接收到服務方的迴應。這次它的SEQ值爲X+1,同時它的ACK值爲Y+1,原理同上。
Trust ->Target
ACK
SEQ:X+1
ACK:Y+1

   完成這一步以後, 請求方與服務方之間的連接開放,數據可以進行傳輸了。


第二部分
   上面是標準TCP連接建立的過程,我們來看IP Spoof狀態下的三次握手會是什麼一種情況。

   第一步、Hack假冒Trust主機IP向服務方Target發送SYN,告訴Target 來自他所信任的Trust主機想發起一次TCP連接,序列號爲數值X,這一步實現比較簡單, Hack將IP包的源地址僞造爲Trust主機IP地址即可。
Hack ->Target
SYN
SEQ:X

   要注意的是,在攻擊的整個過程中,必須使Trust主機與網絡的正常連接中斷。因爲SYN請求中IP包源地址是Trust主機的,當Target收到SYN請求時,將根據IP包中源地址反饋ACK,SYN給Trust主機, 但事實上Trust並未向Target發送SYN請求, 所以Trust收到後會認爲這是一次錯誤的連接,從而向Target回送RST,中斷連接。這可不是我們所企求的。爲了解決這個問題,在整個攻擊過程中我們需要設法停止Trust主機的網絡功能,這一實現很簡單,用現在威力很強大的tfn2k之類的分佈式拒絕服務軟件攻擊Trust主機,使之拒絕服務即可,(可參考作者另一篇文章《分佈式拒絕服務軟件》見www.chinabyte.com的網絡學院部分)這裏就不介紹了。

   第二步、服務方Target產生SYN,ACK響應,並向請求方Trust主機(注意:是Trust,不是Hack,因爲Target收到的IP包的源地址是Trust)發送ACK, ACK的值爲X+1,表示數據成功接收到,且告知下一次希望接收到字節的SEQ是X+1。同時,Target向請求方Trust發送自己的SEQ,注意,這個數值對Hack是不可見的!!
Target -> Trust
SYN,ACK
SEQ:?
ACK:X+1

   第三步、Hack再次向服務方發送ACK,表示接收到服務方的迴應——雖然實際上他並沒有收到服務方Targe的SYN,ACK響應。這次它的SEQ值爲X+1,同時它必須猜出ACK的值!!並加一後回饋給Target。
Hack ->Target
ACK
SEQ:X+1
ACK:?+1

   如果Hack能成功的猜出Target 的ACK值,那麼TCP的三次握手就宣告成功, Target會將Hack看作Trust主機,IP spoof最關鍵的技術部分得到解決! 但有一點要清楚, Hack 主機這種連接是“盲人”式的,Hack永遠不會收到來自Target的包,因爲這些反饋包都被路由到Trust主機那裏了(除非黑客能將相關骨幹點的路由表內容做改動,記住:IP是獨立的,它只是根據源地址,目的地址在互聯網上路由傳送。而在Hack向Target發送的三次握手IP包中源地址是宣稱爲Trust主機的) 我們可以不恰當的舉個簡單例子, Hack在Target上執行ls -l /,在Hack的屏幕上不會看到任何反饋,儘管事實上Target列出了根目錄下的所有內容——Target將ls -l /結果送到了Trust主機。

   由上我們可以看出, IP spoof成功的關鍵在於猜出在第二步服務方所迴應的SEQ值,有了這個值,TCP連接方可成功的建立。在早期,這是個令人頭疼的問題,但隨着IP spoof攻擊手段的研究日益深入,一些專用的算法,技術得到應用,併產生了一些專用的c程序,如SEQ-scan,yaas等。當黑客得到這些c程序時, 一切問題都將迎刃而解。


第三部分



   在現實中投入應用的IP spoof一般被用於有信任關係的服務器之間的欺騙。假設網上有Target, Trust, Hack三臺主機, Target爲我們打算愚弄的主機, Trust和Target有基於IP地址的信任關係,也就是說擁有Trust主機IP地址的設備上的用戶不需要賬號及密碼即可進入Target。(使用window操作系統比較習慣的讀者可以把這種信任理解爲局域網環境下的PC間無需密碼的硬盤共享)既然如此,那麼我們就可以在Hack上做手腳假冒Trust主機IP地址從而騙取Target的信任。 這種信任在unix中體現爲r服務,比如一個大型網站的管理員除了自己的一臺IP爲11.22.33.44工作站外還擁有幾打的sun 服務器,他厭倦了一次次在各個服務器上登錄時等待並輸入username,passwd,那麼他可以在每臺服務器的根目錄下生成.rhosts文件,內容爲11.22.33.44 +,這表示如果11.22.33.44這個IP有要求,服務器都無條件的提供可信的r服務。舉例來講,在11.22.33.44上執行rsh -l root server1.Yiming.com csh -i,則該管理員即直接進入server1.Yiming.com,不需要任何賬號密碼。除了這種爲了省事的偷懶用途, r服務在目前的網絡最多的被用來遠程備份,遠程磁帶設備和需備份文件必須有信任關係。

   好了,在上例中如果我們能假冒11.22.33.44這個IP,那麼將會是什麼樣子?每一臺信任它的服務器都會被控制!這纔是管理員需要引起的注意的。

   由上我們看到,因爲TCP/IP本身的漏洞,IP spoof是有實現條件的,但在目前的互聯網中,假冒它人IP,然後利用這個IP去攻擊和這個IP無信任的關係的主機從理論上依然很難行的通。

發佈了29 篇原創文章 · 獲贊 10 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章