Abstract
1. ???????????? rootkits 經常使用 DKOM ( Direct Kernel Object Manipulation ) 技術隱藏自己
2. ??????????? 傳統工具試圖通過線性掃描整個內存區域中的這些隱藏數據結構通過手動指定一些特征。這種方式比較脆弱并依賴于一些數據結構中不重要的特征字段,比較容易被繞過。
3. ??????????? 本文提出了一種自動查找內核數據結構(例如進程數據結構)中特征值的方法,并通過 fuzzing 的方式證明了這些特征值的修改不會引起內核崩潰。
4. ???????????? 使用動態分析的方法,采樣了目標數據結構,獲知了那些域是經常用到的——從而不能被 DKOM ——而使用 fuzzing 證明了剩下哪些域可以被修改而不會引起系統崩潰。
5. ??????????? 實驗中,匹配了現有的所有惡意軟件的特征值,并開發了原型 rootkit 使用我們新發現的特征值
?
操作系統通過創建相關內核對象來登記和審計系統資源, DKOM(Direct Kernel Object Manipulation) Rootkit [3] 則通過修改這些內核對象來隱藏特定資源。 Fu Rootkit 是 DKOM Rootkit 的代表,它通過修改活 動進程列表實現進程隱藏。
Windows 系統枚舉進程使用的是活動進程列表 PsActive ProcessList ,它是一個雙向鏈表,每個結點對應一 個進程的 EPROCESS 數據結構,所有結點通過 EPROCESS 結構中的 ActiveProcessLinks 雙向指針鏈在一起。要 隱藏某個進程,只需修改對應 EPROCESS 的 ActiveProcessLinks ,將其從鏈表中摘除即可。由于系統執行線 程調度使用的是其他的數據結構,因此這樣的修改不會影響進程運行。
Introduction
1. ???? 現有的對 DKOM 的查殺對于一些繞過技術比較無奈,比如
[47] 中說的,許多進程特征碼可以簡單的修改一個進程頭部的比特位從而繞過,而該比特位不會影響進程的正常運行。這引發出下面的問題: 給定數據結構中到底哪些域才是必要的?
2. ???? 特征選擇機制( feature selection mechanism )使用下面兩步決定數據結構中哪些部分對于功能是關鍵的。
?
- 監控操作系統執行,標記哪些域經過讀寫
?
?
- 看哪些域修改過之后不會引起崩潰
?
3. ???? 選定了 robust 域之后,在內核數據結構中收集了許多例子,并使用了動態常量檢測技術【 12 】發現了它們的可以用于簽名的一些值的限制。
?
contributions :
1. ?????????????? 提供了大量證據,現有的特征值都是可以輕易繞過的
2. ?????????????? 開發了系統級的 robust feature 選擇方法
3. ?????????????? 基于發現的 robust feature ,提出了一種產生 signature 的方法
?
paper 的結果可以立即應用于許多當前的安全掃描工具上:例如 XXX
?
Related work
1. ????? 病毒開發者可以修改自己的代碼使之不被檢測到,而對于定長度的多態病毒的可靠性探測已經被證明是 NP 完全問題。
2. ????? 對于網絡蠕蟲的探測也存在類似問題,開始的方法是使用簡單的特征碼來過濾數據包,如 snort 。后來發現檢測多態混雜攻擊也是一個 NP 完全問題。
3. ???? 總之,特征值方法就是一個 NP 完全問題
?
盡管看起來沒前途了,但還是有一些希望的:在病毒代碼中,惡意輸入的語法由攻擊者定義,但是其語義只要保持不變就好了。而 rootkit 中, kernel 數據結構的語法由 OS 控制,攻擊者只能修改包含在結構體中的數據,并且不能搞壞原有功能。
?
1. ???? 許多方式可以找到隱藏進程:【 18 】跟蹤了 CR3 寄存器的值,當虛擬機執行的時候,來區分一個單獨的虛擬地址空間。【 34 】通過檢查調度器的線程表來查找隱藏進程,但是繞過這種方法的惡意程序也已經出來了【 1 】。【 47 】【 35 】【 43 】描述了修改內核數據結構中的某些位而不會引起異常。
?
Overview :
一個掃描器的范例
一個隱藏的范例:將 Eprocess 結構體的 size 設成 0x00 ,這樣進程可以被調度器調度,但不會出現在任務管理器中
?
架構:分 3 部分
1. ?????????????? 抽樣我們選的數據結構,看哪些 field 最常用,從未用到的部分可以被 attacker 控制
2. ?????????????? 最常訪問的域進行 fuzz ,決定哪些可以被修改而不會 crash 的部分,也可以被 attacker 控制
3. ?????????????? 收集正確的例子,基于其建立 signature
?
1. ?????????????? 抽樣和 fuzzing 階段分別基于 Xen 和 vmware 實現。 xen 能獲得監控內存的能力,而 vmware 可以存儲狀態
2. ?????????????? 修改 xen 代碼,將包含監控數據的頁 Present 位置 0 ,這樣訪問時可以實時記錄
3. ?????????????? fuzzing 的幾種數據類型: 0 ,隨機,隨機素數,隨機聚合類型(如結構體)
4. ?????????????? signature 的生成: 4 種檢測: 0 ,常量,按位與( bitwise and ),對齊
?
討論:
1. ??????????????? 對 profile 和 fuzzing 的評估: network_listener 31337 端口測試,看是否正常
2. ?????????????? > 對 signature 的生成的評估
?
實驗結果:
最終的準確性對比 psscan2 和 PTFinder ,可以發現隱藏進程
?
缺點:
如何保證 fuzzing 的覆蓋面足夠完全
采樣階段也不可能將每個內核數據結構都添加進來
這樣還是會有遺漏
?
另:除了 Eprocess 結構體外,還有別的方法可以隱藏 rootkit 嗎?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
