Recolha registos do servidor Ubuntu (sistema Unix) de sistemas Nix
Este documento explica como carregar registos do Ubuntu Server (sistema Unix) para o
Google Security Operations através do Bindplane. O analisador ingere registos formatados em syslog e JSON, inicializa uma grande variedade de campos do modelo de dados unificado (UDM) em strings vazias, executa várias substituições de strings no campo message
e, em seguida, tenta analisar a mensagem como JSON. Se a análise JSON falhar, usa padrões grok para extrair campos com base no conteúdo message
e event_details.original
, mapeando os campos extraídos para o UDM com base no tipo de evento e em várias verificações condicionais, processando diferentes formatos e estruturas de registos de vários processos e serviços do sistema Unix.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps
- Se estiver a ser executado através de um proxy, as portas da firewall estão abertas
- Acesso privilegiado a um servidor RHEL
Obtenha o ficheiro de autenticação de carregamento do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.
Obtenha o ID de cliente do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instalação do Linux
- Abra um terminal com privilégios de raiz ou sudo.
Execute o seguinte comando:
sudo sh -c `$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)` install_unix.sh
Recursos de instalação adicionais
Para ver opções de instalação adicionais, consulte o guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
- Aceda ao ficheiro de configuração:
- Localize o ficheiro
config.yaml
. Normalmente, encontra-se no diretório/etc/bindplane-agent/
no Linux. - Abra o ficheiro com um editor de texto (por exemplo,
nano
ouvi
).
- Localize o ficheiro
Edite o ficheiro
config.yaml
da seguinte forma:receivers: filelog/unix: include: - /var/log/auth.log - /var/log/lastlog - /var/log/btmp - /var/log/wtmp - /var/log/faillog - /var/log/dpkg.log - /var/log/boot.log - /var/log/kern.log - /var/log/syslog start_at: end poll_interval: 5s exporters: chronicle/linux: # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'NIX_SYSTEM' override_log_type: false raw_log_field: body service: pipelines: logs/linux: receivers: - filelog/linux exporters: [chronicle/linux]
Substitua
<customer_id>
pelo ID de cliente real.Atualize
/path/to/ingestion-authentication-file.json
para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.
Inicie o agente Bindplane e aplique as alterações
Inicie o agente do Bindplane:
sudo systemctl start bindplane-agent
Ative o serviço do coletor otel do observIQ:
systemctl enable --now bindplane-agent
Se necessário, reinicie o agente do Bindplane:
sudo systemctl restart bindplane-agent
Tabela de mapeamento do UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
AccessControlRuleAction |
security_result.action |
Se AccessControlRuleAction for Allow , defina como ALLOW . Se AccessControlRuleAction for Block , defina como BLOCK . |
ACPolicy |
security_result.rule_labels |
Chave: ACPolicy , valor: ACPolicy |
AccessControlRuleName |
security_result.rule_name |
Mapeamento direto. |
acct |
event.idm.read_only_udm.target.user.userid |
Mapeamento direto após a remoção de aspas e barras invertidas. |
addr |
event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip |
Mapeamento direto se não estiver vazio, ? ou UNKNOWN . |
ApplicationProtocol |
event.idm.read_only_udm.network.application_protocol |
Mapeamento direto. |
auid |
event.idm.read_only_udm.additional.fields |
Chave: auid , valor: auid |
comm |
event.idm.read_only_udm.target.process.command_line |
Mapeamento direto. |
command |
event.idm.read_only_udm.target.process.command_line |
Mapeamento direto após a remoção de espaços em branco à esquerda/direita. |
Computer |
event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname |
Mapeamento direto. Se estiver vazio, use HostName . |
ConnectionID |
security_result.detection_fields |
Chave: Connection ID , valor: ConnectionID |
cwd |
event.idm.read_only_udm.target.process.file.full_path |
Mapeamento direto após a remoção das aspas. |
data |
message |
Usado em padrões grok. |
desc |
security_result.description |
Mapeamento direto. |
description |
event.idm.read_only_udm.metadata.description , security_result.description |
Mapeamento direto. |
descript |
security_result.description |
Mapeamento direto após a remoção dos hashes. |
DeviceUUID |
event.idm.read_only_udm.metadata.product_log_id |
Mapeamento direto. |
DNSQuery |
event.idm.read_only_udm.additional.fields |
Chave: DNSQuery , valor: DNSQuery |
DNSRecordType |
event.idm.read_only_udm.additional.fields |
Chave: DNSRecordType , valor: DNSRecordType |
DNSResponseType |
event.idm.read_only_udm.additional.fields |
Chave: DNSResponseType , valor: DNSResponseType |
DNS_TTL |
event.idm.read_only_udm.additional.fields |
Chave: DNS_TTL , valor: DNS_TTL |
DstIP |
event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip |
Mapeamento direto. |
DstPort |
event.idm.read_only_udm.target.port |
Mapeamento direto, convertido em número inteiro. |
dvc |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip , event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname , event.idm.read_only_udm.intermediary.ip , event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip , event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname |
Se for um IP válido, é mapeado para o IP principal/de destino. Se o nome do anfitrião estiver mapeado para o nome do anfitrião principal/de destino. Também usado para o IP intermediário, se for um IP válido. |
EgressInterface |
event.idm.read_only_udm.principal.asset.attribute.labels |
Chave: EgressInterface , valor: EgressInterface |
EgressVRF |
event.idm.read_only_udm.principal.asset.attribute.labels |
Chave: EgressVRF , valor: EgressVRF |
EgressZone |
event.idm.read_only_udm.target.location.name |
Mapeamento direto. |
eventType |
event.idm.read_only_udm.metadata.product_event_type , event.idm.read_only_udm.target.application |
Mapeamento direto. Para SERVICE_START e SERVICE_STOP , mapeado para target.application e, em seguida, limpo. |
EventTime |
@timestamp |
Analisado como data/hora. |
exe |
event.idm.read_only_udm.target.process.command_line |
Mapeamento direto após a remoção de aspas e barras invertidas. |
extended_description |
event.idm.read_only_udm.metadata.description |
Mapeamento direto após a remoção de hífenes e aspas. |
Facility |
event.idm.read_only_udm.principal.resource.attribute.labels |
Chave: Facility , valor: Facility |
filepath |
event.idm.read_only_udm.principal.process.file.full_path |
Mapeamento direto. |
file_path |
event.idm.read_only_udm.target.file.full_path |
Mapeamento direto. |
file_path_value |
event.idm.read_only_udm.target.file.full_path |
Mapeamento direto. |
FirstPacketSecond |
security_result.detection_fields |
Chave: FirstPacketSecond , valor: FirstPacketSecond |
from |
event.idm.read_only_udm.network.email.from |
Mapeamento direto após a remoção dos parêntesis angulares. |
generic_ip |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
Mapeamento direto se for um IP válido e não A256: . |
gid |
event.idm.read_only_udm.target.user.group_identifiers |
Mapeamento direto. |
grp |
event.idm.read_only_udm.target.group.group_display_name |
Mapeamento direto após a remoção de aspas e barras invertidas. |
hashing_algo |
security_result.summary |
Mapeamento direto. |
home |
event.idm.read_only_udm.target.file.full_path |
Mapeamento direto. |
HostName |
Computer |
Usado se Computer estiver vazio. |
HostIP |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
A parte de HostIP antes de % é extraída e mapeada como validated_ip . |
hostname |
event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname , event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname |
Mapeamento direto se não estiver vazio ou ? . |
host_name |
event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname |
Mapeamento direto. |
InitiatorBytes |
event.idm.read_only_udm.network.sent_bytes |
Mapeamento direto, convertido em número inteiro não assinado. |
InitiatorPackets |
event.idm.read_only_udm.network.sent_packets |
Mapeamento direto, convertido em número inteiro. |
insertId |
event.idm.read_only_udm.metadata.product_log_id |
Mapeamento direto. |
InstanceID |
security_result.detection_fields |
Chave: Instance ID , valor: InstanceID |
int_dvc |
event.idm.read_only_udm.intermediary.hostname |
Mapeamento direto. |
ip |
event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip , event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
Mapeamento direto. |
ip_protocol |
event.idm.read_only_udm.network.ip_protocol |
Mapeamento direto. |
laddr |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
Mapeamento direto se não estiver vazio ou ? . |
level |
security_result.severity |
Se info , defina como INFORMATIONAL . |
log.syslog.facility.name |
event.idm.read_only_udm.target.application |
Mapeamento direto. |
log.syslog.severity.name |
security_result.severity |
Se Emergency , defina como HIGH . |
logName |
logname |
Mapeamento direto. |
log_description |
security_result.description |
Mapeamento direto. |
log_level |
security_result.severity |
Se error , defina como ERROR . |
log_summary |
security_result.summary |
Mapeamento direto. |
logger_name |
event.idm.read_only_udm.principal.resource.attribute.labels |
Chave: logger_name , valor: logger_name |
log_type |
event.idm.read_only_udm.metadata.log_type |
Codificado para NIX_SYSTEM . |
lport |
event.idm.read_only_udm.principal.port |
Mapeamento direto, convertido em número inteiro. |
MG |
event.idm.read_only_udm.principal.resource.attribute.labels |
Chave: MG , valor: MG |
method |
event.idm.read_only_udm.network.http.method |
Mapeamento direto, convertido em letras maiúsculas. |
msg1 |
event.idm.read_only_udm.metadata.description , event.idm.read_only_udm.additional.fields , security_result.description |
Analisado através de padrões grok. Se event_type for GENERIC_EVENT , mapeado para description . |
msg2 |
event.idm.read_only_udm.network.received_bytes , security_result.summary |
Se contiver dígitos, é convertido num número inteiro não assinado e mapeado para received_bytes . Caso contrário, é mapeado para summary . |
NAPPolicy |
security_result.rule_labels |
Chave: NAPPolicy , valor: NAPPolicy |
name |
event.idm.read_only_udm.target.process.file.full_path |
Mapeamento direto após a remoção das aspas. |
outcome |
security_result.action |
Se Succeeded for igual a success ou contiver success , defina como ALLOW . |
p_id |
event.idm.read_only_udm.target.process.pid |
Mapeamento direto. |
pid |
event.idm.read_only_udm.target.process.pid , event.idm.read_only_udm.principal.process.pid |
Mapeamento direto. |
principal_hostname |
event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname |
Mapeamento direto. |
principal_ip |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
Mapeamento direto. |
principal_present |
event.idm.read_only_udm.metadata.event_type |
Se true e has_target for true , defina event_type como NETWORK_UNCATEGORIZED . Se true ou user_present for true , defina event_type como USER_UNCATEGORIZED . |
process |
event.idm.read_only_udm.target.application , event.idm.read_only_udm.metadata.product_event_type |
Mapeamento direto. Se eventType estiver vazio, é usado como target.application . |
ProcessID |
event.idm.read_only_udm.principal.process.pid |
Mapeamento direto, convertido em string. |
ProcessName |
event.idm.read_only_udm.principal.resource.attribute.labels |
Chave: ProcessName , valor: ProcessName |
prod_eve_type |
event.idm.read_only_udm.metadata.product_event_type |
Mapeamento direto. |
product_event_type |
event.idm.read_only_udm.metadata.product_event_type |
Mapeamento direto. |
Protocol |
event.idm.read_only_udm.network.ip_protocol |
Se corresponder a icmp , udp ou tcp (sem distinção entre maiúsculas e minúsculas), é mapeado para o valor em maiúsculas correspondente. |
proto |
event.idm.read_only_udm.network.application_protocol |
Se ssh ou ssh2 , defina como SSH . |
pwd |
event.idm.read_only_udm.target.file.full_path |
Mapeamento direto. |
reason |
security_result.summary , security_result.description |
Usado em combinação com action e desc para criar security_result.description . Também mapeado para security_result.summary . |
relayHostname |
event.idm.read_only_udm.intermediary.hostname |
Mapeamento direto. |
relayIp |
event.idm.read_only_udm.intermediary.ip |
Mapeamento direto. |
res |
security_result.summary |
Mapeamento direto. |
resource.labels.instance_id |
event.idm.read_only_udm.target.resource.product_object_id |
Mapeamento direto. |
resource.labels.project_id |
event.idm.read_only_udm.target.asset.attribute.cloud.project.id |
Mapeamento direto. |
resource.labels.zone |
event.idm.read_only_udm.target.asset.attribute.cloud.availability_zone |
Mapeamento direto. |
resource.type |
event.idm.read_only_udm.target.resource.resource_subtype |
Mapeamento direto. |
response_code |
event.idm.read_only_udm.network.http.response_code |
Mapeamento direto, convertido em número inteiro. |
ResponderBytes |
event.idm.read_only_udm.network.received_bytes |
Mapeamento direto, convertido em número inteiro não assinado. |
ResponderPackets |
event.idm.read_only_udm.network.received_packets |
Mapeamento direto, convertido em número inteiro. |
rhost |
event.idm.read_only_udm.additional.fields |
Chave: rhost , valor: rhost |
ruser |
srcUser |
Mapeamento direto. |
sec_action |
security_result.action |
Mapeada com base em action ou eventType . |
sec_summary |
security_result.summary |
Mapeamento direto. |
security_action |
security_result.action |
Mapeamento direto. |
sent_bytes |
event.idm.read_only_udm.network.sent_bytes |
Mapeamento direto, convertido em número inteiro não assinado. |
ses |
event.idm.read_only_udm.network.session_id , event.idm.read_only_udm.network.session_duration |
Se for numérico, é analisado como uma data/hora Unix e mapeado para session_duration . Caso contrário, é mapeado para session_id . |
SeverityLevel |
security_result.severity |
Mapeado para diferentes gravidades com base no valor (notice/info -> INFORMATIONAL, warn -> HIGH, error -> ERROR, other -> UNKNOWN_SEVERITY). |
sessionId |
event.idm.read_only_udm.network.session_id |
Mapeamento direto. |
size |
event.idm.read_only_udm.network.received_bytes |
Mapeamento direto, convertido em número inteiro não assinado. |
source |
event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname |
Mapeamento direto após a remoção dos espaços em branco à esquerda. |
SourceSystem |
event.idm.read_only_udm.principal.resource.attribute.labels , event.idm.read_only_udm.principal.platform |
Chave: SourceSystem , valor: SourceSystem . Também mapeado para platform (Linux -> LINUX, Window -> WINDOWS, Mac/iOS -> MAC). |
SrcIP |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
Mapeamento direto. |
SrcPort |
event.idm.read_only_udm.principal.port |
Mapeamento direto, convertido em número inteiro. |
srcIp |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
Mapeamento direto. |
srcPort |
event.idm.read_only_udm.principal.port |
Mapeamento direto, convertido em número inteiro. |
srcUser |
event.idm.read_only_udm.principal.user.userid |
Mapeamento direto. |
src_user |
event.idm.read_only_udm.principal.user.userid |
Mapeamento direto. |
src_user_display_name |
event.idm.read_only_udm.principal.user.user_display_name |
Mapeamento direto. |
status |
security_result.action |
Se Deferred , defina como BLOCK . Se Sent , defina como ALLOW . |
summary |
security_result.summary |
Mapeamento direto. |
SyslogMessage |
security_result.description |
Mapeamento direto. |
targetEmail |
event.idm.read_only_udm.network.email.to |
Mapeamento direto. |
targetEmailfrom |
event.idm.read_only_udm.network.email.from |
Mapeamento direto. |
targetHostname |
event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname |
Mapeamento direto. |
target_hostname |
event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname |
Mapeamento direto. |
target_ip |
event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip |
Mapeamento direto. |
target_mac |
event.idm.read_only_udm.target.mac |
Mapeamento direto. |
target_uri |
event.idm.read_only_udm.target.url |
Mapeamento direto. |
TenantId |
event.idm.read_only_udm.principal.user.product_object_id |
Mapeamento direto. |
terminal |
event.idm.read_only_udm.additional.fields |
Chave: terminal , valor: terminal se não estiver vazio ou ? . |
TimeGenerated |
event.idm.read_only_udm.metadata.collected_timestamp |
Analisado como data/hora. |
timestamp |
@timestamp |
Analisado como data/hora. |
tls_cipher |
event.idm.read_only_udm.network.tls.cipher |
Mapeamento direto. |
Type |
event.idm.read_only_udm.principal.resource.attribute.labels |
Chave: Type , valor: Type |
uid |
event.idm.read_only_udm.principal.user.userid |
Se 0 , defina como root . Caso contrário, mapeamento direto. |
uid_2 |
event.idm.read_only_udm.target.user.userid |
Mapeamento direto se uid estiver vazio. |
unit |
event.idm.read_only_udm.target.application |
Mapeamento direto. |
url |
event.idm.read_only_udm.target.url |
Mapeamento direto. |
user |
username |
Mapeamento direto. |
username |
event.idm.read_only_udm.target.user.userid , event.idm.read_only_udm.principal.user.userid |
Mapeamento direto. |
user_display_name |
event.idm.read_only_udm.target.user.user_display_name |
Mapeamento direto. |
user_present |
event.idm.read_only_udm.metadata.event_type |
Se true ou principal_present for true , defina event_type como USER_UNCATEGORIZED . |
_Internal_WorkspaceResourceId |
event.idm.read_only_udm.target.resource.attribute.labels , event.idm.read_only_udm.target.resource.product_object_id |
Chave: _Internal_WorkspaceResourceId , valor: _Internal_WorkspaceResourceId . O ID da subscrição é extraído e mapeado para product_object_id . |
_ItemId |
event.idm.read_only_udm.principal.resource.attribute.labels |
Chave: _ItemId , valor: _ItemId |
_ResourceId |
event.idm.read_only_udm.principal.resource.attribute.labels , event.idm.read_only_udm.principal.resource.product_object_id |
Chave: _ResourceId , valor: _ResourceId . O ID da subscrição é extraído e mapeado para product_object_id . |
_timestamp |
@timestamp |
Analisado como data/hora. |
_timestamp_tz |
@timestamp |
Analisado como data/hora. |
event.idm.read_only_udm.metadata.event_type
: inicialmente, definido como GENERIC_EVENT
e, em seguida, substituído com base na lógica do analisador.
event.idm.read_only_udm.metadata.product_name
: codificado de forma rígida para Unix System
.
event.idm.read_only_udm.extensions.auth.type
: definido como MACHINE
para determinados tipos de eventos.
event.idm.read_only_udm.target.asset.attribute.cloud.environment
: definido como GOOGLE_CLOUD_PLATFORM
para Google Cloud registos de auditoria.
event.idm.read_only_udm.target.resource.resource_type
: definido como VIRTUAL_MACHINE
para Google Cloud registos de auditoria.
event.idm.read_only_udm.extensions.auth.mechanism
: definido como USERNAME_PASSWORD
para eventos de início de sessão.
has_target_resource
: definido como true
se resource.labels.instance_id
ou _Internal_WorkspaceResourceId
estiver presente.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.