Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
OutOfTune — Entra ID 및 Intune MDM을 위한 악성 기기 등록 도구. 조건부 액세스를 우회하면서 정책, Wi-Fi 자격 증명, 스크립트, 앱을 추출하기 위해 디바이스 조인, 토큰 획득, MDM 등록, OMA-DM 체크인을 자동화합니다. | Kitploit
도구/GitHubGitHub/stra-x/outoftune
Authentication & AuthorizationPrivilege EscalationVulnerability AnalysisLateral MovementConfiguration AuditingInformation GatheringPost-ExploitationPenetration TestingCloud SecurityMobile SecurityIdentity & Access Management (IAM)
313276개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
Red Teaming
GitHubstra-x/outoftune

OutOfTune

Entra ID 및 Intune MDM을 위한 악성 기기 등록 도구. 조건부 액세스를 우회하면서 정책, Wi-Fi 자격 증명, 스크립트, 앱을 추출하기 위해 디바이스 조인, 토큰 획득, MDM 등록, OMA-DM 체크인을 자동화합니다.

저장소 보기

OutOfTune

원본 Pytune에서 영감을 받은 OutOfTune은 Entra ID에 가짜 장치를 등록하고, Intune MDM에 가입시킨 후 결과 규정 준수 상태를 확인합니다.

Windows 장치만 지원합니다(이것이 주요 목표였으며, 향후 추가 장치를 추가할 수 있음).

블로그 시리즈:

  • https://stra-x.github.io/Re-Engineering-Pytune-Rogue-devices-in-the-age-of-conditional-access/
  • https://stra-x.github.io/Re-Engineering-Pytune-Rogue-devices-in-the-age-of-conditional-access-pt-2/

요구 사항

pip install -r requirements.txt

작동 방식

체인은 단계별로 실행되며, 각 단계는 chain_state.json에 저장된 상태를 기반으로 합니다.

drs-token  ->  device-join  ->  device-token  ->  mdm-enroll  ->  mdm-checkin
  1. drs-token - DRS 액세스 토큰 획득 (ROPC 또는 사전 피싱)
  2. device-join - Entra ID에 새 장치 개체 등록, 장치 인증서 획득
  3. device-token - 장치 주체로 인증, Intune 등록 토큰 획득
  4. mdm-enroll - SOAP 검색 + WS-Trust 등록, MDM 클라이언트 인증서 획득
  5. mdm-checkin - OMA-DM SyncML 체크인, 정책 수집, 선택적으로 기본 사용자 설정

사용법

1. DRS 토큰 획득

ROPC (자격 증명 알려짐):

python OutOfTune.py drs-token -u [email protected] -p Password1!

사전 획득 토큰:

python OutOfTune.py drs-token -u [email protected] -t <drs_access_token>

2. Entra ID에 장치 가입

python OutOfTune.py device-join
python OutOfTune.py device-join -n CORP-LAPTOP-01

출력: <DEVICENAME>.pfx - 장치 인증서. 비밀번호는 password입니다.


3. 장치 주체 토큰 획득

python OutOfTune.py device-token
python OutOfTune.py device-token --cert CORP-LAPTOP-01.pfx

AAD에 장치 개체로 인증합니다 (사용자가 아님). 사용자 범위 CA 정책을 우회합니다.


4. Intune MDM에 등록

python OutOfTune.py mdm-enroll
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json

MDM 엔드포인트에 대해 SOAP 검색을 실행한 후 WS-Trust PKCS10 등록 요청을 제출합니다. 출력: <DEVICENAME>_mdm.pfx.

--profile을 사용하여 Intune으로 전송되는 장치 하드웨어/OS 속성을 스푸핑합니다. (장치 프로필 참조)


5. OMA-DM 체크인

python OutOfTune.py mdm-checkin
python OutOfTune.py mdm-checkin -r <refresh_token>
python OutOfTune.py mdm-checkin --cert CORP-LAPTOP-01_mdm.pfx
python OutOfTune.py mdm-checkin -O ./output
python OutOfTune.py mdm-checkin -O ./output --save-syncml ./output/raw

r.manage.microsoft.com에 대해 OMA-DM SyncML 루프를 실행합니다. Intune은 장치를 대상으로 하는 구성 프로필, 앱 할당 및 기타 모든 정책을 푸시합니다. 루프가 완료된 후 지능 정보가 자동으로 추출되어 표시됩니다.

