Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

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

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Hier ansehen

1 von 61 Anzeige
Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Ähnlich wie Javier Marcos - Detección de amenazas a escala con osquery [rooted2019] (20)

Anzeige

Weitere von RootedCON (20)

Aktuellste (20)

Anzeige

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

×