Cómo usar los dominios de Microsoft.com para evadir firewalls y ejecutar payloads

Microsoft.com es uno de los dominios más extensos en Internet con miles de subdominios registrados. Windows 10 hará ping a estos subdominios cientos de veces por hora, por lo que es un desafío para el firewall monitorear todas las solicitudes realizadas por el sistema operativo.

Un ciberdelincuente puede usar estos subdominios para enviar payloads y así evadir los firewalls de la red.

Mientras intentaba compartir un artículo en las redes sociales recientemente, Twitter me impidió ingresar un simple comando de PowerShell en la ventana del tweet. Twitter mostró un mensaje de error que indica que no se pudo enviar el tweet.

Se me ocurrió que hackers habían estado tuiteando comandos de PowerShell en el pasado, con la intención de usar el servicio como un sistema de alojamiento de payloads. Este concepto no es nuevo y me hizo pensar en otros dominios populares que podrían usarse de manera similar, así como en los beneficios potenciales que la actividad podría tener para un ataque.

¿Por qué usar dominios de Microsoft en lugar de un VPS dedicado?

La ventaja más importante probablemente sería el efecto que estos dominios populares tienen en los firewalls de red y los entornos altamente seguros.

El concepto es relativamente simple. Un atacante alojará su payload en un dominio de Microsoft. Cuando una máquina Windows 10 que tenemos como objetivo intenta descargarla, es más probable que los sistemas operativos y redes seguras permitan que las solicitudes web atraviesen la red, evadan el firewall y un sistema de detección de intrusos (IDS) configurado por una organización.

Las computadoras con Windows 10 pueden “llamar a casa” hasta decenas de miles de veces por día. Incluso con configuraciones reforzadas, Windows 10 hará ping a los servidores de Microsoft miles de veces.

Algunos de los datos que se transmiten hacia y desde los dominios de Microsoft son necesarios para mantener las actualizaciones del, y otros aspectos esenciales del sistema operativo. A continuación, se muestra un ejemplo de captura de datos de Wireshark que sale (GET) de un sistema Windows 10.

Algunos dominios de Microsoft pueden aparecer con subdominios inusuales (por ejemplo, “geover-prod.do.dsp.mp.microsoft(dot)com”). Estos son generalmente para servicios dedicados, recursos y aplicaciones que se ejecutan en segundo plano. Eso significa que algunos firewalls e IDS estrictos permitirán que estos dominios con comodines (por ejemplo, permitan que *.microsoft.com) pasen a través de la red. Los administradores de sistemas también pueden ignorar los dominios de Microsoft por completo, ya que no es probable que sean explotados ​​por ciberdelincuentes.

Un atacante puede usar este conocimiento para su ventaja. Toma la captura de Wireshark a continuación como ejemplo. ¿Notas algo inusual?

Descarga del payload

El dominio “social.msdn.microsoft(dot)com” solo se usó para descargar el payload del atacante. A simple vista, o cualquier persona que realice una inspección profunda de paquetes (DPI), este tráfico parece mayormente benigno.

El dominio pertenece al foro de la comunidad de Microsoft para desarrolladores y usuarios de Windows 10. Las solicitudes (TCP/TLS) están cifradas para que, al inspeccionar los paquetes, no se muestre la ruta completa a la página web ni a los contenidos (es decir, el payload).

Los administradores que observan este tráfico en la red probablemente creerán que el usuario objetivo simplemente está navegando en el foro de Microsoft.

Navegando a la página configurada por el atacante, podemos ver el payload incrustado en la sección “Acerca de mí”.

Muchos dominios de propiedad de Microsoft se pueden usar para este tipo de actividad, como Microsoft Answers, Office Forms, OneDrive e incluso las secciones de comentarios de otros medios de noticias de Microsoft. Todos estos dominios legítimos de Microsoft permiten la entrada de usuarios que se pueden aprovechar para alojar payloads.

Paso 1 – Crear el payload

En este punto, estamos definiendo el bit final de código que se ejecutará en la computadora del objetivo. Para simplificar las cosas, el payload creará un archivo de texto vacío en la carpeta Documentos\ llamado pwn_sauce. Presta atención a la triple barra invertida (\\\). En Bash (terminal Kali), esto se requiere para pasar las variables de PowerShell al payload como una cadena literal.

