Coletar registros de sistemas auditd do Linux e AIX

Compatível com:

Esse analisador processa registros de auditoria do Linux no formato SYSLOG, transformando-os em UDM. Ele processa mensagens de registro com formato JSON e texto simples, extraindo campos usando técnicas de análise de JSON, XML e grok, e mapeando-as para campos UDM apropriados com base no tipo de evento. O analisador também processa formatos específicos registro de auditoria de sistemas AIX e enriquece a UDM com campos adicionais, como security_result e detalhes intermediários.

Antes de começar

  • Verifique se você tem uma instância do Google Security Operations.
  • Confira se você tem acesso root ao host do Auditd.
  • Verifique se você instalou o rsyslog no host do Auditd.
  • Verifique se você tem um host do Windows 2012 SP2 ou posterior ou um host do Linux com systemd.
  • Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Faça o download do arquivo de autenticação de transferência.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do BindPlane

  1. Para a instalação do Windows, execute o seguinte script:
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Para a instalação do Linux, execute o seguinte script:
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Outras opções de instalação podem ser encontradas neste guia de instalação.

Configurar o agente BindPlane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse a máquina em que o BindPlane está instalado.
  2. Edite o arquivo config.yaml da seguinte forma:

    receivers:
      tcplog:
        # Replace the below port <54525> and IP <0.0.0.0> with your specific values
        listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: auditd
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Reinicie o BindPlane Agent para aplicar as mudanças usando o seguinte comando: sudo systemctl bindplane restart

Como exportar o Syslog do Auditd

  1. Acesse a máquina de onde você quer exportar os registros de auditoria.
  2. Abra o arquivo de configuração do Auditd (normalmente localizado em /etc/audit/auditd.conf).

    sudo vi /etc/audit/auditd.conf
    
  3. Encontre ou adicione as linhas a seguir para configurar o auditd:

    active = yes
    output = syslog
    log_format = ENRICHED
    dispatcher = /sbin/audispd
    

Opcional: especifique a unidade Syslog. Adicione ou modifique a seguinte linha em auditd.conf:

