2.7K
Command and Control Server 握手 (Handshake) 與認證 (Authentication) 正如同 阿里巴巴與四十大盜 「芝麻開門」口令。口令目的就像一組共用密碼,能肯定接近的人,是不是自己人。
同樣地,口令機制對客戶端(惡意程式)與 C2 伺服器也不可或缺。C2 伺服器開在 Internet 上,隨時都有刺探連線。會需要測試連線上來的客戶端,是不是自己人。
口令機制歸納有 2 種實現方式,
一是握手(Handshake)機制,另一則是認證(Authentication)機制。
文章目錄
Command and Control Server 握手機制 (Handshake)
握手機制是雙方完成 TCP 三向交握,建立連線後,進行的第一個動作。客戶端(惡意程式)與伺服器端(C2 端) 程式要先議定通訊內容的格式,傳送內容若符合格式,C2 端才會繼續下指令。
例如本文設計的範例,c2rocks 後門程式。連線時,會先在封包最前面填入 0xaabbccdd
uint32_t 的數值,也就是俗稱 magic,做為握手機制的第一關。
magic 字串後面資料格式,也以 C 語言的資料結構去設計與解析。
struct cmd_rtarget { uint8_t key; uint32_t len; char *val; }; struct response { uint32_t magic; uint32_t payload_size; uint8_t xor_key; uint8_t vector; uint8_t targs_len; struct cmd_rtarget *targs; uint8_t opts_len; struct cmd_rtarget *opts; };
能夠解析的客戶端(惡意程式),才能順利通過 C2 伺服器的握手機制測試。
Command and Control Server 認證機制 (Authentication)
認證機制是雙方建立起 TCP 連線後,進行的第一個動作。最常見的實做方式,就是挑戰回應協定 (Challenge and response), 讀者熟知的密碼驗證機制,就是其中一種。
雙方共同擁有 1 組密碼,密碼僅供認證使用。步驟有三:
- C2 伺服器端詢問密碼 (下圖中紅字標示挑戰,此步驟可省略)
- 客戶端送出密碼給 C2 伺服器(下圖中紅字標示回應)。
- C2 伺服器比對密碼是否正確。若是,通過認證,傳送 OK。若否,認證失敗。
複刻 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 程式的開發原則建議