當前位置:
首頁 > 新聞 > 使用Angr將自己偽造成C&C伺服器以研究惡意軟體的通信協議

使用Angr將自己偽造成C&C伺服器以研究惡意軟體的通信協議

對於安全研究人員來說,在分析惡意二進位文件時,由於這些文件已經提前進行了反逆向分析的處理,所以最困難的事情就是摸清惡意文件所具有的各種功能。另外,如果這些功能只能由攻擊者通過其後台控制中心遠程操縱,那事情就會變得更加複雜。總而言之,出於各種原因,研究人員雖然會追蹤到許多新的惡意軟體,但很多時候卻無法進行完整的動態分析,例如惡意軟體是怎樣通過讓目標設備的基礎架構崩潰或通過隔離運行,來避免使用C&C伺服器,從而逃避檢測。所以要在這些情況下,分析攻擊者的遠端伺服器與惡意樣本之間的通信協議通常會比較麻煩。所以要想得到惡意軟體的通信協議,研究人員就必須創建一個虛擬化的伺服器或採取各種攻擊環境不斷欺騙樣本進行攻擊,只有通過這種方法,研究人員才能發現惡意軟體的全部功能。根據分析代碼的大小和複雜程度或分析目標,分析任務的工作量也不一。

在本文中,我將列舉一個虛構的具有RAT(遠程訪問木馬)功能的研究樣本,且假設該木馬的攻擊命令都是根據C&C伺服器接收到的命令來執行的。因此,為了創建一個模擬攻擊者的伺服器,我們就必須了解伺服器與安裝在受害者設備上的樣本之間的通信協議。

不過在此過程中,我並沒有使用典型的逆向分析和調試工具來分析樣本的所有內部過程,而是將部分分析的過程委託給我所發現的一個新工具——angr。

何為angr

angr是一個二進位代碼分析工具,能夠自動化完成二進位文件的分析,並找出漏洞。angr是一個基於python的二進位漏洞分析框架,它將以前多種分析技術集成進來,???它能夠進行動態的符號執行分析(如,KLEE和Mayhem),也能夠進行多種靜態分析。

這個工具可以用於不同的分析目的,angr在其網站上列出了很多相關的例子,如果感興趣,你可以去看看。不過在本文中,研究人員將會重點關注符號執行的分析功能,你可以把它簡單理解為對程序的分析,通過這些分析,你就可以確定那些執行不同攻擊任務的代碼需要得到哪些通信協議。

由於該工具的複雜性,為了便於理解,研究人員將對創建的代碼進行簡單分析,以說明它的用途,比如下面的這段代碼:https://gist.github.com/halos/15d48a46556645ae7ff2ecb3dfc95d73

angr的分析過程

angr的分析過程大致有以下4步:

1.將二進位程序載入angr分析系統;

2.將二進位程序轉換成中間語言;

3.將IR語言轉換成語義較強的表達形式,比如,這個程序做了什麼,而不是它是什麼。

4.執行進一步的分析,比如,完整的或者部分的靜態分析(依賴關係分析,程序分塊)、程序空間的符號執行探索(挖掘溢出漏洞);

我會在本文中,用代碼模擬一個RAT,它會接收來自函數"call_home"的C&C指令,初始化全局變數『c2_resp』 的值,該變數將包含一些我假定的C&C順序。然後執行『exec_order』函數,根據該結構中包含的信息,該函數將執行一些操作或其他操作。

由於結構的不同欄位所採用的值會在代碼開始運行時被定義為常量,且它們包含隨機值,所以分析人員在分析時,是不能輕易的發現這些C&C線索的。

但是,在模擬的實驗環境中分析惡意軟體時,由於研究人員缺少生成它們的源代碼,所以研究人員只能採用編譯好的二進位文件代碼。以下就是用C語言編譯之前,研究人員從『exec_order』函數中發現的所有內容。

如果再往深的分析一點,研究人員就可以得到一個更容易理解的彙編代碼。

以上這段代碼就顯示的是一個很容易讓人理解的結構,不過由於它是一個有組織的代碼,且由於它的長度也會使其分析變得困難。所以當研究人員深入了解該函數時,可以看到如下圖中的內容。

然而,在日常的惡意軟體中,這些類型的程序的邏輯通常不那麼清楚,並不是因為他們的創建者不知道如何編程,而是因為他們試圖阻礙他們知道將要完成他們創建的研究。

為了用angr工具來研究本文所模擬的樣本,研究人員需要知道4個內存地址的值,以指導angr工具在哪裡以及如何工作:

1.將要學習的代碼是在哪裡開始的?

2.將要學習的代碼在哪裡結束?

3.將要找到哪些部分的代碼?

4.是否可對變數就行修改?

前兩項將為angr工具劃定將要分析的範圍,以評估所有可能的通信過程,從而避免分析那些無用的分析過程,加快分析效率。在第三項中,研究人員將用幾個地址標出想要分析的代碼範圍,並將分析的重點放在這些地方。第四項將指向來自伺服器的「緩衝區」,根據不同的值或其他值,讓分析目標指向研究人員標記的不同重點範圍。

從上圖的代碼中可以看到,分析函數是從地址0x0804844d開始的,因此它被分配給常量START_ADDR。要找到的地址存儲在FIND_ADDRS列表中,例如,從執行分支中添加指令「push str.Creando_file: __ s」的地址0x8048483以創建一個文件(地址為0x804847b的塊)。

研究人員之所以舉出這個代碼示例,只是想指出,要用C語言編譯的可執行文件『a.out』來將分析器初始化為起始地址。另外,研究人員還指出伺服器響應緩衝區(BUFF_ADDR)將成為分析的變數,根據該變數,研究人員是可以找到停止分析的地址。最後,研究人員會利用angr來探索帶有所有這些標記的代碼,並且該工具還會將分析結果以人類理解的方式列印顯示出來。

上圖中出現的第一個條目說的是,如果C&C要命令目標設備的木馬,就必須刪除一個文件(在地址0x80485050處運行的操作),它會發送一個"緩衝區",位元組為「00 E9 BB 64 D4 D4 01 1F AF 78 09 6E 00 00 00 00 00 00 00 00」。

然後,通過explanation/curiosity,顯示如何通過使用BUFF_ADDR內存地址的內容來達到這個地址。應該注意的是,由於angr工具是在位級工作的,因此只有20個位元組的緩衝區出現了相關的分析標記(『c2_resp_0_160[159:128]』)。

第一個約束條件表示第四個DWORD必須包含值0x64bbe900(T_FILESYSTEM,因為它可以在C語言源代碼中看到)。但是,在第三個位元組的內容中會出現三個限制:它不同於0xaff80c17和0xc6e6ef6b,並且還必須包含值0x1f01d4d4。雖然第三個限制就足夠了,但在模擬執行時,如果要讓angr避免進入某些分支,就要讓第三個位元組輸入不同的『if』值。如果查看研究人員創建的C代碼,第三個位元組對應的是『fs_order』欄位,該欄位會首先將其與常量FSO_CREATE(第55行)和FSO_WRITE(第67行)進行比較,當它等於常量FSO_DELETE(第71行)時,就會進入刪除分支。

這些信息都將幫助我們理解通信協議以獲得新的感染指標,建立一個偽裝成攻擊者的伺服器,修改樣本緩衝區的運行方式。除此之外,我們還可以直接通過關注某些功能等方式直接修改樣本來加速分析過程。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

ChessMaster的技術分析及緩解措施
甲方安全建設之Windows橫向移動攻擊的檢測

TAG:嘶吼RoarTalk |