由于黑客攻擊最近在新聞中屢有報導,我們都知道需要認真地對待計算機安全問題。盡管有許多出版物介紹可以用來確保計算機環境安全的軟件,但很少有出版物說明黑客攻擊實際上是如何執行的。如果您負責確保公司的計算機環境的安全,那么,理解黑客攻擊的工作原理對您就很重要了。在本文中,豎一分析了一些有趣的網絡攻擊并說明了它們是如何工作的。您將看到黑客是多么富于創造性,并將了解自己的軟件中所包含的一些特性是如何被利用來對付您的。本文適合于對網絡有一定理解,但不一定從事網絡領域日常工作的讀者。
黑客基礎知識
不難想象,本文可選擇的攻擊類型范圍很廣。我之所以選取本文所討論的幾種特定攻擊,是因為它們不需要太多關于所涉及協議的知識,但仍然能有效地說明了攻擊是如何執行的、攻擊實際上是多么簡單(一旦您知道了詳細信息)以及攻擊者所需的資源(計算和網絡)是多么有限。盡管不可能在本文中涵蓋關于黑客攻擊的整個主題,但我已盡可能簡化基本原理,而仍然盡量多地提供必要信息,以便您理解所描述的攻擊。
攻擊的種類
稍后您將了解關于所選取的攻擊及其執行方式的詳細信息。但在開始討論之前,您需要理解這個領域的一些術語。通常,攻擊是按其特征分類的。下面描述了這些特征中的兩種:
掃描:掃描或跟蹤足跡(footprinting)是黑客的初始信息收集過程的一部分。在黑客能夠攻擊系統之前,他們需要收集關于該系統的信息,如網絡布局、操作系統類型、系統可用服務、系統用戶等。黑客可以根據所收集的信息推斷出可能的弱點,并選擇對選定目標系統的最佳攻擊方法。
拒絕服務攻擊:通常,黑客瞄準特定系統,闖入系統以便將其用于特定用途。那些系統的主機安全性經常會阻止攻擊者獲得對主機的控制權。但進行拒絕服務攻擊時,攻擊者不必獲得對系統的控制權。其目標只是使系統或網絡過載,這樣它們就無法繼續提供服務了。拒絕服務攻擊可以有不同的目標,包括帶寬消耗(bandwidth consumption)和資源缺乏(resource starvation)。
協議
本文討論了針對網際控制報文協議(ICMP)和傳輸控制協議(TCP)上的攻擊,這兩個協議都屬于網際協議(IP)系列。在深入研究關于這些協議的詳細信息之前,我打算先在適合于這些協議的環境中討論它們。圖 1 顯示了將以太網假定為底層物理網絡技術時的網際協議(Internet Protocol)棧的簡化圖。
圖 1. 網際協議棧
如圖 1 所示,網絡協議通常是分層的。這樣做是有意義的,因為底層協議提供很基本的服務,如網絡電纜上的信號傳輸。此外,較高級別的協議提供更復雜的應用層服務,如 Telnet。每個層都使用下面一層的服務,這使得頂層協議能夠在物理網絡上傳輸消息。讓我們簡要地研究一下圖 1 中顯示的協議。
稱為物理層協議的兩個底層處理網絡電纜上的實際信號傳輸。高一級別的協議 — 網際協議(IP)使用這一服務。
網際協議(IP)提供“主機對主機”包(或數據報)傳遞服務。IP 在底層物理網絡的邊界之間提供最基本的數據報傳遞形式。反過來,IP 層又提供由網際控制報文協議(ICMP)和傳輸控制協議(TCP)使用的服務。
網際控制報文協議(ICMP)是 IP 的組成部分,但它使用某些 IP 服務。ICMP 提供服務,使主機能夠彼此交流控制信息。ICMP 由 IP 和一些更高級別的協議使用,如傳輸控制協議(TCP)。
傳輸控制協議(TCP) 是本文中討論的第三個重要協議。TCP 的功能比 IP 更進一步,并提供兩個重要特性:連接和服務質量。這意味著您可以在兩臺主機之間開一個虛擬通道,通過這個通道,使得所發送的包的順序及其實際傳遞都得到保障。
接下來更高的一級是應用層協議,如 Telnet 和 SMTP。它們都使用由 TCP 提供的服務。例如,當您用 Telnet 連接到主機時,打開一個連接,并且您希望所有輸入這個 Telnet 會話的數據都以正確的順序發送到接收主機。
理解 IP
盡管我將不在本文中介紹任何 IP 級別的攻擊,但我確實需要稍微詳細地討論 IP,因為它是 ICMP 和 TCP 的底層協議。
IP 提供在兩個設置為 IP 節點的網絡節點(稱為源和目的地)間傳輸數據塊的服務。源和目的地節點都用 IP 地址標識。要使一個 IP 網絡中的兩個節點能夠通信,那些 IP 地址必須在整個網絡中是唯一的。IP 地址(IP 版本 4)是一個 32 位數,通常以點分十進制符號
因為 IP 提供的是無連接、不可靠、最高效的(best-effort)數據報傳遞服務,所以 IP 的使用范圍多少受到了限制。但是,它提供兩個基本功能:尋址和分段。地址(在 IP 數據報頭中封裝為源和目的地地址)用來將數據報傳輸到其目的地,這個過程稱為路由。有兩種基本情況:
接收主機和發送主機位于同一子網,這種情況下數據報將被直接從發送方發送到接收方。
接收主機位于不同的子網,這種情況下發送主機將把數據報轉發到網關(連接兩個子網的 IP 主機),然后,如果目的地主機在一個與網關相連的子網中,則網關會嘗試將數據報傳遞到目的地主機。如果目的地主機不在與網關相連的子網中,網關將會把數據報轉發到另一個網關。這個過程將反復進行,直到能夠將數據報傳遞到其目的地主機為止。
如果要傳輸的數據報超過了底層物理層規定的最大包的大小,則 IP 模塊會在發送前將該數據報分割成幾個較小的包(稱為分段),然后在接收中時重新組裝它們。
既然我已經介紹了基礎知識,現在可以討論個別協議了。在以下幾節中,您將找到關于 ICMP 和 TCP 的更詳細的信息以及一些使用這些協議的有趣的攻擊。
使用 ICMP
因為 ICMP 是面向包的,所以它在相互連接的網絡系統中是不可靠的主機對主機數據報服務,提供無保證的傳遞。ICMP 使用 IP 的基本支持,就好象是更高級別的協議。但是,ICMP 是 IP 的組成部分 — 這基本上意味著 ICMP 包將 IP 頭用于傳輸 — 而且 ICMP 必須由每個 IP 模塊實現。通常,ICMP 用來報告主機上數據報處理中的錯誤。ICMP 的部分功能包括:
目的地不可到達消息:如果根據網關的路由表,數據報中指定的要轉發的目的地地址是不可到達的,則網關會向源主機返回 ICMP 的目的地不可到達消息,通知發送主機包傳遞不成功。
超時消息:每個 IP 數據報頭中都包含一個字段 — 稱為“生存時間字段” — 它指出數據報在被丟棄之前還能在因特網上保持多久。數據報在因特網上保持的時間以跳躍點(hop)衡量,其中一個跳躍點表示數據報通向目的地節點路徑上的一個網關。當數據報經過網關轉發時,它就將生存時間字段中的值減一。如果處理數據報的網關測定該數據報 IP 頭中的生存時間字段為 0,則丟棄該數據報并用超時消息通知源主機。
回應請求和回應應答消息:如果主機 A 想知道主機 B 是否是活動的,則主機 A 會向主機 B 發送一條 ICMP 回應請求消息。主機 B 將用 ICMP 回應應答消息來應答,以表明自己是活動的。這條消息就是眾所周知的 ping 包。
以上這些并不是 ICMP 所使用的全部消息類型,但它們能使您大致了解 ICMP 的用途。接下來我將向您介紹兩種 ICMP 攻擊。
目的地不可到達攻擊
類別:拒絕服務攻擊
描述:如上所述,ICMP 目的地不可到達消息向嘗試轉發消息的網關提供了一種工具,用來通知發送方:因為在數據報目的地地址中指定的主機不可到達,所以無法傳遞該消息。
您可能會猜想“目的地不可到達攻擊”會是什么情形。讓我們假設網關 G 連接了兩個網絡:網絡 10.1.0.0 和網絡 10.2.0.0。假設主機 A 地址為 10.1.23.3(因此屬于網絡 10.1.0.0),它想將數據報發送到主機 B,其地址為 10.2.156.34(因此屬于 10.2.0.0)。在傳輸過程中,數據報將被發送到網關 G,而網關 G 又會將它轉發到目的地主機。
如果入侵者獲得了網絡 10.1.0.0 中一臺主機的訪問權,那么,他可以廣播一條“目的地不可到達消息”,聲明網關 G 對于他所在網絡的所有主機是不可到達的。這將使網關 G 和網絡 10.2.0.0 暫時變得不可用,因而不可能從網絡 10.1.0.0 向網絡 10.2.0.0 傳輸任何消息。
這種攻擊背后的動機只是使網絡或服務暫時癱瘓。因為攻擊者不需要功能強大的機器或高速的網絡連接來執行這種攻擊,所以它特別危險。
Smurf 攻擊
類別:拒絕服務攻擊
描述:Smurf 攻擊是拒絕服務攻擊的一種非??膳碌男问?,因為它具有放大效應。Smurf 攻擊利用 ICMP 回應消息。如上所述,主機 A 每次向主機 B 發送回應請求消息時,主機 B 都會返回回應應答消息以表明自己是活動的。名稱“Smurf 攻擊”源自一個名為 smurf 的利用程序,攻擊者用該程序來執行這種攻擊。
在深入研究這種攻擊的詳細信息之前,我應該解釋一下術語電子欺騙(spoofing)。電子欺騙可以解釋成用于偽造的網絡安全術語。它指的是攻擊者有辦法構造包含錯誤數據的網絡數據報。例如,攻擊者可以從主機 A 向主機 B 發送數據報,但在該數據報頭的源地址字段使用主機 C 的 IP 地址。這樣,主機 B 就會認為包是來自主機 C 而不是主機 A。實際上,主機 C“假扮”了主機 A,而主機 B 對此一無所知。
知道了這一點,假設攻擊者構造了一條 ICMP 回應消息,它的頭中包含偽造的任意主機 A 的源地址,如 192.168.2.2。讓我們進一步假設主機 A 位于網絡 192.168.2.0,并且攻擊者將該數據報發送到這個網絡的網絡廣播地址而不是某臺特定主機。通過將該數據報發送到網絡廣播地址,該數據報將被廣播到這個網絡上的每臺主機,而該網絡上的每臺主機都會向假想的發送方(主機 A)返回回應應答消息。假設有 255 個子網,每個子網有 255 臺計算機,則會有超過 65,000 臺計算機向主機 A 發送回應應答消息 — 而這還只是假設攻擊者僅僅廣播了一條欺騙數據報(255 * 255 = 65,025)。通過增加欺騙包廣播的次數或網絡廣播的規模,您將發現這能夠成為非常嚴重的攻擊形式。
Smurf 攻擊的動機與前一種攻擊相同。容易發現,由于這種攻擊的放大效應,它甚至能夠使工業強度的 Web 服務器癱瘓。同樣,攻擊者只需要很少的資源。
傳輸控制協議(TCP)
TCP 協議在包交換計算機網絡中提供面向連接的、可靠的流傳遞服務。這意味著 TCP 模塊保證傳遞無重復、無傳輸錯誤,而且數據以正確順序傳輸。TCP 進一步提供了端口抽取功能,這使得主機可以并行地打開多個 TCP 連接。您可以由此發現 TCP 是由源地址/端口和目的地地址/端口四部分標識的。IP 地址/端口對被稱為套接字。
TCP 與下面的 IP 層和上面的表示層及應用層協議(如 Telnet 或 SMTP)相互操作,如圖 1 所述。
在繼續討論攻擊之前,我將更詳細地討論 TCP 的某些方面,這些知識對于下面討論的攻擊是必需的。尤其是 TCP 包(稱為段)的結構、如何在主機之間建立 TCP 連接和如何關閉連接。
TCP 包的結構
與 IP 數據報類似,TCP 段包含頭部分、可選(選項)部分和數據部分?,F在,讓我們更仔細地研究一下 TCP 頭的某些重要字段:
源端口:分配給啟動連接的主機上虛連接的端口號。
目的地端口:目的地端口號。這也由啟動連接的主機分配,因為只有該主機知道自己“想”連接到哪里。例如,如果您打開到特定主機的 Telnet 連接,則目的地端口將被設置為 23。
序列號和確認號:發送方和接收方使用兩個序列號來確保包沒有丟失、沒有重復以及可以在目的地節點以正確順序重新組裝。
標志:這個字段包含六個控制位:
URG:向接收方表明一接收完數據就進行緊急處理。
ACK:表明確認號字段是有意義的。
PSH:表明必須迅速地將數據傳遞到接收方。
RST:表明要立即復位連接。
SYN:在需要同步序列號的情況下設置。
FIN:表明不會再有來自發送方的數據了(也就是說,連接將要關閉)。
以上是 TCP 頭中的重要字段,下面關于 TCP 連接的建立和關閉的幾節將使您更好地理解這些字段的用途。
建立和關閉 TCP 連接
連接建立:TCP 連接的建立由要建立連接的客戶機和該客戶機聯系的服務器通過三步握手過程執行。要開始連接,您需要有一個在特定端口提供服務的服務器;例如,在端口 23 偵聽的 Telnet 服務。當客戶機想要打開與服務器的連接時,它向服務器發送一個連接請求。這意味著向服務器發送一個設置了 SYN 標志的 TCP 包。服務器以設置了 SYN 和 ACK 標志的包應答。最后,客戶機通過向服務器發送設置了 ACK 標志的 TCP 包進行確認。這樣,客戶機和服務器之間的連接就建立起來了。
連接關閉:在發送完所有數據之后,通信伙伴中的一方想要關閉連接。假設是客戶機要終止連接。它將通過向服務器發送設置了 FIN 標志的 TCP 包來完成該操作。服務器將通過返回設置了 ACK 標志的包進行確認。從此刻起,客戶機將不再向服務器發送任何數據。它將僅以空段確認由服務器發送的數據。當服務器關閉客戶機流時,連接關閉。
講完了預備知識,我將向您介紹兩個 TCP 攻擊的示例。
TCP SYN 掃描
類別:端口掃描
描述:TCP SYN 掃描是端口掃描的變體。端口掃描用來檢查給定主機上的端口是否打開。收集此類信息是跟蹤足跡(先前的攻擊種類中討論過)的一部分,用來獲得主機上的額外信息。知道主機上哪些端口是打開的,對于攻擊者推斷目標主機上可能存在的弱點是重要的第一步。
TCP 端口掃描的最簡單形式是打開一個到主機所有端口的連接。如果成功地打開了到給定端口的連接,則攻擊者知道該服務是可用的。但是,因為操作系統和/或工具可能會記錄此類行為并因此察覺端口掃描,所以,攻擊者通常想在被掃描主機不知道的情況下執行端口掃描。在本節中,我將討論攻擊者所使用的一種端口掃描形式,它不會被目標主機輕易地偵測到。
TCP SYN 掃描也稱為半開掃描。顧名思義,攻擊者只是部分地打開連接。要實現這一點,攻擊者向目標主機發送設置了 SYN 標志的 TCP 包,就象打開常規 TCP 連接時一樣。如果該端口是打開的,則被掃描主機返回設置了 SYN 和 ACK 標志的包進行響應。如果端口未打開,則被掃描主機發送設置了 RST 和 ACK 標志的包。
在被掃描主機返回了 SYN/ACK 包后,連接在服務器端將進入掛起狀態,表明連接正處于建立的過程中,但還沒有完全建立。但是,攻擊者會發送設置了 RST 和 ACK 標志的包回應 SYN/ACK 包。這將觸發被掃描主機再次關閉已部分建立的連接。
這種攻擊的想法是找出特定目標主機上打開的端口,但完成的方式非常狡猾,因此被攻擊的主機或質量低劣的入侵檢測工具不會發現。
SYN 擴散
種類:拒絕服務攻擊
描述:在 Smurf 攻擊流行之前,SYN 擴散攻擊是最具破壞性的拒絕服務攻擊。如上所述,當主機 A 想建立到目的地主機 D 的 TCP 連接時,它首先發送設置了 SYN 標志的 TCP 段。當接收這個段時,主機 D 通過返回設置了 SYN 和 ACK 標志的包確認它。但主機 D 同時將掛起(部分打開的)連接放到掛起連接隊列中。當等待連接的發起方(主機 A)的確認時,連接保持掛起狀態。
主機 D 在特定的超時周期以內等待確認的到來,通常根據中斷的 IP 實現從 75 秒到 25 分鐘不等。因為掛起連接隊列大小有限(大約是十二個左右的連接),所以最終將被填滿。您會發現,攻擊者只要每十秒鐘左右發送幾個 SYN 包就可以禁用特定端口。這種攻擊方法是一種非常嚴重的拒絕服務攻擊方式,因為在接收新的 SYN 包之前,被攻擊的系統將永遠無法清除積壓隊列,因此也就無法響應任何其它請求。
這種攻擊的動機也很明顯。攻擊者想要使特定服務(例如 Web 服務器)癱瘓。您可以再次發現,對攻擊者一方而言,只需少得驚人的資源就可以執行這種攻擊。