Acerca de Consultas
Las consultas de Cloud Guard permiten crear consultas para obtener información sobre el estado de los recursos. Puede volver a ejecutar consultas pasadas, guardar consultas favoritas y crear consultas bajo demanda.
La seguridad de instancias, que ejecuta OSQuery en el capó, soporta consultas SQL tal y como las entiende SQLite. Estas consultas SQL pueden inspeccionar sus hosts casi en tiempo real para detectar amenazas, detectar detecciones o supervisar operaciones generales.
Puede ejecutar consultas una vez o convertir consultas que ya haya ejecutado en consultas programadas para ejecutarlas con una frecuencia definida y enviar resultados al servicio OCI Logging para crear problemas de Cloud Guard o exportar información a un SIEM 3P. Además, puede volver a ejecutar consultas que ya se han ejecutado.
Las consultas solo pueden contener una sentencia de consulta por solicitud.
Consultas bajo demanda
Una consulta bajo demanda o personalizada es una consulta puntual escrita mediante OSQuery que utiliza consultas SQL compatibles con SQLite. La seguridad de instancia ejecuta la consulta en un destino.
Puede ejecutar una consulta bajo demanda en una sola instancia y validar los resultados antes de ejecutarla en todo el conjunto.
Puede volver a ejecutar las consultas y guardarlas como favoritas para volver a ejecutarlas.
Algunos aspectos que debe tener en cuenta al crear y utilizar consultas:
- La ejecución de consultas en entornos de producción puede afectar a los recursos de CPU y memoria, de modo que:
- Limite los grupos de usuarios con acceso a las consultas.
- Pruebe las consultas en una sola instancia antes de ejecutarlas en todo el conjunto.
Los resultados de las consultas bajo demanda se suprimen automáticamente después de dos días.
Consultas programadas
Las consultas programadas se crean a partir de consultas ejecutadas anteriormente que ahora desea ejecutar periódicamente en todo el conjunto para que pueda recopilar los resultados en bruto para el procesamiento posterior. Seleccione la consulta y elija los destinos para ejecutarla, defina la frecuencia de ejecución y configure el servicio Logging para registrar los resultados.
Control de acceso a consultas
Puede controlar el acceso a las consultas mediante la creación de grupos dinámicos y el uso de políticas. Consulte:
Acerca de OSquery
Las consultas son SQLite SQL comprensible creado con el lenguaje SQL OSquery.
OSquery es un agente de host multiplataforma, de código abierto y con rendimiento que le permite obtener visibilidad e información sobre su flota. Puede recopilar y normalizar datos independientemente del sistema operativo al tiempo que aumenta la visibilidad en toda la infraestructura. OSquery puede ayudar a cualquier equipo de seguridad con detección de amenazas, análisis forense y detección de intrusiones al proporcionar vistas en tiempo real de cada proceso en ejecución y conexión de red. OSquery viene con soporte de cientos de tablas que cubren todo, desde procesos en ejecución hasta extensiones de núcleo cargadas.
Introducción a OSquery
La recopilación de los datos correctos requiere hacer las preguntas correctas. Para cualquier persona que empiece, debe conocer la ubicación de los datos para saber cómo solicitarlos. La única manera de hacer las preguntas correctas es entender cómo hacer, y vuelve a conocer el esquema.
Comprenda el esquema: https://osquery.io/schema/5.5.1/.
A partir del 7 de mayo de 2024, hay 274 tablas en el esquema. Puede utilizar todas las tablas, excepto:
- Tablas con
_events
en el nombre. - Tablas que requieren soporte de YARA.
- Tablas
curl
ycarves
.
Mejores prácticas para consultas
Siga las mejores prácticas que se indican a continuación:
- Recuerde que las consultas solo pueden contener una sentencia de consulta por solicitud.
- Formatear la consulta para que sea fácil de leer y mantenerla simple.
- Utilice las búsquedas Join y Sub con criterio.
- Defina la información que desea recopilar y amplíe la consulta a esa información.
Por ejemplo, si está interesado en ejecutar procesos que podrían consumir muchos recursos en la instancia, podría escribir
SELECT * from processes
Pero eso generaría un gran volumen de datos, posiblemente la mayoría innecesarios.
Una mejor práctica sería seleccionar solo las columnas que necesita y definir un orden y un límite.
A continuación, se muestra un ejemplo que le ofrece una tabla con un formato adecuado para los 10 procesos principales por consumo de memoria.
SELECT pid, name, ROUND((total_size * '10e-7'), 2) AS memory_used FROM processes ORDER BY total_size DESC LIMIT 10;
Consultar paquetes
Los paquetes de consultas OSquery son conjuntos de consultas predefinidos o personalizados que se organizan por tipo, como cumplimiento o gestión de vulnerabilidades. Puede utilizar paquetes de consultas para ayudarle a comprender cómo responde el sistema a los juegos de consultas y, si es necesario, adaptar las consultas a su entorno.
Obtenga más información sobre los paquetes de consultas en osquery.readthedocs.io, Packs de consultas.
Puede encontrar paquetes de consultas útiles en línea, por ejemplo, este en GitHub, https://github.com/osquery/osquery/tree/master/packs.
Consultas de ejemplo
Para empezar, puede ejecutar algunas consultas locales básicas, como usuarios SELECT * FROM
o SELECT * FROM processed LIMIT 10
, para saber cómo funcionan las tablas.
Además, hemos elaborado una lista de consultas sugeridas para ayudarle a ponerse en marcha.
- Usuarios (
users
): busque todas las cuentas de usuario locales que existen en una máquina.Linux (Ubuntu):
SELECT * FROM users WHERE gid < 65534 AND uid >= 1000;
Nota
uid 1000
es donde los usuarios suelen iniciar en LinuxLinux: esta consulta busca todos los usuarios que tienen shells de inicio de sesión reales (no
bin/false
nibin/true
, con permisos para que vivan en diferentes lugares, por ejemplo,/usr/bin/false
o/bin/false
.SELECT * FROM users WHERE shell NOT LIKE '%false' AND shell NOT LIKE '%true';
- Process Open Sockets (
process_open_sockets
): busca procesos que realizan conexiones de red, excepto conexiones web.SELECT s.pid, p.name, local_address, remote_address, family, protocol, local_port, remote_port FROM process_open_sockets s JOIN processes p ON s.pid = p.pid WHERE remote_port NOT IN (80, 443) AND local_port NOT IN (0) AND family = 2;
- Puertos de escucha (
listening_ports
): busca puertos abiertos en un sistema.SELECT DISTINCT p.pid, p.name, l.port FROM listening_ports AS l JOIN processes as p ON l.pid = p.pid WHERE l.address = '0.0.0.0';
- Usuarios conectados (
logged_in_users
): muestra quién está conectado actualmente a un sistema.SELECT liu.*, p.name, p.cmdline, p.cwd, p.root FROM logged_in_users liu, processes p WHERE liu.pid = p.pid;
- Archivo (
file
): devuelve información sobre el archivo especificado en el disco. Las siguientes consultas buscan todos los archivos de todas las carpetas de descargas de usuario en un nivel de profundidad de carpeta.Linux:
SELECT file.path, users.username AS owner, groups.groupname AS groups, datetime(file.btime,'unixepoch') AS created, datetime(file.mtime,'unixepoch') AS last_mod, ROUND((file.size * 10e-7),4) AS size_mb FROM file JOIN users USING (uid) JOIN groups USING (gid) WHERE path LIKE '/home/%/Downloads/%%' ORDER BY last_mod DESC;
Windows::
SELECT file.path, users.username AS owner, datetime(file.btime,'unixepoch') AS created, datetime(file.mtime,'unixepoch') AS last_mod, ROUND((file.size * 10e-7),4) AS size_mb FROM file JOIN users USING (uid) WHERE path LIKE 'c:\Users\%\Downloads\%%' ORDER BY last_mod DESC;