前言
關(guān)于DNS隧道的一些簡單研究和利用刺啦。
DNS協(xié)議基礎(chǔ)
域名系統(tǒng)(服務(wù))協(xié)議(DNS)是一種分布式網(wǎng)絡(luò)政鼠,主要用于域名與 IP 地址的相互轉(zhuǎn)換锦爵。
DNS域名解析流程
本地DNS緩存-遞歸查詢-迭代查詢
本地DNS緩存
包含瀏覽器緩存垄分,本地host文件影锈,系統(tǒng)dns緩存
遞歸查詢
該模式下DNS 服務(wù)器接收到客戶機(jī)請求延曙,必須使用一個準(zhǔn)確的查詢結(jié)果回復(fù)客戶機(jī)豌鹤。
迭代查詢
本地域名服務(wù)器向根域名服務(wù)器查詢,根域名服務(wù)器告訴它下一步到哪里去查詢枝缔,然后它在根據(jù)結(jié)果逐層向下查詢傍药,直到得到最終結(jié)果。每次它都是以dns客戶機(jī)的身份去各個服務(wù)器查詢,即迭代查詢是本地服務(wù)器進(jìn)行的操作拐辽。
基本解析流程
以訪問http://test.cseroad.space進(jìn)行舉例
1拣挪、檢查瀏覽器緩存,本地host文件和本機(jī)的dns緩存俱诸,失敗后菠劝,向本地設(shè)置的dns服務(wù)器(如114.114.114.114)發(fā)送查詢請求,dns服務(wù)器到自身解析數(shù)據(jù)庫中查詢睁搭,查詢成功返回IP地址(此過程成為遞歸查詢)查詢失敗則觸發(fā)迭代查詢過程赶诊。
2、本地dns服務(wù)器向根域名服務(wù)器發(fā)送關(guān)于space的查詢請求园骆。
3舔痪、根域名服務(wù)器接收到查詢請求,并把查詢結(jié)果返回給dns服務(wù)器锌唾。
4锄码、本地dns服務(wù)器收到根域名服務(wù)器返回的頂級域名服務(wù)器的地址,并向它查詢關(guān)于cseroad的域名服務(wù)器地址晌涕。
5滋捶、頂級域名服務(wù)器接收到請求,進(jìn)行查詢余黎,并把查詢結(jié)果返回到dns服務(wù)器重窟。
6、本地dns服務(wù)器收到關(guān)于cseroad的權(quán)限域名服務(wù)器地址惧财,并發(fā)起查詢test的請求巡扇。
7、權(quán)限域名服務(wù)器收到請求垮衷,并把test對應(yīng)的A記錄的ip返回給dns服務(wù)器霎迫。
8、本地dns服務(wù)器把權(quán)限域名服務(wù)器返回的ip地址發(fā)送到個人電腦帘靡。
9知给、個人電腦成功解析到http://test.cseroad.space對應(yīng)的ip地址,在瀏覽器中進(jìn)行訪問描姚。
DNS隧道
DNS隧道(DNS Tunneling)是將其他協(xié)議的內(nèi)容封裝在DNS協(xié)議中涩赢,然后以DNS請求和響應(yīng)包完成傳輸數(shù)據(jù)(通信)的技術(shù)。當(dāng)前網(wǎng)絡(luò)世界中的DNS是一項必不可少的服務(wù)轩勘,所以防火墻和入侵檢測設(shè)備處于可用性和用戶友好的考慮將很難做到完全過濾掉DNS流量筒扒,因此,攻擊者可以利用它實現(xiàn)遠(yuǎn)程控制绊寻,文件傳輸?shù)炔僮鳌?/p>
DNS隧道的兩大類型
直連隧道:用戶端直接和指定的目標(biāo)DNS服務(wù)器建立連接花墩,然后將需要傳輸?shù)臄?shù)據(jù)編碼封裝在DNS協(xié)議中進(jìn)行通信悬秉。這種方式的優(yōu)點是具有較高速度,但蔽性弱冰蘑、易被探測追蹤的缺點也很明顯和泌。另外直連方式的限制比較多,如目前很多的企業(yè)網(wǎng)絡(luò)為了盡可能的降低遭受網(wǎng)絡(luò)攻擊的風(fēng)險祠肥,一般將相關(guān)策略配置為僅允許與指定的可信任DNS服務(wù)器之間的流量通過武氓。
中繼隧道:通過DNS迭代查詢而實現(xiàn)的中繼DNS隧道,這種方式及其隱秘仇箱,且可在絕大部分場景下部署成功县恕。但由于數(shù)據(jù)包到達(dá)目標(biāo)DNS服務(wù)器前需要經(jīng)過多個節(jié)點的跳轉(zhuǎn),數(shù)據(jù)傳輸速度和傳輸能力較直連會慢很多剂桥。
在實戰(zhàn)用到DNS隧道的場景忠烛,對隱蔽性要求很高,速度相對來說沒那么重要权逗,因此主要使用中繼隧道美尸。
技術(shù)要點
DNS緩存機(jī)制的規(guī)避
再使用中繼隧道時,如果需要解析的域名在本地的DNS Server中已經(jīng)有緩存時旬迹,本地的DNS Server就不會轉(zhuǎn)發(fā)數(shù)據(jù)包肋层。所以在構(gòu)造的請求中尤勋,每次查詢的域名都是不一樣的拟杉。
DNS載荷的編碼
從高層來看码俩,載荷只是客戶端和服務(wù)器通信的正常流量熬芜。例如客戶端發(fā)送一個A記錄請求給服務(wù)器蟀拷,查詢的主機(jī)名為2roAUSwVqwOWCaaDC.test.nuoyan.com,其中2roAUSwVqwOWCaaDc則是客戶端傳遞給服務(wù)器的信息危尿,這串字符解碼后的信息便是DNS隧道示损。
可利用DNS查詢類型
DNS的記錄類型有很多寿弱,常見的有A犯眠,AAAA,CNAME,MX,NS等。DNS隧道可以利用其中的一些記錄類型來傳輸數(shù)據(jù)症革。例如A筐咧,MX,CNAME,TXT等噪矛。
A 記錄 指定主機(jī)名(或域名)對應(yīng)的IPV4地址記錄
AAAA 記錄 指定主機(jī)名(或域名)對應(yīng)的IPV6地址記錄
NS 記錄 指定該域名由哪個DNS服務(wù)器來進(jìn)行解析
MX 記錄 指向一個郵件服務(wù)器
PTR 記錄 將一個IP地址映射到對應(yīng)的域名量蕊,也可以看成是A記錄的反向
CNAME 記錄 允許將多個名字映射到同一臺計算機(jī)
TXT 記錄 一般指主機(jī)名或域名的說明
主動連接
內(nèi)網(wǎng)客戶端位于防火墻后方,服務(wù)端無法做到主動連接艇挨,因此大多的dns隧道工具残炮,客戶端會定時向服務(wù)端發(fā)送請求,保證二者之間的通信狀態(tài)缩滨。
常用工具
dnscat2势就,iodine泉瞻,DeNise,dns2tcp等單獨的DNS隧道工具苞冯。
cs袖牙,msf,empire等集合了DNS隧道功能的安全工具抱完。
本次分別演示使用dnscat2和cs的DNS隱藏隧道贼陶。
實驗環(huán)境
內(nèi)網(wǎng)win7虛擬機(jī)
阿里云vps
py來的域名
Dnscat2搭建DNS隧道
1、安裝環(huán)境依賴和服務(wù)端
apt-get install ruby ruby-dev git make g++ rubygems
gem update --system
gem install bundler
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server
bundle install
如下表示安裝成功巧娱。
2碉怔、客戶端下載安裝
Dnscat2支持跨平臺
linux客戶端
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/client/
make
windows客戶端
下載鏈接
下載dnascat2的win32.zip
3、建立隧道
因為要使用中繼隧道禁添,設(shè)置一個NS記錄指向自己的子域名撮胧,再設(shè)置一個A記錄指向自己部署server端的服務(wù)器地址。
使用dig +trace dnsa.cseroad.space 查看域名詳細(xì)解析過程老翘,對應(yīng)著迭代查詢過程芹啥。
ruby ./dnscat2.rb dnsa.cseroad.space --no-cache
執(zhí)行dnscat2,輸入配置的子域名 --no-cache 代表禁止緩存
secret為隨機(jī)生成的密鑰铺峭,友好的給出了2種連接方式墓怀,分別為中繼和直連。
直接在客戶端執(zhí)行中繼連接方式卫键,session established表示隧道建立成功傀履。
服務(wù)端接收到客戶端的請求,創(chuàng)建了session 1會話莉炉。
進(jìn)入這個session
session -i 1
查看工具支持的功能钓账。
執(zhí)行系統(tǒng)命令,更多的功能不再演示絮宁。
cs使用DNS隧道建立連接
cs作為當(dāng)前最流行的安全工具肯定少不了DNS隧道功能梆暮。
cs的安裝過程不再贅述。
1绍昂、新建基于DNS隧道的監(jiān)聽器
payload選擇beacon_dns啦粹,host填寫A類解析的域名,端口隨意窘游。
輸入設(shè)置的ns服務(wù)器域名
2卖陵、基于監(jiān)聽器創(chuàng)建payload
推薦使用powershell,powershell不會產(chǎn)生文件落地张峰,且免殺性操作性強(qiáng)泪蔫。
成功上線。
通過Wireshark可以查看到cs的流量都是通過DNS發(fā)出的喘批,使用的為A類查詢進(jìn)行數(shù)據(jù)傳輸撩荣。
總結(jié)
DNS隧道在隱蔽性铣揉,穿透性上仍然具備不小的優(yōu)勢。
在大多數(shù)情況下它不會是最優(yōu)選擇餐曹,但在某些情況下它會成為唯一選擇逛拱。
參考資料:
利用DNS隧道構(gòu)建隱蔽C&C信道
DNS 深度理解 [ 一 ]
對 Cobalt Strike DNS隧道的理解與實戰(zhàn)
『DNS隧道工具』— iodine
DNS Tunneling及相關(guān)實現(xiàn)
利用DNS Tunnel傳輸數(shù)據(jù)