ElasticsearchV7

Versão da integração: 17.0

Configurar o ElasticsearchV7 para trabalhar com o Google Security Operations

Como criar um token de API

Para criar um novo token de API, faça a seguinte solicitação:

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 de resposta:

{
  "id": "G1NIWnI",
  "name": "siemplify-integration",
  "api_key": "dSwyjWJ_Ql"
}
  1. Usamos os parâmetros "id" e "api_key" da resposta.
  2. Use a codificação base64 de "id" e "api_key" unidas por dois pontos, como "id:api_key".
  3. O resultado é usado como um token de API na integração.

Como acessar o Elasticsearch

O Google SecOps acessa o Elasticsearch pela API RESTful na porta TCP 9200 por padrão. O servidor do Google SecOps precisa de acesso aos nós relevantes do Elasticsearch no TCP 9200 (padrão) ou em uma porta alternativa se a porta padrão não foi usada durante a implantação do Elasticsearch.

Configurar a integração do ElasticsearchV7 no Google SecOps

Para instruções detalhadas sobre como configurar uma integração no Google SecOps, consulte Configurar integrações.

Configurar a integração do Elasticsearch com um certificado de CA

Se necessário, verifique sua conexão com um arquivo de certificado de CA.

Antes de começar, verifique se você tem o seguinte:

  • O arquivo de certificado de CA
  • A versão mais recente da integração do Elasticsearch

Para configurar a integração com um certificado da CA, siga estas etapas:

  1. Analise o arquivo de certificado da CA em uma string Base64.
  2. Abra a página de parâmetros de configuração da integração.
  3. Insira a string no campo Arquivo de certificado da CA.
  4. Para testar se a integração foi configurada corretamente, marque a caixa de seleção Verificar SSL e clique em Testar.

Parâmetros de integração

Use os seguintes parâmetros para configurar a integração:

Nome de exibição do parâmetro Tipo Valor padrão É obrigatório Descrição
Nome da instância String N/A Não Nome da instância em que você 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 usuário String N/A Sim O endereço de e-mail do usuário que deve ser usado para se conectar ao Elasticsearch 7.0.0.
Senha Senha N/A Sim A senha do usuário correspondente.
Token da API Senha N/A Não Token da API XPack do Elasticsearch.
Autenticar Caixa de seleção Desmarcado Não N/A
Verificar SSL Caixa de seleção Desmarcado Não Use essa caixa de seleção se a conexão do Elasticsearch 7.0.0 exigir uma verificação SSL (desmarcada por padrão).
Arquivo de certificado de CA String N/A Não Arquivo de certificado de CA.
Executar remotamente Caixa de seleção Desmarcado Não Marque a caixa para executar a integração configurada remotamente. Depois de marcada, a opção aparece para selecionar o usuário remoto (agente).

Ações

Descrição

Um teste do Elasticsearch pré-criado que retorna um dicionário de palavras.

Parâmetros

Parâmetros Tipo Valor padrão 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.Esse parâmetro define em quais índices pesquisar. Pode ser um nome exato, por exemplo, "smp_playbooks-2019.06.13", ou você pode usar um caractere curinga para pesquisar por um padrão, por exemplo, "smp_playbooks-2019.06 "ou "smp".

Para saber mais sobre os índices do Elasticsearch, acesse https://www.elastic.co/blog/what-is-an-elasticsearch-index

Consulta String *

A consulta de pesquisa a ser realizada. Ele está na sintaxe do Lucene.

IE1: "*" (é um caractere curinga que retorna todos os registros)

IE2: "level:error"

IE3: "level:information"

IE4: "level:error OR level:warning"

Para saber mais sobre a sintaxe do Lucene, acesse 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 contagem de retorno de documentos, por exemplo: 10.

0 = Sem limite.

Campo de exibição String *

Limita os campos retornados. O padrão "*" retorna todos os campos.

Você pode declarar um único campo, por exemplo, "level".

