安全動態(tài)

基于DNS的數(shù)據(jù)泄露開源測試工具篇(一)

來源:聚銘網(wǎng)絡(luò)    發(fā)布時間:2020-01-10    瀏覽次數(shù):
 

信息來源:FreeBuf

一、前言

隨著攻防對抗持續(xù)升級,攻擊者與防御者之間在各方面的較量逐漸擴大。從ATT&CKTM矩陣[1]我們可以發(fā)現(xiàn),攻擊者完成攻擊活動戰(zhàn)術(shù)(Tatics,攻擊行為的技術(shù)目標(biāo))明確,且每個戰(zhàn)術(shù)下的可用技術(shù)(Technique,為實現(xiàn)戰(zhàn)術(shù)所使用的方法)眾多。在“假定失陷(Assume Breach)[2]”的現(xiàn)狀下,作為防御方我們必須深入分析攻擊者在實際攻擊活動中正在使用、可能使用的技術(shù),然后從攻擊原理的角度指導(dǎo)防御策略制定、防御系統(tǒng)搭建,從而盡可能的在攻防博弈中占據(jù)主動地位。

正是在這一思想的指引下,本文將聚焦到基于DNS的數(shù)據(jù)竊取技術(shù)。本文所討論的該技術(shù)主要指:攻擊者惡意利用現(xiàn)有DNS服務(wù)來(隱蔽)竊取受害者主機上的高價值數(shù)據(jù)、重要文件等所使用的技術(shù)。參考近幾年的惡意組織/攻擊活動分析報告,可以發(fā)現(xiàn)這種隱蔽的攻擊活動不乏真實案例的曝光;如APT32使用的后門工具曾利用DNS完成數(shù)據(jù)竊取,CopyKittens所使用攻擊框架中的RAT也利用DNS竊取目標(biāo)主機的重要文件數(shù)據(jù)。為了更好的理解基于DNS的數(shù)據(jù)竊取和隱蔽回傳的技術(shù)細(xì)節(jié),以攻擊原理引導(dǎo)防御策略制定和防御能力提升。本次將選取DET(Data Exfiltration Toolki)、PyExfil、DNSExfiltrator——三個github上認(rèn)可度較高的開源項目進行簡要分析,同時這些工具可以幫助管理員快速搭建測試模擬環(huán)境,測試其系統(tǒng)對抗DNS數(shù)據(jù)竊密的檢測能力。三個工具在github上收獲的“粉絲”情況如圖1。

圖1 DET、PyExfil、DNSExfiltrator的首頁展示

注:三個開源工具中DET、PyExfil為綜合性工具,即它們不僅僅實現(xiàn)了DNS竊密技術(shù);但本文只摘取了其基于DNS的數(shù)據(jù)竊取、隱蔽回傳的相關(guān)部分進行梳理和簡要分析。

二、DET工具簡介

DET(Data Exfiltration Toolkit)是一個Github開源項目[3],該項目作者將它描述為一個用于數(shù)據(jù)泄露概念驗證的項目,其基本思想是建立一個通用工具箱,可以動態(tài)擴展實現(xiàn)對多種類型協(xié)議、服務(wù)的利用,用來測試和驗證利用不同協(xié)議或服務(wù)的數(shù)據(jù)泄露技術(shù)。

DET項目整體結(jié)構(gòu)如圖2,從圖中可以看出,該工具通過插件形式實現(xiàn)擴展,支持使用不同協(xié)議、服務(wù)進行數(shù)據(jù)竊取,已實現(xiàn)協(xié)議、服務(wù)見表1。本文主要關(guān)注利用DNS進行數(shù)據(jù)竊取的相關(guān)部分(圖2中標(biāo)星部分)。

圖2 DET項目整體情況

三、基于DNS的數(shù)據(jù)竊取的源碼簡要分析

圖2表明,det.py文件為DET工具運行的主體框架,不同的協(xié)議或服務(wù)的具體細(xì)節(jié)則分別在對應(yīng)插件目錄下實現(xiàn)。所以我們重點關(guān)注det.py、plugins/dns.py兩個源碼文件。

(一)det.py源碼簡要分析

對det.py代碼中的主要方法、類梳理如圖3。本文將重點關(guān)注用于關(guān)鍵類Exfiltration和類ExfiltrationFile。同時,在det.py中,也實現(xiàn)了一些通用方法,如:使用的加/解密方法為AES,具體實現(xiàn)是導(dǎo)入python的AES庫;使用MD5進行文件校驗,具體則采用python的hashlib庫實現(xiàn)。除此之外,det.py實現(xiàn)了插件管理的多個方法,實現(xiàn)在使用DET工具是可以動態(tài)啟用、停用特定協(xié)議或服務(wù)等。

圖3 det.py代碼概況

類Exfiltration主要包含服務(wù)端接收和恢復(fù)竊密文件的關(guān)鍵實現(xiàn)源碼,也對部分輔助函數(shù)進行了封裝。關(guān)鍵方法有register_file()、retrieve_file()、retrieve_data()等。

