微軟活動目錄聯合伺服器(ADFS)安全防禦配置指導
許多企業組織正在轉到雲計算的方向,這往往需要一定程度上的聯合。簡單來說,聯合服務將認證從一個系統(或組織)擴展到另一個系統(或組織)。
Gerald Steere(@Darkpawh)和我在2017年7月在DEF CON安全峰會上討論過雲安全。
演示幻燈片和視頻可以在這裡找到:「 黑掉雲服務 」我們介紹的內容中有一個關鍵的點是如何保護聯合伺服器,特別是Microsoft Active Directory聯合伺服器(ADFS)。
微軟正在不斷的更新保護ADFS的指導信息。
這篇文章描述了關鍵的ADFS概念以及給出了一個關於如何正確的保護ADFS的安全建議的簡短列表。
聯合伺服器概述
聯合伺服器通常部署在DMZ中的代理伺服器的內部網路上。聯合伺服器上安裝有證書。
ADFS使用以下證書:
· 服務溝通
· 令牌解密
· 令牌簽名
ADFS術語還包括:
· 依賴方信任:雲服務和應用程序
· 聲明規則:確定訪問的類型和允許訪問的位置。
主要聯合點:
· 聯合:利用PKI的組織之間的信任(證書)
· 雲端SSO通常利用臨時或持久的瀏覽器cookie(cookie提供訪問)
· SAML通常可以支持多種協議。(協議和版本很重要)
· 聯合伺服器(或代理)在公共Internet上通過埠443(HTTPS)提供服務。
聯合身份驗證流程概念
在上圖中:
· 用戶訪問網站:http://web.sith.co並點擊登錄。
· 用戶的瀏覽器可識別聯合身份驗證配置並連接Web應用程序的聯合登錄頁面。
· 用戶被退回到企業組織中的註冊聯合伺服器,該伺服器請求驗證或使用現有的用戶身份驗證(AD Kerberos等)。可能會提示用戶進行多因素身份驗證。
· 聯合伺服器為用戶提供用戶想要連接的Web應用的令牌。
· 用戶返回到Web應用程序的身份驗證頁面,並且由於用戶具有令牌,因此用戶可以根據令牌中的聲明進行訪問。
密鑰聯合認證項目:
· 聯合認證實際上是Kerberos的雲端版本(儘管存在很大的差異)。
· 擁有聯合伺服器,擁有自己的企業組織雲服務。
· 令牌和簽名證書與KRBTGT帳戶非常相似,因為它們都用於簽署證明驗證的令牌(請參閱黃金票證)。
· 竊取聯合證書來偽造/欺騙訪問令牌。
為了突出 Gerald和我在2017年在DEFCON所表達的觀點,CyberArk發布了「GoldenSAML」工具,使得具有聯合伺服器簽名證書的人可以偽造SAML令牌,可以偽造成任何他們想要成為的用戶。此功能意味著聯合伺服器需要與域控制器一起在最高級別受到保護。
請注意,儘管CyberArk的帖子稱GoldenSAML是「新發現的」,但這是不正確的。任何操作過聯合伺服器的人都明白,聯合證書的所有權意味著對身份驗證的控制,就像PKI CA證書的所有權能夠創建PKI證書一樣。
傑拉爾德·斯蒂爾(Gerald Steere)提供了一些防禦性的建議:
「防禦針對聯合伺服器的攻擊是很難的,但是如果你比較一下攻防雙方,你會發現不尋常的東西就是一個不爭的事實。例如,比較從身份提供商發放的令牌與登錄到你的雲服務 」。
保護ADFS伺服器
這意味著聯合伺服器(包括ADFS伺服器)需要在同一級別的域控制器(第0層)中受到保護。
保護ADFS的一些建議:
· 只有Active Directory管理員和ADFS管理員才能擁有ADFS系統的管理許可權。
· 減少所有ADFS伺服器上的本地Administrators組成員身份。
· 所有的雲管理員都使用多重身份驗證(MFA)。
· 通過代理設置最小的管理能力。
· 通過主機防火牆限制網路訪問。
· 確保ADFS管理員使用管理工作站來保護其憑據。
· 將ADFS伺服器計算機對象放置在不承載其他伺服器的頂級OU中。
· 所有適用於ADFS伺服器的GPO都應該只適用於它們,而不適用於其他伺服器。這通過GPO修改限制了潛在的特權升級。
· 確保安裝的證書防止被竊取(不要將這些證書存儲在網路的共享上),並設置日曆提醒,以確保在到期前續訂(過期證書會中斷聯合身份驗證)。
· 將日誌記錄設置為最高級別並將ADFS(以及安全)日誌發送到SIEM並與AD身份驗證以及AzureAD(或類似)相關聯。
· 刪除不必要的協議和Windows功能
用於記錄ADFS配置的一些有用的PowerShell命令:
識別管理員
#修改自$Members = @()#Invoke-Command {$Members += net localgroup administrators | where {$_ -AND $_ -notmatch "command completed successfully"} | select -skip 4$LocalAdmins = New-Object PSObject -Property @{ Computername = $env:COMPUTERNAME Group = "Administrators" Members = $Members } $LocalAdmins
在ADFS伺服器上,有相關的ADFS PowerShell cmdlet。我們可以通過運行以下命令來識別:
Get-Command -module ADFS
我覺得最有用的cmdlet是:
· GET-ADFSCertificate Get-ADFSCertificate cmdlet檢索聯合身份驗證服務用於令牌簽名,令牌解密和安全服務通信的證書。請密切關注到期日期。
· GET-AdfsAdditionalAuthenticationRule Get-AdfsAdditionalAuthenticationRule cmdlet檢索管理所有觸發其他身份驗證提供程序調用的應用程序的全局規則。當聲明的引擎評估了附加的認證規則並確定需要多因素認證時,會提示用戶執行附加的認證方式。僅在所有應用程序都能夠通過Active Directory聯合身份驗證服務(ADFS)執行基於Web的憑據收集時才使用此規則。如果由於評估規則而導致觸發條件成立,那麼使用WS-Trust等協議的應用程序將無法獲得安全令牌。
· GET-AdfsAttributeStore Get-ADFSAttributeStore cmdlet檢索聯合身份驗證服務的屬性存儲。在執行此cmdlet時,你可以使用不帶參數來檢索聯合身份驗證服務的所有屬性存儲。
· GET-AdfsAuthenticationProvider Get-AdfsAuthenticationProvider cmdlet獲取當前在Active Directory聯合身份驗證服務(AD FS)中註冊的所有身份驗證提供程序的列表。只讀列表包括了內置和外部身份驗證提供程序以及相關的屬性。
· GET-AdfsClaimDescription Get-ADFSClaimDescription cmdlet檢索聯合身份驗證服務中的聲明描述。聲明說明描述了聯合身份驗證服務使用的聲明。他們還描述了如何在聯邦元數據中發布這些聲明。在執行此cmdlet時,你可以使用不帶參數來獲取聲明說明的完整列表。
· GET-AdfsClaimsProviderTrust Get-ADFSClaimsProviderTrust cmdlet檢索聯合身份驗證服務中的聲明提供程序信任對象。在執行此cmdlet時,你可以使用不帶參數來獲取所有聲明提供程序信任對象。
· GET-AdfsClient Get-AdfsClient cmdlet檢索先前在Active Directory聯合身份驗證服務(ADFS)中註冊的OAuth 2.0客戶端的註冊信息。
· GET-AdfsEndpoint Get-ADFSEndpoint cmdlet從聯合身份驗證服務中檢索指定的端點。ADFSEndpoint對象的集合是伺服器上所有受支持端點的列表。你可以使用此列表來查看端點的配置並啟用或禁用它們。要查看完整的端點列表,那麼在執行此cmdlet時,你可以不帶任何參數執行。
· GET-AdfsGlobalAuthenticationPolicy Get-AdfsGlobalAuthenticationPolicy cmdlet會顯示全局身份驗證策略,其中包括當前允許在AdditionalAuthenticationProvider屬性中作為附加提供程序的提供程序。
· GET-AdfsGlobalWebContent Get-AdfsGlobalWebContent cmdlet獲取所有全局Web內容對象或與你指定的語言環境對應的全局Web內容對象。如果不指定Locale參數,則cmdlet將獲取所有語言環境的全局Web內容對象。
· GET-AdfsProperties Get-ADFSProperties cmdlet檢索聯合身份驗證服務的屬性。
· GET-AdfsRelyingPartyTrust Get-ADFSRelyingPartyTrust cmdlet檢索聯合身份驗證服務中的信任方信任。在執行此cmdlet時,你可以使用不帶參數來獲取所有依賴方信任對象。
· GET-AdfsSslCertificate Get-AdfsSslCertificate cmdlet獲取為Active Directory聯合身份驗證服務(ADFS)配置的所有SSL綁定的主機名,埠和證書哈希,如果啟用,則會獲取設備註冊服務。
· GET-AdfsSyncProperties Get-ADFSSyncProperties cmdlet檢索聯合身份驗證服務的配置資料庫同步屬性。
· GET-AdfsWebApplicationProxyRelyingPartyTrust Get-AdfsWebApplicationProxyRelyingPartyTrust cmdlet獲取代理的Web應用程序代理依賴方信任對象。
Web應用程序代理依賴方信任對象對於從公司網路外部管理全局網路訪問非常有用。通過設置身份驗證和授權策略,管理員可以限制對通過Web應用程序代理髮布的內部Web應用程序和服務的訪問。· GET-AdfsWebConfig Get-AdfsWebConfig cmdlet獲取Active Directory聯合身份驗證服務(ADFS)Web自定義配置設置。
· GET-AdfsWebTheme Get-AdfsWebTheme cmdlet獲取AdfsWebTheme對象。按名稱指定Web主題。如果不指定名稱,則cmdlet將獲取所有的AdfsWebTheme對象。
以下是我們用來檢查特定配置的一些ADFS PowerShell命令:
# Ensure lockout threshold < AD lockoutGet-AdfsProperties | fl ExtranetLockoutEnabled,ExtranetLockoutthreshold,ExtranetObservationWindow # Set to >5 yearsGet-ADFSProperties | Select CertificateDuration Write-Output "ADFS Server Logging Level:"(Get-AdfsProperties).LogLevel
ADFS參考
· Active Directory聯合身份驗證服務(MSDN)
https://msdn.microsoft.com/en-us/library/bb897402.aspx?f=255&MSPPError=-2147217396· Active Directory聯合身份驗證服務
https://docs.microsoft.com/zh-cn/windows-server/identity/active-directory-federation-services
· ADFS概述
https://technet.microsoft.com/zh-cn/library/cc755226(v=ws.11).aspx· AWS和ADFS
https://aws.amazon.com/blogs/security/tag/ad-fs/· 安全規劃和部署ADFS的最佳實踐
https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/design/best-practices-for-secure-planning-and-deployment-的-AD-FS· ADFS證書最佳實踐(DirTeam)
https://dirteam.com/sander/series/ad-fs-certificates-best-practices/· ADFS 3.0最佳實踐(FlamingKeys)
https://flamingkeys.com/ad-fs-3-best-practices/
· AD FS for Windows Server 2016最佳實踐(FlamingKeys)
https://flamingkeys.com/ad-fs-windows-server-2016-best-practices/本文翻譯自:https://adsecurity.org/?p=3782 ,如若轉載,請註明原文地址: http://www.4hou.com/technology/8773.html
推薦閱讀:
※國外知名評論系統Disqus 2012年被黑,官方現在才發現用戶數據泄漏了
※是否有合適的工具(隨身攜帶)快速抹除快遞單等包含敏感信息?
※機器的黎明 -- 第24屆DEF CON CTF總決賽亞軍隊員訪談
※動手教程:DIY一個OpenWRT的滲透工具
※反取證、密碼學、逆向工程軟體…… 10大最好的網路安全Reddit都在這兒
TAG:信息安全 |