九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
從流氓軟件說說DLL動(dòng)態(tài)插入技術(shù)與Rootkit技術(shù)

從流氓軟件說說DLL動(dòng)態(tài)插入技術(shù)與Rootkit技術(shù)

第一篇


從技術(shù)角度解析流氓軟件

作者:不詳 文章來源:華盟收集 點(diǎn)擊數(shù): 144 更新時(shí)間:2007-8-13 1:21:14


    早期,流氓軟件在沒有被正式定性為惡意程序時(shí),流氓軟件使用的技術(shù)比較簡單,往往是修改主頁,使用戶只要一登陸瀏覽器,就自動(dòng)跳轉(zhuǎn)到流氓軟件提供的廣告網(wǎng)址,或者安裝到系統(tǒng)中后,私下收集用戶的信息發(fā)送出去。而后來,隨著利益的驅(qū)動(dòng)和流氓軟件正式作為惡意程序被反病毒廠商絞殺,流氓軟件采用的技術(shù)也越來越先進(jìn),如今已經(jīng)形成了與殺毒軟件對(duì)抗的態(tài)勢(shì),魔道之爭(zhēng)真正進(jìn)入白熱化。
  了解了它們使用的技術(shù),會(huì)對(duì)它們有一個(gè)更加清晰的認(rèn)識(shí),以下便是流氓軟件使用的經(jīng)典技術(shù)。

  秘密潛入-流氓軟件的隱藏技術(shù)

  隱藏是流氓軟件的天性,也是病毒的一個(gè)特征,任何流氓軟件都希望在用戶的電腦中隱藏起來不被發(fā)現(xiàn),由于隱藏的目的,衍生出隱藏的技術(shù)。

  首先是隱藏窗口。我們知道,在Windows操作系統(tǒng)下,所有的程序執(zhí)行時(shí)都是以窗口的形式出現(xiàn)的,每個(gè)窗口都有不同的屬性,流氓軟件的目的就是不想為人所知,因此它們?cè)谶\(yùn)行的過程會(huì)將自己的程序窗口的屬性設(shè)為“不可見”,這樣用戶就看不到程序的窗口了。

  但是,我們知道,每個(gè)程序運(yùn)行時(shí)雖然用戶看到的是窗口,但是對(duì)于系統(tǒng)來說,其實(shí)是執(zhí)行了一個(gè)進(jìn)程,對(duì)于稍微專業(yè)的用戶來說,雖然窗口不能看見,但是程序產(chǎn)生的進(jìn)程卻是很容易通過系統(tǒng)的任務(wù)管理器看到,從而使流氓軟件暴露。因此便出現(xiàn)了隱藏進(jìn)程技術(shù)。

  隱藏進(jìn)程其實(shí)是調(diào)用了微軟的一個(gè)未公開函數(shù),將流氓軟件本身注冊(cè)為服務(wù),這樣系統(tǒng)的任務(wù)管理器就無法顯示這類程序的進(jìn)程了,從而達(dá)到了隱藏自己的目的。

  對(duì)于一些細(xì)心的用戶來說,電腦出現(xiàn)了新的文件會(huì)引起他們的懷疑,因此流氓軟件作者又采用了隱藏文件技術(shù)。它們?cè)诎惭b時(shí)會(huì)將自身拷貝到系統(tǒng)目錄,然后將文件的屬性設(shè)置為隱藏,這樣,用戶如果采用的是默認(rèn)系統(tǒng)設(shè)置,則就無法看到他們。

  但是,這些都是初級(jí)的隱藏技術(shù),對(duì)電腦熟悉的用戶,只要利用系統(tǒng)提供的工具就可以找到這些流氓軟件的蛛絲馬跡,或者安裝一個(gè)防火墻軟件,只要有程序訪問網(wǎng)絡(luò),立刻就會(huì)報(bào)警,從而能夠暴露流氓軟件的行蹤。

  我中有你-流氓軟件的線程插入技術(shù)

  為了更好地隱藏自己,流氓軟件開始大量采用線程插入技術(shù)。

  上面講到,一個(gè)程序進(jìn)入系統(tǒng)中,會(huì)首先產(chǎn)生文件,該文件運(yùn)行時(shí),會(huì)產(chǎn)生窗口,在內(nèi)存中產(chǎn)生進(jìn)程。進(jìn)程說白了就是一個(gè)被激活了的程序文件。而進(jìn)程又會(huì)產(chǎn)生許多線程。

  線程是Windows系統(tǒng)為程序提供的并行處理機(jī)制,它允許一個(gè)程序在同一時(shí)間建立不同的線程,完成不同的操作。另外,由于Windows操作系統(tǒng)為了提高軟件的復(fù)用性,減少重復(fù)開發(fā)的開銷,采用了動(dòng)態(tài)鏈接庫機(jī)制,即將一些公用的程序放在DLL文件中,程序不用包括這些代碼,只要在運(yùn)行時(shí)對(duì)這些DLL文件直接進(jìn)行調(diào)用就可以完成各種功能,因此每一個(gè)可執(zhí)行程序除了自身的程序體外,還包括許多外部的模塊。如果我們用一些內(nèi)存查看工具的話,能看到每一個(gè)應(yīng)用程序都包含了大量的DLL動(dòng)態(tài)鏈接庫文件。

  而流氓軟件正是利用了這一點(diǎn)。他們的可執(zhí)行程序并不是EXE形式的,而是DLL形式,這類文件一般是存在于系統(tǒng)中,由可執(zhí)行程序進(jìn)行調(diào)用。

  而流氓則是將DLL文件載入內(nèi)存,然后通過“線程插入”的方式,插入到某個(gè)進(jìn)程的地址空間。一般地,如果流氓軟件想控制瀏覽器,則它們往往會(huì)將自己注入到瀏覽器(explorer.exe)的進(jìn)程空間,只要瀏覽器運(yùn)行,就會(huì)自動(dòng)調(diào)用該流氓軟件。

  由于瀏覽器程序本身會(huì)調(diào)用大量的DLL文件,因此即使用戶用第三方進(jìn)程查看工具,也分辨不清哪個(gè)DLL是流氓軟件。面且,采用線程注入技術(shù)的流氓軟件由于已經(jīng)并入了正常程序的內(nèi)存空間,即使是防火墻程序也不會(huì)攔截,從而可以在用戶電腦自由出入。

  銷聲匿跡-流氓軟件的RootKit技術(shù)   

    線程插入對(duì)于普通用戶來說,或者對(duì)于用戶的手工清除來說,是很難處理的, 但是這些招數(shù)對(duì)于殺毒軟件來說,是非常簡單的,為了能夠躲避殺毒軟件的追殺,流氓軟件的研制者又引入了RootKit技術(shù)。

  本來RootKit是LINUX的概念,指能夠以透明的方式隱藏于系統(tǒng),并獲得LINUX系統(tǒng)最高權(quán)限的一組程序集。而后來被病毒制作者借鑒,病毒的RootKit技術(shù)指的是那些能夠繞過操作系統(tǒng)的API調(diào)用,直接利用更底層的調(diào)用,然后接管系統(tǒng)的高級(jí)API調(diào)用,當(dāng)有程序試圖查找它們時(shí),便返回假信息,從而得以隱藏自己的技術(shù)。由于目前的殺毒軟件都是直接調(diào)用系統(tǒng)API來進(jìn)行病毒掃描的,因此采用這種技術(shù)的病毒,都能夠輕松躲避殺毒軟件的追殺,因?yàn)槿绱?,所以目前的流氓軟件開始越來越多地采用這種方式來保護(hù)自己。

  不過,殺毒軟件也開始繞過API調(diào)用,通過更加底層的應(yīng)用,來對(duì)抗這種技術(shù)。

  借尸還魂-流氓軟件的碎片技術(shù)

  流氓軟件之所以要流氓,那是因?yàn)榫薮蟮睦?,而為了巨大的利益,流氓就變得更流氓。目前流氓軟件大多?shù)還會(huì)采用一項(xiàng)流行的技術(shù),那就是碎片技術(shù)。這種技術(shù)的思想其實(shí)很簡單,就是在進(jìn)入用戶系統(tǒng)時(shí),就產(chǎn)生多個(gè)或相同,或不同的碎片文件,這些文件除了分布在系統(tǒng)目錄、一些盤符的根目錄下,它們還會(huì)隱藏在其它軟件的目錄、臨時(shí)文件夾、甚至回收站里。

  這些文件之間互相保護(hù),一旦一個(gè)文件被刪除了,另一些碎片就會(huì)重新將這個(gè)文件恢復(fù)。只要系統(tǒng)中存在有這樣的碎片文件,這些碎片文件只要有一個(gè)能夠激活,在用戶連接網(wǎng)絡(luò)的時(shí)候,就能夠連通網(wǎng)絡(luò)進(jìn)行升級(jí),從而重新還原成一個(gè)完整的流氓軟件體系,而且一旦升級(jí),這些新升級(jí)的流氓軟件還會(huì)將這些碎片文件刪除,然后產(chǎn)生新的碎片文件,從而能夠在一定程度上躲過了反病毒軟件的查殺。

  有的流氓軟件多達(dá)數(shù)十個(gè)碎片文件,這對(duì)于手動(dòng)清除的用戶來說,幾乎是不可能完成的任務(wù),而即便是殺毒軟件也未必能夠?qū)?shù)十種碎片文件都一一識(shí)別,因此會(huì)產(chǎn)生殺不干凈的問題,即使是只有一個(gè)碎片,流氓軟件就有可能通過升級(jí)和下載借尸還魂,繼續(xù)為惡。

  以上便是目前流氓軟件用得最多的技術(shù),當(dāng)然,隨著同各種反病毒軟件的對(duì)抗,它們會(huì)采用越來越多的底層技術(shù),有些流氓已經(jīng)開始采用寫固件的方式,通過BIOS來進(jìn)行傳播了。而隨著流氓軟件的發(fā)展,手工清除越來越不可能,人們將會(huì)越來越依賴于專業(yè)的流氓軟件清除工具。

  流氓軟件的8大癥狀

  1.強(qiáng)迫性安裝:不經(jīng)用戶許可自動(dòng)安裝,或者是不給出明顯提示,欺騙用戶安裝 。

  2.無法卸載:不提供正常的卸載程序,或當(dāng)用戶選擇卸載時(shí),不真正卸載。

  3.彈出廣告窗:在用戶上網(wǎng)時(shí),頻繁彈出廣告窗口,干擾用戶正常使用電腦

  4.首頁修改:瀏覽器的默認(rèn)首頁,在沒有經(jīng)過用戶的同意擅自被修改。

  5.修改瀏覽器:在菜單欄上添加不需要的按鈕,在瀏覽器的地址欄中添非法內(nèi)容,自動(dòng)添加菜單。

  6.資源占用:CPU資源被大量占用,系統(tǒng)變得越來越慢。

  7.使瀏覽器崩潰:流氓軟件由于太信賴于瀏覽器,因此,經(jīng)常會(huì)出現(xiàn)使瀏覽器莫名崩潰的情況。

  8.干擾軟件:流氓軟件為了達(dá)到它的常久生存的目的,總是干擾一些如殺毒軟件的正常運(yùn)行,使這些軟件出現(xiàn)莫名其妙的錯(cuò)誤。



