FalconHound está diseñado para ser utilizado junto con un SIEM u otra herramienta de agregación de registros. Una de las dificultades de BloodHound es que es una instantánea en el tiempo. FalconHound incluye funcionalidades que se pueden utilizar para mantener actualizado un gráfico de su entorno. Esto le permite ver su entorno tal como es AHORA, especialmente útil para entornos en constante cambio.
Uno de los aspectos más desafiantes para BloodHound es reunir las membresías locales de grupos y la información de sesión. Como equipo azul, tenemos esta información disponible en nuestros registros. FalconHound se puede utilizar para recopilar esta información y agregarla al gráfico de BloodHound, permitiendo que BloodHound la utilice. Esto es solo un ejemplo de cómo FalconHound puede ser utilizado. Puede usarse para recopilar cualquier información que tenga en sus registros o herramientas de seguridad y agregarla al gráfico de BloodHound.
Además, el gráfico se puede utilizar para activar alertas o generar listas de enriquecimiento. Por ejemplo, si se agrega un usuario a un grupo específico, FalconHound puede consultarse en la base de datos del gráfico para encontrar la ruta más corta a un grupo sensible o de alto privilegio. Si hay una ruta, esto se puede registrar en el SIEM o utilizarse para activar una alerta.
Otros ejemplos de dónde se puede utilizar FalconHound:
- Agregar, eliminar o cronometrar sesiones en el gráfico, basado en eventos de inicio y cierre de sesión.
- Marcar usuarios y computadoras como comprometidos en el gráfico cuando tienen un incidente en Sentinel o MDE.
- Agregar información CVE y si hay un exploit público disponible al gráfico.
- Todo tipo de actividades de Azure.
- Recalcular el camino más corto a grupos sensibles cuando se agrega un usuario a un grupo o tiene un nuevo rol.
- Agregar nuevos usuarios, grupos y computadoras al gráfico.
- Generar listas de enriquecimiento para Sentinel y Splunk, por ejemplo, usuarios Kerberoastable o usuarios con propiedades de ciertas entidades.
Las posibilidades son infinitas aquí. Por favor, agregue más ideas al rastreador de problemas o envíe una solicitud de extracción.
Fuentes y objetivos de datos admitidos
FalconHound está diseñado para utilizarse con BloodHound. Actualmente, FalconHound admite las siguientes fuentes y/o objetivos de datos:
- Azure Sentinel
- Listas de observación de Azure Sentinel
- Splunk
- Microsoft Defender for Endpoint
- Neo4j
- MS Graph API (en una etapa temprana)
- Archivos CSV
Se planea admitir más fuentes y objetivos de datos en el futuro. En este momento, FalconHound solo admite la base de datos Neo4j para BloodHound. El soporte para la API de BH CE y BHE está en desarrollo activo.
Instalación
Dado que FalconHound está escrito en Go, no se requiere instalación. Simplemente descargue el binario de la sección de versiones y ejecútelo. Hay binarios compilados disponibles para Windows, Linux y MacOS. Antes de ejecutarlo, es necesario crear un archivo de configuración.
Requisitos:
- BloodHound, o al menos la base de datos Neo4j por ahora.
- Un SIEM u otra herramienta de agregación de registros. Actualmente, se admiten Azure Sentinel y Splunk.
- Credenciales para cada punto de conexión al que desee acceder, con los permisos requeridos.
Configuración
FalconHound se configura utilizando un archivo YAML. Cada sección del archivo de configuración se explica a continuación.
Uso
Ejecución predeterminada:
Para ejecutar FalconHound, simplemente ejecute el binario y agregue el parámetro -go
para que ejecute todas las consultas en la carpeta de acciones.
./falconhound -go
Listar todas las acciones habilitadas:
Para listar todas las acciones habilitadas, use el parámetro -actionlist
. Esto se debe utilizar en combinación con el parámetro -go
.
./falconhound -actionlist -go
Ejecutar con un conjunto selecto de acciones:
Para ejecutar un conjunto selecto de acciones, use el parámetro -ids
, seguido de uno o una lista de identificaciones de acciones separadas por comas. Esto se debe utilizar en combinación con el parámetro -go
.
./falconhound -ids action1,action2,action3 -go
Ejecutar con un archivo de configuración diferente:
Por defecto, FalconHound buscará un archivo de configuración en el directorio actual. También puede especificar un archivo de configuración usando la bandera -config
.
./falconhound -go -config /path/to/config.yml
Ejecutar con una carpeta de acciones diferente:
Por defecto, FalconHound buscará la carpeta de acciones en el directorio actual. También puede especificar una carpeta diferente usando la bandera -actions-dir
.
./falconhound -go -actions-dir /path/to/actions
Ejecutar con credenciales desde un almacén de claves:
Por defecto, FalconHound utilizará las credenciales en el archivo de configuración config.yml
(o uno cargado personalizado). Al establecer la bandera -keyvault
, FalconHound obtendrá el almacén de claves desde la configuración y recuperará todas las claves desde allí.
./falconhound -go -keyvault
Acciones
Las acciones son el núcleo de FalconHound. Son las consultas que FalconHound ejecutará. Se escriben en el lenguaje nativo de la fuente y el destino y se almacenan en la carpeta de acciones.
Estructura de la carpeta de acciones: La carpeta de acciones se divide en subdirectorios por fuente de consulta. Todos los directorios se procesarán de manera recursiva y todos los archivos YAML se ejecutarán en orden alfabético. Las acciones de Neo4j deben procesarse al final, ya que su salida depende de otras fuentes de datos para tener actualizada la base de datos del gráfico.
Archivos de acción: Todos los archivos son archivos YAML. El archivo YAML contiene la consulta, metadatos y los objetivos de la información consultada. Hay un archivo de plantilla disponible en la carpeta raíz.
Enabled: true
Debug: false
Query: |
MATCH (x:Computer {name:$Computer}) MATCH (y:User {objectid:$TargetUserSid})
MERGE (x)-[r:HasSession]->(y) SET r.since=$Timestamp SET r.source='falconhound'
Parameters:
Computer: Computer
TargetUserSid: TargetUserSid
Timestamp: Timestamp
Targets:
- Name: Neo4j
Enabled: true
Query: |
MATCH (x:Computer {name:$Computer}) MATCH (y:User {objectid:$TargetUserSid})
MERGE (x)-[r:HasSession]->(y) SET r.since=$Timestamp SET r.source='falconhound'
Parameters:
Computer: Computer
TargetUserSid: TargetUserSid
Timestamp: Timestamp
Campo Enabled:
Como su nombre indica, se utiliza para habilitar o deshabilitar una acción. Si se establece en false, la acción no se ejecutará.
Enabled: true
Campo Debug:
Se utiliza para habilitar o deshabilitar el modo de depuración para una acción. Si se establece en true, la acción se ejecutará en modo de depuración.
Debug: false
Campo Query:
El campo Query
es la consulta que se ejecutará contra la fuente. Puede ser una consulta KQL, una consulta SPL o una consulta Cypher según su plataforma de origen. Es importante mantener la consulta lo más exacta posible y devolver solo los campos que necesita.
Query: |
MATCH (x:Computer {name:$Computer}) MATCH (y:User {objectid:$TargetUserSid})
MERGE (x)-[r:HasSession]->(y) SET r.since=$Timestamp SET r.source='falconhound'
Campo Targets:
Cada objetivo tiene varias opciones que se pueden configurar. Todos los objetivos tienen los campos Name
y Enabled
. El campo Name
se utiliza para identificar el objetivo, y el campo Enabled
se utiliza para habilitar o deshabilitar el objetivo.
Targets:
- Name: Neo4j
Enabled: true
Query: |
MATCH (x:Computer {name:$Computer}) MATCH (y:User {objectid:$TargetUserSid})
MERGE (x)-[r:HasSession]->(y) SET r.since=$Timestamp SET r.source='falconhound'
Parameters:
Computer: Computer
TargetUserSid: TargetUserSid
Timestamp: Timestamp
Extensiones al gráfico
Relación: HadSession
Una vez que una sesión ha terminado, en lugar de eliminarla del gráfico, se agregará como una relación entre la computadora y el usuario. La relación se llamará HadSession
. La relación tendrá propiedades como till
, source
y reason
.
{ "till": "2021-08-31T14:00:00Z", "source": "falconhound", "reason": "logoff" }
Propiedades adicionales:
FalconHound agregará las siguientes propiedades a los nodos en el gráfico:
Para la Computadora:
- ‘exploitable’: true/false
- ‘exploits’: lista de CVEs
- ‘exposed’: true/false
- ‘ports’: lista de puertos accesibles desde Internet
- ‘alertids’: lista de identificaciones de alertas
Gestión de credenciales
Las formas actualmente admitidas de proporcionar a FalconHound las credenciales son:
- A través del archivo
config.yml
en el disco. - Secretos de KeyVault. Esto aún requiere un ServicePrincipal con secretos en el archivo YAML.
- Modo mixto.
Implementación
FalconHound está diseñado para ejecutarse como una tarea programada o trabajo cron. Esto le permitirá ejecutarlo regularmente y mantener actualizado su gráfico, alertas y enriquecimientos. Dependiendo de la cantidad de acciones que tenga habilitadas, la cantidad de datos que está procesando y la cantidad de datos que está escribiendo en el gráfico, esto puede llevar un tiempo.
Todos los registros basados en consultas están construidos para ejecutarse cada 15 minutos. Si el procesamiento lleva demasiado tiempo, es posible que deba ajustar esto un poco..
Si es así, se recomienda deshabilitar ciertas acciones. También puede haber cierta superposición, por ejemplo, con las acciones de sesión. Si tiene muchas sesiones, es posible que desee desactivar las acciones de sesión para Sentinel y depender de las de MDE.
Sharphound / Azurehound: Si bien FalconHound está diseñado para utilizarse con BloodHound, no reemplaza a Sharphound y Azurehound. Está diseñado para complementar la recopilación y eliminar el problema del momento en el tiempo de la colección periódica. Aún se recomienda ejecutar Sharphound y Azurehound regularmente, por ejemplo, una vez al día/semana o mes, y FalconHound cada 15 minutos.
Licencia
Este proyecto está bajo la Licencia BSD3, consulte el archivo LICENSE para más detalles. Esto significa que puede usar este software de forma gratuita, incluso en productos comerciales, siempre y cuando nos acredite por ello. No podemos ser responsables de los daños causados por este software.