
Microsoft Entra ID 환경의 보안 상태를 평가하기 위한 경량 PowerShell 도구입니다. 권한 있는 개체, 위험한 할당 및 잠재적 구성 오류를 식별하는 데 도움이 됩니다.

EntraFalcon은 펜테스터, 보안 분석가, 시스템 관리자가 Microsoft Entra ID 환경의 보안 상태를 평가할 수 있도록 돕는 PowerShell 기반 평가 도구입니다.
사용 편의성을 염두에 두고 설계된 EntraFalcon은 PowerShell 5.1 및 7에서 실행되며, Windows와 Linux를 모두 지원하고, 추가 PowerShell 모듈이나 별도 설치, Microsoft Graph API 동의가 필요하지 않습니다.
이 도구는 종종 간과되는 권한 있는 객체, 잠재적으로 위험한 할당, Conditional Access 오구성을 발견하는 데 도움을 줍니다. 예를 들어:
발견 사항은 효율적인 탐색과 분석을 지원하기 위해 대화형 HTML 보고서로 제공됩니다.
| 유형 | 권한 | 필수 | 누락 시 영향 |
|---|---|---|---|
| Entra ID 역할 | Global Reader | 예 | 스크립트를 실행할 수 없음 |
| Azure 역할 | Reader: 모든 관리 그룹 또는 구독에 대해 | 아니요 | Azure IAM 할당을 평가할 수 없음 |
또한 도구를 실행하는 장치에서 Microsoft Graph API 및 선택적으로 Azure ARM API에 인증할 수 있어야 합니다. Conditional Access 정책이 인증을 차단하지 않는지 확인하세요.
시작하려면 저장소를 복제하고 프로젝트 디렉터리로 이동하세요:```powershell git clone https://github.com/CompassSecurity/EntraFalcon cd EntraFalcon
참고: 스크립트를 실행하려면 PowerShell 실행 정책을 일시적으로 변경해야 할 수 있습니다.
신뢰할 수 있는 스크립트에 대해서만 이 작업을 수행하세요!```
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
EntraFalcon은 Entra ID 인증에 대한 기본 지원을 포함합니다. -AuthFlow를 사용하여 인증 흐름을 선택하십시오.
일반적인 평가에는 전체 범위 흐름 중 하나를 사용하십시오:
| 권장 흐름 | 최적 용도 | 플랫폼 | 범위 |
|---|---|---|---|
BroCi (기본값) | 대화형 Windows 실행 | Windows | 전체 |
BroCiManualCode | 다른 브라우저에서 인증 | Windows, Linux, macOS | 전체 |
BroCiToken | 기존 Azure Portal 새로 고침 토큰 | Windows, Linux, macOS | 전체 |
ServicePrincipal | 자동화 / CI | Windows, Linux, macOS | 전체 |
BroCi는 대화형 로그인을 한 번 사용합니다. BroCiToken과 ServicePrincipal은 전혀 사용하지 않습니다. 대체 사용자 흐름은 별도의 리소스 토큰이 요청되므로 여러 번의 대화형 로그인이 필요할 수 있습니다.
사전 동의된 자사 애플리케이션이 없기 때문에 대체 흐름은 전체 열거(PIM for Groups, Access Packages, Catalogs)를 수행할 수 없습니다. 따라서 현재는 대체 옵션으로만 남아 있습니다.
| 흐름 | 사용 조건 | 플랫폼 | 제한 사항 |
|---|---|---|---|
AuthCode | 레거시 호환성이 필요한 경우 | Windows | 부분 범위. 독립적인 PIM for Groups, Access Packages, Catalogs 보고서 없음. |
DeviceCode | 브라우저 기반 인증이 불가능한 경우 | Windows, Linux, macOS | 부분 범위. 독립적인 PIM for Groups, Access Packages, Catalogs 보고서 없음. 일부 Security Findings 검사는 축소된 깊이로 실행됩니다. |
ManualCode | 별도의 브라우저 세션을 통해 인증을 완료해야 하는 경우 | Windows, Linux, macOS | 부분 범위. 독립적인 PIM for Groups, Access Packages, Catalogs 보고서 없음. |
BroCi는 대체 자사 애플리케이션을 사용하며 대화형 로그인을 한 번만 요구합니다.
Azure Active Directory PowerShell 클라이언트에 할당이 필요하여 피해야 하는 경우에 유용합니다.```powershell
.\run_EntraFalcon.ps1
명시적 BroCi 선택:```powershell
.\run_EntraFalcon.ps1 -AuthFlow BroCi
.\run_EntraFalcon.ps1 -AuthFlow BroCiManualCode
1. 스크립트가 인증 URL을 클립보드에 복사합니다.
2. URL을 브라우저에 붙여넣습니다(SSO 지원을 위해 선택적으로 다른 기기에서 수행 가능).
3. 브라우저 개발자 도구를 열고 Network 탭에서 `Preserve log`를 활성화합니다.
4. 인증을 완료합니다.
5. 네트워크 로그에서 `code=1.`을 검색하고 코드가 포함된 요청 URL을 클립보드에 복사합니다.
6. Enter를 눌러 계속하면 스크립트가 클립보드에서 코드를 읽고 토큰 획득을 완료합니다.
#### 권장: 토큰을 사용한 BroCi
유효한 Azure Portal refresh token(client c44b4083-3bb0-49c1-b47d-974e53cbdf3c)이 이미 있는 경우, 이를 직접 사용할 수 있습니다.
예시: 브라우저에서 refresh token 얻기
1. 브라우저 개발자 도구를 열고 Network 탭에서 Preserve log를 활성화합니다.
2. https://entra.microsoft.com에서 인증합니다.
3. 네트워크 로그에서 `brk_client_id=c44b4083-3bb0-49c1-b47d-974e53cbdf3c`를 검색하고 응답에서 refresh token을 추출합니다.```powershell
.\run_EntraFalcon.ps1 -AuthFlow BroCiToken -BroCiToken "1.XXXXXXXXXXX"
OAuth2 클라이언트 자격 증명 부여를 사용하여 등록된 애플리케이션으로 인증합니다 — 사용자 상호 작용이 필요하지 않습니다.
반복적인 자동 실행에 유용합니다.
Application 유형의 Graph API 권한이 있는 사용자 지정 Entra 앱 등록이 필요합니다(아래 참조).
클라이언트 암호 사용:```powershell .\run_EntraFalcon.ps1 -AuthFlow ServicePrincipal -Tenant "mysecuretenant.ch" -SPClientId "" -SPClientSecret ""
**PFX 인증서 사용 시:**```powershell
.\run_EntraFalcon.ps1 -AuthFlow ServicePrincipal -Tenant "mysecuretenant.ch" -SPClientId "<AppId>" -SPCertificatePath "C:\certs\app.pfx"
암호로 보호된 PFX의 경우 -SPCertificatePassword (Read-Host -Prompt "Certificate password" -AsSecureString)를 추가합니다.
PEM 인증서 + 개인 키 사용(PowerShell 7+ 전용):```powershell .\run_EntraFalcon.ps1 -AuthFlow ServicePrincipal -Tenant "mysecuretenant.ch" -SPClientId "" -SPCertificatePemPath "C:\certs\cert.pem" -SPPrivateKeyPemPath "C:\certs\key.pem"
암호화된 개인 키의 경우 `-SPPrivateKeyPemPassword (Read-Host -Prompt "Private key password" -AsSecureString)`를 추가합니다.
##### 필수 앱 등록 권한
앱 등록에 다음 **Application** 권한(Delegated 아님)을 부여하고 관리자 동의를 수행합니다:
| 권한 | 유형 |
|---|---|
| `AdministrativeUnit.Read.All` | Application |
| `AgentIdentity.Read.All` | Application |
| `AgentIdentityBlueprint.Read.All` | Application |
| `AgentIdentityBlueprintPrincipal.Read.All` | Application |
| `Application.Read.All` | Application |
| `AuditLog.Read.All` | Application |
| `Device.Read.All` | Application |
| `EntitlementManagement.Read.All` | Application |
| `Group.Read.All` | Application |
| `Organization.Read.All` | Application |
| `Policy.Read.All` | Application |
| `PrivilegedAccess.Read.AzureADGroup` | Application |
| `RoleManagement.Read.Directory` | Application |
| `RoleManagementPolicy.Read.AzureADGroup` | Application |
| `User.Read.All` | Application |
| `DeviceManagementRBAC.Read.All` | Application |
또한 루트 관리 그룹(또는 모든 관련 구독)에 **Azure Reader** 역할을 할당하고, 선택적으로 Entra ID의 서비스 주체에 **Global Reader** 역할을 할당합니다(사용자별 MFA 상태에 필요).
#### 대체 방법: 인증 코드 흐름(Windows 전용)```powershell
.\run_EntraFalcon.ps1 -AuthFlow AuthCode
강화된 환경에서는 조건부 액세스에 의해 종종 제한됩니다.
DeviceCode를 사용하면 두 가지 보안 취약점 검사가 축소된 깊이로 실행됩니다(CAP-004 및 CAP-005).```powershell
.\run_EntraFalcon.ps1 -AuthFlow DeviceCode
#### 대체 방법: 인증 코드 + 수동 코드 흐름```powershell
.\run_EntraFalcon.ps1 -AuthFlow ManualCode