--

 

Re: 從流氓軟件說說DLL動(dòng)態(tài)插入技術(shù)與Rootkit技術(shù)

第二篇


系統(tǒng)DLL技術(shù)助力木馬靜態(tài)變動(dòng)態(tài)

作者:未知 文章來源:網(wǎng)絡(luò) 點(diǎn)擊數(shù):8 更新時(shí)間:2007-8-24 1:38:05

很多朋友依然不知道近年興起的“DLL木馬”為何物。什么是“DLL木馬”呢?它與一般的木馬有什么不同?

  一、從DLL技術(shù)說起

  要了解DLL木馬,就必須知道這個(gè)“DLL”是什么意思,所以,讓我們追溯到幾年前,DOS系統(tǒng)大行其道的日子里。在那時(shí)候,寫程序是一件繁瑣的事情,因?yàn)槊總€(gè)程序的代碼都是獨(dú)立的,有時(shí)候?yàn)榱藢?shí)現(xiàn)一個(gè)功能,就要為此寫很多代碼,后來隨著編程技術(shù)發(fā)展,程序員們把很多常用的代碼集合(通用代碼)放進(jìn)一個(gè)獨(dú)立的文件里,并把這個(gè)文件稱為“庫”(Library),在寫程序的時(shí)候,把這個(gè)庫文件加入編譯器,就能使用這個(gè)庫包含的所有功能而不必自己再去寫一大堆代碼,這個(gè)技術(shù)被稱為“靜態(tài)鏈接”(Static Link)。靜態(tài)鏈接技術(shù)讓勞累的程序員松了口氣,一切似乎都很美好??墒鞘聦?shí)證明,美好的事物不會(huì)存在太久,因?yàn)殪o態(tài)鏈接就像一個(gè)粗魯?shù)耐其N員,不管你想不想要宣傳單,他都全部塞到你的手上來。寫一個(gè)程序只想用到一個(gè)庫文件包含的某個(gè)圖形效果,就因?yàn)檫@個(gè),你不得不把這個(gè)庫文件攜帶的所有的圖形效果都加入程序,留著它們當(dāng)花瓶擺設(shè),這倒沒什么重要,可是這些花瓶卻把道路都阻塞了――靜態(tài)鏈接技術(shù)讓最終的程序成了大塊頭,因?yàn)榫幾g器把整個(gè)庫文件也算進(jìn)去了。

  時(shí)代在發(fā)展,靜態(tài)鏈接技術(shù)由于天生的弊端,不能滿足程序員的愿望,人們開始尋找一種更好的方法來解決代碼重復(fù)的難題。后來,Windows系統(tǒng)出現(xiàn)了,時(shí)代的分水嶺終于出現(xiàn)。Windows系統(tǒng)使用一種新的鏈接技術(shù),這種被稱為“動(dòng)態(tài)鏈接”(Dynamic Link)的新技術(shù)同樣也是使用庫文件,微軟稱它們?yōu)?#8220;動(dòng)態(tài)鏈接庫”――Dynamic Link Library,DLL的名字就是這樣來的。動(dòng)態(tài)鏈接本身和靜態(tài)鏈接沒什么區(qū)別,也是把通用代碼寫進(jìn)一些獨(dú)立文件里,但是在編譯方面,微軟繞了個(gè)圈子,并沒有采取把庫文件加進(jìn)程序的方法,而是把庫文件做成已經(jīng)編譯好的程序文件,給它們開個(gè)交換數(shù)據(jù)的接口,程序員寫程序的時(shí)候,一旦要使用某個(gè)庫文件的一個(gè)功能函數(shù),系統(tǒng)就把這個(gè)庫文件調(diào)入內(nèi)存,連接上這個(gè)程序占有的任務(wù)進(jìn)程,然后執(zhí)行程序要用的功能函數(shù),并把結(jié)果返回給程序顯示出來,在我們看來,就像是程序自己帶有的功能一樣。完成需要的功能后,這個(gè)DLL停止運(yùn)行,整個(gè)調(diào)用過程結(jié)束。微軟讓這些庫文件能被多個(gè)程序調(diào)用,實(shí)現(xiàn)了比較完美的共享,程序員無論要寫什么程序,只要在代碼里加入對(duì)相關(guān)DLL的調(diào)用聲明就能使用它的全部功能。最重要的是,DLL絕對(duì)不會(huì)讓你多拿一個(gè)花瓶,你要什么它就給你什么,你不要的東西它才不會(huì)給你。這樣,寫出來的程序就不能再攜帶一大堆垃圾了――絕對(duì)不會(huì)讓你把吃剩的東西帶回家,否則罰款,這是自助餐。

  DLL技術(shù)的誕生,使編寫程序變成一件簡單的事情,Windows為我們提供了幾千個(gè)函數(shù)接口,足以滿足大多數(shù)程序員的需要。而且,Windows系統(tǒng)自身就是由幾千個(gè)DLL文件組成,這些DLL相互扶持,組成了強(qiáng)大的Windows系統(tǒng)。如果Windows使用靜態(tài)鏈接技術(shù),它的體積會(huì)有多大?我不敢想。

  二、應(yīng)用程序接口API

  上面我們對(duì)DLL技術(shù)做了個(gè)大概分析,在里面我提到了“接口”,這又是什么呢?因?yàn)镈LL不能像靜態(tài)庫文件那樣塞進(jìn)程序里,所以,如何讓程序知道實(shí)現(xiàn)功能的代碼和文件成了問題,微軟就為DLL技術(shù)做了標(biāo)準(zhǔn)規(guī)范,讓一個(gè)DLL文件像奶酪一樣開了許多小洞,每個(gè)洞口都注明里面存放的功能的名字,程序只要根據(jù)標(biāo)準(zhǔn)規(guī)范找到相關(guān)洞口就可以取得它要的美味了,這個(gè)洞口就是“應(yīng)用程序接口”(Application Programming Interface),每個(gè)DLL帶的接口都不相同,盡最大可能的減少了代碼的重復(fù)。用Steven的一句話:API就是一個(gè)工具箱,你根據(jù)需要取出螺絲刀、扳手,用完后再把它們放回原處。在Windows里,最基本的3個(gè)DLL文件是kernel32.dll、user32.dll、gdi32.dll。它們共同構(gòu)成了基本的系統(tǒng)框架。

  三、DLL與木馬

  DLL是編譯好的代碼,與一般程序沒什么大差別,只是它不能獨(dú)立運(yùn)行,需要程序調(diào)用。那么,DLL與木馬能扯上什么關(guān)系呢?如果你學(xué)過編程并且寫過DLL,就會(huì)發(fā)現(xiàn),其實(shí)DLL的代碼和其他程序幾乎沒什么兩樣,僅僅是接口和啟動(dòng)模式不同,只要改動(dòng)一下代碼入口,DLL就變成一個(gè)獨(dú)立的程序了。當(dāng)然,DLL文件是沒有程序邏輯的,這里并不是說DLL=EXE,不過,依然可以把DLL看做缺少了main入口的EXE,DLL帶的各個(gè)功能函數(shù)可以看作一個(gè)程序的幾個(gè)函數(shù)模塊。DLL木馬就是把一個(gè)實(shí)現(xiàn)了木馬功能的代碼,加上一些特殊代碼寫成DLL文件,導(dǎo)出相關(guān)的API,在別人看來,這只是一個(gè)普通的DLL,但是這個(gè)DLL卻攜帶了完整的木馬功能,這就是DLL木馬的概念。也許有人會(huì)問,既然同樣的代碼就可以實(shí)現(xiàn)木馬功能,那么直接做程序就可以,為什么還要多此一舉寫成DLL呢?這是為了隱藏,因?yàn)镈LL運(yùn)行時(shí)是直接掛在調(diào)用它的程序的進(jìn)程里的,并不會(huì)另外產(chǎn)生進(jìn)程,所以相對(duì)于傳統(tǒng)EXE木馬來說,它很難被查到。

