天天看點

常見網絡攻擊手段及原理分析

TCP SYN拒絕服務攻擊

我們知道,一般情況下,一個TCP連接配接的建立需要經過三次握手的過程,即:

1、 建立發起者向目标計算機發送一個TCP SYN封包;

2、目标計算機收到這個SYN封包後,在記憶體中建立TCP連接配接控制塊(TCB),然後向發起者回送一個TCP ACK封包,等待發起者的回應

3、發起者收到TCP ACK封包後,再回應一個ACK封包,這樣TCP連接配接就建立成功了

利用這個過程,一些惡意的攻擊者可以進行所謂的TCP SYN拒絕服務攻擊:

  1. 攻擊者向目标計算機發送一個TCP SYN封包
  2. 目标計算機收到這個封包後,建立TCP連接配接控制結構(TCB),并回應一個ACK,等待發起者的回應
  3. 而發起者則不向目标計算機回應ACK封包,這樣導緻目标計算機一直處于等待狀态。

可以看出,目标計算機如果接收到大量的TCP SYN封包,而沒有收到發起者的第三次ACK回應,會一直等待,處于這樣尴尬狀态的半連接配接。如果很多的話,則會把目标計算機的資源(TCB控制結構,TCB,一般情況下是有限的)耗盡,而不能響應正常的TCP連接配接請求。

ICMP洪水

正常情況下,為了對網絡進行診斷,一些診斷程式,比如PING等,會發出ICMP響應請求封包(ICMP ECHO),接收計算機接收到ICMP

ECHO後,會回應一個ICMP ECHO Reply封包。而這個過程是需要CPU處理的,有的情況下還可能消耗掉大量的資源,比如處理分片的時候。這樣如果攻擊者向目标計算機發送大量的ICMP ECHO封包(産生ICMP洪水),則目标計算機會忙于處理這些ECHO封包,而無法繼續處理其它的網絡資料封包,這也是一種拒絕服務攻擊(DOS)。

UDP洪水

  原理與ICMP洪水類似,攻擊者通過發送大量的UDP封包給目标計算機,導緻目标計算機忙于處理這些UDP封包而無法繼續處理正常的封包。

端口掃描

根據TCP協定規範,當一台計算機收到一個TCP連接配接建立請求封包(TCP SYN)的時候,做這樣的處理:

  1. 如果請求的TCP端口是開放的,則回應一個TCP ACK封包,并建立TCP連接配接控制結構(TCB);
  2. 如果請求的TCP端口沒有開放,則回應一個TCP RST(TCP頭部中的RST标志設為1)封包,告訴發起計算機,該端口沒有開放。

相應地,如果IP協定棧收到一個UDP封包,做如下處理:

  1. 如果該封包的目标端口開放,則把該UDP封包送上層協定(UDP)處理,不回應任何封包(上層協定根據處理結果而回應的封包例外);
  2. 如果該封包的目标端口沒有開放,則向發起者回應一個ICMP不可達封包,告訴發起者計算機該UDP封包的端口不可達。

利用這個原理,攻擊者計算機便可以通過發送合适的封包,判斷目标計算機哪些TCP或UDP端口是開放的,過程如下:

  1. 發出端口号從0開始依次遞增的TCP SYN或UDP封包(端口号是一個16比特的數字,這樣最大為65535,數量很有限);
  2. 如果收到了針對這個TCP封包的RST封包,或針對這個UDP封包的ICMP不可達封包,則說明這個端口沒有開放;
  3. 相反,如果收到了針對這個TCP SYN封包的ACK封包,或者沒有接收到任何針對該UDP封包的ICMP封包,則說明該TCP端口是開放的,UDP端口可能開放(因為有的實作中可能不回應ICMP不可達封包,即使該UDP端口沒有開放)。

這樣繼續下去,便可以很容易的判斷出目标計算機開放了哪些TCP或UDP端口,然後針對端口的具體數字,進行下一步攻擊,這就是所謂的端口掃描攻擊。

分片IP封包攻擊

我們知道,為了傳送一個大的IP封包,IP協定棧需要根據鍊路接口的MTU對該IP封包進行分片,通過填充适當的IP頭中的分片訓示字段,接收計算機可以很容易的把這些IP分片封包組裝起來。

