Sintassi della sezione Corrispondenza

Supportato in:

La sezione match fornisce i parametri necessari per correlare più eventi correlati in un'unica rilevazione. È obbligatorio solo per le regole che collegano due o più eventi distinti. Utilizzalo per definire i criteri per questa correlazione specificando quanto segue:

  • Campi di raggruppamento (chiavi): i campi specifici degli eventi (definiti nella sezione events) che devono condividere lo stesso valore affinché gli eventi siano collegati logicamente.

  • Vincolo di tempo: l'intervallo di tempo continuo entro il quale devono verificarsi gli eventi correlati per costituire una singola partita completa. Questo campo è obbligatorio solo per le regole e non è necessario per la ricerca e le dashboard.

Definisci la sezione della corrispondenza

Le regole richiedono che le variabili di corrispondenza siano segnaposto definiti nella sezione event. Puoi anche specificare i campi event nella ricerca e nelle dashboard.

Utilizza le variabili segnaposto definite nella sezione events per specificare la finestra temporale in cui devono verificarsi gli eventi. Gli eventi corrispondenti che si verificano al di fuori dell'intervallo di tempo specificato vengono ignorati per quel particolare gruppo di rilevamento.

Utilizza la parola chiave over e la sintassi <number><m/h/d> (dove m/h/d indica minuti, ore e giorni) per specificare la finestra temporale. Puoi specificare un minimo di un minuto e un massimo di 48 ore.

Questa regola di esempio rileva i tentativi di accesso non riusciti che si verificano in un intervallo di 10 minuti. La correlazione di più tentativi di accesso non riusciti in un breve periodo di tempo spesso indica un tentativo di accesso con attacco di tipo brute force o non autorizzato.

rule failed_logins
{
  meta:
   author = "Security Team"
   description = "Detects multiple failed user logins within 10-minute windows."
   severity = "HIGH"

  events:
   $e.metadata.event_type = "USER_LOGIN"
   $e.security_result.action = "FAIL"
   $user = $e.target.user.userid

  match:
   $user over 10m

  condition:
    #e >= 5
}

La sezione match individua gli utenti con un accesso non riuscito in una nuova posizione in un intervallo di 10 minuti:

match:
   $user over 10m

Valori pari a zero nella sezione Corrispondenza

Google SecOps filtra implicitamente i valori pari a zero per tutti i segnaposto utilizzati nella sezione match ("" per le stringhe, 0 per i numeri, false per i valori booleani, il valore in posizione 0 per i tipi enumerati).

Esempio: filtrare i valori pari a zero

L'esempio seguente illustra le query che escludono i valori pari a zero.

rule ZeroValuePlaceholderExample {
  meta:
  events:
    // Because $host is used in the match section, the query behaves
    // as if the following predicate was added to the events section:
    // $host != ""
    $host = $e.principal.hostname

    // Because $otherPlaceholder was not used in the match,
    // there is no implicit filtering of zero values for $otherPlaceholder.
    $otherPlaceholder = $e.principal.ip

  match:
    $host over 5m

  condition:
    $e
}

Tuttavia, se un segnaposto viene assegnato a una funzione, le query non filtrano implicitamente i valori zero dei segnaposto utilizzati nella sezione match.

Per disattivare il filtro implicito dei valori zero, puoi utilizzare l'opzione allow_zero_values nella sezione delle opzioni. L'opzione allow_zero_values è disponibile solo in Regole.

Esempio: consentire valori pari a zero

Il seguente esempio illustra le query che non filtrano implicitamente i valori zero dei segnaposto utilizzati nella sezione match:

rule ZeroValueFunctionPlaceholder {
  meta:
  events:
    // Even though $ph is used in the match section, there is no
    // implicit filtering of zero values for $ph, because $ph is assigned to a function.
    $ph = re.capture($e.principal.hostname, "some-regex")

  match:
    $ph over 5m

  condition:
    $e
}

Finestre temporali supportate

Puoi raggruppare i campi evento e i segnaposto nella sezione match in base a una granularità temporale specificata utilizzando una delle seguenti finestre supportate.

  • Finestre alternate (finestre sovrapposte)
  • Finestre temporali (non sovrapposte)
  • Finestre scorrevoli (finestre generate dai pivot)

