Active Directory Federation Services 보안 모범 사례

이 문서에서는 AD FS(Active Directory Federation Services) 및 웹 애플리케이션 프록시 보안 계획 및 배포에 대한 모범 사례를 제공합니다. 여기에는 추가 보안 구성, 특정 사용 사례 및 보안 요구 사항에 대한 권장 사항이 포함되어 있습니다.

이 문서는 Windows Server 2012 R2, 2016 및 2019의 AD FS 및 WAP에 적용됩니다. 이러한 권장 사항은 온-프레미스 네트워크 또는 클라우드 호스팅 환경(예: Microsoft Azure)에 사용할 수 있습니다.

표준 배포 토폴로지

온-프레미스 환경에서 배포하는 경우 다음으로 구성된 표준 배포 토폴로지를 사용하는 것이 좋습니다.

  • 내부 회사 네트워크에 있는 하나 이상의 AD FS 서버
  • DMZ 또는 엑스트라넷 네트워크에 있는 하나 이상의 WAP(웹 애플리케이션 프록시) 서버

각 계층, AD FS 및 WAP에서 하드웨어 또는 소프트웨어 부하 분산 장치가 서버 팜 앞에 배치되고 트래픽 라우팅을 처리합니다. 방화벽은 필요에 따라 부하 분산 장치의 외부 IP 주소 앞에 배치됩니다.

A diagram depicting a standard A D F S topology.

참고

AD FS를 사용하려면 Read-Only 도메인 컨트롤러와 달리 전체 쓰기 가능한 도메인 컨트롤러가 작동해야 합니다. 계획된 토폴로지에서 Read-Only 도메인 컨트롤러를 포함하는 경우 Read-Only 도메인 컨트롤러를 인증에 사용할 수 있지만 LDAP 클레임 처리에는 쓰기 가능한 도메인 컨트롤러에 대한 연결이 필요합니다.

AD FS 서버 강화

다음은 AD FS 배포를 강화하고 보호하기 위한 모범 사례 및 권장 사항 목록입니다.

  • Active Directory 관리자 및 AD FS 관리자만 AD FS 시스템에 대한 관리자 권한이 있는지 확인합니다.
  • 모든 AD FS 서버에서 로컬 관리자 그룹 멤버 자격을 줄입니다.
  • 모든 클라우드 관리자가 MFA(Multi-Factor Authentication)를 사용하도록 요구합니다.
  • 에이전트를 통한 최소한의 관리 기능.
  • 호스트 방화벽을 통해 네트워크에서 액세스를 제한합니다.
  • AD FS 관리자가 관리 워크스테이션을 사용하여 자격 증명을 보호해야 합니다.
  • 다른 서버도 호스트하지 않는 최상위 OU에 AD FS 서버 컴퓨터 개체를 배치합니다.
  • AD FS 서버에 적용되는 모든 GPO는 다른 서버뿐만 아니라 해당 서버에만 적용되어야 합니다. 이렇게 하면 GPO 수정을 통해 잠재적인 권한 상승이 제한됩니다.
  • 설치된 인증서가 도난으로부터 보호되는지 확인하고(네트워크의 공유에 저장하지 않음) 만료되기 전에 갱신되도록 일정 미리 알림을 설정합니다(만료된 인증서는 페더레이션 인증을 중단). 또한 AD FS에 연결된 HSM(하드웨어 보안 모듈) 에서 서명 키/인증서를 보호하는 것이 좋습니다.
  • 로깅을 가장 높은 수준으로 설정하고 AD FS(& 보안) 로그를 SIEM으로 보내 AD 인증 및 AzureAD(또는 이와 유사한)와 상관 관계를 지정합니다.
  • 불필요한 프로토콜 & Windows 기능 제거
  • AD FS 서비스 계정에 대해 긴(>25자) 복잡한 암호를 사용합니다. gMSA(그룹 관리 서비스 계정)를 서비스 계정으로 사용하는 것이 좋습니다. 서비스 계정 암호를 자동으로 관리하여 시간이 지남에 따라 서비스 계정 암호를 관리할 필요가 없으므로 서비스 계정으로 사용하는 것이 좋습니다.
  • 보안 및 로깅 향상을 위해 최신 AD FS 버전으로 업데이트합니다(항상 먼저 테스트).

