日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

CSS09-Countering Kernel Rootkits with Lightw

系統(tǒng) 2489 0

摘要
Kernel rootkit通過修改控制數(shù)據(jù)或者內(nèi)核中的鉤子而劫持控制流,從而隱藏自己的存在。因此保護(hù)這些鉤子函數(shù)成為一個(gè)關(guān)鍵問題(引出出問題了)。但是有許多從內(nèi)核堆中動(dòng)態(tài)分配的鉤子,并且與其它內(nèi)核數(shù)據(jù)混在一起,這造成了很多難度。另外,缺少靈活的商業(yè)硬件支持,造成了所謂的保護(hù)粒度溝(內(nèi)核鉤子的保護(hù)要求byte級(jí)別的粒度,但是商業(yè)硬件只支持頁級(jí)別的保護(hù))。
為解決這些問題,本文提出了HookSafe的概念,基于hypervisor的輕量級(jí)的系統(tǒng),可以保護(hù)guestOS中幾千個(gè)內(nèi)核鉤子免遭劫持。我們方法的一個(gè)關(guān)鍵點(diǎn)是我們觀察到一個(gè)內(nèi)核鉤子,一旦初始化,可能會(huì)頻繁的進(jìn)行讀訪問,但極少進(jìn)行寫訪問。這樣,我們可以分配這些內(nèi)核鉤子到一個(gè)專用的頁對(duì)齊的內(nèi)存空間,然后使用基于頁面的保護(hù)管理對(duì)鉤子的訪問。我們開發(fā)了一個(gè)HookSafe的原型并用其保護(hù)了geustlinux的5900多個(gè)內(nèi)核鉤子。而使用了9個(gè)rootkit的實(shí)驗(yàn)證明了HookSafe可以有效的抵御內(nèi)核鉤子劫持,并且開銷很小(只有6%的性能下降怎么算出來的……)。

Introduction
之前對(duì)于rootkit的防御的研究可以粗略分拆成3類:
1. 例如Panorama,HookFinder,K-Tracer和PokeR等重點(diǎn)分析rootkit行為。
2. 通過檢測rootkit感染后特定癥狀來監(jiān)控rootkit的工具,如Coilot,SBCFI,VMwatchter等。
3. SecVisor,Patagonix和NICKLE等通過組織惡意rootkit代碼的執(zhí)行來保持內(nèi)核代碼的完整性,但這種防御可以通過return-oriented的rootkit【11】來繞過:首先修改內(nèi)核控制流(如劫持函數(shù)指針或者返回堆棧的地址),然后發(fā)動(dòng)攻擊。

從上面可以看出,除了保護(hù)內(nèi)核代碼的完整性,保護(hù)相關(guān)內(nèi)核控制數(shù)據(jù)以保證內(nèi)核控制流的完整性也是很重要的。
本文中,如果內(nèi)核數(shù)據(jù)在kernel的執(zhí)行過程中的某個(gè)點(diǎn)被裝入了PC寄存器,那么該內(nèi)核數(shù)據(jù)就被當(dāng)做控制數(shù)據(jù)。
有兩種主要的內(nèi)核控制數(shù)據(jù):返回地址和函數(shù)指針
返回地址的研究已經(jīng)很多,而我們的工作主要集中于保護(hù)函數(shù)指針
在本文中 function pointers = kernel hook

之前的方法:
為保護(hù)kernel hook,一個(gè)直覺上的方法是利用硬件的頁面保護(hù)機(jī)制,任何的對(duì)于包含kernel hook的寫指令都會(huì)被監(jiān)控。這個(gè)方法,如果只有很少的kernel hook并且這些hook都沒有跟經(jīng)常修改的內(nèi)存數(shù)據(jù)位于一起,可以工作的很好。但在Linux或Windows中,存在著幾千個(gè)hook,并且這些kernel hook分布在整個(gè)內(nèi)核空間。而且許多kernel hook可能從內(nèi)核堆中動(dòng)態(tài)分配,并跟其他的可寫入的內(nèi)核數(shù)據(jù)位于同一個(gè)物理內(nèi)存頁面上。因此上面的方法不可行。

