3.5K
現實生活中,2 個人要互相溝通,一定會有個先說話的人。而客戶端(這裡指的是惡意程式)與 Command and Control Server (C&C、C2) 伺服器端要互相通訊,道理也相同,會有一方先發起連線。
「先發起連線」的定義是「在雙方完成 TCP 三向交握後,或使用 UDP 通訊協定,首先發送通訊資料的那一方」。
如何判斷哪方先發起連線呢?依我的經驗,在還沒深入逆向分析惡意程式前,可以用猜的。
依經驗,多數惡意程式都是先發起連線的那方,並且使用 TCP 協定。猜測與驗證方式說明如下:
驗證方式可使用有「網路瑞士刀」之稱的 netcat 程式。有 2 個假設前提,如下:
- 假設惡意程式是先發起連線
- 已修改惡意程式連線的目標位址,改為執行 nc 的主機 IP
執行 nc 程式,設定通訊埠 (port)(例如Port 4444),來被動接聽 (Listen) tcp 封包。
接著,執行惡意程式,若螢幕畫面上有輸出字串(字串內容可能是亂碼),即表示惡意程式是先發起連線那端。
反之,等了一段時間,都沒有螢幕畫面輸出任何資料的話,即表示 C2 伺服器是先發起連線那端。
$ nc -l 4444
複刻 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 程式的開發原則建議