發表文章

精選

[DEFCON] 投稿吹水雜談遊記

圖片
前言
因為今年終於成功大肆從大學畢業了(學分在大三就超修完,結果被學校門檻卡了)然後又不小心有上台科碩班,在不知道碩班生會不會很辛苦的情況下 趁著入學前的放鬆一整年的空檔,到處跨國投稿年會演講 實際上在度假(欸),總之今年到年中投稿上 BlackHat Arsenal、VXCON、TWCSA 三個國內外的年會,想說九月入學前再多投稿出去玩 ...



沒想到同時投稿上 HITCON、HITCON Training、DEFCON 啊啊啊,整個六七月根本都在趕各種簡報死線 QQ,不過最期待的還是 DEFCON 啦!以下簡報附上。 thank everyone coming here and listening! it's my slide talking about doing malicious inject by exploit way in #DEFCONhttps://t.co/E75xiVsWEZ — adr (@aaaddress1) August 11, 2018 好了,廢話不多說,對,技術部份都是廢話根本不用講XD 各位大大看簡報就好了,蠻好懂的XD 今天重點在談一些去 DEFCON 玩的廢話。

進入主題(吹水雜談) 年會前一天講師就可以領講師福利 aka 三份一般 Badge 跟一份講師 Badge...
不過就真的只給你講師福利就只是三份 Badge 啊啊啊啊,連個袋子都沒有,超坑。不過 DEFCON 畢竟是技術場子又租這麼大場地還有各種擺攤開銷,好啦...不太意外XD。不過這樣真的對學生而言很燒荷包,講到這個還蠻感謝碩班老師鄭欣明教授協助補助 QQ。
打開之後裝電池還蠻帥的,左邊是一班會眾的 Badge,右邊是講師的深藍 Badge。可以明顯看到主題不同XD(可以看到設計感上左邊強調街頭駭客的風格、右邊是 Speaker 的大演講台,挺酷的!)
有趣的是 Badge 可以互插,像圖上可以看到綠色燈的人就是你自己,而你每跟一個不同類型的人互插就會多一個小紅人XD,例如說有工作人員、擺攤人員、一般會眾、講師、上一屆的戰隊冠軍(黑 Badge)而且 Badge 屁股有 Micro-USB 接口,插上電腦用 Terminal 去吃 /dev/tty 可以看到遊戲畫面,左下角的 Logo 是上下左右方向鍵,右邊 26 字樣則是 +- 按鈕。
而在 10…

Linux ELF Loader Note

之前玩 ELF 一直不懂為啥 _start 走進去後居然是去呼叫:
__libc_start_main(main, __libc_csu_init, __libc_csu_fini)

然後莫名其妙的就走進去 main function 了;有別於 Windows PE _start 進去後就是初始化 CRT 接著呼叫 exit(main(argc, argv, envp))。

看完 [1], [2] 之後大概就可以知道:

1. __libc_start_main 在於 Process 中程式文件被 Mapping 到正確記憶體分配後,負責處理一些初始化的作業,比方說有用到第三方函數庫或全域變數初始化等等都會負責呼叫 __libc_csu_init 來協助完成這些初始化作業(實際初始化方式也僅是透過 ELF 自帶的 .init section 程式碼呼叫、其他第三方函數庫家載後 .init 也得呼叫)

2. __libc_start_main 完成初始化後透過 .plt 來呼叫系統函數來取得 argc, argv, envp 作為參數傳遞給開發者的 main 函數

3. 等待開發者 main 函數返回後,在跳至 .fini section 的程式碼做一些後續關閉 Process 必要的清理作業(比方說記憶體回收之類的)

感覺上大概就是把 Windows 編譯器產出的 CRTStartup 這件事情封裝在 glibc 內分成三塊來處理XD

[1]: https://blog.csdn.net/gary_ygl/article/details/8506007
[2]: https://stackoverflow.com/…/whats-going-on-in-libc-start-ma…
[3]: https://felixzhang00.github.io/2016/12/24/2016-12-24-ELF%E6%96%87%E4%BB%B6%E8%A3%85%E8%BD%BD%E9%93%BE%E6%8E%A5%E8%BF%87%E7%A8%8B%E5%8F%8Ahook%E5%8E%9F%E7%90%86/

[Black Asia Arsenal] puzzCode: 專注開發後門的編譯器, 自帶反逆向、對抗病毒特徵碼定位技術

圖片
前言安安,這篇沒有講任何工具本身細節XD 純粹是個人一些 murmur 的廢文 簡報
專案github.com/aaaddress1/puzzCode
吃我 Source 看細節啦(?)
#murmur
其實事情是這樣 der,去年底忙完一堆工作的事情後發現好像有點閒,然後就收到了這樣的一封信躺在我的 gmail 裡面。畢竟個人覺得自己沒那個屁股能投稿上 BlackHat 或者 DEFCON 這種一線等級的大 Conf。