Campo de pesquisa String _all

Campo de pesquisa para consultas de texto livre (quando a consulta não especifica um nome de campo).

O padrão é "_all", o que significa que todos os campos são pesquisados. É melhor usar a sintaxe adequada do Lucene nos campos "_all" ou a pesquisa textual em um campo específico.

Ie1: Search Field = "_all". Consulta = "level:error". A consulta vai retornar todos os registros em que o campo "level" é igual a "error".

Ie2: Search Field = "Message", query = "Login Alarm". A consulta vai retornar todos os registros em que o campo "Message" contém o texto "Login Alarm".

Campo de carimbo de data/hora String @timestamp O nome do campo em que a filtragem com base em tempo será executada. O padrão é @timestamp. Se as duas datas estiverem vazias, nenhum filtro com base no tempo será aplicado.
Data mais antiga String now-1d

Data de início da pesquisa. A pesquisa vai retornar apenas registros iguais ou posteriores a esse momento.

A entrada pode estar em UTC exato:

Formato: AAAA-MM-DDTHH:MM:SSZ

Exemplo: 2019-06-04T10:00:00Z

A entrada também pode ser relativa (usando cálculo de datas): tie: "now", "now-1d", "now-1d/d", "now-2h/h"

Para saber mais sobre cálculos de datas, acesse https://www.elastic.co/guide/en/elasticsearch/reference/7.1/common-options.html#date-math

Data mais antiga String agora

Data de término da pesquisa. A pesquisa vai retornar apenas registros iguais ou anteriores a esse ponto no tempo.

A entrada pode estar em UTC exato:

Formato: AAAA-MM-DDTHH:MM:SSZ

Exemplo: 2019-06-04T10:00:00Z

A entrada também pode ser relativa (usando cálculos de data):

Por exemplo: "now", "now-1d", "now-1d/d", "now-2h/h"

Para saber mais sobre cálculos de datas, acesse https://www.elastic.co/guide/en/elasticsearch/reference/7.1/common-options.html#date-math

Executar em

Essa ação é executada em todas as entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
resultados N/A N/A

Descrição

Pesquisa tudo no Elasticsearch e retorna resultados em um formato de dicionário. Essa ação só aceita consultas sem período. Se você quiser usar um período na sua consulta, use a ação "Pesquisa avançada do ES".

Parâmetros

Parâmetros Tipo Valor padrão 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.

Esse parâmetro define em quais índices pesquisar. Pode ser um nome exato, por exemplo, \"smp_playbooks-2019.06.13\"\r\nou você pode usar um caractere curinga () para pesquisar por um padrão, por exemplo, \"smp_playbooks-2019.06\" ou \"smp*\".

Para saber mais sobre os índices do Elasticsearch, acesse https://www.elastic.co/blog/what-is-an-elasticsearch-index

Consulta String *

A consulta de pesquisa a ser realizada. Ele está na sintaxe do Lucene.

IE1: \"*\" (é um caractere curinga que retorna todos os registros)

IE2: \"level:error\"

IE3: \"level:information\"

IE4: \"level:error OR level:warning\"

Para saber mais sobre a sintaxe do Lucene, acesse 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 contagem de retorno de documentos, por exemplo: 10.

0 = Sem limite

Executar em

Essa ação é executada em todas as entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
resultados N/A N/A
Resultado do 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"
    }
]

Ping

Descrição

O teste verifica a conectividade com o servidor do Elasticsearch.

Parâmetros

N/A

Executar em

Essa ação é executada em todas as entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
is_success Verdadeiro/Falso is_success:False

Descrição

A ação pesquisa tudo no Elasticsearch e retorna resultados em um formato de dicionário.

Parâmetros

Parâmetros Tipo Valor padrão 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.

Esse parâmetro define em quais índices pesquisar. Pode ser um nome exato, por exemplo, \"smp_playbooks-2019.06.13\", ou você pode usar um caractere curinga () para pesquisar por um padrão, por exemplo, \"smp_playbooks-2019.06\" ou \"smp*\".

