Utilizzare le tabelle di dati

Supportato in:

Le tabelle di dati sono strutture di dati con più colonne che ti consentono di inserire i tuoi dati in Google Security Operations. Possono fungere da tabelle di ricerca con colonne definite e dati archiviati in righe. Puoi creare o importare una tabella di dati nel tuo account Google SecOps utilizzando l'interfaccia utente di Google SecOps, l'API delle tabelle di dati o una query YARA-L nelle regole.

Gestire le tabelle di dati utilizzando l'interfaccia utente di Google SecOps

Le sezioni seguenti descrivono come gestire le tabelle di dati utilizzando l'interfaccia utente, ad esempio come accedere alle tabelle di dati, aggiungere una nuova tabella di dati e modificarne i contenuti, importare dati nella tabella, aggiungere righe, separare i dati utilizzando virgole o tabulazioni e come rimuovere una tabella di dati dal tuo account.

Accedere alle tabelle di dati

Per andare alla pagina delle tabelle di dati, vai alla barra laterale di navigazione a sinistra e fai clic su Rilevamento > Tabelle di dati. Puoi cercare una tabella di dati esistente inserendo il nome nel campo di ricerca nella parte superiore della barra laterale.

Aggiungi una nuova tabella di dati

Per aggiungere una nuova tabella di dati a Google SecOps, completa i seguenti passaggi:

  1. Fai clic su Aggiungi Aggiungi in alto a destra nella barra laterale.

  2. Nella finestra di dialogo Crea nuova tabella di dati, assegna un nome alla nuova tabella e, facoltativamente, aggiungi una descrizione.

  3. Fai clic su Crea. La nuova tabella di dati viene visualizzata nella finestra principale ed è pronta a accettare i dati.

Importa i dati nella tabella di dati

Per aggiungere dati alla tabella di dati, puoi importarli direttamente in Google SecOps come segue:

  1. Fai clic su Importa dati.

  2. Seleziona un file CSV standard (in Google SecOps è possibile importare solo file CSV).

  3. Fai clic su Apri quando è tutto pronto per importare i dati nella tabella di dati.

Aggiungi una nuova riga di dati alla tabella di dati

Per aggiungere manualmente una nuova riga di dati a una tabella di dati, puoi inserirla direttamente, con la prima riga che funge da intestazione della tabella. Per farlo:

  1. Nella scheda Dettagli, posiziona il cursore alla fine di una riga esistente e premi Invio.

  2. Inserisci una nuova riga di dati:

    1. Separa i campi di dati utilizzando virgole o tabulazioni.
    2. Assicurati di associare ogni elemento dati alla colonna di dati appropriata.
    3. Quando inserisci i dati di una riga nella scheda Dettagli, questi vengono inseriti nell'editor della tabella.

Specifica se utilizzare virgole o tabulazioni per separare i dati

Per separare i dati utilizzando virgole o tabulazioni:

  1. Fai clic su Modifica tipo di separatore accanto a Importa dati.

  2. Nella finestra di dialogo Modifica tipo di separatore, seleziona Virgola o Tab dal menu Separatore.

Rimuovere una tabella di dati

Per rimuovere una tabella di dati:

  1. Seleziona una tabella di dati dall'elenco Tabelle di dati a sinistra.

  2. Fai clic su Elimina.

Gestire le tabelle di dati utilizzando l'API Chronicle

Puoi anche utilizzare le risorse REST disponibili nell'API Chronicle per gestire le tabelle di dati in Google SecOps. L'API ha funzionalità equivalenti all'interfaccia utente e include alcune funzionalità aggiuntive che ti consentono di gestire le tabelle di dati con un maggiore rendimento e una maggiore scalabilità.

Ecco le risorse REST della tabella di dati:

Utilizzare le tabelle di dati in Google SecOps

Dopo aver importato le tabelle di dati nell'istanza Google SecOps, puoi utilizzarle per filtrare, migliorare ed arricchire i dati utilizzando le regole. Questo documento include numerosi esempi in sintassi YARA-L, che puoi incorporare nelle regole di Google SecOps all'interno della tua istanza. Per ulteriori informazioni su come modificare le regole in Google SecOps, vedi Gestire le regole utilizzando l'editor delle regole.

Puoi utilizzare le tabelle di dati in combinazione con le regole nei seguenti modi:

Filtrare i dati delle entità e degli eventi UDM utilizzando una tabella di dati

