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

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