Para saber mais sobre os índices do Elasticsearch, acesse https://www.elastic.co/blog/what-is-an-elasticsearch-index

Consulta String *

A consulta de pesquisa a ser realizada. Ele está na sintaxe do Lucene.

IE1: \"*\" (é um caractere curinga que retorna todos os registros)

IE2: \"level:error\"

IE3: \"level:information\"

IE4: \"level:error OR level:warning\"

Para saber mais sobre a sintaxe do Lucene, acesse 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 contagem de retorno de documentos, por exemplo: 10.

0 = Sem limite.

Executar em

Essa ação é executada em todas as entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
resultados N/A N/A
Resultado do 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"
  }
 ]

Conectores

Configurar conectores do Elasticsearch v7 no Google SecOps

Para instruções detalhadas sobre como configurar um conector no Google SecOps, consulte Configurar o conector.

Para configurar o conector selecionado, use os parâmetros específicos listados nas tabelas a seguir:

Conector do Elasticsearch

Descrição

Neste tópico, mostramos como o Google SecOps integra o Elasticsearch ao mecanismo e à configuração para ingestão e processamento.

Encaminhamento de alertas do Elasticsearch para o Google SecOps

O Google SecOps vai pesquisar os índices especificados do Elasticsearch com uma consulta fornecida (usando a sintaxe de consulta do Lucene) e retornar documentos do Elasticsearch que serão traduzidos e contextualizados como "alertas" para casos.

Parâmetros do conector

Use os seguintes parâmetros para configurar o conector:

Nome de exibição do parâmetro Tipo Valor padrão É obrigatório Descrição
Ambiente padrão 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 de tempo para executar a conexão. 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 do evento String nome Sim O nome do campo usado para determinar o nome do evento (subtipo). Exemplo: _source_match_event_id.
Tempo limite 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 usuário String N/A Sim Nome de usuário do Elasticsearch.
Senha Senha N/A Sim Senha do Elasticsearch.
Autenticar Caixa de seleção Desmarcado Não Se é necessário autenticar na conexão.
Token da API Senha N/A Não Token da API XPack do Elasticsearch.
Verificar SSL Caixa de seleção Desmarcado Não Se é preciso usar SSL na conexão.
Campo "Nome do alerta" String N/A Sim O nome do campo em que o nome do alerta está localizado (caminho de campo simples). Exemplo: _source_alert_info_alert
Campo de carimbo de data/hora String N/A Sim O nome do campo em que o carimbo de data/hora está localizado (caminho do campo simples). Exemplo: source@timestamp
Campo "Ambiente" String N/A Não O nome do campo em que o ambiente está localizado (caminho de campo simples). Exemplo: _source_environment
Índices String N/A Não Padrão de índice para pesquisar. Exemplo: "*"
Consulta String N/A Não Consulta de padrão de pesquisa (sintaxe de consulta do Lucene). Exemplo: "*"
Limite de contagem de alertas Número inteiro 20 Sim Número máximo de alertas a serem extraídos em um ciclo. Exemplo: 20.
Número máximo de dias para retroceder Número inteiro 1 Sim Número máximo de dias para buscar alertas desde. Exemplo: 3.
Mapeamento do campo de gravidade String N/A Não Nome do campo em que o valor de gravidade é armazenado.
Endereço do servidor proxy String N/A Não O endereço do servidor proxy a ser usado.
Nome de usuário do proxy String N/A Não O nome de usuário do proxy para autenticação.
Senha do proxy Senha N/A Não A senha do proxy para autenticação.
Nome do campo de gravidade String N/A Não Se você quiser mapear a gravidade com base no valor da string, crie um arquivo de mapeamento. Consulte o portal de documentação para mais detalhes.
Padrão de regex do ambiente String .* Não

Um padrão de regex a ser executado no valor encontrado no campo "Nome do campo de ambiente".

