Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Detección de amenazas a escala con osquery

Detección de amenazas a escala con osquery

Osquery es una herramienta de código abierto que utiliza lenguaje SQL para abstraer la extracción de información del sistema operativo y analizar el estado de la máquina. Fue creada inicialmente por el equipo de Seguridad de Facebook, para la búsqueda proactiva de anomalías en sus redes y sistemas. Su uso se ha extendido en la industria para recolectar datos de los sistemas en funcionamiento, detectar la persistencia de malware, y explorar en busca de indicadores de compromiso conocidos.

La detección de actividades maliciosas con osquery y su despliegue a escala, resulta clave para una respuesta a incidentes efectiva. Desde su uso en sistema individuales, con logs almacenados localmente, hasta formar parte de una red compleja con cientos/miles de hosts, y con gestión bidireccional centralizada.

Javier Marcos

March 30, 2019
Tweet

More Decks by Javier Marcos

Other Decks in Technology

Transcript

  1. ▪ Detección / IR / Ingeniería de Seguridad ▪ Open

    source contributor (github.com/javuto) ▪ (ex) $ whoami
  2. Parte 1: Desmitificando osquery ▪ ¿Qué es osquery? ▪ Introducción

    al CLI: osqueryi ▪ Tablas en osquery ▪ Ejemplos Agenda
  3. Agenda Parte 2: Uso de osquery a escala ▪ ¿Necesitas

    un demonio? osqueryd! ▪ Configuración y flags ▪ Scheduled queries y packs ▪ Rendimiento
  4. 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
  5. ¿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
  6. ¿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?
  7. ¿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
  8. ¿Por qué usar SQL? SELECT pid,name,uid FROM processes WHERE uid

    != 0 [restricciones] [concepto] [atributos]
  9. ¿Por qué usar SQL? WHERE uid != 0 [join] JOIN

    users ON processes.uid=users.uid SELECT pid,name,uid FROM processes [concepto] [atributos] [restricciones]
  10. 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/
  11. 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
  12. => crontab => curl => curl_certificate => deb_packages => device_file

    => device_hash => device_partitions => disk_encryption => dns_resolvers => docker_container_labels => docker_container_mounts => docker_container_networks => docker_container_ports ... osquery> .tables => acpi_tables => apt_sources => arp_cache => augeas => authorized_keys => block_devices => carbon_black_info => carves => chrome_extensions => cpu_time => cpuid osqueryi basics
  13. osqueryi basics osquery> pragma table_info(‘system_info’); +-----+--------------------+---------+---------+------------+----+ | cid | name

    | type | notnull | dflt_value | pk | +-----+--------------------+---------+---------+------------+----+ | 0 | hostname | TEXT | 0 | | 0 | | 1 | uuid | TEXT | 0 | | 0 | | 2 | cpu_type | TEXT | 0 | | 0 | | 3 | cpu_subtype | TEXT | 0 | | 0 | | 4 | cpu_brand | TEXT | 0 | | 0 | | 5 | cpu_physical_cores | INTEGER | 0 | | 0 | | 6 | cpu_logical_cores | INTEGER | 0 | | 0 | | 7 | cpu_microcode | TEXT | 0 | | 0 |
  14. 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
  15. https://osquery.io/schema/3.3.2 ▪ acpi_tables ▪ arp_cache ▪ apps ▪ authorized_keys ▪

    autoexec ▪ battery ▪ block_devices ▪ browser_plugins ▪ certificates ▪ cpu_time ... ▪ cpu_info ▪ crontab ▪ cups_jobs ▪ deb_packages ▪ disk_info ▪ dns_resolvers ▪ docker_info ▪ drivers ▪ etc_hosts ▪ elf_info ... ▪ etc_services ▪ event_taps ▪ file ▪ iptables ▪ kernel_info ▪ known_hosts ▪ launchd ▪ mounts ▪ preferences ... ¡Y muchas más! Tablas de osquery
  16. Ejecución de tablas al invocar osquery> SELECT datetime FROM time;

    +----------------------+ | datetime | +----------------------+ | 2019-03-01T04:16:07Z | +----------------------+ ...
  17. Ejecución de tablas al invocar osquery> SELECT datetime FROM time;

    +----------------------+ | datetime | +----------------------+ | 2019-03-01T04:20:18Z | +----------------------+ ...
  18. Ejecución de tablas al invocar SELECT datetime FROM time; 2019-03-01T04:16:07Z

    ... SELECT datetime FROM time; 2019-03-01T04:20:18Z
  19. Tablas con parámetros osquery> SELECT directory FROM file WHERE path

    = ‘/etc/issue’; +-----------+ | directory | +-----------+ | /etc | +-----------+
  20. Tablas con parámetros osquery> SELECT md5 FROM file JOIN hash

    USING (path) WHERE path = ‘/etc/issue’; +----------------------------------+ | md5 | +----------------------------------+ | b954418e6a50d4d4cb8f02776d867550 | +----------------------------------+
  21. Ejemplos de tablas básicas osquery> SELECT * FROM rpm_packages; osquery>

    SELECT * FROM users; osquery> SELECT * FROM kernel_modules; osquery> SELECT * FROM startup_items;
  22. ¡Ejemplos! ▪ ¿Cuál es el hostname del sistema? ▪ ¿Qué

    usuarios hay en el sistema? ▪ ¿Qué procesos están corriendo?
  23. ¡Ejemplos! ▪ ¿Cuál es el hostname del sistema? ▪ ¿Qué

    usuarios hay en el sistema? ▪ ¿Qué procesos están corriendo? SELECT hostname FROM system_info;
  24. ¡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;
  25. ¡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;
  26. ¡Ejemplos! ▪ ¿Cuál es el usuario y la shell de

    los procesos que están corriendo?
  27. ¡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;
  28. 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/
  29. El demonio osqueryd casos de uso para respuesta a incidentes

    gestión centralizada (backend) sistema operativo, usuarios, servicios configuración logging osqueryd
  30. 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
  31. osquery.conf - options $ osquery[d-i] --config_path /path/to/osquery.conf "options": { "config_plugin":

    "filesystem", "logger_plugin": "filesystem", "schedule_splay_percent": "10", "utc": "true" ... }
  32. osquery.conf - decorators "decorators": { "load": [ "SELECT uuid FROM

    system_info;" ], "always": [ "SELECT pid FROM osquery_info;" ] }
  33. 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
  34. osquery.conf - schedule "schedule": { "example_query1": { "query": "SELECT *

    FROM users;", "interval": 60 }, "example_query2": { "query": "SELECT * FROM processes;", "interval": 3600 }, }
  35. 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
  36. osquery.conf - packs "packs": { "osquery-monitoring": "osquery-monitoring.conf", "incident-response": "incident-response.conf", "it-compliance":

    "it-compliance.conf", "osx-attacks": "osx-attacks.conf", "vuln-management": "vuln-management.conf" "hardware-monitoring": "hardware-monitoring.conf", "ossec-rootkit": "ossec-rootkit.conf", "windows-hardening": "windows-hardening.conf", "windows-attacks": "windows-attacks.conf" },
  37. osquery.conf - packs // incident-response.conf "queries": { "launchd": { "query"

    : "select * from launchd;", "interval" : "3600", "platform" : "darwin", "version" : "1.4.5", }, ...
  38. 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
  39. API remota de osqueryd ▪ Algunas opciones de endpoint TLS

    disponibles ➔ Uptycs ➔ Kolide ➔ CB LiveOps ➔ AlienVault ➔ Zentral ➔ Doorman ➔ SGT ➔ Zentral ➔ Windmill ➔ Kolide
  40. 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
  41. 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) ...
  42. ▪ Consultas de osquery en tiempo (casi) real ➔ Los

    resultados se reciben inmediatamente ➔ Muy útil en investigaciones TLS endpoint: On-demand queries
  43. 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/%%';
  44. TLS Endpoint: File carving // file carving osquery flags --disable_carver=false

    --carver_disable_function=false --carver_start_endpoint=/path/to/start --carver_continue_endpoint=/path/to/continue
  45. ▪ Servicio TLS endpoint para nodos de osquery ▪ En

    internet sin autenticación ▪ Pensado para escalar proporcionalmente osctrl-tls Logs / Resultados Configuración
  46. 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-tls osctrl-admin operator
  47. osctrl-cli ▪ Línea de comandos para osctrl ▪ Utilidad para

    evitar acciones directas en la DB ▪ Pensada para automatizar tareas
  48. 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
  49. 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)