필요한 포트

아래 다이어그램은 AD FS 및 WAP 배포의 구성 요소 간에 사용하도록 설정해야 하는 방화벽 포트를 보여 줍니다. 배포에 Azure AD/Office 365 포함되지 않으면 동기화 요구 사항을 무시할 수 있습니다.

포트 49443은 사용자 인증서 인증을 사용하는 경우에만 필요하며, 이는 Azure AD 및 Office 365 선택 사항입니다.

a diagram showing the required ports and protocols for an A D F S deployment.

참고

포트 808(Windows Server 2012R2) 또는 포트 1501(Windows Server 2016 이상)은 구성 데이터를 서비스 프로세스 및 PowerShell로 전송하기 위해 로컬 WCF 엔드포인트에 사용하는 Net.TCP 포트 AD FS입니다. 이 포트는 Get-AdfsProperties | 실행하여 볼 수 있습니다. NetTcpPort를 선택합니다. 방화벽에서 열 필요는 없지만 포트 검색에 표시되는 로컬 포트입니다.

페더레이션 서버 간 통신

AD FS 팜의 페더레이션 서버는 구성 동기화를 위해 HTTP 포트 80을 통해 팜의 다른 서버 및 WAP(웹 애플리케이션 프록시) 서버와 통신합니다. 이러한 서버만 서로 통신할 수 있고 다른 서버는 심층 방어 척도가 아닌지 확인합니다.

조직은 각 서버에 방화벽 규칙을 설정하여 이 상태를 달성할 수 있습니다. 규칙은 팜 및 WAP 서버에 있는 서버의 IP 주소에서의 인바운드 통신만 허용해야 합니다. 일부 NLB(네트워크 부하 분산 장치)는 개별 페더레이션 서버의 상태를 검색하기 위해 HTTP 포트 80을 사용합니다. 구성된 방화벽 규칙에 NLB의 IP 주소를 포함해야 합니다.

Azure AD 커넥트 및 페더레이션 서버/WAP

이 테이블은 Azure AD Connect 서버 및 페더레이션 서버/WAP 서버 간의 통신에 필요한 포트와 프로토콜에 대해 설명합니다.

프로토콜 포트 Description
HTTP 80(TCP/UDP) CRL(인증서 해지 목록)를 다운로드하여 SSL 인증서를 확인하는 데 사용합니다.
HTTPS 443(TCP/UDP) Azure AD와 동기화하는 데 사용합니다.
WinRM 5985 WinRM 수신기

WAP 및 페더레이션 서버

이 테이블은 페더레이션 서버 및 WAP 서버 간의 통신에 필요한 포트와 프로토콜에 대해 설명합니다.

프로토콜 포트 Description
HTTPS 443(TCP/UDP) 인증에 사용합니다.

WAP 및 사용자

이 테이블은 사용자 및 WAP 서버 간의 통신에 필요한 포트와 프로토콜에 대해 설명합니다.

프로토콜 포트 Description
HTTPS 443(TCP/UDP) 디바이스 인증에 사용합니다.
TCP 49443(TCP) 인증서 인증에 사용합니다.

하이브리드 배포에 필요한 포트 및 프로토콜에 대한 자세한 내용은 여기 문서를 참조 하세요.

Azure AD 및 Office 365 배포에 필요한 포트 및 프로토콜에 대한 자세한 내용은 여기 문서를 참조하세요.

엔드포인트 사용

AD FS 및 WAP가 설치되면 페더레이션 서비스 및 프록시에서 AD FS 엔드포인트의 기본 집합이 사용하도록 설정됩니다. 이러한 기본값은 가장 일반적으로 요구되고 사용되는 시나리오에 따라 선택되었으며 변경할 필요가 없습니다.

[선택 사항] Azure AD/Office 365 사용하도록 설정된 최소 엔드포인트 프록시 집합

