指令碼的故事(4)
任務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
安裝了 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 ,如需轉載請自行聯絡原作者
相關文章
- 指令碼的故事(2)指令碼
- 用指令碼來講一個技術生活的故事指令碼
- 解剖Nginx·自動指令碼篇(4)工具型指令碼系列Nginx指令碼
- 用Ant構建指令碼(4)指令碼
- Flex精華摘要 4:使用AS指令碼Flex指令碼
- 精讀 Nginx·自動指令碼篇(4)工具型指令碼系列Nginx指令碼
- Git(4) 子樹拉取指令碼Git指令碼
- ext4 時延stap指令碼指令碼
- 《程式碼之美》的故事
- 如何用 ANTLR 4 實現自己的指令碼語言?指令碼
- 生成insert指令碼的指令碼指令碼
- go原始碼解析-Println的故事Go原始碼
- Winrar4.x的檔案欺騙漏洞利用指令碼指令碼
- Bootstrap 之 Metronic 模板的學習之路 – (4)原始碼分析之指令碼部分boot原始碼指令碼
- dyld背後的故事&原始碼分析原始碼
- 程式碼故事:漢德的救贖
- 執行Shell指令碼的4種方法及區別詳解指令碼
- linux學習day4——shell指令碼中Linux指令碼
- 指令Angular 4 - DirectivesAngular
- Redis的指令碼Redis指令碼
- 【DBA 指令碼】查詢current open cursor的指令碼指令碼
- [開發故事]4項技巧使你不再為PHP中文編碼苦惱PHP
- 路在何方:小白程式猿打怪與升級的故事(4)
- 庫物件指令碼抽取指令碼物件指令碼
- 【VMware vSAN】vSAN Data Protection Part 4:指令碼部署。指令碼
- Vue(4)Vue指令的學習1Vue
- PowerShell 指令碼中的密碼指令碼密碼
- 【位元熊故事匯】4月MVP英雄故事 —— 微軟X英特爾春日漫話MVP微軟
- 巧用shell指令碼生成快捷指令碼指令碼
- AngularJS 4(三)【指令】AngularJS
- 4.v-once指令
- 批量改名的指令碼指令碼
- MySQL 04-EMOJI 表情與 UTF8MB4 的故事MySql
- 程式碼審查的藝術:Dropbox 的故事
- ffmpeg批次mov轉換mp4格式指令碼指令碼
- 【第1168期】字元編碼的故事字元
- 密碼指令碼密碼指令碼
- [指令碼例項]——統計系統資訊指令碼指令碼