critica analisis Chile

El phishing que no te pide la contraseña, y por eso el MFA no lo detiene

La ANCI detectó una campaña masiva a nivel nacional que abusa del flujo Device Code de Microsoft Entra ID. La víctima escribe un código en una página auténtica de Microsoft, completa su segundo factor, y entrega una sesión al atacante sin que nadie robe nada.

·16 min de lectura ·Equipo Vantis
En 30 segundos
  • La ANCI detectó una campaña masiva a nivel nacional que abusa del flujo OAuth 2.0 Device Authorization Grant en Microsoft Entra ID y Microsoft 365 (AIA26-00268, TLP:CLEAR).
  • Puede ser efectiva incluso con MFA activo, porque la víctima completa la autenticación en infraestructura auténtica de Microsoft. No hay página falsa que detectar ni dominio que bloquear.
  • La Agencia es explícita: hay que tratarlo como compromiso de identidad y de sesión, no como phishing tradicional. Cambiar la contraseña no basta si quedan tokens válidos, reglas de correo o dispositivos registrados.

Qué pasó

El 19 de junio de 2026 la ANCI publicó AIA26-00268, una investigación de amenazas —no una alerta de rutina— sobre el abuso del flujo Device Code en entornos Microsoft Entra ID y Microsoft 365. La Agencia la describe como una campaña masiva a nivel nacional.

El Device Code Flow es un mecanismo legítimo de OAuth, diseñado para dispositivos que no tienen teclado ni navegador: televisores, impresoras, consolas, dispositivos IoT, herramientas de línea de comandos. En su uso normal, el dispositivo pide un código, tú lo escribes en una URL oficial de Microsoft, te autenticas, y el dispositivo recibe sus tokens.

El abuso consiste simplemente en que quien inicia el flujo es el atacante, no un dispositivo tuyo. Él pide el código a Microsoft y te lo hace llegar con un señuelo: un documento compartido, una reunión, un mensaje de voz, una validación de seguridad, una solicitud interna. Puede llegar por correo, por Teams, por WhatsApp o por Signal.

Tú escribes el código en microsoft.com, que es una página auténtica. Completas tu segundo factor, que también es auténtico. Y en ese momento autorizas la sesión que abrió el atacante. Él recibe tokens válidos para Exchange Online, Outlook, SharePoint, OneDrive, Teams y Microsoft Graph.

Nadie robó una contraseña. Nadie falsificó una página. Todo el flujo ocurrió en infraestructura de Microsoft, y por eso los controles orientados a detectar sitios de phishing no marcan nada.

QUIEN ACTUA QUE OCURRE Atacante 2 Victima 2 Microsoft 2 Pide el codigo a Microsoft Recibe los tokens Escribe el codigo en microsoft.com Completa su MFA
Quién hace qué en el abuso del flujo Cada paso ocurre en infraestructura legítima de Microsoft. No hay página falsa que bloquear ni dominio que denunciar: por eso los controles tradicionales de phishing no lo ven. Fuente: Elaboración propia sobre AIA26-00268

Por qué importa acá

Microsoft 365 y Entra ID son la columna vertebral de identidad de buena parte de las empresas medianas y grandes de Chile, incluidos sectores regulados como banca, salud y servicios públicos. Comprometer esa identidad no es comprometer un correo: es obtener la llave de la organización.

Y hay un dato que dimensiona el problema mejor que cualquier argumento: entre marzo y agosto de 2026, la ANCI publicó 24 alertas de campañas suplantando a Microsoft, Outlook, SharePoint o Microsoft 365 dirigidas a público chileno. Ninguna otra marca se acerca. Microsoft es, con diferencia, el señuelo más usado contra Chile.

Bajo la Ley 21.663, las instituciones definidas como operadores de importancia vital deben tener capacidad de detección y reporte de accesos no autorizados dentro de plazos acotados, lo que exige monitoreo activo de los registros de autenticación en la nube. Y si el token comprometido da acceso a datos personales, entran las obligaciones de la Ley 21.719, incluida la eventual notificación a los titulares afectados.

