CMD是一個很重要的入口,不管是對於我們平常做的一些命令操作還是注冊表都是一個很重要的入口,不過他對於病毒來說同樣也是個入侵電腦的入口。翻開網絡上的入侵資料看看吧!大多數的入侵都是在cmd下完成的,比較典型的有溢出得到一個system權限的cmdshell,然後種植一個Tcmd之類綁定了cmd.exe的後門。也有利用web程序的漏洞得到一個webshell然後利用低權限的cmdshell來提升權限,最後再種植後門……各種各樣的攻擊都說明入侵和cmd.exe是相關的,因為一個cmd.exe就是一個用戶與系統交互的一個接口,是入侵者進入系統的首要目標。當然,我們不能在這裡坐以待斃,如何防止別人通過溢出得到你的cmdshell,如何知道別人已經進入系統並且獲得cmdshell,如何在人家登陸到我們機器的時候抓住入侵者呢?現在就讓我們打造一個cmd下的終極防線吧。
網絡上談得比較多的一種防范的方法是將cmd.exe設置權限,這樣的確可以起到很大的作用,但是權限比較難以確定,並且如果別人自己上傳cmd.exe的話還是可以突破的,然後用nc綁定cmd.exe到一個端口還是可以得到cmdshell。今天我給大家介紹一種新的方法,不用設置cmd的權限哦!首先說說原理,還是打開你的cmd命令窗口,運行命令cmd /?,看看得到了什麼吧!如圖一。
注意以下內容:
如果 /D 未在命令行上被指定,當 CMD.EXE 開始時,它會尋找以下 REG_SZ/REG_EXPAND_SZ 注冊表變量。如果其中一個或兩個都存在,這兩個變量會先被執行。
HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorAutoRun
和/或
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun
也就是說如果存在HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorAutoRun和HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun這兩個鍵值並且你不是用cmd.exe /D啟動cmd進程的話會在啟動cmd.exe之前先去執行這兩個鍵值指定的程序。嘿嘿,想到什麼了,既然可以先於cmd.exe之前執行自己的程序或者腳本,我們就完全可以控制cmd.exe的動作了。
我們找到了我們可以利用的東西,現在看看如何利用cmd.exe的這個特性來做些什麼吧!關鍵是編輯
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun的內容(沒有的話你可以新建一個)為你自定義的一個腳本的位置,為了方便我們可以使用批處理,我的系統是2000 adv server。譬如你可以在c:winntsystem32下寫入一個cmd.bat的批處理文件,內容為你希望在啟動cmd.exe進程之前要運行的命令,然後編輯HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun的內容為c:winntsystem32cmd.bat如圖二。
假設你的機器並不是經常及時打上補丁,你就可以編輯system32下cmd.bat的內容為exit,這樣就抵御黑客的遠程溢出攻擊了,因為一般的溢出要麼是反彈一個cmdshell要麼是綁定一個cmdshell,而溢出的shellcode執行cmd之後會首先運行的是我們指定的cmd.bat裡面的內容,而內容正是exit退出,這裡為了給大家示范我指定的命令是pause命令,如圖三。
這樣不知道真相的人肯定會很郁悶的,即使知道真相如果他是一般的菜鳥的我想對這樣的問題他也是束手無策吧,除非他使用的是其他的shellcode。
光是這樣的防范還沒有什麼意思,我們最好能夠抓住入侵者,那我們就好好的寫這個cmd.bat腳本吧!要抓住入侵者或者想知道入侵事件發生的時間我們可以定義cmd.bat的內容如下:
@echo off 關閉命令回顯@netstat -an>>c:winntsystem32net.log 取得當前的網絡連接狀態並輸出到net.log文件,用>>重定向是避免日志被後來的沖洗掉@date /t>>c:winntsystem32date.log 取得入侵發生的時間@time /t>>c:winntsystem32time.log