```none
syslog_facility = LOG_AUTHPRIV
```
  1. Abra o arquivo de configuração do audispd (normalmente localizado em /etc/audisp/plugins.d/syslog.conf):

    sudo vi /etc/audisp/plugins.d/syslog.conf
    
  2. Encontre ou adicione as linhas abaixo para configurar o audispd:

    active = yes
    direction = out
    path = builtin_syslog
    type = builtin
    args = LOG_INFO
    format = string
    
  3. Reinicie o serviço Auditd para aplicar as mudanças:

    sudo systemctl restart auditd
    
  4. Use uma ferramenta como tail para monitorar o syslog e verificar se os registros do Auditd estão sendo enviados:

    tail -f /var/log/syslog | grep auditd # Follow syslog and filter for auditd messages (path may vary depending on your system)
    
  5. Edite o rsyslog.conf ou crie uma configuração personalizada:

    sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
    
  6. Adicione uma regra para encaminhar registros:

    • if $programname == 'auditd' then @@<BindPlane_Agent>:<BindPlane_Port>
    • Use @ para UDP ou @@ para TCP
    • Substitua <BindPlane_Agent> pelo IP/nome de host do servidor.
    • Substitua <BindPlane_Port> pela porta do servidor.
  7. Reinicie o serviço rsyslog para aplicar as mudanças:

    sudo systemctl restart rsyslog
    

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
acct target.user.user_display_name O valor de acct do registro bruto é mapeado para o campo target.user.user_display_name no UDM. Representa a conta associada ao evento.
addr principal.ip O valor de addr do registro bruto é mapeado para o campo principal.ip no UDM. Representa o endereço IP do participante envolvido no evento.
additional.fields additional.fields Outros campos de pares de chave-valor ou rótulos analisados são adicionados à matriz additional.fields no UDM.
agent.googleapis.com/log_file_path (Não mapeado) Esse rótulo está presente em alguns registros brutos, mas não é mapeado para o objeto IDM no UDM.
algo (Não usado neste exemplo) Embora esteja presente no analisador e em alguns registros brutos, esse campo não é usado no exemplo fornecido e não aparece no UDM final.
application principal.application Derivado do campo terminal no registro bruto ou de outros campos, como exe, dependendo do tipo de registro. Representa o aplicativo envolvido.
arch security_result.about.platform_version A arquitetura do campo arch do registro bruto é mapeada para security_result.about.platform_version.
auid about.user.userid, security_result.detection_fields.auid O ID do usuário de auditoria (auid) é mapeado para about.user.userid e adicionado como um campo de detecção em security_result.
cmd target.process.command_line O comando do campo cmd do registro bruto é mapeado para target.process.command_line.
collection_time (Não mapeado) Esse campo é o horário de coleta de registros e não é mapeado para o objeto IDM no UDM.
comm principal.application O nome do comando (comm) é mapeado para principal.application.
compute.googleapis.com/resource_name principal.hostname O nome do recurso desse rótulo é associado a principal.hostname.
create_time (Não mapeado) Esse campo não é mapeado para o objeto IDM no UDM.
cwd security_result.detection_fields.cwd O diretório de trabalho atual (cwd) é adicionado como um campo de detecção em security_result.
data (Processado) O campo data contém a mensagem de registro principal e é processado pelo analisador para extrair vários campos. Ele não é mapeado diretamente para um único campo do UDM.
exe principal.process.file.full_path, target.process.file.full_path O caminho executável (exe) é mapeado para principal.process.file.full_path ou target.process.file.full_path, dependendo do contexto.
extensions.auth.type extensions.auth.type O tipo de autenticação é definido pela lógica do analisador com base no tipo de evento. Geralmente, é definido como MACHINE ou AUTHTYPE_UNSPECIFIED.
fp network.tls.client.certificate.sha256 A impressão digital (fp) é analisada para extrair o hash SHA256 e mapeado para network.tls.client.certificate.sha256.
insertId (Não mapeado) Esse campo não é mapeado para o objeto IDM no UDM.
jsonPayload.message (Processado) Esse campo contém a mensagem de registro principal no formato JSON e é processado pelo analisador.
key security_result.about.registry.registry_key O campo de chave é mapeado para security_result.about.registry.registry_key.
labels (Processado) Os rótulos do registro bruto são processados e mapeados para vários campos do UDM ou adicionados a additional.fields.
logName (Não mapeado) Esse campo não é mapeado para o objeto IDM no UDM.
msg security_result.summary A mensagem (msg) é usada com frequência para preencher o campo security_result.summary.
network.application_protocol network.application_protocol Definido pela lógica do analisador com base no tipo de evento (por exemplo, SSH, HTTP).
network.direction network.direction Definido pela lógica do analisador com base no tipo de evento (por exemplo, RECEBIDA, REALIZADA).
network.ip_protocol network.ip_protocol É definido pela lógica do analisador, geralmente para TCP para eventos SSH.
network.session_id network.session_id Mapeado do campo ses ou derivado de outros campos.
network.tls.cipher network.tls.cipher As informações da criptografia são extraídas do registro bruto e mapeadas para esse campo.
network.tls.curve network.tls.curve A curva de troca de chaves é extraída do registro bruto e mapeada para este campo.
pid principal.process.pid, target.process.pid O ID do processo (pid) é mapeado para principal.process.pid ou target.process.pid, dependendo do contexto.
ppid principal.process.parent_process.pid, target.process.parent_process.pid O ID do processo pai (ppid) é mapeado para principal.process.parent_process.pid ou target.process.parent_process.pid, dependendo do contexto.
principal.asset.hostname principal.asset.hostname Copiado de principal.hostname.
principal.asset.ip principal.asset.ip Copiado de principal.ip.
principal.platform principal.platform Definido pela lógica do analisador com base no sistema operacional (por exemplo, LINUX).
principal.port principal.port O número da porta associado ao principal.
principal.user.group_identifiers principal.user.group_identifiers IDs de grupo associados ao usuário principal.
receiveTimestamp (Não mapeado) Esse campo é o carimbo de data/hora de recebimento do registro e não é mapeado para o objeto IDM no UDM.
res security_result.action_details O resultado (res) é mapeado para security_result.action_details.
resource.labels (Não mapeado) Esses rótulos estão presentes em alguns registros brutos, mas não são mapeados para o objeto IDM no UDM.
resource.type (Não mapeado) Esse campo está presente em alguns registros brutos, mas não é mapeado para o objeto IDM no UDM.
security_result.action security_result.action Definido pela lógica do analisador com base no campo res (por exemplo, ALLOW, BLOCK).
security_result.detection_fields security_result.detection_fields Vários campos do registro bruto são adicionados como pares de chave-valor a essa matriz para o contexto.
security_result.rule_id security_result.rule_id É definido pela lógica do analisador, geralmente para type_name em eventos de syscall.
security_result.severity security_result.severity É definido pela lógica do analisador com base no nível de gravidade no registro bruto.
security_result.summary security_result.summary Um resumo do evento, geralmente derivado do campo msg ou de outros campos relevantes.
ses network.session_id O ID da sessão (ses) é mapeado para network.session_id.
source (Não mapeado) Esse campo contém metadados sobre a origem do registro e não é mapeado para o objeto IDM no UDM.
subj (Processado) O campo de assunto (subj) é processado para extrair informações de contexto do usuário e de segurança.
syscall security_result.about.labels.Syscall O número de syscall é adicionado como um rótulo em security_result.about.
target.administrative_domain target.administrative_domain O domínio do usuário de destino.
target.group.group_display_name target.group.group_display_name O nome do grupo de destino.
target.ip target.ip O endereço IP do destino.
target.port target.port O número da porta associado ao destino.
target.process.command_line target.process.command_line A linha de comando do processo de destino.
target.resource.type target.resource.type O tipo do recurso de destino, definido pela lógica do analisador (por exemplo, CREDENTIAL, SETTING).
target.user.attribute.permissions target.user.attribute.permissions Permissões relacionadas ao usuário de destino.
target.user.group_identifiers target.user.group_identifiers IDs de grupo associados ao usuário de destino.
target.user.userid target.user.userid O ID do usuário do destino.
textPayload (Processado) O payload de texto do registro, processado pelo analisador para extrair vários campos.
timestamp metadata.event_timestamp O carimbo de data/hora do evento.
tty security_result.about.labels.tty O tty é adicionado como um rótulo em security_result.about.
type metadata.product_event_type O tipo de evento (type) é mapeado para metadata.product_event_type.
uid principal.user.userid, target.user.userid O ID do usuário (uid) é mapeado para principal.user.userid ou target.user.userid, dependendo do contexto.