O padrão é ".*" para capturar tudo e retornar o valor sem alterações.

Usado para permitir que o usuário manipule o campo de ambiente usando a lógica regex.

Se o padrão de regex for nulo ou vazio, ou se o valor do ambiente for nulo, o resultado final do ambiente será "".

Como mapear a gravidade no conector

Para mapear a gravidade, especifique qual campo deve ser usado para receber o valor da gravidade no parâmetro "Nome do campo de gravidade". Na resposta, você pode receber três tipos de valores: números inteiros, números de ponto flutuante e strings. Para números inteiros e de ponto flutuante, não é preciso fazer nenhuma outra configuração. O conector vai ler esses valores e mapeá-los de acordo com os padrões do Google SecOps. Um breve lembrete de como os valores inteiros são mapeados:

  • 100: crítica
  • 100 > x >= 80 Alta
  • 80 > x >=60 Médio
  • 60 > x >=40 Baixa
  • 40 > x Informativa

Se na resposta estivermos trabalhando com strings, será necessária uma configuração adicional. Na pasta em que os scripts do conector estão localizados, há um arquivo de configuração chamado severity_map_config.json. Esse arquivo define regras de mapeamento para a gravidade.

Inicialmente, o arquivo vai ficar assim:

{
    "Default": 50
}

Imagine uma situação em que os valores necessários estão localizados no event.severity. event.severity pode conter os seguintes valores: "Malicious", "Benign", "Unknown".

Primeiro, especifique no parâmetro "Nome do campo de gravidade" que vamos usar event.severity.

Em segundo lugar, precisamos atualizar o arquivo de configuração.

Depois das mudanças, o arquivo severity_map_config.json vai ficar assim:

{
    "event.severity": {
        "Malicious": 100,
        "Unknown": 60,
        "Benign": -1
    },
    "Default": 50
}

Agora, quando o conector receber um evento com event.severity = "Malicious", ele vai atribuir gravidade crítica.

Regras do conector

Lista de permissões/lista de proibições

O conector não é compatível com listas de permissões/proibições.

Suporte a proxy

O conector é compatível com proxy.

Conector DSL do Elasticsearch

Descrição

O conector funciona fazendo uma chamada da API REST com uma consulta DSL.

Casos de uso e exemplos

Capacidade de usar consultas DSL como um parâmetro de pesquisa no Elasticsearch.

Parâmetros do conector

Use os seguintes parâmetros para configurar o conector:

Nome de exibição do parâmetro Tipo Valor padrão É obrigatório Descrição
Ambiente padrão 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 de tempo para executar a conexão. Por exemplo, "todos os dias".
Nome do campo do produto String device_product Sim Descreve o nome do campo em que o nome do produto está armazenado.
Nome do campo de ambiente String "" Não

Descreve o nome do campo em que o nome do ambiente é armazenado.

Se o campo de ambiente não for encontrado, o ambiente será "".

Padrão de regex do ambiente String .* Não

Um padrão de regex a ser executado no valor encontrado no campo "Nome do campo de ambiente".

O padrão é ".*" para capturar tudo e retornar o valor sem alterações.

Usado para permitir que o usuário manipule o campo de ambiente usando a lógica regex.

Se o padrão de regex for nulo ou vazio, ou se o valor do ambiente for nulo, o resultado final do ambiente será "".

Tempo limite 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 Porta do servidor da API do Elasticsearch.
Consulta String N/A Sim

Consulta da DSL usada para a pesquisa.

É necessário um formato JSON válido.

Para tornar o conector mais estável, recomendamos adicionar uma chave de carimbo de data/hora de classificação em ordem crescente.

Índice String N/A Sim

Índice usado para uma pesquisa.

Por exemplo: _all

Campo de carimbo de data/hora String N/A Sim

O nome do campo em que o carimbo de data/hora está localizado.
Exemplo:

source@timestamp

Nome do campo de alerta String N/A Sim

