Windows 服務器默認註冊的多個 COM 組件(如 WScript.Shell、Shell.Application、FileSystemObject)常被惡意腳本利用執行系統命令、讀寫文件、提升權限。本文提供系統級組件加固方案,結合註冊表修改、ACL 控制、服務禁用等多層防護,大幅提升虛擬主機腳本安全性。
regsvr32 /u C:\WINNT\System32\wshom.ocx
del C:\WINNT\System32\wshom.ocx
regsvr32 /u C:\WINNT\system32\shell32.dll
del C:\WINNT\system32\shell32.dll
regsvr32 /u C:\WINDOWS\System32\wshom.ocx
del C:\WINDOWS\System32\wshom.ocx
regsvr32 /u C:\WINDOWS\system32\shell32.dll
del C:\WINDOWS\system32\shell32.dll
警告:刪除 shell32.dll 可能導致系統功能異常(如資源管理器、控制面板)。生產環境建議採用方案二(註冊表重命名)而非物理刪除。
核心思路:導出註冊表項 → 修改 ProgID 與 CLSID 名稱 → 導入新項 → 刪除舊項。使惡意腳本無法通過標準 ProgID 調用組件,而管理員知曉新名稱仍可正常調用。
regedit)Shell.Application,定位兩個關鍵項:
HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}HKEY_CLASSES_ROOT\Shell.Applicationshell_backup.reg){13709620-C279-11CE-A49E-444553540000} → {13709620-C279-11CE-A49E-444553540001}(僅允許 0-9、A-F)Shell.Application → Shell.Application_nohackWindows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}]
@="Shell Automation Service"
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\InProcServer32]
@="C:\\WINNT\\system32\\shell32.dll"
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\ProgID]
@="Shell.Application_nohack.1"
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\TypeLib]
@="{50a7e9b0-70ef-11d1-b75a-00a0c90564fe}"
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\Version]
@="1.1"
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\VersionIndependentProgID]
@="Shell.Application_nohack"
[HKEY_CLASSES_ROOT\Shell.Application_nohack]
@="Shell Automation Service"
[HKEY_CLASSES_ROOT\Shell.Application_nohack\CLSID]
@="{13709620-C279-11CE-A49E-444553540001}"
[HKEY_CLASSES_ROOT\Shell.Application_nohack\CurVer]
@="Shell.Application_nohack.1"
| 組件 | ProgID 路徑 | CLSID 路徑 | ACL 禁用命令 |
|---|---|---|---|
| FileSystemObject | HKEY_CLASSES_ROOT\Scripting.FileSystemObject\ |
HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID\ |
2000: cacls C:\WINNT\system32\scrrun.dll /e /d guests2003: cacls C:\WINDOWS\system32\scrrun.dll /e /d guests |
| WScript.Shell | HKEY_CLASSES_ROOT\WScript.Shell\HKEY_CLASSES_ROOT\WScript.Shell.1\ |
對應 CLSID 子項 | 同 Shell.Application(針對 wshom.ocx) |
| Shell.Application | HKEY_CLASSES_ROOT\Shell.Application\HKEY_CLASSES_ROOT\Shell.Application.1\ |
對應 CLSID 子項 | 2000: cacls C:\WINNT\system32\shell32.dll /e /d guests2003: cacls C:\WINDOWS\system32\shell32.dll /e /d guests |
操作統一模式:將 ProgID 重命名為 _ChangeName 後綴,同步修改 CLSID 值;或直接刪除註冊表項。管理員調用時使用新 ProgID 即可。
# Windows 2000
cacls C:\WINNT\system32\Cmd.exe /e /d guests
# Windows 2003
cacls C:\WINDOWS\system32\Cmd.exe /e /d guests
ServUDaemon.exe 與 ServUAdmin.exeLocalAdministrator 和 #l@$ak#.lk;0@P註銷/重命名 WScript.Shell 與 Shell.Application 可徹底阻斷 ASP/PHP 腳本通過 COM 組件提權的路徑。結合系統服務精簡、硬盤 ACL、端口過濾、本地安全策略,虛擬主機腳本入侵風險可降至極低。需注意:Perl 等其他腳本語言可能擁有獨立 Shell 能力,建議同步加固。
所有註冊表/ACL 修改需重啟 IIS 服務(iisreset)後生效。