Alterações

2024-05-08

  • Quando o valor não é "?", o campo "field" é mapeado para "field33" para "security_result.detection_fields".
  • Quando "type_name" é "CRYPTO_KEY_USER", "exe" é mapeado para "principal.process.file.full_path".
  • Quando "type_name" é "CRYPTO_KEY_USER", "fp" é mapeado para "network.tls.client.certificate.sha256".
  • Quando "type_name" é "CRYPTO_KEY_USER", "pid" é mapeado para "principal.process.pid".
  • Foram adicionados padrões Grok para analisar novos padrões de registros.
  • "syslog-tag" foi mapeado para "security_result.detection_fields".
  • Mapeamos "inter_ip" para "intermediary.ip".
  • "inter_hostname" foi mapeado para "intermediary.hostname".

2024-05-02

  • Quando "type_name" é "USER_MGMT", mapeie "grp" para "target.group.group_display_name".
  • Quando "type_name" é "USER_MGMT", o mapeamento de "uid" mudou de "principal.user.userid" para "target.user.userid".
  • Quando "type_name" é "USER_MGMT" e "op" é igual a "deleting-user-from-group", defina "metadata.event_type" como "GROUP_MODIFICATION".
  • Quando "type_name" é "USER_MGMT", o mapeamento de "exe" muda de "target.process.file.full_path" para "principal.process.file.full_path".
  • Quando "type_name" é "USER_MGMT", "id" é mapeado para "about.user.userid".

2024-04-08

  • Quando "type_name" é "ADD_USER", principal_user_present é "true", target_user_present é "true" e has_principal é "true", defina "metadata.event_type" como "USER_CREATION".
  • Quando "type_name" é "USER_AUTH", "acct" é mapeado para "target.user.user_display_name".
  • Quando "type_name" é "USER_AUTH", "uid" é mapeado para "principal.user.userid".
  • Quando "type_name" não estiver em "ADD_USER","USER_AUTH","CRED_ACQ" e "USER_MGMT", mapeie "auid" para "about.user.userid".
  • Quando "type_name" é "ADD_USER", "auid" é mapeado para "target.user.userid".
  • Quando "type_name" é "ADD_USER" ou "USER_AUTH", "exe" é mapeado para "principal.process.file.full_path".
  • Quando "type_name" é "ADD_USER", mapeie "op" e "id" para "security_result.summary".
  • Quando "type_name" é "USER_AUTH", mapeie "op" e "acct" para "security_result.summary".