PowerShell usará la evasión política de ejecución (-EP), manteniendo los terminales pop-ups ocultos con /w1 . El cmdlet New-Item se usa para crear un nuevo archivo. En la ruta al nombre de archivo, la variable de entorno de nombre de usuario se usa para insertar el nombre de usuario del usuario comprometido automáticamente.

Puede ejecutarse en cualquier computadora con Windows 10 sin modificar ninguna parte del comando. Se creará un nuevo archivo en la carpeta Documentos\.

Los comandos simples como el de la captura de pantalla anterior se pueden incrustar directamente en la sección Acerca de mí. Los payloads complejos de PowerShell que contienen caracteres especiales deben estar codificadas en base64. De lo contrario, el servidor de Microsoft detectará y saneará caracteres especiales (por ejemplo, < > &). La codificación Base64 del payload es una forma rápida de solucionar este problema.

Con comandos extendidos, base64 probablemente producirá múltiples líneas codificadas. Cuando se utilizan cadenas base64 con PowerShell, deben aparecer en una sola línea. Debes concatenar las numerosas líneas en una sola cadena canalizando la salida de base64 en tr para eliminar (-d ) nuevas líneas (\n).

Eso es todo para configurar el payload. Continuaremos con la creación de la cuenta de Microsoft y la configuración del stager.

Paso 2 – Crear una cuenta de Microsoft

Se requiere una cuenta de Microsoft para crear y modificar la página de perfil que aloja el payload. Dirígete a la página de inicio de  Live login para iniciar el proceso.

Después de iniciar sesión, ve a la página de perfil de usuario en social.msdn.microsoft(dot)com/Profile/USERNAME y has clic en el botón “Editar mi perfil” para actualizar la sección Acerca de mí.

Paso 3 Alojar el payload en el sitio web de Microsoft

La sección Acerca de mí en la página de perfil de Microsoft puede contener 1.024 caracteres, que debes tener en cuenta al crear payloads, especialmente al programar payloads con base64, ya que aumenta el número de caracteres.

Es posible alojar payloads en texto sin formato, pero el stager de PowerShell tendrá que incluir algún código para detectar y convertir cadenas HTML desinfectadas en texto sin formato. En la medida de lo posible, esto está más allá del alcance de este artículo.

Debes pegar el payload deseado en la sección Acerca de mí entre las palabras START y END. Es crucial para el stager en el siguiente paso, por que analiza todo el HTML en la página de Microsoft y extrae las cadenas codificadas entre los identificadores “START” y “END”.

Cuando hayas terminado, has clic en el botón “Guardar” en la parte inferior de la página.

Paso 4 – Crear el Stager

El siguiente PowerShell one-liner fue diseñado para descargar la página de perfil del usuario de Microsoft, extraer el payload codificado, descodificarlo y luego ejecutarlo.

Hay varios comandos encadenados que están separados por punto y coma. Voy a desglosar cada comando a continuación.

Arriba: el cmdlet Invoke-WebRequest (iwr) se usa para obtener la página web con el argumento -UseBasicParsing. Todo esto se establece en la variable wro (WebResponseObject). Mientras está en desuso, el parámetro UseBasicParsing se usa para habilitar el análisis básico. Encontré que este parámetro necesitaba ser configurado manualmente para que la solicitud fuera exitosa.

Arriba: PowerShell utilizará regex patterns para ubicar el payload en el HTML. Hay otras formas de extraer contenido de páginas web con PowerShell, pero este método es universal. Los payloads incluidos en START y END embebidas en cualquier sitio web se filtrarían con este comando.

Arriba: Crearás una variable $m para cualquier texto que coincida con los patrones de expresiones regulares (regex patterns).

Como puedes ver arriba: Si If  encuentra algún patrón en la variable $m, decodifica (FromBase64String) la cadena y configúrala en la variable $p.

Notarás arriba: Se usa Invoke-Expression(iex) para ejecutar la variable $p. En este caso, $p es el payload de PowerShell. Para probarlo, el comando iex se puede sustituir con el comando echo, como se ve a continuación.