目标計算機在處理這些分片封包的時候,會把先到的分片封包緩存起來,然後一直等待後續的分片封包,這個過程會消耗掉一部分記憶體,以及一些IP協定棧的資料結構。

如果攻擊者給目标計算機隻發送一片分片封包,而不發送所有的分片封包,這樣攻擊者計算機便會一直等待(直到一個内部計時器到時),如果攻擊者發送了大量的分片封包,就會消耗掉目标計算機的資源,而導緻不能相應正常的IP封包,這也是一種DOS攻擊。

SYN比特和FIN比特同時設定

在TCP封包的報頭中,有幾個标志字段:

  1. SYN:連接配接建立标志,TCP SYN封包就是把這個标志設定為1,來請求建立連接配接;
  2. ACK:回應标志,在一個TCP連接配接中,除了第一個封包(TCP SYN)外,所有封包都設定該字段,作為對上一個封包的相應;
  3. FIN:結束标志,當一台計算機接收到一個設定了FIN标志的TCP封包後,會拆除這個TCP連接配接;
  4. RST:複位标志,當IP協定棧接收到一個目标端口不存在的TCP封包的時候,會回應一個RST标志設定的封包;
  5. PSH:通知協定棧盡快把TCP資料送出給上層程式處理。

正常情況下,SYN标志(連接配接請求标志)和FIN标志(連接配接拆除标志)是不能同時出現在一個TCP封包中的。

而且RFC也沒有規定IP協定棧如何處理這樣的畸形封包,是以,各個作業系統的協定棧在收到這樣的封包後的處理方式也不同,攻擊者就可以利用這個特征,通過發送SYN和FIN同時設定的封包,來判斷作業系統的類型,然後針對該作業系統,進行進一步的攻擊。

沒有設定任何标志的TCP封包攻擊

正常情況下,任何TCP封包都會設定SYN,FIN,ACK,RST,PSH五個标志中的至少一個标志,第一個TCP封包(TCP連接配接請求封包)設定SYN标志,後續封包都設定ACK标志。

有的協定棧基于這樣的假設,沒有針對不設定任何标志的TCP封包的處理過程,是以,這樣的協定棧如果收到了這樣的封包,可能會崩潰。攻擊者利用了這個特點,對目标計算機進行攻擊。

設定了FIN标志卻沒有設定ACK标志的TCP封包攻擊

正常情況下,ACK标志在除了第一個封包(SYN封包)外,所有的封包都設定,包括TCP連接配接拆除封包(FIN标志設定的封包)。但有的攻擊者卻可能向目标計算機發送設定了FIN标志卻沒有設定ACK标志的TCP封包,這樣可能導緻目标計算機崩潰。

死亡之PING

TCP/IP規範要求IP封包的長度在一定範圍内(比如,0-64K),但有的攻擊計算機可能向目标計算機發出大于64K長度的PING封包,導緻目标計算機IP協定棧崩潰。

位址猜測攻擊

跟端口掃描攻擊類似,攻擊者通過發送目标位址變化的大量的ICMP ECHO封包,來判斷目标計算機是否存在。如果收到了對應的ECMP ECHO REPLY封包,則說明目标計算機是存在的,便可以針對該計算機進行下一步的攻擊。

淚滴攻擊

  對于一些大的IP包,需要對其進行分片傳送,這是為了迎合鍊路層的MTU(最大傳輸單元)的要求。比如,一個4500位元組的IP包,在MTU為1500的鍊路上傳輸的時候,就需要分成三個IP包。

  在IP報頭中有一個偏移字段和一個分片标志(MF),如果MF标志設定為1,則表面這個IP包是一個大IP包的片斷,其中偏移字段指出了這個片斷在整個IP包中的位置。 

  例如,對一個4500位元組的IP包進行分片(MTU為1500),則三個片斷中偏移字段的值依次為:0,1500,3000。這樣接收端就可以根據這些資訊成功的組裝該IP包。

  

  如果一個攻擊者打破這種正常情況,把偏移字段設定成不正确的值,即可能出現重合或斷開的情況,就可能導緻目标作業系統崩潰。比如,把上述偏移設定為0,1300,3000。這就是所謂的淚滴攻擊。

