Trawler es un script de PowerShell diseñado para ayudar a los respondedores de incidentes a descubrir posibles indicadores de compromiso en hosts Windows, centrado principalmente en mecanismos de persistencia que incluyen tareas programadas, servicios, modificaciones del registro, elementos de inicio, modificaciones binarias y más.
Actualmente, Trawler puede detectar la mayoría de las técnicas de persistencia señaladas específicamente por MITRE y Atomic Red Team, y se agregan nuevas detecciones de forma regular.
Características principales
Escaneo del sistema operativo Windows para una variedad de técnicas de persistencia (enumeradas a continuación)
Salida CSV con técnica MITRE y metadatos de inicio de investigación
Listas de permitidos integradas para configuraciones comunes de Windows que abarcan Windows 10/Server 2012|2016|2019|2022 para reducir el ruido
Captura de metadatos de persistencia desde una imagen empresarial 'golden' (instantánea) para su uso como lista de permitidos dinámica en tiempo de ejecución
Análisis de imágenes de disco montadas mediante redireccionamiento de unidad
¿Cómo lo uso?
Simplemente descargue y ejecute trawler.ps1 desde un símbolo de sistema de PowerShell/cmd administrativo: cualquier detección se mostrará en la consola y también se escribirá en un CSV ('detections.csv') en el directorio de trabajo actual. El CSV generado contendrá Nombre de detección, Origen, Riesgo, Metadatos y la técnica MITRE correspondiente.
O use esta línea única desde un terminal PowerShell administrativo:
Ciertas detecciones tienen listas de permitidos integradas para ayudar a eliminar el ruido de las configuraciones predeterminadas de Windows (10/2016/2019/2022): tareas programadas, servicios, etc. esperados. Por supuesto, siempre es posible que los atacantes secuestren estos directamente y se hagan pasar con gran detalle como un proceso predeterminado del sistema operativo: tenga cuidado de utilizar múltiples formas de análisis y detección al tratar con adversarios hábiles.
Si tiene ejemplos o ideas para detecciones adicionales, no dude en enviar un Issue o PR con detalles técnicos/referencias relevantes; la base de código está un poco desordenada en este momento y se limpiará con el tiempo.
Además, si identifica falsos positivos obvios, hágamelo saber abriendo un issue o PR en GitHub. Los culpables obvios serán COM, Servicios o Tareas no estándar.
Parámetros de CLI
root@kitploit:~
-scanoptions : Navegue con tabulador entre las detecciones posibles y seleccione un subconjunto usando términos separados por comas (ej. .\trawler.ps1 -scanoptions Services,Processes) o omita para hacer todas las detecciones.
-quiet : Suprime la salida de detecciones en la consola.
-snapshot : Ruta a una salida JSON anterior de Trawler para usar como lista de permitidos.
-outpath : Define una ruta de archivo personalizada para guardar la salida de detecciones (por defecto: "$PSScriptRoot\detections.csv").
-drivetarget : Define la variable para una unidad de destino montada (ej. .\trawler.ps1 -targetdrive "D:") (por defecto: sistema local).
-daysago : Define cuántos 'días atrás' considerar para las detecciones basadas en tiempo (por defecto: 45).
-hashmode : Define qué algoritmo hash usar para las detecciones compatibles: soporta sha1, md5 o sha256 (por defecto: sha1).
-evtx : Habilita la creación de un origen de registro de eventos y la escritura de detecciones en el registro de eventos de Aplicación bajo Source=trawler con EID=9001 (por defecto desactivado).
¿Qué diferencia esto de PersistenceSniper?
PersistenceSniper es una herramienta increíble: la he usado mucho en el pasado, pero hay algunos puntos clave que diferencian estas utilidades:
Trawler es (actualmente) una utilidad local; aunque sería bastante sencillo envolverlo en un bucle y usar sesiones de WinRM/PowerShell para ejecutarlo en hosts remotos.
Trawler implementa listas de permitidos para muchas detecciones 'ruidosas' para ayudar a eliminar detecciones esperadas de configuraciones predeterminadas de Windows (10/2016/2019/2022) y se actualizan constantemente (PS también hace esto).
PersistenceSniper (en su mayoría) no contiene ningún tipo de lista de permitidos; por lo tanto, hay más ruido al considerar elementos como servicios, tareas programadas, escaneo general de DLL COM, etc.
La salida de Trawler es simplificada: Nombre, Riesgo, Origen, Técnica MITRE y Metadatos son los únicos elementos proporcionados para cada detección para ayudar a los analistas a iniciar sus esfuerzos de búsqueda de persistencia; esto es un arma de doble filo.
Se usa Regex en muchas comprobaciones para ayudar a detectar palabras clave o patrones 'sospechosos' en varias áreas críticas, incluido el contenido de archivos escaneados, valores de registro, etc. Esto proporciona un poco más de flexibilidad pero también una tasa potencialmente mayor de falsos positivos.
Trawler admite 'redireccionamiento de unidad' para verificar cajas muertas montadas en una máquina de análisis.
En general, estas herramientas son extremadamente similares pero abordan el problema desde ángulos ligeramente diferentes: PersistenceSniper devuelve toda la información al analista para su revisión, mientras que Trawler intenta limitar lo que se devuelve solo a resultados que probablemente sean mecanismos de persistencia de adversarios potenciales. Como tal, existe la posibilidad de falsos negativos con Trawler si un adversario imita completamente un elemento de la lista de permitidos.
Como ejemplo: PersistenceSniper devolverá todos los servicios de Windows 'no seguros', mientras que Trawler solo devolverá aquellos que coincidan con una regla de detección específica, etc.
Ajuste a su entorno
Trawler admite cargar una lista de permitidos a partir de una 'instantánea' (snapshot). Para ello se requieren dos pasos.
Ejecute '.\trawler.ps1 -snapshot' en una "Imagen Golden" que represente los servidores de su entorno; una vez completado, además del 'detections.csv' estándar, se generará un archivo llamado 'snapshots.csv'.
Este archivo se puede usar como entrada para Trawler cuando se ejecuta en otros hosts y los datos se cargarán dinámicamente como una lista de permitidos para cada detección apropiada.
Eso es todo: todas las detecciones relevantes se basarán en el archivo de instantánea como lista de permitidos para reducir el ruido e identificar cualquier cambio potencial en la imagen base que pueda haber ocurrido.
(La lista de permitidos está implementada para la mayoría de las comprobaciones, pero no para todas; todavía se está implementando activamente)
Redireccionamiento de unidad
A menudo, durante una investigación, los analistas pueden terminar montando una nueva unidad que representa un dispositivo Windows con imagen. Trawler ahora admite parcialmente el escaneo de estas unidades montadas mediante el parámetro '-drivetarget'.
En tiempo de ejecución, Trawler redirigirá las variables temporales a nivel de script para usarlas en la comprobación de artefactos basados en archivos y también intentará cargar las colmenas de registro relevantes (HKLM\SOFTWARE, HKLM\SYSTEM, NTUSER.DAT, USRCLASS.DAT) debajo de HKLM/HKU con el prefijo 'ANALYSIS_'. Trawler también intentará descargar estas colmenas cargadas temporalmente al finalizar el script.
Como ejemplo, si tiene una imagen montada en una ubicación como 'F:\Test' que contiene el sistema de archivos NTFS ('F:\Test\Windows', 'F:\Test\User', etc.), puede invocar Trawler de la siguiente manera;
root@kitploit:~
.\trawler.ps1 -drivetarget "F:\Test"
Tenga en cuenta que, dado que Trawler intenta cargar los archivos de colmena de registro desde la unidad en cuestión, NO funcionará asignar una ruta UNC a un dispositivo remoto en vivo porque esos archivos no serán accesibles debido a bloqueos del sistema. Estoy trabajando en un enfoque que manejará dispositivos remotos en vivo, estén atentos.
¿Qué no se inspecciona al redirigir la unidad?
Procesos en ejecución
Conexiones de red
DLL 'Fantasma'
Consumidores WMI (en desarrollo)
Trabajos BITS (en desarrollo)
Análisis de certificados (en desarrollo)
La mayoría de las otras comprobaciones funcionarán bien porque se basan completamente en la lectura de colmenas de registro o artefactos basados en archivos (o se pueden convertir para hacerlo, como leer directamente XML de tareas en lugar de usar cmdlets integrados).
Cualquier limitación en las comprobaciones al hacer redireccionamiento de unidad se discutirá más a fondo en la Wiki de GitHub.
Imágenes de ejemplo
¿Qué se inspecciona?
Tareas programadas
Usuarios
Servicios
Procesos en ejecución
Conexiones de red
Consumidores de eventos WMI (CommandLine/Script)
Descubrimiento de elementos de inicio
Descubrimiento de trabajos BITS
Modificaciones de la función de accesibilidad de Windows
Existencia de perfil de PowerShell
Documentos de confianza de Office
Complementos de Office desde ubicaciones de confianza
Monitorización de SilentProcessExit
Secuestro de DLL Helper de Winlogon
Secuestro de opciones de ejecución de archivos de imagen
Sombras de RDP
Configuración de UAC para sesiones remotas
DLL de monitores de impresión
Secuestro de paquetes de seguridad y autenticación LSA
DLL de proveedores de tiempo
DLL de procesadores de impresión
Configuración activa de arranque/inicio de sesión
Secuestro de script de inicio de sesión de inicialización de usuario
Secuestro de ejecutable de protector de pantalla
DLL de Netsh
DLL de AppCert
DLL de AppInit
Sombreado de aplicaciones
Secuestro de objetos COM
Secuestro de notificación LSA
Uso de 'Office test'
Uso de Office GlobalDotName
Secuestro de DLL de servicios de terminal
Secuestro de DLL de marcación automática
Abuso de procesador Command AutoRun
Secuestro de Outlook OTM
Secuestro de proveedor de confianza
Escaneo de destino LNK (términos sospechosos, extensiones múltiples, múltiples EXE)
Nombres de DLL 'fantasma' de Windows cargadas en un proceso en ejecución (ej. WptsExtensions.dll sin firmar)
Escaneo de directorios críticos del sistema operativo en busca de EXE/DLL sin firmar
Secuestro de ruta de servicio sin comillas
Secuestro binario PATH
Secuestros comunes de asociación de archivos y palabras clave sospechosas
Búsqueda de certificados sospechosos
Descubrimiento/escaneo de scripts GPO
Anulaciones de DLL de plataforma de desarrollo NLP
Reemplazos de depuración AeDebug/.NET/Script/Process/WER
'Load' de Explorer
Secuestros de Windows Terminal startOnUserLogin
Desajustes de ruta de aplicación
Desajustes de DLL/ruta de imagen de servicio
DLL de extensión GPO
Posibles secuestros COM
Extensiones LSA no estándar
Presencia de DNSServerLevelPluginDll
Secuestro de utilidad Explorer\MyComputer
Comprobación de InitialProgram de servicios de terminal
Programas de inicio de RDP
Comandos de telemetría de Microsoft
Proveedores AMSI no estándar
DLL de error LUI de configuración de Internet
DLL de extensión PeerDist
Comprobaciones de ErrorHandler.CMD
DLL de diagnóstico integrado
DLL auxiliares de MiniDump
DLL de depurador administrado conocido
DLL de capa de compatibilidad WOW64
Secuestro de MSC de visor de eventos
Escaneo de cadenas de desinstalación
DLL de PolicyManager
DLL de billetera SEMgr
Controladores de excepciones en tiempo de ejecución WER
Ayuda HTML (.CHM)
Artefactos de herramientas de acceso remoto (archivos, directorios, claves de registro)
Comprobaciones de DLL de ContextMenuHandler
Presencia de Office AI.exe
Complementos de Notepad++
Secuestros de registro MSDTC
Secuestro de DLL de Narrador (MSTTSLocEnUS.DLL)
Comprobaciones de ubicación de archivo sospechoso
Comprobación de BootVerificationProgram
Comprobaciones de DiskCleanupHandler
Comprobaciones de aislamiento de integridad baja
Software instalado con nombre sospechoso
Estado del modo de restauración de servicios de directorio
Modificaciones del descriptor de seguridad del Administrador de control de servicios
Máquinas virtuales del subsistema de Windows para Linux
Análisis de extensiones de navegador
TODO
Agregar guía de análisis/remediación a cada detección en la Wiki de GitHub (en progreso)
Inspección de controladores de reproducción automática [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers]
Tenga en cuenta que algunas de estas (por supuesto) se detectan más que otras; por ejemplo, no estamos detectando todas las modificaciones de registro posibles, sino inspeccionando ciertas claves en busca de cambios obvios y utilizando la técnica MITRE genérica "Modify Registry" cuando no sea aplicable ninguna otra técnica. Para otros elementos, como el secuestro COM, estamos inspeccionando todas las entradas en la sección de registro correspondiente, verificando con patrones 'conocidos como buenos' y reportando valores desconocidos o no coincidentes, lo que resulta en una superficie de detección mucho más completa para esa técnica en particular.
T1037: Boot or Logon Initialization Scripts
T1037.001: Boot or Logon Initialization Scripts: Logon Script (Windows)
T1037.005: Boot or Logon Initialization Scripts: Startup Items
T1055.001: Process Injection: Dynamic-link Library Injection