El problema práctico es el tiempo: como no hay indicadores de compromiso tradicionales, muchas organizaciones descubren este tipo de incidente semanas después del acceso inicial.

Análisis propio de Vantis

Hay dos cruces que conviene hacer, y ninguno aparece si se lee la alerta de forma aislada.

El primero es de volumen. Veinticuatro campañas suplantando a Microsoft en seis meses, más una investigación nacional sobre abuso de su flujo de identidad. Eso no es una marca entre otras: es el terreno donde se está peleando el acceso corporativo en Chile. Si tu organización usa Microsoft 365 y tu programa de concientización sigue centrado en «no hagas clic en enlaces raros», estás entrenando para la guerra anterior. Acá el enlace es legítimo.

El segundo está en los indicadores. De los tres dominios que publicó la ANCI, uno es sayze.cl. Un dominio chileno.

Es el mismo patrón que documentamos en la campaña contra CorreosChile, donde el alojamiento era bioredox.cl/wp-content/. Evaluamos con confianza media —el indicio es el TLD y el modo de uso, y no verificamos el estado del sitio— que se trata de otro sitio chileno comprometido, usado como infraestructura intermedia.

Si esa lectura es correcta, el circuito se cierra de una forma incómoda: los sitios .cl desactualizados no solo alojan phishing bancario. También sostienen las páginas intermedias que le entregan el código de dispositivo a un empleado chileno para robarle la sesión corporativa. El WordPress sin parchar de una pyme termina siendo parte de la cadena que compromete a una empresa grande.

24 campañas contra Microsoft entre marzo y agosto de 2026 — Ninguna otra marca se acerca en el conjunto de alertas de la ANCI
Respaldan: AIA26-00268
sayze.cl — Dominio chileno entre los tres indicadores; mismo patrón que bioredox.cl
Respaldan: AIA26-00268
autenticación completada en infraestructura legítima — Por eso evade tanto el filtrado de URL como el MFA tradicional
Respaldan: AIA26-00268
Hacia dónde va

El ataque a la identidad va a seguir desplazando al ataque al endpoint, por una razón económica simple: un token de sesión rinde más que un equipo comprometido y no deja los rastros que un antivirus sabe buscar.

La consecuencia para tu estrategia de detección es concreta. Si tu inversión está concentrada en EDR y filtrado de correo, esta técnica te pasa por al lado: toda la actividad ocurre a nivel de identidad y de nube, no en el equipo. Los registros que importan son los de Entra ID y los de Graph, y la pregunta que hay que poder responder es si alguien los está mirando.

Microsoft 5 mar Outlook 22 abr Device Code 19 jun SharePoint 19 ago Outlook 27 ago Suplantacion de marca Investigacion ANCI
Microsoft, la marca más suplantada en Chile Muestra de las campañas que la ANCI publicó suplantando a Microsoft, Outlook y SharePoint. En total fueron 24 entre marzo y agosto de 2026. Fuente: ANCI / CSIRT Nacional

Anatomía del ataque

Mapeo a marcos públicos, para que puedas cruzarlo con tu propia matriz de cobertura.

Qué hacer, fase por fase

Estructurado sobre las seis funciones del NIST CSF 2.0, según el ciclo de respuesta a incidentes de NIST SP 800-61r3 (abril 2025, reemplaza al r2). Proteger y Detectar vienen abiertas.

GV GobernarQuien decide, que se reporta y a quien

La decisión de fondo es simple de enunciar y suele quedar sin dueño: ¿tu organización necesita el Device Code Flow? La ANCI recomienda revisar si existe una necesidad operacional real y documentada, y si no la hay, bloquearlo.

Alguien tiene que ser dueño de la configuración de Entra ID. En muchas organizaciones chilenas ese rol quedó con el proveedor que hizo la migración a Microsoft 365 hace cuatro años, y nadie lo revisó desde entonces.

  • Determinar y documentar si existe un caso de uso real para Device Code Flow en el tenant.
  • Asignar un responsable interno de la configuración de identidad, no solo del soporte.
  • Definir el procedimiento de respuesta ante compromiso de identidad, distinto del de phishing.
ID IdentificarSi esto me toca, por donde me toca

