Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]

95 views

Published on

Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]

  1. 1. Detección de amenazas a escala con osquery Javier Marcos @javutin
  2. 2. ▪ Detección / IR / Ingeniería de Seguridad ▪ Open source contributor (github.com/javuto) ▪ (ex) ▪ (ahora) $ whoami
  3. 3. Parte 1: Desmitificando osquery ▪ ¿Qué es osquery? ▪ Introducción al CLI: osqueryi ▪ Tablas en osquery ▪ Ejemplos Agenda
  4. 4. Agenda Parte 2: Uso de osquery a escala ▪ ¿Necesitas un demonio? osqueryd! ▪ Configuración y flags ▪ Scheduled queries y packs ▪ Rendimiento
  5. 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. 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
  7. 7. ¿Quien usa osquery?
  8. 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. 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. 10. ¿Por qué usar SQL? SELECT pid,name,uid FROM processes [concepto]
  11. 11. ¿Por qué usar SQL? SELECT pid,name,uid FROM processes [atributos] [concepto]
  12. 12. ¿Por qué usar SQL? SELECT pid,name,uid FROM processes WHERE uid != 0 [restricciones] [concepto][atributos]
  13. 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. 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. 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
  16. 16. => 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
  17. 17. 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 |
  18. 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
  19. 19. 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
  20. 20. Ejecución de tablas al invocar osquery> SELECT datetime FROM time; +----------------------+ | datetime | +----------------------+ | 2019-03-01T04:16:07Z | +----------------------+ ...
  21. 21. Ejecución de tablas al invocar osquery> SELECT datetime FROM time; +----------------------+ | datetime | +----------------------+ | 2019-03-01T04:20:18Z | +----------------------+ ...
  22. 22. Ejecución de tablas al invocar SELECT datetime FROM time; 2019-03-01T04:16:07Z ... SELECT datetime FROM time; 2019-03-01T04:20:18Z
  23. 23. Tablas con parámetros osquery> SELECT directory FROM file WHERE path = ‘/etc/issue’; +-----------+ | directory | +-----------+ | /etc | +-----------+
  24. 24. Tablas con parámetros osquery> SELECT md5 FROM file JOIN hash USING (path) WHERE path = ‘/etc/issue’; +----------------------------------+ | md5 | +----------------------------------+ | b954418e6a50d4d4cb8f02776d867550 | +----------------------------------+
  25. 25. Ejemplos de tablas básicas osquery> SELECT * FROM rpm_packages; osquery> SELECT * FROM users; osquery> SELECT * FROM kernel_modules; osquery> SELECT * FROM startup_items;
  26. 26. ¡Ejemplos! ▪ ¿Cuál es el hostname del sistema? ▪ ¿Qué usuarios hay en el sistema? ▪ ¿Qué procesos están corriendo?
  27. 27. ¡Ejemplos! ▪ ¿Cuál es el hostname del sistema? ▪ ¿Qué usuarios hay en el sistema? ▪ ¿Qué procesos están corriendo? SELECT hostname FROM system_info;
  28. 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; SELECT uid, username FROM users;
  29. 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; SELECT pid, name, path FROM processes;
  30. 30. ¡Ejemplos! ▪ ¿Cuál es el usuario y la shell de los procesos que están corriendo?
  31. 31. ¡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;
  32. 32. 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/
  33. 33. El demonio osqueryd casos de uso para respuesta a incidentes gestión centralizada (backend) sistema operativo, usuarios, servicios configuración logging osqueryd
  34. 34. 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
  35. 35. 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" ... }
  36. 36. osquery.conf - decorators "decorators": { "load": [ "SELECT uuid FROM system_info;" ], "always": [ "SELECT pid FROM osquery_info;" ] }
  37. 37. 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
  38. 38. osquery.conf - schedule "schedule": { "example_query1": { "query": "SELECT * FROM users;", "interval": 60 }, "example_query2": { "query": "SELECT * FROM processes;", "interval": 3600 }, }
  39. 39. 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
  40. 40. 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" },
  41. 41. osquery.conf - packs // incident-response.conf "queries": { "launchd": { "query" : "select * from launchd;", "interval" : "3600", "platform" : "darwin", "version" : "1.4.5", }, ...
  42. 42. 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
  43. 43. API remota de osqueryd ▪ Algunas opciones de endpoint TLS disponibles ➔ Uptycs ➔ Kolide ➔ CB LiveOps ➔ AlienVault ➔ Zentral ➔ Doorman ➔ SGT ➔ Zentral ➔ Windmill ➔ Kolide
  44. 44. 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
  45. 45. Endpoint TLS para osquery ... Resultados Logs Configuración TLS endpoint
  46. 46. 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) ...
  47. 47. ▪ Consultas de osquery en tiempo (casi) real ➔ Los resultados se reciben inmediatamente ➔ Muy útil en investigaciones TLS endpoint: On-demand queries
  48. 48. // on-demand queries osquery flags --disable_distributed=false --distributed_interval=10 --distributed_plugin=tls --distributed_tls_max_attempts=3 --distributed_tls_read_endpoint=/path/to/read --distributed_tls_write_endpoint=/path/to/write TLS endpoint: On-demand queries
  49. 49. 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/%%';
  50. 50. 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
  51. 51. osctrl: Arquitectura de servicios Resultados Logs Configuración osctrl-tls osctrl-admin operator
  52. 52. ▪ Servicio TLS endpoint para nodos de osquery ▪ En internet sin autenticación ▪ Pensado para escalar proporcionalmente osctrl-tls Logs / Resultados Configuración
  53. 53. 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
  54. 54. osctrl-cli ▪ Línea de comandos para osctrl ▪ Utilidad para evitar acciones directas en la DB ▪ Pensada para automatizar tareas
  55. 55. Demostración!
  56. 56. 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
  57. 57. 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)
  58. 58. Documentación osquery ▪ Wiki https://osquery.readthedocs.io ▪ Código https://osquery.io https://osquery-slack.herokuapp.com
  59. 59. ¿Alguna pregunta?
  60. 60. ¡Muchas gracias! @javutin @javuto

×