O nome do campo em que o nome do alerta está localizado.
Exemplo:

_source_info_alertname

Campo de descrição String N/A Não

O nome do campo em que a descrição está localizada.
Exemplo:

_source_alert_info_description

Gravidade String Médio Sim

Gravidade dos alertas.
Valor possível:

Informações

Baixo

Médio

Alta

Crítico

Limite de contagem de alertas Número inteiro 100 Não Limite o número de alertas retornados pelo conector por iteração.
Autenticar Caixa de seleção Desmarcado Não Se é necessário autenticar em uma conexão.
Nome de usuário String N/A Não Nome de usuário da conta do Elasticsearch.
Senha Senha N/A Não Senha da conta do Elasticsearch.
Usar SSL Caixa de seleção Desmarcado Não Opção para ativar a conexão SSL/TLS.
Nome do campo de gravidade String N/A Não Se você quiser mapear a gravidade com base no valor da string, crie um arquivo de mapeamento. Consulte o portal de documentação para mais detalhes.
Gravidade do alerta String N/A Não

A gravidade dos alertas.

Valores possíveis: Info, Low, Medium, High, Critical.

Observação:esse parâmetro tem prioridade sobre "Nome do campo de gravidade". Se você quiser trabalhar com "Nome do campo de gravidade", deixe esse campo vazio.

Endereço do servidor proxy String N/A Não O endereço do servidor proxy a ser usado.
Nome de usuário do proxy String N/A Não O nome de usuário do proxy para autenticação.
Senha do proxy Senha N/A Não A senha do proxy para autenticação.

Notações aceitas

O conector é compatível com três notações. Por exemplo, se você quiser usar event.type no parâmetro "Nome do campo do evento". Nesse caso, você pode fornecer _source_event_type, event_type ou event.type. Todos esses valores vão se comportar da mesma forma.

Para parâmetros:

  • Nome do campo do produto
  • Nome do campo do evento
  • Nome do campo de gravidade
  • Campo "Ambiente"
  • Campo de carimbo de data/hora
  • Campo "Nome do alerta"
  • Campo de descrição do alerta: apenas para conectores DSL

Como mapear a gravidade no conector

Para mapear a gravidade, especifique qual campo deve ser usado para receber o valor da gravidade no parâmetro "Nome do campo de gravidade". Na resposta, você pode receber três tipos de valores: números inteiros, números de ponto flutuante e strings. Para números inteiros e de ponto flutuante, não é preciso fazer nenhuma outra configuração. O conector vai ler esses valores e mapeá-los de acordo com os padrões do Google SecOps. Um breve lembrete de como os valores inteiros são mapeados:

  • 100: crítica
  • 100 > x >= 80 Alta
  • 80 > x >=60 Médio
  • 60 > x >=40 Baixa
  • 40 > x Informativa

Se na resposta estivermos trabalhando com strings, será necessária uma configuração adicional. Na pasta em que os scripts do conector estão localizados, há um arquivo de configuração chamado severity_map_config.json. Esse arquivo define regras de mapeamento para a gravidade.

Inicialmente, o arquivo vai ficar assim:

{
    "Default": 50
}

Imagine uma situação em que os valores necessários estão localizados no event.severity. event.severity pode conter os seguintes valores: "Malicious", "Benign", "Unknown".

Primeiro, especifique no parâmetro "Nome do campo de gravidade" que vamos usar event.severity.

Em segundo lugar, precisamos atualizar o arquivo de configuração.

Depois das mudanças, o arquivo severity_map_config.json vai ficar assim:

{
    "event.severity": {
        "Malicious": 100,
        "Unknown": 60,
        "Benign": -1
    },
    "Default": 50
}

Agora, quando o conector receber um evento com event.severity = "Malicious", ele vai atribuir gravidade crítica.

Regras do conector

Lista de permissões/lista de proibições

O conector não é compatível com listas de permissões/proibições.

Suporte a proxy

O conector é compatível com proxy.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.