Antes de bloquear nada, mira quién lo está usando hoy. La consulta de la sección de detección te lo dice en un minuto, y en la mayoría de los tenants el resultado es cero o casi cero.

Si aparecen usuarios, no asumas que son maliciosos: pueden ser dispositivos legítimos sin navegador. Identifícalos antes de aplicar la política, o vas a romper algo.

  • Ejecutar el inventario de 90 días de inicios de sesión por Device Code Flow.
  • Identificar cada uso legítimo y su justificación antes de bloquear.
  • Revisar qué cuentas privilegiadas existen y cuáles tienen MFA resistente a phishing.
PR ProtegerComo evito que ocurra

El control decisivo es uno solo, y es de configuración, no de producto: bloquear el Device Code Flow mediante Conditional Access.

La ruta exacta en Entra ID: crear una política, en *Conditions* elegir la condición Authentication flows y marcar el bloqueo de Device code flow. La ANCI recomienda aplicarla a todos los usuarios y recursos cloud relevantes, con la única exclusión de las cuentas de emergencia o *break-glass*, siempre que estén protegidas, monitoreadas y documentadas.

Antes de aplicarla en modo bloqueo, déjala en modo reporte unos días. Es la diferencia entre cerrar un vector y dejar sin acceso a la sala de reuniones un lunes por la mañana.

Controles priorizados

P1: esta semana · P2: este mes · P3: este trimestre

PrioControlEsfuerzoMapeo
P1 Ejecutar el inventario de 90 días de inicios de sesión por Device Code Flow antes de tocar nada. Es de un minuto y evita romper un dispositivo legítimo. bajo CIS Controls v8 8.11 ISO 27001 A.8.16
P1 Bloquear Device Code Flow con Conditional Access: condición *Authentication flows* → bloquear *Device code flow*. A todos los usuarios y recursos cloud, excluyendo solo las cuentas break-glass documentadas y monitoreadas. Aplicar primero en modo reporte. bajo MITRE ATT&CK M1018 CIS Controls v8 6.8 ISO 27001 A.8.2
P1 Bloquear los tres dominios publicados por la ANCI y buscar hacia atrás 120 días si alguien de la organización los alcanzó. bajo MITRE ATT&CK M1021 CIS Controls v8 9.2 ISO 27001 A.8.23
P2 Migrar las cuentas privilegiadas a MFA resistente a phishing (FIDO2 o passkeys). No detiene este ataque por sí solo, pero elimina toda la familia de técnicas que dependen de una aprobación simple. medio MITRE ATT&CK M1032 CIS Controls v8 6.5 ISO 27001 A.8.5
P2 Incorporar el mensaje específico a la concientización: Microsoft nunca te pide escribir un código para abrir un documento o entrar a una reunión. El mensaje genérico sobre enlaces sospechosos no cubre este caso. bajo MITRE ATT&CK M1017 CIS Controls v8 14.2 ISO 27001 A.6.3
P3 Dejar alertas permanentes en el SIEM para inicios de sesión por Device Code y para creación de reglas de correo, correlacionadas por usuario y ventana temporal. medio CIS Controls v8 8.11 ISO 27001 A.8.16

El segundo control cierra el vector completo y se configura en una tarde. Es de los pocos casos en que una sola política elimina una técnica entera, y por lo mismo llama la atención cuántos tenants chilenos siguen con el flujo habilitado sin usarlo jamás.

DE DetectarComo me doy cuenta de que ya ocurrio

Hay dos momentos que detectar, y el segundo es el que casi nadie mira.

El primero es el inicio de sesión por Device Code. En un tenant sano deberían ser cero, así que cualquier evento merece revisión, y con más razón si el usuario nunca había usado ese método o si viene desde una geografía, un ASN o un proveedor cloud inhabitual.

El segundo es lo que ocurre después, y es donde se confirma el compromiso: lectura masiva de correo vía Graph, creación de reglas de reenvío u ocultamiento, registro de dispositivos nuevos, consentimientos OAuth que nadie autorizó, reconocimiento de usuarios y grupos.