帶源路由選項的IP封包

  為了實作一些附加功能,IP協定規範在IP報頭中增加了選項字段,這個字段可以有選擇的攜帶一些資料,以指明中間裝置(路由器)或最終目标計算機對這些IP封包進行額外的處理。

比如,讓一個IP封包明确的經過三台路由器R1,R2,R3,則可以在源路由選項中明确指明這三個路由器的接口位址,這樣不論三台路由器上的路由表如何,這個IP封包就會依次經過R1,R2,R3。而且這些帶源路由選項的IP封包在傳輸的過程中,其源位址不斷改變,目标位址也不斷改變.

是以,通過合适的設定源路由選項,攻擊者便可以僞造一些合法的IP位址,而蒙混進入網絡。

帶記錄路由選項的IP封包

  記錄路由選項也是一個IP選項,攜帶了該選項的IP封包,每經過一台路由器,該路由器便把自己的接口位址填在選項字段裡面。這樣這些封包在到達目的地的時候,選項資料裡面便記錄了該封包經過的整個路徑。

  通過這樣的封包可以很容易的判斷該封包經過的路徑,進而使攻擊者可以很容易的尋找其中的攻擊弱點。

未知協定字段的IP封包

  在IP封包頭中,有一個協定字段,這個字段指明了該IP封包承載了何種協定,比如,如果該字段值為1,則表明該IP封包承載了ICMP封包,如果為6,則是TCP,等等。目前情況下,已經配置設定的該字段的值都是小于100的.

  

是以,一個帶大于100的協定字段的IP封包,可能就是不合法的,這樣的封包可能對一些計算機作業系統的協定棧進行破壞。

IP位址欺騙

  一般情況下,路由器在轉發封包的時候,隻根據封包的目的位址查路由表,而不管封包的源位址是什麼,是以,這樣就可能面臨一種危險:如果一個攻擊者向一台目标計算機發出一個封包,而把封包的源位址填寫為第三方的一個IP位址,這樣這個封包在到達目标計算機後,目标計算機便可能向毫無知覺的第三方計算機回應。這便是所謂的IP位址欺騙攻擊。

  比較著名的SQL Server蠕蟲病毒,就是采用了這種原理。該病毒(可以了解為一個攻擊者)向一台運作SQL Server解析服務的伺服器發送一個解析服務的UDP封包,該封包的源位址填寫為另外一台運作SQL Server解析程式(SQL Server 2000以後版本)的伺服器,這樣由于SQL Server 解析服務的一個漏洞,就可能使得該UDP封包在這兩台伺服器之間往複,最終導緻伺服器或網絡癱瘓。

WinNuke攻擊

  NetBIOS作為一種基本的網絡資源通路接口,廣泛的應用于檔案共享,列印共享,程序間通信(IPC),以及不同作業系統之間的資料交換。一般情況下,NetBIOS是運作在LLC2鍊路協定之上的,是一種基于多點傳播的網絡通路接口。為了在TCP/IP協定棧上實作NetBIOS,RFC規定了一系列互動标準,以及幾個常用的TCP/UDP端口:

139:NetBIOS會話服務的TCP端口;

137:NetBIOS名字服務的UDP端口;

136:NetBIOS資料報服務的UDP端口。

  WINDOWS作業系統的早期版本(WIN95/98/NT)的網絡服務(檔案共享等)都是建立在NetBIOS之上的,是以,這些作業系統都開放了139端口(最新版本的WINDOWS 2000/XP/2003等,為了相容,也實作了NetBIOS over TCP/IP功能,開放了139端口)。

  WinNuke攻擊就是利用了WINDOWS作業系統的一個漏洞,向這個139端口發送一些攜帶TCP帶外(OOB)資料封包,但這些攻擊封包與正常攜帶OOB資料封包不同的是,其指針字段與資料的實際位置不符,即存在重合,這樣WINDOWS作業系統在處理這些資料的時候,就會崩潰。

Land攻擊

  LAND攻擊利用了TCP連接配接建立的三次握手過程,通過向一個目标計算機發送一個TCP SYN封包(連接配接建立請求封包)而完成對目标計算機的攻擊。