Azure AD 및 Office 365 시나리오에 대해서만 AD FS 및 WAP를 배포하는 조직은 프록시에서 사용하도록 설정된 AD FS 엔드포인트 수를 더욱 제한하여 공격 표면을 최소화할 수 있습니다. 다음은 이러한 시나리오에서 프록시에서 사용하도록 설정해야 하는 엔드포인트 목록입니다.

엔드포인트 목적
/adfs/ls 브라우저 기반 인증 흐름 및 현재 버전의 Microsoft Office Azure AD 및 Office 365 인증에 이 엔드포인트를 사용합니다.
/adfs/services/trust/2005/usernamemixed 2013년 Office 2015년 5월 업데이트보다 오래된 Office 클라이언트의 Exchange Online 사용됩니다. 이후 클라이언트는 수동 \adfs\ls 엔드포인트를 사용합니다.
/adfs/services/trust/13/usernamemixed 2013년 Office 2015년 5월 업데이트보다 오래된 Office 클라이언트의 Exchange Online 사용됩니다. 이후 클라이언트는 수동 \adfs\ls 엔드포인트를 사용합니다.
/adfs/oauth2 AD FS에 직접 인증하도록 구성한 최신 앱(온-프레미스 또는 클라우드)에 사용됩니다(즉, Azure AD 통해서가 아님).
/adfs/services/trust/mex 2013년 Office 2015년 5월 업데이트보다 오래된 Office 클라이언트의 Exchange Online 사용됩니다. 이후 클라이언트는 수동 \adfs\ls 엔드포인트를 사용합니다.
/adfs/ls/federationmetadata/2007-06/federationmetadata.xml 모든 수동 흐름에 대한 요구 사항; Office 365/Azure AD AD FS 인증서를 확인하는 데 사용됩니다.

다음 PowerShell cmdlet을 사용하여 프록시에서 AD FS 엔드포인트를 사용하지 않도록 설정할 수 있습니다.

Set-AdfsEndpoint -TargetAddressPath <address path> -Proxy $false

다음은 그 예입니다.

Set-AdfsEndpoint -TargetAddressPath /adfs/services/trust/13/certificatemixed -Proxy $false

인증에 대한 확장된 보호

인증에 대한 확장된 보호는 MITM(중간) 공격을 완화하고 기본적으로 AD FS에서 사용하도록 설정되는 기능입니다.

설정을 확인하려면 다음을 수행할 수 있습니다.

아래 PowerShell cmdlet을 사용하여 설정을 확인할 수 있습니다.

Get-ADFSProperties

속성은 ExtendedProtectionTokenCheck입니다. 기본 설정은 허용이므로 기능을 지원하지 않는 브라우저와의 호환성 문제 없이 보안 이점을 얻을 수 있습니다.

페더레이션 서비스를 보호하기 위한 정체 제어

페더레이션 서비스 프록시(WAP의 일부)는 요청의 홍수로부터 AD FS 서비스를 보호하기 위해 정체 제어를 제공합니다. 웹 애플리케이션 프록시 웹 애플리케이션 프록시 및 페더레이션 서버 간의 대기 시간으로 인해 페더레이션 서버가 오버로드되는 경우 외부 클라이언트 인증 요청을 거부합니다. 이 기능은 기본적으로 권장 대기 시간 임계값 수준으로 구성됩니다.

설정을 확인하려면 다음을 수행할 수 있습니다.

  1. 웹 응용 프로그램 프록시 컴퓨터에서 관리자 권한 명령 창을 시작합니다.
  2. %WINDIR%\adfs\config의 AD FS 디렉터리로 이동합니다.
  3. 정체 컨트롤 설정을 기본값에서 .로 <congestionControl latencyThresholdInMSec="8000" minCongestionWindowSize="64" enabled="true" />변경합니다.
  4. 파일을 저장한 후 닫습니다.
  5. net stop adfssrvnet start adfssrv를 차례로 실행하여 AD FS 서비스를 다시 시작합니다. 참고로 이 기능에 대한 지침은 여기에서 찾을 수 있습니다.

프록시에서 표준 HTTP 요청 확인