-r이 제공되면 새로 고침 토큰이 manage.microsoft.com 액세스 토큰으로 교환되어 각 SyncML 요청에 Authorization: Bearer로 전송됩니다. Intune은 이 토큰에서 UPN을 읽어 장치의 기본 사용자로 설정하여 사용자 범위 규정 준수 정책이 바인딩되도록 합니다. 사용자가 할당되기 위해 새로 고침 토큰을 한 번만 실행하면 되며, 이후 모든 체크인은 새로 고침 토큰 없이 실행할 수 있습니다.

-r 없이 실행하면 장치에 기본 사용자가 할당되지 않습니다.

초기 체크인 후, 오랜 시간(보통 5-7일) 동안 다시 체크인하지 않으면 "Is Active"에 대한 기본 정책으로 인해 장치가 규정 준수에서 벗어날 수 있습니다. Intune 구성에 따라 장치는 규정 준수 위반으로 표시되기 전에 유예 기간에 들어갈 수 있습니다. 이러한 경우 mdm-checkin을 다시 실행하십시오. 이전에 새로 고침 토큰을 사용하여 기본 사용자를 할당한 경우, 기본 사용자가 이제 Intune 백엔드에 저장되어 있으므로 다시 제출할 필요가 없습니다.

플래그

플래그설명
--cert FILE사용할 MDM PFX — 파일 이름에서 장치 이름이 자동으로 파생됨
-r RT사용자 새로 고침 토큰 — 기본 사용자 설정 (한 번만 필요)
-O DIR추출된 아티팩트를 DIR에 저장 (wifi/, vpn/, scripts/, certs/, add_values.json, policy_values.json)
--save-syncml DIR각 라운드의 원시 SyncML XML을 DIR에 저장하여 오프라인 재파싱
-o FILE전체 콘솔 출력을 FILE에 기록

추출된 유용한 정보

카테고리저장 위치설명
Wi-Fi 프로필wifi/<SSID>.xml + _psk.txt존재하는 경우 일반 텍스트 PSK 추출
VPN 프로필vpn/<name>.xml전체 ProfileXML
인증서 페이로드certs/cert_N.b64암호화된 PFX Blob (원시, 아직 복호화되지 않음)
SCEP 챌린지표시됨CA 모델 이름, 챌린지 URL
스크립트scripts/<name>.ps1OMA-DM을 통해 푸시된 PowerShell 스크립트
MSI 다운로드 URL표시됨LOB 앱용 직접 CDN 링크
ODJ Blobodj_blob.b64 + odj_strings.txt오프라인 도메인 가입 — 읽을 수 있는 문자열 추출
추가 값add_values.json기타 모든 Add 명령 (루트 CA 인증서, MDE 온보딩, 정책 구성)
교체 값policy_values.jsonIntune에서 설정한 정책 CSP 값

저장된 SyncML 라운드 파싱

라이브 체크인을 실행하지 않고 --save-syncml로 저장된 원시 XML 라운드를 다시 파싱합니다.

python OutOfTune.py parse-checkin --dir ./output/raw -O ./output2
python OutOfTune.py parse-checkin --file ./output/raw/round_001.xml -O ./output2

규정 준수 상태 확인

python OutOfTune.py check -u [email protected] -r <refresh_token>
python OutOfTune.py check -u [email protected] -p Password1!

장치 인증서에서 PRT를 생성하고, 이를 IWService 토큰으로 교환한 후 IWService/Devices에서 장치의 규정 준수 상태 및 비준수 규칙을 쿼리합니다.

테넌트 CA가 등록 리소스에 대해 MFA를 요구하는 경우 MFA 세션 새로 고침 토큰과 함께 -r을 사용하십시오.


앱 및 스크립트 다운로드

IME SideCarGateway를 통해 장치에 할당된 Win32 앱 및 PowerShell 스크립트를 가져옵니다. MDM 클라이언트 인증서만 필요하며 사용자 토큰은 필요하지 않습니다.

python OutOfTune.py download-apps
python OutOfTune.py download-apps --cert CORP-LAPTOP-01_mdm.pfx
  • PowerShell 스크립트는 scripts/<PolicyId>.ps1에 저장됩니다.
  • Win32 앱은 CDN에서 다운로드되어 복호화된 후 apps/<AppName>/에 추출됩니다.

수정 스크립트 다운로드

장치에 할당된 사전 예방 수정 스크립트 (감지 + 수정 쌍)를 가져옵니다.

python OutOfTune.py get-remediations
python OutOfTune.py get-remediations --cert CORP-LAPTOP-01_mdm.pfx

