合規(guī)報(bào)告:控制客戶端云訪問(wèn)的第一步
建立安全的訪問(wèn)機(jī)制是企業(yè)步入云計(jì)算時(shí)代的第一步?,F(xiàn)在為合規(guī)、報(bào)告和遠(yuǎn)程連接設(shè)置相應(yīng)的策略,也就規(guī)定了您的團(tuán)隊(duì)將如何安全、順利地在云計(jì)算環(huán)境中開(kāi)展工作。使用帶 IPsec 的網(wǎng)絡(luò)訪問(wèn)保護(hù) (NAP) 連接技術(shù)(如 DirectAccess)可以幫助改進(jìn)您的審核和合規(guī)報(bào)告工作。
為新的 DirectAccess 或 IPsec 部署方案創(chuàng)建審核和報(bào)告解決方案時(shí),識(shí)別和收集必要的數(shù)據(jù)困難重重。在本文中,我們將用一家虛擬的公司作為例子,說(shuō)明如何創(chuàng)建 DirectAccess 和 NAP 解決方案,并提供報(bào)告數(shù)據(jù)以確定誰(shuí)進(jìn)行了連接、何時(shí)進(jìn)行的連接以及客戶端計(jì)算機(jī)是否合規(guī)。
合規(guī)問(wèn)題
由于員工的工作場(chǎng)所越來(lái)越變化多端,因此很多企業(yè)都采用了靈活的遠(yuǎn)程訪問(wèn)技術(shù),如 DirectAccess。使用 DirectAccess 后,只要獲得授權(quán)的計(jì)算機(jī)連接 Internet,用戶就將自動(dòng)連接到遠(yuǎn)程網(wǎng)絡(luò)。由于遠(yuǎn)程客戶端有時(shí)并未安裝最新的安全修補(bǔ)程序,而且可能感染了惡意軟件,因此很多企業(yè)還部署了帶 IPsec 的 NAP 來(lái)幫助確保只有健康的客戶端可以訪問(wèn)受保護(hù)的資源。
在金融服務(wù)、醫(yī)療衛(wèi)生和政府等行業(yè),確保只有健康且獲得批準(zhǔn)的客戶端能夠連接到云計(jì)算或本地網(wǎng)絡(luò)資源,對(duì)于保護(hù)數(shù)據(jù)的完整性非常重要。這些行業(yè)經(jīng)常要按照內(nèi)部的合規(guī)策略以及國(guó)家/地區(qū)的法律規(guī)定,確認(rèn)個(gè)人身份信息(PII,包括銀行賬號(hào)、姓名和健康記錄等)不會(huì)被任何未經(jīng)授權(quán)的人(包括通過(guò)惡意軟件和未知的第三方應(yīng)用程序)訪問(wèn)。
用戶都希望能夠輕松地遠(yuǎn)程訪問(wèn)其工作資源,因此這些行業(yè)的 IT 經(jīng)理們還必須確保只有健康的客戶端可以訪問(wèn)公司網(wǎng)絡(luò)。遺憾的是,要從 NAP 和 DirectAccess 日志創(chuàng)建有意義的報(bào)告并非易事。
真正的解決方案就是:設(shè)置 DirectAccess 基礎(chǔ)設(shè)施以實(shí)現(xiàn)順暢的遠(yuǎn)程客戶端訪問(wèn)、使用 NAP 和 IPsec 保護(hù) Intranet 資源并通過(guò)報(bào)告來(lái)監(jiān)控策略的執(zhí)行情況。TechNet 中有很多關(guān)于如何通過(guò) DirectAccess 實(shí)現(xiàn) NAP 的有用信息,但是對(duì)于如何有效記錄和報(bào)告客戶端的健康狀況,卻很少提及。我們將用一家虛擬公司 (Woodgrove National Bank) 為例,說(shuō)明一位顧問(wèn)如何用一些簡(jiǎn)單的代碼和 SQL 查詢來(lái)創(chuàng)建可以直接閱讀的報(bào)告。報(bào)告中詳細(xì)列出了在指定時(shí)間段內(nèi)連接的客戶端以及這些客戶端是否 NAP 合規(guī)。
在DirectAccess上設(shè)置NAP
DirectAccess 要求連接的客戶端運(yùn)行兼容版本的 Windows(Windows 7 旗艦版或 Windows 7 企業(yè)版)。這些客戶端連接到運(yùn)行了 Windows Server 2008 R2 的 DirectAccess 服務(wù)器。 DirectAccess 部署方案中可以包含一臺(tái)或多臺(tái) DirectAccess 服務(wù)器。(我們建議使用至少兩臺(tái)服務(wù)器,以便在網(wǎng)絡(luò)繁忙時(shí)幫助平衡負(fù)載。)部署中還必須包括一臺(tái)網(wǎng)絡(luò)位置服務(wù)器(用于確定客戶端是連接到 Internet 還是連接到 Intranet)以及一個(gè)或多個(gè)證書(shū)吊銷列表 (CRL) 分發(fā)點(diǎn)(用于追蹤不再允許訪問(wèn)的客戶端)。要了解如何設(shè)計(jì) DirectAccess 部署方案,請(qǐng)參見(jiàn) TechNet 上的 DirectAccess 設(shè)計(jì)指南。
在 DirectAccess 上添加 NAP 時(shí),您必須實(shí)施針對(duì) NAP 的 IPsec 強(qiáng)制方法。使用 IPsec 時(shí),NAP 合規(guī)的客戶端將獲得健康證書(shū)。如果計(jì)算機(jī)不合規(guī),則不允許與其他合規(guī)的計(jì)算機(jī)進(jìn)行通信。要了解如何設(shè)計(jì)和部署 NAP,請(qǐng)參見(jiàn) TechNet 上的規(guī)劃具有網(wǎng)絡(luò)訪問(wèn)保護(hù)的 DirectAccess。要了解如何將帶 IPsec 的 NAP 設(shè)計(jì)為強(qiáng)制方法,請(qǐng)參見(jiàn) TechNet 上的 IPsec 強(qiáng)制設(shè)計(jì)。
考慮 NAP IPsec 強(qiáng)制方案如何在 DirectAccess 及其 IPsec 連接策略的背景下工作非常有意思。首先,由于 DirectAccess 使用 IPsec 進(jìn)行身份驗(yàn)證并處理保密性,因此 DirectAccess 部署中的 NAP 強(qiáng)制方案必須是 IPsec。其次,請(qǐng)記住 IPsec 的 AuthIP 組件讓您在策略中配置兩個(gè)獨(dú)立的身份驗(yàn)證要求,因此連接必須同時(shí)滿足這兩個(gè)要求才能成功。一般來(lái)說(shuō),如果配置了兩個(gè) AuthIP 身份驗(yàn)證選項(xiàng),則第一個(gè)是計(jì)算機(jī)憑據(jù),第二個(gè)是用戶憑據(jù)。但是,也有可能要配置兩個(gè)計(jì)算機(jī)憑據(jù)。
NAP 與 AuthIP 策略是如何結(jié)合在一起的呢?NAP/IPsec 強(qiáng)制方案為健康的計(jì)算機(jī)頒發(fā)帶有健康對(duì)象標(biāo)識(shí)符 (OID) 的證書(shū)。AuthIP 策略引擎包括一個(gè)選項(xiàng),要求提供該健康 OID。因此,只有健康的計(jì)算機(jī)可以滿足第一個(gè) AuthIP 身份驗(yàn)證要求,并且與 DirectAccess 服務(wù)器建立 IPsec 連接。
最后,第二個(gè) AuthIP 身份驗(yàn)證選項(xiàng)要求提供用戶憑據(jù)。就技術(shù)而言,用戶憑據(jù)對(duì) DirectAccess 來(lái)說(shuō)是可選的。換句話說(shuō),客戶端可以只使用計(jì)算機(jī)憑據(jù)向 DirectAccess 端點(diǎn)驗(yàn)證身份。對(duì)于不經(jīng)過(guò)加強(qiáng)的身份驗(yàn)證就授予完全的遠(yuǎn)程網(wǎng)絡(luò)訪問(wèn)權(quán)限,注重安全性的 IT 人員應(yīng)該表示擔(dān)憂。因此,AuthIP 策略最少也要配置為要求第二個(gè) Kerberos 身份驗(yàn)證。要求用戶憑據(jù)的證書(shū)(在 Woodgrove National Bank 方案中就是如此)是最佳方案,因?yàn)檫@可以降低遠(yuǎn)程靜態(tài)密碼攻擊的風(fēng)險(xiǎn)。
在此方案中,Woodgrove National Bank 的網(wǎng)絡(luò)安全和合規(guī)部門(mén)需要一個(gè)報(bào)告,顯示在指定時(shí)間段內(nèi)有哪些用戶連接了公司網(wǎng)絡(luò),以及這些客戶端是否 NAP 合規(guī)。他們相信這段時(shí)間內(nèi)可能出現(xiàn)了用戶數(shù)據(jù)損壞的情況。作為該銀行的顧問(wèn),我們需要確定如何為 DirectAccess 和 NAP 啟用事后報(bào)告功能,然后將這些信息轉(zhuǎn)換為能夠直接閱讀的報(bào)告。
正確的策略配置
在這個(gè)虛擬的方案中,Woodgrove National Bank 已經(jīng)配置了 DirectAccess,使 IPsec 策略要求提供包含 NAP 系統(tǒng)健康 OID 和客戶端身份驗(yàn)證 OID 的客戶端證書(shū)。Woodgrove 以強(qiáng)制模式使用 NAP(而不只是報(bào)告模式),這意味著將禁止不健康的客戶端與健康的客戶端通信。
最后,Woodgrove 配置了 DirectAccess IPsec 策略,使用兩個(gè)基于證書(shū)的憑據(jù):一個(gè)來(lái)自客戶端計(jì)算機(jī),一個(gè)來(lái)自用戶。Woodgrove 按照上述建議選擇了雙證書(shū)配置,以便更好地利用其 PKI 投資,消除遠(yuǎn)程訪問(wèn)的靜態(tài)密碼并利用證書(shū)自動(dòng)注冊(cè)功能。
本示例的其余部分假定您具備相應(yīng)的實(shí)踐知識(shí),了解 DirectAccess、NAP 和 IPsec 強(qiáng)制模式的工作原理。要深入了解這些技術(shù),請(qǐng)參見(jiàn)以下資源:
下面的報(bào)告解決方案利用了 DirectAccess 服務(wù)器上的 IPsec 的內(nèi)置審核功能以及網(wǎng)絡(luò)策略服務(wù)器 (NPS) 的健康注冊(cè)機(jī)構(gòu) (HRA) 功能的審核功能。這些審核功能會(huì)在系統(tǒng)和安全事件日志中生成事件,我們將提取這些事件并進(jìn)行報(bào)告。在制定此方法時(shí),我們發(fā)現(xiàn)默認(rèn)生成的是 HRA 事件,而 IPsec 事件可能需要明確啟用。您可以在命令提示符窗口中使用以下命令來(lái)啟用 IPsec 事件:
auditpol.exe /set /category:"Logon/Logoff" /subcategory:"IPsec Main Mode" /success:enable /failure:enable auditpol.exe /set /category:"Logon/Logoff" /subcategory:"IPsec Quick Mode" /success:enable /failure:enable auditpol.exe /set /category:"Logon/Logoff" /subcategory:"IPsec Extended Mode" /success:enable /failure:enable
DirectAccess 健康報(bào)告
為了開(kāi)始處理 Woodgrove National Bank 的 NAP 和 DirectAccess 事件,我們下載并安裝了 Microsoft 的 Log Parser 2.2。Log Parser 是這種項(xiàng)目中必不可少的工具,因?yàn)槟仨殲g覽新的事件來(lái)源并制定相應(yīng)的架構(gòu)。簡(jiǎn)而言之,Log Parser 可以導(dǎo)入和導(dǎo)出多種數(shù)據(jù)格式,包括 Windows 事件日志 (.evtx)、CSV 和 SQL。
下一步是捕獲所需的事件,包括:
- DirectAccess 服務(wù)器安全日志中與 IPsec 安全關(guān)聯(lián)相關(guān)的事件
 - HRA 服務(wù)器(如果使用 NAP 則是多臺(tái)服務(wù)器)安全和系統(tǒng)日志中與健康注冊(cè)機(jī)構(gòu)相關(guān)的事件
 
