
Plataforma de grafos para Detección y Respuesta
Grapl es una plataforma SIEM basada en grafos, construida por y para ingenieros de respuesta a incidentes.
Grapl ha cesado operaciones como empresa. Por lo tanto, este código ya no se desarrolla activamente, pero permanecerá disponible en un estado archivado.
Grapl aprovecha las estructuras de datos de grafos en su núcleo para garantizar que puedas consultar y conectar tus datos de manera eficiente, modelar comportamientos complejos de atacantes para la detección, y profundizar fácilmente en comportamientos sospechosos para comprender el alcance completo de una intrusión en curso.
Para una visión más profunda de Grapl, lee esto.
Esencialmente, Grapl tomará registros sin procesar, los convertirá en grafos, y fusionará esos grafos en un Grafo Maestro. Luego orquestará la ejecución de tus firmas de ataque y proporcionará herramientas para realizar tus investigaciones.
Puedes ver algunas de nuestras charlas en BSidesLV o en BSides San Francisco.
Grapl soporta nativamente nodos para:
Grapl soporta nativamente los siguientes formatos de entrada para generar grafos:
Grapl se está desarrollando teniendo en cuenta los plugins: los operadores pueden soportar fácilmente nuevos formatos de registro de entrada y nuevos tipos de nodos.
Ten en cuenta que Grapl aún no está en un estado estable 1.0 y es un proyecto en rápido movimiento. ¡Espera algunos errores menores y cambios importantes!
¿Preguntas? Intenta abrir un issue en este repositorio, o únete al Grapl canal de Slack (Haz clic para invitación).
Identidad
Si estás familiarizado con fuentes de registro como Sysmon, una de las mejores características es que a los procesos se les asignan identidades. Grapl aplica el mismo concepto pero para cualquier tipo de registro compatible, tomando pseudoidentificadores como IDs de proceso y discerniendo identidades canónicas.
Grapl luego combina este concepto de identidad con su enfoque de grafos, facilitando el razonamiento sobre entidades y sus comportamientos. Además, esta propiedad de identidad significa que Grapl almacena solo información única de tus registros, lo que implica que tu almacenamiento de datos crece de manera sublineal con respecto al volumen de registros.
Esto reduce los costos de almacenamiento y te proporciona ubicaciones centrales para ver tus datos, en lugar de tenerlos dispersos en miles de registros. Como ejemplo, dado el identificador canónico de un proceso, puedes ver toda la información del mismo seleccionando el nodo.
Los analizadores son tus firmas de ataque. Son módulos de Python, desplegados en el bucket S3 de Grapl, que se orquestan para ejecutarse ante cambios en el Grafo Maestro de Grapl.
En lugar de que los analizadores intenten determinar un valor binario de "Bueno" o "Malo" para comportamientos de ataque, Grapl aprovecha un concepto de Riesgo, y luego correlaciona automáticamente los riesgos para mostrar las partes más riesgosas de tu entorno.
Los analizadores se ejecutan en tiempo real a medida que se actualiza el grafo maestro, usando operaciones de tiempo constante. El motor de analizadores de Grapl agrupará, paralelizará y optimizará automáticamente tus consultas. Al aprovechar operaciones de tiempo constante y sublineales, Grapl asegura que a medida que tu organización crece, y tu volumen de datos crece con ella, aún puedas confiar en que tus consultas se ejecuten de manera eficiente.
Grapl proporciona una biblioteca de analizadores para que puedas escribir firmas de ataque usando Python puro. Consulta este repositorio de ejemplos.
Aquí hay un breve ejemplo de cómo detectar una ejecución sospechosa de svchost.exe,
class SuspiciousSvchost(Analyzer):
def get_queries(self) -> OneOrMany[ProcessQuery]:
invalid_parents = [
Not("services.exe"),
Not("smss.exe"),
Not("ngentask.exe"),
Not("userinit.exe"),
Not("GoogleUpdate.exe"),
Not("conhost.exe"),
Not("MpCmdRun.exe"),
]
return (
ProcessQuery()
.with_process_name(eq=invalid_parents)
.with_children(
ProcessQuery().with_process_name(eq="svchost.exe")
)
)
def on_response(self, response: ProcessView, output: Any):
output.send(
ExecutionHit(
analyzer_name="Suspicious svchost",
node_view=response,
risk_score=75,
)
)
Mantener tus analizadores en código significa que puedes:
Echa un vistazo al plugin desplegador de analizadores de Grapl para ver cómo puedes mantener tus analizadores en un repositorio git que los despliegue automáticamente al hacer push a master.
Engagements
Grapl proporciona una herramienta para investigaciones llamada Engagement. Los Engagements son un grafo aislado que representa un subgrafo que tus analizadores han considerado sospechoso.
Usando los Jupyter Notebooks alojados en AWS Sagemaker y la biblioteca Python proporcionada por Grapl, puedes expandir cualquier subgrafo sospechoso para abarcar el alcance completo de un ataque. A medida que expandes el alcance del ataque con tu Jupyter notebook, el Grafo de Engagement se actualizará, representando visualmente el alcance del ataque.

Orientado a Eventos y Extensible
Grapl fue construido para ser extendido: ningún servicio puede satisfacer las necesidades de todas las organizaciones. Cada servicio nativo de Grapl funciona enviando y recibiendo eventos, lo que significa que para extender Grapl solo necesitas comenzar a suscribirte a mensajes.
Esto hace que sea trivial extender Grapl o integrarlo en tus servicios existentes.
Grapl también proporciona un sistema de Plugins, actualmente en beta, que permite expandir las capacidades de la plataforma: agregar nodos personalizados y capacidades de consulta.