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.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda