如果你是一名面向基礎設施的安全專業人員,那么在目前的IT行業中只關注應用程序安全可能會讓你感覺到自己跟不上形勢。然而,在很多情況下應用安全專家還是要依靠基礎設施小組來提供安全基礎,命名和目錄服務便是其中的一個典型例子。
在本文中,我們將探討為何在保證了命名和目錄服務、輕量級目錄訪問協議(LDAP)之后,有助于建立一個堅實的、應用程序可信任的平臺。
LDAP基礎
LDAP廣泛用于內部和外部應用程序,提供基于多種平臺的用戶目錄服務。LDAP能夠提供用戶驗證服務;通過將成員身份表示為特定應用程序的角色,它有助于應用程序進行授權和訪問控制決策;它還也可以用來存儲用戶的偏好和特權信息。
微軟Active Directory提供了LDAP接口,它可以連接到Windows特定的用戶數據,而Active Directory和Active Directory應用程序模式(ADAM)都被應用程序作為用戶信息的主要數據存儲區。用戶目錄服務其他的選項還包括OpenLDAP項目、企業軟件(如IBM Lotus Domino和Novell的e-Directory),它們往往通過使用LDAP進行擴展。
確保LDAP的安全
為了保證LDAP的安全,你需要對其進行一次初步的風險評估,從而獲得它在特定應用環境中的使用情況。如果該協議用于驗證或訪問控制決策,那么一些潛在的威脅必須得到解決。在這種情況下,頭號威脅包括LDAP通訊截取、用戶證書的泄露、高級權級被匿名或普通用戶所濫用,以及對LDAP數據過分依賴而導致的錯誤。
有一些方法可以用來強化LDAP的安裝,從而防御來自這些方面的威脅。首先,所有的LDAP連接應限于僅在安全的傳輸層(通常是SSL)上使用,以防止證書被攔截。微軟還通過包含客戶端和服務器的完整配置選項來支持對LDAP查詢和響應的加密。
不過,傳輸層加密并沒有嚴格的服務器證書為客戶端的相關政策進行驗證,所以還不足以保護證書被 “中間人”攻擊盜取。LDAP身份驗證可以使用包括向服務器明文提交用戶憑據、摘要式身份驗證、Kerberos或挑戰-應答在內的多種認證機制。建議使用Kerberos或challenge-response機制,特別是在不支持傳輸層加密的時候。
此外,如果LDAP的用戶密碼存儲在數據存儲區里(通常已對密碼進行哈希處理),如果權限設置的不正確,那么密碼可以被LDAP目錄中的任何人所檢索到。而實際上只有具備相應權限的應用程序才能被允許查詢此值,但也不能訪問匿名的或普通用戶的身份資料。
如果你安裝了一個專用的LDAP,不打算提供給最終用戶使用;或者,你所有的用戶都在Active Directory這樣單一認證平臺上,那么你應該考慮禁用匿名綁定到LDAP目錄。不這樣做會導致信息泄露,包括用戶信息;而在Active Directory下,一些有關數據存儲的基本配置信息也會泄露。
當應用程序為了包括那些跟應用程序特定功能相關的數據域而對LDAP架構進行擴展時,用于訪問LDAP的應用程序ID應該被加入到一個訪問組中去。此訪問組有權查詢特定領域和拒絕其他用戶和組織的訪問。
有兩個和目錄結構和完整性相關的安全風險,為了解決這一問題需要應用程序組和基礎設施安全專家進行協作。在這些情況下,整個LDAP使用團隊需要一個審查過程和準則集。第一個問題是LDAP注入,類似SQL注入的應用層漏洞。如果程序接受用戶輸入,并直接連接LDAP查詢,那么LDAP就可能存在該漏洞。
第二個問題是使用LDAP的訪問控制決策,而不是使用用戶身份、組成員身份和屬性檢索。LDAP的用戶入口在向用戶闡述訪問控制決策時,還應該明確指出這個問題。開發人員應該保持訪問控制列表對應用程序配置數據而言是本地的,并利用LDAP來識別用戶和組成員身份,從而提供非安全用戶身份的相關信息。
警示:當某個目錄服務只能供兩個應用程序使用時,這些資源往往不斷成熟,從而為重要的應用程序承擔更多的責任,并發揮關鍵的安全功能。因此,最好在部署的時候就設計一些安全控制,而不是在應用程序破壞后亡羊補牢。