收集這些事件的最好方法是實(shí)現(xiàn)自動(dòng)化與集中化。Windows 事件轉(zhuǎn)發(fā)功能就是這樣一種選擇。而在大型的生產(chǎn)部署中,Microsoft System Center 可能更加常用。在本示例中,我們不想為生產(chǎn)服務(wù)器加入新的關(guān)聯(lián)功能,因此使用了簡(jiǎn)單的腳本來(lái)收集事件。
要使用這種方法,我們面對(duì)的挑戰(zhàn)來(lái)自兩個(gè)方面。首先,我們要關(guān)聯(lián)多個(gè)數(shù)據(jù)源,因此大致在同一時(shí)間收集來(lái)自所有數(shù)據(jù)源的數(shù)據(jù)就很重要。其次,我們只需獲取日志的快照,而高流量的事件日志滾動(dòng)更新很快,因此一些關(guān)聯(lián)事件的丟失就無(wú)法避免,尤其是在快照時(shí)間段的邊緣時(shí)刻。這并不會(huì)導(dǎo)致實(shí)驗(yàn)失敗,但會(huì)使微調(diào)查詢變得更困難一些。
對(duì)于每個(gè) IPsec 主模式安全關(guān)聯(lián)(在一臺(tái) DirectAccess 服務(wù)器上),我們預(yù)計(jì)會(huì)看到 NAP 健康流量(在一臺(tái) HRA 服務(wù)器上)。在 NAP 報(bào)告模式中,客戶端計(jì)算機(jī)可能已經(jīng)合規(guī)也可能并不合規(guī)。在 NAP 強(qiáng)制模式中,客戶端計(jì)算機(jī)應(yīng)該已經(jīng)合規(guī)。否則,客戶端如何獲得有效的證書(shū)以通過(guò) DirectAccess 服務(wù)器的身份驗(yàn)證并建立安全關(guān)聯(lián) (SA)?假設(shè)我們?cè)谙挛?3 點(diǎn)同時(shí)截取所有 DirectAccess 和 HRA 服務(wù)器上的日志,有可能我們只看到主模式安全關(guān)聯(lián) (MM SA) 事件,而看不到健康事件。
更有可能的是,我們可以看到 IPsec 快速模式安全關(guān)聯(lián) (QM SA) 和 IPsec 擴(kuò)展模式安全關(guān)聯(lián) (EM SA) 事件,而看不到 MM SA 或健康事件。前者的發(fā)生要比后者晚一個(gè)小時(shí)甚至更多。此外,因?yàn)楦髋_(tái)服務(wù)器上的日志幾乎肯定是按不同的頻率滾動(dòng)更新的,所以我們可能在 DirectAccess 服務(wù)器上獲得自下午 2 點(diǎn)以來(lái)的事件,而在 HRA 上最早的事件也是從下午 2:30 開(kāi)始的。正是由于上述這些原因,我們需要重申,在生產(chǎn)環(huán)境中使用集中的事件收集非常重要。
生成數(shù)據(jù)
為了生成數(shù)據(jù),我們?cè)?DirectAccess 服務(wù)器和 HRA 服務(wù)器上運(yùn)行了腳本。我們還使用任務(wù)計(jì)劃程序?qū)⒛_本配置為自動(dòng)運(yùn)行。我們將腳本配置為在 DirectAccess 服務(wù)器和所有 HRA 同時(shí)運(yùn)行一次。
在 DirectAccess 服務(wù)器上收集數(shù)據(jù)
我們使用以下腳本在 DirectAccess 服務(wù)器上捕獲事件(請(qǐng)參見(jiàn)圖 1):
set MPATH=c:\temp\Logs %MPATH%\LogParser.exe "SELECT * INTO %MPATH%\DA_Security_Events_%COMPUTERNAME%.csv FROM Security WHERE EventCategory=12549 OR EventCategory=12547 OR EventCategory=12550" -o:CSV
注意:此腳本使用了本地的 LogParser.exe(及其關(guān)聯(lián)文件 LogParser.dll)。這樣做是為了使用方便,我們可以輕松地在服務(wù)器之間復(fù)制腳本。
圖 1 借助任務(wù)計(jì)劃程序自動(dòng)運(yùn)行的腳本從 DirectAccess 服務(wù)器捕獲的事件詳細(xì)信息。
| 事件 | 說(shuō)明 | 
| 12547 | IPsec 主模式安全關(guān)聯(lián)信息 | 
| 12549 | IPsec 快速模式安全關(guān)聯(lián)信息 | 
| 12550 | IPsec 擴(kuò)展模式安全關(guān)聯(lián)信息 | 
在HRA 服務(wù)器上收集數(shù)據(jù)
我們使用以下腳本在 HRA 服務(wù)器上捕獲事件:
set MPATH=c:\temp\Logs %MPATH%\LogParser.exe "SELECT * INTO %MPATH%\HRA_Security_Events_%COMPUTERNAME%.csv FROM Security WHERE EventCategory=12552" -o:CSV %MPATH%\LogParser.exe "SELECT * INTO %MPATH%\HRA_System_Events_%COMPUTERNAME%.csv FROM System WHERE SourceName='HRA'" -o:CSV
注意:在 HRA 腳本中,事件類別 12552 對(duì)應(yīng)了網(wǎng)絡(luò)策略服務(wù)器服務(wù)。
導(dǎo)入數(shù)據(jù)
腳本運(yùn)行之后,我們將輸出的 CSV 文件收集到一臺(tái)運(yùn)行 SQL Server 2008 的獨(dú)立計(jì)算機(jī)上。我們使用以下腳本將 CSV 數(shù)據(jù)導(dǎo)入 SQL:
LogParser.exe "SELECT * INTO DaSasTable FROM DA_*.csv" -i:CSV -o:SQL -server:dev1 -database:NapDa -createTable:ON -maxStrFieldLen:1023 LogParser.exe "SELECT * INTO HraSecurityEventsTable FROM HRA_Security_*.csv" -i:CSV -o:SQL -server:dev1 -database:NapDa -createTable:ON -maxStrFieldLen:1023 LogParser.exe "SELECT * INTO HraSystemEventsTable FROM HRA_System_*.csv" -i:CSV -o:SQL -server:dev1 -database:NapDa -createTable:ON -maxStrFieldLen:1023
注意:
- SQL 主機(jī)的名稱是 dev1。數(shù)據(jù)庫(kù)的名稱是 NapDa,在 SQL Management Studio 中使用默認(rèn)值創(chuàng)建。
 - DaSasTable、HraSecurityEventsTable 和 HraSystemEventsTable 三個(gè)表尚不存在。Log Parser 命令行選項(xiàng) -createTable:ON 指定 Log Parser 根據(jù)輸入數(shù)據(jù)(在本例中是事件日志 CSV 文件)使用合適的架構(gòu)自動(dòng)創(chuàng)建這些表。
 - -maxStrFieldLen:1023 設(shè)置在本例中非常重要。沒(méi)有這項(xiàng)設(shè)置,Log Parser 將為各種事件日志的字符串字段使用默認(rèn)的 varchar 字段長(zhǎng)度 255。但是,事件日志 CSV 格式中有些數(shù)據(jù)字符串的長(zhǎng)度要更長(zhǎng)一些(特別是在 Strings 字段中,請(qǐng)參見(jiàn)圖 2),因此保證這些字段不被截?cái)喾浅V匾?。作為?shí)驗(yàn),默認(rèn)長(zhǎng)度 1023 看起來(lái)夠用了。
 
