ElasticsearchV7
Versione integrazione: 17.0
Configurare ElasticsearchV7 in modo che funzioni con Google Security Operations
Come creare un token API
Per creare un nuovo token API, esegui la seguente richiesta:
curl --location --request POST 'http://<server address>:<port>/_security/api_key' \
--header 'Authorization: Basic Base64(username, password)' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "siemplify-integration",
"role_descriptors": {}
}':
Esempio di risposta:
{
"id": "G1NIWnI",
"name": "siemplify-integration",
"api_key": "dSwyjWJ_Ql"
}
- Prendiamo i parametri "id" e "api_key" dalla risposta.
- Utilizza la codifica Base64 di "id" e "api_key" uniti da due punti, ad esempio "id:api_key".
- Il risultato viene utilizzato come token API nell'integrazione.
Accedere a Elasticsearch
Google SecOps accede a Elasticsearch tramite l'API RESTful sulla porta TCP 9200 per impostazione predefinita. Il server Google SecOps dovrà accedere ai nodi Elasticsearch pertinenti sulla porta TCP 9200 (predefinita) o su una porta alternativa se la porta predefinita non è stata utilizzata durante il deployment di Elasticsearch.
Configurare l'integrazione di ElasticsearchV7 in Google SecOps
Per istruzioni dettagliate su come configurare un'integrazione in Google SecOps, vedi Configurare le integrazioni.
Configurare l'integrazione di Elasticsearch con un certificato CA
Se necessario, puoi verificare la connessione con un file del certificato CA.
Prima di iniziare, assicurati di avere quanto segue:
- Il file del certificato CA
- L'ultima versione dell'integrazione Elasticsearch
Per configurare l'integrazione con un certificato CA, completa i seguenti passaggi:
- Analizza il file del certificato CA in una stringa Base64.
- Apri la pagina dei parametri di configurazione dell'integrazione.
- Inserisci la stringa nel campo File certificato CA.
- Per verificare che l'integrazione sia configurata correttamente, seleziona la casella di controllo Verifica SSL e fai clic su Test.
Parametri di integrazione
Utilizza i seguenti parametri per configurare l'integrazione:
Nome visualizzato del parametro | Tipo | Valore predefinito | È obbligatorio | Descrizione |
---|---|---|---|---|
Nome istanza | Stringa | N/D | No | Nome dell'istanza per cui intendi configurare l'integrazione. |
Descrizione | Stringa | N/D | No | Descrizione dell'istanza. |
Indirizzo del server | Stringa | x.x.x.x | Sì | Indirizzo IP del server Elasticsearch 7.0.0. |
Nome utente | Stringa | N/D | Sì | L'indirizzo email dell'utente da utilizzare per connettersi a Elasticsearch 7.0.0. |
Password | Password | N/D | Sì | La password dell'utente corrispondente. |
Token API | Password | N/D | No | Token API XPack di Elasticsearch. |
Autentica | Casella di controllo | Deselezionata | No | N/D |
Verifica SSL | Casella di controllo | Deselezionata | No | Utilizza questa casella di controllo se la connessione Elasticsearch 7.0.0 richiede una verifica SSL (non selezionata per impostazione predefinita). |
File del certificato CA | Stringa | N/D | No | File del certificato CA. |
Esegui da remoto | Casella di controllo | Deselezionata | No | Seleziona il campo per eseguire l'integrazione configurata da remoto. Una volta selezionata, viene visualizzata l'opzione per selezionare l'utente remoto (agente). |
Azioni
Ricerca avanzata ES
Descrizione
Un test Elasticsearch predefinito che restituisce un dizionario di parole.
Parametri
Parametri | Tipo | Valore predefinito | Descrizione |
---|---|---|---|
Indice | Stringa | * | Pattern di ricerca per un indice Elasticsearch. In Elastic, l'indice è come un nome di database e i dati vengono archiviati in vari indici.Questo parametro definisce in quali indici eseguire la ricerca. Può essere un nome esatto, ad esempio "smp_playbooks-2019.06.13", oppure puoi utilizzare un carattere jolly per eseguire la ricerca in base a un pattern, ad esempio "smp_playbooks-2019.06 "o "smp". Per saperne di più sugli indici Elasticsearch, visita https://www.elastic.co/blog/what-is-an-elasticsearch-index |
Query | Stringa | * | La query di ricerca da eseguire. È in sintassi Lucene. IE1: "*" (questo è un carattere jolly che restituirà tutti i record) IE2: "level:error" IE3: "level:information" IE4: "level:error OR level:warning" Per scoprire di più sulla sintassi di Lucene, visita https://www.elastic.co/guide/en/kibana/current/lucene-query.html#lucene-query\r\nhttps://www.elastic.co/guide/en/elasticsearch/reference/7.1/query-dsl-query-string-query.html#query-string-syntax |
Limite | Stringa | 100 | Limita il conteggio dei documenti restituiti, ad esempio 10. 0 = Nessun limite. |
Campo visualizzato | Stringa | * | Limita i campi restituiti. Il valore predefinito "*" = Restituisce tutti i campi. Puoi indicare un singolo campo, ad esempio "livello". |
Campo di ricerca | Stringa | _all | Campo di ricerca per query di testo libero (quando la query non specifica un nome di campo). Il valore predefinito è "_all", il che significa che la ricerca viene eseguita in tutti i campi. È consigliabile utilizzare la sintassi Lucene corretta nei campi "_all" o la ricerca testuale in un campo specifico. Esempio 1: Campo di ricerca = "_all". Query = "level:error". La query restituirà tutti i record in cui il campo "level" è uguale a "error". Esempio 2: Campo di ricerca = "Message", query = "Login Alarm". La query restituirà tutti i record il cui campo "Messaggio" contiene il testo "Login Alarm". |
Campo timestamp | Stringa | @timestamp | Il nome del campo su cui eseguire il filtro basato sul tempo. Il valore predefinito è @timestamp. Se sia la data meno recente che la data più recente sono vuote, non verrà applicato alcun filtro basato sul tempo. |
Data meno recente | Stringa | now-1d | Data di inizio della ricerca. La ricerca restituirà solo i record uguali o successivi a questo punto nel tempo. L'input può essere in UTC esatto: Formato: AAAA-MM-GGTHH:MM:SSZ ad es. 2019-06-04T10:00:00Z L'input può anche essere in forma relativa (utilizzando la matematica delle date): tie: "now", "now-1d", "now-1d/d", "now-2h/h" Per saperne di più sulla matematica delle date, visita la pagina https://www.elastic.co/guide/en/elasticsearch/reference/7.1/common-options.html#date-math |
Data meno recente | Stringa | ora | Data di fine della ricerca. La ricerca restituirà solo i record uguali o precedenti a questo punto nel tempo. L'input può essere in UTC esatto: Formato: AAAA-MM-GGTHH:MM:SSZ ad es. 2019-06-04T10:00:00Z L'input può anche essere in forma relativa (utilizzando date-math): ad esempio: "now", "now-1d", "now-1d/d", "now-2h/h" Per saperne di più sulla matematica delle date, visita la pagina https://www.elastic.co/guide/en/elasticsearch/reference/7.1/common-options.html#date-math |
Run On
Questa azione viene eseguita su tutte le entità.
Risultati dell'azione
Risultato script
Nome risultato script | Opzioni di valore | Esempio |
---|---|---|
risultati | N/D | N/D |
Ricerca DSL
Descrizione
Esegue ricerche in tutti i contenuti di Elasticsearch e restituisce i risultati in un formato di dizionario. Questa azione supporta solo le query senza intervallo di tempo. Se vuoi utilizzare l'intervallo di tempo nella query, utilizza l'azione Ricerca avanzata ES.
Parametri
Parametri | Tipo | Valore predefinito | Descrizione |
---|---|---|---|
Indice | Stringa | * | Pattern di ricerca per un indice Elasticsearch. In Elasticsearch, l'indice è come un DatabaseName e i dati vengono archiviati in vari indici. Questo parametro definisce in quali indici eseguire la ricerca. Può essere un nome esatto, ad esempio "smp_playbooks-2019.06.13"\r\no puoi utilizzare un carattere jolly () per cercare in base a un pattern, ad esempio "smp_playbooks-2019.06" o "smp*". Per saperne di più sugli indici Elasticsearch, visita https://www.elastic.co/blog/what-is-an-elasticsearch-index |
Query | Stringa | * | La query di ricerca da eseguire. È in sintassi Lucene. IE1: \"*\" (questo è un carattere jolly che restituirà tutti i record) IE2: \"level:error\" IE3: \"level:information\" IE4: \"level:error OR level:warning\" Per scoprire di più sulla sintassi di Lucene, visita https://www.elastic.co/guide/en/kibana/current/lucene-query.html#lucene-query\r\nhttps://www.elastic.co/guide/en/elasticsearch/reference/7.1/query-dsl-query-string-query.html#query-string-syntax |
Limite | Stringa | 100 | Limita il conteggio dei documenti restituiti, ad esempio 10. 0 = Nessun limite |
Run On
Questa azione viene eseguita su tutte le entità.
Risultati dell'azione
Risultato script
Nome risultato script | Opzioni di valore | Esempio |
---|---|---|
risultati | N/D | N/D |
Risultato JSON
[
{
"_score": 0.2876821,
"_type": "person",
"_id": "2",
"_source": {
"lastname": "Smith",
"name": "John",
"job_description": "Systems administrator"
},
"_index": "accounts"
}, {
"_score": 0.28582606,
"_type": "person",
"_id": "1",
"_source":
{
"lastname": "Doe",
"name": "John",
"job_description": "Systems administrator and Linux specialist"
},
"_index": "accounts"
}
]
Dindin
Descrizione
Il test verifica la connettività al server Elasticsearch.
Parametri
N/D
Run On
Questa azione viene eseguita su tutte le entità.
Risultati dell'azione
Risultato script
Nome risultato script | Opzioni di valore | Esempio |
---|---|---|
is_success | Vero/Falso | is_success:False |
Ricerca semplice di ES
Descrizione
Action esegue ricerche in tutti i contenuti di Elasticsearch e restituisce i risultati in un formato di dizionario.
Parametri
Parametri | Tipo | Valore predefinito | Descrizione |
---|---|---|---|
Indice | Stringa | * | Pattern di ricerca per un indice Elasticsearch. In Elasticsearch, l'indice è come un DatabaseName e i dati vengono archiviati in vari indici. Questo parametro definisce in quali indici eseguire la ricerca. Può essere un nome esatto, ad esempio "smp_playbooks-2019.06.13", oppure puoi utilizzare un carattere jolly () per eseguire la ricerca in base a un pattern, ad esempio "smp_playbooks-2019.06" o "smp*". Per saperne di più sugli indici Elasticsearch, visita https://www.elastic.co/blog/what-is-an-elasticsearch-index |
Query | Stringa | * | La query di ricerca da eseguire. È in sintassi Lucene. IE1: \"*\" (questo è un carattere jolly che restituirà tutti i record) IE2: \"level:error\" IE3: \"level:information\" IE4: \"level:error OR level:warning\" Per scoprire di più sulla sintassi di Lucene, visita https://www.elastic.co/guide/en/kibana/current/lucene-query.html#lucene-query\r\nhttps://www.elastic.co/guide/en/elasticsearch/reference/7.1/query-dsl-query-string-query.html#query-string-syntax |
Limite | Stringa | 100 | Limita il conteggio dei documenti restituiti, ad esempio 10. 0 = Nessun limite. |
Run On
Questa azione viene eseguita su tutte le entità.
Risultati dell'azione
Risultato script
Nome risultato script | Opzioni di valore | Esempio |
---|---|---|
risultati | N/D | N/D |
Risultato JSON
[{
"_score": 0.2876821,
"_type": "person",
"_id": "2",
"_source":
{
"lastname": "Smith",
"name": "John",
"job_description": "Systems administrator"
},
"_index": "accounts"
},
{
"_score": 0.28582606,
"_type": "person",
"_id": "1",
"_source":
{
"lastname": "Doe",
"name": "John",
"job_description": "Systems administrator and Linux specialist"
},
"_index": "accounts"
}
]
Connettori
Configura i connettori Elasticsearch v7 in Google SecOps
Per istruzioni dettagliate su come configurare un connettore in Google SecOps, vedi Configurazione del connettore.
Per configurare il connettore selezionato, utilizza i parametri specifici del connettore elencati nelle tabelle seguenti:
- Parametri di configurazione del connettore Elasticsearch
- Parametri di configurazione del connettore Elasticsearch DSL
Connettore Elasticsearch
Descrizione
Questo argomento mostra come Google SecOps integra Elasticsearch con il meccanismo e la configurazione per l'importazione e l'elaborazione.
Inoltro degli avvisi di Elasticsearch a Google SecOps
Google SecOps cercherà gli indici Elasticsearch specificati con una query fornita (utilizzando la sintassi di query Lucene) e restituirà i documenti Elasticsearch che verranno tradotti e contestualizzati come "avvisi" per i casi.
Parametri del connettore
Utilizza i seguenti parametri per configurare il connettore:
Nome visualizzato del parametro | Tipo | Valore predefinito | È obbligatorio | Descrizione |
---|---|---|---|---|
Ambiente predefinito | Stringa | N/D | No | Seleziona l'ambiente richiesto. Ad esempio, "Cliente 1". |
Esegui ogni | Numero intero | 0:0:0:10 | No | Seleziona il periodo di tempo per l'esecuzione della connessione. Ad esempio, "tutti i giorni". |
Nome campo prodotto | Stringa | device_product | Sì | Il nome del campo utilizzato per determinare il prodotto del dispositivo. Esempio: _type. |
Nome campo evento | Stringa | nome | Sì | Il nome del campo utilizzato per determinare il nome dell'evento (sottotipo). Esempio: _source_match_event_id. |
Timeout dello script (secondi) | Stringa | 60 | Sì | Il limite di timeout (in secondi) per il processo Python che esegue lo script corrente. |
Indirizzo del server | Stringa | N/D | Sì | L'indirizzo del server Elasticsearch, ad esempio http://{ip_address}:{port} |
Nome utente | Stringa | N/D | Sì | Nome utente Elasticsearch. |
Password | Password | N/D | Sì | Password Elasticsearch. |
Autentica | Casella di controllo | Deselezionata | No | Indica se eseguire o meno l'autenticazione durante la connessione. |
Token API | Password | N/D | No | Token API XPack di Elasticsearch. |
Verifica SSL | Casella di controllo | Deselezionata | No | Indica se utilizzare o meno SSL per la connessione. |
Campo Nome avviso | Stringa | N/D | Sì | Il nome del campo in cui si trova il nome dell'avviso (percorso del campo piatto). Esempio: _source_alert_info_alert |
Campo timestamp | Stringa | N/D | Sì | Il nome del campo in cui si trova il timestamp (percorso del campo piatto). Esempio: source@timestamp |
Campo Ambiente | Stringa | N/D | No | Il nome del campo in cui si trova l'ambiente (percorso del campo piatto). Esempio: _source_environment |
Indici | Stringa | N/D | No | Pattern di indice in base a cui eseguire la ricerca. Esempio: '*' |
Query | Stringa | N/D | No | Query con pattern di ricerca (sintassi delle query Lucene). Esempio: '*' |
Limite conteggio avvisi | Numero intero | 20 | Sì | Numero massimo di avvisi da recuperare in un ciclo. Esempio: 20. |
Max Days Backwards | Numero intero | 1 | Sì | Numero massimo di giorni da cui recuperare gli avvisi. Esempio: 3. |
Mappatura campo gravità | Stringa | N/D | No | Il nome del campo in cui è memorizzato il valore di gravità. |
Indirizzo del server proxy | Stringa | N/D | No | L'indirizzo del server proxy da utilizzare. |
Nome utente proxy | Stringa | N/D | No | Il nome utente del proxy con cui eseguire l'autenticazione. |
Password proxy | Password | N/D | No | La password del proxy per l'autenticazione. |
Nome campo gravità | Stringa | N/D | No | Se vuoi mappare la gravità in base al valore della stringa, devi creare un file di mappatura. Per ulteriori dettagli, consulta il portale della documentazione. |
Pattern regex ambiente | Stringa | .* | No | Un pattern regex da eseguire sul valore trovato nel campo "Nome campo ambiente". Il valore predefinito è .* per acquisire tutto e restituire il valore invariato. Utilizzato per consentire all'utente di manipolare il campo dell'ambiente tramite la logica delle espressioni regolari Se il pattern regex è null o vuoto oppure il valore dell'ambiente è null, il risultato finale dell'ambiente è "". |
Come mappare la gravità nel connettore
Per mappare la gravità, devi specificare quale campo deve essere utilizzato per ottenere il valore della gravità nel parametro "Nome campo gravità". Nella risposta puoi ottenere tre tipi di valori: numeri interi, numeri in virgola mobile e stringhe. Per i numeri interi e in virgola mobile, non è necessaria alcuna configurazione aggiuntiva. Il connettore leggerà questi valori e li mapperà in base agli standard Google SecOps. Un breve promemoria su come vengono mappati i valori interi:
- 100 - Critico
- 100 > x >= 80 Alto
- 80 > x >=60 Medio
- 60 > x >=40 Bassa
- 40 > x Informazioni
Se nella risposta utilizziamo stringhe, è necessaria una configurazione aggiuntiva. Nella cartella in cui si trovano gli script del connettore, avrai un
file di configurazione denominato severity_map_config.json
. Questo file definisce le regole di mappatura per
la gravità.
Inizialmente, il file avrà questo aspetto:
{
"Default": 50
}
Immagina una situazione in cui i valori necessari si trovano in
event.severity
. event.severity
può contenere i seguenti valori:
"Malicious", "Benign", "Unknown".
Innanzitutto, dobbiamo specificare nel parametro "Severity Field Name" che utilizzeremo
event.severity
.
In secondo luogo, dobbiamo aggiornare il file di configurazione.
Dopo le modifiche, il file severity_map_config.json
dovrebbe avere il seguente aspetto:
{
"event.severity": {
"Malicious": 100,
"Unknown": 60,
"Benign": -1
},
"Default": 50
}
Ora, quando il connettore riceverà un evento con event.severity
= "Malicious", gli verrà assegnata la gravità Critica.
Regole del connettore
Whitelist/Blacklist
Il connettore non supporta l'elenco consentito/bloccato.
Supporto del proxy
Il connettore supporta il proxy.
Connettore DSL Elasticsearch
Descrizione
Il connettore funziona effettuando una chiamata API REST con una query DSL.
Casi d'uso ed esempi
Possibilità di utilizzare le query DSL come parametro di ricerca in Elasticsearch.
Parametri del connettore
Utilizza i seguenti parametri per configurare il connettore:
Nome visualizzato del parametro | Tipo | Valore predefinito | È obbligatorio | Descrizione |
---|---|---|---|---|
Ambiente predefinito | Stringa | N/D | No | Seleziona l'ambiente richiesto. Ad esempio, "Cliente 1". |
Esegui ogni | Numero intero | 0:0:0:10 | No | Seleziona il periodo di tempo per l'esecuzione della connessione. Ad esempio, "tutti i giorni". |
Nome campo prodotto | Stringa | device_product | Sì | Descrive il nome del campo in cui è memorizzato il nome del prodotto. |
Nome campo ambiente | Stringa | "" | No | Descrive il nome del campo in cui è memorizzato il nome dell'ambiente. Se il campo dell'ambiente non viene trovato, l'ambiente è "". |
Pattern regex ambiente | Stringa | .* | No | Un pattern regex da eseguire sul valore trovato nel campo "Nome campo ambiente". Il valore predefinito è .* per acquisire tutto e restituire il valore invariato. Utilizzato per consentire all'utente di manipolare il campo dell'ambiente tramite la logica delle espressioni regolari Se il pattern regex è null o vuoto oppure il valore dell'ambiente è null, il risultato finale dell'ambiente è "". |
Timeout dello script (secondi) | Numero intero | 60 | Sì | Limite di timeout per il processo Python che esegue lo script corrente. |
Indirizzo del server | Stringa | N/D | Sì | Indirizzo IP del server API Elasticsearch. |
Porta | Stringa | N/D | Sì | Porta del server API Elasticsearch. |
Query | Stringa | N/D | Sì | Query DSL utilizzata per la ricerca. È necessario un formato JSON valido. Per rendere più stabile il connettore, ti consigliamo di aggiungere una chiave timestamp di ordinamento in ordine crescente. |
Indice | Stringa | N/D | Sì | Indice utilizzato per una ricerca. Ad esempio: _all |
Campo timestamp | Stringa | N/D | Sì | Il nome del campo in cui si trova il timestamp. source@timestamp |
Nome campo avviso | Stringa | N/D | Sì | Il nome del campo in cui si trova il nome dell'avviso. _source_info_alertname |
Campo Descrizione | Stringa | N/D | No | Il nome del campo in cui si trova la descrizione. _source_alert_info_description |
Gravità | Stringa | Media | Sì | Gravità degli avvisi. Informazioni Bassa Media Alta Critico |
Limite conteggio avvisi | Numero intero | 100 | No | Limita il numero di avvisi restituiti dal connettore per iterazione. |
Autentica | Casella di controllo | Deselezionata | No | Indica se eseguire o meno l'autenticazione su una connessione. |
Nome utente | Stringa | N/D | No | Nome utente dell'account Elasticsearch. |
Password | Password | N/D | No | Password dell'account Elasticsearch. |
Use SSL (Usa SSL) | Casella di controllo | Deselezionata | No | Opzione per abilitare la connessione SSL/TLS. |
Nome campo gravità | Stringa | N/D | No | Se vuoi mappare la gravità in base al valore della stringa, devi creare un file di mappatura. Per ulteriori dettagli, consulta il portale della documentazione. |
Gravità avviso | Stringa | N/D | No | La gravità degli avvisi. Valore possibile: Info, Basso, Medio, Alto, Critico. Nota:questo parametro ha la priorità su "Nome campo gravità". Se vuoi utilizzare "Nome campo gravità", questo campo deve essere lasciato vuoto. |
Indirizzo del server proxy | Stringa | N/D | No | L'indirizzo del server proxy da utilizzare. |
Nome utente proxy | Stringa | N/D | No | Il nome utente del proxy con cui eseguire l'autenticazione. |
Password proxy | Password | N/D | No | La password del proxy per l'autenticazione. |
Notazioni supportate
Il connettore supporta tre notazioni. Ad esempio, se vuoi utilizzare event.type nel parametro "Nome campo evento". In questo caso, puoi fornire _source_event_type, event_type o event.type. Tutti questi valori si comportano allo stesso modo.
Per i parametri:
- Nome campo prodotto
- Nome campo evento
- Nome campo gravità
- Campo Ambiente
- Campo timestamp
- Campo Nome avviso
- Campo Descrizione avviso: questo campo è solo per i connettori DSL
Come mappare la gravità nel connettore
Per mappare la gravità, devi specificare quale campo deve essere utilizzato per ottenere il valore della gravità nel parametro "Nome campo gravità". Nella risposta puoi ottenere tre tipi di valori: numeri interi, numeri in virgola mobile e stringhe. Per i numeri interi e in virgola mobile, non è necessaria alcuna configurazione aggiuntiva. Il connettore leggerà questi valori e li mapperà in base agli standard Google SecOps. Un breve promemoria su come vengono mappati i valori interi:
- 100 - Critico
- 100 > x >= 80 Alto
- 80 > x >=60 Medio
- 60 > x >=40 Bassa
- 40 > x Informazioni
Se nella risposta utilizziamo stringhe, è necessaria una configurazione aggiuntiva. Nella cartella in cui si trovano gli script del connettore, avrai un
file di configurazione denominato severity_map_config.json
. Questo file definisce le regole di mappatura per
la gravità.
Inizialmente, il file avrà questo aspetto:
{
"Default": 50
}
Immagina una situazione in cui i valori necessari si trovano in
event.severity
. event.severity
può contenere i seguenti valori:
"Malicious", "Benign", "Unknown".
Innanzitutto, dobbiamo specificare nel parametro "Severity Field Name" che utilizzeremo
event.severity
.
In secondo luogo, dobbiamo aggiornare il file di configurazione.
Dopo le modifiche, il file severity_map_config.json
dovrebbe avere il seguente aspetto:
{
"event.severity": {
"Malicious": 100,
"Unknown": 60,
"Benign": -1
},
"Default": 50
}
Ora, quando il connettore riceverà un evento con event.severity
= "Malicious", gli verrà assegnata la gravità Critica.
Regole del connettore
Whitelist/Blacklist
Il connettore non supporta l'elenco consentito/bloccato.
Supporto del proxy
Il connettore supporta il proxy.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.