• <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   管理


            AV色综合久久天堂AV色综合在 | 久久精品国产2020| 欧洲国产伦久久久久久久| 一级做a爰片久久毛片免费陪| 欧美久久久久久| 2021久久国自产拍精品| 久久久久免费视频| 久久精品中文无码资源站| 国产一区二区精品久久岳| 精品国产青草久久久久福利| 色偷偷888欧美精品久久久| 久久精品国产色蜜蜜麻豆| 国内精品久久久久久不卡影院| 久久久久久伊人高潮影院| 四虎国产精品免费久久5151| 成人久久免费网站| 亚洲精品国产自在久久| 亚洲国产精品久久久久| 少妇人妻88久久中文字幕| 亚洲欧洲久久久精品| 88久久精品无码一区二区毛片| 久久天天躁狠狠躁夜夜网站 | 伊人热人久久中文字幕| 精品国产乱码久久久久软件| 久久99精品久久久久久秒播| 国产精品美女久久久| 新狼窝色AV性久久久久久| 亚洲国产综合久久天堂 | 99re久久精品国产首页2020| 一本色道久久综合| 久久亚洲精品无码播放| 国产精品成人久久久久三级午夜电影| 久久亚洲国产成人精品性色| 亚洲中文字幕久久精品无码喷水| 日韩美女18网站久久精品| 久久久久女教师免费一区| 国产精品久久久久乳精品爆 | 91精品免费久久久久久久久| 国产精品99久久精品| 久久精品国产亚洲AV大全| 国产美女久久精品香蕉69|