DNS 隧道通信後門的分析報告
2017年4月,我們發布了一份詳細的關於一款惡意程序的報告,該惡意程序使用DNS隧道與它的C&C通信。這項研究促使我們開發了一種技術來檢測類似的威脅,該技術使得我們能夠通過DNS隧道收集大量的惡意軟體樣本。在本文中,我們將檢查一些使用DNS隧道最著名的惡意程序。Kaspersky實驗室的安全產品用一般的(「Trojan.Denes.UDP.C&C」或 「Backdoor.Win32.Denis.*」)或單獨的判決來檢測這些惡意程序。
Trojan.Win32.Ismdoor.gen
我們將檢查的第一個惡意軟體有一個多層的C&C通信協議結構,該結構與OSI模型相似,並將此惡意程序與所有其他的木馬程序區分開來。Trojan.Win32.Ismdoor的創造者,在設計和開發方面顯然付出了很大的努力。
當然,對於其傳輸層該木馬使用DNS隧道。傳出「datagrams」(數據報)的長度被限制在60字元,儘管DNS伺服器配置和實際協議允許這個值更大。C&C伺服器的命令解析到IPv6地址。
一個典型的查詢發送到C&C伺服器是這樣的:
n.n.c.<Session ID >.<Server domain>.com
在DNS隧道傳輸層上面適當的位置有一個會話層協議,這意味著交換「短」和「長」數據包的能力。會話層與傳輸層的不同之處在於,它有一種機制來檢查丟失的消息。當傳輸層通過一種數據交換關閉會話時(該數據交換是關於發送和接收數據包的數量),會話層便檢查確保每一個發送的數據包已經被正確接收進而關閉。由伺服器決定使用哪個選項;例如,「長」數據包協議是用來從受感染的電腦上傳文件。
短消息
在這個層次上,聊天機器人(bot)的操作可分為五個步驟:
· 向伺服器聲明會話ID;
· 在數據包中發送消息;
· 發送已發送數據包數量;
· 接收傳入數據包的數量;
· 接收傳入的數據包。
一個會話的例子:
1. 向伺服器聲明會話ID
每次打開通信會話,bot都會生成一個GUID,並將其發送到伺服器。然後使用該GUID識別會話中的所有通信,並且總是將該GUID寫在第三級域位置。在本例中,URL具有以下結構:
n.n.c.<Session ID>.<Server domain>.comThe message A67DDB8A2A17334765443253702AA3 is a positive response. Otherwise, the GUID is sent to the server again.n.n.c.<Session ID>.<Server domain>.com
消息A67DDB8A2A17334765443253702AA3是積極響應的。否則,將再次發送GUID到伺服器。
2. 以數據包的形式發送一條消息
正如我們前面說的,選擇的通信機制將某些限制條件強加到數據包的大小上。將一條即將輸出的消息分為60個位元組長的數據包,並且以URL的形式發送:
<Outgoing packet>.<Packet number>.dr.<Session ID >. <Server domain>.com
響應一定是A67DDB885A3432576548A2A3707334。
3. 發送已發送數據包的數量
當所有數據包發送成功,便發送已經發送的數據包數量,其數量作為一個查詢以下面格式發送:
n.<Number of packets>.f.<Session ID >.<Server domain>.com
應該注意的是,數據包編號從0開始。響應是20202020202020202020202020202020。
4. 接收傳入數據包的數量
這一步是通過以下URL格式的類型實現:
n.n.fc.<Sessions ID >.<Server domain>.com
響應一定是以下格式:
A67D: DB8: 85A3: 4325: 7654: 8A2A :: <Number of incoming packets>Receive incoming packets
5. 接收傳入的數據包
請求接收下一個數據包是這樣的:
www. <Packet number>.s. <Session ID > .<Server domain>.com
以16位元組IPv6數據包的形式傳入消息。
長消息
在這種情況下,與伺服器通信可以分為以下步驟:
· 發送文件分成的數據包的數量;
· 發送文件;
· 向伺服器發送周期查詢以檢查丟失的數據包;
· 重新發送丟失的數據包。
來自查詢的會話ID,在該查詢中文件被要求。
1. 發送的數據包數量
查詢: n.<Number of packets>.<Session ID >.<Server domain >.com
回應:A67DDB8A2A17334765443253702AA3。
2. 以數據包的形式發送文件
查詢:<Outgoing packet>.<Packet number >.d.<Session ID >.<Server domain >.com
回應:伺服器不回復這條信息,或者發送一個響應伺服器故障。
3. 向伺服器發送周期查詢來檢查數據包丟失
超過一般時間間隔,bot向伺服器發送以下查詢:
uff<Number of packets>.< Number of packets >.<Server domain >.com
回復:20202020202020202020202020202020
一系列操作之後,上一部分「接收傳入數據包的數量」以及「接收傳入數據包」的步驟已經實現。
作為響應,伺服器所遺漏的數據包的數量(用逗號分隔開)被發送了。
4. 重新發送丟失的數據包
查詢: <Outgoing packet>.<Packet number>.dl.<Session ID>.<Server domain>.com
OSI的表示層負責編碼和解碼消息。IPv4地址欄位中包含的伺服器響應是一個可被16整除的常規ASCII字元串。對包含在DNS查詢中的伺服器查詢在Base64中使用重新定義的索引表進行編碼。
第一個消息的例子及其在datagram主體里的代表
應用程序層只是C&C伺服器一組GET類似的查詢:
· 檢查連接。這個查詢字元串是「M:CC?」;
· 註冊連接。這決定了可用命令,以及受感染的計算機的ID和bot (M:AV?appId=<…>&uniqueId=<…>);
· 註冊確認命令;
· 「通用」回應 (M:ME?appId=<…>&message=<…>);
· 接收命令(M:GAC?appId=8);
· 確認命令 (M:CR?cd=<Command GUID>);
· 發送文件 (M:SF?commandId=CmdResult=<Command GUID>|||<Result of command execution >);
· 接收文件 (M:GF?);
如上所述,這個木馬的設計和編寫都很好,擁有經過深思熟慮的通信系統,以及有多種功能的payload。下面是它的主要命令列表:
· SI——發送關於受感染系統的信息;
· RunNewVersion——更新;
· Restart ——重啟;
· Remove——刪除本身;
· CreateMimi1Bat——Mimikatz執行;
· ExecuteKL——激活鍵盤記錄器;
· RemoveKL——刪除由ExecuteKL創建的文件;
· GetVersion——木馬版本報告;
· PauseUpload——暫停上傳文件到伺服器;
· ResumeUpload——恢復上傳文件到伺服器;
· PauseDownload——暫停從伺服器下載文件;
· ResumeDownload——恢復從伺服器下載文件;
· PWS——截圖;
· DownloadFile——從伺服器下載一個文件;
· UploadFile ———上傳文件到伺服器。
木馬可用的其他命令負責其自身的邏輯操作(如改變C&C地址等)。
Backdoor.Win32.ClIEcker
下一個示例使用基於ANY DNS 數據包的不同工作流。這種機制允許惡意程序從伺服器接收隨機結構的DNS數據包。有了該木馬程序,就沒有邏輯分解成子協議了——只有傳出和傳入的請求。我們能夠檢測到該木馬的幾個修改。下面,我們將描述所有列出的這些功能和特點。
Backdoor.Win32.ClIEcker其中一個有趣的特點是發現受害者計算機IP地址的方式——為了發現受害者計算機IP地址,它使用Internet Explorer的COM介面。該木馬包含網站地址的列表,在該列表上遊客可以看到自己的IP地址(例如http://www.ip-adress.com)。木馬程序隨機選擇其中一個,訪問地址,發現IP地址所遵循的頁面主體的字元串,並提取它。為了儘可能地掩蓋該查詢,木馬程序也會選擇一個隨機的推薦地址並且在對Internet Explorer適當的請求中使用該地址。
唯一仍不清楚的事情是,為什麼會使用這樣一個複雜的方法;通常,木馬程序通過從一個網站請求數據找到計算機IP地址,以一個HTML頁面的形式返回一個包含IP地址的字元串。這麼操作做也許是為了避免解析到一個IP地址,對該木馬程序來說可能在IoC列表中,或者它可能只是一個欠缺考慮的從代碼庫或論壇複製粘貼的工作。
為了使事情進一步複雜化,在來自伺服器的請求上,該木馬程序支持打開Internet Explorer上
一個網站的命令——為此,以 「IEXPLORE.EXE google.com」的形式使用了一個小調用,而不是複雜的COM交互。因此,木馬可以作為一個Trojan-Clicker被檢測到,不過,正如我們在之前的文章中解釋過的,Trojan Clicker通常使用虛擬桌面來實現上述操作。
用於解析IP/推薦地址的URL地址的例子以及通過COM 接收頁面內容
在最初的請求中,幾個描述受害者系統的參數與惟一的RC4鍵一起被發送,該RC4鍵使用以下受害者電腦信息創建的:
· 操作系統的主要版本;
· 邏輯標誌指示是否使用數據機連接;
· 木馬ID;
· 用戶的加密IP地址;
· 殺毒服務代碼。
最後一點應該給一些解釋。木馬包含安全軟體的列表;每個安全產品都在發送到伺服器的這段代碼中被編碼。例如,所有與McAfee產品有關的進程都將用殺毒服務代碼中的標誌0 ×400表示。
接下來,我們將對一些命令給出相應描述:
帶有代碼8的命令值得特別關注,因為它包含了木馬的主要功能。它的工作就是下載和啟動負載。這個命令有以下參數:
該文件以TXT DNS數據包的形式傳輸。
所有與伺服器通信,在默認情況下,使用一個基於受害者計算機信息生成的RC4密鑰加密。然而,伺服器可能要求密鑰是被改變的,並在文件下載請求中發送一個新的密鑰。在任何情況下,生成S-box所需的密鑰是用其本身加密的,並隨後使用產生的字元串。根據數據包數量修改 S-box,因此對於每一個新的數據包都是唯一的。
當解密完成後,使用CRC32檢查生成文件的完整性。
Backdoor.Win32.Denis
Backdoor.Win32.Denis擁有最簡單的結構和最簡單的DNS伺服器通信功能。惡意軟體的這段代碼與本文描述的木馬有相同的名字,但是也僅有此相似之處。
這個惡意程序使用 A DNS-格式數據包來與DNS伺服器通信;在這種格式中,響應大小限制為4個位元組。所有的指標都表明這是一個常規的木馬下載程序(Trojan Downloader),下載文件的速度非常慢。發送給伺服器的消息的典型格式如下:
IC<Container type>.<UID>.<Container>.<Server address>
通過「容器」,Trojan運算結果是打包的。命令和響應不同,容器的結構可能有很大的差異。是用戶的ID UID位元組長度為0x20 。是一個Base32字元串,編碼之後有以下結構:
容器也是一個Base32字元串:
總共有四種類型的容器存在。根據接收到的命令,以及執行的結果,Trojan決定哪一個是必需的。
命令
從命令的描述可以看出,該木馬程序的目的是下載和啟動文件。
MD5
15b36b1e3a41ad80bbd363aea8f2d704 — Trojan.Win32.Ismdoor.gen
1FD599FB9FA62EB91511002771D78104 — Backdoor.Win32.ClIEcker1f3a2c48a7f5c2c31e71f552d74c3543 — Backdoor.Win32.Denis本文翻譯自:https://securelist.com/denis-and-company/83671/,如若轉載,請註明原文地址: http://www.4hou.com/info/news/10250.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※現在優秀信息安全的公司招實習生標準是什麼?
※一些常見的webshell後門的特徵碼
※NO.20 等級保護備案和測評的流水賬
※給定一段16進位碼密文,如何判斷其所用加密演算法?
※安卓惡意軟體檢測:系統調用日誌+機器學習演算法
TAG:信息安全 |