前言
DNS隧道是一種比較古老的技術(shù),從首次發(fā)布至今已經(jīng)有20多年的時(shí)間,隱蔽且適應(yīng)性強(qiáng)一直是DNS隧道的標(biāo)簽。
具體到國(guó)內(nèi)業(yè)界技術(shù)分析來(lái)看,最流行的DNS隧道應(yīng)用就是Cobalt Strike 的DNS Beacon.Cobalt Strike官網(wǎng)也將DNS Beacon稱(chēng)為最受歡迎的功能特性?https://cobaltstrike.com/help-dns-beacon
作為對(duì)比,metasploit-framework的meterpreter雖然支持更多的平臺(tái)(WINDOWS/LINUX/MACOS),更多種類(lèi)的傳輸協(xié)議(TCP/Http/Https/Ping),但是官方一直沒(méi)有發(fā)布可用的DNS隧道上線的方式,如今DNS隧道這塊拼圖終于添加到了metasploit-framwork這幅畫(huà)卷中.
我們?yōu)槭裁匆褂肈NS隧道
通常企業(yè)中的防火墻都不會(huì)限制DNS網(wǎng)絡(luò)流量的傳輸,而且為了員工上網(wǎng)及服務(wù)器軟件更新等業(yè)務(wù),內(nèi)網(wǎng)的DNS服務(wù)器也會(huì)與互聯(lián)網(wǎng)運(yùn)營(yíng)商的DNS服務(wù)器連接.
DNS隧道的網(wǎng)絡(luò)傳輸隱藏在大量的DNS請(qǐng)求中,安全設(shè)備也會(huì)處于性能考慮不會(huì)對(duì)所有的DNS流量進(jìn)行分析.且DNS協(xié)議使用UDP協(xié)議傳輸,沒(méi)有明顯的網(wǎng)絡(luò)連接,且請(qǐng)求經(jīng)由系統(tǒng)進(jìn)程(如svchost.exe)發(fā)送,具有很好的隱蔽性.
如果要用一句話(huà)總結(jié):DNS隧道是在某些限制嚴(yán)格的網(wǎng)絡(luò)環(huán)境中最好的
解決方案也是唯一的
解決方案.
MSF與DNS隧道時(shí)間線
https://blog.cobaltstrike.com/2013/06/06/dns-command-and-control-added-to-cobalt-strike/
https://defcon-russia.ru/posts/streamdns/
https://github.com/rapid7/metasploit-payloads/pull/262
從2017到2021,5年!
代碼實(shí)現(xiàn)
MSF的dns隧道正式名稱(chēng)為reverse_dns,具體來(lái)說(shuō)是一種payload(載荷).MSF中的其他載荷分為metasploit-payload和metasploit-framework兩部分代碼,而reverse_dns除了metasploit-payload和metasploit-framework兩部分代碼外還有個(gè)dns_server.py腳本作為數(shù)據(jù)通訊橋梁,我們這里分別介紹以下這三部分代碼的具體實(shí)現(xiàn)
metasploit-payload中的代碼都在https://github.com/defcon-russia/metasploit-payloads/tree/master_update/c/meterpreter/source/server這個(gè)子工程中.
工程用于生成metsrv.dll文件,meterpreter的所有傳輸協(xié)議都由該dll文件實(shí)現(xiàn)
?
測(cè)試環(huán)境搭建及功能驗(yàn)證
DNS隧道如果需要在互聯(lián)網(wǎng)上進(jìn)行測(cè)試,通常需要購(gòu)買(mǎi)兩個(gè)域名,并配置ns記錄,其實(shí)可以通過(guò)Windows Server搭建本地的DNS服務(wù)器,圖形化操作,方便調(diào)試.
IP地址配置如下:
Windows Server : 192.168.146.20
Windows 7 : 192.168.146.12
Ubuntu: 192.168.146.130
上圖中配置表示將域名kali.lab.com指向192.168.146.130
上圖中配置表示將域名test.viper.com的ns服務(wù)器設(shè)置為kali.lab.com
上圖中配置表示將Windows 7的DNS服務(wù)器設(shè)置為192.168.146.20(Windows Server)
docker exec -it viper-c bash
/root/viper/Tools/dns_server --nsip 192.168.146.130 --domain test.viper.com
如果提示socket.error: [Errno 98] Address already in use
請(qǐng)執(zhí)行service systemd-resolved stop 等命令關(guān)閉53端口上運(yùn)行的服務(wù)
實(shí)戰(zhàn)環(huán)境搭建及功能驗(yàn)證
本地測(cè)試畢竟是理想環(huán)境,我們需要在互聯(lián)網(wǎng)中實(shí)際測(cè)試reverse_dns的速度及穩(wěn)定性究竟如何.
VPS使用了阿里云的一臺(tái)輕量服務(wù)器,兩個(gè)域名都在godaddy中購(gòu)買(mǎi).
假設(shè)VPS的外網(wǎng)IP地址為47.243.123.123
域名A為:aaa.club
域名B為:bbb.website
docker exec -it viper-c bash
/root/viper/STATICFILES/Tools/dns_server --nsip 47.243.123.123 --domain bbb.website
如果提示socket.error: [Errno 98] Address already in use
請(qǐng)執(zhí)行service systemd-resolved stop 等命令關(guān)閉53端口上運(yùn)行的服務(wù)
參考內(nèi)容
https://www.yuque.com/vipersec/help/olg1ua
https://dcc.godaddy.com/domains/?ref=card?
reverse_dns代碼大部分代碼都來(lái)源于如下兩個(gè)倉(cāng)庫(kù)
https://github.com/defcon-russia/metasploit-framework
https://github.com/defcon-russia/metasploit-payloads
因?yàn)閐efcon-russia中的代碼是基于MSF5版本開(kāi)發(fā),而當(dāng)前MSF6版本相對(duì)于MSF5版本在Meterpreter進(jìn)行了大量重構(gòu),需要進(jìn)行部分適配工作.
具體適配代碼的細(xì)節(jié)可以參考如下倉(cāng)庫(kù):
https://github.com/FunnyWolf/vipermsf
轉(zhuǎn)載自安全客:https://www.anquanke.com/post/id/255625