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"
}
  1. Extraímos 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.

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:

  1. Analise o ficheiro do certificado da CA numa string Base64.
  2. Abra a página de parâmetros de configuração da integração.
  3. Insira a string no campo Ficheiro de certificado da AC.
  4. 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

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

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

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:

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.
Exemplo:

source@timestamp

Nome do campo de alerta String N/A Sim

O nome do campo onde se encontra o nome do alerta.
Exemplo:

_source_info_alertname

Campo Descrição String N/A Não

O nome do campo onde se encontra a descrição.
Exemplo:

_source_alert_info_description

Gravidade String Médio Sim

Gravidade dos alertas.
Valor possível:

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.