前言
DNS隧道是一種比較古老的技術,從首次發布至今已經有20多年的時間,隱蔽且適應性強一直是DNS隧道的標簽。
具體到國內業界技術分析來看,最流行的DNS隧道應用就是Cobalt Strike 的DNS Beacon.Cobalt Strike官網也將DNS Beacon稱為最受歡迎的功能特性?https://cobaltstrike.com/help-dns-beacon
作為對比,metasploit-framework的meterpreter雖然支持更多的平臺(WINDOWS/LINUX/MACOS),更多種類的傳輸協議(TCP/Http/Https/Ping),但是官方一直沒有發布可用的DNS隧道上線的方式,如今DNS隧道這塊拼圖終于添加到了metasploit-framwork這幅畫卷中.
我們為什么要使用DNS隧道
通常企業中的防火墻都不會限制DNS網絡流量的傳輸,而且為了員工上網及服務器軟件更新等業務,內網的DNS服務器也會與互聯網運營商的DNS服務器連接.
DNS隧道的網絡傳輸隱藏在大量的DNS請求中,安全設備也會處于性能考慮不會對所有的DNS流量進行分析.且DNS協議使用UDP協議傳輸,沒有明顯的網絡連接,且請求經由系統進程(如svchost.exe)發送,具有很好的隱蔽性.
如果要用一句話總結:DNS隧道是在某些限制嚴格的網絡環境中最好的
解決方案也是唯一的
解決方案.
MSF與DNS隧道時間線
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年!
代碼實現
MSF的dns隧道正式名稱為reverse_dns,具體來說是一種payload(載荷).MSF中的其他載荷分為metasploit-payload和metasploit-framework兩部分代碼,而reverse_dns除了metasploit-payload和metasploit-framework兩部分代碼外還有個dns_server.py腳本作為數據通訊橋梁,我們這里分別介紹以下這三部分代碼的具體實現
metasploit-payload中的代碼都在https://github.com/defcon-russia/metasploit-payloads/tree/master_update/c/meterpreter/source/server這個子工程中.
工程用于生成metsrv.dll文件,meterpreter的所有傳輸協議都由該dll文件實現
?
測試環境搭建及功能驗證
DNS隧道如果需要在互聯網上進行測試,通常需要購買兩個域名,并配置ns記錄,其實可以通過Windows Server搭建本地的DNS服務器,圖形化操作,方便調試.
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服務器設置為kali.lab.com
上圖中配置表示將Windows 7的DNS服務器設置為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
請執行service systemd-resolved stop 等命令關閉53端口上運行的服務
實戰環境搭建及功能驗證
本地測試畢竟是理想環境,我們需要在互聯網中實際測試reverse_dns的速度及穩定性究竟如何.
VPS使用了阿里云的一臺輕量服務器,兩個域名都在godaddy中購買.
假設VPS的外網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
請執行service systemd-resolved stop 等命令關閉53端口上運行的服務
參考內容
https://www.yuque.com/vipersec/help/olg1ua
https://dcc.godaddy.com/domains/?ref=card?
reverse_dns代碼大部分代碼都來源于如下兩個倉庫
https://github.com/defcon-russia/metasploit-framework
https://github.com/defcon-russia/metasploit-payloads
因為defcon-russia中的代碼是基于MSF5版本開發,而當前MSF6版本相對于MSF5版本在Meterpreter進行了大量重構,需要進行部分適配工作.
具體適配代碼的細節可以參考如下倉庫:
https://github.com/FunnyWolf/vipermsf
轉載自安全客:https://www.anquanke.com/post/id/255625