一、基于DNS的隱蔽通信免責聲明:本文作者竭力保證文章內容可靠,但對于任何錯誤、疏漏或不準確的內容,作者不負任何責任。文章部分內容來源于網絡是出于傳遞更多信息的目的,對此不負任何法律責任。本文僅用于技術分享與討論,嚴禁用于其他用途。
企業網絡經常面臨網絡攻擊者竊取有價值和敏感數據的威脅。復雜的攻擊者越來越多地利用DNS通道來泄露數據,以及維護惡意軟件的隧道C&C(命令和控制)通信。這是因為DNS對于幾乎所有應用程序來說都是如此重要的服務,從本地計算機到Internet的任何通信(不包括基于靜態IP的通信)都依賴于DNS服務,限制DNS通信可能會導致合法遠程服務的斷開,因此,企業防火墻通常配置為允許UDP端口53(由DNS使用)上的所有數據包,即DNS流量通常允許通過企業防火墻而無需深度檢查或狀態維護。從攻擊者的角度來看,這使得DNS協議成為數據泄露地隱蔽通信通道。
攻擊者利用DNS的一種方法是注冊域名(例如,fengrou2019.club),以便攻擊者在主機受害者中的惡意軟件可以將有價值的私人信息(例如信用卡號,登錄密碼或知識產權)編碼為形式為arbitrary-string.fengrou2019.club的DNS請求。此DNS請求由全局域名系統中的解析器轉發到fengrou2019.club域的權威服務器(在攻擊者的控制下),后者又向主機受害者發送響應。這為攻擊者在主受害者及其命令和控制中心之間提供了低速但隱蔽的雙向通信信道。如圖所示為Bot在獲取控制命令后回傳竊密信息的流程圖。
DNS這種穿透防火墻的能力為攻擊者提供了一個隱蔽的通道,盡管是低速通道,通過將其他協議(例如,SSH,FTP)隧道傳輸到命令和控制中心,可以通過該通道泄露私有數據并保持與惡意軟件的通信。現代惡意軟件和網絡攻擊在很大程度上依賴于DNS服務,使其活動可靠且難以跟蹤。例如,2017年發現的遠程訪問木馬DNSMessenger使用DNS查詢和響應在受感染的主機上執行惡意PowerShell命令。
二、DNS檢測
監控網絡DNS活動和阻止可疑域已被證明是抵御此類攻擊的有效技術。對于分析DNS流量以識別惡意網絡活動,人們提出了很多檢測方法,比如使用字符頻率分析的DNS隧道檢測方法等。
對于任何組織用以對抗各種安全威脅來說,在企業級水平上的單點Bot檢測至關重要。本文要介紹的DNS檢測工具BotDAD,它就是部署在企業的網絡邊界上進行單點Bot檢測的,它通過觀察主機在一段時間內的DNS指紋,嘗試尋找域正常的主機行為相當不同的異常行為,從而識別受感染的主機。
本文以BotDAD工具為例,將對BotDAD進行DNS檢測的技術分析。
1. DNS檢測特征
BotDAD中統計分析了15種DNS的行為特征,如下:
序號 DNS特征 描述 p1 每小時DNS請求的數量 受感染的僵尸主機每小時的請求數量往往高于正常主機。 p2 每小時不同的DNS請求數 感染DGA惡意軟件的主機往往比普通主機具有更多不同的請求。 p3 單個域的最大請求數 幫助檢測DNS隧道,敏感信息通過DNS協議傳輸。 p4 每分鐘平均請求數 用于檢測受惡意軟件感染的計算機,該計算機不使用短暫的DNS請求,而是使用休眠間隔定期對DNS請求做出貢獻。
它的計算方法是將主機發送的請求數除以主機處于活動狀態并使用DNS服務的持續時間。 p5 每分鐘最多請求數 幫助檢測感染惡意軟件的僵尸程序,這些惡意軟件使用短暫的DNS請求通過域生成算法生成的多個URL與C&C服務器進行通信。 p6 MX記錄查詢數 是網絡中基于垃圾郵件的僵尸網絡的強有力指標。 p7 PTR記錄(從ip地址到域名的一條記錄)查詢數 有助于檢測網絡中存在異常行為的主機以及可能的感染。 p8 查詢的不同DNS服務器的數量 有助于檢測網絡中具有異常行為的機器,因為標準系統查詢多個DNS服務器的情況并不常見。
TLD: top level domain,頂級域名
SLD: second level domain,二級域名 p9 不同TLD請求的數量 在檢測基于DGA的機器人方面非常有效,這些機器人不僅生成具有不同二級域的隨機域,還生成具有不同頂級域名的隨機域。 p10 不同SLD請求的數量 是網絡中存在基于DGA的機器人的強烈指示。 p11 唯一性比率 是在主機每小時發送至少1000個請求的假設下,發送的請求數與發送的不同請求數之比。 p12 Failed/NXDOMAIN請求的數量 是網絡中主機感染的一個非常強的指標。
它通過主機維護響應代碼等于DNS_RCODE_NXDOMAIN的響應數。 p13 已解析IP地址的不同城市數量 是一個強烈的異常指標,尤其是當IP地址分布在各個城市時。
使用Maxmind數據庫(“Geo2 Databases | MaxMi,2017”)獲得城市映射的IP地址。 p14 已經解析的ip地址的不同國家數量 p15 Flux ratio 在主機發送至少100個查詢并且已收到至少100個響應的條件下,發送的不同請求與解析的不同ip地址的比率。
通過對BotDAD工作做源碼解析,找到其核心類與核心函數,其中便對以上15種DNS特征進行了使用。
核心類:BotDAD/DnsAnalyser.py/classs Network
核心函數:BotDAD/DnsAnalyser.py/classs Network/find_anomaly
2.BotDAD安裝與使用
2.1 安裝:
依賴Python版本:python2.7
系統環境:windows
預安裝:
2.2 數據集準備:
BotDAD提供了3種預備數據集的方式:
2.2.1 抓包、過濾、切片
(1)使用wireshark抓包
(2) 包過濾命令
tshark.exe -r "input.pcap" -F pcap -Y dns -t ad -w"big.pcap" #windows
或
tshark -r "input.pcap" -F pcap -Y dns -t ad -w"big.pcap" #linux
(3)切片命令
editcap.exe -F pcap -i 3600"big.pcap" "slice.pcap" #windows
或
editcap -F pcap -i 3600"big.pcap" "slice.pcap" #linux
2.2.2 直接可用:20160421_150521.pcap
Manmeet Singh(BotDAD論文作者)提供,可直接使用。
鏈接:https://drive.google.com/file/d/14cRY6aEQz_xVsfySBb4Ik6mPYDLoIc88/view?usp=sharing
2.2.3 直接可用:校園DNS網絡流量
數據集由BotDAD論文作者提供。
2016年4月至5月期間,由超過4000個活躍用戶組成的校園DNS網絡流量(在高峰負載時間內)為10個隨機日,可在數據集中的每小時PCAP文件中獲得。
(由于10GB數據限制,目前只能上傳Day0(Full)和Day1(部分)的流量)
數據集鏈接為:https://data.mendeley.com/datasets/zh3wnddzxy/1
2.3 使用前的問題與解決:
2.3.1 包導入問題
下載后,嘗試直接運行main.py,遇到一個問題:
由于問題出現在pcApparser.py,而在BotDAD開源的項目中,公布的是PcapParser.pyc文件,因此需要pyc反編譯,本文使用uncompyle實現反編譯。
通過反編譯得到PcapParser.py,利用python2命令行環境驗證,發現問題就出在這里:
2.3.2 問題解決
查看win-inet-pton的API,發現其中提供的對于inet_ntop的使用方法與代碼中的使用方法不太一樣。
檢索反編譯的PcapParser.py代碼中,inet_ntop出現的地方,發現只有兩處:
一處是文件導入的地方:
另一處的用法其實與win-inet-pton的API中提供的用法是一致的:
所以我這邊嘗試修改PcapParser.py代碼,然后用PcapParser.py替代PcapParser.py用于BotDAD的運行:
修改前,原inet_ntop的導入方式:
修改后,直接導入win_inet_pton即可:
完成替換之后,再運行main.py,如圖,運行成功,問題解決:
一開始運行,首先在main.py的上一級目錄中生成3個文件:
執行到console>的耗時還是挺長的,大概7分鐘。
2.4 BotDAD的使用
BotDAD的使用命令總結如下:
2.4.1l命令
我這里使用l命令,主機列表包含571個主機。
2.4.2 m命令
輸入主機列表中的一個IP地址,無返回,在main.py的同級目錄下生成文件:
2.4.3 p命令
生成圖像,plot DNS query timeline:
2.4.4 d/D命令
主機IP后面出現的數字與主機列表中最后一列的數字對應一致。
D命令是將d展示部分做保存。
用D命令:
2.4.5 h命令
saving的過程可能會比較慢。
好長時間之后:
在main.py的上一級目錄下生成html文件:
2.4.6x命令
.csv:逗號分隔值文件格式。
在main.py的上一級目錄下生成.pcap.csv文件:
2.4.7 F命令
很多主機被列出來,說明請求www.google.com的主機非常多。
找一個特殊的URL,與前面執行d命令中的截圖中的數據剛好對應:
2.4.8 f命令
2.4.9 q命令
三、總結
攻防相濟,攻擊者試圖用更與時俱進的技術建立穩健的C&C通信信道,研究學者在檢測或防御技術上的重大突破也存在著被攻擊者利用的可能性。以基于DNS隱蔽信道的攻擊與檢測為例,目前基于網絡流量的DNS檢測技術,尤其是利用Passive DNS來實現對網絡的DNS監控,不需要任何關于僵尸網絡協議、通信或簽名的先驗知識,在當前的DNS檢測領域具有一定的先進性和代表性。但基于DNS特征的檢測技術也存在一些問題,一些數據特征可能具有時間和空間的特性,所以實驗結果很可能具有偏向性,而這些不符合當前時空特性的數據特征就有被攻擊者利用的可能性。研究者需要評估自己的結果是否對較好的泛化性能。比如隨著時間的推動,技術不斷發展,一些用于DNS檢測的特征可能已經過時,新的特征也需要我們去挖掘,并防止被利用的可能。
參考鏈接
*本文作者:BUPT/TTZM,轉載請注明來自FreeBuf.COM