2024-03-22

  • Adição de suporte a um novo padrão de registros JSON.
  • "labels.compute.googleapis.com/resource_name","jsonPayload._HOSTNAME", "CollectorHostName", "HOSTNAME" e "Computer" foram mapeados para "principal.hostname".
  • Mapeamos "HostIP" para "principal.ip".
  • Mapeamos "ProcessID" e "jsonPayload._PID" para "principal.process.pid".
  • "SyslogMessage" foi mapeado para "metadata.description".
  • Mapeamos "TenantId", "_ItemId", "_Internal_WorkspaceResourceId", "_ResourceId" e "Facility" para "additional.fields".
  • "SeverityLevel" foi mapeado para "security_result.severity".
  • "SourceSystem" foi mapeado para "principal.platform".
  • "jsonPayload._COMM" foi mapeado para "principal.application".
  • "jsonPayload._EXE" foi mapeado para "target.process.file.full_path".
  • "jsonPayload._AUDIT_FIELD_FILE" foi mapeado para "target.file.full_path".
  • "jsonPayload._AUDIT_FIELD_HASH" foi associado a "target.file.hash".
  • "jsonPayload._AUDIT_SESSION" foi mapeado para "network.session_id".
  • "jsonPayload._PPID" foi associado a "principal.process.parent_process.pid".
  • Mapeou "jsonPayload._AUDIT_FIELD_A0", "jsonPayload._AUDIT_FIELD_A1", "jsonPayload._AUDIT_FIELD_A2", "jsonPayload._AUDIT_FIELD_A3", "jsonPayload._BOOT_ID" e "jsonPayload._AUDIT_FIELD_EXIT" para "security_result.detection_fields".

2023-11-27

  • Adicionamos uma verificação de validação para garantir que "principal_user_present", "target_user_present" ou "has_principal" seja verdadeiro antes de definir "metadata.event_type" como "USER_LOGIN".
  • Adicionamos uma verificação de validação para garantir que "principal_user_present", "target_user_present" ou "has_principal" seja verdadeiro antes de definir "metadata.event_type" como "USER_LOGOUT".
  • Adicionamos uma verificação de validação para garantir que "principal_user_present", "target_user_present" ou "has_principal" seja verdadeiro antes de definir "metadata.event_type" como "USER_CREATION".
  • Adicionamos uma verificação de validação para garantir que "principal_user_present", "target_user_present" ou "has_principal" seja verdadeiro antes de definir "metadata.event_type" como "USER_DELETION".
  • Adicionamos uma verificação de validação para garantir que "principal_user_present", "target_user_present" ou "has_principal" seja verdadeiro antes de definir "metadata.event_type" como "USER_UNCATEGORIZED".
  • Adicionamos uma verificação de validação para garantir que "principal_user_present", "target_user_present" ou "has_principal" seja verdadeiro antes de definir "metadata.event_type" como "USER_RESOURCE_ACCESS".
  • Adição de uma verificação de validação para garantir que "principal_user_present", "target_user_present" ou "has_principal" seja verdadeiro antes de definir "metadata.event_type" como "USER_CHANGE_PERMISSIONS".
  • Quando os detalhes do usuário estão presentes e os detalhes da máquina principal não estão, o mapeamento de "metadata.event_type" é alterado de "USER_CREATION" para "USER_UNCATEGORIZED".
  • Quando os detalhes do usuário estão presentes e os detalhes da máquina principal não estão, o mapeamento de "metadata.event_type" é alterado de "USER_DELETION" para "USER_UNCATEGORIZED".

2023-09-06

  • Foi adicionado o mapeamento de "CMD" para "target.process.command_line" para "cron daemon(CROND)".

2023-06-20

  • Melhoria: adicionamos ou modificamos os seguintes mapeamentos quando type="ADD_USER" e "DEL_USER":
  • O mapeamento de "uid" foi modificado de "target.user.userid" para "principal.user.userid".
  • Mapeamos "id" para "target.user.userid".
  • "ID" foi mapeado para "target.user.user_display_name".
  • O mapeamento de "UID" foi modificado de "principal.user.userid" para "principal.user.user_display_name".
  • O mapeamento de "acct" foi modificado de "principal.user.user_display_name" para "target.user.user_display_name" e "target.user.userid".

2023-06-09

  • Melhoria: a variável "event_type" foi modificada de "USER_LOGIN" para "USER_CREATION" quando "type=ADD_USER".

