- Comparte la experiencia del proceso de desarrollo de defendnot, una herramienta que desactiva Windows Defender usando directamente la API del servicio Windows Security Center (WSC)
- El proyecto comenzó mientras intentaba superar las limitaciones técnicas y los problemas legales del proyecto anterior, no-defender
- Avanzó con la ingeniería inversa y la depuración en medio de varios obstáculos, como un entorno especial (MacBook arm64, depuración remota, alta latencia)
- Analizó la evasión del registro de Defender y el mecanismo de validación de procesos, y tras múltiples intentos y fallos logró que funcionara de forma estable
- Al final también completó la función de ejecución automática, y al mismo tiempo reflexiona sobre lo duro que fue todo el proceso
Introducción
- Comparte el recorrido de implementación de la herramienta defendnot, que desactiva Windows Defender
- En lugar de centrarse en los principales detalles técnicos, está organizado alrededor de los problemas reales y el ensayo y error que vivió en el entorno de trabajo
- La documentación formal y la explicación técnica detallada se publicarán por separado más adelante
Recordando hace 1 año
- Hace aproximadamente un año publicó un proyecto llamado no-defender, que aprovechaba la forma en que Windows Defender se desactiva a través de la API de WSC
- Este proyecto consultaba código de terceros de un proveedor de antivirus para hacerle creer al sistema que había otro antivirus registrado
- Tras su lanzamiento recibió mucha atención y obtuvo unas 1,500 estrellas, pero decidió borrar el código fuente y cerrar el proyecto debido a una solicitud de eliminación por DMCA de la empresa de antivirus relacionada
Motivo para iniciar el proyecto
- Al momento de escribir el texto, se encuentra hospedado en un Airbnb en Seúl
- Su entorno principal de desarrollo es una MacBook M4Pro, y no llevó aparte ningún equipo indispensable para hacer ingeniería inversa x86
- Debido a un torneo de CTF y el itinerario del viaje, se encontró en la situación de tener que trabajar sin un dispositivo x86
- Mientras evaluaba la posibilidad de una implementación “normal” del proyecto no-defender, empezó a explorar si era posible una implementación independiente sin depender de un AV
Investigación inicial (día 1)
- Con ayuda de un amigo consiguió el binario de wsc e intentó reimplementar el registro en WSC con una estructura similar a la del proyecto anterior
- Lo implementó usando la API COM de WSC, pero apareció un error de Access Denied
- Identificó la causa del error en el proceso de verificación de firma y autenticación que WSC realiza sobre el proceso que invoca la API
- Cuando intentó registrar el AV inyectando un módulo en un proceso del antivirus, el AV se registró correctamente
Sustitución del binario AV y experimentos adicionales (día 1)
- Intentó ejecutar la herramienta mediante procesos del sistema firmados (
cmd.exe, etc.), pero falló en la validación de PPL (Protected Process Light)
- Decidió pausar temporalmente el trabajo y dejar para después el desensamblado detallado y el rastreo para el análisis
Preparación del entorno (día 2)
- Debido a las limitaciones del entorno MacBook arm64, depurar Windows x86 era muy difícil
- Usó de forma remota la PC de un amigo que vive en Estados Unidos (Parsec, AnyDesk, etc.) para realizar depuración y pruebas en un entorno de alta latencia
- En el proceso, la compilación del código y la depuración de la VM se entrecruzaban de forma compleja, lo que le provocó lentitud y confusión
Depuración del servicio WSC (día 2)
- Confirmó que el servicio WSC tiene una estructura de DLL ejecutada por svchost
- Para quitar la protección PPL, aplicó un bypass con un controlador especial y confirmó con el depurador la entrada a la función
- Identificó que dentro del servicio se estaba ejecutando una verificación del token SID de WinDefend
- Formuló la teoría de que podía evadir el procedimiento de autenticación imitando un proceso con el SID de WinDefend
Imitación del SID de WinDefend (día 2)
- Estudió más a fondo la estructura y el funcionamiento de los tokens de Windows
- Tras implementar y ejecutar código para imitar el SID de WinDefend, observó que todas las llamadas COM devolvían SUCCESS, pero en la práctica el AV no quedaba registrado
Reconstrucción del algoritmo de validación (día 3)
- Reanalizó cuidadosamente en el binario AV si la comprobación de SID realmente se superaba
- Cuando la verificación de SID no se supera, el servicio además revisa el estado de elevación, la firma del binario y la bandera DllCharacteristics del PE (ForceIntegrity)
- Reprodujo la función que realiza esa lógica y llevó a cabo experimentos aplicándola a binarios core del sistema
Uso del proceso Taskmgr (día 3)
- Volvió a probar usando Taskmgr.exe como proceso objetivo, pero WSC rechazaba la solicitud por errores en el paso del nombre y un bug de IPC
- Después de mejorar la inferencia de la ruta del archivo y la forma de pasar el nombre del AV, confirmó que funcionaba correctamente
Limpieza del código (día 3)
- Ordenó las funciones e intentó implementar la ejecución automática (autorun)
- Experimentó fallos intermitentes al gestionar la ejecución automática, y repitió la revisión del código y del entorno para descubrir la causa
Implementación de la ejecución automática (día 4)
- Confirmó que la causa era una casilla de las opciones del Programador de tareas (Task Scheduler) que impedía ejecutar la tarea cuando la laptop no estaba conectada a corriente alterna (AC)
- Tras desactivar esa opción, la ejecución automática funcionó normalmente
- Para cerrar, realizó limpieza del código y pruebas
Conclusión
- El trabajo de ingeniería inversa en un entorno limitado e incómodo fue una experiencia muy dura tanto mental como físicamente
- Más adelante se publicará por separado una documentación más detallada sobre la implementación de WSC
Agradecimientos
- Pindos: amigo que le prestó su PC por las noches para ayudarle con la depuración y además le calentó la habitación
- MrBruh: colega que lo impulsó a empezar a explorar el proyecto y le dio ideas y retroalimentación
- También agradece a las personas cercanas que estuvieron en contacto con él durante el proyecto y le dieron apoyo
- Confiesa que ama el kimchi
- También da las gracias al artista que dejó graffiti en su pared
1 comentarios
Comentarios de Hacker News
C:\ProgramData\Microsoft\Windows Defendery luego crear un archivo vacío en su lugarnetcat.exe