本文的方法:
基于hypervisor,我們提出一個(gè)基本的challenge,命名為protection granularity gap,硬件提供頁面級(jí)別的保護(hù),而我們需要的是byte級(jí)別的粒度。為解決這個(gè)challenge,我們觀察到,kernel hooks,一旦初始化,基本上不會(huì)再改變它的值。這啟發(fā)了我們將kernel hooks放到一個(gè)指定的頁對(duì)齊的內(nèi)存中,引入一個(gè)很薄的hook indirection 層次,來管理對(duì)所有的hook的訪問通過物理的頁面保護(hù)機(jī)制。

Problem Overview
rootkit分為KOH和DKOM兩類,96%的KOH:劫持kernel的控制流通過劫持代碼hook或者數(shù)據(jù)hook【31,32】。Code hook是文本段,比較方便保護(hù)。Kernel data hook通常都是函數(shù)指針,存放于兩個(gè)內(nèi)存區(qū)域中,一個(gè)是動(dòng)態(tài)分配的內(nèi)存區(qū)域如內(nèi)核的堆,另一個(gè)是預(yù)先分配的內(nèi)存區(qū)包括數(shù)據(jù)段,bss段和內(nèi)核引導(dǎo)區(qū)中。HookSafe保護(hù)這兩塊內(nèi)存區(qū)域

使用QEMU分析了Ubuntu8.04,證明了protection granularity gap的存在。找到5881個(gè)kernel hook,分布在41個(gè)物理頁面上。并統(tǒng)計(jì)了內(nèi)存頁面寫的次數(shù)與觸發(fā)hook寫的次數(shù)的比率。結(jié)果為1%

本文中假設(shè)系統(tǒng)有一個(gè)可信根,例如tboot(信任鏈?)。使用這個(gè)可信根,可以安全的裝入hypervisor,確保guest系統(tǒng)的完整性。同時(shí)假設(shè)運(yùn)行時(shí)hypervisor也是完整的。本文不考慮對(duì)于hypervisor的攻擊,如SMM【14】等。

HookSafe Design
為提高性能,對(duì)hook的讀和寫的操作分開對(duì)待,以提高性能,讀操作在guestOS內(nèi)部完成,減少了一次內(nèi)存拷貝。

整個(gè)hooksafe分為兩步:離線統(tǒng)計(jì)和在線檢查
1. Offline hook profiling為每一個(gè)受保護(hù)的hook找到HAP集合(HAP就是訪問kernel hook的哪些指令),使用了QEMU。受保護(hù)的hook集合通過對(duì)兩個(gè)內(nèi)存區(qū)的如何掃描得到:每4byte檢查一次,如果只想某個(gè)內(nèi)核函數(shù)的首地址,則認(rèn)為是一個(gè)hook
2. Online Hook protection:


