摘要:[系統]Windows系統的養生概念
現在的”spywares, malwares and viruses”我們先暫稱 ”木馬或病毒”, 很像似現在的流感,雖然裝上了防毒軟體, 但還是有很多人的電腦會經常出現莫名其妙的問題,上網也經常彈出各類奇怪的視窗,各類木馬病毒變種呈爆炸式的增長,大部份的人都只知道電腦怪怪的, 我們先排除硬體上的因素不談, 大多是中了木馬或病毒所致; 我想生活在這個數位年代我們, 是應該要具備一些活在這個年代的基本技巧, 就像開車一樣, 如有興趣花點時間看看下面的文章或許會有些幫助!
在開始前,覺得有必要說明一些名詞,先列表如下
Rootkit:可能你對這個名詞並不太陌生,rising的卡卡上網助手的宣傳裡就提到過採用很多Anti-rootkit技術,那說明Rootkit肯定不是什麼好東西,呵呵,其實這最早是個linux下的名詞,一般是指用來隱藏直接可獲得管理員許可權的後門的技術工具,後來衍生到了win下。
dll:簡單說DLL 是一個包含可由多個程式同時使用的代碼和資料的庫,所以dll也叫動態連結程式庫,當exe程式運行時,會同時調用很多dll檔來實現擴展功能。
dll插入:把一個實現了後門功能的代碼寫成一個DLL檔,然後插入到一個EXE檔當中,使其可以執行,這樣就不需要佔用進程,也就沒有相對應的PID號,也就可以在工作管理員中隱藏。我們可以這樣理解,dll好比一個寄生蟲,而exe則是宿主,把dll注入到exe程式運行的空間中,我們的dll才能活下來,一旦exe程式被終止,dll也隨之死去。
相信看了上面的列表,大家應該對dll插入有了一個大概的影像,其實dll插入技術也叫“遠端執行緒注入技術”,並不是什麼很新鮮的玩意,屬於rootkit技術中的一種,而rootkit技術大致可分為ring0(內核級別)和ring3(用戶級別)兩類,ring3下有很多技術如:遠端執行緒注入技術,hook api 技術,埠複用技術等等,而要達到ring0級別的話,就要涉及到驅動開發了,如果你想深入瞭解rootkit,可以去www.rootkit.com上去看看。
假設我們已經編好了dll中的相關代碼,那麼如何讓它運行呢,從開始我已經提過,我們要找一個宿主,也就是一個exe進程來載入我們的dll,而載入dll又可以分為以下幾種方式:
一:利用系統中的rundll32.exe載入
經常會有人在註冊表的啟動項中會發現類似鍵值
rundll32.exe c:\temp\XXX.dll dllmain
那麼是什麼意思呢?,其實rundll32.exe這個程式顧名思義,運行32位元的dll程式,功能就是以命令列的方式調用動態連結程式庫,其命令列下的使用方法為:
Rundll32.exe dll的名字 調用的函數名
如果我們的dll中編寫了test()這個函數,那麼調用方式就是:Rundll32.exe C:\dlltest.dll test
這樣dll中的函數就得到運行了。
二:替換系統中的DLL檔
這可以說是上面的升級版了,它把實現了後門功能的代碼做成一個和系統匹配的DLL檔,並把原來的DLL文件改名。遇到應用程式請求原來的DLL檔時, DLL後門就啟一個轉發的作用,把"參數"傳遞給原來的DLL檔;如果遇到特殊的請求時(比如用戶端),DLL後門就開始,啟動並運行了,但是實現卻不太容易,所以沒有流行開來。
三:就是我們要說的dll注入技術了
其意義是將DLL檔嵌入到正在運行的系統進程當中。在Windows系統中,每個進程都有自己的私有記憶體空間,但還是有種種方法來進入其進程的私有記憶體空間,來實現動態嵌入式。
有什麼好處呢,首先是實現了隱藏,工作管理員中看不見我們的dll後門,其次windows和linux 不同,不能刪除正在運行的程式,這就是為什麼經常刪東西時候會提示“xxx正在運行,無法刪除。可能最重要的是可以穿透絕大多數防火牆了,設想防火牆肯定不會阻攔ie,那我們把dll插入ie進程,不就穿透防火牆了嗎。
那麼我們如何實現把dll注入到exe中呢?dll自己又沒長腿,呵呵,我們需要一個dlllorder.exe,再哪弄?自己寫唄,把代碼寫到dlllorder.exe中,只要運行dlllorder.exe,相應的dll檔就可以注入到任何程式中了。有了dlllorder就好辦了,只要能讓系統每次自動啟動dlllorder,後門的生存期就大大增長了,至於如何自啟動,有註冊表,服務,BHO,activex,計畫任務等等,太多了,就不介紹了。
dll木馬的防範與清除
第一招:
對於dll的隱藏地,temp,system32,windows這三個資料夾是最常見的,如果你哪天發現temp裡某個dll檔無法刪除,那麼幾乎可以肯定這個檔有問題了,
安裝好系統和所有的應用程式之後,備份system32目錄下的EXE和DLL檔:打開CMD,來到WINNT\system32目錄下,執行: 複製內容到剪貼板
可以在命令提示下輸入" dir *.exe >exefirst.txt dir *.dll >dllfirst.txt " 這樣,就會把所有的EXE和DLL檔案備份到exe.txt和dll.txt檔中,日後,如發現異常,可以使用相同的命令再次備份EXE和DLL檔 複製內容到剪貼板
在命令提示下輸入 " dir *.exe >exeSecond.txt dir *.dll >dllSecond.txt " 並使用 -> 複製內容到剪貼板
在命令提示下輸入 " fc exefirst.txt exeSecond.txt >dllresult.txt fc dllfirst.txt dllSecond.txt >exeresult.txt " 其意思為使用FC命令比較兩次的EXE檔和DLL文件,並將比較結果保存到exedll.txt文件中。通過這種方法,我們就可以發現多出來的EXE和DLL檔,並通過檔大小,建立時間來判斷是否為DLL後門。
第二招:
運用相關工具如,icesword ,ring防火牆,重點檢測ie,exeplorer桌面進程中是否有未知的dll載入檔,如果用ring防火牆,裡面有未知dll都以紅色顯示,很方便看
第三招:
可透過建立的時間來尋找,利用Windows系統中的搜索功能,設定時間,來搜尋.
第四招:
定期檢查系統自動載入的地方,如登錄開機項,服務清單,win.ini,system.ini…可以去網上搜索更多啟動的地方
第五招:
用相關工具查看埠列表,如果你不想用cmd的話,注意下每個tcp連接後的應用程式路徑,也可以發現可以檔
第六招:
當我們運用前面幾招找出了可疑檔,如何刪除呢?如何殺“寄生蟲”? 最簡單的辦法就是讓“宿主”死去 ,結束被插入了的exe進程,類似ie,桌面這類進程可以直接用工作管理員kill,這裡提一下,kill桌面exeplorer進程時,會發現工作列消失了,那麼怎麼刪dll呢,按ctrl+alt+del調出工作管理員,依次點功能表列的 檔--新建任務,這時候會出現一個 “建立新任務” 的視窗,點下方的“瀏覽”找到插入桌面的dll檔,也就是“寄生蟲”了,呵呵,右鍵刪之,刪了後在“創建新任務”的視窗運行欄中輸入“exeplorer"確定後,我們的宿主就復活了,哈哈,體內的寄生蟲也沒了。
如果插入的是crss.exe等系統核心進程呢?無法殺死宿主怎麼辦?沒關係,我們還有安全模式啊,開機時按f8進入安全模式,找到你確定的可疑檔,刪之,這個世界終於清淨了。。。。
文後:現實中分析,查殺可疑檔當然沒有這麼簡單,除了要有興趣還要加上一些經驗值~只要抓住核心就可以了,不管它如何變種,照樣現出原形,希望對那些對系統不太熟悉的網友能有所幫助~
本文參考了部分網路文章和書籍,在此感謝這些無私的奉獻作者
資料來源:http://tw.myblog.yahoo.com/ymk-jesse/
我只是個小小的入門者