• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Ay's Blog@CNSSUESTC

            [導(dǎo)入]Paper導(dǎo)讀系列之HookFinder: Identifying and Understanding Malware Hooking Behaviors

            最近要看各種paper  但是看的斷斷續(xù)續(xù)的,后面看前面的就忘光了(主要就是太忙……各種私人以及學(xué)習(xí)的是,不過還好申請(qǐng)弄完了 閑下來可以看看書了 哈哈),所以開個(gè)帖子把讀過的paper總結(jié)下,寫個(gè)心得吧。標(biāo)紅的是我的問題~哈哈

             

            原文:HookFinder: Identifying and Understanding Malware Hooking Behaviors

            source2download:點(diǎn)這里

             

            引言:

            這篇文章講述的內(nèi)容小有趣的說,主要介紹了一個(gè)系統(tǒng),把樣本的惡意程序放進(jìn)去能夠自動(dòng)分析出它的hook操作,包括hook了哪里,如何hook的。它結(jié)合一個(gè)特定的“虛擬機(jī)”(這么說不算太貼切 它文章里面用的是system-emulator這個(gè)詞,文章里面說這個(gè)和虛擬機(jī)不用,我估計(jì)是原理相同用途不同而已吧,后面就虛擬機(jī)這么叫吧),在物理層面它能夠獲取到程序執(zhí)行時(shí)的所有寄存器狀態(tài),在系統(tǒng)層面它能夠獲得系統(tǒng)信息,比如進(jìn)程模塊地址之類的東西,就跟windbg類似。然后通過跟蹤寄存器讀寫操作以及結(jié)合系統(tǒng)信息來檢測(cè)出程序的hook行為,它里面測(cè)試的樣例可都是kernel級(jí)別的rootkit喲,還是相當(dāng)強(qiáng)大的一個(gè)東東。

             

            下面就開始吧,通過監(jiān)測(cè)寄存器(system-emulator提供的接口),那么我們便可以掌握內(nèi)存的讀寫情況,更犀利的是我們?nèi)绱吮憧梢员O(jiān)控所有對(duì)內(nèi)存讀寫的操作。然后通過一個(gè)叫Semantics Extrator(SE)的模塊來提取出操作系統(tǒng)層次的信息,打個(gè)比方,我捕獲到0x743292BC這個(gè)要被寫入東西,那么通過SE模塊我可以查出這個(gè)地址是系統(tǒng)內(nèi)核函數(shù)ObReferencebyPointors的函數(shù)空間,然而我又可以通過SE模塊知道我現(xiàn)在運(yùn)行的代碼段是在X驅(qū)動(dòng)模塊中的,那么顯然X驅(qū)動(dòng)就有可能是在修改系統(tǒng)代碼,正在進(jìn)行Data Hook。

             

            聽起來很犀利哇?不過深入分析下去,還是有很多問題要解決的。多個(gè)模塊代碼都進(jìn)行了同樣的hook你又如何記錄存儲(chǔ)這些HOOK信息咧?如何實(shí)現(xiàn)自動(dòng)檢測(cè)HOOK?

             

            那么文章中提出了設(shè)計(jì)了3個(gè)模塊(其實(shí)不止3個(gè) 我把工作相似的模塊合并了):Impact Engine,SE,Hook Detector

            Impact Engine

            何為impact在文中的意思就是改動(dòng),整體翻譯就是改動(dòng)檢測(cè)引擎(個(gè)人YY過來的)。這個(gè)引擎用來監(jiān)控標(biāo)記程序運(yùn)行時(shí),對(duì)系統(tǒng)內(nèi)存讀寫的動(dòng)作,以便下一步的分析。

            這個(gè)引擎分2部分,Impact Marker和Impact Tracker

            Impact Marker

            監(jiān)控惡意代碼中的內(nèi)存讀寫分幾種情況,一種是在代碼中直接進(jìn)行內(nèi)存讀寫,另一種就是惡意代碼通過調(diào)用外部函數(shù)比如memcpy之類的來進(jìn)行內(nèi)存操作,文中主要討論了記錄外部調(diào)用的內(nèi)存操作的策略。

            首先監(jiān)控內(nèi)存讀寫以及寄存器讀寫,但這2個(gè)操作是分開來處理的。對(duì)于外部函數(shù)調(diào)用讀寫內(nèi)存,我們只監(jiān)控外部變量的讀寫,至于外部變量如何判斷很簡單,查看寫入地址如否在線程堆棧的范圍內(nèi),若在則是局部變量,若不在,嘿嘿~外部變量。


            那么對(duì)于寄存器讀寫的操作就顯得容易多了,因?yàn)樵趙indows系統(tǒng)下,返回值是通過eax傳遞的,文中說的是在函數(shù)開始時(shí)記錄eax的值,然后等函數(shù)結(jié)束后在比對(duì)eax的值是否與原來的一樣,如果不一樣,那么函數(shù)包含返回值則標(biāo)記之,如果不一樣,那么函數(shù)返回值是無效的。


            當(dāng)然這里涉及到一個(gè)問題就是惡意代碼會(huì)動(dòng)態(tài)產(chǎn)生可執(zhí)行代碼丫,但是由于我們標(biāo)記了它內(nèi)存分配情況,那么只要在執(zhí)行時(shí)判斷下執(zhí)行的指令是否取自標(biāo)記的內(nèi)存段,若是,就認(rèn)為是惡意代碼自產(chǎn)生的可執(zhí)行代碼,然后對(duì)于這段代碼也采取同樣的監(jiān)控標(biāo)記方式來跟蹤它的輸入輸出。


            Impact Tracker(IT)

            這個(gè)模塊主要用來關(guān)聯(lián)這些標(biāo)記的內(nèi)存操作和內(nèi)存改動(dòng)的。如果在Impact Marker的標(biāo)記中,操作數(shù)的地址或數(shù)據(jù)是被標(biāo)記了的,則標(biāo)記上目的操作數(shù)的地址或數(shù)據(jù)。并且IT模塊對(duì)目的操作數(shù)每個(gè)標(biāo)記分配一個(gè)ID號(hào),并記錄每個(gè)ID號(hào)之間的關(guān)聯(lián),如此一來我們便可以捕獲惡意代碼對(duì)系統(tǒng)生成的改動(dòng),比如惡意代碼是如何改動(dòng)重要數(shù)據(jù)結(jié)構(gòu)的,當(dāng)然這些監(jiān)控對(duì)惡意代碼的磁盤讀寫,設(shè)備掛載,系統(tǒng)例程注冊(cè)同樣有效。因?yàn)檫@些操作的最終原理也不過是生成或改動(dòng)數(shù)據(jù)結(jié)構(gòu)而已。


            Semantics Extractor


            該模塊很簡單,就是從虛擬的系統(tǒng)中提取出需要的信息,比如說進(jìn)程的所有信息,線程的所有信息,驅(qū)動(dòng)模塊的所有信息等等,然后獲得這些需要的信息一般有2種方式,其一就是通過解析一些重要的數(shù)據(jù)結(jié)構(gòu)來獲得,比如EPROCESS,另一種方式就是向虛擬系統(tǒng)中插入一個(gè)模塊,在系統(tǒng)運(yùn)行時(shí)動(dòng)態(tài)收集系統(tǒng)信息,主要通過設(shè)置回調(diào)函數(shù)的方式工作。比如收集進(jìn)程信息,在進(jìn)程創(chuàng)建銷毀的時(shí)候調(diào)用該模塊的處理例程等等。


            此外SE模塊還負(fù)責(zé)解析函數(shù)符號(hào)名,確定是否是惡意代碼進(jìn)行的外部函數(shù)調(diào)用。主要是通過解析PE頭文件來實(shí)現(xiàn),這個(gè)就不累述了,一來我只是略懂,二來看雪上關(guān)于PE的資料我覺得已經(jīng)很透徹了~

             

            HOOK Detector

            這個(gè)模塊的判斷依據(jù)還比較簡單,判斷EIP寄存器載入的數(shù)據(jù)是否是被標(biāo)記了的,如果EIP載入了被標(biāo)記的數(shù)據(jù)(也就是說程序當(dāng)時(shí)運(yùn)行在非惡意代碼模塊的上下文,若不考慮這個(gè),則惡意代碼代碼執(zhí)行的內(nèi)部調(diào)用也會(huì)被誤判為HOOK)并且立即跳轉(zhuǎn)到了惡意代碼的模塊空間或者是惡意代碼分配的內(nèi)存空間內(nèi),則將其定義為一個(gè)HOOK。當(dāng)然這個(gè)辦法僅僅能用于數(shù)據(jù)HOOK,代碼HOOK的話還需另加討論,我們定義說如果在非惡意代碼上下文是運(yùn)行了被標(biāo)記為惡意代碼模塊的篡改數(shù)據(jù),并且EIP載入數(shù)據(jù)也被標(biāo)記并且跳轉(zhuǎn)到了惡意代碼空間,那么這就是一個(gè)代碼HOOK,然而這里又有一個(gè)問題,代碼HOOK和惡意代碼自產(chǎn)生的代碼性質(zhì)是一樣的,那么如何判斷這些被標(biāo)記的代碼是自產(chǎn)生代碼還是HOOK的數(shù)據(jù)咧?很簡單,自產(chǎn)生代碼存在的空間要么是惡意代碼模塊分配的,要么是占用了不屬于任何模塊的數(shù)據(jù)空間,而HOOK的數(shù)據(jù)肯定是覆蓋了系統(tǒng)調(diào)用的空間的,所以簡單的通過SE模塊查一下這段代碼是否在系統(tǒng)調(diào)用空間就OK了,如果是,則判斷為HOOK數(shù)據(jù),如果不是,在驗(yàn)證下是否滿足自產(chǎn)生代碼的條件。

             


            類別:Host Security 查看評(píng)論
            文章來源:http://hi.baidu.com/uestc%5Fay/blog/item/f9bae97af15009e60ad187f9.html

            posted on 2011-01-04 00:06 __ay 閱讀(194) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国色天香久久久久久久小说| 久久精品视频免费| 综合久久一区二区三区| 久久人做人爽一区二区三区| 97久久天天综合色天天综合色hd| 99久久精品无码一区二区毛片| 人妻无码久久精品| 精品无码久久久久国产| 99久久伊人精品综合观看| 精品久久久中文字幕人妻| 2021少妇久久久久久久久久| 久久亚洲精品无码播放| 久久99国产乱子伦精品免费| 亚洲熟妇无码另类久久久| 久久精品国产一区二区三区| 狠狠色综合网站久久久久久久高清 | 亚洲色欲久久久久综合网| 久久久久亚洲av无码专区导航| 久久久久久久国产免费看| 久久久精品国产sm调教网站| 一级女性全黄久久生活片免费| 99久久成人国产精品免费| 亚洲日韩中文无码久久| 91精品国产91热久久久久福利 | 久久丫精品国产亚洲av不卡| 欧美午夜A∨大片久久 | 久久久久久国产精品无码下载 | 日韩乱码人妻无码中文字幕久久 | 久久久久久a亚洲欧洲aⅴ| 久久精品无码专区免费东京热| 日韩电影久久久被窝网| 女同久久| 色狠狠久久综合网| 亚洲欧美一级久久精品| 亚洲国产天堂久久综合| 久久久久无码精品国产app| 久久久久国产精品嫩草影院| 亚洲精品无码久久毛片| 久久人妻无码中文字幕| 久久综合亚洲欧美成人| 成人妇女免费播放久久久|