각 정책은 remediations/<PolicyId>/에 저장되며 다음을 포함합니다:

  • detection.ps1 — 감지 스크립트
  • remediation.ps1 — 수정 스크립트
  • params.json — 정책 ID 및 스크립트 매개변수

정리

Intune에서 장치 제거가 실패하면 Entra에서 삭제하십시오. 그러면 Intune 내에서 유예 기간에 들어가고 나중에 자동으로 다시 정리됩니다.

Intune에서 장치 제거:

python OutOfTune.py retire-intune -u [email protected] -r <refresh_token>

Entra ID에서 장치 개체 제거:

python OutOfTune.py entra-delete

체인 진행 상태 확인

python OutOfTune.py status

장치 프로필

등록 및 체크인 중 Intune으로 전송되는 장치 속성은 JSON 프로필을 통해 완전히 스푸핑 가능합니다. 여기에는 하드웨어 식별자, OS 버전, 제조업체 및 모든 자체 보고된 규정 준수 CSP 값(BitLocker, 방화벽, Defender, TPM, Secure Boot)이 포함됩니다.

python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
python OutOfTune.py mdm-checkin   # 프로필은 상태에 저장되어 자동으로 재사용됨

포함된 프로필

파일장치
profiles/default.json기본값 (VMware / Win10 Enterprise)
profiles/dell_win11_ent.jsonDell Latitude 5540 / Windows 11 Enterprise 23H2

프로필 필드

필드CSP설명
os_versionDevDetail/SwV최소/최대 OS 버전 규정 준수 확인
os_edition_syncmlWindowsLicensing/Edition4 = Enterprise, 48 = Pro
manufacturerDevInfo/Man일부 정책은 제조업체를 허용 목록에 추가
mac_addressSOAP AdditionalContext/MAC모두 0이면 명백한 지표
hw_dev_id_enrollSOAP AdditionalContext/HWDevID64자 16진수
bitlocker_statusBitLocker/Status/DeviceEncryptionStatus2 = 암호화됨 (자체 보고)
encryption_complianceDeviceStatus/Compliance/EncryptionCompliance1 = 규정 준수 (자체 보고)
firewall_statusDeviceStatus/Firewall/Status0 = 켜짐 (자체 보고)
secure_boot_stateDeviceStatus/SecureBootState1 = 활성화됨 (자체 보고, HAS 증명 아님)
tpm_versionDeviceStatus/TPM/SpecificationVersion암호학적 증명 없음
defender_enabledDefender/Health/DefenderEnabledtrue = 실행 중
defender_versionDefender/Health/DefenderVersion일부 정책은 최소 버전을 강제

모든 DeviceStatus CSP 값은 자체 보고되며 독립적인 검증 없이 Intune에 의해 신뢰됩니다. HAS 증명 규정 준수 검사(BitLockerEnabled, HealthAttestation CSP를 통한 SecureBootEnabled)는 실제 TPM이 필요하며 이 방법으로 스푸핑할 수 없습니다.


전역 플래그

--debug          상세 HTTP + 토큰 로깅
--proxy <url>    프록시를 통해 트래픽 라우팅 (예: http://127.0.0.1:8080)

이 플래그들은 명령 앞에 옵니다:

python OutOfTune.py --debug device-token
python OutOfTune.py --proxy http://127.0.0.1:8080 mdm-checkin

인증서 재정의

이전 실행에서 인증서가 있거나 특정 PFX 파일을 사용하려는 경우:

python OutOfTune.py device-token      --cert path/to/device.pfx
python OutOfTune.py mdm-enroll        --cert path/to/device.pfx
python OutOfTune.py mdm-checkin       --cert path/to/mdm.pfx
python OutOfTune.py check             --cert path/to/device.pfx
python OutOfTune.py download-apps     --cert path/to/mdm.pfx
python OutOfTune.py get-remediations  --cert path/to/mdm.pfx

상태 파일

모든 단계 출력은 작업 디렉터리의 chain_state.json에 저장됩니다. 처음부터 다시 시작하려면 삭제하십시오. status를 사용하여 아무것도 실행하지 않고 현재 상태를 검사할 수 있습니다. 여러 장치를 다루는 경우 각 장치가 고유한 상태 파일을 가지도록 하십시오. 기본 상태 파일은 스크립트 시작 부분에서 조작 중인 장치로 변경할 수 있습니다. 인증서 재정의 옵션은 주로 디버깅 목적이므로 주의해서 사용하십시오.

크레딧

도구 다운로드