2023-04-17

  • Melhoria
  • A função gsub foi adicionada para substituir o caractere "GS - Separador de grupo", que está interrompendo a construção JSON.

2023-04-10

  • Melhoria
  • Os campos "gid", "euid", "egid", "suid", "fsuid", "sgid", "fsgid", "tty" e "items" foram adicionados a security_result.detection_fields.
  • Além disso, o "gid" foi mapeado para "principal.user.group_identifiers".
  • O "euid" foi mapeado para "target.user.userid".
  • O 'egid' foi mapeado para 'target.user.group_identifiers'.

2023-03-27

  • Melhoria: foi adicionado suporte a "jsonPayload" com registros.

2023-02-28

  • Correção de bugs: aprimoramento do analisador para converter strings codificadas em hexadecimal em ASCII.

2023-02-09

  • Melhoria: grok modificado para registros que contêm "type=PATH" para buscar o nome de host correto nos registros.

2023-01-24

  • Melhoria:
  • Registro analisado com eventType como "tac_plus".
  • Foram adicionadas condições para mapear diferentes event_types "NETWORK_CONNECTION", "NETWORK_HTTP" e "USER_LOGIN".

2022-12-02

  • Melhoria:
  • "user_name" foi mapeado para "principal.user.userid".
  • Adição de verificação condicional para "dst_ip" e "dst_port".

2022-10-31

  • Melhoria:
  • Melhoria no analisador para analisar o registro com type=ADD_USER, USER_MGMT, DEL_USER.
  • Foram adicionadas verificações de valor nulo para "principal_hostname".
  • Foram adicionadas verificações de on_error para "principal.process.file.full_path", "type_syscall_props.key", "type_syscall_props.arch" e "msg2".
  • Foram adicionadas verificações condicionais para mapeamento para event_type="FILE_OPEN", "USER_UNCATEGORIZED", "STATUS_UPDATE", "USER_DELETION".
  • "principal_user_userid" foi mapeado para "principal.user.userid".

2022-11-16

  • Melhoria:
  • Melhoria de "GENERIC_EVENT" para "STATUS_UPDATE" nos tipos de registro que contêm "Access Logs".

2022-10-14

  • Melhoria:
  • O analisador de clientes foi migrado para o analisador padrão.

2022-10-13

  • Melhoria: mapeamento de "vendor_name" para "Linux".
  • Mapeamos "product_name" para "AuditD".
  • Os registros que contêm "ProxySG" foram analisados e "ip" foi mapeado para "target.ip", e "port" para "target.port" sempre que possível.
  • "event_type" foi modificado de "GENERIC_EVENT" para "STATUS_UPDATE".
  • O mapeamento de "intermediary.hostname" para "principal.hostname" foi modificado.

2022-07-28

  • Melhoria:
  • O campo "auid" foi mapeado para "about:user:userid".
  • O campo "AUID" foi associado a "about.user.user_display_name".
  • O campo "proctitle" foi mapeado para "target.process.file.full_path".
  • O analisador foi aprimorado para analisar o registro com type=DAEMON_END, CRYPTO_SESSION, CONFIG_CHANGE, PROCTITLE, USER_ERR, CRYPTO_KEY_USER.
  • Adição de uma verificação condicional para laddr, addr, cipher, pfs, direction, acct, pid, ppid, cmd, exe, ses.

2022-06-17

  • Melhoria: mapeamos/modificamos os seguintes campos:
  • O mapeamento de "auid" mudou de "security_result.about.user.userid" para "about.user.userid".
  • A propriedade "event_type" para type=SYSCALL foi alterada de "SYSTEM_AUDIT_LOG_UNCATEGORIZED" para "USER_UNCATEGORIZED".
  • "success" foi mapeado para "security_result.summary".
  • Mapeamos "syscall", "exit", "tty", "a0", "a1", "a2" e "a3" para "security_result.about.labels".
  • Os registros foram descartados no formato ASCII.

2022-06-14

  • melhoria
  • Melhoramos o analisador para analisar o tipo de registro USER_CMD.
  • O campo "cmd" foi mapeado para "principal.process.command_line".
  • O campo "ses" foi mapeado para "network.session_id".
  • O campo "res" foi mapeado para "security_result.action" e "security_result.action_details".
  • Os campos "auid" e "cwd" foram mapeados para "security_result.detection_fields".

2022-04-26

  • melhoria
  • Aumento da porcentagem de análise com a análise de todos os registros não analisados.