Recolha registos do Elastic Auditbeat

Compatível com:

Este documento explica como ingerir registos do Elastic Auditbeat no Google Security Operations através do Amazon S3. O analisador extrai campos dos registos JSON, normaliza-os no modelo de dados unificado (UDM) e enriquece os dados com contexto adicional, como informações do anfitrião, detalhes da rede e classificações de resultados de segurança. Processa vários tipos de eventos ao mapear event1.action e outros campos para tipos de eventos de metadados da UDM específicos, usando por predefinição GENERIC_EVENT ou categorias mais específicas quando possível.

Antes de começar

Certifique-se de que cumpre os seguintes pré-requisitos:

  • Uma instância do Google SecOps.
  • Acesso privilegiado ao servidor Elastic Auditbeat.
  • Acesso privilegiado ao servidor Logstash.
  • Acesso privilegiado à AWS (S3, Identity and Access Management [IAM]).

Obtenha os pré-requisitos do Elastic Auditbeat

  1. Certifique-se de que o Elastic Auditbeat está instalado e configurado nos seus servidores.
  2. Instale o Logstash num servidor dedicado ou juntamente com o Auditbeat.
  3. Tome nota da localização do ficheiro de configuração do Auditbeat (normalmente, /etc/auditbeat/auditbeat.yml).

Configure o contentor do AWS S3 e o IAM para o Google SecOps

  1. Crie um contentor do Amazon S3 seguindo este guia do utilizador: Criar um contentor
  2. Guarde o nome e a região do contentor para referência futura (por exemplo, elastic-auditbeat-logs).
  3. Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
  4. Selecione o utilizador criado.
  5. Selecione o separador Credenciais de segurança.
  6. Clique em Criar chave de acesso na secção Chaves de acesso.
  7. Selecione Serviço de terceiros como Exemplo de utilização.
  8. Clicar em Seguinte.
  9. Opcional: adicione a etiqueta de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Transferir ficheiro .CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
  12. Clique em Concluído.
  13. Selecione o separador Autorizações.
  14. Clique em Adicionar autorizações na secção Políticas de autorizações.
  15. Selecione Adicionar autorizações.
  16. Selecione Anexar políticas diretamente.
  17. Pesquise a política AmazonS3FullAccess.
  18. Selecione a política.
  19. Clicar em Seguinte.
  20. Clique em Adicionar autorizações.

Configure o Auditbeat para enviar para o Logstash

  1. Edite o ficheiro de configuração do Auditbeat /etc/auditbeat/auditbeat.yml.
  2. Comente qualquer configuração de saída existente (Elasticsearch, etc.).
  3. Adicione a configuração de saída do Logstash:

    # ==================== Outputs ====================
    output.logstash:
      hosts: ["localhost:5044"]
      # If Logstash is on a different server, use its IP/hostname
      # hosts: ["logstash-server:5044"]
    
      # Optional: Enable load balancing if using multiple Logstash instances
      loadbalance: true
    
      # Optional: Configure bulk settings (default is 2048)
      bulk_max_size: 2048
    
      # Optional: Configure SSL if needed
      # ssl.enabled: true
      # ssl.certificate_authorities: ["/path/to/ca.crt"]
    
  4. Reinicie o Auditbeat para aplicar as alterações:

    sudo systemctl restart auditbeat
    

Configure o pipeline do Logstash

  1. Crie um novo ficheiro de configuração do pipeline do Logstash /etc/logstash/conf.d/auditbeat-to-s3.conf:

    input {
      beats {
        port => 5044
        # Optional: Configure SSL
        # ssl => true
        # ssl_certificate => "/path/to/server.crt"
        # ssl_key => "/path/to/server.key"
      }
    }
    
    filter {
      # Add any necessary transformations here
      # The data should remain in raw JSON format for Chronicle parsing
    
      # Optional: Add metadata for debugging
      mutate {
        add_field => { "[@metadata][pipeline]" => "auditbeat-to-s3" }
      }
    }
    
    output {
      s3 {
        # AWS credentials
        access_key_id => "YOUR_AWS_ACCESS_KEY_ID"
        secret_access_key => "YOUR_AWS_SECRET_ACCESS_KEY"
    
        # S3 bucket configuration
        region => "us-east-1"  # Replace with your bucket region
        bucket => "elastic-auditbeat-logs"  # Replace with your bucket name
    
        # Organize logs by date using Logstash timestamp interpolation
        prefix => "auditbeat/%{+YYYY}/%{+MM}/%{+dd}/"
    
        # File rotation settings
        size_file => 10485760  # 10MB files
        time_file => 5  # Rotate every 5 minutes
    
        # Compression for cost optimization
        encoding => "gzip"
    
        # Output format - keep as JSON for Chronicle
        codec => "json_lines"
    
        # Optional: Server-side encryption
        # server_side_encryption => true
        # server_side_encryption_algorithm => "AES256"
      }
    
      # Optional: Keep a local copy for debugging
      # stdout { 
      #   codec => rubydebug 
      # }
    }
    
    • Substitua YOUR_AWS_ACCESS_KEY_ID e YOUR_AWS_SECRET_ACCESS_KEY pelas suas credenciais reais da AWS.
    • Atualize os valores region e bucket para corresponderem à sua configuração do S3.
    • Inicie ou reinicie o Logstash:
    sudo systemctl restart logstash
    

