ElasticsearchV7
Versão de integração: 17.0
Configure o ElasticsearchV7 para funcionar com o Google Security Operations
Como criar um token de API
Para criar um novo token de API, faça o seguinte pedido:
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": {}
}':
Exemplo da resposta:
{
"id": "G1NIWnI",
"name": "siemplify-integration",
"api_key": "dSwyjWJ_Ql"
}
- Extraímos os parâmetros "id" e "api_key" da resposta.
- Use a codificação base64 de "id" e "api_key" unidas por dois pontos, como "id:api_key".
- O resultado é usado como um token de API na integração.
Aceder ao Elasticsearch
O Google SecOps acede ao Elasticsearch através da API RESTful na porta TCP 9200 por predefinição. O servidor do Google SecOps precisa de acesso aos nós do Elasticsearch relevantes na porta TCP 9200 (predefinição) ou numa porta alternativa se a porta predefinida não tiver sido usada durante a implementação do Elasticsearch.
Configure a integração do ElasticsearchV7 no Google SecOps
Para obter instruções detalhadas sobre como configurar uma integração no Google SecOps, consulte o artigo Configure integrações.
Configure a integração do Elasticsearch com um certificado da AC
Se necessário, pode validar a sua ligação com um ficheiro de certificado de CA.
Antes de começar, certifique-se de que tem o seguinte:
- O ficheiro de certificado da AC
- A versão mais recente da integração do Elasticsearch
Para configurar a integração com um certificado de AC, conclua os seguintes passos:
- Analise o ficheiro do certificado da CA numa string Base64.
- Abra a página de parâmetros de configuração da integração.
- Insira a string no campo Ficheiro de certificado da AC.
- Para testar se a integração está configurada com êxito, selecione a caixa de verificação Validar SSL e clique em Testar.
Parâmetros de integração
Use os seguintes parâmetros para configurar a integração:
Nome a apresentar do parâmetro | Tipo | Valor predefinido | É obrigatório | Descrição |
---|---|---|---|---|
Nome da instância | String | N/A | Não | Nome da instância para a qual pretende configurar a integração. |
Descrição | String | N/A | Não | Descrição da instância. |
Endereço do servidor | String | x.x.x.x | Sim | Endereço IP do servidor Elasticsearch 7.0.0. |
Nome de utilizador | String | N/A | Sim | O endereço de email do utilizador que deve ser usado para estabelecer ligação ao Elasticsearch 7.0.0. |
Palavra-passe | Palavra-passe | N/A | Sim | A palavra-passe do utilizador correspondente. |
Chave da API | Palavra-passe | N/A | Não | Chave de API do Elasticsearch XPack. |
Autenticar | Caixa de verificação | Desmarcado | Não | N/A |
Validar SSL | Caixa de verificação | Desmarcado | Não | Use esta caixa de verificação se a sua ligação ao Elasticsearch 7.0.0 exigir uma validação SSL (desmarcada por predefinição). |
Ficheiro de certificado da AC | String | N/A | Não | Ficheiro de certificado da AC. |
Executar remotamente | Caixa de verificação | Desmarcado | Não | Selecione o campo para executar a integração configurada remotamente. Depois de selecionada, a opção aparece para selecionar o utilizador remoto (agente). |
Ações
Advanced ES Search
Descrição
Um teste do Elasticsearch predefinido que devolve um dicionário de palavras.
Parâmetros
Parâmetros | Tipo | Valor predefinido | Descrição |
---|---|---|---|
Índice | String | * | Padrão de pesquisa para um índice do Elasticsearch. No Elastic, o índice é como um DatabaseName e os dados são armazenados em vários índices.Este parâmetro define em que índice(s) pesquisar. Pode ser um nome exato, ou seja, "smp_playbooks-2019.06.13", ou pode usar um carater universal para pesquisar por um padrão. Por exemplo: "smp_playbooks-2019.06 " ou "smp". Para saber mais sobre os índices do Elasticsearch, visite https://www.elastic.co/blog/what-is-an-elasticsearch-index |
Consulta | String | * | A consulta de pesquisa a executar. Está na sintaxe do Lucene. IE1: "*" (este é um caráter universal que devolve todos os registos) IE2: "level:error" IE3: "level:information" IE4: "level:error OR level:warning" Para saber mais sobre a sintaxe do Lucene, visite 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 | String | 100 | Limita a quantidade de documentos devolvidos, ou seja: 10. 0 = Sem limite. |
Campo de apresentação | String | * | Limita os campos devolvidos. Predefinição "*" = Devolver todos os campos. Pode indicar um único campo. Por exemplo: "nível" |
Campo de pesquisa | String | _all | Campo de pesquisa para consultas de texto livre (quando a consulta não especifica um nome de campo). A predefinição é "_all", o que significa que todos os campos são pesquisados. É melhor usar a sintaxe Lucene adequada nos campos "_all" ou a pesquisa textual num campo específico. Ie1: Search Field = "_all". Query = "level:error" A consulta devolve todos os registos em que o campo "level" é igual a "error". Ie2: Search Field = "Message", query = "Login Alarm". A consulta devolve todos os registos cujo campo "Message" contém o texto "Login Alarm" |
Campo de data/hora | String | @timestamp | O nome do campo no qual executar a filtragem baseada no tempo. A predefinição é @timestamp. Se a data mais antiga e a data mais recente estiverem vazias, não é aplicada qualquer filtragem baseada no tempo. |
Data mais antiga | String | now-1d | Data de início da pesquisa. A pesquisa devolve apenas registos iguais ou posteriores a este ponto no tempo. A entrada pode estar no formato UTC exato: Formato: AAAA-MM-DDTHH:MM:SSZ Por exemplo: 2019-06-04T10:00:00Z A entrada também pode estar no formato relativo (usando cálculos de datas): tie: "now", "now-1d", "now-1d/d", "now-2h/h" Para saber mais sobre a matemática de datas, visite https://www.elastic.co/guide/en/elasticsearch/reference/7.1/common-options.html#date-math |
Data mais antiga | String | agora | Data de fim da pesquisa. A pesquisa devolve apenas registos iguais ou anteriores a este ponto no tempo. A entrada pode estar no formato UTC exato: Formato: AAAA-MM-DDTHH:MM:SSZ Por exemplo: 2019-06-04T10:00:00Z As informações introduzidas também podem estar no formato relativo (com cálculos de datas): Por exemplo: "now", "now-1d", "now-1d/d", "now-2h/h" Para saber mais sobre a matemática de datas, visite https://www.elastic.co/guide/en/elasticsearch/reference/7.1/common-options.html#date-math |
Executar em
Esta ação é executada em todas as entidades.
Resultados da ação
Resultado do script
Nome do resultado do script | Opções de valores | Exemplo |
---|---|---|
resultados | N/A | N/A |
DSL Search
Descrição
Pesquisa tudo no Elasticsearch e devolve os resultados num formato de dicionário. Esta ação suporta apenas consultas sem intervalo de tempo. Se quiser usar um intervalo de tempo na sua consulta, use a ação de pesquisa ES avançada.
Parâmetros
Parâmetros | Tipo | Valor predefinido | Descrição |
---|---|---|---|
Índice | String | * | Padrão de pesquisa para um índice do Elasticsearch. No Elasticsearch, o índice é como um DatabaseName e os dados são armazenados em vários índices. Este parâmetro define em que índices pesquisar. Pode ser um nome exato, ou seja: \"smp_playbooks-2019.06.13\"\r\nou pode usar um caráter universal () para pesquisar por um padrão. Por exemplo: \"smp_playbooks-2019.06\" ou \"smp*\". Para saber mais sobre os índices do Elasticsearch, visite https://www.elastic.co/blog/what-is-an-elasticsearch-index |
Consulta | String | * | A consulta de pesquisa a executar. Está na sintaxe do Lucene. IE1: \"*\" (este é um caráter universal que devolve todos os registos) IE2: \"level:error\" IE3: \"level:information\" IE4: \"level:error OR level:warning\" Para saber mais sobre a sintaxe do Lucene, visite 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 | String | 100 | Limita a quantidade de documentos devolvidos, ou seja: 10. 0 = Sem limite |
Executar em
Esta ação é executada em todas as entidades.
Resultados da ação
Resultado do script
Nome do resultado do script | Opções de valores | Exemplo |
---|---|---|
resultados | N/A | N/A |
Resultado 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"
}
]
Tchim-tchim
Descrição
O teste verifica a conetividade ao servidor Elasticsearch.
Parâmetros
N/A
Executar em
Esta ação é executada em todas as entidades.
Resultados da ação
Resultado do script
Nome do resultado do script | Opções de valores | Exemplo |
---|---|---|
is_success | Verdadeiro/Falso | is_success:False |
Pesquisa ES simples
Descrição
As pesquisas de ações pesquisam tudo no Elasticsearch e devolvem resultados num formato de dicionário.
Parâmetros
Parâmetros | Tipo | Valor predefinido | Descrição |
---|---|---|---|
Índice | String | * | Padrão de pesquisa para um índice do Elasticsearch. No Elasticsearch, o índice é como um DatabaseName e os dados são armazenados em vários índices. Este parâmetro define em que índices pesquisar. Pode ser um nome exato, ou seja, \"smp_playbooks-2019.06.13\", ou pode usar um caráter universal () para pesquisar por um padrão. Por exemplo: \"smp_playbooks-2019.06\" ou \"smp*\". Para saber mais sobre os índices do Elasticsearch, visite https://www.elastic.co/blog/what-is-an-elasticsearch-index |
Consulta | String | * | A consulta de pesquisa a executar. Está na sintaxe do Lucene. IE1: \"*\" (este é um caráter universal que devolve todos os registos) IE2: \"level:error\" IE3: \"level:information\" IE4: \"level:error OR level:warning\" Para saber mais sobre a sintaxe do Lucene, visite 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 | String | 100 | Limita a quantidade de documentos devolvidos, ou seja: 10. 0 = Sem limite. |
Executar em
Esta ação é executada em todas as entidades.
Resultados da ação
Resultado do script
Nome do resultado do script | Opções de valores | Exemplo |
---|---|---|
resultados | N/A | N/A |
Resultado 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"
}
]
Conetores
Configure conetores do Elasticsearch v7 no Google SecOps
Para ver instruções detalhadas sobre como configurar um conetor no Google SecOps, consulte o artigo Configurar o conetor.
Para configurar o conector selecionado, use os parâmetros específicos do conector indicados nas tabelas seguintes:
- Parâmetros de configuração do conetor do Elasticsearch
- Parâmetros de configuração do conector DSL do Elasticsearch
Conetor do Elasticsearch
Descrição
Este tópico mostra como o Google SecOps integra o Elasticsearch com o mecanismo e a configuração para carregamento e processamento.
Encaminhamento de alertas do Elasticsearch para o Google SecOps
O Google SecOps vai pesquisar os índices do Elasticsearch especificados com uma consulta fornecida (através da sintaxe de consulta do Lucene) e devolver documentos do Elasticsearch que vão ser traduzidos e contextualizados como "alertas" para registos.
Parâmetros do conetor
Use os seguintes parâmetros para configurar o conector:
Nome a apresentar do parâmetro | Tipo | Valor predefinido | É obrigatório | Descrição |
---|---|---|---|---|
Ambiente predefinido | String | N/A | Não | Selecione o ambiente necessário. Por exemplo, "Cliente um". |
Executar a cada | Número inteiro | 0:0:0:10 | Não | Selecione o período durante o qual a ligação deve ser executada. Por exemplo, "todos os dias". |
Nome do campo do produto | String | device_product | Sim | O nome do campo usado para determinar o produto do dispositivo. Exemplo: _type. |
Nome do campo de evento | String | nome | Sim | O nome do campo usado para determinar o nome do evento (subtipo). Exemplo: _source_match_event_id. |
Limite de tempo do script (segundos) | String | 60 | Sim | O limite de tempo (em segundos) para o processo Python que executa o script atual. |
Endereço do servidor | String | N/A | Sim | O endereço do servidor Elasticsearch, ou seja: http://{ip_address}:{port} |
Nome de utilizador | String | N/A | Sim | Nome de utilizador do Elasticsearch. |
Palavra-passe | Palavra-passe | N/A | Sim | Palavra-passe do Elasticsearch. |
Autenticar | Caixa de verificação | Desmarcado | Não | Se a autenticação deve ser feita na ligação ou não. |
Chave da API | Palavra-passe | N/A | Não | Chave de API do Elasticsearch XPack. |
Validar SSL | Caixa de verificação | Desmarcado | Não | Se deve ou não usar SSL na ligação. |
Campo Nome do alerta | String | N/A | Sim | O nome do campo onde se encontra o nome do alerta (caminho do campo simples). Exemplo: _source_alert_info_alert |
Campo de data/hora | String | N/A | Sim | O nome do campo onde se encontra a indicação de tempo (caminho do campo simples). Exemplo: source@timestamp |
Campo de ambiente | String | N/A | Não | O nome do campo onde o ambiente está localizado (caminho do campo simples). Exemplo: _source_environment |
Índices | String | N/A | Não | Padrão de índice pelo qual pesquisar. Exemplo: '*' |
Consulta | String | N/A | Não | Consulta de padrão de pesquisa (sintaxe de consulta do Lucene). Exemplo: '*' |
Limite da quantidade de alertas | Número inteiro | 20 | Sim | Número máximo de alertas a obter num ciclo. Exemplo: 20. |
Máximo de dias para trás | Número inteiro | 1 | Sim | Número máximo de dias para obter alertas desde. Exemplo: 3. |
Mapeamento do campo de gravidade | String | N/A | Não | Nome do campo onde o valor de gravidade está armazenado. |
Endereço do servidor proxy | String | N/A | Não | O endereço do servidor proxy a usar. |
Nome de utilizador do proxy | String | N/A | Não | O nome de utilizador do proxy para autenticação. |
Palavra-passe do proxy | Palavra-passe | N/A | Não | A palavra-passe do proxy para autenticação. |
Nome do campo de gravidade | String | N/A | Não | Se quiser mapear a gravidade com base no valor da string, tem de criar um ficheiro de mapeamento. Consulte o portal de documentação para ver mais detalhes. |
Padrão de regex do ambiente | String | .* | Não | Um padrão de regex a executar no valor encontrado no campo "Nome do campo do ambiente". A predefinição é .* para captar tudo e devolver o valor inalterado. Usado para permitir que o utilizador manipule o campo do ambiente através da lógica de regex Se o padrão de regex for nulo ou estiver vazio, ou o valor do ambiente for nulo, o resultado do ambiente final é "". |
Como mapear a gravidade no conector
Para mapear a gravidade, tem de especificar que campo deve ser usado para obter o valor da gravidade no parâmetro "Nome do campo de gravidade". Na resposta, pode obter 3 tipos de valores: números inteiros, números de vírgula flutuante e strings. Para números inteiros e de ponto flutuante, não precisa de fazer nenhuma configuração adicional. O conetor vai ler esses valores e mapeá-los de acordo com as normas do Google SecOps. Um lembrete rápido de como os valores inteiros são mapeados:
- 100 – Crítico
- 100 > x >= 80: alta
- 80 > x >=60 Médio
- 60 > x >=40 Baixo
- 40 > x Informativas
Se, na resposta, estivermos a trabalhar com strings, é necessária uma configuração adicional. Na pasta onde se encontram os scripts do conetor, tem um ficheiro de configuração com o nome severity_map_config.json
. Este ficheiro define regras de mapeamento para a gravidade.
Inicialmente, o ficheiro tem o seguinte aspeto:
{
"Default": 50
}
Imagine uma situação em que os valores necessários estão localizados no elemento
event.severity
. event.severity
pode conter os seguintes valores:
"Malicioso", "Benigno", "Desconhecido".
Primeiro, temos de especificar no parâmetro "Severity Field Name" que vamos usar event.severity
.
Em segundo lugar, temos de atualizar o ficheiro de configuração.
Após as alterações, o ficheiro de severity_map_config.json
deve ter o seguinte aspeto:
{
"event.severity": {
"Malicious": 100,
"Unknown": 60,
"Benign": -1
},
"Default": 50
}
Agora, quando o conector receber um evento com event.severity
= "Malicious", vai atribuir-lhe a gravidade Crítica.
Regras de conector
Lista de autorizações/lista de bloqueios
O conetor não suporta a lista de permissões/proibições.
Suporte de proxy
O conetor suporta proxy.
Conetor DSL do Elasticsearch
Descrição
O conetor funciona fazendo uma chamada API REST com uma consulta DSL.
Exemplos de utilização
Capacidade de usar consultas DSL como um parâmetro de pesquisa no Elasticsearch.
Parâmetros do conetor
Use os seguintes parâmetros para configurar o conector:
Nome a apresentar do parâmetro | Tipo | Valor predefinido | É obrigatório | Descrição |
---|---|---|---|---|
Ambiente predefinido | String | N/A | Não | Selecione o ambiente necessário. Por exemplo, "Cliente um". |
Executar a cada | Número inteiro | 0:0:0:10 | Não | Selecione o período durante o qual a ligação deve ser executada. Por exemplo, "todos os dias". |
Nome do campo do produto | String | device_product | Sim | Descreve o nome do campo onde o nome do produto está armazenado. |
Nome do campo do ambiente | String | "" | Não | Descreve o nome do campo onde o nome do ambiente está armazenado. Se o campo do ambiente não for encontrado, o ambiente é "". |
Padrão de regex do ambiente | String | .* | Não | Um padrão de regex a executar no valor encontrado no campo "Nome do campo do ambiente". A predefinição é .* para captar tudo e devolver o valor inalterado. Usado para permitir que o utilizador manipule o campo do ambiente através da lógica de regex Se o padrão de regex for nulo ou estiver vazio, ou o valor do ambiente for nulo, o resultado do ambiente final é "". |
Limite de tempo do script (segundos) | Número inteiro | 60 | Sim | Limite de tempo limite para o processo Python que executa o script atual. |
Endereço do servidor | String | N/A | Sim | Endereço IP do servidor da API Elasticsearch. |
Porta | String | N/A | Sim | Porto do servidor da API Elasticsearch. |
Consulta | String | N/A | Sim | Consulta DSL usada para a pesquisa. É necessário um formato JSON válido. Para tornar o conector mais estável, recomenda-se que adicione uma chave de data/hora de ordenação por ordem ascendente. |
Índice | String | N/A | Sim | Índice usado para uma pesquisa. Por exemplo: _all |
Campo de data/hora | String | N/A | Sim | O nome do campo onde se encontra a indicação de tempo. source@timestamp |
Nome do campo de alerta | String | N/A | Sim | O nome do campo onde se encontra o nome do alerta. _source_info_alertname |
Campo Descrição | String | N/A | Não | O nome do campo onde se encontra a descrição. _source_alert_info_description |
Gravidade | String | Médio | Sim | Gravidade dos alertas. Informações Baixo Médio Alto Crítico |
Limite da quantidade de alertas | Número inteiro | 100 | Não | Limite o número de alertas devolvidos pelo conetor por iteração. |
Autenticar | Caixa de verificação | Desmarcado | Não | Se deve ou não autenticar numa ligação. |
Nome de utilizador | String | N/A | Não | Nome de utilizador da conta do Elasticsearch. |
Palavra-passe | Palavra-passe | N/A | Não | Palavra-passe da conta do Elasticsearch. |
Usar SSL | Caixa de verificação | Desmarcado | Não | Opção para ativar a ligação SSL/TLS. |
Nome do campo de gravidade | String | N/A | Não | Se quiser mapear a gravidade com base no valor da string, tem de criar um ficheiro de mapeamento. Consulte o portal de documentação para ver mais detalhes. |
Gravidade do alerta | String | N/A | Não | A gravidade dos alertas. Valor possível: Info, Low, Medium, High, Critical. Nota: este parâmetro tem prioridade sobre "Nome do campo de gravidade". Se quiser trabalhar com "Nome do campo de gravidade", este campo deve ser deixado vazio. |
Endereço do servidor proxy | String | N/A | Não | O endereço do servidor proxy a usar. |
Nome de utilizador do proxy | String | N/A | Não | O nome de utilizador do proxy para autenticação. |
Palavra-passe do proxy | Palavra-passe | N/A | Não | A palavra-passe do proxy para autenticação. |
Notações suportadas
O conetor suporta três notações. Por exemplo, se quiser usar event.type no parâmetro "Nome do campo de evento". Nesse caso, pode fornecer _source_event_type, event_type ou event.type. Todos estes valores têm o mesmo comportamento.
Para parâmetros:
- Nome do campo do produto
- Nome do campo de evento
- Nome do campo de gravidade
- Campo de ambiente
- Campo de data/hora
- Campo Nome do alerta
- Campo de descrição do alerta: este campo destina-se apenas a conetores DSL
Como mapear a gravidade no conector
Para mapear a gravidade, tem de especificar que campo deve ser usado para obter o valor da gravidade no parâmetro "Nome do campo de gravidade". Na resposta, pode obter 3 tipos de valores: números inteiros, números de vírgula flutuante e strings. Para números inteiros e de ponto flutuante, não precisa de fazer nenhuma configuração adicional. O conetor vai ler esses valores e mapeá-los de acordo com as normas do Google SecOps. Um lembrete rápido de como os valores inteiros são mapeados:
- 100 – Crítico
- 100 > x >= 80: alta
- 80 > x >=60 Médio
- 60 > x >=40 Baixo
- 40 > x Informativas
Se, na resposta, estivermos a trabalhar com strings, é necessária uma configuração adicional. Na pasta onde se encontram os scripts do conetor, tem um ficheiro de configuração com o nome severity_map_config.json
. Este ficheiro define regras de mapeamento para a gravidade.
Inicialmente, o ficheiro tem o seguinte aspeto:
{
"Default": 50
}
Imagine uma situação em que os valores necessários estão localizados no elemento
event.severity
. event.severity
pode conter os seguintes valores:
"Malicioso", "Benigno", "Desconhecido".
Primeiro, temos de especificar no parâmetro "Severity Field Name" que vamos usar event.severity
.
Em segundo lugar, temos de atualizar o ficheiro de configuração.
Após as alterações, o ficheiro de severity_map_config.json
deve ter o seguinte aspeto:
{
"event.severity": {
"Malicious": 100,
"Unknown": 60,
"Benign": -1
},
"Default": 50
}
Agora, quando o conector receber um evento com event.severity
= "Malicious", vai atribuir-lhe a gravidade Crítica.
Regras de conector
Lista de autorizações/lista de bloqueios
O conetor não suporta a lista de permissões/proibições.
Suporte de proxy
O conetor suporta proxy.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.