04 - Tokens, OAuth e Sessões
video: https://youtu.be/... no frontmatter da nota.Tokens, OAuth e Sessões
Nota 04 do capítulo 26, que aprofunda o plano de controle das notas anteriores: a arquitetura de tokens e OAuth que as identidades usam todos os dias.
O foco é como os mecanismos funcionam, como são abusados e como caçar padrões anômalos de token e de consentimento.
Dialoga com as notas 02 e 03 deste capítulo, com a nota 15 do capítulo 08 (phishing AiTM) e com o capítulo 03 (TTPs).
1. Contexto e Posicionamento na Biblioteca
A sessão moderna não é uma senha repetida a cada acesso, mas um conjunto de tokens com ciclos de vida próprios: o access token que autoriza cada chamada, o refresh token que renova o acesso em silêncio, o cookie de sessão que segura a continuidade no navegador e as permissões OAuth que definem o que cada aplicativo pode fazer. O atacante moderno não quebra criptografia, rouba artefatos válidos e os usa dentro do prazo, e por isso a caça precisa entender a arquitetura para reconhecer o abuso. Esta nota fecha o capítulo 26 cobrindo a arquitetura, os fluxos OAuth, os abusos conhecidos, os padrões de caça e os controles de proteção.
A nota pressupõe o hunting de identidade da nota 02 e o ambiente híbrido da nota 03, e se conecta ao phishing AiTM da nota 15 do capítulo 08, que é o vetor de captura mais comum de tokens. O exemplo final executa uma caça de consent abuse ponta a ponta, do sinal na auditoria à resposta e ao produto de inteligência.
2. Arquitetura de Tokens e Sessões
O modelo de identidade moderna emite artefatos com papéis distintos, e o confundimento entre eles é a primeira barreira do analista. O access token é a credencial de curta duração apresentada a cada chamada de API; o refresh token é a credencial de longa duração que obtém novos access tokens sem reautenticação; o ID token carrega a afirmação de identidade para a aplicação; e o cookie de sessão mantém o navegador do usuário contínuo num portal. A tabela abaixo organiza os artefatos com o portador, a duração típica e o risco dominante de cada um.
| Artefato | Portador típico | Duração típica | Risco dominante |
|---|---|---|---|
| Access token | Aplicação em nome do usuário | Minutos a uma hora | Uso imediato após captura, com escopo herdado |
| Refresh token | Aplicação e plataforma | Dias a meses | Persistência silenciosa, renova o acesso sem MFA |
| ID token | Aplicação que autentica | Minutos | Forjado apenas com chave de assinatura; raramente alvo |
| Cookie de sessão | Navegador do usuário | Sessão a dias | Captura por AiTM e replay em outro navegador |
| Chave e segredo de aplicativo | Aplicação em nome próprio | Anos | Vazamento em repositório dá acesso direto e silencioso |
O formato JWT merece leitura técnica mínima: três segmentos codificados, cabeçalho com o algoritmo, payload com as declarações, incluindo identidade, emissor, audiência e validade, e assinatura que o receptor valida. O payload é legível por qualquer um, e o analista pode decodificar um token capturado em laboratório para confirmar escopos e validade, o que orienta a janela de resposta: o access token expira rápido, mas o refresh token sobrevive e é ele que precisa ser revogado.
O ciclo de vida operacional importa tanto quanto a taxonomia: tokens são emitidos, renovados e revogados individualmente ou por cadeia, e o mecanismo de detecção de reuso do provedor destrói a família de refresh tokens quando um token já rotacionado reaparece. Esse mecanismo é, na prática, um sensor de roubo instalado no provedor: o reuso detectado indica que o atacante carregava um artefato antigo, e o evento correspondente entra na caça como confirmação de captura, mesmo sem qualquer anomalia geográfica adicional. A leitura desses eventos de invalidação é fonte de caça subaproveitada na maioria dos programas. A sessão resultante é o que o atacante deseja, e é o objeto central das caçadas das seções seguintes.
3. OAuth 2.0: Fluxos, Scopes e Consentimento
O OAuth 2.0 é o protocolo de autorização que governa como uma aplicação ganha acesso em nome de um usuário, e o consentimento é o momento em que o usuário, ou o administrador, aprova os escopos solicitados. O modelo é sadio quando o escopo é mínimo e o consentimento é informado, e é exatamente essa premissa que o abuso ataca: a tela de consentimento aprova escopos que o usuário não sabe ler, em nome de um aplicativo que não sabe que instalou. A tabela abaixo resume os fluxos com o uso legítimo e o risco principal de cada um.
| Fluxo | Uso legítimo | Risco principal |
|---|---|---|
| Authorization Code com PKCE | Aplicações web e móveis de usuário | Interceptação e consentimento induzido por isca |
| Client Credentials | Integração serviço a serviço | Segredo vazado dá acesso direto, sem usuário e sem MFA |
| Device Code | Dispositivos sem teclado, como TVs e consoles | Phishing de device code induz o usuário a aprovar a sessão do atacante |
| Resource Owner Password | Legado, em desuso | Exposição direta de credencial à aplicação |
A leitura tática da tabela concentra-se em dois pontos. O primeiro é o device code, que virou vetor de campanha real: o atacante gera um pedido de device code, convence a vítima, por telefone ou mensagem, a abrir a página legítima e digitar o código, e a aprovação concede a sessão do atacante, técnica documentada em grupos como o Storm-2372. O segundo é o consentimento administrativo: quando um aplicativo pede escopos altos e um administrador aprova, o acesso persiste por meses sem qualquer usuário visível, e por isso o evento de consentimento é um dos sinais de caça mais valiosos de todo o plano de identidade.
Escopos e papéis não são sinônimos, e a distinção importa na caça: o escopo OAuth define o que a aplicação pode fazer com os recursos do usuário, enquanto o papel administrativo define o que a identidade pode fazer na plataforma. Um aplicativo com escopo Mail.ReadWrite não administra nada, mas lê e escreve todas as mensagens do usuário, e é essa diferença que orienta a gravidade do consentimento abusivo. A revisão de permissões cobre os dois planos, porque o atacante busca o plano de menor fricção disponível naquele momento.
4. Abusos Conhecidos
O catálogo de abuso de tokens e sessões é estável e bem documentado nos relatórios de ameaças, e a tabela abaixo organiza os cinco padrões que concentram a maioria dos incidentes modernos, com a mecânica e as referências de atores publicamente registradas.
| Abuso | Mecânica | Referências e casos |
|---|---|---|
| AiTM de sessão | Proxy reverso captura cookie e token após MFA legítimo | Evilginx e EvilProxy, distribuição por Storm-0324 |
| Device code phishing | Vítima aprova o device code gerado pelo atacante | Storm-2372 em campanhas de 2024 e 2025 |
| Consent phishing | Aplicativo malicioso com escopos altos aprovado pelo usuário | Campanhas recorrentes de aplicativos OAuth ilegítimos |
| Replay de token | Artefato capturado usado em contexto geográfico incompatível | Grupos de acesso inicial em operações de extorsão |
| App com permissão excessiva | Aplicativo legítimo com escopos além da função | Governança falha de aplicativos corporativos |
A mecânica do AiTM merece o detalhe que conecta com a nota 15 do capítulo 08: o MFA acontece de verdade, o segundo fator é concluído pela vítima no portal real, e o proxy guarda o resultado, por isso a defesa por MFA tradicional falha e a resposta precisa revogar sessão, não apenas senha. O replay é o sinal de caça mais limpo do catálogo, porque o token capturado é usado onde o original nunca estaria, e o próprio provedor sinaliza a detecção de reuso quando o refresh token invalidado reaparece, evento que indica família de tokens roubada e destruída pelo mecanismo de revogação em cadeia.
5. Hunting por Padrões de Token
A caça por padrão de token usa os campos de sessão e de identificador dos logs de sign-in, em especial o UniqueTokenIdentifier e o SessionId, e compara o uso observado com o baseline de dispositivo, geografia e aplicação. O padrão mais produtivo é o uso impossível: o mesmo token ou a mesma sessão empregados em dois contextos geográficos dentro da janela de validade, que é fisicamente implausível mesmo com viagem real.
// Uso impossível: mesmo identificador de token em ASNs distintos em 24 horas
union SigninLogs, AADNonInteractiveUserSignInLogs
| where ResultType == 0
| summarize paises = dcount(Country), asns = dcount(ASN), usos = count(),
primeiro = min(TimeGenerated), ultimo = max(TimeGenerated)
by UserPrincipalName, UniqueTokenIdentifier
| where asns >= 2 and datetime_diff('minute', ultimo, primeiro) < 1440
| order by asns desc
// Refresh anômalo: renovação fora do padrão de aplicação e de horário da organização
AADNonInteractiveUserSignInLogs
| where ResultType == 0 and SignInEventTypes has "RefreshToken"
| where AppDisplayName !in ("Microsoft Authentication Broker", "Windows Sign In")
| summarize renovacoes = count(), apps = dcount(AppDisplayName),
paises = dcount(Country) by UserPrincipalName, bin(TimeGenerated, 1h)
| where paises >= 2 or renovacoes > 15
| order by renovacoes desc
O device code phishing tem assinatura própria nos logs: o evento de autenticação aparece com o protocolo de fluxo de dispositivo e, com frequência, com uma combinação de rede do navegador da vítima e de local do ataque que não se repete no histórico do usuário. A consulta abaixo isola o fluxo na telemetria, e cada resultado merece revisão junto à linha do tempo de contato da vítima, porque a aprovação costuma ser precedida de telefonema ou de mensagem com o código.
// Fluxo de device code: autenticações com protocolo de dispositivo
SigninLogs
| where AuthenticationProtocol == "deviceCode"
| project TimeGenerated, UserPrincipalName, AppDisplayName, IPAddress,
Country, UserAgent
| order by TimeGenerated desc
O enriquecimento determina o veredito: o ASN de saída pertence a provedor de hosting ou de VPN residencial, o dispositivo associado existe no inventário e o aplicativo envolvido tem justificativa de negócio. Sem esse enriquecimento, o padrão de token afoga em falso positivo de cache e de balanceamento, e com ele o sinal vira detecção de altíssima precisão, candidata natural à ponte caça para deteção do capítulo 18.
6. Controles: Proteção de Token, CAE e Governança de Consentimento
Os controles modernos atacam a mecânica do roubo em três frentes. A proteção de token vincula o artefato ao dispositivo, tornando inútil o token roubado em outra máquina, e é o antídoto direto ao replay. A avaliação contínua de acesso, o CAE, reavalia a sessão em tempo quase real contra eventos críticos, como desabilitação de conta e mudança de risco, reduzindo a janela de uso de um token comprometido de horas para minutos. O MFA de phishing resistente, com FIDO2 ou equivalente baseado em dispositivo, elimina a captura do segundo fator que sustenta o AiTM.
A governança de consentimento completa o conjunto no plano OAuth. O fluxo administrativo exige que escopos altos sejam aprovados por administrador e não pelo usuário final, o inventário de aplicativos com revisão periódica de permissões corta o acúmulo de escopos injustificados, e a política de bloqueio de editores não verificados reduz a superfície de consent phishing. A revogação fecha o ciclo de resposta: revogar sessões e refresh tokens, remover concessões do aplicativo abusado e rotacionar segredos, na ordem, porque revogar apenas a senha deixa o token vivo.
A governança de sessão completa o conjunto com decisões que a plataforma expõe e os programas raramente usam: frequência de reautenticação ajustada ao risco da aplicação, revogação de sessões como primeiro passo de qualquer resposta e inventário de sessões ativas em contas privilegiadas. O inventário de sessões vivas é o espelho do inventário de aplicativos, e os dois alimentam a mesma revisão trimestral. A métrica que governa o conjunto é simples: quanto tempo um artefato roubado continuaria válido depois do alerta.
7. Exemplo de Caça: Consent Abuse
A hipótese do caso: aplicativos OAuth com escopos de leitura e escrita de caixa postal são aprovados por administrador fora do processo formal de homologação, e o evento de consentimento está na auditoria do Entra ID com todos os campos necessários para a caça. A consulta abaixo lista os consentimentos de escopos altos com o administrador que aprovou e a aplicação beneficiada.
AuditLogs
| where OperationName in ("Consent to application", "Add delegated permission grant")
| extend Admin = tostring(parse_json(tostring(InitiatedBy.user)).userPrincipalName)
| extend App = tostring(TargetResources[0].displayName)
| extend Escopos = tostring(TargetResources[0].modifiedProperties)
| where Escopos has_any ("Mail.ReadWrite", "Mail.Send", "Files.ReadWrite.All",
"User.ReadWrite.All", "RoleManagement.ReadWrite.Directory")
| project TimeGenerated, Admin, App, Escopos
| order by TimeGenerated desc
A saída fictícia do exercício trouxe o caso típico: às 21h47 de uma sexta-feira, o aplicativo "RelatorioFinanceiro-Br" recebeu os escopos Mail.ReadWrite e Mail.Send de um administrador cuja própria sessão, conferida nos logs de sign-in, havia sido estabelecida 40 minutos antes de um ASN de hosting em outro país, com MFA concluído por push aprovado na décima primeira tentativa, o MFA fatigue da nota 02. A sequência fechou a cadeia: roubo de sessão, uso da sessão para consentir aplicativo, persistência via concessão OAuth.
A resposta seguiu a ordem da seção 6: revogação das sessões e dos refresh tokens do administrador, remoção das concessões do aplicativo, bloqueio do aplicativo e revisão das mensagens acessadas no período, com o log de auditoria da caixa confirmando exportação de anexos em dois dias de janela. O produto da caça foi triplo: a detecção permanente de consentimento com escopos altos por sessão de risco, a revisão dos aplicativos já aprovados por aquele administrador e a atualização do perfil de ameaça no TIP com a cadeia AiTM para consentimento, que agora entra como hipótese prioritária no ciclo da nota 02.
O protocolo de resposta a consent abusivo abaixo cobre as etapas que encerram a persistência, e a ordem importa porque o aplicativo continua operando até que a concessão seja removida.
1. Bloquear o aplicativo na plataforma, impedindo novas emissões de token.
2. Remover as concessões e permissões concedidas ao aplicativo.
3. Revogar sessões e refresh tokens do administrador que aprovou.
4. Revalidar os fatores de segurança do administrador e revisar os consentimentos dele.
5. Revisar o acesso do aplicativo ao conteúdo no período de concessão.
6. Registrar a cadeia no TIP e atualizar a deteção permanente.
8. Erros Comuns e Pontos de Atenção
O erro mais comum é tratar token como detalhe técnico do login e ignorar o ciclo de vida, revogando senha enquanto o refresh token continua renovando acesso ao atacante. O erro mais grave é confundir consentimento com instalação inofensiva, deixando aplicativos com escopos altos ativos por meses sem revisão. Ambos se corrigem com a mesma mudança de moldura: o artefato de sessão é a credencial real, e o consentimento é uma concessão de acesso administrada.
Completam a lista os itens abaixo.
- Revogar apenas a senha no resposta a AiTM, deixando cookie e refresh token operáveis para o atacante.
- Ignorar o dispositivo no enriquecimento, transformando o padrão de token em fábrica de falsos positivos de cache.
- Tratar o device code como fluxo exótico sem risco, quando é vetor de campanha ativa com engenharia social por telefone.
- Não inventariar aplicativos com escopos altos, permitindo que concessões antigas sobrevivam a equipes inteiras.
- Caçar apenas contas humanas, ficando cego para segredos de aplicativo vazados que operam sem usuário.
-
Deixar o CAE desativado por receio de impacto, mantendo a janela de uso do token roubado em horas.
-
Conferir apenas o access token na resposta, ignorando a família de refresh tokens que renova o acesso do atacante.
- Aprovar consentimentos de emergência sem registro, criando concessões sem dono que nenhuma revisão encontra.
9. Integração com o Restante da Biblioteca
A nota fecha o circuito de identidade do capítulo 26: a nota 02 fornece os sinais e a rotina de caça, a nota 03 cobre as pontes híbridas e esta nota detalha os artefatos que circulam nas pontes, com os controles de proteção que reduzem a superfície. A nota 15 do capítulo 08 conecta com o vetor de captura, e o capítulo 18 recebe as detecções derivadas dos padrões de token e de consentimento. Na frente de inteligência, as cadeias de abuso documentadas aqui alimentam o documento de campanha da nota 09 do capítulo 25 e os PIRs cloud da nota 01, e o framework CTH ancora o conjunto nos controles de preparação de caça e de resposta. A síntese do capítulo é a que abre a próxima etapa de estudo: em ambientes modernos, o perímetro é a sessão, e defendê-lo exige entender o que a sessão carrega.