VBScript 病毒的氾濫讓人們重新認識了這種腳本語言的威力。VBS 代碼在本地由 Windows Script Host (WSH) 解釋執行,WSH 是微軟提供的基於 32 位 Windows 平台、與語言無關的腳本解釋機制,使腳本能直接在桌面或命令提示符下運行。利用 WSH,用戶可操作 WSH 對象、ActiveX 對象、註冊表與文件系統,在 Windows 2000 以上還能訪問活動目錄服務。腳本在圖形界面由 wscript.exe 執行,在字符界面由 cscript.exe 執行。以下整理了 VBS 在系統安全管理中的八個實用技巧。
當註冊表編輯器被惡意軟件或策略禁用時,可用以下腳本快速恢復:
Dim WSH
Set WSH = WScript.CreateObject("WScript.Shell")
WSH.Popup "正在解鎖註冊表編輯器!"
WSH.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools", 0, "REG_DWORD"
WSH.Popup "註冊表解鎖成功!"
將代碼保存為 .vbs 文件,雙擊即可執行。
默認共享(如 C$, IPC$)常被攻擊者利用。以下腳本可批量關閉所有磁盤隱藏共享及管理共享:
Dim WSHShell, fso, dc, d, str
Set WSHShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set dc = fso.Drives
For Each d In dc
WSHShell.Run "net share " & d.DriveLetter & "$ /delete", 0, True
Next
WSHShell.Run "net share admin$ /delete", 0, True
WSHShell.Run "net share ipc$ /delete", 0, True
執行後可在命令提示符下用 net share 驗證共享已消失。
無需安裝額外工具,幾行代碼即可彈窗顯示本機 IP:
Dim WS
Set WS = CreateObject("MSWinsock.Winsock")
IPAddress = WS.LocalIP
MsgBox "本機 IP 地址:" & IPAddress
保存為 ShowIP.vbs,雙擊運行。
入侵後清除日誌是攻擊者常見動作。利用 WMI 的 ClearEventLog 方法可輕鬆清空應用程式、系統、安全三大日誌:
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,(Backup)}!\\" & strComputer & "\root\cimv2")
Dim myLogs(3)
myLogs(1) = "Application"
myLogs(2) = "System"
myLogs(3) = "Security"
For Each log In myLogs
Set colLogFiles = objWMIService.ExecQuery("Select * from Win32_NTEventLogFile Where LogFileName='" & log & "'")
For Each objLogFile In colLogFiles
objLogFile.ClearEventLog()
Next
Next
保存為 cleanevent.vbs 即可使用。
日誌被清空會引起管理員懷疑,偽造日誌可混淆視聽。利用 WScript.Shell 的 LogEvent 方法寫入自定義日誌:
Set ws = WScript.CreateObject("WScript.Shell")
ws.LogEvent 0, "系統備份任務成功完成"
參數 0 代表成功事件,亦可用 1(錯誤)、2(警告)、4(信息)、8(成功審計)、16(失敗審計)。注意:此法只能寫入應用程式日誌,來源固定為 WSH,隱蔽性有限。
通過修改註冊表可禁用「執行」、「搜尋」、「關機」等選單項目:
Dim ChangeStartMenu
Set ChangeStartMenu = WScript.CreateObject("WScript.Shell")
RegPath = "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\"
Type_Name = "REG_DWORD"
Key_Data = 1
Sub Change(Argument)
ChangeStartMenu.RegWrite RegPath & Argument, Key_Data, Type_Name
MsgBox "設置成功!"
End Sub
Call Change("NoRun") ' 禁用「執行」
Call Change("NoFind") ' 禁用「搜尋」
Call Change("NoClose") ' 禁用「關機」
保存為 ChangeStartMenu.vbs 雙擊生效。
WScript.Shell 的 Run 方法可啟動任意命令:
Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
iReturn = objShell.Run("cmd.exe /C set var=world", 1, True)
可將 cmd.exe 替換為 %ComSpec%,命令部分可換成任何合法指令,實現靈活的自動化操作。
利用 ADSI 控制服務狀態,適用於 IIS 等關鍵服務的自動恢復:
Const ADS_SERVICE_STOPPED = 1
Set objComputer = GetObject("WinNT://MYCOMPUTER,computer")
Set objService = objComputer.GetObject("Service", "MYSERVICE")
If objService.Status = ADS_SERVICE_STOPPED Then
objService.Start
End If
保存為 startsvc.vbs,以 cscript c:\startsvc.vbs 方式運行。
VBS 病毒依賴 WSH 運行,防範措施包括:
.vbs、.vbe、.js、.jse 的檔案關聯,使腳本無法直接執行。結合以上技巧與防範措施,可有效提升系統安全管理效率。