一種使用TCP自定義加密通信的APT樣本分析
一、 概述
為了確保通信安全和隱私以及應對各種竊聽和中間人攻擊,越來越多的網絡流量被加密,然而,攻擊者也可以通過這種方式來隱藏自己的信息和行蹤。近期我們捕獲了一個樣本,此樣本就是使用了加密通信,為了深入研究此樣本的加密通信機制,接下來我們來逐層剖析它。

二、 準備工作
解密硬編碼字符串
將樣本記錄的硬編碼字符串的每一個字節加0x23,可以獲得密鑰、域名、注冊表鍵


三、 通信行為-接收
3.1 建立通信
樣本采用TCP自定義加密通信,IP為域名(*.ddns.net)解析成功后得到的IP,端口為5832

3.2 接收、校驗數據
樣本使用TCP協議傳輸數據,TCP載荷部分使用自定義加密協議,并且協議格式中含有身份校驗位,只有校驗通過才解析后面的內容,不通過則繼續接收數據。

接收數據包格式一覽表
每次對接收的數據的校驗方式如上表。第一次連接或者重新連接的數據包的前5個字節的值作為會話ID。
接收的數據包由三部分組成:
a. 填充數據(長度可變)
b. 11個字節的校驗數據、指令
c. 后續操作需要的參數、數據
為了防止單次會話中接收的數據因為前5個字節相同而出現規律性,會在校驗前先獲取有效的傳輸數據即移除填充數據,找到數據中與同一次會話的標志值相同的數據的位置,這也算是第一次校驗。

接下來,校驗有效數據的大小,有效數據的大小記錄在第6、7字節,校驗通過會根據第10、11字節的值來決定是否解密后續的數據。
3.3 解密數據
解密操作就是由硬編碼得到的密鑰和數據進行按位異或,返回的數據包也是這種方式加密的。

四、 執行指令
接收數據的第8、9字節的值是樣本的指令碼,根據不同的指令執行不同的操作。
指令大致分為三類
a.獲取基本信息
b.操作CMD.EXE
c.關閉進程、線程
4.1 獲取信息
獲取電腦系統信息、磁盤盤符、文件信息、進程信息以及TCP&UDP表的信息,并將獲取的信息按照不同的格式拼接,然后將拼接好的數據與密鑰做加密操作,并且將加密后的數據拷貝到發送緩沖區中。(具體的發送格式以及指令功能見文章末尾的發送數據包結構一覽表)

4.2 操作CMD.EXE
創建兩個匿名管道,獲取環境變量ComSpec的值即CMD.EXE的路徑,以這個路徑創建進程CMD.EXE,并且在創建進程的時候將進程的輸入、輸出各綁定一個匿名管道,這樣就可以通過管道來對CMD.EXE進行遠程操作,其中輸入CMD的指令就是有效數據中解密后的數據,輸出即回顯通過管道獲取,再拼接相應的格式后加密存放到發送緩沖區中。



4.3 關閉進程、線程
關閉CMD.EXE進程

五、 通信行為—發送
發送的數據格式如下表,按照自定義格式組成數據包內容后,加密發送:

六、 總結
樣本使用TCP自定義加密通信,通信成功會首先進行身份校驗、然后解析數據中的指令碼,根據指令碼的不同執行不同的功能,其中有一個高危的功能,通過匿名管道的方式實現遠程可交互式CMD,CMD執行的命令和執行結果(回顯)在通信流量載荷中加密傳輸。
利用TCP/UDP等協議承載自定義加密載荷進行攻擊的APT組織、各類黑客工具層出不窮。因自定義加密格式不定,變化靈活,因此這種加密流量檢測的難度進一步提高。我們一直針對各類使用自定義加密的最新威脅保持密切跟蹤,并隨時更新方案進行應對。