C2 複刻 07 | 分析惡意程式呼叫的作業系統網路 API

by iok
1.4k 人次瀏覽
C2 複刻 07 | 紀錄惡意程式呼叫的作業系統網路 API

對於複刻 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。

  1. ws2_32.dll,為Windows Socket 2.0。提供與 POSIX 標準相容的 Socket API,主要與 TCP/IP 網路第 3、4 層的連線有關。
  2. 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 系列文章

相關文章

留言