C2 複刻 06 | Command and Control Server 握手 (Handshake) 與認證 (Authentication)

by iok
1.2k 人次瀏覽
握手與認證機制

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

相關文章

留言