指令碼的故事(4)

技術小甜發表於2017-11-15
任務15:檢查 Windows 版本 
安裝了 Service Pack 1 意味著什麼?如果你執行的是 Windows XP,那麼說明你緊跟時代步伐,但是如果你使用的是 Windows 2000 的話,就說明你已經落伍了。(Windows 2000現在已經發展到 Service Pack 4 了)。這說明,如果你不知道計算機執行的是什麼 Windows 版本的話,指令碼返回的某些資訊是沒有意義的。這裡就有一段指令碼說明這一點: 
strComputer = “.” 
Set objWMIService = GetObject(“winmgmts:” & strComputer & 

ootcimv2″) 

Set colOperatingSystems = objWMIService.ExecQuery _ 
(“Select * from Win32_OperatingSystem”) 
For Each objOperatingSystem in colOperatingSystems 
Wscript.Echo objOperatingSystem.Caption, objOperatingSystem.Version 
Next 

任務16:檢查 Office 巨集的安全性 
Microsoft Office 讓使用者自己決定如何執行嵌入檔案中的巨集。你可以選擇: 
• 高。只允許執行來自受信任來源的巨集。所有其它經過簽署的和未經簽署的巨集都將被禁用。 
• 中。你可以選擇是否執行可能不安全的巨集。 
• 低。允許執行所有巨集。 
在將巨集安全性設定為高的情況下,你可以在其它時間中阻止自動執行的巨集(當你開啟一個文件或者執行某個程式的時候自動執行的那些巨集)對你的計算機做些不好的事情。毫無疑問,一開始就將 Office 設定成為高安全性是個不錯的主意,如果能夠經常檢查高安全性是否還在執行將會更好。 
檢查巨集安全性級別可能會有點靈活,因為指向你所要更改的註冊值可能會因為你安裝的 Office 版本的不同而相差很大。我們沒有精力來討論如何判斷 Office 的版本(提示:使用 WMI 組的Win32_Product)然後決定合適的登錄檔路徑,但是至少這裡有一段能夠從 Outlook 2000 中檢索出巨集安全級別的指令碼。你應該能夠輕易地根據你的需要和所安裝的 Office 版本來改進這段指令碼: 
Const HKEY_CURRENT_USER = &H80000001 
strComputer = “.” 
Set objReg=GetObject(“winmgmts:” & strComputer & 

ootdefault:StdRegProv”) 

strKeyPath = “SoftwareMicrosoftOffice.0OutlookSecurity” 
strValueName = “Level” 
objReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, 
dwValue 
If dwValue = 3 Then 
Wscript.Echo “Outlook macro security is set to high.” 
ElseIf dwValue = 2 Then 
Wscript.Echo “Outlook macro security is set to medium.” 
Else 
Wscript.Echo “Outlook macro security is set to low.” 
End If 
上述這段指令碼是用來檢測 Outlook 的巨集安全性級別的。那麼,如果你想要檢測 Word、Excel、PowerPoint 或者 Access的巨集安全級別的時候該怎麼辦?好吧,你只需要根據需要更改登錄檔路徑即可: 
strKeyPath = “SoftwareMicrosoftOffice.0WordSecurity” 
strKeyPath = “SoftwareMicrosoftOffice.0ExcelSecurity” 
strKeyPath = “SoftwareMicrosoftOffice.0PowerPointSecurity” 
strKeyPath = “SoftwareMicrosoftOffice.0AccessSecurity” 

任務17:檢查 IE 安全區域 
為了保護使用者不受惡意網站的攻擊,Internet Explorer 使用安全區域來管理在你訪問某個網站時可能完成或無法完成的行為(比如執行指令碼、安裝 ActiveX 控制元件等等)。在預設設定下,這些安全區域提供不同的安全級別:你可以在本地內部網路區域執行在受限網站區域中不能執行的程式(比如執行指令碼)。 
如果你想要了解更多有關安全區域的情況,我們建議你閱讀Internet Explorer 增強安全性設定白皮書(此白皮書是針對 Windows 2003 編寫的,但是其中的內容對於其它 Windows 版本同樣適用。)在這裡,我們有一段能夠報告本地內部網路區域(區域1)安全級別的指令碼: 
Const HKEY_CURRENT_USER = &H80000001 
strComputer = “.” 
Set objReg=GetObject(“winmgmts:” & strComputer & 

ootdefault:StdRegProv”) 