這封信指出可以投稿你自己的駭客工具到 Black Hat Asia,若被接受,你可以獲得一個攤位和大約 2hr 時間可以讓你 present 你工具特別之處,最棒的是你可以獲得價值六萬塊新台票的入場券!(就是門票啦,那張 Badge)除此之外會贈送大會背包這樣,對一個沒去過 Black Hat 的屁孩如我來說超吸引的啊XD

之前的研究一直都差不多打轉在防毒軟體怎麼設計安全防護上,然後花了一點時間接了 MinGW 編譯器(GCC 在 Windows 分支版本的編譯器)用 C# 寫了一個簡單的 UI,來做到自動化將 C/C++ 原始碼透過編譯器產生 Assembly Script(其實理想狀況用編譯器的 IR Code 會比較恰當,畢竟如果要跨 CPU 架構,你的混淆 Patten 很容易吃大便)然後自幹了簡單的 Assembly 指令混淆邏輯單元、最後再透過組譯器產生出 Object File 與連結器封裝為 *.exe 的 Windows 程式這樣XD

這樣的工具當初構想是:很多基於 YARA 或者其他自定義的惡意程式特徵碼設計概念都是連續組合語言片段檢測 + Hash Check 來確認一隻文件是否具有惡意(正確來說應該是:是否已經被建檔為惡意文件)所以如果能設計一個編譯器自動化做到同份原始碼、每次編譯出的執行程式都會被混淆邏輯單元打散程式碼順序與穿插混淆程式碼,那其實可以做到很強程度的對抗現在一線的防毒軟體(看看那隻有點紅的小傘)

運氣不錯的是:以往 Black Hat 收錄的工具沒有這類型的工具,原本只有備取、最後成功被收錄到 Black Hat Asia 的軍火庫(Arsenal)啦,可參見至:PUZZCODE, MAKE BACKDOORS GREAT AGAIN!


實際擺攤的時候,對你工具有興趣想聽的會在你攤位開始的時間前面卡位等著,然後看…

Windows Shim (ACT) 在 Windows10 下禁止 Inject Dll 系統實作細節原因

圖片
前言 如果你對 Windows Shim (ACT) 不熟是什麼,建議你可以先參考這篇:详解Windows Shim的攻防利用,這篇很不錯的介紹了 Windows Shim 相容性工具如何被惡意濫用進行攻擊。另外還有一篇俄羅斯的文章介紹的也不錯:shim handlers
前陣子在做一份玩具需要做到對單一 Process 每次開機重啟都能穩定 hook 住固定 API 作檢測,第一個想到最穩定的做法當然是 TMD 幫該執行程式打一層補丁 (Shim) 指定該 Process 每次開機重啟都會加載我的 *.dll,接著就可以做熱修復(Hot Patch)這做法很漂亮,一個簡單 *.sdb 就能簡單起到穩定的 *.dll 同一 Process 穩定注入,不過...
對,Windows 10 不給玩這招了,你在 Windows 10 下打上 Inject Dll 的補丁是會被無視的 QQ,最近時間比較充裕 並沒有,只是突然很想知道為什麼不給這樣搞  花了大概一小時的時間把 Windows 7 與 Windows 10 的 Loader 實作細節分析完畢,然後就大概摸出了問題點在哪...囧。
PE Loader (at ntdll.dll) on Windows 7 如果你跟我一樣吃飽太閒(不過其實打這篇文章的時候我好餓喔...好想吃滷肉飯)翻一下 ntdll.dll 的實作你應該可以看到一支 *.exe 被執行起來後,要開始做程式必備初始化的修復動作,這些步驟可以看到在 ntdll!LdrpInitializeProcess 內實作:
如果你有開 IDA Pro 的話上下捲捲捲就可以看到這個函數內在初始化 Process 時候,會按造順序分配堆疊必備的記憶體空間、分配各區段對應在虛擬地址上、修正重定向、最後修正了引入函數表(IAT, Import Address Table)而這幾大修正步驟過程中,根據 Shim 的需求可能會需要在載入 DLL 之前、期間、之後,各階段插入不同的行為來完成打補釘的行為。
每次要讓 Shim 機制介入打補釘時,就會呼叫 ntdll!LdrpLoadShimEngine 函數來載入 Shim 引擎,如果完成該階段的目標後,就會呼叫 ntdll!LdrpUnloadShimEngine 來卸載 Shim 引擎,而 LdrpLoadShim…

WoW64 架構閱讀心得

