
Aggrokatz es una extensión de plugin agresor para Cobalt Strike que permite que pypykatz interactúe con los beacons de forma remota y permite analizar archivos de volcado de LSASS y archivos de hive del registro para extraer credenciales y otros secretos almacenados sin descargar el archivo y sin subir ningún código sospechoso al beacon.

aggrokatz es una extensión de plugin Aggressor para CobaltStrike que permite que pypykatz interactúe con los beacons de forma remota.
La versión actual de aggrokatz permite que pypykatz analice archivos de volcado LSASS y archivos de Hives del Registro para extraer credenciales y otros secretos almacenados sin descargar el archivo y sin subir ningún código sospechoso al beacon (Cobalt Strike ya está allí de todas formas).
En el futuro, este proyecto pretende proporcionar características adicionales para operaciones encubiertas, como la búsqueda y descifrado de todos los secretos de DPAPI/kerberoasting, etc.
Hemos publicado un breve blog post para el lanzamiento de esta herramienta, que también incluye algunas capturas de pantalla.
El volcado de LSASS/Registro no es el objetivo de este proyecto, solo el análisis. Razones:
CredBandit que vuelca los bytes sin procesar al disco en lugar de base64. Herramienta genial, échale un vistazo.En el cliente de CS, no use "reload" ni intente descargar y volver a cargar manualmente el script si lo ha modificado. DEBE descargarlo, cerrar el cliente y abrirlo de nuevo, luego cargar el script modificado. ¡De lo contrario, tendrá varias versiones ejecutándose simultáneamente y se producirán un montón de errores y comportamientos extraños!
Mientras analiza archivos LSASS/registro en el extremo remoto, no interactúe con el beacon específico en el que inició el script. Normalmente no causaría problemas, pero no puedo dar garantías.
pycobalt instalado y configurado. Hay un readme en su página de github.pypykatz versión >=0.4.8aggressor.cna de pycobalt esté configurado y conozca la ubicación de su intérprete de Pythonaggrokatz.cna para que apunte a pycobalt.cnaView > Script Console y Cobalt Strike > Script Manager. Usando Script Manager cargue el script aggkatz.cna.aggkatz.cna se cargó correctamente, tendrá un nuevo elemento de menú pypykatz al hacer clic derecho en un beacon.Script Console.Script Console como en la propia ventana del Beacon.LSASS file: La ubicación del archivo lsass.dmp en la computadora remota. También puede usar rutas UNC para acceder a archivos lsass.dmp compartidos a través de SMBchunksize : La cantidad máxima que se leerá de una sola vezBOF file : El archivo BOF (Beacon Object File) que permite lecturas fragmentadas. Este archivo se cargará y ejecutará (en memoria) cada vez que se lea un nuevo fragmento.(module) : Especifica qué módulos se analizarán. Por defecto: allOutput : Especifica el/los formato(s) de salidaPopulate Credential tab : Después de un análisis exitoso, todas las credenciales obtenidas estarán disponibles en la pestaña de Credenciales de Cobalt Strike. Esta característica está en betaDelete remote file after parsing : Después de un análisis exitoso, el archivo de volcado LSASS se eliminará del destinoSYSTEM file: La ubicación del archivo SYSTEM.reg en la computadora remota. También puede usar rutas UNC para acceder a archivos compartidos a través de SMBSAM file (optional): La ubicación del archivo SAM.reg en la computadora remota. También puede usar rutas UNC para acceder a archivos compartidos a través de SMBSECURITY file (optional): La ubicación del archivo SECURITY.reg en la computadora remota. También puede usar rutas UNC para acceder a archivos compartidos a través de SMBSOFTWARE file (optional): La ubicación del archivo SOFTWARE.reg en la computadora remota. También puede usar rutas UNC para acceder a archivos compartidos a través de SMBchunksize : La cantidad máxima que se leerá de una sola vezBOF file : El archivo BOF (Beacon Object File) que permite lecturas fragmentadas. Este archivo se cargará y ejecutará (en memoria) cada vez que se lea un nuevo fragmento.Output : Especifica el/los formato(s) de salidaEl BOF de lectura de archivos actualmente admite lecturas de archivos de hasta 4Gb. Esto se puede ampliar con algunas modificaciones, pero hasta ahora no se han observado archivos tan grandes.
Normalmente, el analizador de pypykatz realiza una serie de operaciones de lectura de archivos en el disco, pero con la ayuda de aggrokatz, estas operaciones de lectura se canalizan al beacon utilizando un BOF (Beacon Object File) especialmente diseñado que permite leer el contenido del archivo remoto en fragmentos. Esto permite que pypykatz extraiga todos los secretos de los archivos remotos sin leer todo el archivo, solo tomando los fragmentos necesarios donde se encuentran los secretos.
Para tener una visión completa de todo el proceso, debemos resaltar dos partes:
pypykatz con CobaltStrikepypykatz realiza la extracción de credenciales sin leer todo el archivoCobaltStrike (agente) está escrito en Java, pypykatz está escrito en Python. Esto es un problema. Por suerte para nosotros, una entidad desconocida creó pycobalt que proporciona una interfaz ordenada entre ambos mundos, completa con APIs útiles que se pueden invocar directamente desde Python. A pesar de que pycobalt es una pieza de ingeniería maravillosa, hay algunos problemas/inconvenientes que debemos señalar:
pycobalt:pycobalt se mantendrá en el futuro.pycobalt.pycobalt y CobaltStrike. Esto da como resultado que algunas llamadas a la API devuelvan bytes que no se pueden usar porque algunos bytes se alteran por el codificador. Al revisar el código, concluimos que la mayoría de los problemas de codificación/descodificación se deben a que pycobalt usa STDOUT/STDIN para comunicarse con el proceso de Java.bof_pack, que es crucial para este proyecto, tuvo que ser implementada como un script puramente Aggressor e invocada solo desde Python usando estructuras de datos básicas (string e int) y no usando bytes.pycobalt sin soporte de subprocesos (threading). Bueno, al menos observamos que los subprocesos se rompen aleatoriamente, pero algo esperábamos esto.