利用機器學習進行DNS隱蔽通道檢測——數據收集,利用iodine進行DNS隱蔽通道樣本收集


我們在使用機器學習做DNS隱蔽通道檢測的過程中,不得不面臨樣本收集的問題,沒辦法,機器學習沒有樣本真是“巧婦難為無米之炊”啊!

本文簡單介紹了DNS隱蔽通道傳輸工具iodine,並介紹如何從iodine的網絡流量中抓取DNS報文生成pcap包,並將其轉化為機器學習檢測算法所能夠識別的文本文件。

1、環境准備和iodine安裝

DNS隱蔽通道工具iodine分為服務器端程序iodined和客戶端程序iodine。服務器端程序iodined提供特定域名的DNS解析服務。當客戶端請求該域名的解析,就可以建立通道連接。iodine支持NULL,TXT,SRV,MX,CNAME,A等多種查詢請求類型,並且支持EDNS,支持base32,base64,base128等多種編碼規范,更多使用方法和功能特性請參考官方文檔。

iodine支持直接轉發和中繼兩種模式。客戶端和服務端建立通信后,可以看到客戶機上多出一塊名為dns0的虛擬網卡。本文使用iodine直連模式建立DNS通道。

在安裝DNS 通道工具iodine之前,你需要准備2台linux機器,其中一台作為DNS隱蔽通道的Client,另外一台作為目標DNS Server。接下來在兩台linux機器上安裝iodine。

DNS 通道工具iodine的主頁在http://code.kryo.se/iodine/,視你使用的操作系統版本而定,安裝過程詳見官方文檔。安裝成功以后,輸入iodined --help應該輸出類似圖3的結果。

 

 

圖 1 iodined --help幫助文檔

2、捕獲iodine收發的DNS報文

在iodine的Server機器上,執行:sudo iodined -P passwd -f -DD 192.168.0.1 abc.com

其中,abc.com域名是自定義的傳輸DNS隱蔽通道數據的主域名,192.168.0.1是自定義輸入的虛擬IP,passwd是自定義的密碼。

在iodine的Client機器上,開啟tcpdump DNS抓包,執行:sudo tcpdump -i <eth0> port 53 -w iodine direct.pcap即可,記得將<eth0>換成你的網卡名。然后執行:sudo iodine -P passwd -f -r -T TXT <your iodine server ip> abc.com

其中,<your iodine server ip> 需要替換成iodine server端機器的IP(兩台機器在同一個內網里的話,填寫內網IP即可)。

上述步驟操作成功后,在Client和Server機器控制台上可以看到如下輸出:

 

圖2 iodine Client端輸出

 

圖3 iodine Server端輸出

從圖3可以看出,iodine在建立DNS通道連接的過程中,使用了大量的特殊字符子域名。而在DNS報文中包含大量的不符域名規范的子域名是DNS隱蔽通道的檢測特征之一。

查看Server和Client端的網卡配置,可以看到兩台機器都多出了dns0的虛擬網卡。

圖4 Client端在建立iodine DNS通道后多出了dns0虛擬網卡

圖5 Server端在建立iodine DNS通道后多出了dns0虛擬網卡

實際上,訪問server端設定的192.168.0.1 IP地址和直接訪問iodine server機器IP是一樣的,例如你可以通過ssh root@192.168.0.1來實現對server端機器的遠程登錄,使用scp來傳輸文件,甚至使用shadowsocks來反向代理來上網等。

接下來使用wireshark查看tcpdump剛剛抓到的包:

圖6 wireshark查看tcpdump抓包

如圖6所示,可以看到針對abc.om這個主域名,包含了大量的子域名請求,而這些子域名負責攜帶外發數據。

由於機器學習的檢測算法並不認pcap這種特殊的文件格式,因此需將其轉化為檢測算法所能夠識別的文本文件。我們暫且稱這種文本文件為pcap metadata文件吧。

3、從pcap報文生成pcap metadata

 pcap metadata文件是由“^”分割的描述網絡傳輸報文的文本文件,其示意格式如下(包含了3條報文):