또한 프록시는 모든 트래픽에 대해 다음 표준 검사를 수행합니다.

  • FS-P 자체는 수명이 짧은 인증서를 통해 AD FS에 인증합니다. dmz 서버의 손상이 의심되는 시나리오에서 AD FS는 잠재적으로 손상된 프록시에서 들어오는 요청을 더 이상 신뢰하지 않도록 "프록시 트러스트를 해지"할 수 있습니다. 프록시 트러스트를 해지하면 AD FS 서버에 대한 어떤 목적으로도 성공적으로 인증할 수 없도록 각 프록시의 자체 인증서가 해지됩니다.
  • FS-P는 모든 연결을 종료하고 내부 네트워크의 AD FS 서비스에 대한 새 HTTP 연결을 만듭니다. 외부 디바이스와 AD FS 서비스 간에 세션 수준 버퍼를 제공합니다. 외부 디바이스는 AD FS 서비스에 직접 연결되지 않습니다.
  • FS-P는 AD FS 서비스에서 필요하지 않은 HTTP 헤더를 특별히 필터링하는 HTTP 요청 유효성 검사를 수행합니다.

모든 AD FS 및 WAP 서버가 최신 업데이트를 수신하는지 확인합니다. AD FS 인프라에 대한 가장 중요한 보안 권장 사항은 AD FS 및 WAP 서버를 모든 보안 업데이트와 함께 최신 상태로 유지하는 수단과 이 페이지의 AD FS에 대해 중요하게 지정된 선택적 업데이트를 유지하는 것입니다.

Azure AD 고객이 인프라를 모니터링하고 최신 상태로 유지하는 권장 방법은 Azure AD Premium 기능인 AD FS용 Azure AD 커넥트 Health를 사용하는 것입니다. Azure AD 커넥트 상태에는 AD FS 또는 WAP 컴퓨터에 AD FS 및 WAP에 대한 중요한 업데이트 중 하나가 누락된 경우 트리거되는 모니터 및 경고가 포함됩니다.

AD FS용 Azure AD 커넥트 상태 설치에 대한 정보는 여기에서 찾을 수 있습니다.

Azure AD를 통해 AD FS 트러스트를 보호하고 모니터링하는 모범 사례

AD FS를 Azure AD와 페더레이션하는 경우 페더레이션 구성(AD FS와 Azure AD 간에 구성된 트러스트 관계)을 긴밀하게 모니터링하고 비정상적이거나 의심스러운 활동을 캡처하는 것이 중요합니다. 이렇게 하려면 페더레이션 구성이 변경될 때마다 경고를 설정하고 알림을 받는 것이 좋습니다. 경고를 설정하는 방법을 알아보려면 페더레이션 구성에 대한 변경 내용 모니터링을 참조하세요.

추가 보안 구성

더 많은 보호를 제공하도록 다음과 같은 추가 기능을 구성할 수 있습니다.

계정에 대한 엑스트라넷 "소프트" 잠금 보호

Windows Server 2012 R2의 엑스트라넷 잠금 기능을 사용하면 AD FS 관리자가 허용되는 최대 인증 요청 수(ExtranetLockoutThreshold) 및 observation window기간(ExtranetObservationWindow)을 설정할 수 있습니다. 인증 요청의 최대 수(ExtranetLockoutThreshold)에 도달하면 AD FS는 설정된 기간(ExtranetObservationWindow)에 대해 제공된 계정 자격 증명을 AD FS에 대해 인증하려고 시도하지 않습니다. 이 작업은 AD 계정 잠금으로부터 이 계정을 보호합니다. 즉, 사용자 인증을 위해 AD FS를 사용하는 회사 리소스에 대한 액세스가 손실되지 않도록 이 계정을 보호합니다. 이러한 설정은 AD FS 서비스가 인증할 수 있는 모든 도메인에 적용됩니다.

