Informazioni sulle query
Le query Cloud Guard ti consentono di creare query per ottenere informazioni sullo stato delle tue risorse. È possibile rieseguire query passate, salvare query preferite e creare query su richiesta.
La sicurezza dell'istanza, che esegue OSQuery sotto il cofano, supporta le query SQL come interpretato da SQLite. Queste query SQL possono ispezionare gli host quasi in tempo reale per rilevare minacce, rilevamenti o monitoraggio delle operazioni generali.
È possibile eseguire le query una sola volta o convertire le query già eseguite in query pianificate da eseguire a una cadenza definita e inviare i risultati al servizio di log OCI per creare problemi Cloud Guard o esportare le informazioni in un SIEM 3P. È inoltre possibile rieseguire le query già eseguite.
Le query possono contenere una sola istruzione di query per richiesta.
Query su richiesta
Una query su richiesta o personalizzata è una query singola scritta utilizzando OSQuery che utilizza query SQL conformi a SQLite. La query viene eseguita dalla sicurezza dell'istanza in una destinazione.
Puoi eseguire una query su richiesta su una singola istanza e convalidare i risultati prima di eseguirla nella flotta.
È possibile rieseguire le query e salvarle come preferite per essere eseguite di nuovo.
Alcune informazioni da tenere presenti quando si creano e si utilizzano le query sono riportate di seguito.
- L'esecuzione delle query negli ambienti di produzione può influire sulle risorse di CPU e memoria, pertanto:
- Limitare i gruppi di utenti con accesso alle query.
- Eseguire il test delle query su una singola istanza prima di eseguire l'intera flotta.
I risultati delle query su richiesta vengono eliminati automaticamente dopo due giorni.
Query pianificate
Le query pianificate vengono create a partire da query eseguite in precedenza che ora si desidera eseguire periodicamente nella flotta in modo da poter raccogliere i risultati raw per la post-elaborazione. È possibile selezionare la query e scegliere le destinazioni su cui eseguirla, impostare la frequenza di esecuzione e configurare il servizio di log per registrare i risultati.
Stato query su richiesta
Lo stato generale di una query su richiesta è determinato dagli stati delle query regionali associate, come indicato di seguito.
- Anche se non tutte le aree si trovano in uno stato terminale (Completato, Non riuscito o Scaduto):
- Se tutte le aree sono In corso, lo stato generale è In corso.
- Se almeno un'area è Parzialmente completata, lo stato generale è Parzialmente completata (indipendentemente dal fatto che altri abbiano raggiunto gli stati terminali).
- Dopo che tutte le aree si trovano in uno stato terminale (Completato, Non riuscito o Scaduto):
- Se tutte le aree hanno Non riuscito o sono Scaduto, lo stato generale è Non riuscito.
- Se almeno un'area è Completata, lo stato generale è Completata.
Controllo dell'accesso alle query
È possibile controllare l'accesso alle query creando gruppi dinamici e utilizzando i criteri. Vedere Istruzioni criteri per la sicurezza delle istanze.
Informazioni su OSquery
Le query sono SQL comprensibili SQLite create utilizzando il linguaggio SQL OSquery.
OSquery è un agente host multipiattaforma performante e open source che ti consente di ottenere visibilità e insight sulla tua flotta. Può raccogliere e normalizzare i dati indipendentemente dal sistema operativo, aumentando al contempo la visibilità sull'infrastruttura. OSquery può aiutare qualsiasi team di sicurezza con la caccia alle minacce, le indagini forensi e il rilevamento delle intrusioni fornendo viste in tempo reale di ogni processo in esecuzione e connessione di rete. OSquery viene fornito con il supporto di centinaia di tabelle che coprono tutto, dai processi in esecuzione alle estensioni kernel caricate.
Introduzione a OSquery
La raccolta dei dati giusti richiede di porre le domande giuste. Per chiunque abbia iniziato, deve conoscere la posizione dei dati per sapere come richiederlo. L'unico modo per porre le domande giuste è capire come fare, e si torna a conoscere lo schema.
Comprendere lo schema: https://osquery.io/schema/5.5.1/.
A partire dal 7 maggio 2024, ci sono 274 tabelle nello schema. È possibile utilizzare tutte le tabelle ad eccezione di:
- Tabelle con il nome
_events. - Tabelle che richiedono il supporto YARA.
-
Tabelle
curlecarves.
Procedure ottimali per le query
Attenersi alle procedure consigliate descritte di seguito.
- Tenere presente che le query possono contenere una sola istruzione di query per richiesta.
- Formattare la query in modo che sia facile da leggere e semplificarla.
- Utilizza le ricerche Join e Sub con giudizio.
- Definire le informazioni che si desidera raccogliere e definire l'ambito della query per tali informazioni.
Ad esempio, se ti interessa eseguire processi che potrebbero consumare molte risorse sull'istanza, potresti scrivere
SELECT * from processesma ciò genererebbe un grande volume di dati, probabilmente la maggior parte di essi non necessari.
Si consiglia di selezionare solo le colonne necessarie e di impostare un limite e un ordine entro.
Ecco un esempio che ti offre una tabella ben formattata per i primi 10 processi in base al consumo di memoria.
SELECT pid, name, ROUND((total_size * '10e-7'), 2) AS memory_used FROM processes ORDER BY total_size DESC LIMIT 10;
Query pacchetti
I pacchetti di query OSquery sono set di query predefiniti o personalizzati organizzati per tipo, ad esempio conformità o gestione delle vulnerabilità. È possibile utilizzare i pacchetti di query per comprendere in che modo il sistema risponde a set di query e, se necessario, personalizzare le query in base all'ambiente in uso.
Per ulteriori informazioni sui pacchetti di query, vedere osquery.readthedocs.io, Query Pack.
È possibile trovare pacchetti di query utili in linea, ad esempio questo su GitHub, https://github.com/osquery/osquery/tree/master/packs.
Query di esempio
Per iniziare, eseguire alcune query locali di base, ad esempio gli utenti SELECT * FROM o SELECT * FROM processed LIMIT 10, per conoscere il funzionamento delle tabelle.
Abbiamo anche messo insieme un elenco di query suggerite per aiutarti a diventare operativo.
-
Utenti (
users): cercare tutti gli account utente locali esistenti in un computer.Linux (Ubuntu):
SELECT * FROM users WHERE gid < 65534 AND uid >= 1000;Nota
uid 1000è il punto in cui gli utenti in genere iniziano con LinuxLinux: questa query consente di trovare tutti gli utenti che dispongono di shell di login effettive (non
bin/falseobin/true, con autorizzazioni per gli utenti che vivono in luoghi diversi, ad esempio/usr/bin/falseo/bin/false.SELECT * FROM users WHERE shell NOT LIKE '%false' AND shell NOT LIKE '%true'; -
Elabora socket aperti (
process_open_sockets): consente di cercare i processi che creano connessioni di rete diverse dalle connessioni 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; -
Porte di ascolto (
listening_ports): cerca le porte aperte in 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'; -
Utenti connessi (
logged_in_users): mostra chi è attualmente connesso 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; -
File (
file): restituisce informazioni sul file specificato sul disco. Nelle query riportate di seguito vengono trovati tutti i file in tutte le cartelle Download utente a un livello di profondità della cartella.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;