El HTML Smuggling, también conocido como contrabando de HTML, no es una técnica nueva. Sin embargo, su utilidad y flexibilidad la convierten en un método efectivo para los actores de amenazas en la actualidad.
Esta técnica se basa en el uso de funciones legítimas de HTML5 y JavaScript para entregar malware. Se ha vuelto cada vez más común en campañas de correo electrónico que incluyen malware bancario, troyanos de acceso remoto (RAT) y otras cargas útiles relacionadas con ataques dirigidos.
El contrabando de HTML se ha observado en una campaña de spear-phishing del actor NOBELIUM en mayo. Más recientemente, también se ha utilizado para entregar el troyano bancario Mekotio, así como AsyncRAT/NJRAT y Trickbot, que los atacantes emplean para obtener control de dispositivos afectados y entregar cargas útiles de ransomware.
Para algunos actores, como aquellos que entregan Qakbot, el contrabando de HTML se usa para entregar contenido malicioso (generalmente ISO o ZIP con el payload final en su interior). El contenido HTML enriquecido a menudo se emplea para presentar la página como un sitio falso de Google Drive, Microsoft, Adobe, etc., con JavaScript que desempaqueta y entrega el payload.
Se ha observado que otros actores aprovechan el contrabando de HTML para presentar páginas de inicio de sesión falsas de Microsoft 365. Esto puede ser ventajoso para un atacante, ya que la página se genera mediante programación y a menudo muestra la dirección de correo electrónico del destinatario para agregar legitimidad, sirviendo localmente en el punto final de destino.
Ofuscación del payload
Para aquellos versados en el contrabando de HTML y las técnicas de ofuscación de carga útil, gran parte de esta información es conocida. Aunque la prevalencia y el uso in-the-wild de estas técnicas aún pueden sorprender. Se mencionan las siguientes técnicas:
- Base64
- Base64 invertido
- Hexadecimal
- XOR
El uso de Base64 es el medio más sencillo para incrustar contenido de carga útil en un archivo HTML. Se puede ver un gran ejemplo de esto en el blog de Outflank.
Desde un punto de vista defensivo, es relativamente trivial identificar los tipos de archivos comunes que han sido codificados en Base64, en función de los primeros bytes codificados (es decir, el encabezado del archivo). Un par de ejemplos incluyen:
- TV… — Encabezado codificado ‘MZ’ de un archivo ejecutable.
- UE… — Encabezado ‘PK’ codificado de un archivo Zip (o del nuevo formato de documentos de Office).
Se puede encontrar una muestra de esto para probar por correo electrónico y entrega de enlace en la colección de delivr.to aquí.
Una forma sencilla de mejorar (ligeramente) la evasión anterior es invertir la cadena de carga útil codificada en Base64. Esto se ha visto en la entrega de Qakbot recientemente.
Si bien esto oscurece un poco la carga útil, aún es trivial detectar estas cadenas cuando sabemos qué buscar. Aquí se puede encontrar una muestra de esto para probar por correo electrónico; y una demostración en vivo que pasa de contrabando un ISO.
Una forma alternativa de representar el contenido de carga útil, también observada en la naturaleza, es en una matriz de bytes hexadecimales. Con la función JavaScript fromCharCode, se puede convertir los caracteres hexadecimales de la matriz en los bytes sin procesar del archivo original.
Desde un punto de vista ofensivo, claramente se ha eliminado el contenido de cadenas codificado en Base64. Pero, este enfoque sigue siendo solo otra representación del contenido de archivo predecible, como podemos ver en los primeros bytes de la matriz, 0x50 y 0x4b, que cuando se convierten de hexadecimal producen el encabezado de archivo PK de un ZIP.
Aquí se puede encontrar una muestra de esto para probar por correo electrónico y entregar enlaces; y una demostración en vivo que pasa de contrabando un ISO comprimido.
Al mejorar la estrategia de codificación, podemos recurrir al cifrado para proteger nuestra carga útil y eliminar las cadenas reveladoras que indican el contenido del archivo. Uno de esos métodos de cifrado visto por los actores de amenazas es un cifrado XOR.
En particular, el malware NOBELIUM emplea esta técnica XOR. Aquí se puede encontrar una muestra de esto para probar por correo electrónico; y aquí una demostración en vivo que pasa de contrabando un ISO comprimido.
Entrega de carga útil
Suponiendo que un actor de amenazas pueda evadir un escáner estático con la ofuscación de la carga útil anterior, deberá concentrarse en cómo iniciar el desempaquetado y la entrega del payload, mientras toma medidas para asegurarse de que evade el análisis de la zona de pruebas.
Descarga en línea
Las muestras recientes (abril de 23) de Qakbot han aprovechado las descargas activadas por botones de archivos de secuencias de comandos de contrabando (por ejemplo, secuencias de comandos WSF). Un ejemplo de esto se puede ver aquí.
En lugar de aprovechar algunos de los mecanismos de entrega y ofuscación de carga útil más complicados observados anteriormente, esta técnica incorpora la carga útil codificada en Base64 en línea en un elemento de anclaje HTML (etiqueta <a>) que se puede usar junto con un botón o similar. La técnica es bastante concisa y se puede demostrar fácilmente.