大家可能用一些工具時會用到ssdt檢查圖,可能會顯示的結果是某個驅動(cdnprot.sys)hook了一堆的服務函式。你是不是感覺到很高深,莫怕,今天看到一位前輩通過例項給我們很貼切的解釋了一下各個名詞.
下面我用乙個比喻來形容一下兒這些電腦名詞與木馬技術的實現機制。
windows(作業系統)就像乙個為我們服務的管理公司,這個公司呢幫我們管理著我們的電腦。乙個公司當然不會是乙個人,他們有很多人來完成不同的工作。
他們的工作流程是這樣的,有乙個服務員是跟在我們身邊,當我們有什麼事情要辦的時候呢,就把事情告訴這個服務員,服務員就把我們的要求報上去,交給負責此事的部門去處理。再把結果告訴我們。
ssdt是什麼呢?就是乙個指示路標,告訴服務員什麼事情應該交給哪個部門去做。我們想結束程序,然後會把這個任務交給服務員,服務員檢視ssdt這個路標,上面寫著,「結束程序是由ntterminateprocess這個部門負責的」,然後服務員就會把工作交給這個ntterminateprocess來處理。再把結果帶回給我們。(注:這個比喻太精彩了)
hook是什麼呢?hook是一種技術,這種技術就是改變ssdt的路標內容,改為「結束程序是由木馬負責的」,這時,服務員就會把我們的結束程序的工作交給木馬去處理了,木馬會檢視我們要結束的是誰,如果與它無關,它就接著行使服務員的工作,再把工作傳給ntterminateprocess,然後把結果告訴服務員,由服務員再告訴我們。如果是結束它自己呢?它就不把工作向上報了,直接告訴服務員,這個工作是無法完成的。然後服務員再把結果告訴我們,我們就看到最上面的那個錯誤提示了「無法完成操作」。(更是比喻的好啊)
對付hook-ssdt的技術呢,我們只需要把ssdt給恢復了就行了,恢復的操作就是用原始的ssdt來重新把正確的路標寫回去。一般這一層次的木馬這樣做完之後,就可以刪除結束木馬了。
然而我們有時候還會看到inline-hook,這又是什麼東東呢,和hook有什麼親密關係呢.再來看我們大師的解答:
inline-hook是比hook更高一層的技術,那麼什麼又是inline-hook呢? 我們仍然以上面的例子來解釋:
服務員查過路標後,將把工作交給特定的部門去做,乙個部門也不會是乙個人,流程會是這樣:交給部門的接待員,再由接待人員報上去、報給部門經理的秘書、部門經理的秘書再報給部門經理,再由部門經理實際分派人手去做。
而inline-hook技術呢?就是木馬打份成了接待人員並把真的接待人員給替換了。
木馬如果是替換的接待人員,那是最初級的inline-hook,如果它更高階還可以替換秘書、副經理等,但它必竟不是接待人員也不是秘書不是副經理,但它在那個位置上則必須要做那個位置的工作,所以,一些跟殺它無關的工作,本來它也想做好的工作,卻可能由於業務能力不足(inline-hook的技術不足),而做壞,導致正常工作總是出錯,無法也正常人員在位時相比。(表現為機器總是莫名奇妙的出問題、宕機或藍屏)
是否理解什麼是hook、什麼又是inline-hook、為什麼機器總是出問題了?通過上面的講解,我們知道了為什麼無法結束程序、無法刪除啟動項了。我們只要再把inline-hook恢復了,就可以順利的結束程序並刪除啟動項了。
當我們把程序結束了,把啟動項刪除了後,想刪除檔案時,是不是發現檔案無法刪除呢?這就是一些木馬如(cnnic)用到的另一種檔案保護技術了,fsd-hook、fsd-inline-hook,這兩個又是什麼東西呢?
fsd是英文單詞的開頭字母縮寫,即:檔案系統驅動(file system driver)再用上面的例子舉例:
一般性的工作呢~我們會交給windows的一般部門去完成。但檔案相對於電腦就像是我們的資產,是有形的東西、貴重的東西。所以,windows就專門成立了乙個更深層次的部門來負責對檔案的管理,其它部門接到與檔案有關的工作時,都會轉交給檔案部來負責處理。
fsd-hook呢,就是把檔案部的門牌換到了木馬門前,其它部門就把工作交給了木馬,木馬會進行過濾,發現沒有刪除自己的操作時,再把工作轉交給檔案部。如果有,當然就不轉交了。
fsd-inline-hook呢,不用我說,大家也都知道吧,就是把檔案部的工作人員直接替換了,部門還是那裡,但人變了。效果一樣,但隱蔽性更強,同樣,也更不穩定了。
這裡再插上一句講一講為什麼不穩定了,上面說過,當在裝有cnnic的機器上執行icesword(冰刃)時,會導至藍屏宕機,其原因,就是因為cnnic為了保護自己的程序不被結束,inline-hook了兩個與程序有關的服務。而ice也為了自己的程序不被結束,inline-hook了同樣的服務。如果他們採用的inline-hook是一樣的,那只是前面的被後面的取代,也不會崩潰。但遺憾的是,他們雖然用的同一技術,hook的同一地方,但卻並不完全一樣。cnnic hook了7個位元組,而ice hook了5個位元組,想一想如果兩個都存在這成什麼了,系統不崩潰才怪呢。所以,機器的崩潰是隨機的,只要你用到了某一有衝突的軟體,隨機將變為必然。(哦,有時候道理就這麼簡單)
好了,我們恢復fsd的hook及inline-hook,然後再刪除檔案試試,結果如何?是不是,有的可以刪除了,但有的dll檔案卻仍然無法刪除?程序被結束了,hook被恢復了,為什麼仍然無法刪除呢?
曾經流行一時的無程序木馬採用的主要手段「dll程序注入」!(如cnnic就採用了這種技術)
汗~~cnnic用到的技術還真多啊~~現在知道為什麼我會拿它作例子來講高階木馬的隱藏保護技術了吧?
這些就是cnnic注入到其它程序中的模組,雖然在程序列表中你看不到它們,但它們的的確確的正在工作,正在使用中的檔案,當然你刪除不了啦~
dll檔案是指擴充套件名為.dll的檔案即「動態鏈結庫」,(注:副檔名只是外在形式,只要格式對,起什麼名字都可以的,不能作準)
每個程序都用到了幾個到上百個不等的動態庫,每個動態庫都完成了某一部分特定的功能。
一台電腦中的動態載入的模組至少幾百多則上千,從中找出哪些是木馬的是有點困難。當然了,我們的困難也是木馬鍾情於這種技術的原因。用「搜尋可疑模組」可以把可疑的全部列出來,找到了就簡單了,「解除安裝」+「刪除」就搞定了!
通過上面的講解。至此,你已經知道了cnnic的大部分保護技術了。之所以說大部分,是因為還有一些小技術的存在。比如說:每次啟動電腦都隨機改名的影子驅動,影子驅動嘛當然是做為主驅動的保護者備份者而存在啦,當你只刪除了主驅動而遺漏了影子驅動時工作就等於沒做。還有電源關閉通知技術:就是關機時,windows會通知cnnic,偶要關機啦~~你還有什麼事情要做不?cnnic會說,稍等一等,等我檢查一下子我的啟動項是不是還在~~呵,也就是說,即使你刪除了,但一重啟它就又出來了。因為關機時它又重新寫回去了。
呵,這些就不多講了,必竟,這些都沒啥子太高深的技術含量~含金量偏低,不值的研究~考驗的是清除的人是否心細而已.(對我這個菜鳥還是不知道哦.看來學習路好遠啊!)
希望對大家的學習能有幫助!
木馬隱藏技術(1) 登錄檔
此為 木馬技術揭秘與防禦 系列讀書筆記 1.userinit 位置 hkey local machine software microsoft windows nt currentversion winlogon userinit 的鍵值 c windows system32 userinit.ex...
測試的自我保護
1 不要隨意對各種角色承諾什麼,包括產品,開發,專案經理,否則別人對你會有過高的期待,這是你自己的問題,你承諾過多就會很容易超出責任邊界,很危險的事情,2,要盡早暴露風險,包括進度風險,質量風險,時間風險,3,劃清責任邊界 你負責的保障不要出問題,提前做好準備,我的邊界1,不是生成新的任務,也不是分...
eurake的自我保護機制
在開發中我們因為經常關停服務所以會很容易觸發eureka的自我保護機制,當服務未按時進行心跳續約時,eureka會統計服務例項最近15分鐘心跳續約的比例是否低於了85 在生產環境下,因為網路延遲等原因,心跳失敗例項的比例很有可能超標,但是此時就把服務剔除列表並不妥當,因為服務可能沒有宕機。eurek...