Puoi filtrare le entità e gli eventi UDM confrontandoli con le voci di una tabella di dati.

Collega gli eventi UDM alle tabelle di dati in uno dei seguenti modi:

  • Utilizzo di un operatore di uguaglianza (=, !=, >, >=, <, <=) per il confronto in base alle righe. Ad esempio, $<udm_variable>.<field_path> = %<data_table_name>.<column_name>.

  • Utilizzo della parola chiave in per il confronto basato su colonne. Ad esempio, $<udm_variable>.<field_path> in %<data_table_name>.<column_name>.`

Come per gli elenchi di riferimento, i tipi di dati supportati per ogni colonna della tabella di dati possono essere string, regex o CIDR.

Per utilizzare una colonna della tabella di dati di tipo CIDR o espressione regolare per il confronto in base alle righe, utilizza la seguente sintassi:

net.ip_in_range_cidr($e.principal.ip, %<data_table_name>.<column_name>)

re.regex($e.principal.hostname, %<data_table_name>.<column_name>)

Per utilizzare una colonna della tabella di dati di tipo CIDR o espressione regolare per il confronto basato su colonna, utilizza la seguente sintassi:

$e.principal.ip in cidr %cidr_data_table.column_name

$e.principal.hostname in regex %regex_data_table.column_name

Se hai specificato il tipo di dati della colonna come CIDR o espressione regolare, escludi la parola chiave cidr o regex.

Puoi utilizzare l'operatore not anche con le tabelle di dati. La seguente regola di esempio esclude le voci in cui gli indirizzi IP ($e.principal.ip) non corrispondono a nessuno degli intervalli CIDR elencati nella colonna benign_ip in cidr_data_table:

not $e.principal.ip in cidr %cidr_data_table.benign_ip

Unisci una tabella di dati con un evento o un'entità UDM

Puoi utilizzare una tabella di dati per filtrare gli eventi UDM utilizzando l'operatore di uguaglianza (=, !=, >, >=, <, <=) per il confronto in base alle righe.

Nell'esempio seguente, la regola YARA-L verifica che, quando un utente accede, il relativo ID utente esista nella tabella di dati (example_table). Nella stessa riga della tabella di dati in cui si è verificata la corrispondenza, viene anche controllato se l'account utente è attivo prima che l'evento di accesso sia stato registrato.

// Check if a user exists in a data table and the user is active for all user login events.

rule udm_join_data_table {
meta:
    description = "Join data table with UDM event"
event:
  $e.metadata.event_type = USER_LOGIN
  $e.security_result.action = ALLOW
  $e.principal.user.userid = $userid

// Event must match at least one row in the table where the uid in the table
// row is the userid for the event and the active date in the same table
// row is before the event timestamp

  %example_table.uid = $userid
  $e.principal.hostname = %example_table.hostname

match:
  $userid over 1h

condition:
  $e
}

L'esempio seguente illustra una tabella di dati e i dati sugli eventi UDM. In base alla logica della regola YARA-L precedente, un utente con ID utente 32452 viene visualizzato nel rilevamento perché il nome host dell'utente nel sistema corrisponde al nome host nella tabella di dati.

Tabella di dati
uid title hostname
32452 HR host1
64452 Finanza host2
46364 IT host3
Tabella di eventi UDM
principal metadata security_result principal
32452 USER_LOGIN CONSENTI host1
64589 USER_LOGIN CONSENTI host9
87352 USER_LOGIN CONSENTI host4

Utilizzare una tabella di dati come elenco di riferimento con più colonne

Puoi utilizzare una tabella di dati come elenco di riferimento con più colonne. Sebbene un elenco di riferimento possa accedere ai dati in una singola dimensione, le tabelle di dati ti consentono di accedere ai dati in più dimensioni, consentendo il filtro dei dati.

Puoi collegare gli eventi UDM a una tabella di dati utilizzando la parola chiave in per il confronto basato su colonna.

È possibile fare riferimento alle tabelle di dati come elenchi di riferimento con più colonne utilizzando la stessa sintassi utilizzata dagli elenchi di riferimento:

%&lt;data_table_name>.&lt;column_name>.

Nell'esempio seguente, vengono attivati avvisi per le connessioni di rete con combinazioni di porte e protocolli sospette. Port e protocol sono colonne della tabella di dati badApps.

rule udm_in_data_table {

    meta:
        description = "Use data table as multicolumn reference list"

    events:
        $e.metadata.event_type = NETWORK_CONNECTION
        $e.security_result.action = ALLOW
        $e.target.asset.asset_id = $assetid
        
        // event port matches at least one value in table column port
        $e.target.port in %badApps.port
        
        // event IP matches at least 1 value in table column protocol
        $e.target.network.ip in %badApps.ip

    match:
        $assetid over 1h

    condition:
        $e
}

Mappare i tipi di dati alle singole colonne della tabella di dati

Mappa ogni tipo di dati a una singola colonna della tabella di dati. Qualsiasi colonna contenente valori per più campi deve essere suddivisa prima di poter essere utilizzata come tabella di dati.

Nell'esempio seguente, la colonna della tabella di dati Field_value contiene valori per più campi:

Valore_campo Nome_campo
altostrat.com FQDN
192.0.2.135 IP
charlie userid
esempio nome host

La tabella precedente è suddivisa in quattro colonne, ognuna delle quali è mappata a un solo tipo di campo prima di poter essere utilizzata per uno dei casi d'uso della tabella di dati presentati in questo documento.

FQDN IP Userid Nome host
altostrat.com 192.0.2.135 charlie esempio

Mappa i nomi delle colonne ai campi delle entità

Quando crei una tabella di dati, puoi mappare i nomi delle colonne della tabella ai campi entità.

Nella tabella di dati di esempio seguente, le colonne Userid e Role sono mappate su entity.user.userid e entity.user.attribute.role.name:

Userid
(map to entity.user.userid)
Email Ruolo
(map to entity.user.attribute.role.name)
jack jack123@gmail.com amministratore
tony tony123@gmail.com ingegnere

La colonna Email non può essere mappata al percorso dell'entità entity.user.email_address poiché si tratta di un campo ripetuto. Non puoi mappare una colonna di una tabella di dati a un campo ripetuto.

Puoi mappare una colonna di una tabella di dati a un campo proto dell'entità utilizzando il campo mapped_column_path della risorsa DataTable.

Per le colonne per le quali non è stato definito un percorso dell'entità, ad esempio Email in questa tabella di esempio, devi definire un tipo di dati. Come per gli elenchi di riferimento, i tipi di dati supportati per le tabelle di dati sono string, regex e cidr.

Puoi specificare colonne mappate e non mappate nella tabella di dati utilizzando la condizione di unione. Le colonne non mappate vengono inserite nel campo additional dell'entità (a cui è unita la tabella di dati) come coppie chiave-valore, dove la chiave è il nome della colonna e il valore è il valore della riga per quella colonna.

Scrivere i risultati delle query YARA-L nelle tabelle di dati

Puoi scrivere i risultati delle query YARA-L in una tabella di dati. Utilizzando questa funzionalità, puoi creare tabelle di dati dai tuoi dati Google SecOps e utilizzarle per filtrare e migliorare altri dati.

Puoi utilizzare la sintassi delle regole YARA-L per le tabelle di dati per:

  • Definisci una sintassi YARA-L per scrivere i risultati delle regole nelle tabelle di dati. Puoi utilizzare la stessa sintassi per la ricerca e le dashboard.

  • Utilizza le tabelle di dati per la threat intelligence, la risposta agli incidenti e altri casi d'uso di sicurezza.

  • Assicurati che i dati siano coerenti con le convenzioni YARA-L.

Scrivere rilevamenti e avvisi nelle tabelle di dati utilizzando le regole

Puoi utilizzare le regole YARA-L per inviare rilevamenti e avvisi alle tabelle di dati.

Utilizzando la funzione write_row, puoi sovrascrivere una riga della tabella di dati con la chiave corrispondente nella tabella di dati utilizzando i risultati di una regola. Se la chiave non viene trovata nella tabella, aggiungi una nuova riga.

Specifica la funzione write_row nella sezione di esportazione di una query YARA-L. La scrittura dei dati nella tabella dati deve essere l'azione finale della regola. In questo modo viene garantito che le variabili di esito vengano scritte nella tabella di dati.

export:
  %<data_table_name>.write_row(
  data_table_column_x_name: <value>,
  data_table_column_y_name: <value>,
  ...,
  ...,
  data_table_column_z_name: <value>
)
// depending on the key column(s), the rows will be updated for existing keys 
and appended for new keys

Modificare una tabella di dati utilizzando YARA-L

Di seguito viene mostrato come modificare una tabella di dati utilizzando YARA-L:

TableName: ip_user_domain_table (le colonne chiave per la chiave primaria vengono definite al momento della creazione)

ip_address employee_id* domain
192.0.2.10 Dana altostrat.com
192.0.2.20 Quinn altostrat.com
192.0.2.30 Lee cymbalgroup.com

* indica la chiave primaria.

La seguente regola acquisisce combinazioni univoche di principal.ip, principal.user.employee_id e target.domain. Filtra i risultati in base alla prevalenza del target.domain:

rule unique_principal_userid_and_ip_and_target_domain_with_low_prevalence {

    meta:
        author = "GP"
        description = "Captures unique combinations of principal.ip, 
        principal.user.employee_id, and target.domain where 
        target.domain.prevalence is less than 5"
        rule_version = "1.0"

    events:
        $e.principal.ip = $principal_ip
        $e.principal.user.employee_id = $principal_user_employee_id
        $e.target.domain.name = $target_domain
        $e.target.domain.prevalence.day_count < 5

    condition:
        $e
}

Risultati delle regole:

ip empid domain
192.0.2.10 Dana altostrat.com
192.0.2.30 Lee examplepetstore.com
192.0.2.20 Quinn altostrat.com

Esempio: utilizza write_row per scrivere l'output della regola in una tabella di dati

rule write_to_data_table {

  meta:
    author = "GP"
    description = "Captures uniqueprincipal.user.employee_id, and target.domain where target.domain.prevalence is less than 5"
    rule_version = "1.0"

  events:
    $e.principal.user.employee_id = $principal_user_employee_id
    $e.target.domain.name = $target_domain
    $e.target.domain.prevalence.day_count < 5

  outcome:
    $hostname = $target_domain
    $principal_emp_id = $principal_user_employee_id
 
  condition:
    $e

  export:
    %ips_with_hostnames.write_row (
    employeeid:$principal_emp_id,
    hostname:$hostname,
    )
}

Esempio: informazioni su write_row

Nell'esempio seguente, user e ip sono chiavi principali. Ogni rilevamento persistente nella tabella dei rilevamenti genera una valutazione della chiamata di funzione nella sezione di esportazione della regola.

Ecco la regola:

rule successful_logins_by_user_to_ip {
    meta:

    events:
        $e.metadata.event_type = "USER_LOGIN"
        all $e.security_result.action != "BLOCK"
        all $e.security_result.action != "UNKNOWN_ACTION"

        $user = $e.principal.user.userid
        $ip = $e.target.ip
        $ts = $e.metadata.event_timestamp.seconds

    match:
        $user, $ip over 1h

    outcome:
        $first_seen = min($ts)

    condition:
        $e

    export:
        %successful_logins.write(user:$user, ip:$ip)
}

Ecco i dati dell'evento:

metadata: {
  event_type: USER_LOGIN
  event_timestamp: { seconds: 1283299200 }
}
principal: {
  user: {
    userid: "charlie"
  }
}
target: {
  ip: ["192.0.2.135", "192.0.2.136"]
}
security_result: {
  action: ALLOW
}

Vengono restituiti i seguenti rilevamenti:

ID rilevamento Corrisponde a $user Corrispondenza a $ip
0 charlie 192.0.2.135
1 charlie 192.0.2.136

La tabella di dati contiene quanto segue:

user ip
charlie 192.0.2.135
charlie 192.0.2.136

Arricchire il grafo delle entità con una tabella di dati

Puoi utilizzare le tabelle di dati per aggiungere, rimuovere o sostituire le entità presentate nel grafico delle entità. Utilizza le funzioni nella sezione setup della regola per indicare in che modo la tabella di dati deve essere unita, aggiunta o utilizzata per rimuovere entità dagli eventi entità a cui viene fatto riferimento nella sezione events.

Puoi utilizzare il seguente modello di regola per modificare un grafo di entità:

rule entity_graph_template {

  meta:
    ...

  setup:
    // import the data table into entity graph
    <enrichment_keyword> <join_condition>

  events:
    ...

  match:
    ...

  condition:
    ...
}

Puoi utilizzare le seguenti funzioni YARA-L 2.0 per migliorare il grafico delle entità con una tabella di dati:

  • graph_override: sovrascrivi le righe del grafico delle entità che corrispondono alla condizione di join con i dati della tabella.

    Ad esempio:

    [graph_override](?tab=t.0#heading=h.v0fps7eke1if)

  • graph_append: aggiungi le righe della tabella dati alle righe nel grafico dell'entità. L'operazione graph_append richiede un array che includa una variabile tabella di dati e una variabile evento entità anziché una condizione di join.

    Nell'esempio seguente, $g1 è la variabile del grafico delle entità e example_table è la tabella di dati:

    graph_append [$g1, %example_table]

  • graph_exclude: rimuovi le righe nel grafico delle entità che corrispondono alla condizione di unione.

    Ad esempio:

    [graph_exclude](?tab=t.0#heading=h.o0qbb5paki6g)

La condizione di join deve essere un'espressione di uguaglianza tra la colonna della tabella di dati e il campo del grafico delle entità. Per le funzioni graph_override e graph_exclude, la sintassi per accedere a una tabella di dati è la seguente:

<data_table_name>.<column_name>

Qualsiasi filtro specificato per <entity_variable> nella sezione degli eventi viene applicato dopo il relativo miglioramento con la tabella di dati.

Dopo che l'entità nel grafico delle entità è stata arricchita con l'entità nella tabella di dati, la variabile entità nel grafico delle entità deve essere unita all'entità UDM.

Sovrascrivi il grafo delle entità con i dati della tabella di dati

Con la funzione graph_override, i campi presenti sia nel grafico delle entità che nella tabella di dati vengono sostituiti con quelli della tabella dati. I campi presenti nel grafico delle entità e non nella tabella di dati rimangono invariati. I campi non presenti nel grafico delle entità, ma presenti nella tabella di dati, sono inclusi.

Solo le colonne della tabella di dati mappate sostituiscono le colonne del gráfo delle entità. Le colonne non mappate vengono aggiunte al campo additional del grafo delle entità a cui è unita la tabella di dati.

Esempio: corrispondenza su una singola unione

Nell'esempio seguente, le righe del grafo delle entità che corrispondono alla condizione di join tra la colonna della tabella di dati e il campo del grafo delle entità ($g1.graph.entity.ip = %example_table.my_ip) vengono sostituite dalla tabella di dati.

rule rule_override {
  meta:
    description = "Override entity context with data table before joining with UDM event"

  setup:
    //Rows in the entity graph that match the join condition are overridden by the data table
    graph_override ($g1.graph.entity.ip = %example_table.my_ip)

  events:
    $e.metadata.event_type = "NETWORK_CONNECTION"
    $e.security_result.action = "ALLOW"

    // Filter will be applied after graph is overridden by data table
    $g1.graph.entity.hostname = "ftp01"

    // Accessing unmapped columns
    $g1.graph.additional.fields["Owner"] = "alice"

    // Joining the UDM event with the enriched entity graph
    $e.target.ip = $iocip
    $g1.graph.entity.ip = $iocip

  match:
    $iocip over 1h

  condition:
    $e and $g1
}

Per utilizzare una colonna non mappata (ad es. "Proprietario") della tabella di dati, utilizza un'istruzione equivalente per $g1.graph.entity.owner = "alice" is $g1.graph.additional.fields["Owner"] = "alice". Questo accade perché tutte le colonne non mappate della tabella di dati vengono inserite nel campo additional del grafico delle entità ($g1).

Le tabelle seguenti illustrano un'operazione di override in cui le righe nel grafo delle entità vengono arricchite quando il campo IP nella tabella di dati corrisponde al campo IP nel grafo delle entità.

Grafico delle entità esistente
Nome host IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
Tabella di dati
Nome host IP MAC Proprietario
ftp01 10.1.1.4 …:bb alice
h1 10.1.1.6 …:cc bob
h2 10.1.1.7 …:dd chris
h3 10.1.1.4 …:ee doug

Grafico delle entità arricchito
Nome host IP MAC Proprietario
ftp01 10.1.1.4 …:bb alice
www01 10.1.1.5 …:02
h3 10.1.1.4 …:ee doug

Esempio: corrispondenza su più unioni

Nell'esempio seguente, le righe del grafico delle entità che corrispondono a più condizioni di join ($g1.graph.entity.ip = %example_table.my_ip e $g1.graph.entity.hostname = %example_table.my_hostname) vengono sostituite dalla tabella di dati.

rule rule_override {
meta:
    description = "Override Entity context with Data Table before joining with UDM event"
setup:
  // example with more than one condition
  graph_override ($g1.graph.entity.ip = %example_table.my_ip and
  $g1.graph.entity.hostname = %example_table.my_hostname) 
events:
  $e.metadata.event_type = "NETWORK_CONNECTION"
  $e.security_result.action = "ALLOW"

  // Filter will be applied after graph is overridden by data table
  $g1.graph.entity.hostname = "ftp01"

  // joining the UDM event with the enriched entity graph
  $e.target.ip = $iocip
  $g1.graph.entity.ip = $iocip

match:
  $iocip over 1h

condition:
  $e and $g1
}

Le seguenti tabelle illustrano un'operazione di override in cui le riga del gráfo delle entità vengono arricchite quando sia il campo IP sia il campo del nome host nella tabella di dati corrispondono al campo IP e al campo del nome host nel gráfo delle entità.

Grafico delle entità esistente
Nome host IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
Tabella di dati
Nome host IP MAC Proprietario
ftp01 10.1.1.4 …:bb alice
h1 10.1.1.5 …:cc bob
h2 10.1.1.6 …:dd chris
h3 10.1.1.4 …:ee doug
Grafico delle entità arricchito
Nome host IP MAC Proprietario
ftp01 10.1.1.4 …:bb alice
www01 10.1.1.5 …:02

Collega i dati della tabella di dati al grafo delle entità

Con la funzione graph_append non è richiesta alcuna condizione di join.

Nell'esempio seguente, tutte le righe della tabella di dati vengono aggiunte alle righe del grafo delle entità.

rule rule_append {
meta:
  description = "Data table append entity"
   
setup:
  graph_append [$g1, %example_table]

events:
    // filter UDM events
  $e.metadata.event_type = "NETWORK_CONNECTION"
  $e.security_result.action = "ALLOW"

  // Join the filtered UDM events with the enriched graph
  $e.target.ip = $iocip
  $g1.graph.entity.ip = $iocip

match:
  $iocip over 1h

condition:
  $e and $g1
}

La seguente tabella di esempio illustra un'operazione di accodamento in cui le righe della tabella di dati vengono aggiunte alle righe del grafo delle entità:

Grafico delle entità esistente
Nome host IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
Tabella di dati
Nome host IP MAC Proprietario
10.1.1.4 …:01 alice
10.1.1.6 …:cc bob
10.1.1.7 …:dd chris
10.1.1.4 …:ee doug
Grafico delle entità arricchito
Nome host IP MAC Proprietario
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
10.1.1.4 …:bb alice
10.1.1.6 …:cc bob
10.1.1.7 …:dd chris
10.1.1.4 …:ee doug

Utilizzare graph_exclude per rimuovere righe dal grafico delle entità

Con la funzione graph_exclude, le righe del grafo delle entità che corrispondono alla condizione di join vengono rimosse dal grafo delle entità.

Nell'esempio seguente, tutte le righe del grafico delle entità che corrispondono alla condizione di join specificata (tra la colonna della tabella di dati e il campo del grafico delle entità) vengono rimosse. Nessuna riga della tabella di dati viene aggiunta al grafo delle entità.

rule rule_exclude {

    meta:
    setup:
      graph_exclude ($g1.graph.entity.ip = %example_table.ip)

    events:
        $e.metadata.event_type = "NETWORK_CONNECTION"
        $e.security_result.action = "ALLOW"
        $e.target.ip = $iocip
        $g1.graph.entity.ip = $iocip

    match:
        $iocip over 1h

    condition:
        $e and $g1
}

Le seguenti tabelle illustrano un'operazione di esclusione in cui le riga del grafo delle entità che corrispondono al campo IP della tabella di dati vengono rimosse:

Grafico delle entità esistente
Nome host IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
Tabella di dati
IP MAC Proprietario
10.1.1.4 …:bb alice
10.1.1.6 …:cc bob
10.1.1.7 …:dd chris
Grafico delle entità arricchito
Nome host IP MAC
www01 10.1.1.5 …:02

Limitazioni

  • I limiti sul numero di istruzioni in quando si fa riferimento a un elenco di riferimento in una regola si applicano anche alle istruzioni in in una tabella di dati.

  • Per i caricamenti è supportato solo il tipo di file CSV.

  • La dimensione massima di una tabella di dati è 10 GB.

  • Il limite aggregato massimo del volume di dati nelle tabelle di dati di un tenant è 1 TB.

  • Numero massimo di istruzioni in in una regola, con o senza operatori speciali: 7

  • Numero massimo di istruzioni in con l'operatore regex: 4

  • Numero massimo di istruzioni in con l'operatore cidr: 2

  • I segnaposto non sono consentiti nella nuova sezione di configurazione.

  • Le colonne non mappate di una tabella di dati con il tipo di dati impostato su string possono essere unite solo con i campi di stringa dell'evento o dell'entità UDM.

  • Utilizza solo le colonne non mappate in una tabella di dati con un tipo di dati impostato su cidr o regex per CIDR o espressione regolare.

  • Non puoi mappare la colonna di una tabella di dati a un campo ripetuto.

Utilizzare le tabelle di dati con le regole

Le seguenti limitazioni si applicano alle tabelle di dati quando vengono utilizzate con le regole:

Frequenza di esecuzione

La frequenza di esecuzione in tempo reale non è supportata per le regole con tabelle di dati.

Unioni

  • A differenza delle entità e dell'UDM, le tabelle di dati non supportano i segnaposto. Ciò significa che non puoi applicare un insieme di filtri a una tabella di dati, unirli a un'entità UDM e poi applicare un insieme diverso di filtri alla stessa tabella di dati e unirli a un'altra variabile segnaposto UDM.

  • Ad esempio, una tabella di dati denominata dt con tre colonne: my_hostname, org e my_email e con la seguente regola:

events:
$e1.principal.hostname =  %dt.my_hostname
%dt.org ="hr"

$e2.principal.email =  %dt.my_email
%dt.org !="hr"

Prima vengono applicati tutti i filtri a una tabella di dati, quindi le righe filtrate della tabella di dati vengono unite all'UDM. In questo caso, una tabella di dati vuota viene unita a e1 e e2 perché i due filtri nella tabella di dati dt si contraddicono tra loro (%dt.org ="hr" and %dt.org !="hr").

Output in tabelle di dati

  • Puoi esportare le variabili di risultato solo in una tabella di dati. Non puoi esportare direttamente le colonne del percorso evento o della tabella di dati.

  • Gli elenchi di colonne devono includere le colonne della chiave primaria per le tabelle di dati.

  • Non puoi avere più di 20 risultati.

  • Le colonne della tabella di dati non supportano i valori ripetuti, pertanto tutte le variabili di esito scritte in una tabella di dati devono essere valori singolari.

  • Se una tabella di dati non esiste, viene creata una nuova tabella con il tipo di dato stringa predefinito per tutte le colonne, seguendo l'ordine specificato.

  • Una sola regola può scrivere in una tabella di dati alla volta. Se una regola tenta di scrivere in una tabella di dati in cui sta già scrivendo un'altra regola, la compilazione della regola non va a buon fine.

  • Non è garantito che una regola di produzione possa aggiungere righe a una tabella di dati prima dell'avvio di una regola di consumo per la tabella di dati.

  • Una regola ha un limite al numero di righe di risultati. Ai dati del risultato e persistenti si applica un limite di 10.000 righe. Lo stesso limite si applica alle tabelle di dati. Un'esecuzione di una singola regola può generare un massimo di 10.000 righe in una tabella di dati.

  • Se nella tabella di dati esiste già una riga con la stessa chiave primaria, le colonne delle chiavi non principali verranno sostituite con i nuovi valori.

  • Puoi applicare una sola operazione di arricchimento (override, append o exclude) a una singola variabile del grafo delle entità.

  • Ogni operazione di arricchimento può essere eseguita utilizzando una sola tabella di dati.

  • Puoi definire un massimo di due operazioni di arricchimento di qualsiasi tipo nella sezione setup di una regola YARA-L.

Nell'esempio seguente, un'operazione di override viene applicata alla variabile $g1 del grafo delle entità e un'operazione append viene applicata alla variabile $g2 del grafo delle entità.

    setup:
    graph_override($g1.graph.entity.user.userid = %table1.myids)
    graph_append [$g2, %table1]

Nell'esempio precedente, la stessa tabella di dati (table1) viene utilizzata per migliorare diversi grafici delle entità. Puoi anche utilizzare tabelle di dati diverse per migliorare i diversi grafici delle entità, come segue:

    setup:
    graph_override($g1.graph.entity.user.userid = %table1.myids)
    graph_append [$g2, %table2]