(Opcional) Crie um utilizador e chaves da IAM só de leitura para o Google SecOps

  1. Aceda a AWS Console > IAM > Users.
  2. Clique em Adicionar utilizadores.
  3. Indique os seguintes detalhes de configuração:
    • Utilizador: introduza secops-reader.
    • Tipo de acesso: selecione Chave de acesso – Acesso programático.
  4. Clique em Criar utilizador.
  5. Anexe a política de leitura mínima (personalizada): Users > secops-reader > Permissions > Add permissions > Attach policies directly > Create policy.
  6. JSON:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::elastic-auditbeat-logs/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::elastic-auditbeat-logs"
        }
      ]
    }
    
  7. Nome = secops-reader-policy.

  8. Clique em Criar política > procure/selecione > Seguinte > Adicionar autorizações.

  9. Crie uma chave de acesso para secops-reader: Credenciais de segurança > Chaves de acesso.

  10. Clique em Criar chave de acesso.

  11. Transfira o .CSV. (Vai colar estes valores no feed).

Configure um feed no Google SecOps para carregar registos do Elastic Auditbeat

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em + Adicionar novo feed.
  3. No campo Nome do feed, introduza um nome para o feed (por exemplo, Elastic Auditbeat Logs).
  4. Selecione Amazon S3 V2 como o Tipo de origem.
  5. Selecione Elastic Audit Beats como o Tipo de registo.
  6. Clicar em Seguinte.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • URI do S3: s3://elastic-auditbeat-logs/auditbeat/
    • Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
    • Idade máxima do ficheiro: inclua ficheiros modificados no último número de dias. A predefinição é 180 dias.
    • ID da chave de acesso: chave de acesso do utilizador com acesso ao contentor do S3.
    • Chave de acesso secreta: chave secreta do utilizador com acesso ao contentor do S3.
    • Espaço de nomes do recurso: o espaço de nomes do recurso.
    • Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
  8. Clicar em Seguinte.
  9. Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.

Tabela de mapeamento do UDM

