基于DNS的數據泄露開源測試工具篇(二)

2019-12-30 48487人圍觀 工具

免責聲明:本文作者竭力保證文章內容可靠,但對于任何錯誤、疏漏或不準確的內容,作者不負任何責任。文章部分內容來源于網絡是出于傳遞更多信息的目的,對此不負任何法律責任。本文僅用于技術分享與討論,嚴禁用于其他用途。

一、前言

基于DNS的數據竊取開源測試工具篇(一)中,簡要分析了DET基于DNS進行數據竊取部分的源碼。本文將繼續探討圖1中所示的PyExfil中利用DNS完成數據竊取的部分。

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

二、PyExfil工具簡介

PyExfil項目[1]本身是一個測試庫,作為python庫的形式提供給用戶使用,該工具實現了多種數據泄露技術,包括攻擊者在真正的攻擊活動中已經或正在使用的部分技術。開源該工具的初衷是幫助用戶在自己的系統中快速部署,從而幫助用戶快速部署,用于檢測其系統抵抗數據泄露的能力。

PyExfil工具實現了大量的相關技術,分別在網絡、通信、物理、隱寫等模塊中實現,模塊分類及對應技術詳情見表1:

模塊分類 技術詳情
網絡模塊 DNS查詢、HTTP Cookie、ICMP Echo8、NTP Request、BGP Open、HTTPS  Replace Certificate、QUIC、Slack、POP3身份驗證、FTP MKDIR、Source IP Based Exfiltration、HTTP Response
通信模塊 NTP Request、DropBox LSP、DNS Over TLS、ARP Broadcast、JetDirect、GQUIC、MDNS Query、AllJoyn
物理模塊 Audio、QR Code、WIFI Frame Payload
隱寫模塊 圖像二進制偏移、Video Dictionary、Braille Text Document

表1  PyExfil的模塊分類及其包含的技術統計

PyExfil整體項目結構梳理如圖2。本文關注的DNS竊密部分位于網絡模塊中,dns_exfil.py文件是該工具利用DNS完成竊密的具體實現。

圖2  PyExfil項目結構概況

三、基于DNS的數據竊取的源碼簡要分析

(一)服務端源碼簡要分析

圖3  PyExfil的服務端源碼概況

服務端源碼梳理及工作流程如圖3,通過源碼分析,整理其竊密數據接收、恢復的主要過程如下:

(1)   socket綁定設定端口并監聽所有數據,分別提出數據(DNS請求包的所有數據部分)、地址。

(2)   在數據中查找包類型標識符,并根據包類型采取對應的處理方法。其中包類型及其判別依據見表2。

包類型 判別依據
初始化包 INIT_445“+文件名+”::”+CRC32
竊密數據包 “\x00\x00\x01\x00\x01″+數據+”\xcc\xcc\xcc\xcc\xff\xff\xff\xff”
結束包 “\xcc\xcc\xcc\xcc\xff\xff\xff\xff”+”::”+”\xcc\xcc\xcc\xcc\xff\xff\xff\xff”

表2  PyExfil的包類型及其判別依據對應關系

(3)   服務端將根據不同的包類型采取不同的處理方法:

1)      初始化包:從包中提取即將傳送文件的重要信息:文件名、CRC32校驗值。

2)     竊密數據包:從包中提取竊取的文件數據,增量保存到變量actual_file中。

3)     結束包:標志著文件傳輸結束,則通過CRC32校驗后恢復文件到本地,并回復客戶端“OK”。

(二)客戶端源碼簡要分析

圖4  PyExfil客戶端源碼概況

客戶端源碼及主要工作流程梳理如圖4,通過源碼分析,整理其構造、編碼、發送竊密數據的主要過程如下:

(1)   參照DNS協議各字段,以服務端域名為基礎構造一個普通的DNS請求,存儲到dns_request。

(2)   按制定的竊密文件路徑,將文件數據讀入內存,并計算其CRC32值。

(3)   通過socket發送初始化包。其中,初始化包的組成結構大致如圖5(dns_request由步驟(1)生成)。

圖5  PyExfil初始化包的組成結構

(4)   通過socket逐個發送文件數據塊。其中,竊密數據包組成結構如圖6。

圖6  PyExfil竊密數據包的組成結構

(5)   當所有文件數據塊發送完畢后,通過socket發送結束包。其中,客戶端構造的結束包組成結構如圖7。

圖7  PyExfil結束包的組成結構

總結與思考:

PyExfil部署實驗環境后,模擬執行數據竊取后的不同類型流量包情況分別如圖8、圖9、圖10。

圖8  初始化包流量包情況

圖9  竊密數據包流量情況

圖10  結束包流量情況

通過以上分析,PyExfil具有明顯的特征:PyExfil利用DNS的方式特點明顯——在DNS請求的同一個UDP包中,先構造DNS普通DNS請求包,竊密數據附加到DNS協議內容以外的區域,即竊密數據位置在DNS協議規定的內容之外。

但綜合來看,PyExfil在實驗調試中也發現了一些問題:

(1) 文件數據明文傳輸,打開Pcap包可以直接看到二進制數據對應竊密字符串。

(2) 竊密數據包沒有編號,且沒有任何重傳機制,在網絡狀況較差時,文件恢復失敗率較高。

(3) 源碼中DNS請求部分為手動編碼輸入,結果是傳輸同一個竊密文件時,有很多內容相同的DNS請求——這本身就是一種異常。

(4) 源碼中只在成功恢復文件后響應客戶端請求“Got it,OK”;為了減小異常,可以考慮對每個請求構造響應,且為自己定義的A記錄值。

參考鏈接:

[1] PyExfil項目地址

*本文作者:GZHU/asUwIll,轉載請注明來自FreeBuf.COM

相關推薦
取消
Loading...

特別推薦

活動預告

填寫個人信息

姓名
電話
郵箱
公司
行業
職位
css.php 微信上那些说赚钱是真的吗