faxhell Bind Shell Using Fax Service and DLL Hijack
faxhell Bind Shell Using Fax Service and DLL Hijack

faxhell: A Bind Shell Using the Fax Service and a DLL Hijack

Una Prueba de Concepto de bind shell usando el servicio de Fax y un DLL hijack basado en Ualapi.dll.

Consulta el artículo en: https://windows-internals.com/faxing-your-way-to-system/

Demo Fax Shell
Demo Fax Shell

Cómo Utilizarlo

  • Construye Ualapi.dll y colócalo en c:\windows\system32
  • Inicia el servicio de fax, que cargará la DLL y llamará a la exportación UalStart. UalStart pondrá en cola un elemento de trabajo del grupo de hilos que abrirá un handle a RpcSs, encontrará un token SYSTEM y lo suplantará. Después, creará un socket en la dirección del endpoint local, lo enlazará al puerto 9299, y esperará asíncronamente una conexión usando un puerto de finalización de E/S del grupo de hilos.
  • Conéctate al socket en el puerto 9299 usando tu cliente favorito (como nc(at).exe 9299) y luego escribe let me in y presiona ENTER. Si estás escribiendo código personalizado, asegúrate de enviar la cadena let me in\n.thread pool I/O completion port.
  • El paquete de finalización de E/S activará la llamada de retorno del grupo de hilos, que iniciará un proceso Cmd.exe bajo el servicio DcomLaunch con privilegios SYSTEM, vinculando sus manejadores de entrada y salida al socket recién creado.
  • Listo!

Evasión EDR / AV

  • Utiliza un servicio que no es comúnmente conocido y que no está vigilado o marcado como sospechoso por los proveedores de EDR.
  • Utiliza la API del grupo de hilos de Windows para realizar la configuración, lo que hace que las pilas sean más difíciles de leer, descargando el trabajo a través de múltiples hilos y evitando “pistas” fáciles de que algo sospechoso está sucediendo.
  • El tiempo de vida de los tokens suplantados es muy pequeño, y sólo el hilo trabajador se ejecuta como SYSTEM, volviendo a NETWORK SERVICE muy rápidamente y después de hacer sólo una llamada a la API. Esto ayuda a reducir la posibilidad de ser detectado por varios escáneres.
  • Utiliza APIs de socket poco comunes que hacen que la tabla de importación sea menos sospechosa y evita detecciones EDR, hooks IOCTL y LSPs.
  • Crea el bind shell bajo el servicio DcomLaunch (que ya es un servicio SYSTEM) y no bajo el servicio Fax, dándole un aspecto mucho más natural y evitando un árbol de procesos de aspecto muy sospechoso.
  • Aprovecha un bug de Windows que hace que parezca que nuestro socket pertenece al servicio de Fax, y no a DcomLaunch o Cmd.exe. Si matamos el servicio de Fax parece que el socket pertenece a System.

Advertencias

No se trata de un proyectil indetectable, malicioso y armado:

  • Es sólo un bind shell, que la mayoría de los cortafuegos impedirán. Abrir reglas de cortafuegos, o usar un bind shell inverso, o hacer comunicaciones a través de un puerto común como 80 o 443 funcionaría mejor.
  • Otros servicios, especialmente el Spooler, también cargan Ualapi.dll. Mientras que el sistema se comporta bien si el servicio de Fax está “atascado” en el estado SERVICE_START_PENDING, esto causará problemas en Spoolsv.exe.
  • Es probable que haya bugs/fugas de memoria en la PoC — hicimos todo lo posible para que las cosas tuvieran calidad de producción, pero no pasamos las cosas por Application Verifier o asan.

🤞 ¡El Gran Hermano te vigila, pero sabemos cómo detenerlo!

¡No enviamos spam! Lee nuestra Política de Privacidad para más información.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda