
Azure RedOps는 Microsoft Entra ID의 보안 태세를 평가하기 위한 공격적 보안 도구 키트입니다.
Azure/Entra ID 레드 팀을 위한 스위스 군용 칼
저자: Mr.Un1k0d3r (TrueCyber Inc) 버전: 0.1 언어: Python 3.12+
AzureRedOps는 Microsoft Entra ID 및 Azure 테넌트의 보안 상태를 평가하기 위한 공격적 보안 툴킷입니다.
가장 일반적인 레드 팀 워크플로(인증, 토큰 관리, 디렉터리 열거, 권한 확인, 비밀번호 스프레이, Microsoft Graph에 대한 사후 침투 작업)를 일관된 --activity 기반 CLI 아래에 통합합니다.
모든 작업은 -a/--activity로 선택합니다. 인증 과정에서 획득한 토큰은 로컬(.azure_creds)에 캐시하고 -l/--load-access-token으로 이름별로 재사용할 수 있으므로 원시 JWT를 붙여넣을 필요가 거의 없습니다.
도구에 대한 자세한 내용은 CYPFER 블로그에서 확인하세요.
.azure_creds)에서 액세스/갱신 토큰을 저장, 나열, 디코드/보기, 삭제합니다. 모든 흐름은 -s/--save + -n/--name을 사용하여 토큰을 자동으로 영구 저장할 수 있습니다.auth) — 직접 사용자 이름/비밀번호 인증.phish-start / phish-capture) — OAuth 장치 인증 부여를 악용하여 대상이 microsoft.com/devicelogin에 사용자 코드를 입력하면 발급되는 토큰을 캡처합니다. 기본적으로 자동 캡처.auth-app) — 사용자 정의 애플리케이션 등록에 대한 전체 인증 코드 + PKCE 흐름으로, 리디렉션을 수신하는 내장 로컬 HTTPS 리스너가 제공됩니다.auth-interactive) — 실제 브라우저(Playwright; 기본 Firefox, -br로 전환)를 구동하여 (MFA/조건부 액세스/SSO 처리) 기록된 세션 HAR에서 모든 토큰을 수집합니다.refresh) — 갱신 토큰을 새로운 액세스 토큰으로 교환합니다.obo) — 이미 발급된 액세스 토큰을 다운스트림 리소스에 대한 새 토큰으로 교환합니다(OAuth 2.0 jwt-bearer / OBO).browser-sso) — 대상 웹 앱(Outlook 웹, Teams, SharePoint, Azure 포털 등)에 이미 사용자로 인증된 실제 브라우저를 엽니다. -aprt/--auto-prt를 사용하면 갱신 토큰에서 기본 갱신 토큰(PRT) 쿠키를 자동으로 생성하므로(장치 등록 → PRT → x-ms-RefreshTokenCredential), 새로운 브라우저가 수동 로그인 없이 Single Sign-On을 완료합니다.gather-all.spray) 및 교차 앱 갱신 토큰 스프레이 (spray-refresh).magic-app은 AllPrincipals 동의가 있는 공개 리디렉션 가능 앱을 찾습니다. 알려진/흥미로운 Microsoft 앱 ID의 내장 목록이 포함되어 있습니다.requirements.txt 참조):
PyJWTrequestsplaywrightcryptography (browser-sso -aprt, 자동 PRT 흐름에만 필요)auth-interactive, browser-sso)을 위한 Playwright 브라우저 런타임. Firefox가 기본 엔진(-br/--browser); 설치하려면 python -m playwright install firefox 실행.includes/web/cert.pem 및 includes/web/key.pem의 TLS 인증서 + 키 (auth-app PKCE 흐름에만 필요 — 참고 참조).git clone AzureRedOps cd AzureRedOps
python3 -m venv AzureRedOps source AzureRedOps/bin/activate # Linux / macOS
pip install -r requirements.txt
python -m playwright install firefox
도구 실행:```bash
python3 AzureRedOps.py -a <activity> [options]
일반적인 호출 패턴은 다음과 같습니다:```bash python3 AzureRedOps.py -a [authentication] [activity options] [global options]
### 토큰 제공
Microsoft Graph를 호출하는 활동에는 액세스 토큰이 필요합니다. 두 가지 방법으로 제공할 수 있습니다:
| 방법 | 플래그 | 예시 |
|--------|------|---------|
| 원시 토큰 전달 | `-ac, --access-token` | `-ac eyJ0eXAi...` |
| 캐시된 토큰을 이름으로 로드 | `-l, --load-access-token` | `-l mytoken` |
`-l`을 사용하면 일치하는 `access_token`(및 해당되는 경우 `refresh_token`과 `tenant`)이 `.azure_creds` 저장소에서 읽힙니다.
### 파일에 토큰 저장 (`-s` / `-n`)
토큰을 획득하는 모든 활동(`auth`, `auth-app`, `auth-interactive`, `phish-start`/`phish-capture`, `refresh`)은 `-s/--save`와 `-n/--name`을 함께 추가하여 로컬 자격 증명 저장소(`.azure_creds`)에 **자동으로 저장**할 수 있습니다:```bash
# Authenticate and save the resulting tokens under the name "victim1"
python3 AzureRedOps.py -a auth -u [email protected] -p 'P@ssw0rd!' -tid <tenant-guid> -s -n victim1
-s/--save는 자동 저장을 켭니다; -n/--name이 필요합니다 — -n이 없으면 도구가 오류와 함께 종료됩니다.-n/--name은 토큰이 저장되는 키입니다. 이후에 원시 JWT를 붙여넣는 대신 -l victim1로 재사용하거나, -a view -n victim1으로 확인하거나, -a delete -n victim1으로 삭제할 수 있습니다.auth-interactive 활동은 항상 자동 저장되며, -n이 제공되지 않으면 대화식으로 이름을 입력하라는 메시지가 표시됩니다.-j)대부분의 열거 활동(list-users, list-applications, list-principals,
gather-all, raw-url)은 -j/--json <filename>을 허용하여 원시 API 응답을 출력하는 대신(또는 추가로) JSON 파일에 기록합니다.```bash
python3 AzureRedOps.py -a list-users -l victim1 -j users.json
`gather-all`의 경우 제공된 파일명이 접미사로 사용되며 Graph 엔드포인트 당 하나의 파일이 기록됩니다(예: `users-<name>`, `groups-<name>`, ...).
> 팁: `-j`는 구조화된 JSON 내보내기를 제어하고, `-re/--redirect-to-file`은 형식화된 콘솔 출력을 `output.txt`로 미러링합니다. 두 기능은 서로 독립적입니다.
### 테넌트 식별자
- `-t, --tenant`는 **도메인 이름**(예: `contoso.com`)을 기대하며 `id` 활동에 사용됩니다.
- `-tid, --tenant-id`는 **테넌트 GUID** 또는 `common`을 기대하며 인증 활동에 사용됩니다.
---
## 명령줄 옵션