你知道 Windows Internals 的作者們嗎?或者你知道 Google Project Zero 的 blog 中 Windows 的部分幾乎都是誰寫的嗎?
今天想透過兩場 Keynote 演講的心得和大家分享我心目中在 Windows Security 貢獻最多的兩位大神 Alex Ionescu 和 James Forshaw。
Alex Ionescu 是長期專注於作業系統開發的工程師,也因此在逆向工程作業系統時,強大的背景知識可以讓他在理解作業系統上更加得心應手。
在這場演講中,Alex 談到了一些他在逆向工程 Windows 時會用到的一些資源,也是憑藉著這些積累的經驗,他開發出了一個和 Windows 非常相近的 ReactOS,很推薦所有學習逆向工程的人去聽這場演講,逆向工程不是只有組合語言,更應該以宏觀的角度去思考一個作業系統中的各個元件。
舉例來說,從 Windows 提供開發者的 SDK 可以獲取到一些 Windows 的知識,像是 Header 檔中的一些 Function Names 或是 Structure Names 都能夠讓我們更認識這些組件所提供的功能和可能的行為,Debug Symbol 也能有效幫助我們在執行階段除錯,更加理解 Windows 的設計。
另外,微軟曾經被外洩的各種原始碼也很有幫助,像是 Windows XP SP1 的原始碼,雖然是 Legacy OS,但是仍然有許多元件是沿用至今,我們可以從中交叉驗證我們逆向工程的結果。
此外,我對 Reversing Without Reversing
這句話感觸蠻深的,同樣的 Binary 同樣的工具,不同人就會有不同的分析方式,而 Windows 的逆向工程也絕對不是只是開啟 IDA Pro 看看而已,更重要的是對目標有一定程度的了解,並且根據經驗採用最有效率的方法。
舉例來說,在第21天的 FlareOn 題目 backdoor,我看到有人的解法是比對題目和惡意程式的流程,直接推測出該怎麼拿到 flag,這也很好的詮釋了什麼是 Reversing Without Reversing
。
最後,身為一個在工作中需要大量逆向工程的研究員,在比較過一些 ReactOS 和 Windows 的某些組件後,會發現 Alex Ionescu 真的超猛,很多功能都有在 ReactOS 中實現,甚至是一些和 OS 不直接相關的 Library 都有實現,所以有時候想快速理解 Windows 也蠻推薦直接參考 ReactOS 的設計,再進行交叉驗證。
當我們談到 James Forshaw,除了大頭貼都是熊貓外,我總會想到他在 Windows 的研究有多麼強大,以至於在今年我就看過有國外研究員的研究幾乎都引用他的研究就找出一個新的繞過 Defender 的攻擊手法,換句話說,Windows Security 的財富密碼都來自於 James Forshaw (誤
除此之外,James Forshaw 更讓人印象深刻的是他開發工具的能力,他也從不吝嗇的將工具和相關的研究開源及公開發佈。
那究竟為什麼做資安研究需要開發工具呢?
他提到了開發工具可以更有效率的理解當前的研究主題,並且工具是可以重複使用的。舉例來說,James Forshaw 開發的 OleView、NtObjectManager、TokenViewer 都非常實用,並且這些工具從開發至今都在 Windows Security 的研究上有非常大的貢獻。
舉個例子,我最常使用的 Sysinternals Suite 便是一套非常棒的工具,當中的 Process Monitor ,讓我能很快的對某個程式的行為有初步的認識。還有像是 SysMon 也可以被拿來改成窮人版的 EDR。
如果沒有這類型的工具便需要花費大量時間使用從 debugger 分析或自己從頭開發工具,因此有非常多的資安研究或分析都是因為有這些工具才能夠有效率的進行。
終於來到了 IThome 鐵人賽的第30天,也是我教召的第1天QQ,感謝 IThome 多年來主辦這樣有趣的活動,同時也感謝有在關注我發廢文的讀者。
這是我第一次參加鐵人賽,寫 Blog 也是我在年初給自己的目標,我想以 Blog 的形式紀錄一些資安研究的筆記,因為我發現隨著自己對 Windows 有更多的理解,有更多有趣的想法但卻沒有合適的地方分享。
除此之外,也是希望加強自己的 knowledge base,盡可能將自己知道的攻擊手法復現,並徹底理解所用到的技術細節,我認為這也是學習 Windows Security 最難的部分。
最後,希望我在這30天分享 Windows Security 的知識能夠對許多人有所幫助 XD