圖 2 顯示了 Log Parser CSV 事件日志導(dǎo)入所產(chǎn)生的架構(gòu)。
.jpg)
圖 2 Log Parser CSV 事件日志導(dǎo)入的架構(gòu)。
準(zhǔn)備數(shù)據(jù)
創(chuàng)建 DirectAccess 健康報(bào)告時(shí),提取所需數(shù)據(jù)時(shí)的主要困難是事件日志 CSV 格式是基于數(shù)據(jù)字符串的。在 GUI 中,這些數(shù)據(jù)需要隔行轉(zhuǎn)換為靜態(tài)字符串,以描述每個(gè)數(shù)據(jù)字段的含義。數(shù)據(jù)字符串包含所有對(duì) DirectAccess 健康報(bào)告有意義的信息,包括用戶名、計(jì)算機(jī)名稱、策略組名稱和 IP 地址。
數(shù)據(jù)字符串連成單個(gè) CSV 字段,最終形成單個(gè) SQL 列(還是字符串)。各個(gè)字符串之間用“|”字符分隔。一種可行的方法是在數(shù)據(jù)導(dǎo)入 SQL 之前或之后立即對(duì)字符串進(jìn)行標(biāo)記化。但是,我們的選擇是在數(shù)據(jù)導(dǎo)入 SQL 后進(jìn)行分析,然后提取所需的幾個(gè)特定數(shù)據(jù)條目,再用這些條目填充獨(dú)立的 SQL 表。
使用與 T-SQL 匹配的字符串模式完成此任務(wù)非常困難。作為備用方法,我們使用了以前的 MSDN 雜志文章正則表達(dá)式使模式匹配和數(shù)據(jù)提取變得更容易中介紹的方法:使用 C# 實(shí)現(xiàn)用戶定義的 SQL 函數(shù),特別是針對(duì)基于正則表達(dá)式的模式匹配。
使用 Visual Studio 2008,我們幾乎完全遵照了該文中介紹的步驟,當(dāng)然其他文檔中有關(guān)使用 Visual Studio 開(kāi)始 SQL 和 CLR 集成的介紹也很有幫助。另外,由于正則表達(dá)式 (RegEx) 本身的復(fù)雜性,因此參考有關(guān)正則表達(dá)式的文檔也會(huì)有所幫助,特別是有關(guān)分組的內(nèi)容,因?yàn)檫@是 MSDN 雜志文章中的示例代碼所采用的方法。
以下示例代碼就是 SQL 用戶定義函數(shù)的源代碼,該函數(shù)使我們的 SELECT 語(yǔ)句具備了正則表達(dá)式功能。此函數(shù)稱為 RegexGroup,與 MSDN 雜志文章中介紹的函數(shù)一樣。我們對(duì)函數(shù)主體的前兩行進(jìn)行了一處修改,以便檢查 NULL 輸入值。在加入這兩行之前,我們遇到了無(wú)數(shù)的異常,因?yàn)橛袔讉€(gè) SQL 幫助程序表的列(此處介紹的)都是 NULL 值:
usingSystem;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Data.SqlTypes;
usingMicrosoft.SqlServer.Server;
usingSystem.Text.RegularExpressions;
publicpartialclassUserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
publicstaticSqlChars RegexGroup(
SqlChars input, SqlString pattern, SqlString name)
{
if (true == input.IsNull)
returnSqlChars.Null;
Regex regex = newRegex(pattern.Value, Options);
Match match = regex.Match(newstring(input.Value));
returnmatch.Success ?
newSqlChars(match.Groups[name.Value].Value) : SqlChars.Null;
}
};
以下 SQL 命令創(chuàng)建并填充兩個(gè)幫助程序表,表中包含使用正則表達(dá)式從初始數(shù)據(jù)集中提取的字符串:
/* Create the User-Computer-Address mapping helper table */
/* This step should only be performed once per data set */
CREATE TABLE UserComputerAndAddr
(
[RowN] int null,
[UserName] varchar(1023) null,
[ComputerName] varchar(1023) null,
[Address] varchar(1023) null
)
/* Populate the User-Computer-Address table */
/* This step should only be performed once per data set */
INSERT INTO UserComputerAndAddr(RowN, UserName, ComputerName, Address)
SELECT RowNumber,
	dbo.RegexGroup([Strings],N'(?<un>[0-9a-zA-Z]+)@redmond.corp.microsoft.com',N'un'),
	dbo.RegexGroup([Strings],N'(?<machine>[0-9a-zA-Z\-]+)(?<!CO1RED-TPM-01)\$@redmond.corp.microsoft.com',N'machine'),
	dbo.RegexGroup([Strings],N'(?<ipv6addr>[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4})',N'ipv6addr')