圖片
參考文獻WoW64 and So Can You Bypassing EMET With a Single Instruction 心得
傳統上 x86 所有系統模組實作都是 ntdll.dll 的函數封裝,最後都會回到 ntdll.dll 的 ZW 函數以 kikifastcall 發送出去就切 Kernel Mode 中斷了。
不過當 WoW64 架構下,需要把 32 位元程式跑在 64 位元架構的 Process 裡,那麼 32 位元的函數資料丟 64 位元在查 SSDT(其實我不是很清楚 64 位元還有沒有 SSDT)就會因為數字存放的基本資料結構 size 不同導致函數呼叫整個爛掉,因此無法直接把 32 位元程式就直接丟在 64 Process 跑(即使 Thread 可以,但架構上 r0 進去會爛掉)
3. 所以在 Win7 架構下會在 TIB 的 fs:[0xc0] 用 uint32_t 欄位(WOW32Reserved)保存了一個 WoW32CPU.dll(32bit) 的函數地址 -- X86SwitchTo64BitMode,也就是 32 位元程式 kikifastcall 原本應該送什麼中斷請求出去,這邊改為用 call dword ptr fs:[0xc0] 就可以直接呼叫到 X86SwitchTo64BitMode API,這個 API 內部實作再幫你把 32 位元的中斷請求參數轉換為 64 位元送給 r0,然後再返還。(這也清楚解釋了為什麼 Win7 64bit 需要把 64 位元的
ntdll.dll 模組放在 4G 以下,不然這個 TIB 欄位保存不了XD)
4. 很多設計很爛的 AntiVirus(AV)甚至是早期版本的微軟防漏洞架構 EMET
的函數監測攔截都是放在 userland、然後 r0 的 hook 強制在每隻 Process 創建時把監測用的 dll 注入到 Process 內做檢測:WoW64 Process 就注入 32 位元的監測 dll 到記憶體裡、64 位元 Process 就把 64 位元監測 dll 注入到記憶體。
5. 所以 WoW64 架構怎麼被濫用?我故意設計一個 x86 PE 跑在 WoW64 架構下,但是 AV 所有監測都放在 userland 的 4G 底下,因此 32 位元 Process 跑在 W…

Garena 釣魚蠕蟲 Dropper 樣本分析(照片.zip)與如何清除病毒

圖片
前言 事情是這樣的,一如反常的我打開我的 macbook、打開虛擬機、打開 Windows、打開 Garena、打開 LoL 想發洩一下 這時候發現一堆人都在密我呢,好害羞啊,可是大家都密我一樣的東西,丟了一份 照片.zip 過來,這引起了我的好奇
註:這篇文章只分析 Dropper 部分,後面還有一支 *.exe 惡意程式有加殼,如果時間比較有空了我才會分析進去他在幹嘛XD,這篇文章主要是分享分析 *.vbe 加密後的 VBScript 的方法與解混淆的技巧。我不會承認是因為我懶得開虛擬機,所以這篇文章都在真實工作電腦內純靜態分析哈哈哈哈哈哈
TL;DR:如何清除病毒? 因為這隻惡意程式把路徑跟檔名都寫死的,所以檢查一下你 Windows 的「啟動」資料夾是否有 r.vbe,跟 C:\programdata\opopopk.exe 這個程式是否存在。把啟動資料夾內的 r.vbe 與 C:\programdata\opopopk.exe 刪除就完成清除病毒惹 惡意壓縮包附件 首先你拿到這份壓縮包後,會看到裡面只有一個「照片.vbe」檔案,類型可見是 VBScript 編碼後的腳本文件 打開這份 *.vbe 文件後,即可見內部是編碼過後的腳本,無法直接觀看到程式碼,你可以透過 VBS decrypter and encrypter 來完成這個解碼的部分,這個編碼解碼有一套固定算法沒有任何技術性,不要浪費人生在這種無意義的東西上
把解碼後的程式碼稍微重新排版後,可以看到他的混淆很簡單,就只是把 VBScript 程式碼以字串方式,把每個 ASCII 碼以數字與逗號做切割保存在 Str 變數內。執行時,再將每個數字轉回文字並組合存在 restorecode 內,回傳 ASCII 組合起來的字串,再透過內建的 Execute 函數將 VBScript 執行起來。所以只要把 Execute 換為 MsgBox 函數: 我們就可以很輕易的把程式碼攔截下來,接著進到下一步驟做分析。
Dropper 核心程式碼

上面是完整攔截下來的 VBScript 的 Dropper 程式碼。
一開始執行起來這一段很好理解,基本就是把自己目前這份混淆過後的 *.vbe 惡意腳本拷貝一份到 Windows 的「啟動目錄」來做到開機自動執行,自動下載惡意程式到本機執行(詳閱後面)
這一部分就只是目標…