四、DLL的運(yùn)行

  雖然DLL不能自己運(yùn)行,可是Windows在加載DLL的時(shí)候,需要一個(gè)入口函數(shù),就如同EXE的main一樣,否則系統(tǒng)無法引用DLL。所以根據(jù)編寫規(guī)范,Windows必須查找并執(zhí)行DLL里的一個(gè)函數(shù)DllMain作為加載DLL的依據(jù),這個(gè)函數(shù)不作為API導(dǎo)出,而是內(nèi)部函數(shù)。DllMain函數(shù)使DLL得以保留在內(nèi)存里,有的DLL里面沒有DllMain函數(shù),可是依然能使用,這是因?yàn)閃indows在找不到DllMain的時(shí)候,會(huì)從其它運(yùn)行庫中找一個(gè)不做任何操作的缺省DllMain函數(shù)啟動(dòng)這個(gè)DLL使它能被載入,并不是說DLL可以放棄DllMain函數(shù)。

  五、DLL木馬技術(shù)分析

  到了這里,您也許會(huì)想,既然DLL木馬有那么多好處,以后寫木馬都采用DLL方式不就好了嗎?話雖然是這么說沒錯(cuò),但是DLL木馬并不是一些人想象的那么容易寫的。要寫一個(gè)能用的DLL木馬,你需要了解更多知識(shí)。

  1. 木馬的主體

  千萬別把木馬模塊寫得真的像個(gè)API庫一樣,這不是開發(fā)WINAPI。DLL木馬可以導(dǎo)出幾個(gè)輔助函數(shù),但是必須有一個(gè)過程負(fù)責(zé)主要執(zhí)行代碼,否則這個(gè)DLL只能是一堆零碎API函數(shù),別提工作了。

  如果涉及一些通用代碼,可以在DLL里寫一些內(nèi)部函數(shù),供自己的代碼使用,而不是把所有代碼都開放成接口,這樣它自己本身都難調(diào)用了,更不可能發(fā)揮作用。

  DLL木馬的標(biāo)準(zhǔn)執(zhí)行入口為DllMain,所以必須在DllMain里寫好DLL木馬運(yùn)行的代碼,或者指向DLL木馬的執(zhí)行模塊。

  2. 動(dòng)態(tài)嵌入技術(shù)

  Windows中,每個(gè)進(jìn)程都有自己的私有內(nèi)存空間,別的進(jìn)程是不允許對(duì)這個(gè)私人領(lǐng)地進(jìn)行操作的,但是,實(shí)際上我們?nèi)匀豢梢岳梅N種方法進(jìn)入并操作進(jìn)程的私有內(nèi)存,這就是動(dòng)態(tài)嵌入,它是將自己的代碼嵌入正在運(yùn)行的進(jìn)程中的技術(shù)。動(dòng)態(tài)嵌入有很多種,最常見的是鉤子、API以及遠(yuǎn)程線程技術(shù),現(xiàn)在的大多數(shù)DLL木馬都采用遠(yuǎn)程線程技術(shù)把自己掛在一個(gè)正常系統(tǒng)進(jìn)程中。其實(shí)動(dòng)態(tài)嵌入并不少見,羅技的MouseWare驅(qū)動(dòng)就掛著每一個(gè)系統(tǒng)進(jìn)程。

  遠(yuǎn)程線程技術(shù)就是通過在另一個(gè)進(jìn)程中創(chuàng)建遠(yuǎn)程線程(RemoteThread)的方法進(jìn)入那個(gè)進(jìn)程的內(nèi)存地址空間。在DLL木馬的范疇里,這個(gè)技術(shù)也叫做“注入”,當(dāng)載體在那個(gè)被注入的進(jìn)程里創(chuàng)建了遠(yuǎn)程線程并命令它加載DLL時(shí),木馬就掛上去執(zhí)行了,沒有新進(jìn)程產(chǎn)生,要想讓木馬停止惟有讓掛接這個(gè)木馬DLL的進(jìn)程退出運(yùn)行。但是,很多時(shí)候我們只能束手無策――它和Explorer.exe掛在一起了,你確定要關(guān)閉Windows嗎?

  3. 木馬的啟動(dòng)

  有人也許會(huì)迫不及待的說,直接把這個(gè)DLL加入系統(tǒng)啟動(dòng)項(xiàng)目不就可以了。答案是NO,前面說過,DLL不能獨(dú)立運(yùn)行,所以無法在啟動(dòng)項(xiàng)目里直接啟動(dòng)它。要想讓木馬跑起來,就需要一個(gè)EXE使用動(dòng)態(tài)嵌入技術(shù)讓DLL搭上其他正常進(jìn)程的車,讓被嵌入的進(jìn)程調(diào)用這個(gè)DLL的DllMain函數(shù),激發(fā)木馬運(yùn)行,最后啟動(dòng)木馬的EXE結(jié)束運(yùn)行,木馬啟動(dòng)完畢。

  啟動(dòng)DLL木馬的EXE是個(gè)重要角色,它被稱為Loader,如果沒有Loader,DLL木馬就是破爛一堆,因此,一個(gè)算得上成熟的DLL木馬會(huì)想辦法保護(hù)它的Loader不會(huì)那么容易被毀滅。記得狼狽為奸的故事嗎?DLL木馬就是爬在狼Loader上的狽。

  Loader可以是多種多樣的,Windows的rundll32.exe也被一些DLL木馬用來做了Loader,這種木馬一般不帶動(dòng)態(tài)嵌入技術(shù),它直接掛著rundll32進(jìn)程運(yùn)行,用rundll32的方法(rundll32.exe [DLL名],[函數(shù)] [參數(shù)])像調(diào)用API一樣去引用這個(gè)DLL的啟動(dòng)函數(shù)激發(fā)木馬模塊開始執(zhí)行,即使你殺了rundll32,木馬本體還是在的,一個(gè)最常見的例子就是3721中文實(shí)名,雖然它不是木馬。

  注冊(cè)表的AppInit_DLLs鍵也被一些木馬用來啟動(dòng)自己,如求職信病毒。利用注冊(cè)表啟動(dòng),就是讓系統(tǒng)執(zhí)行DllMain來達(dá)到啟動(dòng)木馬的目的。因?yàn)樗莐ernel調(diào)入的,對(duì)這個(gè)DLL的穩(wěn)定性有很大要求,稍有錯(cuò)誤就會(huì)導(dǎo)致系統(tǒng)崩潰,所以很少看到這種木馬。

  有一些更復(fù)雜點(diǎn)的DLL木馬通過svchost.exe啟動(dòng),這種DLL木馬必須寫成NT-Service,入口函數(shù)是ServiceMain,但是這種木馬的隱蔽性也不錯(cuò),而且Loader有保障。

  4. 其它

  到這里大家也應(yīng)該對(duì)DLL木馬有個(gè)了解了,是不是很想寫一個(gè)?別急,由于DLL木馬掛著系統(tǒng)進(jìn)程運(yùn)行,如果它本身寫得不好,例如沒有防止運(yùn)行錯(cuò)誤的代碼或者沒有嚴(yán)格規(guī)范用戶的輸入,DLL就會(huì)出錯(cuò)崩潰。別緊張,一般的EXE也是這樣完蛋的,但是DLL崩潰會(huì)導(dǎo)致它掛著的程序跟著遭殃,別忘記它掛接的是系統(tǒng)進(jìn)程哦,結(jié)局就是……慘不忍睹。所以寫一個(gè)能公布的DLL木馬,在排錯(cuò)檢查方面做的工作要比一般的EXE木馬多……

  六、DLL木馬的發(fā)現(xiàn)和查殺

  經(jīng)常看看啟動(dòng)項(xiàng)有沒有多出莫名其妙的項(xiàng)目,這是Loader的所在,只要?dú)⒘死?,狽就不能再狂了。而DLL木馬本體比較難發(fā)現(xiàn),需要你有一定編程知識(shí)和分析能力,在Loader里查找DLL名稱,或者從進(jìn)程里看多掛接了什么陌生的DLL,可是對(duì)新手來說……總之就是比較難啊比較難,所以,最簡單的方法:殺毒軟件和防火墻。