strKeyPath = “SoftwareMicrosoftWindowsCurrentVersionInternet 
Settingsones” 
strValueName = “CurrentLevel” 
objReg.GetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue 
Select Case dwValue 
Case 73728 
Wscript.Echo “The security zone is set to high security.” 
Case 69632 
Wscript.Echo “The security zone is set to medium security.” 
Case 66816 
Wscript.Echo “The security zone is set to medium-low security.” 
Case 65536 
Wscript.Echo “The security zone is set to low security.” 
Case Else 
Wscript.Echo “The security zone is set to custom security.” 
End Select 
你也可以通過此段指令碼檢索有關受信任站點(區域2)、Internet(區域3)以及受限制站點(區域4)的安全資訊。只需要相應更改登錄檔路徑: 
SoftwareMicrosoftWindowsCurrentVersionInternet Settingsones 
SoftwareMicrosoftWindowsCurrentVersionInternet Settingsones 
SoftwareMicrosoftWindowsCurrentVersionInternet Settingsones 
在絕大多數情況下,這個方法能夠向你提供所需的資訊。唯一會碰到的問題是使用者是否已經更改了安全區域的一項或者多項設定。在那樣的情況下,安全級別將會被報告為”使用者自定義”,但是你就無從知道這個新的使用者自定義的安全級別是比原來的預設級別更加嚴格還是更加寬鬆。這也就是指令碼再次派上用場的地方:你可以使用一段指令碼來決定(或者配置)各個安全區域的安全設定。有關這方面的更多信
息,請參閱Internet Explorer 增強安全性設定白皮書或者擦亮你的眼睛看看 Tweakomatic。(不,這不是拼寫錯誤。我們真的將要釋出一款名叫Tweakomatic的東西。你一定要相信我們遲早會這麼做的。) 
任務18:檢查 Outlook 安全區域 
Microsoft Outlook 同樣使用 Internet Explorer 的安全區域來決定是否執行來自於 HTML 格式資訊的指令碼和活動內容。要避免在計算機上執行嵌入了 HTML 資訊的指令碼,你需要做兩件事情: 
• 確保在 Internet Explorer 安全區域內執行指令碼的功能已經被禁用(特別是在受限制的站點區域內)。 
• 確保 Outlook 使用那個安全區域 
Outlook 安全區域記錄在登錄檔中;同樣,指向那個登錄檔值的確切路徑取決於你在計算機上安裝的 Office 版本。如果你使用 Office 2000,你可以使用以下指令碼來決定 Outlook 的安全區域: 
Const HKEY_CURRENT_USER = &H80000001 
strComputer = “.” 
Set objReg=GetObject(“winmgmts:” & strComputer & 

ootdefault:StdRegProv”) 

strKeyPath = “SoftwareMicrosoftOffice.0OutlookOptionsGeneral” 
strValueName = “Security Zone” 
objReg.GetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue 
Select Case dwValue 
Case 4 
Wscript.Echo _ 
“Outlook is using settings from the Restricted Sites zone.” 
Case 3 
Wscript.Echo “Outlook is using settings from the Internet 
zone.” 
Case 2 
Wscript.Echo “Outlook is using settings from the Trusted Sites 
zone.” 
Case 1 
Wscript.Echo “Outlook is using settings from the Local Intranet 
zone.” 
Case Else 
Wscript.Echo “The Outlook security zone could not be 
determined.” 
End Select 
在絕大多數計算機上,受限制的站點區域有最嚴格的安全限制。正因為如此,你可能會更進一步來為所有使用者配置 Outlook 設定,以保證 Outlook 在 HTML 安全上使用受限制的站點。這裡正好是一段實現以上功能的指令碼: 
Const HKEY_CURRENT_USER = &H80000001 
strComputer = “.” 
Set objReg=GetObject(“winmgmts:” & strComputer & 

ootdefault:StdRegProv”) 

strKeyPath = “SoftwareMicrosoftOffice.0OutlookOptionsGeneral” 
strValueName = “Security Zone” 
dwValue = 4 
objReg.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue 
返回頁首 
最後的思考 
這裡我們想再次強調一點:如果 Security Analyzer 能夠符合你的需求,那麼你就沒有必要再寫那些和 Security Analyzer 實現同樣功能的指令碼。(Scripting Guys 絕對堅持認為你不必去做你完全沒有必要做的事情。)但是從另外一方面來說,Security Analyzer 只能夠實現它編寫設計的功能是它的一個侷限性。之所以會如此是因為你覺得還有其他一些很重要的安全檢查,而這些檢查是 Security Analyzer 所不能做到的。例如,也許你想確定一下所有使用者是否都使用受密碼保護的屏保程式。Security Analyzer 能夠做到嗎?不能,但是你卻可以通過編寫一段很簡單的指令碼來實現: 
Const HKEY_CURRENT_USER = &H80000001 
strComputer = “.” 
Set objReg =GetObject(“winmgmts:” & strComputer & 

ootdefault:StdRegProv”) 

strKeyPath = “Control PanelDesktop” 
ValueName = “ScreenSaverIsSecure” 
objReg.GetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, 
strValue 
If strValue = “1” Then 
Wscript.Echo “The screen saver is password protected.” 
Else 
Wscript.Echo “The screen saver is not password protected.” 
End If 
然後,當然了,你也可以再進一步對屏保程式進行密碼保護: 
Const HKEY_CURRENT_USER = &H80000001 
strComputer = “.” 
Set objReg =GetObject(“winmgmts:” & strComputer & 

ootdefault:StdRegProv”) 

strKeyPath = “Control PanelDesktop” 
ValueName = “ScreenSaverIsSecure” 
strValue = “1” 
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, 
strValue 
所以,也許你使用 Security Analyzer 來完成某些任務同時使用指令碼來完成其它一些任務。問題的重點在於,你不應該用非此即彼的主張來看待安全問題:不是使用 Security Analyzer 就是通過編寫指令碼。相反,無論使用哪個都能起到很好的效果。畢竟,指令碼通常用來輔助已經使用的工具而不是完全取代這些工具。選擇你應該乾的工作。 
或者,至少隨便做一些能夠讓你的管家去做的事情。 
你對欄目有什麼問題或意見嗎?請寫信到 [email]scripter@microsoft.com[/email]。找 Bentley 

(完)















本文轉自starger51CTO部落格,原文連結:http://blog.51cto.com/starger/20190 ,如需轉載請自行聯絡原作者




相關文章