Pages

Subscribe:

Ads 468x60px

Labels

2013年10月23日 星期三

11 個管理 Active Directory 的基本工具

作者:Laura E. Hunte…    厚朴教育来源:T.N    点击数:5338    更新时间:2009-3-13
摘要:
  • 在命令列建立物件
  •  Active Directory 內執行大量作業
  • Active Directory 的更新及維護

如果您曾經處理一份列出從下週起新進公司的 200 名新員工的 Excel 試算表,或使用者帳戶因為服務台人員輸入錯誤而設定不正確,
或者,您只是想要在除了每次開啟 [使用者及電腦之外有更簡單的 Active Directory® 管理方式,您可以利用一些免費的管理工具來幫助您。有些工具直接內建於 Windows® OS,有些隨附於 Resource Kit  Windows 支援工具中,有些則是免費的協力廠商工具。這些方便的工具是什麼?可從何處取得它們?現在就讓我們來了解一下。
我將先從 Windows Server® 2003 的內建命令列工具開始,這些工具可讓您建立、刪除、修改及搜尋 Active Directory 中的物件。

CSVDE
所謂的 CSVDE  Comma-Separated Values Data Exchange 工具,它可讓您使用 CSV 來源檔案,將新物件匯入 Active Directory 中;它也可以讓您將現有的物件匯出至 CSV 檔。CSVDE 不能用來修改現有的物件;當您在匯入模式下使用此工具時,您只能建立全新物件。
 CSVDE 匯出現有物件的清單非常簡單。以下示範如何將 Active Directory 物件匯出至 ad.csv 檔:
csvde –f ad.csv
–f 參數指出輸出檔名稱跟隨在後。但您必須知道一件事實,根據您的環境而定,此基本語法可能會產生使用不便的大型輸出檔。為了限制工具只在特定組織單位 (OU) 內匯出物件,您可以修改陳述式如下:
csvde –f UsersOU.csv –d ou=Users,dc=contoso,dc=com
現在我們進一步假設您只要匯出使用者物件至 CSV 檔。在此情形下,您可以新增 –r 參數,它可讓您指定輕量型目錄存取協定 (LDAP)篩選器來進行搜尋,以及指定 –l 參數,它可限制匯出的屬性數目 (請注意,以下全部在同一行)
csvde –f UsersOnly.csv –d ou=Users,dc=contoso,dc=com –r
    "(&(objectcategory=person)(objectclass=user))" –l
    DN,objectClass,description
–i 參數可讓您將物件從來源 CSV 檔匯入 Active Directory 中。不過,使用 CSVDE 建立使用者物件有一項重要限制:您不能在其中設定使用者密碼。因此,我會避免使用 CSVDE 來建立使用者物件。

LDIFDE
Active Directory 提供大量使用者作業的第二個內建工具,叫做 LDIFDE,它的功能比 CSVDE 更強,且彈性更大。除了建立新物件之外,LDIFDE 也可以修改及刪除現有的物件,甚至延伸 Active Directory 架構。LDIFDE 彈性的交換條件是必要的輸入檔會使用比 CSV 檔更複雜的格式,這個輸入檔稱為 LDIF 檔,其副檔名為 .ldf (您也可以很輕鬆地設定使用者密碼,但這點稍後再探討)
我們先從簡單的範例開始,將某個 OU 內的使用者匯出至 LDF  (請注意,以下全部在同一行)
ldifde -f users.ldf -s DC1.contoso.com -d "ou=UsersOU,dc=contoso,dc=com"
       –r "(&(objectcategory=person)(objectclass=user))"
就像大部分命令列工具一樣,您可以執行 LDIFDE /? 參數來找到 LDIFDE 參數的完整說明。[ 1] 說明我在此處使用的參數 (請注意,CSVDE  LDIFDE 命令的參數其實是一樣的)
 Figure 1 LDIFDE 參數

參數
說明
-d
指定 LDIFDE 應該在作業中連接的 LDAP 路徑。
-f
在此案例中,指出用來輸出匯出結果的檔案名稱。
-r
指定用於匯出的 LDAP 過濾器。
-s
指定為了執行此作業而連接的網域控制站 (DC);如果您省略它,LDIFDE 將連接到本機 DC (或已驗證您的 DC,如果您是從工作站執行此工具的話)


LDIFDE 的真正功能在於建立及處理物件。不過,在這麼做之前,您必須先建立輸入檔。以下建立兩個新的使用者帳戶,叫做 afuller  rking;若要建立輸入檔,請在 [記事本] (或您愛用的純文字編輯器輸入文字並將它另存為 NewUsers.ldf
dn: CN=afuller, OU=UsersOU, DC=contoso, DC=com
changetype: add
cn: afuller
objectClass: user
samAccountName: afuller

dn: CN=rking, OU=UsersOU, DC=contoso, DC=com
changetype: add
cn: rking
objectClass: user
samAccountName: rking
建立該檔案之後,請執行下列命令:
ldifde –i –f NewUsers.ldf –s DC1.contoso.com
這裡唯一的新參數是 -i,您大概猜得到,它表示這是匯入作業而不是匯出。
在修改或刪除現有的物件時,LDIFDE 命令的語法不變;不過,您可以修改 LDF 檔的內容。若要變更使用者帳戶的說明欄位,請建立一個叫做 ModifyUsers.ldf 的文字檔,如 [ 2] 所示。
 2 ModifyUsers LDF  (按影像可放大)
您可以執行與之前一樣的 LDIFDE 命令語法並在 -f 參數後面指定新的 LDF 檔名,來匯入變更。刪除物件的 LDF 格式更簡單;若要刪除您處理的使用者,請建立一個叫做 DeleteUsers.ldf 的檔案,並輸入下列命令:
dn: CN=afuller OU=UsersOU, DC=contoso, DC=com
changetype: delete

dn: CN=rking, OU=UsersOU, DC=contoso, DC=com
changetype: delete
請注意,LDIFDE 能夠設定使用者密碼,這點與 CSVDE 不同。不過,在您可以設定使用者帳戶的 unicodePWD 屬性之前,您必須先在網域控制站上設定安全通訊端層/傳輸層安全性 (SSL/TLS) 加密。
不僅如此,LDIFDE 還可以建立及修改 Active Directory 物件的類型,而不只是使用者帳戶。例如,下列 LDF 檔將在 contoso.com樹系的架構中建立一個自訂架構延伸,叫做 EmployeeID-example
dn: cn=EmployeeID-example,cn=Schema,
cn=Configuration,dc=contoso,dc=com
changetype: add
adminDisplayName: EmployeeID-Example
attributeID: 1.2.3.4.5.6.6.6.7
attributeSyntax: 2.5.5.6
cn: Employee-ID
instanceType: 4
isSingleValued: True
lDAPDisplayName: employeeID-example
因為 LDIFDE 檔使用業界標準 LDAP 檔案格式,所以,需要修改 Active Directory 架構的協力廠商應用程式通常會提供 LDF 檔,當您在生產環境中套用這些變更之前,可使用 LDF 檔來檢查及核准變更。
除了大量匯入及匯出作業的工具之外,Windows Server 2003 也包括內建工具組,讓您建立、刪除及修改各種 Active Directory 物件,以及對符合特定準則的物件執行查詢 (請注意,Windows 2000 Active Directory 不支援 dsadddsrmdsget  dsquery 等工具)

Dsadd
Dsadd 是用於特定目錄磁碟分割中建立 Active Directory 物件類別的執行個體。這些類別包括使用者、電腦、連絡人、群組、組織單位和配額。Dsadd 會使用由下列各項組成的一般語法:
dsadd attributes
請注意,您建立的每一個物件類型都會使用一組特定的參數,這些參數要對應該類型可用的屬性。此命令會建立填入了各種屬性的單一使用者物件 (請注意,以下全部在同一行)
dsadd user cn=afuller,ou=IT,dc=contoso,dc=com
–samID afuller –fn Andrew –ln Fuller –pwd *
-memberOf cn=IT,ou=Groups,dc=contoso,dc=com "cn=Help Desk,ou=Groups,
dc=contoso,dc=com"
–desc "Marketing Director"
–memberOf 參數需要使用者要新增至的每一個群組的完整分辨名稱 (DN);如果您想要將使用者新增至多個群組,可新增以空格隔開的多個 DN
如果有任何元素包含空格,例如 Help Desk 群組的 DN,則需要以雙引號括住它。如果有元素包含反斜線,例如一個叫做 IT\EMEA  OU,則必須輸入反斜線兩次:IT\\EMEA (這些需求適用於所有 ds* 工具)
當您使用 -pwd * 參數時,會提示您在命令列輸入使用者的密碼。您可以在命令本身指定密碼 (-pwd P@ssword1),但這樣會以純文字將密碼顯示在螢幕上,或您內含該命令的文字檔或指令檔中。
同樣地,您可以使用下列兩個命令建立群組物件和 OU
dsadd computer cn=WKS1,ou=Workstations,dc=contoso,dc=com
dsadd ou "ou=Training OU,dc=contoso,dc=com"

Dsmod
Dsmod 是用來修改現有的物件,其使用方式十分類似 dsadd,但視您要修改的物件類型而定,可能會使用不同的子功能表和語法。下列 dsmod 陳述式會變更使用者的密碼並修改其帳戶,因此在下次登入時會提示該使用者變更為新密碼:
dsmod user "cn=afuller,ou=IT,dc=contoso,dc=com" –pwd P@ssw0rd1
    –mustchpwd yes
若要了解這些參數的相似程度,請參考您設定了相同屬性來建立此使用者時所用的 dsadd 語法:
dsadd user "cn=afuller,ou=IT,dc=contoso,dc=com" –pwd P@ssw0rd1
    –mustchpwd yes
顯而易見,如果您知道要在 dsadd 中建立物件的參數,可在 dsmod 中使用那些相同的參數來修改使用者。

Dsrm
 dsadd 相反的是 dsrm;您可以想像得到,此工具可讓您從命令列刪除物件。基本 dsrm 語法非常直接了當:只要輸入 dsrm,後面跟著您要刪除的物件的分辨名稱,如下所示:
dsrm cn=WKS1,ou=Workstations,dc=contoso,dc=com
根據預設,dsrm 會提示「您確定要刪除這個物件嗎?」輸入 Y,然後按 Enter 鍵。您可以使用 –noprompt 參數而不顯示此提示,但顯然這麼做您就沒有機會在刪除之前確認是否已選取正確物件。如果您要刪除容器物件,亦即可能在其中包含其他物件的組織單位,則另有兩個參數會有幫助。下列命令會刪除 TrainingOU 組織單位及其中包含的所有物件:
dsrm ou=TrainingOU,dc=contoso,dc=com –subtree
這個命令會刪除包含在 TrainingOU 內的所有子物件,但會將組織單位物件本身留在原地:
dsrm ou=TrainingOU,dc=contoso,dc=com –subtree
    –exclude

Dsmove
若要在 Active Directory 中移動或重新命名物件,您可以使用 dsmove 工具,但請注意,您只能使用它在單一網域內移動物件。若要在網域或樹系之間移轉物件,請使用 Active Directory Migration Tool (ADMT),您可從 Microsoft 網站免費下載它。Dsmove 會仰賴兩個參數,它們可分開使用或合併使用。此命令會給予 Steve Conn 帳戶新的姓氏:
dsmove "cn=Conn, Steve,ou=IT,dc=contoso,dc=com"
    –newname "Steve Conn"
此命令會將 IT OU 中的 Steve 帳戶移到 OU 中:
dsmove "cn=Conn, Steve,ou=IT,dc=contoso,dc=com" –newparent
    ou=Training,dc=contoso,dc=com
您可以同時指定兩個參數,將 rename  move 合併成單一作業,如下所示:
dsmove "cn=Conn, Steve,ou=IT,dc=contoso,dc=com" –newname
    "Steve Conn" –newparent ou=Training,dc=contoso,dc=com

Dsget  Dsquery
ds* 命令列工具組也包括用來查詢 Active Directory 的兩個工具,它們是為了取得資訊而非建立或修改物件。
Dsget 使用物件的 DN 作為輸入,並提供您所指定之屬性的值。Dsget 使用與 dsadd  dsmod 相同的子功能表:usercomputercontactgroupou  quota
若要取得使用者的 SAM 帳戶名稱和安全性描述元 (SID),請輸入下列命令 (請注意,以下全部在同一行)
dsget user cn=afuller,ou=IT,dc=contoso,dc=com
    –samAccountName –sid
您將得到如 [ 3] 所示的輸出。
 3 執行 dsget (按影像可放大)
Dsquery 會傳回符合您指定的準則的 Active Directory 物件清單。不論您使用哪一個子功能表,您都可以指定下列參數:
dsquery -s -o
對於 ObjectTypedsquery 可使用下列子功能表,它們各有自己的語法:computercontactsubnetgroupousiteserver (請注意,伺服器子功能表會擷取網域控制站的相關資訊,而非環境中的任何成員伺服器)userquota  partition。如果其中一個查詢類型無法滿足要求,您可以使用 * 子功能表,它可讓您輸入任意形式的 LDAP 查詢。
StartNode  Active Directory 樹狀目錄中指定要開始搜尋的位置。您可以使用特定 DN,例如 ou=IT,dc=contoso,dc=com,或下列其中一個捷徑指定元:domainroot  forestroot,前者從特定網域根目錄開始,後者從樹系根網域的根目錄開始,並利用通用類別目錄伺服器執行搜尋。
最後,[搜尋範圍選項會指定 dsquery 應如何搜尋 Active Directory 樹狀目錄。樹狀子目錄 (預設值會查詢指定的 StartNode 及其所有子物件,onelevel 只查詢 StartNode 當前的子系,base 僅查詢 StartNode 物件。
若要進一步了解搜尋範圍,請考慮一個包含使用者物件的 OU 和其本身包含其他物件的子 OU。使用樹狀子目錄範圍將查詢 OU、其包含的所有使用者物件及子 OU 及其內容。onelevel 範圍只會查詢 OU 包含的使用者,而不查詢子 OU 或其內容。base 查詢只會搜尋OU 本身而不查詢其包含的任何物件。
最後,您可以使用 Output Format 來控制如何將 dsquery 的結果格式化。根據預設,dsquery 會傳回符合查詢的任何物件之分辨名稱,如下所示:
"cn=afuller,ou=Training,dc=contoso,dc=com"
"cn=rking,ou=ITTraining,ou=Training,dc=contoso,dc=com"
若要查詢 IT OU 內包含的所有使用者物件及任何子 OU,請使用下列命令:
dsquery user ou=IT,dc=contoso,dc=com
您可以新增其他參數來進一步限定此查詢,例如 -disabled,它只會傳回已停用的使用者帳戶;-inactive x,,它只會傳回在過去 x 週以來未登入的使用者;或 -stalepwd x,它只會傳回在 x 天以上未變更其密碼的使用者。
視目錄中的物件數而定,您在執行查詢時可能需要指定 -limit x 參數。根據預設,dsquery 會傳回最多 100 個符合查詢細節的物件;您可指定更大的數目,例如 -limit 500,或使用 -limit 0 指示 dsquery 傳回所有符合的物件。
您可以使用其他子功能表,也對其他物件類型執行有用的查詢。請看下列查詢,它會傳回 Active Directory 站台及服務所定義的每一個子網路,其位於 10.1.x.x 位址空間:
dsquery subnet –name 10.1.*
或使用下列命令以傳回位於 Corp 站台中的每一個子網路:
dsquery subnet –site Corp
使用另一個子功能表,您可以快速判斷樹系中有多少個網域控制站是設定為通用類別目錄伺服器:
dsquery server –forest –isgc
您也可以使用此語法幫助您判斷,網域中的哪一個網域控制站管理網域主控站 (PDC) Emulator Flexible Single Master Operations (FSMO) 角色:
dsquery server –hasfsmo pdc
就像其他包含子功能表的 ds* 命令一樣,您可以到命令提示字元中輸入 dsquery user /?dsquery computer /?dsquery subnet /? ...等等,來檢視特定 dsquery 子功能表內可用的所有參數。
另一個訣竅是使用 | 字元 (英數鍵盤上的 Shift + 反斜線 dsquery 的輸出 pipe 到另一個工具,例如 dsmod。例如,假設貴公司已將 Training 部門重新命名為 Internal Development,現在您必須將舊部門名稱的每一個相關使用者的說明欄位更新為新名稱。在單一命令行上,您可以查詢有 Training 說明欄位的使用者物件,然後大量修改該說明欄位,如下所示:
dsquery user –description "Training" | dsmod
    -description "Internal Development"

協力廠商的好康工具
由於 Active Directory 是依據 LDAP 標準,因此,您可以使用可表示 LDAP 的任何工具來查詢及修改它。許多協力廠商發行付費工具協助您管理 Active Directory,但有時候您會發現社群已有的免費工具。例如由 Directory Services MVP Joe Richards 所建立的集合,可從 joeware.net/freetools 下載。其中有數個工具,分別提供許多不同的功能。有三個是我常用的,即 adfindadmod  oldcmp

Adfind  Admod
Adfind  admod 類似 dsquery  dsmodadfind  Active Directory 的命令列查詢工具,admod 可建立、刪除或修改一或多個 Active Directory 物件。
與具有多個子功能表和視物件類型而定的不同參數的 ds* 工具不同,不管您要執行的查詢或修改類型是什麼,adfind  admod 均具有一致的語法。adfind 的基本語法如下:
adfind –b -s -f
    attributesDesired

因此,對於網域內所有電腦物件的 DN 和說明的查詢如下:
adfind –b dc=contoso,dc=com –s subtree –f (objectclass=computer) dn
    description
對於所有使用者物件的查詢如下:
adfind –b dc=contoso,dc=com –s subtree –f "(&(objectcategory=person)
    (objectclass=user))" dn description
請注意,除了 LDAP 查詢的內容之外,其餘語法不變。
當您使用 adfind 時,會發現一些捷徑運算子,它們可為您節省一些打字的功夫。例如,-default 參數可取代先前範例中的 -b dc=contoso,dc=com,並搜尋整個網域;-gc 會搜尋廢棄項目收集 (GC) 並傳回 Active Directory 樹系中的所有使用者。您也可以使用 -rb 參數設定搜尋的相對基底;如果您想要在 phl.east.us.contoso.com 網域中搜尋 Training OU,您可以直接指定 –default –rb ou=Training 而不要指定 –b ou=Training, dc=phl,dc=east,dc=us,dc=contoso,dc=com,這樣可為自己節省不少功夫。.
Adfind 也可以執行一些在命令列不好管理的進階搜尋功能,包括 [ 4] 所顯示的那些功能。
 Figure 4 Adfind 參數

參數
說明
-showdel
查詢 Deleted Objects 容器中的標記物件。
-bit
查詢位元運算子,例如 userAccountControl 屬性。
-asq
執行屬性範圍的查詢。此功能 ( dsquery 中無法複製可擷取特定物件的屬性,然後對它執行查詢。
-dsq
 adfind 查詢的輸出 pipe  dsmod 或其他的 ds* 工具之一。


使用 –asq 參數的範例為「顯示屬於 HelpDesk 成員的群組成員資格」,如下所示:
adfind –default –rb cn=HelpDesk,ou=IT –asq member memberOf
Admod 顧名思義,是用來修改 Active Directory 內的物件。和 adfind 一樣,並沒有什麼特殊子功能表的特定語法需要記住,不論您使用的物件類型是什麼,admod 都使用相同語法。您也可以新增適當的參數 (例如 -add-rm-move-undel),使用 admod 來新增、移動、重新命名、刪除、甚至取消刪除物件。就像 dsquery  dsmod 一樣,您也可以使用 | 字元將 adfind 查詢的結果 pipe  admod
請注意,使用 admod 執行取消刪除作業只會執行重新引發標記的作業,其中已移除大部分物件屬性。若要完全還原物件及其所有屬性,您還是需要執行物件的授權還原。

Oldcmp
還有另一個 joeware 工具,我認為是自動化工具組不可或缺的一部分:oldcmp,它會掃描 Active Directory 資料庫中在指定的週數內尚未使用的電腦帳戶,並且可執行下列動作:
  • 建立帳戶的報告,而不對它們採取任何動作
  • 停用未使用的電腦帳戶
  • 將電腦帳戶移到您指定的不同 OU
  • 立刻刪除電腦帳戶
請注意,由於 oldcmp 可能對目錄造成嚴重破壞,因此,它有一些內建的安全功能。它不會刪除任何尚未停用的帳戶 (除非有手動指定「我很肯定」的命令列參數)。除非有特別指定「我很肯定」的參數,否則它不會一次修改超過 10 個物件,而且它絕對不會對網域控制站的電腦帳戶做任何動作。
不管該工具目前令人誤會的名稱,Joe 已更新 oldcmp,使它對已有某一段特定時間未使用的使用者帳戶執行類似功能。
對於小型 Active Directory 環境或您一次只處理一兩個新增或變更的環境,像 Active Directory 使用者及電腦之類的 GUI 工具,已足夠應付每日例行管理工作。但如果您每天要新增及修改大量物件,或您希望管理工作有更有效率的解決方案,則移到命令行可以大幅加快建立、修改及刪除 Active Directory 物件的程序。誠如您所見的,免費提供的一些彈性大功能強的工具,已直接內建於 Windows 中,並且可從 Active Directory 社群的成員下載。任何這些工具都能夠大幅提高 Active Directory 系統管理者的生產力,甚至成為日常生活中不可或缺的工具。
厚朴教育录入:张俊    责任编辑:张俊

2013年10月21日 星期一

虛擬化世界的安全設計與管理實務

夏克強   
前言
近來在虛擬化技術蓬勃發展下,相信一定有很多企業或多或少都已開始導入虛擬化環境,但各個目標不一,有些可能是為了成本節能考量,有些可能是為了管理方便或甚至是為了邁進雲端做準備。虛擬化的導入通常不會一次到位,所以一定會有傳統IT環境與虛擬化環境並存的現象發生,所以我們在看含有虛擬化環境的安全課題時必須把傳統的IT環境一併考量進來。因為虛擬化改變了IT環境,因此一些資訊安全的控制方法也必須跟著改變,甚至是講到更進一步的雲端技術亦然,資安控制方法在必須考量技術與運作的特殊性時,傳統的方法就不見得可以滿足這些環境的安全需求。本文將先從兩個面向來談虛擬化的安全問題,且因為VMware vSphere 4是虛擬化技術的領導廠商,所以本文有關虛擬化安全技術的探討大都是以VMware的虛擬化技術為內容。
VMware的網站上有Released出2010年的vSphere 4 Security Hardening Guide,如圖一。安全指引的範圍包括了ESX/ESXi、VM Container、vCenter及其資料庫與子元件、VMware Update Manager、vNetwork及COS(Console Operating System)等。但VM裏頭安裝的軟體、Guest OS的Security及有關的操作安全上的問題並不在此指引涵蓋的範圍裏。此安全指引在每個大項(諸如Virtualization Host及VM及COS等)中都有針對其子項有建議的設定值,子項都有特定的代碼及其強調的問題點以及這些安全的問題點所適用的環境、所造成的威脅及防護的設定等。本文內容不針對此安全指引再做贅述,此指引的內容就留由讀者自己參考。本文所探討的VMware安全問題主要是針對VMware的built-in的安全設計以及一些在VM管理部署、虛擬網路及儲存網路的安全問題上做探討。
虛擬化的最主要目的當然在於虛擬機的使用,在ESX或ESXi上執行的眾多虛擬機的安全與否當然會影響到Host的安全,相對地,這些虛擬機的安全性也會被其Host的安全性所影響,Virtualization Administrator可以在Host上看到每個虛擬機的Memory及Swap空間等。
一、虛擬機的安全
1.虛擬網路(Virtual Networking)安全的問題
講到網路的安全問題,一般我們會從所謂的Attack Surfaces來做探討。在虛擬網路安全裏我們要特別注意幾個點: 一個是純虛擬化的地方,另一個則是實體網路與虛擬網路的交會點。Hypervisor不允許vmknic與vNIC在同一個Portgroup,因此可避免vkmnic被惡意的VMs所影響。vMotion亦會使用vmknic來與外界溝通,而通常在vMotion時會建議使用SSL來保護敏感資料(或記憶體中資料)不被攔截(事實上,SSL一直都有MITM攻擊的問題),也因此看成是vmknic必須單獨使用一個security zone來減低風險的必要性。vSwitch及Portgroup提供了部份安全機制來保護vSwitch的安全,諸如是否允許MAC Address改變、是否允許偽造的MAC傳送及是否允許Promiscuous Mode等。vSwitch是很簡單的2層交換器,它並沒有很多實體Switch所會發生的Attacks。但對於ARP Spoofing及Layer 3的Attacks卻沒有任何防護,主要是因為這些Attacks是發生在虛擬機(VMs)裏而不是在vSwitch上面。
如非必要,儘量減少VST(Virtual Switch Tagging)及VGT(Virtual Guest Tagging)等 802.1q VLAN的使用。以實體交換器及實體網路卡取代,增加Virtualization Network的Redundancy及網路的隔離(pSwitch),若無法網路隔離,也必須依據不同Requirements或安全等級來設計Security Zones(或者使用Private vSwitch方式來隔離),包括管理的Zone、vMotion的Zone、Storage的Zone、VMs的Zone或是上線區的Zone、開發環境的Zone、測試的Zone,或是安全等級高的Zone及安全等級低的Zone等。
2.VM及VA的部署
最嚴謹的方式就是將所有的VMs都視為不安全的狀況來考慮VMs及Virtual Appliances(VMsafe)的安全問題,尤其是Virtual Appliances可以接觸到Hypervisor,因此必須以更高標準的防護來保證這些VMsafe VA的安全,比方更嚴謹的存取控制及Auditing機制,使用Private vSwitch與實體的外加虛擬化的Security Tools來做縱深防護。來路不明的Virtual Appliances也不可任意部署來使用,最好是使用經過VMware簽章過的vendors所發佈的Virtual Appliances。圖一為使用PVLAN的隔離方式。
3.VM的管理
新加入要Power On的VMs的控管也要特別留意,包括其上的應用程式等也要一併考量風險評鑑問題,新啟動的VMs或Application都有可能影響到Virtualization Host的Disk、CPU及Memory等資源的使用,嚴重的話還可能造成Resource的DoS攻擊,特別是在VMware DRS的環境下。
VM的Life Cycle管理的工具及產品也可提供保護,它可以對VMs的Power On、Power Off、註冊與否及所配置的VMDK與LUN實施Auditing。藉由VM Log的設定,可以藉由減少不必要的Logs數量、Log的Rotate及Log的保留數量來控制Log Files的增長問題。
VMs的新增與刪除也必須同時注意是否有無主的Virtual Disk Files存在Datastore裏,除可避免無謂的佔用空間外還可避免這些Virtual Disk Files被誤用。VMs的設定檔的變更管理也很重要,特別是虛擬化硬體資源設定的變更。除VMware本身的管理工具(例如RCLI、VIC及VI SDK等)可對變更的設定有Audit的Record外,一些商用的工具(例如Tripwire的Configuration Management產品)也可對這些變更管理做良好的稽核記錄,使VM的設定的變更管理更為完善。
Distributed Management Task Force (DMTF)是一個旨在提供簡化及方便的虛擬化環境的管理,它在2007年建立了一個有關VM管理的Open Standard標準,使用Open Virtualization Format (OVF)做為VM部署的方式,OVF是一個平台獨立而且可支援大多數的Virtual Hard Disks,OVF除了包含Virtual Disk外、還包括了VM的規格描述與相關的硬體設定。DMTF亦創立了Virtualization Management Initiative (VMAN)標準,內容涵蓋了包括VM的部署、VM的Discovery and Inventory、VM的Lifecycle的管理、VM新建與刪除、VM的移動與遷移、及VM的效能與狀態的監控等 。
4.VM的加固
VMs本身的Guest OS的安全也是一大重點,但這部份很好處理,因為你就用跟OS部署在實體機器上的加固方式一樣即可,Internet上有很多關於不同OS的Hardening Guide及相對應的工具(Commercial或Non-commercial)可以參考。下圖為vSphere4的Hypervisor的安全設計可使虛擬化環境得到先天設計的安全的防護。
5.VMware Backdoor
Guest OS可以使用一些工具(例如VMware Tools或其他Open Source的Tools)利用VMware Backdoor I/O Port來與Hypervisor做某種程度的溝通以取得一些資訊,例如Copy/Paste的內容,可Touch到的虛擬化硬體,Virtualization Host所使用CPU的Speed,VMware版本、時間及BIOS的UUID等。這些資訊可以被用來Fingerprint出Guest OS是不是run在VM裏,而被駭客拿來當做是準備攻擊的一個點。強制型存取控制(MAC)的使用(或Microsoft的UAC或Linux的SELinux等),都可以利用嚴謹的存取控制來限制這些Tools對VMware Backdoor I/O Port的存取。談資訊安全就是要讓駭客沒有任何可利用來攻擊的地方可以利用(Exploit),而且請記得,安全與效能及便利性本來就是互相替代的。另外,網路上有一些Hardening Guideline,例如DISA STIG(Security Technical Implementation Guide),也建議了一些設定可以有效改善這個安全問題。底下是它建議的設定值:
isolation.tools.copy.enable => false
isolation.tools.paste.enable => false
isolation.tools.setguioptions.enable => false
isolation.tools.setinfo.disable => true
isolation.tools.connectable.disable => true
isolation.tools.diskshrink.disable => true
isolation.tools.diskwiper.disable => true
二、其他虛擬機相關的安全
1.VM的Storage存取
VMs到Storage Network也存在著部份的被攻擊點,經由Hypervisor控管的Storage存取比較沒問題,但是那些可不受Hypervisor控管的Storage存取,例如NPIV、iSCSI Initiator或FCoE(如果VMs有FCoE Driver),有可能將存取資源的VMs當成攻擊點進而攻擊到Hypervisor後端的Storage Network。所以比較好的方式是用網路隔開這些VMs直接存取的Storage,避免跟Virtualization Host共用Storage。以目前Virtualization Host常用的四種方式來對後端storage做存取的狀況(這四種方式為NFS, iSCSI, SAN及Local Storage),必須要留意儘量避免虛擬機直接對Storage做存取,如果有直接存取的必要(例如使用iSCSI Initiators、NFS及CIFS的檔案分享、NPIV等),儘量使用Isolated Storage的概念來存取資料,也就是使用獨立分開的storage來提供資料存取服務。另外,在DMZ中(或者說風險較高的Zone)的Virtualization Host或虛擬機所使用的Storage也最好與內部網路(或者說風險較低的Zone)中的Virtualization Host或虛擬機所使用的Storage獨立分開。
2.VMCI介面與VMsafe的存取限制
VMCI與VMsafe可以提供VM對VM或Host的存取,特別是VMsafe CPU/Mem API對其他VM的CPU及Memory的存取,以及VMsafe-Net對虛擬網卡與虛擬交換器上的網路封包的存取、修改與阻擋等等。如下圖,只允許授權的Security Appliance去存取VM的CPU及Memory,因此那些沒被授權的Security Appliance就不能有Introspection Virtual Switch的設定。相對地,被允許使用VMsafe CPU/Mem API存取的VM的設定也必須設定Security Appliance的IP及存取的埠號。
3.部署與管理
VM與Virtual Network的部署必須要有一致性的授權機制,要避免例如網路管理者不知道虛擬網路被變更或新建立的情形;對系統管理者也是一樣,必須要對虛擬機的部署變更與建立取得一致的授權流程。如果無法適當的管理這些Virtual Network或VM,就有可能像是之前我們提到的Security Zone問題,如果一台VM被不經意或非法的部署到重要的Zone裏,可能會對此Zone的整個環境造成威脅。要解決這樣的情況通常必須依賴建全的監控與管理機制,也可藉由軟體的輔助來達成,例如一些商用的虛擬化管理軟體或者像是VMware的LifeCycle Manager。
VM部署對Security Zone的影響對Datastore亦有類似的負面結果,如果Datastore的Disk Space被佔滿就有可能產生DoS的狀況,就算不至於造成DoS也會對Performance有影響。另外,資料的掺混問題也必須特別留意,因為一旦此VM被駭,或是在被部署時就是被精心設計過的,例如Promiscuous Mode被enable,就有可能因為資料的掺混造成重要資料被竊聽或盜取。
VIC的Plug-ins的管理也是一個虛擬化管理面安全的重點,有一些VIC Plug-ins可能不需Authentication就可存取到Virtualization Host上的資料或者執行Scripts,因此最好只安裝經過VMware認證或簽章過的Plug-ins。
管理者有時有P2V(Physical to Virtual)的需求,當要將一台實體機器虛擬化時,如果P2V的過程是跨不同Security Zone的話,試想一下,若一台在DMZ的實體機器被P2V到內部Production的Zone時,萬一此實體機器中毒會是被植入木馬,或是Patch Level非常的低,就有可能在VM被boot起來後就直接在Production Zone產生安全問題,直接影響到此重要的Zone或經由跳板一步步導致內部網路被徹底破壞。建議可以使用具有USB儲存媒體並經安全檢測的中介機器,將此中介機器部署到一個firewalled的Virtual Network(或Pseudo Security Zone),接著使用P2V工具將實體機器虛擬化到USB後Power On,實施安全檢測例如掃毒、木馬檢測及上補丁等等後再將此USB的Virtual Machine使用P2V導入到目標虛擬化環境。下圖為Zone的一個例釋。
三、新一代思科虛擬化環境安全的解決方案
Cisco對於虛擬化環境的安全設計也提出了幾個CVD指引,其中針對思科雲端安全架構也提出了包括VMware及NetApp在內的整合產品的安全設計。但就虛擬機在虛擬化環境中的安全問題,包括必須滿足虛擬機或Virtual Appliances的vMotion與DRS等動態特性在內,思科提出了基於Nexus 1000V的VSG的解決方案,為雲端架構與資料中心帶來了更多的安全保護與符合法規的要求。Cisco VSG使用了內崁在Nexus 1000V VEM中的 vPath(Virtual Network Service Data Path)來提供高效能並具分散式保護的安全方案。 Cisco VSG可與Nexus 1000V VSM與VNMC(Virtual Network Management Center)協同合作,可以讓單位內的網管、系統與資安等Teams在管理面達成協同合作、不相衝突的完善管理環境。Nexus 1000V的VEM及VSM可以讓網管與系統Team分工合作,而資安Team則藉由VNMC根據資訊安全政策來建立Security Profiles與稽核這些Security Profiles的成效。VNMC所建立的動態Profiles可以套用到Nexus 1000V的Ports上,因此這些Profiles就可隨vMotion動態地移動。如下圖所示,Cisco VSG可以讓雲端或資料中心架構上多租戶特性的安全保護得到解決,藉由基於Nexus 1000V的vPath功能與分散式整合特性,讓資安人員可以針對雲端或資料中心內的虛擬機依照不同類型或安全等級用Zone的方式來做區隔保護,根據單位對於虛擬化環境的安全政策套用適當的安全政策到虛擬化環境中,並且這些安全政策可隨vMotion等動態特性移動,確保所有安全政策都可適切且適時的套用到雲端或虛擬化架構中。
結語 

虛擬化安全引申出的安全問題還是非常的多,畢竟很多IT人員已習慣傳統的網路設計與資訊安全設計的方法。但網路的隔離還是最安全做法,但若無法做網路的實體隔離,搭配Virtual Firewall與Virtual IPS的使用亦可以加強各個Zones之間的安全問題,但記住Virtual Firewall的DMZ跟實體Firewall的DMZ一樣,都不是安全的區域,要避免把一些重要的VMs或Management Interface放到此區域中。DMZ也可以用專用的Virtualization Host的方式來單獨配置成一個DMZ Zone。
參考文件:
  1. www.vmware.com