^^10.0.2.15^45.77.39.243^40812^53^17^^^^^1513249151.379262000^1513249151.573115000^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^0^dnscat.21.nmosubth.6d76676c.3.fegigfcaenejfecaemgjgdgfgohdgfcacienejfecjakakedgphahjhcgjghgi.hecacigdcjcadcdadbdgcaeogjgdglcaengdedgmhfhcgfakedgphahjhcgjgh.gihecacigdcjcadcdadbdgcafagbgdglhecafahfgcgmgjhdgigjgogh.cdcp.directdns^5^0x00000001^193853.139877^1^10.0.2.15;45.77.39.243^^^^^^^^^^^^^^^^^^^^^c56d0100000100000000000006646e73636174023231086e6d6f737562746808366437363637366301333e6665676967666361656e656a66656361656d676a67646766676f6864676663616369656e656a6665636a616b616b656467706861686a6863676a676867693e6865636163696764636a636164636461646264676361656f676a6764676c6361656e67646564676d686668636766616b656467706861686a6863676a67683867696865636163696764636a636164636461646264676361666167626764676c68656361666168666763676d676a68646769676a676f6768046364637009646972656374646e730000050001^^^^^^^^^46^^^^^^^^^^^
^^10.0.2.15^45.77.39.243^40812^53^17^^^^^1513249151.573388000^1513249151.767184000^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^0^dnscat.21.nmosubth.6d76676d.3.akakfagfhcgngjhdhdgjgpgocagjhdcagigfhcgfgchjcaghhcgbgohegfgecm.cagghcgfgfcagpggcagdgigbhcghgfcmcahegpcagbgohjcahagfhchdgpgoca.gpgchegbgjgogjgoghcagbcagdgphahjakgpggcahegigjhdcahdgpgg.vpqg.directdns^5^0x00000001^193795.919418^1^10.0.2.15;45.77.39.243^^^^^^^^^^^^^^^^^^^^^254d0100000100000000000006646e73636174023231086e6d6f737562746808366437363637366401333e616b616b666167666863676e676a68646864676a6770676f6361676a6864636167696766686367666763686a6361676868636762676f686567666765636d3e636167676863676667666361677067676361676467696762686367686766636d63616865677063616762676f686a636168616766686368646770676f6361386770676368656762676a676f676a676f6768636167626361676467706861686a616b67706767636168656769676a68646361686467706767047670716709646972656374646e730000050001^^^^^^^^^46^^^^^^^^^^^
^^10.0.2.15^45.77.39.243^40812^53^17^^^^^1513249151.767307000^1513249151.959258000^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^0^dnscat.21.nmosubth.6d76676e.3.hehhgbhcgfcagbgogecagbhdhdgpgdgjgbhegfgecagegpgdhfgngfgohegbhe.gjgpgocagggjgmgfhdcacihegigfcaccfdgpgghehhgbhcgfcccjcmcahegpca.gegfgbgmakgjgocahegigfcafdgpgghehhgbhcgfcahhgjhegigphfhe.zork.directdns^5^0x00000001^191951.036453^1^10.0.2.15;45.77.39.243^^^^^^^^^^^^^^^^^^^^^0cea0100000100000000000006646e73636174023231086e6d6f737562746808366437363637366501333e6865686867626863676663616762676f6765636167626864686467706764676a676268656766676563616765677067646866676e6766676f6865676268653e676a6770676f63616767676a676d676668646361636968656769676663616363666467706767686568686762686367666363636a636d636168656770636138676567666762676d616b676a676f636168656769676663616664677067676865686867626863676663616868676a68656769677068666865047a6f726b09646972656374646e730000050001^^^^^^^^^46^^^^^^^^^^^

 使用github上的generate_metadata_from_pcap.py 腳本文件將pcap文件轉換為metadata文件。值得注意的是在使用該腳本前,需要安裝wireshark以便使用tshark命令,否則腳本會抱怨找不到tshark路徑。 

圖7 使用generate_metadata_from_pcap.py 腳本前需要先安裝wireshark

 

接下來,使用:python generate_metadata_from_pcap.py  <your pcap file path> <metadata save dir> 即可生成metadata文件了,成功操作后的效果如圖8所示。

 

 圖8 由pcap文件成功生成metadata文件

最后,就可以將該metadata文件作為樣本,用機器學習來進行DNS 隱蔽通道檢測了。

 

轉載請注明出處: http://www.cnblogs.com/bonelee/p/8081744.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM