2. ▪ Detección / IR / Ingeniería de Seguridad
▪ Open source contributor (github.com/javuto)
▪ (ex)
▪ (ahora)
$ whoami
3. Parte 1: Desmitificando osquery
▪ ¿Qué es osquery?
▪ Introducción al CLI: osqueryi
▪ Tablas en osquery
▪ Ejemplos
Agenda
4. Agenda
Parte 2: Uso de osquery a escala
▪ ¿Necesitas un demonio? osqueryd!
▪ Configuración y flags
▪ Scheduled queries y packs
▪ Rendimiento
5. Agenda
Parte 3: Usando la API remota
▪ ¿Que es un endpoint TLS?
▪ Configuración y flags
▪ On-demand queries
▪ File carving
▪ Usando un TLS endpoint
6. ¿Qué es osquery?
▪ Exploración de tu sistema operativo usando SQL
▪ Monitorización basada en sistemas HIDS
🚨 100% uso de OS API, sin forks de execve 🚨
● https://osquery.io
● https://github.com/facebook/osquery
8. ¿Por qué osquery?
▪ ¿Qué hosts corporativos tienen instalada la
extensión de navegador abc123?
▪ ¿Cuántos descriptores de archivos se abrieron
ayer por hora en los sistemas de producción?
▪ ¿Hay alguna máquina enrutando VPN a LAN?
9. ¿Por qué usar SQL?
▪ Los conceptos básicos de SQL son universales
▪ El lenguaje SQL es muy popular entre devs y
administradores de sistema
SELECT pid,name,uid FROM processes
10. ¿Por qué usar SQL?
SELECT pid,name,uid FROM processes
[concepto]
12. ¿Por qué usar SQL?
SELECT pid,name,uid FROM processes
WHERE uid != 0
[restricciones]
[concepto][atributos]
13. ¿Por qué usar SQL?
WHERE uid != 0
[join]
JOIN users ON processes.uid=users.uid
SELECT pid,name,uid FROM processes
[concepto][atributos]
[restricciones]
14. osqueryi
▪ CLI y shell interactiva para lanzar consultas y
ver resultados
▪ Para explorar un host local y manualmente
▪ Una vez definidas las consultas, se pasa a la
automatización
https://osquery.readthedocs.io/en/stable/introduction/using-osqueryi/
15. osquery> .help
Welcome to the osquery shell. Please explore your OS!
You are connected to a transient 'in-memory' virtual database.
.all [TABLE] Select all from a table
.bail ON|OFF Stop after hitting an error
.echo ON|OFF Turn command echo on or off
.exit Exit this program
.features List osquery's features and their statuses
.headers ON|OFF Turn display of headers on or off
.help Show this message
osqueryi basics
18. Tablas de osquery
▪ 229 tablas en la versión 3.3.2
▪ 4 plataformas diferentes
▫ Mac, windows, linux y freebsd
▪ Datos fáciles de recoger y correlar
https://osquery.io/schema/3.3.2
20. Ejecución de tablas al invocar
osquery> SELECT datetime FROM time;
+----------------------+
| datetime |
+----------------------+
| 2019-03-01T04:16:07Z |
+----------------------+
...
21.
22. Ejecución de tablas al invocar
osquery> SELECT datetime FROM time;
+----------------------+
| datetime |
+----------------------+
| 2019-03-01T04:20:18Z |
+----------------------+
...
23. Ejecución de tablas al invocar
SELECT datetime FROM time;
2019-03-01T04:16:07Z
...
SELECT datetime FROM time;
2019-03-01T04:20:18Z
24. Tablas con parámetros
osquery> SELECT directory FROM file WHERE path =
‘/etc/issue’;
+-----------+
| directory |
+-----------+
| /etc |
+-----------+
25. Tablas con parámetros
osquery> SELECT md5 FROM file JOIN hash USING
(path) WHERE path = ‘/etc/issue’;
+----------------------------------+
| md5 |
+----------------------------------+
| b954418e6a50d4d4cb8f02776d867550 |
+----------------------------------+
26. Ejemplos de tablas básicas
osquery> SELECT * FROM rpm_packages;
osquery> SELECT * FROM users;
osquery> SELECT * FROM kernel_modules;
osquery> SELECT * FROM startup_items;
27. ¡Ejemplos!
▪ ¿Cuál es el hostname del sistema?
▪ ¿Qué usuarios hay en el sistema?
▪ ¿Qué procesos están corriendo?
28. ¡Ejemplos!
▪ ¿Cuál es el hostname del sistema?
▪ ¿Qué usuarios hay en el sistema?
▪ ¿Qué procesos están corriendo?
SELECT hostname FROM system_info;
29. ¡Ejemplos!
▪ ¿Cuál es el hostname del sistema?
▪ ¿Qué usuarios hay en el sistema?
▪ ¿Qué procesos están corriendo?
SELECT hostname FROM system_info;
SELECT uid, username FROM users;
30. ¡Ejemplos!
▪ ¿Cuál es el hostname del sistema?
▪ ¿Qué usuarios hay en el sistema?
▪ ¿Qué procesos están corriendo?
SELECT hostname FROM system_info;
SELECT uid, username FROM users;
SELECT pid, name, path FROM processes;
32. ¡Ejemplos!
▪ ¿Cuál es el usuario y la shell de los procesos
que están corriendo?
SELECT p.pid, p.name, p.path, u.username,
u.shell FROM processes AS p JOIN users AS u ON
p.uid = u.uid;
33. El demonio osqueryd
▪ Init, systemd, launchd, servicio windows
▪ Ejecución de queries programadas
▪ Logs de estado y resultados
▪ Muchísimas opciones de configuración
https://osquery.readthedocs.io/en/stable/introduction/using-osqueryd/
34. El demonio osqueryd
casos de uso para respuesta a incidentes
gestión centralizada (backend)
sistema operativo, usuarios, servicios
configuración logging
osqueryd
35. osquery.flags
▪ Flag para inicializar la configuración
$ osqueryd --flagfile /etc/osquery/osquery.flags
▪ Muy común usar chef/puppet para flags
$ osqueryd/osqueryi --help
38. Scheduled queries
query: La consulta que se va a ejecutar
interval: Frecuencia de ejecución en segundos
platform: Limita la consulta a ésta plataforma
shard: Ejecuta la consulta en éste % de hosts
snapshot: Devuelve todos los resultados siempre
40. Query packs
query: La consulta que se va a ejecutar
interval: Frecuencia de ejecución en segundos
version: Versión de osquery para ejecutar
description: Descripción de la consulta
value: Detalles de por qué ésta consulta
43. osqueryd watchdog
▪ Por defecto osqueryd corre en un único hilo
▪ Periódicamente se analiza el uso de CPU/memoria
▪ reiniciar si: > 60% uso de CPU durante 9 s
▪ reiniciar si: > 200M memoria asignada
44. API remota de osqueryd
▪ Algunas opciones de endpoint TLS disponibles
➔ Uptycs
➔ Kolide
➔ CB LiveOps
➔ AlienVault
➔ Zentral
➔ Doorman
➔ SGT
➔ Zentral
➔ Windmill
➔ Kolide
45. API remota de osqueryd
▪ Plugin TLS permite la gestión centralizada de osquery
--tls_client_cert Optional path to a TLS client-auth PEM certificate
--tls_client_key Optional path to a TLS client-auth PEM private key
--tls_hostname TLS/HTTPS hostname for Config, Logger, and Enroll
--tls_server_certs Optional path to a TLS server PEM certificate(s)
bundle
47. Endpoint TLS básico
▪ Enroll
POST /path/to/enroll
▪ Configuración
POST /path/to/config
https://osquery.readthedocs.io/en/stable/deployment/remote/
▪ Logs
POST /path/to/log
▪ Extras
(On-demand queries)
(File carving)
...
48. ▪ Consultas de osquery en tiempo (casi) real
➔ Los resultados se reciben inmediatamente
➔ Muy útil en investigaciones
TLS endpoint: On-demand queries
50. TLS Endpoint: File carving
▪ Extracción de ficheros a través de osquery
➔ Recibidos inmediatamente
➔ Ficheros o directorios completos
SELECT * FROM carves WHERE carve=1 AND path LIKE
'/home/user/%%';
53. ▪ Servicio TLS endpoint para nodos de osquery
▪ En internet sin autenticación
▪ Pensado para escalar proporcionalmente
osctrl-tls
Logs / Resultados
Configuración
54. osctrl-admin
▪ Servicio de administración del TLS endpoint
▪ Comunicación con osctrl-tls mediante DB
▪ Puede estar en una red privada, detrás de VPN
osctrl-tlsosctrl-adminoperator
55. osctrl-cli
▪ Línea de comandos para osctrl
▪ Utilidad para evitar acciones directas en la DB
▪ Pensada para automatizar tareas
57. osctrl TODO
▪ Loggers para ELK, Kinesis, Kafka…
▫ Idealmente con un sistema modular
▪ Soporte de s3 para file carving
▪ Caché con Redis para osctrl-tls
▪ Documentación y tests
58. Bonus: osquery avanzado
▪ FIM (File Integrity Monitoring)
▪ Tablas de eventos / audit
▪ Extensiones de osquery (C/C++, Go, Python)
▪ Tablas custom con ATC (Automated Table
Construction)