Y una señal que no está en ningún log: un usuario que reporta haber escrito un código de Microsoft para abrir un documento o entrar a una reunión. Ese reporte vale más que cualquier alerta, y solo llega si la gente sabe que eso es raro.

Qué necesitas tener logueado

  • SigninLogs de Entra ID, con el campo AuthenticationProtocol
  • AADNonInteractiveUserSignInLogs, donde aparece el uso posterior de los tokens
  • AuditLogs de Entra ID: registro de dispositivos y consentimientos OAuth
  • Registros de Exchange Online o CloudAppEvents, para reglas de bandeja de entrada

Indicadores de compromiso

OjoLos indicadores están defanged (hxxp, [.]) para evitar clics accidentales. El bloque de abajo los trae en crudo, listos para tu lista de bloqueo.
TipoIndicadorConfianzaNota
domain account[.]important[.]vu alta AIA26-00268
domain sayze[.]cl alta Dominio chileno: probable sitio comprometido, bloquear la ruta y no el dominio raíz sin verificar
domain zace0bwdgj[.]smoothwebexperiences[.]de alta AIA26-00268
blocklistIndicadores en crudo
account.important.vu
sayze.cl
zace0bwdgj.smoothwebexperiences.de

Reglas y consultas de detección

sigmaDevice Code Flow en Entra ID (regla canonica)
title: Autenticacion por Device Code Flow en Entra ID
id: 7c41f0ab-2d95-4e18-b6f3-1a08d5e97c24
status: experimental
description: |
  Detecta inicios de sesion que usan el flujo de codigo de dispositivo (RFC 8628).
  En la mayoria de los tenants corporativos este flujo no se usa nunca, asi que
  cualquier aparicion merece revision. La campana AIA26-00268 lo aprovecho para
  obtener tokens validos sin montar una pagina de login falsa: la victima se
  autentica en el portal real de Microsoft y entrega el codigo al atacante.
author: Vantis Chile SpA
date: 2026/09/02
references:
  - https://www.vantis.cl/noticias/device-code-phishing-campana-nacional-microsoft-365-chile
  - https://datatracker.ietf.org/doc/html/rfc8628
logsource:
  product: azure
  service: signinlogs
detection:
  device_code:
    properties.authenticationProtocol: deviceCode
  exitoso:
    properties.status.errorCode: 0
  condition: device_code and exitoso
fields:
  - properties.userPrincipalName
  - properties.appDisplayName
  - properties.ipAddress
  - properties.location.countryOrRegion
falsepositives:
  - Aprovisionamiento de equipos sin teclado, como salas Teams Rooms o senaletica digital
  - Herramientas de consola que lo usan a proposito, como "az login --use-device-code"
  - Onboarding masivo de dispositivos por parte del area de TI, acotado en el tiempo
level: high
tags:
  - attack.credential_access
  - attack.t1528
  - attack.initial_access
  - attack.t1566
Requiere: SigninLogs de Entra ID. La ruta del campo depende de como llegue el log: 'properties.authenticationProtocol' si se ingesta crudo desde Event Hub, 'AuthenticationProtocol' sin prefijo si ya viene normalizado al esquema de tabla de Sentinel. Ajusta el mapeo del backend antes de convertir.
sentinel-kqlInventario de 90 días de inicios de sesión por Device Code
// Inicios de sesion por Device Code Flow: en la mayoria de los tenants deberian ser cero
SigninLogs
| where TimeGenerated > ago(90d)
| where AuthenticationProtocol =~ "deviceCode"
| extend Pais = tostring(LocationDetails.countryOrRegion),
         Ciudad = tostring(LocationDetails.city)
| summarize Intentos = count(),
            Exitosos = countif(ResultType == 0),
            Apps = make_set(AppDisplayName, 10),
            Paises = make_set(Pais, 10),
            IPs = make_set(IPAddress, 10),
            Primero = min(TimeGenerated), Ultimo = max(TimeGenerated)
        by UserPrincipalName