Paso 5 – Ofuscar el PowerShell Stager (opcional)

Puede ser conveniente que un atacante ofusque el stager con una herramienta como Unicorn. Para obtener información detallada sobre Unicorn, puedes consultar la página oficial de GitHub para obtener más información.

Ahora, debes usar cat en el archivo “powershell_attack.txt” para encontrar el Stager ofuscado.

Paso 6 – Desplegar el Stager

El stager mostrado fue diseñado y probado con un USB Rubber Ducky. Sin embargo, hay muchas otras formas de ejecutar el código en la máquina de destino. A continuación, se muestra una lista no exhaustiva de posibles vectores de ataque.

  • Man-in-the-middle: Herramientas como Mitmf ( ahora en desuso) y Bettercap son capaces de interceptar descargas y reemplazarlas con archivos maliciosos.
  • Archivo adjunto de correo electrónico: los ataques de phishing son una de las principales formas en que los atacantes intentarán comprometer a una organización. Algunas organizaciones son demasiado grandes para proporcionar adecuadamente a su personal capacitación en conciencia sobre seguridad en profundidad, lo que hace que esta sea una técnica efectiva.
  • USB olvidadas: Las USB olvidadas tienen una tasa de éxito de casi el 50%. Muchas personas pueden ser engañadas al insertar una unidad flash USB al azar en su computadora.
  • USB Rubber Ducky: con varios segundos de acceso físico a la computadora de destino, el USB Rubber Ducky se puede usar para desplegar el ataque.

Paso 7 – Mejorar el ataque (Conclusión)

Hay mucho más que un atacante puede hacer para mejorar este ataque.

Aprovecharse de Google.com para alojar payloads:

El uso de Google.com para alojar payloads es una mejora del ataque. Al igual que *.microsoft.com, la mayoría de los firewalls no bloquearán las solicitudes GET realizadas directamente a google.com.

Alojar payloads directamente en Google es más complicado. Google es un motor de búsqueda, por lo que el atacante tendría que usar eso para su beneficio creando un sitio web que Google pueda indexar. Luego, necesitarían crear una ruta web que contenga el payload como el nombre del archivo. El payload se adquiriría posteriormente identificando el href, no el cuerpo de una sección Acerca de mí (como el ejemplo a anterior). La computadora del objetivo nunca consultaría el sitio web del atacante. El payload se adquirirá completamente utilizando el motor de búsqueda de Google.

Payloads con un propósito:

Este artículo te presentó un payload simple de PowerShell que creó un archivo de texto vacío en la carpeta Documentos\. De manera realista, un atacante puede intentar eliminar las contraseñas del Wi-Fi, establecer persistencia con herramientas como schtasks o colocar un EXE en la carpeta Inicio.

Sin embargo, si los datos que salen de la red son un obstáculo, probablemente se detectará fácilmente un shell genérico de TCP reverso, lo que anula el propósito de usar un dominio de Microsoft o Google en el escenario.

En ese caso, podría ser más conveniente usar la computadora de destino como punto de acceso Wi-Fi y crear un recurso compartido SMB. Dichos ataques permitirían a un atacante conectarse al punto de acceso Wi-Fi del objetivo (evitando la red de origen) y robar archivos en la computadora.

Evasión de SmartScreen:

SmartScreen es una capa adicional de seguridad desarrollada por Microsoft. Se ejecuta en segundo plano como un servicio antimalware mientras analiza aplicaciones y archivos en una base de datos de malware de Microsoft.

En mi breve ronda de pruebas (sin ofuscación de Unicorn), un stager de PowerShell (EXE) compilado pudo evadir el navegador Chrome, Windows Defender y el antivirus Avast en una máquina con Windows 10.

SmartScreen, por otro lado, te pedirá al usuario que ejecutes manualmente el EXE, ya que fue creado por un ” Editor desconocido” (es decir, el atacante). Este artículo se centra en evadir los firewalls de red, por lo que mostraremos cómo firmar ejecutables y omitir SmartScreen en próximas publicaciones.