對於複刻 C2 伺服器的功能,最重要的一件事就是 — 紀錄惡意程式所有呼叫的作業系統的網路 API (application programming interface) 函式、其對應的參數與函式回傳值。
若是 C 語言撰寫的程式,在 Windows 會呼叫 ws2_32.dll 的 WinSock API 與 wininet.dll 的 Windows Internet (WinINet) API。而 Linux 則是呼叫 POSIX Socket API。
文章目錄
Windows ws2_32.dll 與 wininet.dll API
Windows 客戶端(惡意程式)經由 Windows 作業系統內建網路 API 函式,與 C2 伺服器溝通。在分析惡意程式過程中,需留意所呼叫的網路 API 函式,與對應的函式參數、函式回傳值。
而 Windows 作業系統中,有提供 2 個與網路存取相關的 DLL。
- ws2_32.dll,為Windows Socket 2.0。提供與 POSIX 標準相容的 Socket API,主要與 TCP/IP 網路第 3、4 層的連線有關。
- wininet.dll,為 Internet Extensions for Win32。提供TCP/IP 網路第7層,HTTP、HTTPS、FTP 與 GOPHER 等協定的連線 API。
以過往經驗,在分析過程中,若發現惡意程式有呼叫 ws2_32.dll 與 wininet.dll 相關網路函式,表示惡意程式有網路連線的意圖,有很大機會是要向 C2 伺服器溝通。
以下列舉 ws2_32.dll 重要 API,如下。
- socket
- gethostbyname
- inet_addr
- htons
- accept
- bind
- listen
- connect
- recv
- recvfrom
- send
- sendto
- setsockopt
- select
- shutdown
- close
關於上述 API 的說明,可參閱微軟 MSDN 網頁 (https://docs.microsoft.com/en-us/windows/win32/winsock/winsock-functions)
wininet.dll 的重要API
- InternetOpenA(W)
- InternetOpenUrlA(W)
- InternetConnectA(W)
- HttpOpenRequestA(W)
- InternetQueryOptionA(W)
- InternetSetOptionA(W)
- HTTPSendRequestA(W)
- InternetReadFile
- InternetWriteFile
- InternetCloseHandle
關於上述 API 的說明,可參閱微軟 MSDN 網頁 (https://docs.microsoft.com/en-us/windows/win32/wininet/wininet-functions)
Linux POSIX Socket API
Linux 客戶端(惡意程式)經由 Linux 作業系統內建網路 API 函式,與 C2 伺服器溝通。但Linux 作業系統內建僅提供與 POSIX 標準相容的 Socket API。
Linux 沒有類似 Windows的 wininet.dll,由作業系統提供 TCP/IP HTTP、FTP 等協定的函式庫。
以下列舉 Linux POSIX Socket API 重要的網路函式。
- socket
- gethostbyname
- inet_addr
- htons
- accept
- bind
- listen
- connect
- recv
- recvfrom
- send
- sendto
- setsocketopt
- select
- shutdown
- close
- getsockname
- getpeername
關於上述 API 的說明,可參閱 Linux Programmer’s Manual。 需要安裝 manpags-dev 套件
sudo apt-get install manpages-dev
查詢時使用 man 指令,中間加上數字 2 或 3,後面接你要查詢的 API 名稱即可。 例如 man 2 socket
。
此外,在使用 Linux 作業系統撰寫網路程式時,常呼叫之系統相關 API 函式列舉如下:
- fork
- exec
- execlp
- execvp
- signal
- wait
- waitpid
- fnctl
- open
- setsid
- setgid
- dup
- dup2
以過往經驗,在分析過程中,若發現惡意程式有呼叫 POSIX Socket API 函式,並伴隨著上述提到的系統相關函式。表示惡意程式有網路連線的意圖,有很大機會是要向 C2 伺服器溝通。
複刻 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 程式的開發原則建議