--

TOP

Re: 從流氓軟件說說DLL動(dòng)態(tài)插入技術(shù)與Rootkit技術(shù)

第三篇


教你Rootkit技術(shù)的木馬知識(shí)

作者:未知 文章來源:網(wǎng)絡(luò) 點(diǎn)擊數(shù):3 更新時(shí)間:2007-8-24 1:25:35

       自從“廣外幽靈”開創(chuàng)了dll木馬時(shí)代的先河以來,現(xiàn)在采用線程注射的dll木馬和惡意程序已經(jīng)隨處可見了,除了普遍被采用的另行編寫dll加載器程序躲在啟動(dòng)項(xiàng)里運(yùn)行加載dll主體之外,“求職信”還帶來了一種比較少見的通過注冊(cè)表“hkey_local_machine\software\microsoft\windows nt\currentversion\windows\appinit_dlls”項(xiàng)目加載自身dll的啟動(dòng)方法,而相對(duì)于以上幾種早期方法,現(xiàn)在更有一種直接利用系統(tǒng)服務(wù)啟動(dòng)自身的木馬程序,這才是真正的難纏!
       “服務(wù)”是windows系統(tǒng)的一大核心部分,在nt架構(gòu)系統(tǒng)中,服務(wù)是指執(zhí)行指定系統(tǒng)功能的程序、例程或進(jìn)程,以便支持其他程序,尤其是底層(接近硬件)程序。通過網(wǎng)絡(luò)提供服務(wù)時(shí),服務(wù)可以在active directy中發(fā)布,從而促進(jìn)了以服務(wù)為中心的管理和使用。服務(wù)是一種應(yīng)用程序類型,它在后臺(tái)運(yùn)行。服務(wù)應(yīng)用程序通??梢栽诒镜睾屯ㄟ^網(wǎng)絡(luò)為用戶提供一些功能,例如客戶端/服務(wù)器應(yīng)用程序、web服務(wù)器、數(shù)據(jù)庫服務(wù)器以及其他基于服務(wù)器的應(yīng)用程序。 “服務(wù)”自身也是一種程序,由于使用的領(lǐng)域和作用不同,服務(wù)程序也有兩種形式:exe和dll,采用dll形式的服務(wù)是因?yàn)閐ll能實(shí)現(xiàn)hook,這是一些服務(wù)必需的數(shù)據(jù)交換行為,而nt架構(gòu)系統(tǒng)采用一個(gè)被稱為“svchost.exe”的程序來執(zhí)行dll的加載過程,所有服務(wù)dll都統(tǒng)一由這個(gè)程序根據(jù)特定分組載入內(nèi)存,然而,如今越來越多病毒作者瞄上了這個(gè)系統(tǒng)自帶的加載器,因?yàn)樗肋h(yuǎn)也不能被查殺。

        病毒作者將木馬主體寫成一個(gè)符合微軟開發(fā)文檔規(guī)范的服務(wù)性質(zhì)dll模塊文件,然后通過一段安裝程序,將木馬dll放入系統(tǒng)目錄,并在服務(wù)管理器(scm)里注冊(cè)自身為通過svchost.exe加載的服務(wù)dll組件之一,為了提高隱蔽性,病毒作者甚至直接替換系統(tǒng)里某些不太重要而默認(rèn)開啟的服務(wù)加載代碼,如“distributed link tracking client”,其默認(rèn)的啟動(dòng)命令是“svchost -k netsvcs”,如果有個(gè)病毒替換了啟動(dòng)命令為自己建立的分組“netsvsc”,即“svchost -k netsvsc”,在這種旁門左道加社會(huì)工程學(xué)的攻勢(shì)下,即使是具備一般查毒經(jīng)驗(yàn)的用戶也難以在第一時(shí)間內(nèi)察覺到問題出自服務(wù)項(xiàng),于是病毒得以成功逃離各種查殺。

        目前被發(fā)現(xiàn)使用此方法的木馬已經(jīng)出現(xiàn),其中一個(gè)進(jìn)程名為“ad1.exe”的廣告程序就是典型例子,它通過替換“distributed link tracking client”服務(wù)的svchost啟動(dòng)項(xiàng)來躲過一般的手工查殺,同時(shí)它自身還是個(gè)病毒下載器,一旦系統(tǒng)感染了這個(gè)惡意程序,各種木馬都有可能光臨你的機(jī)器。

        要清理dll木馬,用戶需要借助于sysinternals出品的第三方進(jìn)程管理工具“process expler”,利用它的“find handle  dll”功能,能迅速搜索到某個(gè)dll依附的進(jìn)程信息并終結(jié),讓dll失去載體后就能成功刪除,而dll木馬的文件名為了避免和系統(tǒng)dll發(fā)生沖突,一般不會(huì)起得太專業(yè),甚至有“safaf.dll”、“est.dll”這樣的命名出現(xiàn),或者在某些系統(tǒng)下根本不會(huì)出現(xiàn)的文件名,如“kernel.dll”、“rundll32.dll”等。除了使用“process expler”查找并終止進(jìn)程以外,還可以用iceswd強(qiáng)行卸載某個(gè)進(jìn)程里的dll模塊來達(dá)到效果。

        對(duì)于服務(wù)性質(zhì)的dll,我們?nèi)匀皇褂?#8220;process expler”進(jìn)行查殺,由于它的層次結(jié)構(gòu),用戶可以很直觀的看到進(jìn)程的啟動(dòng)聯(lián)系,如果一臺(tái)機(jī)器感染了殺不掉的頑固木馬,有經(jīng)驗(yàn)的用戶做的第一件事情就是禁止掉不相關(guān)或者不重要的程序和服務(wù)在開機(jī)時(shí)運(yùn)行,然后使用“process expler”觀察各個(gè)進(jìn)程的情況,通過svchost.exe啟動(dòng)的dll木馬雖然狡猾,但是它釋放出exe文件運(yùn)行時(shí),一切都暴露了:一個(gè)svchost.exe服務(wù)進(jìn)程執(zhí)行了一個(gè)ad1.exe,還有比這更明顯的嗎?

