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,做為握手機制的第一關。

Command and Control Server 握手 (Handshake) 機制範例

c2rocks 後門程式握手機制範例

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 組密碼,密碼僅供認證使用。步驟有三:

  1. C2 伺服器端詢問密碼 (下圖中紅字標示挑戰,此步驟可省略)
  2. 客戶端送出密碼給 C2 伺服器(下圖中紅字標示回應)。
  3. C2 伺服器比對密碼是否正確。若是,通過認證,傳送 OK。若否,認證失敗。

Command and Control Server 認證 (Authentication) 機制範例

認證機制範例

複刻 C2 系列文章