與正常的TCP SYN封包不同的是,LAND攻擊封包的源IP位址和目的IP位址是相同的,都是目标計算機的IP位址。這樣目标計算機接收到這個SYN封包後,就會向該封包的源位址發送一個ACK封包,并建立一個TCP連接配接控制結構(TCB),而該封包的源位址就是自己.

是以,這個ACK封包就發給了自己。這樣如果攻擊者發送了足夠多的SYN封包,則目标計算機的TCB可能會耗盡,最終不能正常服務。這也是一種DOS攻擊。

Script/ActiveX攻擊

Script是一種可執行的腳本,它一般由一些腳本語言寫成,比如常見的JAVA SCRIPT,VB SCRIPT等。

這些腳本在執行的時候,需要一個專門的解釋器來翻譯,翻譯成計算機指令後,在本地計算機上運作。這種腳本的好處是,可以通過少量的程式寫作,而完成大量的功能。

  這種SCRIPT的一個重要應用就是嵌入在WEB頁面裡面,執行一些靜态WEB頁面标記語言(HTML)無法完成的功能,比如本地計算,資料庫查詢和修改,以及系統資訊的提取等。這些腳本在帶來友善和強大功能的同時,也為攻擊者提供了友善的攻擊途徑。如果攻擊者寫一些對系統有破壞的SCRIPT,然後嵌入在WEB頁面中,一旦這些頁面被下載下傳到本地,計算機便以目前使用者的權限執行這些腳本,這樣,目前使用者所具有的任何權限,SCRIPT都可以使用,可以想象這些惡意的SCRIPT的破壞程度有多強。這就是所謂的SCRIPT攻擊。

  ActiveX是一種控件對象,它是建立在MICROSOFT的元件對象模型(COM)之上的,而COM則幾乎是Windows作業系統的基礎結構。可以簡單的了解,這些控件對象是由方法和屬性構成的,方法即一些操作,而屬性則是一些特定的資料。這種控件對象可以被應用程式加載,然後通路其中的方法或屬性,以完成一些特定的功能。可以說,COM提供了一種二進制的相容模型(所謂二進制相容,指的是程式子產品與調用的編譯環境,甚至作業系統沒有關系)。但需要注意的是,這種對象控件不能自己執行,因為它沒有自己的程序空間,而隻能由其它程序加載,并調用其中的方法和屬性,這時候,這些控件便在加載程序的程序空間運作,類似與作業系統的可加載子產品,比如DLL庫。

  ActiveX控件可以嵌入在WEB頁面裡面,當浏覽器下載下傳這些頁面到本地後,相應地也下載下傳了嵌入在其中的ActiveX控件,這樣這些控件便可以在本地浏覽器程序空間中運作(ActiveX空間沒有自己的程序空間,隻能由其它程序加載并調用),是以,目前使用者的權限有多大,ActiveX的破壞性便有多大。如果一個惡意的攻擊者編寫一個含有惡意代碼的ActiveX控件,然後嵌入在WEB頁面中,被一個浏覽使用者下載下傳後執行,其破壞作用是非常大的。這便是所謂的ActiveX攻擊。

Smurf攻擊

  ICMP ECHO請求包用來對網絡進行診斷,當一台計算機接收到這樣一個封包後,會向封包的源位址回應一個ICMP ECHO REPLY。一般情況下,計算機是不檢查該ECHO請求的源位址的,是以,如果一個惡意的攻擊者把ECHO的源位址設定為一個廣播位址,這樣計算機在恢複REPLY的時候,就會以廣播位址為目的位址,這樣本地網絡上所有的計算機都必須處理這些廣播封包。如果攻擊者發送的ECHO 請求封包足夠多,産生的REPLY廣播封包就可能把整個網絡淹沒。這就是所謂的smurf攻擊。

除了把ECHO封包的源位址設定為廣播位址外,攻擊者還可能把源位址設定為一個子網廣播位址,這樣,該子網所在的計算機就可能受影響。