다음 Windows PowerShell 명령을 사용하여 AD FS 엑스트라넷 잠금을 설정할 수 있습니다(예:

Set-AdfsProperties -EnableExtranetLockout $true -ExtranetLockoutThreshold 15 -ExtranetObservationWindow ( new-timespan -Minutes 30 )

참고로 이 기능에 대한 공개 설명서는 다음과 같습니다.

프록시에서 WS-Trust Windows 엔드포인트 사용 안 함(예: 엑스트라넷에서)

WS-Trust Windows 엔드포인트(/adfs/services/trust/2005/windowstransport/adfs/services/trust/13/windowstransport)는 HTTPS에서 WIA 바인딩을 사용하는 인트라넷 연결 엔드포인트만을 의미합니다. 엑스트라넷에 노출하면 이러한 엔드포인트에 대한 요청이 잠금 보호를 무시할 수 있습니다. 다음 PowerShell 명령을 사용하여 AD 계정 잠금을 보호하려면 프록시에서 이러한 엔드포인트를 사용하지 않도록 설정해야 합니다(예: 엑스트라넷에서 사용하지 않도록 설정). 프록시에서 이러한 엔드포인트를 사용하지 않도록 설정하면 최종 사용자에게 알려진 영향이 없습니다.

Set-AdfsEndpoint -TargetAddressPath /adfs/services/trust/2005/windowstransport -Proxy $false
Set-AdfsEndpoint -TargetAddressPath /adfs/services/trust/13/windowstransport -Proxy $false

참고

AD FS 팜이 WID(Windows 내부 데이터베이스)에서 실행되고 보조 AD FS 서버가 있는 경우 주 서버에서 엔드포인트를 사용하지 않도록 설정한 후 보조 노드에서 SYNC가 발생할 때까지 기다린 후 AD FS 서비스를 다시 시작합니다. 보조 노드에서 PowerShell 명령 Get-AdfsSyncProperties 를 사용하여 마지막 SYNC 프로세스를 추적합니다.

인트라넷 및 엑스트라넷 액세스에 대한 액세스 정책 구분

AD FS는 로컬, 회사 네트워크에서 시작된 요청과 프록시를 통해 인터넷에서 들어오는 요청에 대한 액세스 정책을 구분할 수 있습니다. 이러한 차별화는 애플리케이션별로 또는 전역적으로 수행할 수 있습니다. 중요하거나 개인적으로 식별할 수 있는 정보가 있는 높은 비즈니스 가치 애플리케이션 또는 애플리케이션의 경우 다단계 인증을 요구하는 것이 좋습니다. 다단계 인증은 AD FS 관리 스냅인을 통해 설정할 수 있습니다.

MFA(다단계 인증) 필요

AD FS는 특히 프록시를 통해 들어오는 요청, 개별 애플리케이션 및 Azure AD/Office 365 및 온-프레미스 리소스에 대한 조건부 액세스를 위해 강력한 인증(예: 다단계 인증)을 요구하도록 구성할 수 있습니다. 지원되는 MFA 메서드에는 Microsoft Azure MF 및 타사 공급자가 모두 포함됩니다. 사용자에게 추가 정보(예: 일회성 코드가 포함된 SMS 텍스트)를 제공하라는 메시지가 표시되고 AD FS는 공급자별 플러그 인과 함께 작동하여 액세스를 허용합니다.

지원되는 외부 MFA 공급자에는 HDI Global뿐만 아니라 이 페이지에 나열된 공급자도 포함됩니다.

Azure AD 페더레이션된 경우 클라우드 Azure AD Multi-Factor Authentication의 전달을 방지하기 위해 보호를 사용하도록 설정합니다.

Azure AD 페더레이션된 경우 클라우드 Azure AD Multi-Factor Authentication을 우회하고 페더레이션된 사용자에 대한 다단계 인증으로 Azure AD Multi-Factor Authentication을 사용하는 경우 보호를 사용하도록 설정합니다.

Azure AD 테넌트에서 페더레이션된 도메인에 대한 보호를 사용하도록 설정하면 페더레이션된 사용자가 MFA를 요구하는 조건부 액세스 정책의 적용을 받는 애플리케이션에 액세스할 때 Azure AD Multi-Factor Authentication이 항상 수행됩니다. 여기에는 페더레이션 ID 공급자가 온-프레미스 MFA가 수행되었음을 (페더레이션된 토큰 클레임을 통해) 표시한 경우에도 Azure AD Multi-Factor Authentication 수행이 포함됩니다. 매번 Azure AD Multi-Factor Authentication을 적용하면 손상된 온-프레미스 계정이 ID 공급자가 다단계 인증을 이미 수행했음을 모방하여 multi-Factor Authentication을 Azure AD 우회할 수 없으며, 타사 MFA 공급자를 사용하여 페더레이션된 사용자에 대해 MFA를 수행하지 않는 한 매우 권장됩니다.

내부 페더레이션 MS Graph API 또는 MS GraphPowerShell cmdlet의 일부로 노출되는 새 보안 설정을 federatedIdpMfaBehavior 사용하여 보호를 사용하도록 설정할 수 있습니다. 이 설정은 federatedIdpMfaBehavior 페더레이션된 사용자가 MFA가 필요한 조건부 액세스 정책에 의해 제어되는 애플리케이션에 액세스할 때 페더레이션 ID 공급자가 수행하는 MFA를 Azure AD 허용하는지 여부를 결정합니다. 관리자는 다음 값 중 하나를 선택할 수 있습니다.

관리자는 다음 값 중 하나를 선택할 수 있습니다.

속성 Description
acceptIfMfaDoneByFederatedIdp Azure AD ID 공급자가 수행하는 경우 MFA를 허용합니다. 그렇지 않은 경우 multi-Factor Authentication을 Azure AD 수행합니다.
enforceMfaByFederatedIdp Azure AD ID 공급자가 수행하는 경우 MFA를 허용합니다. 그렇지 않은 경우 요청을 ID 공급자로 리디렉션하여 MFA를 수행합니다.
rejectMfaByFederatedIdp Azure AD 항상 multi-Factor Authentication을 Azure AD 수행하고 ID 공급자가 수행하는 경우 MFA를 거부합니다.

다음 명령을 사용하도록 설정 federatedIdpMfaBehavior 하여 rejectMfaByFederatedIdp 보호를 사용하도록 설정할 수 있습니다.

MS GRAPH API


 PATCH /domains/{domainsId}/federationConfiguration/{internalDomainFederationId} 

{ 

"federatedIdpMfaBehavior": "rejectMfaByFederatedIdp" 

} 

예제:

PATCH /domains/contoso.com/federationConfiguration/2a8ce608-bb34-473f-9e0f-f373ee4cbc5a 

{ 

"federatedIdpMfaBehavior": "rejectMfaByFederatedIdp" 

PowerShell

Update-MgDomainFederationConfiguration -DomainId <domainsId> -InternalDomainFederationId <internalDomainFederationId> federatedIdpMfaBehavior "rejectMfaByFederatedIdp" 

예제:

Update-MgDomainFederationConfiguration -DomainId “contoso.com” -InternalDomainFederationId “2a8ce608-bb34-473f-9e0f-f373ee4cbc5a” federatedIdpMfaBehavior "rejectMfaByFederatedIdp" 

HSM(하드웨어 보안 모듈)

기본 구성에서 AD FS가 토큰에 서명하는 데 사용하는 키는 페더레이션 서버를 인트라넷에 두지 않습니다. DMZ 또는 프록시 컴퓨터에는 존재하지 않습니다. 필요에 따라 더 많은 보호를 제공하려면 AD FS에 연결된 HSM(하드웨어 보안 모듈)에서 이러한 키를 보호하는 것이 좋습니다. Microsoft는 HSM 제품을 생산하지 않지만 AD FS를 지원하는 몇 가지 제품이 시장에 있습니다. 이 권장 사항을 구현하려면 공급업체 지침에 따라 서명 및 암호화를 위한 X509 인증서를 만든 다음, AD FS 설치 PowerShell commandlet을 사용하여 사용자 지정 인증서를 다음과 같이 지정합니다.

Install-AdfsFarm -CertificateThumbprint <String> -DecryptionCertificateThumbprint <String> -FederationServiceName <String> -ServiceAccountCredential <PSCredential> -SigningCertificateThumbprint <String>

각 항목이 나타내는 의미는 다음과 같습니다.

  • CertificateThumbprint 은 SSL 인증서입니다.
  • SigningCertificateThumbprint 는 서명 인증서(HSM 보호 키 포함)입니다.
  • DecryptionCertificateThumbprint 은(는) 암호화 인증서(HSM 보호 키 포함)입니다.