Campo de registo Mapeamento do UDM Lógica
@timestamp metadata.event_timestamp A data/hora do evento é analisada a partir do campo @timestamp.
agent.id observer.asset_id Com o prefixo "agent_id: ".
agent.type observer.application A aplicação observadora está definida para o tipo de agente.
agent.version observer.platform_version A versão da plataforma do observador está definida para a versão do agente.
client.bytes principal.labels Adicionado como uma etiqueta com a chave "Bytes". Convertido em string.
client.ip principal.ip O IP principal está definido como o IP do cliente.
client.packets principal.labels Adicionado como uma etiqueta com a chave "Packets". Convertido em string.
client.port principal.port A porta principal está definida para a porta do cliente. Convertido em número inteiro.
cloud.availability_zone principal.cloud.availability_zone A zona de disponibilidade da nuvem principal está definida para a zona de disponibilidade da nuvem.
cloud.instance.id principal.resource.id O ID do recurso principal é definido como o ID da instância da nuvem.
cloud.machine.type principal.resource.resource_subtype O subtipo de recurso principal está definido como o tipo de máquina da nuvem.
cloud.region principal.cloud.availability_zone Se a região da nuvem estiver presente, substitui a zona de disponibilidade.
destination.bytes target.labels Adicionado como uma etiqueta com a chave "Bytes". Convertido em string.
destination.ip target.ip O IP de destino é definido como o IP de destino.
destination.packets target.labels Adicionado como uma etiqueta com a chave "Packets". Convertido em string.
destination.port target.port A porta de destino está definida como a porta de destino. Convertido em número inteiro.
ecs.version metadata.product_version Se estiver presente, substitui o valor de jsonPayload.@metadata.version.
event1.category security_result.category_details Todos os valores são adicionados a category_details.
event1.duration network.session_duration.seconds Convertido em número inteiro.
event1.id metadata.product_log_id O ID do registo do produto de metadados está definido como o ID do evento.
event1.outcome extensions.auth.auth_details Os detalhes de autorização estão definidos para o resultado do evento.
file.extension target.file.mime_type O tipo MIME do ficheiro de destino está definido para a extensão do ficheiro.
file.hash.sha1 target.file.sha1 O SHA-1 do ficheiro de destino é definido como o hash SHA-1 do ficheiro.
file.path target.file.full_path O caminho completo do ficheiro de destino está definido para o caminho.
file.size target.file.size Convertido em uinteger.
group.id principal.group.product_object_id O ID do objeto do produto do grupo principal está definido como o ID do grupo.
group.name principal.group.group_display_name O nome a apresentar do grupo principal é definido como o nome do grupo.
host.architecture principal.asset.hardware.cpu_platform Armazenado na variável temporária hardware.cpu_platform e, em seguida, unido em principal.asset.hardware.
host.hostname principal.hostname O nome do anfitrião principal está definido como o nome do anfitrião do anfitrião.
host.id principal.asset.asset_id Com o prefixo "Host Id: ".
host.ip principal.asset.ip Todos os valores são adicionados aos IPs do recurso principal.
host.mac principal.mac Os travessões são substituídos por dois pontos.
host.name principal.hostname, observer.hostname Se estiver presente, substitui o valor de host.hostname.
host.os.kernel principal.platform_patch_level O nível de patch da plataforma principal está definido para o kernel do SO do anfitrião.
host.os.version principal.platform_version A versão principal da plataforma está definida como a versão do SO do anfitrião. Armazenado na variável temporária host_os_version.
httpRequest.remoteIp target.ip Se estiver presente e não estiver definido nenhum outro IP de destino, é usado este valor.
httpRequest.requestMethod network.http.method O método HTTP de rede está definido para o método de pedido HTTP.
httpRequest.requestSize network.sent_bytes Convertido em uinteger.
httpRequest.requestUrl network.http.referral_url O URL de referência HTTP da rede está definido para o URL do pedido HTTP.
httpRequest.responseSize network.received_bytes Convertido em uinteger.
httpRequest.serverIp principal.ip Se estiver presente e não estiver definido nenhum outro IP principal, este valor é usado.
httpRequest.status network.http.response_code Convertido em número inteiro.
httpRequest.userAgent network.http.user_agent O agente do utilizador HTTP de rede está definido para o agente do utilizador do pedido HTTP.
insertId network.session_id O ID da sessão de rede é definido com o ID de inserção.
jsonPayload.@metadata.beat metadata.product_event_type O tipo de evento do produto de metadados está definido como o beat de metadados.
jsonPayload.@metadata.version metadata.product_version A versão do produto de metadados está definida para a versão dos metadados.
jsonPayload.destination.ip target.ip Se estiver presente e não estiver definido nenhum outro IP de destino, é usado este valor.
jsonPayload.destination.port target.port Se estiver presente e não estiver definida nenhuma outra porta de destino, é usado este valor. Convertido em número inteiro.
jsonPayload.event1.category security_result.category_details Todos os valores são adicionados a category_details.
jsonPayload.file.path target.file.full_path Se estiver presente e não estiver definido nenhum outro caminho de destino, este valor é usado.
jsonPayload.process.executable principal.process.file.full_path, target.process.file.full_path Usado para definir o caminho completo do processo principal e de destino se não estiver presente nenhum outro valor.
jsonPayload.process.name principal.application Se estiver presente e não estiver definida nenhuma outra aplicação principal, este valor é usado.
jsonPayload.process.parent.pid principal.process.pid Se estiver presente e não estiver definido nenhum outro PID do processo principal, este valor é usado. Convertido em string.
jsonPayload.process.parent.ppid principal.process.parent_process.pid Se estiver presente e não estiver definido nenhum outro PID do processo principal, este valor é usado. Convertido em string.
jsonPayload.process.parent.process.executable principal.process.file.full_path Se estiver presente e não estiver definido nenhum outro caminho completo do processo principal, este valor é usado.
jsonPayload.process.parent.process.exe principal.process.file.full_path Se estiver presente e não estiver definido nenhum outro caminho completo do processo principal, este valor é usado.
jsonPayload.process.parent.process.title principal.process.command_line Se estiver presente e não estiver definida nenhuma outra linha de comandos do processo principal, este valor é usado.
jsonPayload.process.pid target.process.pid O PID do processo de destino está definido como o PID do processo de carga útil JSON.
jsonPayload.process.title target.process.command_line A linha de comandos do processo de destino está definida para o título do processo do payload JSON.
jsonPayload.user.id target.user.userid Se estiver presente e não estiver definido nenhum outro ID do utilizador de destino, este valor é usado. Convertido em string.
jsonPayload.user.name target.user.user_display_name Se estiver presente e não estiver definido nenhum outro nome a apresentar do utilizador de destino, este valor é usado.
msg metadata.description A descrição dos metadados é definida para a mensagem.
network.bytes network.sent_bytes Convertido em uinteger.
network.community_id network.community_id O ID da comunidade da rede é definido como o ID da comunidade da rede.
network.transport network.ip_protocol Convertido em maiúsculas.
package.description security_result.description A descrição do resultado de segurança está definida como a descrição do pacote.
package.name security_result.rule_name O nome da regra do resultado de segurança está definido como o nome do pacote.
package.reference security_result.about.url O URL do resultado de segurança está definido como a referência do pacote.
package.size security_result.about.file.size Convertido em uinteger.
package.type security_result.about.file.mime_type, security_result.rule_type O tipo MIME do resultado de segurança e o tipo de regra estão definidos como o tipo de pacote.
process.created principal.asset.creation_time Se estiver presente, este valor é usado. Analisado como ISO8601.
process.entity_id principal.process.product_specific_process_id Com o prefixo "Processo:".
process.executable principal.process.file.full_path, target.process.file.full_path Usado para definir o caminho completo do processo principal e de destino se não estiver presente nenhum outro valor.
process.hash.sha1 principal.process.file.sha1 O SHA-1 principal está definido para o hash SHA-1 do processo.
process.name principal.application Se estiver presente e não estiver definida nenhuma outra aplicação principal, este valor é usado.
process.pid principal.process.pid Se estiver presente e não estiver definido nenhum outro PID do processo principal, este valor é usado. Convertido em string.
process.ppid principal.process.parent_process.pid Se estiver presente e não estiver definido nenhum outro PID do processo principal, este valor é usado. Convertido em string.
process.start principal.asset.creation_time Se process.created não estiver presente e este campo estiver presente, é usado este valor. Analisado como ISO8601.
resource.labels.backend_service_name target.resource.name O nome do recurso de destino é definido como o nome do serviço de back-end do recurso.
resource.labels.forwarding_rule_name target.resource.attribute.labels Adicionado como uma etiqueta com a chave "Nome da regra de encaminhamento".
resource.labels.project_id target.resource.product_object_id O ID do objeto do produto do recurso de destino é definido como o ID do projeto do recurso.
resource.labels.target_proxy_name target.resource.attribute.labels Adicionado como uma etiqueta com a chave "Nome do proxy de destino".
resource.labels.url_map_name target.resource.attribute.labels Adicionado como uma etiqueta com a chave "URL map name".
server.bytes intermediary.labels Adicionado como uma etiqueta com a chave "Bytes". Convertido em string.
server.ip intermediary.ip O IP intermediário está definido para o IP do servidor.
server.packets intermediary.labels Adicionado como uma etiqueta com a chave "Packets". Convertido em string.
server.port intermediary.port A porta intermediária está definida como a porta do servidor. Convertido em número inteiro.
service.type target.application A aplicação de destino está definida para o tipo de serviço.
source.bytes src.labels Adicionado como uma etiqueta com a chave "Bytes". Convertido em string.
source.ip src.ip O IP de origem é definido como o IP de origem.
source.packets src.labels Adicionado como uma etiqueta com a chave "Packets". Convertido em string.
source.port src.port A porta de origem está definida para a porta de origem. Convertido em número inteiro.
system.audit.host.boottime about.asset.last_boot_time Analisado como ISO8601.
system.audit.host.hostname about.hostname O nome do anfitrião about está definido para o nome do anfitrião de auditoria do sistema.
system.audit.host.id principal.user.userid O ID do utilizador principal está definido como o ID do anfitrião de auditoria do sistema.
system.audit.host.mac.0 about.mac O endereço MAC acerca de está definido como o primeiro endereço MAC do anfitrião de auditoria do sistema.
trace target.process.file.full_path Se estiver presente e não estiver definido nenhum outro caminho completo do processo de destino, este valor é usado.
user.effective.id target.user.userid Se estiver presente e não estiver definido nenhum outro ID do utilizador de destino, este valor é usado.
user.effective.name target.user.user_display_name Se estiver presente e não estiver definido nenhum outro nome a apresentar do utilizador de destino, este valor é usado.
user.id target.user.userid Se estiver presente e não estiver definido nenhum outro ID do utilizador de destino, este valor é usado. Convertido em string.
user.name target.user.user_display_name Se estiver presente e não estiver definido nenhum outro nome a apresentar do utilizador de destino, este valor é usado.
N/A metadata.event_type Inicialmente, é definido como "GENERIC_EVENT". Alterado com base na lógica descrita nos comentários do código do analisador.
N/A metadata.log_type Definido como "ELASTIC_AUDITBEAT".
N/A metadata.product_name Definido como "Auditbeat".
N/A metadata.vendor_name Defina como "Elástico".
N/A extensions.auth.type Definido como "AUTHTYPE_UNSPECIFIED" para eventos USER_LOGIN e USER_LOGOUT.
auditd.data.syscall metadata.product_event_type O tipo de evento do produto de metadados está definido como a chamada do sistema auditd.

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