虛拟終端(VTY)耗盡攻擊

  這是一種針對網絡裝置的攻擊,比如路由器,交換機等。這些網絡裝置為了便于遠端管理,一般設定了一些TELNET使用者界面,即使用者可以通過TELNET到該裝置上,對這些裝置進行管理。

  一般情況下,這些裝置的TELNET使用者界面個數是有限制的,比如,5個或10個等。這樣,如果一個攻擊者同時同一台網絡裝置建立了5個或10個TELNET連接配接,這些裝置的遠端管理界面便被占盡,這樣合法使用者如果再對這些裝置進行遠端管理,則會因為TELNET連接配接資源被占用而失敗。

路由協定攻擊

  網絡裝置之間為了交換路由資訊,常常運作一些動态的路由協定,這些路由協定可以完成諸如路由表的建立,路由資訊的分發等功能。常見的路由協定有RIP,OSPF,IS-IS,BGP等。這些路由協定在友善路由資訊管理和傳遞的同時,也存在一些缺陷,如果攻擊者利用了路由協定的這些權限,對網絡進行攻擊,可能造成網絡裝置路由表紊亂(這足可以導緻網絡中斷),網絡裝置資源大量消耗,甚至導緻網絡裝置癱瘓。

  

下面列舉一些常見路由協定的攻擊方式及原理:

1. 針對RIP協定的攻擊

  RIP,即路由資訊協定,是通過周期性(一般情況下為30S)的路由更新封包來維護路由表的,一台運作RIP路由協定的路由器,如果從一個接口上接收到了一個路由更新封包,它就會分析其中包含的路由資訊,并與自己的路由表作出比較,如果該路由器認為這些路由資訊比自己所掌握的要有效,它便把這些路由資訊引入自己的路由表中。

  這樣如果一個攻擊者向一台運作RIP協定的路由器發送了人為構造的帶破壞性的路由更新封包,就很容易的把路由器的路由表搞紊亂,進而導緻網絡中斷。

如果運作RIP路由協定的路由器啟用了路由更新資訊的HMAC驗證,則可從很大程度上避免這種攻擊。

2. 針對OSPF路由協定的攻擊

  OSPF,即開放最短路徑優先,是一種應用廣泛的鍊路狀态路由協定。該路由協定基于鍊路狀态算法,具有收斂速度快,平穩,杜絕環路等優點,十分适合大型的計算機網絡使用。OSPF路由協定通過建立鄰接關系,來交換路由器的本地鍊路資訊,然後形成一個整網的鍊路狀态資料庫,針對該資料庫,路由器就可以很容易的計算出路由表。

  可以看出,如果一個攻擊者冒充一台合法路由器與網絡中的一台路由器建立鄰接關系,并向攻擊路由器輸入大量的鍊路狀态廣播(LSA,組成鍊路狀态資料庫的資料單元),就會引導路由器形成錯誤的網絡拓撲結構,進而導緻整個網絡的路由表紊亂,導緻整個網絡癱瘓。

  目前版本的WINDOWS 作業系統(WIN 2K/XP等)都實作了OSPF路由協定功能,是以一個攻擊者可以很容易的利用這些作業系統自帶的路由功能子產品進行攻擊。

  跟RIP類似,如果OSPF啟用了封包驗證功能(HMAC驗證),則可以從很大程度上避免這種攻擊。

3. 針對IS-IS路由協定的攻擊

  IS-IS路由協定,即中間系統到中間系統,是ISO提出來對ISO的CLNS網絡服務進行路由的一種協定,這種協定也是基于鍊路狀态的,原理與OSPF類似。IS-IS路由協定經過 擴充,可以運作在IP網絡中,對IP封包進行選路。這種路由協定也是通過建立鄰居關系,收集路由器本地鍊路狀态的手段來完成鍊路狀态資料庫同步的。該協定的鄰居關系建立比OSPF簡單,而且也省略了OSPF特有的一些特性,使該協定簡單明了,伸縮性更強。

對該協定的攻擊與OSPF類似,通過一種模拟軟體與運作該協定的路由器建立鄰居關系,然後傳頌給攻擊路由器大量的鍊路狀态資料單元(LSP),可以導緻整個網絡路由器的鍊路狀态資料庫不一緻(因為整個網絡中所有路由器的鍊路狀态資料庫都需要同步到相同的狀态),進而導緻路由表與實際情況不符,緻使網絡中斷。

  與OSPF類似,如果運作該路由協定的路由器啟用了IS-IS協定單元(PDU)HMAC驗證功能,則可以從很大程度上避免這種攻擊。

