利用 DNS 協議 SOA 記錄作為 C2 通道
No.1 前置知識
DNS域名系統和區域
域名系統是域的層次結構。該層次結構從名為“ . ”的“根”域開始。根域的下面是頂級域,例如“com”、“net”、“org”、“uk”或“jp”。再往下是二級域,例如“org.uk”或“co.jp”。DNS 層次結構中的域遍布全球,由世界各地的 DNS 名稱服務器托管。
DNS 區域用來管理某些特定域的 DNS 記錄。

如圖所示,cloudflare.com區域管理著support、community區域。每個層級由大小寫字母、數字、連接符組成,每個層級長度不超過63個字符,整個域名長度不能超過253個字符。整個DNS協議長度一般不超過512字符。
DNS常用記錄
A 記錄 – 用于指定域名對應的IP地址記錄
*NS 記錄 *– 域名服務器記錄,用來指定該域名由哪些DNS服務器來進行解析

TXT記錄 – 為域名做的說明,常用于SPF(https://service.exmail.qq.com/cgi-bin/help?subtype=1&id=20012&no=1000580)


SOA記錄 – 起始授權機構記錄(權威應答)。記錄了該DNS區域的ns記錄中主dns服務器信息

當我們指定SOA記錄指向的DNS服務器來解析時,返回的應答就是權威應答,nslookup的返回結果就沒有 *非權威應答 *字樣
DNS協議格式
No.2 Cobalt Strike隧道信道分析
上線配置
以CS 4.0為例。首先配置一個A記錄指向NS記錄指向CS服務器,然后配置NS記錄指向A記錄
CS上配置如下
上線過程
執行生成的可執行文件之后,beacon會向CS服務器請求下發stage。通過wireshark抓包,看到請求stage下發是通過txt記錄
在beacon上線之后,執行checkin,使beacon強制回連CS,beacon就會發送心跳到CS上。通過wireshark可以看到,beacon在心跳間隔以A記錄請求的方式來作為心跳標志告知CS。在當前沒有任務執行時,CS以0.0.0.0應答beacon心跳的A請求。當有任務需要執行時,CS以0.0.0.242應答beacon。beacon收到該應答后,向CS請求api.xxx.xxx.qiqing.cate4cafe.me的A記錄,CS則以0.0.0.64應答之,并將要執行的任務準備以TXT記錄應答的形式下發。beacon收到應答之后,向CS 請求api.xxx.xxx.qiqing.cate4cafe.me的TXT記錄,CS則以命令應答。beacon收到txt應答,解析出命令并執行,將結果以A請求的方式回傳CS。為了區分回傳數據和心跳的A請求,回傳數據的A請求以post作為標志(post.回傳數據.qiqing.cate4cafe.me)。
下圖為心跳包
下圖為執行命令
流程圖
No.3 利用SOA記錄作為通道
看一個正常的SOA請求
cmd里非權威應答下的baidu.com,表示區域根是baidu.com。
*primary name server *表示負責解析該域名的主dns服務器;
responsible mail addr 表示該區域管理人的郵箱,sa.baidu.com等價于sa@baidu.com;
Serial number 反映域名信息變化的序列號,每次域名信息變化該項數值需要增加,從服務器將檢查主服務器的區域序列號是否大于它們在系統上的序列號,如果是,它請求新的區域文件(區域文件是存儲在 DNS 服務器中的純文本文件,其包含區域的實際表示,并且包含區域內每個域的所有記錄,區域文件必須始終從區域根開始),如果不是,它繼續使用原始文件。
Refresh Number 從DNS服務器隔一定時間會查詢主DNS服務器中的序列號是否增加,即域文件是否有變化。這項內容就代表這個間隔的時間,單位為秒
Retry Interval 表示如果備用服務器無法連上主服務器,過多久再重試,單位為秒
*Expire limit *當備用DNS服務器無法聯系上主DNS服務器時,備用DNS服務器可以在多長時間內認為其緩存是有效的,并供用戶查詢
Minimum TTL 緩存DNS服務器可以緩存記錄多長時間,單位為秒
其中,primary name server和responsible mail addr可以作為攜帶數據的載體,從而替換TXT記錄請求。Serial number這些記錄則可以作為標志位來指示客戶端這個應該是心跳應答還是需要執行命令的應答

demo

原創: maomao 雷神眾測
原文鏈接:https://mp.weixin.qq.com/s/0tqzXoqC2xiaVKe...