FROM [NapDa].[dbo].[DaSasTable]
/* Create the Computer-Health mapping helper table */
/* This step should only be performed once per data set */
CREATE TABLE ComputerHealth
(
[RowN] int null,
[TimeGenerated] datetime null,
[EventType] int null,
[ComputerName] varchar(1023) null
)
/* Populate the Computer-Health mapping table */
/* This step should only be performed once per data set */
INSERT INTO ComputerHealth(RowN, TimeGenerated, EventType, ComputerName)
SELECT RowNumber,
	TimeGenerated,
	EventType,
	dbo.RegexGroup([Strings],N'REDMOND\\(?<machine>[0-9a-zA-Z\-]+)\$',N'machine')
FROM [NapDa].[dbo].[HraSystemEventsTable]
仔細(xì)研究第一個(gè) SELECT 語(yǔ)句以及它對(duì) RegexGroup 函數(shù)(該函數(shù)通過(guò)我們介紹的技術(shù)安裝)的使用,有助于了解字符串模式。圖 3 詳細(xì)介紹了我們定義的三個(gè)正則表達(dá)式模式。
圖 3 使用 SQL 命令定義的三個(gè)正則表達(dá)式模式。
| 正則表達(dá)式模式 | 注意 | 
| 用戶名 | 示例:ichiro@redmond.corp.microsoft.com | 
| 計(jì)算機(jī)名稱 | 
             示例:dan-dev-1@redmond.corp.microsoft.com 請(qǐng)注意,在此模式中我們明確排除了與 DirectAccess 服務(wù)器自身的匹配。  | 
        