| order by Exitosos desc
Requiere: SigninLogs de Entra ID conectados a Sentinel. Ejecutar esto primero, antes de bloquear
sentinel-kqlActividad posterior: reglas de correo, Graph y dispositivos
// Actividad posterior tipica: reglas de correo, lectura masiva por Graph, dispositivos nuevos
let ventana = 90d;
union isfuzzy=true
 (CloudAppEvents
    | where Timestamp > ago(ventana)
    | where ActionType in ("New-InboxRule","Set-InboxRule","UpdateInboxRules")
    | project Timestamp, Usuario = AccountDisplayName, Senal = "regla de correo creada",
              Detalle = tostring(RawEventData)),
 (AADNonInteractiveUserSignInLogs
    | where TimeGenerated > ago(ventana)
    | where AppDisplayName has_any ("Microsoft Graph","Microsoft Authentication Broker")
    | where ResultType == 0
    | project Timestamp = TimeGenerated, Usuario = UserPrincipalName,
              Senal = "token usado contra Graph", Detalle = strcat(IPAddress, " / ", AppDisplayName)),
 (AuditLogs
    | where TimeGenerated > ago(ventana)
    | where OperationName has_any ("Add device","Add registered users","Consent to application")
    | project Timestamp = TimeGenerated,
              Usuario = tostring(InitiatedBy.user.userPrincipalName),
              Senal = OperationName, Detalle = tostring(TargetResources))
| order by Timestamp desc
Requiere: AuditLogs, AADNonInteractiveUserSignInLogs y CloudAppEvents o Defender for Cloud Apps
sentinel-kqlLos tres dominios publicados por la ANCI
// Los tres dominios publicados por la ANCI en AIA26-00268
let dominios = dynamic(["account.important.vu","sayze.cl","zace0bwdgj.smoothwebexperiences.de"]);
union isfuzzy=true
 (EmailUrlInfo | where Timestamp > ago(120d) | where Url has_any (dominios)
    | project Timestamp, Origen = "correo", Detalle = Url),
 (DeviceNetworkEvents | where Timestamp > ago(120d) | where RemoteUrl has_any (dominios)
    | project Timestamp, Origen = "navegacion", Detalle = RemoteUrl),
 (DnsEvents | where TimeGenerated > ago(120d) | where Name has_any (dominios)
    | project Timestamp = TimeGenerated, Origen = "dns", Detalle = Name)
| order by Timestamp desc
Requiere: Defender for Office 365 y for Endpoint, o registros DNS del resolver
google-secopsContacto con los dominios de AIA26-00268
rule vantis_aia26_00268_device_code_dominios {

  meta:
    author = "Vantis Chile SpA"
    description = "Contacto con los tres dominios de la campana de Device Code phishing " \
                  "publicada por la ANCI en AIA26-00268 (Chile, agosto 2026)"
    reference = "https://www.vantis.cl/noticias/device-code-phishing-campana-nacional-microsoft-365-chile"
    severity = "HIGH"
    priority = "HIGH"
    rule_version = "1.0"
    yara_version = "YL2.0"

  events:
    (
      re.regex($e.network.dns.questions.name,
               `(^|\.)(account\.important\.vu|sayze\.cl|zace0bwdgj\.smoothwebexperiences\.de)$`)
      or
      re.regex($e.target.hostname,
               `(^|\.)(account\.important\.vu|sayze\.cl|zace0bwdgj\.smoothwebexperiences\.de)$`)
      or
      re.regex($e.target.url,
               `(account\.important\.vu|sayze\.cl|zace0bwdgj\.smoothwebexperiences\.de)`)
    )

  outcome:
    $usuario = $e.principal.user.userid
    $equipo = $e.principal.hostname
    $destino = $e.target.hostname

  condition:
    $e
}
Requiere: Registros de DNS, proxy o EDR normalizados a UDM. Va contra los dominios y no contra el protocolo de autenticacion a proposito: el mapeo de Device Code a UDM varia segun el parser, un dominio en un log de DNS no.
qradarBusqueda retroactiva de 90 dias sobre los dominios
SELECT
  DATEFORMAT(devicetime, 'yyyy-MM-dd HH:mm:ss') AS fecha,
  QIDNAME(qid)                                  AS evento,
  LOGSOURCENAME(logsourceid)                    AS fuente,
  username                                      AS usuario,
  sourceip                                      AS origen,
  destinationip                                 AS destino,
  "URL"                                         AS url,
  "DNS Query Name"                              AS consulta_dns