svchost的分組信息位于注冊(cè)表的“hkey_local_machine\software\microsoft\windows nt\currentversion\svchost”項(xiàng)目,這是svchost加載dll時(shí)的分組依據(jù),如果用戶發(fā)現(xiàn)了一個(gè)奇怪的分組信息,那就要提高警惕了。

隱藏技術(shù)發(fā)展的顛峰:Rootkit木馬





         隨著安全技術(shù)的發(fā)展和計(jì)算機(jī)用戶群的技術(shù)提高,一般的木馬后門越來越難生存,于是一部分有能力的后門作者把眼光投向了系統(tǒng)底層——ring 0。位于ring 0層的是系統(tǒng)核心模塊和各種驅(qū)動(dòng)程序模塊,所以位于這一層的木馬也是以驅(qū)動(dòng)的形式生存的,而不是一般的exe。后門作者把后門寫成符合wdm規(guī)范(windows driver model)的驅(qū)動(dòng)程序模塊,把自身添加進(jìn)注冊(cè)表的驅(qū)動(dòng)程序加載入口,便實(shí)現(xiàn)了“無啟動(dòng)項(xiàng)”運(yùn)行。一般的進(jìn)程查看器都只能枚舉可執(zhí)行文件exe的信息,所以通過驅(qū)動(dòng)模塊和執(zhí)行文件結(jié)合的后門程序便得以生存下來,由于它運(yùn)行在ring 0級(jí)別,擁有與系統(tǒng)核心同等級(jí)的權(quán)限,因此它可以更輕易的把自己隱藏起來,無論是進(jìn)程信息還是文件體,甚至通訊的端口和流量也能被隱藏起來,在如此強(qiáng)大的隱藏技術(shù)面前,無論是任務(wù)管理器還是系統(tǒng)配置實(shí)用程序,甚至系統(tǒng)自帶的注冊(cè)表工具都失去了效果,這種木馬,就是讓人問之色變的Rootkit。

        要了解Rootkit木馬的原理,就必須從系統(tǒng)原理說起,我們知道,操作系統(tǒng)是由內(nèi)核(kernel)和外殼(shell)兩部分組成的,內(nèi)核負(fù)責(zé)一切實(shí)際的工作,包括cpu任務(wù)調(diào)度、內(nèi)存分配管理、設(shè)備管理、文件操作等,外殼是基于內(nèi)核提供的交互功能而存在的界面,它負(fù)責(zé)指令傳遞和解釋。由于內(nèi)核和外殼負(fù)責(zé)的任務(wù)不同,它們的處理環(huán)境也不同,因此處理器提供了多個(gè)不同的處理環(huán)境,把它們稱為運(yùn)行級(jí)別(ring),ring讓程序指令能訪問的計(jì)算機(jī)資源依次逐級(jí)遞減,目的在于保護(hù)計(jì)算機(jī)遭受意外損害——內(nèi)核運(yùn)行于ring 0級(jí)別,擁有最完全最底層的管理功能,而到了外殼部分,它只能擁有ring 3級(jí)別,這個(gè)級(jí)別能操作的功能極少,幾乎所有指令都需要傳遞給內(nèi)核來決定能否執(zhí)行,一旦發(fā)現(xiàn)有可能對(duì)系統(tǒng)造成破壞的指令傳遞(例如超越指定范圍的內(nèi)存讀寫),內(nèi)核便返回一個(gè)“非法越權(quán)”標(biāo)志,發(fā)送這個(gè)指令的程序就有可能被終止運(yùn)行,這就是大部分常見的“非法操作”的由來,這樣做的目的是為了保護(hù)計(jì)算機(jī)免遭破壞,如果外殼和內(nèi)核的運(yùn)行級(jí)別一樣,用戶一個(gè)不經(jīng)意的點(diǎn)擊都有可能破壞整個(gè)系統(tǒng)。

        由于ring的存在,除了由系統(tǒng)內(nèi)核加載的程序以外,由外殼調(diào)用執(zhí)行的一般程序都只能運(yùn)行在ring 3級(jí)別,也就是說,它們的操作指令全部依賴于內(nèi)核授權(quán)的功能,一般的進(jìn)程查看工具和殺毒軟件也不例外,由于這層機(jī)制的存在,我們能看到的進(jìn)程其實(shí)是內(nèi)核“看到”并通過相關(guān)接口指令(還記得api嗎?)反饋到應(yīng)用程序的,這樣就不可避免的存在一條數(shù)據(jù)通道,雖然在一般情況下它是難以被篡改的,但是不能避免意外的發(fā)生,Rootkit正是“制造”這種意外的程序。簡單的說,Rootkit實(shí)質(zhì)是一種“越權(quán)執(zhí)行”的應(yīng)用程序,它設(shè)法讓自己達(dá)到和內(nèi)核一樣的運(yùn)行級(jí)別,甚至進(jìn)入內(nèi)核空間,這樣它就擁有了和內(nèi)核一樣的訪問權(quán)限,因而可以對(duì)內(nèi)核指令進(jìn)行修改,最常見的是修改內(nèi)核枚舉進(jìn)程的api,讓它們返回的數(shù)據(jù)始終“遺漏”Rootkit自身進(jìn)程的信息,一般的進(jìn)程工具自然就“看”不到Rootkit了。更高級(jí)的Rootkit還篡改更多api,這樣,用戶就看不到進(jìn)程(進(jìn)程api被攔截),看不到文件(文件讀寫api被攔截),看不到被打開的端口(網(wǎng)絡(luò)組件sock api被攔截),更攔截不到相關(guān)的網(wǎng)絡(luò)數(shù)據(jù)包(網(wǎng)絡(luò)組件ndis api被攔截)了,我們使用的系統(tǒng)是在內(nèi)核功能支持下運(yùn)作的,如果內(nèi)核變得不可信任了,依賴它運(yùn)行的程序還能信任嗎?

        但即使是Rootkit這一類恐怖的寄生蟲,它們也并非所向無敵的,要知道,既然Rootkit是利用內(nèi)核和ring 0配合的欺騙,那么我們同樣也能使用可以“越權(quán)”的檢查程序,繞過api提供的數(shù)據(jù),直接從內(nèi)核領(lǐng)域里讀取進(jìn)程列表,因?yàn)樗羞M(jìn)程在這里都不可能把自己隱藏,除非它已經(jīng)不想運(yùn)行了。也就是說,內(nèi)核始終擁有最真實(shí)的進(jìn)程列表和主宰權(quán),只要能讀取這個(gè)原始的進(jìn)程列表,再和進(jìn)程api枚舉的進(jìn)程列表對(duì)比,便能發(fā)現(xiàn)Rootkit進(jìn)程,由于這類工具也“越權(quán)”了,因而對(duì)Rootkit進(jìn)行查殺也就不再是難事,而Rootkit進(jìn)程一旦被清除,它隱藏自身的措施也就不復(fù)存在,內(nèi)核就能把它“供”出來了,用戶會(huì)突然發(fā)現(xiàn)那個(gè)一直“找不到”的Rootkit程序文件已經(jīng)老實(shí)的呆在文件管理器的視圖里了。這類工具現(xiàn)在已經(jīng)很多,例如iceswd、patchfinder、gdb等。

         道高一尺,魔高一丈,因?yàn)槟壳暗闹髁鱎ootkit檢測(cè)工具已經(jīng)能檢測(cè)出許多Rootkit木馬的存在,因此一部分Rootkit作者轉(zhuǎn)而研究Rootkit檢測(cè)工具的運(yùn)行檢測(cè)算法機(jī)制,從而制作出新一代更難被檢測(cè)到的木馬——futo Rootkit。

         國產(chǎn)優(yōu)秀檢測(cè)工具iceswd在futo面前敗下陣來,因?yàn)閒uto編寫者研究的檢測(cè)工具原型就是一款與之類似的black & light,所以我們只能換用另一款Rootkit檢測(cè)工具darkspy,并開啟“強(qiáng)力模式”,方可正常查殺Rootkit。

        但是由于檢測(cè)機(jī)制的變化,darkspy要檢測(cè)到futo的存在,就必須保證自己的驅(qū)動(dòng)比futo提前加載運(yùn)行,這就涉及到優(yōu)先級(jí)的問題,也是讓業(yè)界感覺不太滿意的一種方式,因?yàn)檫@樣做的后果會(huì)導(dǎo)致系統(tǒng)運(yùn)行效率下降,不到緊急關(guān)頭,都不要輕易采用這種方法,然而現(xiàn)在的瑞星卡卡助手所推廣的“破甲”技術(shù),實(shí)現(xiàn)原理是與之類似的,它也會(huì)對(duì)系統(tǒng)造成一定影響,因而,這個(gè)介于安全和效率之間的選擇,唯有留給用戶自己思考了。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
dll插入型木馬病毒的原理,查殺與防范-飛翔軟件教程-52z.com
【技術(shù)分享】應(yīng)急響應(yīng)的神兵利器
如何刪除電腦中隱藏的木馬
可惡的木馬! 2006-07-28
揭開進(jìn)程的神秘面紗
木馬各種隱藏技術(shù)披露
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服