| IPv6 地址 | 
             例如:2001:0:4137:1f6b:8c8:2f30:e7ed:73a8 此模式不會(huì)匹配所有有效的 IPv6 地址。如果您要在其他上下文中使用,則需要增強(qiáng)此模式。 盡管 Strings 列中包含其他嵌入式 IPv6 地址字段,但客戶端地址可能是唯一與此模式匹配的地址。 如果您在查詢中遇到了意外的地址,您可能需要重新訪問(wèn)此地址。  | 
        
這些正則表達(dá)式共同創(chuàng)建了一個(gè)表,這個(gè)表由用戶、計(jì)算機(jī)和地址信息組成。這些信息來(lái)自 DaSasTable 中的每一行(即從 DirectAccess 計(jì)算機(jī)導(dǎo)出的 IPsec SA 事件)。
創(chuàng)建并填充 UserComputerAndAddr 表后,會(huì)創(chuàng)建第二個(gè)表,用于將計(jì)算機(jī)名稱與 HraSystemEventsTable 表中每一行的事件類型進(jìn)行對(duì)應(yīng)。如果您查看計(jì)算機(jī)名稱的模式,您會(huì)發(fā)現(xiàn)在此日志中,計(jì)算機(jī)名稱的格式不同于 DirectAccess 日志中的格式。在本例中,我們搜索 REDMOND\dan-dev-1 這樣的字符串。圖 4 詳細(xì)介紹了 EventType 字段中可能存在的不同事件。
圖 4 EventType 字段中可能存在的事件類型。
| 事件類型 | 說(shuō)明 | 
| 0 | 成功。計(jì)算機(jī)提交了健康的 NAP 合規(guī)聲明。 | 
| 1 | 失敗。計(jì)算機(jī)不符合 NAP 策略。 | 
在此部署方案的健康報(bào)告中,我們應(yīng)該只會(huì)看到事件類型 0,這是因?yàn)?NAP 是在強(qiáng)制模式下使用的。正如您將在下文中看到的,我們還要篩選成功的 IPsec 安全關(guān)聯(lián)。如果客戶端不合規(guī),它應(yīng)該不能獲取有效的 IPsec 證書(shū)并建立 SA。另一方面,如果您的組織已經(jīng)用報(bào)告模式部署了 NAP,您將看到有一些不合規(guī)的計(jì)算機(jī)進(jìn)行了連接。連接到網(wǎng)絡(luò)的合規(guī)計(jì)算機(jī)與不合規(guī)計(jì)算機(jī)的相對(duì)比例將是報(bào)告中的一項(xiàng)重要統(tǒng)計(jì)信息。
注意:在創(chuàng)建表來(lái)容納正則表達(dá)式的結(jié)果時(shí),我們建議您使用永久的 SQL 表。如果您使用臨時(shí)表(就像我們?cè)谙乱徊剿菔镜模?,正則表達(dá)式查詢的速度將會(huì)變慢。
構(gòu)建報(bào)告
正則表達(dá)式分析完成并創(chuàng)建幫助程序表后,我們現(xiàn)在可以集中精力來(lái)構(gòu)建健康報(bào)告。一旦準(zhǔn)備好數(shù)據(jù),編寫(xiě)報(bào)告查詢就變得相對(duì)容易。
本示例報(bào)告將列出所有在 2010 年 5 月 5 日下午 3 點(diǎn)到 4 點(diǎn)之間建立了 DirectAccess 連接的用戶。除了用戶名,報(bào)告還會(huì)列出計(jì)算機(jī)名稱和健康狀況。
為了找出這些用戶,我們將從查詢?cè)摃r(shí)段內(nèi)成功的(事件類型 8)QM SA(事件類別 12549)開(kāi)始。在此方案中,QM SA 事件非常有用,因?yàn)?IPsec 已經(jīng)配置為要求進(jìn)行第二項(xiàng)身份驗(yàn)證(用戶的憑據(jù))。我們之所以選擇了這種報(bào)告方式,是因?yàn)?QM SA 的存在時(shí)間相對(duì)較短(在本例中是一小時(shí),不活動(dòng)超時(shí)值是五分鐘),因此很適合審核訪問(wèn)。相反,MM SA 只要求使用計(jì)算機(jī)憑據(jù),而且默認(rèn)情況下可存在八小時(shí)(如果審核是 DirectAccess 部署方案中的重要組成部分,我們建議縮短 MM 的生命期)。
遺憾的是,QM 事件不包括用戶名或計(jì)算機(jī)名稱,而只包括 IP 地址。要將 IP 地址對(duì)應(yīng)到計(jì)算機(jī)名稱和用戶名,我們可以在 SQL 查詢中使用幾條 SELECT 語(yǔ)句。以下查詢中的第一條 SELECT 語(yǔ)句將返回指定時(shí)段內(nèi)新的 QM SA 中出現(xiàn)的地址列表。第二條 SELECT 語(yǔ)句使用這些地址來(lái)映射日志中其他地方出現(xiàn)的與該地址相關(guān)的用戶名和計(jì)算機(jī)名稱。(這種用戶/計(jì)算機(jī)/地址的關(guān)聯(lián)出現(xiàn)在 EM SA 事件中。這些事件對(duì)于此練習(xí)非常重要,因?yàn)樗鼈儼腥N值;如果您不要求 IPsec 二次身份驗(yàn)證,將無(wú)法進(jìn)行這種類型的報(bào)告。)
/* The following steps build the report, based on the three imported tables * plus the two helpers above. These steps can be run any number of times as * you refine your query. */ /* Create a temporary table to populate as the final report */ CREATE TABLE #SaHealthReport ( [UserName] varchar(1023) null, [ComputerName] varchar(1023) null, [HealthEventType] int null ) /* Run a query to find all IPsec Quick Mode Security Associations established * within a given period. Populate a temporary table with the client IPv6 * addresses. */ SELECT DISTINCT[Address] INTO #TempAddresses FROM [NapDa].[dbo].[DaSasTable] JOIN [NapDa].[dbo].[UserComputerAndAddr] ON RowN = RowNumber WHERE [EventType]=8 AND [EventCategory]=12549 AND ([TimeGenerated] BETWEEN'2010-05-10 15:00:00.000' AND '2010-05-10 16:00:00.000') /* Map the QM SA addresses to user and computer names and insert those into * the final report. */ INSERT INTO #SaHealthReport(UserName,ComputerName) SELECT UserComputerAndAddr.UserName,UserComputerAndAddr.ComputerName FROM [NapDa].[dbo].[UserComputerAndAddr] JOIN #TempAddresses ON #TempAddresses.Address = UserComputerAndAddr.Address WHERE (UserComputerAndAddr.UserName IS NOT NULL) AND (UserComputerAndAddr.ComputerName IS NOT NULL) /* Populate the health column of the report. */ UPDATE #SaHealthReport SET HealthEventType = ComputerHealth.EventType FROM #SaHealthReport JOIN [NapDa].[dbo].[ComputerHealth] ON #SaHealthReport.ComputerName = ComputerHealth.ComputerName /* Display all rows and columns of the report. */ SELECT DISTINCT * FROM #SaHealthReport
填充 SaHealthReport 報(bào)告表的最后一步是關(guān)聯(lián) HRA 健康信息與計(jì)算機(jī)及用戶身份信息,這樣就與 DirectAccess 服務(wù)器有了顯著區(qū)別。在這種混合模式中加入 HRA 服務(wù)器信息是一種有力的工具,使您可以確定遠(yuǎn)程連接到網(wǎng)絡(luò)的計(jì)算機(jī)是否會(huì)(由于不合規(guī)而)帶來(lái)風(fēng)險(xiǎn)。請(qǐng)參見(jiàn)上述 SQL 查詢中的 UPDATE 語(yǔ)句:DirectAccess 和 HRA 數(shù)據(jù)的關(guān)聯(lián)是使用計(jì)算機(jī)名稱完成的。
圖 5 顯示了完成后的健康報(bào)告可能會(huì)返回的數(shù)據(jù)示例。
圖 5 完成后的健康報(bào)告示例
| UserName | ComputerName | HealthEventType | 
| Ichiro | ichiroadmin1 | 0 | 
| Grinch | whoville-cli | 0 | 
| Raquel | omybc | 0 | 
使用一些自定義的腳本和 LogParser 工具,您可以相對(duì)輕松地在 IPsec(包括 DirectAccess)和 NAP 部署上建立起報(bào)告機(jī)制。此方法可幫助企業(yè)開(kāi)始為業(yè)務(wù)線服務(wù)創(chuàng)建安全框架,而無(wú)論這些服務(wù)是位于本地還是位于云計(jì)算環(huán)境中。
本文來(lái)源:微軟TechNet中文站
【編輯推薦】















 
 
 




 
 
 
 