register_file()方法的主要功能是:根據(jù)文件唯一標(biāo)識jobid(隨機生成的7為字符串,用來標(biāo)識哪些數(shù)據(jù)包屬于同一個文件),在服務(wù)端的全局字典files(暫存接收的文件數(shù)據(jù)塊)中初始化該文件的相關(guān)信息,主要包括添加該文件對應(yīng)的jobid到全局字典files、提取并存儲該文件的校驗和文件名等信息;全局字典files中單個文件的存儲結(jié)構(gòu)如圖4。

圖4 單個文件在字典files中的形式化存儲

retrieve_file()方法主要負(fù)責(zé)將已竊取的文件數(shù)據(jù)寫入本地文件,該方法會首先計算文件數(shù)據(jù)的檢驗和,然后與注冊包中傳送的校驗和對比,只有在驗證通過的情況下才執(zhí)行數(shù)據(jù)解密并寫入本地文件。

retrieve_data()方法的主要作用是根據(jù)監(jiān)聽端口所收到包的不同類型,采取對應(yīng)的預(yù)設(shè)處理方法;例如:當(dāng)收到的包為文件數(shù)據(jù)包時,則從該包中提取文件數(shù)據(jù),并將數(shù)據(jù)按jobid和包序號存入files[jobid][data]中。其中,不同包類型及其結(jié)構(gòu)見表2。

ExfiltrationFile類主要作用于客戶端,負(fù)責(zé)處理欲竊取的文件數(shù)據(jù),然后啟用指定協(xié)議或服務(wù)的插件來發(fā)送竊密文件數(shù)據(jù)塊。其工作主要流程如下:

1)計算欲發(fā)送文件數(shù)據(jù)的MD5值,用作文件校驗。

2)完成預(yù)處理工作,包括注冊使用指定協(xié)議/服務(wù)的插件、讀取其他定制參數(shù)、讀取文件數(shù)據(jù)、壓縮及加密等。

3)構(gòu)造初始化(注冊)塊,并啟用插件實現(xiàn)的方法發(fā)送。

4)每次讀取隨機大小的文件數(shù)據(jù)塊,編碼、添加包序號后逐個發(fā)送,直到文件數(shù)據(jù)發(fā)送完畢。

5)構(gòu)建結(jié)束塊,并啟動插件實現(xiàn)的方法發(fā)送。

(二)插件plugins/dns.py簡要分析

dns.py文件包含客戶端發(fā)送、服務(wù)端接收處理單個DNS請求包的實現(xiàn)細(xì)節(jié)。例如:當(dāng)客戶端啟用DET工具時指定利用協(xié)議為DNS時,det.py將通過插件管理啟用dns.py。該源碼文件主要負(fù)責(zé)將要傳送的數(shù)據(jù)塊二次拆分,并以符合DNS協(xié)議的形式編碼組合為指定域名的子域名,然后通過DNS查詢包發(fā)送。值得注意的是該文件與det.py文件協(xié)同工作,dns.py文件的處理對象是det.py輸入的單個數(shù)據(jù)塊,最終以一個或多個DNS查詢請求包發(fā)送到服務(wù)端;而det.py的處理對象則是欲竊取文件對象,輸出將作為dns.py的處理對象。梳理dns.py文件源碼結(jié)構(gòu)如圖5。

圖5 dns.py源碼概況

圖5中的listen()方法通過sniff監(jiān)聽在指定地址上接收數(shù)據(jù),即用于服務(wù)端接收DNS請求數(shù)據(jù),提出去子域名后作為handle_dns_packet()方法的處理對象。handle_dns_packet()方法將簡單處理收到的DNS包,提取、暫存編碼在子域名中的竊密數(shù)據(jù);當(dāng)檢測到數(shù)據(jù)塊傳輸完成,則解碼數(shù)據(jù)塊并交付給det.py做進一步處理。而send()方法則用于客戶端構(gòu)造并發(fā)送嵌入了竊密數(shù)據(jù)的DNS查詢;它主要負(fù)責(zé)將det.py處理后的數(shù)據(jù)塊拼接組成給定域名的子域名(子域名的拼接規(guī)則見表2中的竊密數(shù)據(jù)包),并發(fā)送到指定竊密服務(wù)器的目標(biāo)端口(默認(rèn)53端口)。

總結(jié)與思考:

通過以上分析,整理總結(jié)DET工具的整體流程如下圖:

圖6 DET工具的整體流程

通過對DET工具的實驗測試,該項目作為測試項目在實際測試中存在一些問題,例如:

1)效率較低。如:使用Hex編碼使實際傳輸文件數(shù)據(jù)是原始文件數(shù)據(jù)的2倍,處理數(shù)據(jù)塊、構(gòu)造DNS包時重復(fù)添加文件標(biāo)識等。

2)抓包后的流量明顯異常。如:子域名、單個標(biāo)簽過長,數(shù)字占比極高等。

3)服務(wù)端恢復(fù)成功率影響因素較多。如:DNS包的次序、文件數(shù)據(jù)大小等。

 
 

上一篇:MITRE發(fā)布首個針對工業(yè)控制系統(tǒng)(ICS)的ATT&CK知識庫

下一篇:2020年01月10日 聚銘安全速遞