針對裝置轉發表的攻擊

  為了合理有限的轉發資料,網絡裝置上一般都建立一些寄存器表項,比如MAC位址表,ARP表,路由表,快速轉發表,以及一些基于更多封包頭字段的表格,比如多層交換表,流項目表等。這些表結構都存儲在裝置本地的記憶體中,或者晶片的片上記憶體中,數量有限。如果一個攻擊者通過發送合适的資料報,促使裝置建立大量的此類表格,就會使裝置的存儲結構消耗盡,進而不能正常的轉發資料或崩潰。

  下面針對幾種常見的表項,介紹其攻擊原理:

1. 針對MAC位址表的攻擊

MAC位址表一般存在于以太網交換機上,以太網通過分析接收到的資料幀的目的MAC位址,來查本地的MAC位址表,然後作出合适的轉發決定。

這些MAC位址表一般是通過學習擷取的,交換機在接收到一個資料幀後,有一個學習的過程,該過程是這樣的:

  1. 提取資料幀的源MAC位址和接收到該資料幀的端口号;
  2. 查MAC位址表,看該MAC位址是否存在,以及對應的端口是否符合;
  3. 如果該MAC位址在本地MAC位址表中不存在,則建立一個MAC位址表項;
  4. 如果存在,但對應的出端口跟接收到該資料幀的端口不符,則更新該表;
  5. 如果存在,且端口符合,則進行下一步處理。

分析這個過程可以看出,如果一個攻擊者向一台交換機發送大量源MAC位址不同的資料幀,則該交換機就可能把自己本地的MAC位址表學滿。一旦MAC位址表溢出,則交換機就不能繼續學習正确的MAC表項,結果是可能産生大量的網絡備援資料,甚至可能使交換機崩潰。而構造一些源MAC位址不同的資料幀,是非常容易的事情。

2. 針對ARP表的攻擊

  ARP表是IP位址和MAC位址的映射關系表,任何實作了IP協定棧的裝置,一般情況下都通過該表維護IP位址和MAC位址的對應關系,這是為了避免ARP解析而造成的廣播資料封包對網絡造成沖擊。ARP表的建立一般情況下是通過二個途徑:

1. 主動解析,如果一台計算機想與另外一台不知道MAC位址的計算機通信,則該計算機主動發ARP請求,通過ARP協定建立(前提是這兩台計算機位于同一個IP子網上);

2. 被動請求,如果一台計算機接收到了一台計算機的ARP請求,則首先在本地建立請求計算機的IP位址和MAC位址的對應表。

是以,如果一個攻擊者通過變換不同的IP位址和MAC位址,向同一台裝置,比如三層交換機發送大量的ARP請求,則被攻擊裝置可能會因為ARP緩存溢出而崩潰。

  針對ARP表項,還有一個可能的攻擊就是誤導計算機建立正确的ARP表。根據ARP協定,如果一台計算機接收到了一個ARP請求封包,在滿足下列兩個條件的情況下,該計算機會用ARP請求封包中的源IP位址和源MAC位址更新自己的ARP緩存:

1. 如果發起該ARP請求的IP位址在自己本地的ARP緩存中;

2. 請求的目标IP位址不是自己的。

可以舉一個例子說明這個過程,假設有三台計算機A,B,C,其中B已經正确建立了A和C計算機的ARP表項。假設A是攻擊者,此時,A發出一個ARP請求封包,該請求封包這樣構造:

1. 源IP位址是C的IP位址,源MAC位址是A的MAC位址;

2. 請求的目标IP位址是A的IP位址。

這樣計算機B在收到這個ARP請求封包後(ARP請求是廣播封包,網絡上所有裝置都能收到),發現B的ARP表項已經在自己的緩存中,但MAC位址與收到的請求的源MAC位址不符,于是根據ARP協定,使用ARP請求的源MAC位址(即A的MAC位址)更新自己的ARP表。

這樣B的ARP混存中就存在這樣的錯誤ARP表項:C的IP位址跟A的MAC位址對應。這樣的結果是,B發給C的資料都被計算機A接收到。

3. 針對流項目表的攻擊