Coletar registros de sistemas auditd do Linux e AIX
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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Faça o download do arquivo de autenticação de transferência.
Receber o ID de cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do BindPlane
- 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
- 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
- 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
- Acesse a máquina em que o BindPlane está instalado.
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
Reinicie o BindPlane Agent para aplicar as mudanças usando o seguinte comando:
sudo systemctl bindplane restart
Como exportar o Syslog do Auditd
- Acesse a máquina de onde você quer exportar os registros de auditoria.
Abra o arquivo de configuração do Auditd (normalmente localizado em
/etc/audit/auditd.conf
).sudo vi /etc/audit/auditd.conf
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
```
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
Encontre ou adicione as linhas abaixo para configurar o audispd:
active = yes direction = out path = builtin_syslog type = builtin args = LOG_INFO format = string
Reinicie o serviço Auditd para aplicar as mudanças:
sudo systemctl restart auditd
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)
Edite o
rsyslog.conf
ou crie uma configuração personalizada:sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
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.
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.