iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 18
1
Security

資事體大 毒擋一面 - 資安防護深入淺出系列 第 18

[Day18] 行為分析-逆向工程的屠龍刀 ─ 動態分析技術

前一篇我們提到了加殼技術對程式及電腦病毒的保護作用,但一般免費的商用殼的保護效果已經大不如前了,因此有絕大多數程式與病毒都會偏好私有殼,也就是自製殼,以獨特的加密與加壓邏輯保護程式及病毒。

但不論是加密殼或加壓殼,單純使用之前所提過的工具是很難以解析出病毒的行為...
我真是猜不透你呀
今天就讓我們來介紹動態分析技術吧!!

1. 什麼是動態分析技術

動態分析技術很像是一般在 Programming 中 debug 的技巧,但不是在 debug,比較像是將程式拆解成逐步的行為,以跟隨程式每一步究竟做了哪些事,比方說建立了一個文件、調用了某個 DLL 檔或是搜尋文件進行感染等等。在 debug 中若遇到分支行為時,譬如 12 月 25 日會觸發一分支的行為,而非 12 月 25 日則觸發另一種行為,也可以修改條件來使 debug 路線能照自己想走的分支繼續前進。

在使用 IDA 或 Hiew 進行分析時,較難以觀察出即時的暫存器值。使用動態分析技術可以即時觀察到暫存器的值,便於觀測利用暫存器進行加密運算時的解密行為。

2. 有哪些動態分析工具

目前較常使用的有 OllyDBG、WinDBG、Immunity Debugger 等等,小編使用的是 OllyICE,與 OllyIDBG 類似,但因為使用的華人多,因此繁體中文化自然就會誕生囉,OllyICE即是中文版的 OllyDBG,並且附加了一些功能。如果跟我一樣很懶得看英文的也可以去一些資安相關的論壇找找中文化的 OllyDBG 使用。

*目前 OllyDBG 尚未支援 64-bit。

載點

OllyDBG http://www.ollydbg.de/

3. 要如何使用呢

首先在安裝好 OllyICE 後,可以直接透過拖拉,將文件拉至 OllyICE 上,可以看到介面上有四個視窗包括:
四個介面

  1. 逆向視窗:顯示為 OllyDBG 進行資料分析後所解析的程式內容(解析為 X86 組合語言),載入後的第一行即為程式的進入點(Entry point),除了解析出程式碼外,還會顯示使用者目前逐步分析到哪一行程式碼。
  2. 暫存器視窗:顯示目前各種暫存器(registers)所儲存的數值,一般 32-bit 的程式,暫存器就會是 32-bit。
  3. 資料視窗:顯示為目前記憶體中的位置與數值。
  4. 堆疊視窗:顯示堆疊(stack)內容的視窗。

另外在功能列 → 檢視還有像是斷點視窗、記憶體視窗、例外處裡(SEH)視窗等等,有興趣的人可以自己去摸索一番。

常用的快捷鍵包括
設定中斷點 (F2)
開啟一個新的可執行程式 (F3)
暫時停止被 Debug 程式的執行 (F12)
單步進入被 Debug 程式的 Call 中 (F7)
直接穿過被 Debug 程式的 Call (F8)
執行選取的程式進行 Debug (F9)
重新載入當前 Debug的程式 (Ctrl+F2)
執行直到返回 (Ctrl+F9)
追蹤時略過被 Debug 程式的 Call (Ctrl+F12)
當前 Debug 的程式 (Alt+F2)
顯示記憶體視窗 (Alt+M)
顯示斷點視窗 (Alt+B)

4. 實例操作

我們使用前篇所提過的 UPX 商用殼來做 OllyICE 的使用說明吧!!

首先我們以電腦中必備的小算盤-calc.exe 作為範例,先對它進行 UPX 加殼,經過 UPX 加殼後包括 MD5、sha256、PEID 以及 BinText 皆可得知為不同的檔案。
檢驗檔案內容

首先我們將加過 UPX 殼的小算盤拉到 OllyICE,在程式進入點 1020200 處 可以看到 pushad 指令,有去查指令的應該就知道 pushad 是將一般暫存器 push 進 stack 裡暫存,UPX 殼的起點通常都是這個指令。我們接著點 F7 或 F8 逐步執行,一直到 1020229jb 1020218 會檢查條件往回跳至 1020218 的位址,這就是第一個解密的迴圈(Loop)了,如下圖所示。
step1

在位址 1020218 的指令為 mov al, byte ptr ds:[esi],將 esi 指到位址的 1 個 byte 值寫到 al 裡,接著 inc esi 將 esi 中的值(也是一個位址)加 1,接著 mov byte ptr ds:[edi], al,以及 inc esi,以上四個步驟就只是將 esi 所指到的資料複寫至 edi 所指到的位址,並在每次迴圈將 esi 與 edi 的位址 +1。

根據以上我們可以統整一下解密所要觀察的關鍵,