Finestre di hop

Una finestra di hop è un tipo di query multi-evento che raggruppa gli eventi che corrispondono ai criteri di una query in un periodo di tempo specificato, indipendentemente dall'ordine in cui si verificano. Per impostazione predefinita, le query YARA-L con una sezione match utilizzano finestre di hop per correlare più eventi nel tempo. L'intervallo di tempo di esecuzione della query viene suddiviso in un insieme di finestre di hop sovrapposte, ognuna con la durata specificata nella sezione match. Gli eventi vengono poi correlati all'interno di ogni finestra di hop.

Ad esempio, per una query eseguita nell'intervallo di tempo [1:00, 2:00], con una sezione match su 30m, un possibile insieme di finestre di salto sovrapposte che potrebbero essere generate è [1:00, 1:30], [1:03, 1:33] e [1:06, 1:36]. Queste finestre vengono utilizzate per correlare più eventi.

Finestre a cascata

Una finestra temporale sequenziale segmenta un flusso di dati in intervalli di tempo continui, non sovrapposti e di dimensioni fisse. Ogni evento di dati viene assegnato a una sola finestra. Ciò è in contrasto con una finestra scorrevole o a intervalli, che può avere intervalli di tempo sovrapposti.

Ad esempio, con una finestra temporale di 30 minuti, gli eventi che si verificano tra le 1:00:00 e le 1:29:59 vengono elaborati insieme. Poi, il successivo insieme di eventi, dalle 1:30:00 alle 1:59:59, viene elaborato separatamente.

Finestre scorrevoli

Quando devi cercare eventi che si verificano in un ordine relativo specifico (ad esempio, e1si verifica fino a due minuti dopo e2), le finestre scorrevoli sono molto efficaci. Le finestre scorrevoli vengono generate quando un vincolo temporale inizia o termina con una variabile di evento pivot specificata. Monitora dinamicamente la sequenza e la tempistica degli eventi rispetto a quella specifica variabile dell'evento pivot.

Gli eventi vengono poi correlati all'interno di ogni finestra mobile. In questo modo è possibile cercare eventi che si verificano in un ordine specifico (ad esempio, e1 si verifica entro 2 minuti da e2). Un'occorrenza dell'evento e1 e un'occorrenza dell'evento e2 sono correlate se l'evento e1 si verifica entro la durata della finestra mobile dopo l'evento e2.

  • Le finestre scorrevoli si basano sulla variabile dell'evento pivot (pivot-event-var).
  • Utilizza la parola chiave before per generare finestre scorrevoli che terminano con ogni occorrenza dell'evento pivot.
  • Utilizza la parola chiave after per generare finestre scorrevoli che iniziano con ogni occorrenza dell'evento pivot.

Specifica le finestre scorrevoli nella sezione match di una query nel seguente modo:

<match-var-1>, <match-var-2>, ... over <duration> before|after <pivot-event-var>

Gli esempi seguenti mostrano finestre scorrevoli valide:

$var1, $var2 over 5m after $e1

$user over 1h before $e2

Note:

  • Ulteriore esempio di finestra scorrevole.
  • È noto che l'utilizzo di finestre scorrevoli anziché finestre a salti comporta prestazioni più lente. Ti consigliamo di utilizzare le finestre scorrevoli solo per casi specifici, ad esempio quando l'ordine degli eventi è assolutamente necessario o quando si cerca l'inesistenza di eventi.

  • Poiché le finestre scorrevoli sono progettate per rilevare più eventi, ti consigliamo di non utilizzarle per le query su un singolo evento. Utilizza invece una delle seguenti soluzioni alternative:

    • Converti la query in modo che utilizzi più variabili evento e aggiorna la sezione delle condizioni se la query richiede più di un'occorrenza dell'evento.
    • Se vuoi, valuta la possibilità di aggiungere filtri per timestamp anziché utilizzare una finestra mobile. Ad esempio: $permission_change.metadata.event_timestamp.seconds < $file_creation.metadata.event_timestamp.seconds
    • Rimuovi la finestra scorrevole.

Passaggi successivi

Informazioni aggiuntive

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.