延續上節,若惡意程式採用 TCP 或 UDP 網路傳輸協定,亦會自定義一套與 C2 溝通的專屬格式。
在復刻 C2 上,常利用逆向工程與分析封包手法,去拼湊出每個 C2 控制指令,所對應的傳輸格式與內容。
而在傳輸格式中,最廣泛使用就屬 TLV (Type-Length-Value) 。TLV 格式描述資料清楚、易懂且彈性,且解析 TLV 資料時,不像 JSON、XML 格式,需引入外部函式庫,程式相依性較低。
文章目錄
TLV 格式
該格式分為以下 3 個部份:
- Type: 資料類型
- Length: 資料長度
- Value: 資料內容
在 C 語言實做時,可用如下資料結構呈現:
struct TLV { uint8_t type; uint32_t length; char *value; }
實際在傳輸時,資料會以 16 進位編碼呈現,例如:
010401020304
則依序將資料解讀為 Type(01)、Length(04)與 Value(01020304)。
- 資料類型代碼:01,每個代碼代表一種資料類型,其值唯一。
- 資料內容長度:4 個 Bytes (04)
- 資料內容:01020304
你或許會問,如果一次傳輸多種資料類型的內容,要如何處理?
一般會用TLVTLVTLV …等格式,依序疊加多個 TLV 資料而成。例如:
0104010203040204050607080304090A0B0C
資料依據資料類型「01」、「02」與「03」,是由3 份 TLV 資料疊加而成,「010401020304」、「020405060708」與「0304090A0B0C」。
若某個類型的資料已知且為固定長度,實務上會省略長度的資訊,將Type 資訊即接續 Value 的資訊。
舉 IOT Botnet 程式 Mirai 為例,發送UDP Flood 攻擊指令內容,以16進制 TLV 格式編碼,如下:
00110000001E00010A0A0A200107023830
僅傳輸 17 個 Bytes,解讀 C2 控制命令意思是「Bot 請向 IP位址(10.10.10.10/32)的 Port 80 進行 UDP Flooding 滿頻攻擊,攻擊時間持續 30秒」。
將這 17 個 Bytes 依造資料類型,依 Type、Length 與 Value 解讀後可填為以下表格。
Length 欄位 (F)表示為固定長度,其資訊是被省略的。Length 欄位 (D) 表示資訊有提供。
在 Value 欄位,括號內容為值代表的意義。例如 Attack Vector(攻擊向量) 為 00,表示為 UDP Flooding。
Type | Length (F/D) | Value |
---|---|---|
Total Length | 2(F) | 11(17 Bytes) |
Attack Duration | 4(F) | 0000001E (30 秒) |
Attack Vector | 1(F) | 00 (UDP Flooding) |
Target Count | 1(F) | 01 |
Target IP | 4(F) | 0A0A0A0A (10.10.10.10) |
Target Netmask | 1(F) | 20(/32) |
Option amounts | 1(F) | 01(1 Option) |
Option Type | 1(F) | 07 (Attack Dest Port) |
Option Length | 1(F) | 02 (5) |
Option Value | 2(D) | 3830 (80) |
總而言之,以 Mirai 為例,預先定義 TLV 傳輸格式與內容,後續 C2 僅需花費 17個 Bytes,即能傳送控制指令給 Bot。
故在復刻 C2 上,利用逆向工程與封包分析手法,拼湊 C2 控制指令所對應的 TLV 資料傳輸格式與內容,便可成功對 Bot 下達控制指令。
複刻 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 程式的開發原則建議