FROM events
WHERE
      "URL" ILIKE '%account.important.vu%'
   OR "URL" ILIKE '%sayze.cl%'
   OR "URL" ILIKE '%zace0bwdgj.smoothwebexperiences.de%'
   OR "DNS Query Name" ILIKE '%account.important.vu%'
   OR "DNS Query Name" ILIKE '%sayze.cl%'
   OR "DNS Query Name" ILIKE '%zace0bwdgj.smoothwebexperiences.de%'
ORDER BY devicetime DESC
LAST 90 DAYS
Requiere: Las propiedades personalizadas 'URL' y 'DNS Query Name' deben existir y estar extraidas en tu DSM de proxy y de DNS. Si tu instalacion las nombra distinto, cambia el nombre entre comillas; una propiedad inexistente hace fallar la consulta.
Falsos positivos esperables

El inventario de Device Code Flow va a mostrar usos legítimos si tienes dispositivos sin navegador: pantallas de sala, impresoras, algún equipo de laboratorio. Identifícalos antes de bloquear; ese es el punto de correr la consulta primero.

La regla de actividad posterior tiene ruido propio: se crean reglas de correo legítimas todos los días. Lo que la vuelve señal es la coincidencia temporal con un inicio de sesión por Device Code. Correlaciona por usuario y ventana de tiempo, no mires las alertas por separado.

RS ResponderContencion y erradicacion

Acá está el error más costoso, y la ANCI lo advierte de forma explícita: cambiar la contraseña no basta. El atacante no tiene la contraseña. Tiene tokens.

Un refresh token puede seguir vigente semanas después del cambio de clave. Hay que revocarlos de forma explícita, y además revisar todo lo que el atacante pudo dejar puesto para volver: reglas de correo, consentimientos OAuth, dispositivos registrados, métodos de autenticación agregados.

Trátalo como compromiso de identidad y de sesión, no como un correo malicioso más.

  • Revocar todas las sesiones y tokens del usuario en Entra ID, no solo cambiar la contraseña.
  • Revisar y eliminar reglas de correo creadas o modificadas desde la fecha del acceso.
  • Auditar consentimientos OAuth y aplicaciones autorizadas por esa cuenta.
  • Revisar dispositivos registrados y métodos de autenticación agregados recientemente.
  • Buscar en los registros de Graph qué se leyó o descargó, para dimensionar la exposición de datos.
  • Evaluar la obligación de notificar bajo la Ley 21.719 según qué datos quedaron accesibles.
RC RecuperarVolver a operar y no repetirlo

Cierra el vector antes de dar el incidente por resuelto: si no bloqueaste el Device Code Flow, la misma técnica funciona mañana con otro usuario.

Y sobre la concientización: el mensaje tiene que ser específico, porque el genérico no sirve acá. Microsoft nunca te va a pedir que escribas un código para abrir un documento, entrar a una reunión o validar tu seguridad. Si alguien te manda un código y te dice dónde escribirlo, es un ataque, aunque la página sea de Microsoft.

  • Verificar que la política de Conditional Access quedó en bloqueo, no en modo reporte.
  • Incorporar el mensaje específico del código a la concientización, con ejemplo real.
  • Medir cuánto pasó entre el acceso inicial y la detección. Esa cifra es tu punto de partida.

Llévatelo

Lo de arriba explica. Esto se ejecuta. Son archivos, no capturas de pantalla: se abren, se pegan y funcionan.

La regla Sigma es la canónica: es el formato neutral del que se derivan las demás. Si tu SIEM no aparece en la lista, esa se convierte con pySigma. Las traducciones a motores concretos van sin validar contra tu modelo de datos — revisa los nombres de tabla y campo antes de subirlas a producción.

Fuentes

¿Esto te aplica y no sabes por dónde partir?

Revisamos tu exposición real frente a lo que describe este análisis: superficie expuesta, cobertura de detección y brechas frente a la Ley 21.663. Diagnóstico de 15 minutos, sin costo.

Agendar diagnóstico

Relacionado