
Herramientas de Reconocimiento de Ataques Dirigidos en C#
Este es un ensamblado .NET personalizado que realiza una serie de actividades de reconocimiento situacional. Hay varios conjuntos de funcionalidades actuales:
No tenía ni idea de que GhostPack se estaba desarrollando cuando escribí esto; terminamos publicando nuestras herramientas más o menos al mismo tiempo. La realidad es que GhostPack ahora tiene muchas más funcionalidades. Estoy eliminando la función PrivescCheck porque SharpUp cubre toda su funcionalidad y más.
El punto clave es que todo está implementado en .NET puro, por lo que no se necesita PowerShell.
Se configura y controla mediante parámetros de línea de comandos, lo que lo hace adecuado para usar con la directiva execute-assembly de Beacon.
Esto obtiene una serie de datos del host. Tenga en cuenta que puede haber MUCHA salida. Mostrará:
El verbo 'basic' debe pasarse en la línea de comandos, seguido de la verificación específica requerida. Si se pasa la palabra 'all' como segundo parámetro, se realizarán todas las verificaciones.
Tenga en cuenta que si se usa 'all', se incluye automáticamente una 'proxycheck http://www.google.com'. Consulte la sección proxycheck para más detalles.
Realizar todas las verificaciones básicas: beacon> execute-assembly /tmp/Reconerator.exe o beacon> execute-assembly /tmp/Reconerator.exe basic all
Realizar solo la enumeración de MRU: beacon> execute-assembly /tmp/Reconerator.exe basic mru
Listar solo las unidades mapeadas: beacon> execute-assembly /tmp/Reconerator.exe basic mappeddrives
Razonablemente seguro. Esto consulta el registro del sistema; es poco probable que sea monitoreado.
Esto permite realizar una consulta LDAP. La forma más fácil de demostrarlo es mediante un ejemplo.
Esto mostrará todos los usuarios del dominio 'dc=stufus,dc=lan' con W2K8DC como controlador de dominio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "objectClass=user" 0
Esto mostrará un máximo de 5 usuarios en el dominio 'dc=stufus,dc=lan' con W2K8DC como controlador de dominio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "objectClass=user" 5
Esto mostrará todos los miembros del grupo de administradores del dominio en el dominio 'dc=stufus,dc=lan' con W2K8DC como controlador de dominio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "(&(objectClass=group)(cn=Domain Admins))" 0
Esto mostrará todos los miembros de los grupos de administradores del dominio o administradores empresariales en el dominio 'dc=stufus,dc=lan' con W2012DC como controlador de dominio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2012DC/dc=stufus,dc=lan" "(&(objectClass=group)(|(cn=Enterprise Admins)(cn=Domain Admins)))" 0
Esto generará tráfico de red hacia el controlador de dominio que especifique. Para evitar dudas, utiliza LDAP (a diferencia de RPC o similar).
Esto realiza una consulta DNS utilizando el servidor DNS del host.
Resolver www.google.com:
beacon> execute-assembly /tmp/Reconerator.exe resolvehost www.google.com
Esto generará una consulta DNS al controlador de dominio, pero es poco probable que algo lo marque como alerta debido al gran volumen de solicitudes DNS legítimas.
Esto permite interactuar con Windows Search (anteriormente Servicio de Indexación de Windows) lo que permite buscar archivos y carpetas interesantes (y su contenido) muy rápidamente. Los correos electrónicos suelen estar indexados, pero las carpetas de red no, por lo que puede no ser perfecto para buscar directorios personales de usuarios si están almacenados de forma remota. Sin embargo, es muy rápido.
La interfaz de Windows Search es similar a SQL; esta implementación permite, en efecto, especificar el contenido de la cláusula 'WHERE'. Es más fácil explicarlo con ejemplos, pero necesitará leer MSDN si quiere conocer todos los criterios posibles.
Encontrar todo lo que ha sido indexado y que contenga la palabra 'password' en alguna parte (es decir, busca en el contenido de archivos y correos electrónicos):
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "CONTAINS('password')"
Encontrar todo lo que ha sido indexado y que tenga la palabra 'stufus' en la ruta o nombre de archivo:
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "System.ItemPathDisplay LIKE '%stufus%'"
Encontrar todo lo que ha sido indexado y que tenga la palabra 'stufus' en el nombre de archivo O contenga la palabra 'secret':
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "System.ItemName LIKE '%stufus%' OR CONTAINS('secret')"
No tengo conocimiento de nada que pueda marcar esto como sospechoso.
Esto devuelve el servidor proxy que se usaría para visitar una URL determinada. Esto es para lidiar con la situación donde pueden haber diferentes proxies para diferentes URLs, o varias exclusiones complejas implementadas. La URL de interés se pasa como parámetro.
Tenga en cuenta que si se especifica 'basic all' (ver arriba), automáticamente incluye un proxycheck a http://www.google.com, asumiendo que la mayoría de las organizaciones tienen un proxy de salida para todo el acceso a internet no interno.
Mostrar el servidor proxy que se usará al visitar www.google.com:
beacon> execute-assembly /tmp/Reconerator.exe proxycheck www.google.com
Mostrar el servidor proxy que se usará al visitar https://www.mwrinfosecurity.com:
beacon> execute-assembly /tmp/Reconerator.exe proxycheck https://www.mwrinfosecurity.com
Esto es una actividad local y legítima; no tengo conocimiento de nada que pueda marcarlo como sospechoso.
Esto explorará una serie de vectores de escalada de privilegios y reportará si son posibles o no. Actualmente, ese número es 1.
Al igual que en el módulo BASIC anterior, se puede especificar privesccheck all en la línea de comandos para intentar todas las verificaciones, o se puede especificar una verificación concreta si se desea.
El verbo 'basic' debe pasarse en la línea de comandos, seguido de la verificación específica requerida. Si se pasa la palabra 'all' como segundo parámetro, se realizarán todas las verificaciones.
| Verificación | Descripción |
|---|---|
| alwaysinstallelevated | Determina si la clave 'AlwaysInstallElevated' está configurada en 1 o no. Si está configurada, esto ejecutará cualquier archivo MSI como administrador local. |
| Verificación | Notas |
|---|---|
| alwaysinstallelevated | Esto es una consulta local al registro; es poco probable que algo lo marque como malicioso. |
Intentar todas las verificaciones de escalada de privilegios:
beacon> execute-assembly /tmp/Reconerator.exe privesccheck all
Verificar solo si la clave de registro AlwaysInstallElevated está configurada:
beacon> execute-assembly /tmp/Reconerator.exe privesccheck alwaysinstallelevated
Compile esto en Visual Studio 2019. Actualmente tiene como objetivo .NET v4. Puede cambiarlo en las preferencias de compilación si lo desea.
| Verificación | Descripción |
|---|
| env | Muestra todas las variables de entorno. |
| info | Muestra la dirección IP del host y el identificador de versión del SO mayor/menor. |
| mru | Busca en varias listas de "usados más recientemente". Actualmente incluyen el historial del cuadro Ejecutar y el MRU de archivos y rutas de Office para todas las versiones de Word, Excel, PowerPoint, Access, Publisher y Visio. También muestra la ubicación de la carpeta "Recientes" especial. |
| favourites | Muestra las URLs almacenadas en la carpeta de favoritos (básicamente los marcadores del usuario). Actualmente no admite subcarpetas; necesito arreglarlo. |
| mappeddrives | Muestra las unidades de red mapeadas de la sesión del usuario. Útil para encontrar rápidamente recursos compartidos centrales y directorios personales. Si está mapeado, probablemente contenga datos útiles. |
| installedapplications | Enumera las aplicaciones que se han instalado. Esto incluye aplicaciones instaladas como administrador (en la máquina local) Y aplicaciones instaladas por el usuario actual. Se listan en diferentes lugares del registro. |
| onedrive | Muestra información sobre OneDrive (incluyendo sitios de equipo/inquilinos que se sincronizan). |