<!-- [if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>ZH-CN</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> <w:UseFELayout/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--> <!-- /* Font Definitions */ @font-face {font-family:宋體; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:"\@宋體"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:宋體; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; mso-ascii-font-family:Calibri; mso-fareast-font-family:宋體; mso-hansi-font-family:Calibri; mso-font-kerning:0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:94641593; mso-list-template-ids:-721883090;} @list l0:level1 {mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l1 {mso-list-id:339892017; mso-list-template-ids:-1799982024;} @list l1:level1 {mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l1:level2 {mso-level-number-format:alpha-lower; mso-level-tab-stop:72.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l2 {mso-list-id:774137808; mso-list-template-ids:-746562958;} @list l2:level1 {mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l2:level2 {mso-level-number-format:alpha-lower; mso-level-tab-stop:72.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l2:level1 lfo1 {mso-level-start-at:2;} @list l2:level1 lfo2 {mso-level-start-at:3;} @list l2:level1 lfo3 {mso-level-start-at:0;} @list l2:level1 lfo4 {mso-level-start-at:0;} @list l2:level2 lfo4 {mso-level-start-at:2;} @list l2:level1 lfo5 {mso-level-start-at:0;} @list l2:level2 lfo5 {mso-level-start-at:3;} @list l2:level1 lfo6 {mso-level-start-at:0;} @list l2:level2 lfo6 {mso-level-start-at:4;} @list l1:level1 lfo8 {mso-level-start-at:2;} @list l1:level1 lfo9 {mso-level-start-at:0;} @list l1:level1 lfo10 {mso-level-start-at:3;} @list l1:level2 lfo10 {mso-level-start-at:0;} @list l1:level1 lfo11 {mso-level-start-at:4;} @list l1:level2 lfo11 {mso-level-start-at:0;} @list l1:level1 lfo12 {mso-level-start-at:5;} @list l1:level2 lfo12 {mso-level-start-at:0;} @list l0:level1 lfo14 {mso-level-start-at:2;} @list l0:level1 lfo15 {mso-level-start-at:3;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} --> <!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Calibri","sans-serif";} </style> <![endif]-->

<!-- [if !supportLists]--> 2. ?????? <!-- [endif]--> Online Hook protection

<!-- [if !supportLists]--> 3. ??????
CSS09-Countering Kernel Rootkits with Lightweight Hook Protection
?<!-- [endif]--> <!-- [if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="圖片_x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:294.75pt;height:199.5pt;visibility:visible" mce_style="width:294.75pt;height:199.5pt;visibility:visible"> <v:imagedata src="file:///C:\DOCUME~1\jianglei\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.png" mce_src="file:///C:\DOCUME~1\jianglei\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.png" o:title="clip_image001"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

<!-- [if !supportLists]--> a. ? <!-- [endif]--> 啟動(dòng):為受保護(hù)的 kernel hook 分配空的內(nèi)存區(qū),將 kernel hooks 從原來的位置拷貝到新的區(qū)域吧(原來的代碼還要保留,以方便代碼的返回,相當(dāng)于多使用了一塊內(nèi)存)。 HAP 要繞過原來的位置,轉(zhuǎn)到新的 shadow memory copy

<!-- [if !supportLists]--> b. ? <!-- [endif]--> 運(yùn)行時(shí)讀寫的攔截:為校驗(yàn)寫數(shù)據(jù)的合法性,要求寫入的值必須在采樣過程中出現(xiàn)過(可見采樣過程需要大量的數(shù)據(jù))

<!-- [if !supportLists]--> c. ? <!-- [endif]--> 運(yùn)行時(shí)對(duì)動(dòng)態(tài)分配的 hook 的跟蹤:動(dòng)態(tài)的 hook 基本上都位于動(dòng)態(tài)分配的內(nèi)核對(duì)象中,而內(nèi)核對(duì)象的分配時(shí)使用 slab 來進(jìn)行的,只要監(jiān)控對(duì) slab 的分配和 free 就好。另外一個(gè) challenge 是在 HookSafe 運(yùn)行前,就已經(jīng)有對(duì)象動(dòng)態(tài)分配了,但是任何動(dòng)態(tài)分配的 object 都必須能以某種方式進(jìn)行訪問,這樣來跟蹤已經(jīng)分配的 object

<!-- [if !supportLists]--> d. ? <!-- [endif]--> 硬件寄存器的保護(hù):保護(hù) GDT LDT ,以及 DMA

?

實(shí)現(xiàn):

<!-- [if !supportLists]--> 1. ?????? <!-- [endif]--> Offline Hook Profiler :標(biāo)記,監(jiān)控訪問 hook 的指令并記錄其值,利用了 QEMU 的二進(jìn)制翻譯技術(shù),添加了自己的監(jiān)控代碼。

<!-- [if !supportLists]--> 2. ?????? <!-- [endif]--> Hook 轉(zhuǎn)向:替換找到的 HAP 指令,用 jmp 指令來代替。在 shadow memory 中處理完后,跳轉(zhuǎn)回去原來的指令流執(zhí)行。

<!-- [if !supportLists]--> a. ? <!-- [endif]--> 指令的替換有些問題( X86 的指令長度是不定的): jmp 指令取 5byte 的長度,但原來的指令可能大于 5byte ,也可能小于 5byte ,這樣不能直接在原指令中進(jìn)行替換進(jìn)行跳轉(zhuǎn)(可能會(huì)覆蓋后面的指令,而后面調(diào)回來執(zhí)行需要后面的指令),采用了這樣一種方式:將原來的函數(shù)轉(zhuǎn)化成的二進(jìn)制指令代碼拷貝一份新的并在新的上面修改,而原指令開頭部分也修改一下,指向新指令的起始位置,這樣不會(huì)對(duì)原來的指令造成破壞。
CSS09-Countering Kernel Rootkits with Lightweight Hook Protection

<!-- [if gte vml 1]><v:shape id="圖片_x0020_2" o:spid="_x0000_i1026" type="#_x0000_t75" style='width:258pt; height:162pt;visibility:visible'> <v:imagedata src="file:///C:\DOCUME~1\jianglei\LOCALS~1\Temp\msohtmlclip1\01\clip_image003.png" mce_src="file:///C:\DOCUME~1\jianglei\LOCALS~1\Temp\msohtmlclip1\01\clip_image003.png" o:title="clip_image002"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

<!-- [if !supportLists]--> 3. ?????? <!-- [endif]--> 運(yùn)行時(shí) LKM Hook 的跟蹤

監(jiān)控兩個(gè) slab 分配函數(shù)。在這兩個(gè)函數(shù)返回前,看分配的 slab 是不是指定的對(duì)象。

challenge :如何精確定位 hooks 的地址。

解決: hooks LKM 中的相對(duì)偏移量是固定的,只要找到 LKM base address 就好。問獲得 LKM 的基地址,利用了 virtual machine introspection 10 23 26 】技術(shù)。

<!-- [if !supportLists]--> 4. ?????? <!-- [endif]--> 內(nèi)存保護(hù)

<!-- [if !supportLists]--> 5. ?????? <!-- [endif]--> 系統(tǒng)調(diào)用轉(zhuǎn)向優(yōu)化

?

DISCUSSION

這種方法的采樣集的獲得是最大的問題,如何得到完整的采樣集

可以與目前的靜態(tài)方法相結(jié)合

?

相關(guān)工作

<!-- [if !supportLists]--> 1. ?????? <!-- [endif]--> Kernel rootkit prevention SecVisor 26 】使用硬件方法保護(hù)代碼完整性。 Patagonix 也利用 hypervisor 檢測二進(jìn)制指令。 Lares 是跟本文最相關(guān)的工作。

<!-- [if !supportLists]--> 2. ?????? <!-- [endif]--> Kernel Rootkit Dection :檢測 rootkit 是否出現(xiàn)

<!-- [if !supportLists]--> 3. ?????? <!-- [endif]--> Kernel Rootkit Analysis :采樣 rootkit 的行為模式


?

?

?

?

?

?

CSS09-Countering Kernel Rootkits with Lightweight Hook Protection


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 嫩江县| 莫力| 双辽市| 东港市| 武强县| 织金县| 凤冈县| 琼海市| 肃宁县| 承德县| 中山市| 视频| 贞丰县| 宁都县| 楚雄市| 光山县| 永昌县| 渑池县| 九江市| 巧家县| 延寿县| 栾川县| 富宁县| 紫云| 平和县| 乳山市| 清远市| 南充市| 华坪县| 资阳市| 临湘市| 弥勒县| 乌恰县| 凤山市| 疏勒县| 鲁甸县| 廉江市| 五河县| 南皮县| 军事| 罗山县|