解密關鍵

  1. 取值的位址,如範例中的 esi。
  2. 寫入的位址,如範例中的 edi。
  3. 脫離迴圈的條件,有許多種可以做為解密完成的條件,如解密範圍大小、檢查當前解密位址是否為最後一個解密位置等等。
  4. [optional] 解密邏輯,e.g. and、or、xor、add、sub 等等,有解密才會有這部份。

接著我們來觀察寫入後的值是什麼吧,首先在暫存器視窗的 edi 的值(1001000)上按右鍵,並點選資料視窗中跟隨(Follow in dump),在資料視窗中會跳到 10101000 的位置,接著在資料視窗中按右鍵 → 備份(Backup)→ 建立備份(Create a backup),之後只要這段記憶體裡的資料有變更將會以紅字顯示,如下圖。
追隨位置

讓我們來加快速度,跳過逐步執行迴圈的部份,點選 102022B 的位址,也就是 mov eax, 1 指令處,按下 F4 即可快速從當前逐步的指令行移至 102022B 的位址,再來觀察到資料視窗,疑...怎麼沒有任何變化,此時可以點 Ctrl + F2 重新載入程式再去觀察寫入來源的 esi,就可以知道這迴圈僅寫入 2 個 00 的 bytes,所以不會有變化。

繼續加快速度,逐步執行到 10202B6 時會有個 jmp 102021E,又回到前面了~這時再次跟隨 edi 的位址並直接在 102022B 的位址按下 F4,可以看到資料視窗開始出現一些值囉。
step2

越來越快~越來越快~經過一次又一次的迴圈後,在 102037D 的位址可以看到 popad,我們在這個位址上按 F2 設定中斷點,再按 F9,這時程式會在執行至中斷點位址的程式碼前停下來,在UPX 殼的最後就會將當初 pushad 時存放在 stack 中的暫存器值放回至暫存器中,這時只要在按一下 F7 或 F8 即會將暫存器值還原。
popad

最後最後~看到 102038B 的位址有個 jmp 1012475,再跳過去後即是原本的小算盤了,下圖左邊是未加殼的小算盤,右邊則是剛剛脫殼小算盤後,
upx_unpack
你會發現,疑~是一樣的,這就表示你已經脫殼完成囉!接著就能夠更進一步分析小算盤的行為了。

在這次的例子我們使用了 UPX 殼來做純動態分析,也發現了其中用了許多次迴圈,但在OllyDBG中卻不是那個直接可以看得出是迴圈,因此可以在動態分析時搭配著使用 IDA ,IDA 的圖像視窗能夠幫助你較快速的找到解密的位置,而 OllyDBG 可以快速地得到解密後的資料,這兩件工具的搭配絕對是...

希望各位也能夠親自動手試試看,就能夠體會這其中的奧妙了!!

希望有興趣的讀者也能夠點個追蹤,有任何問題或有想多了解的地方也可以回覆在文章底下唷,謝謝你們XDDDD!


上一篇
[Day17] 行為分析-成為逆向大師的第一步-秒懂加殼技術
下一篇
[Day19] 病毒介紹-暗箭難防!你被感染了嗎?-感染型病毒
系列文
資事體大 毒擋一面 - 資安防護深入淺出31

1 則留言

0
tex19990311
iT邦新手 5 級 ‧ 2018-12-26 22:27:47

感謝您的教學,想了解還有其他管道可以了解到相關知識嗎? 像是論壇網站、書本之類的,謝謝!

小茶 iT邦新手 5 級‧ 2019-01-12 10:50:52 檢舉

Hi tex19990311,抱歉太晚回復

管道非常多喔!台灣有蠻多資安社團 像是 Hitcon、TDOH、ISDA、UCCU 等等,不定期會開課或是以研討會形式請講者分享資安經驗,可以 follow 他們的 FB 粉絲團。或是部分大學資安社團偶爾會開對外的課程,如果對 Hitcon 有興趣的話可以請教看看虎虎大大虎虎喔,偷偷 cue 一下專業人妻。

論壇可以看一下"看雪論壇"的文章 https://www.kanxue.com/

書的話在初學逆向分析可以看這本喔!書中有蠻清楚的教學及簡單範例手把手 https://www.books.com.tw/products/CN11116201
如果想看新的駭客手法或新漏洞可以在 Twitter 上用 tag 搜尋一些專家或組織的 po 文唷,比方說 #Malware、#Botnet、#ransomware 等等
或是隨時看一下一些資安業者的 blog,很多會帶有攻擊手法分析以及代碼的解析,給你一些連結參考喔

  1. Fortinet https://www.fortinet.com/blog
  2. Fireeye https://www.fireeye.com/blog.html
  3. Palo Alto https://unit42.paloaltonetworks.com/
  4. Kaspersky https://www.kaspersky.com/blog/

有些 e-learning 平台有資安相關課程,像我個人偏好 Udemy 平台,因為常常有優惠 ($10美金) 超便宜,可以依照不同目的購買課程,像考證照、學習技術等等
udemy
當然管道還很多很多,如果有哪些我沒列上的學習管道也歡迎底下留言讓大家知道唷,感謝您的留言

我要留言

立即登入留言