Recolha registos do Sophos AV
Este documento explica como recolher registos do Sophos AV através do Bindplane. O analisador transforma os registos JSON num modelo de dados unificado (UDM). Extrai campos de estruturas JSON aninhadas, mapeia-os para campos UDM e realiza a categorização de eventos com base no campo de tipo, enriquecendo os dados com detalhes e ações específicos para diferentes tipos de eventos do Sophos AV.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Uma instância do Google SecOps
- Windows 2016 ou posterior, ou um anfitrião Linux com
systemd
- Uma máquina Windows ou Linux adicional capaz de executar continuamente o Python
- Se estiver a ser executado através de um proxy, certifique-se de que as portas da firewall estão abertas de acordo com os requisitos do agente Bindplane
- Acesso privilegiado à consola de administração do Sophos Central
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
Instale o agente do Bindplane no seu sistema operativo Windows ou Linux de acordo com as seguintes instruções.
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
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 este 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 ou no diretório de instalação no Windows. - Abra o ficheiro com um editor de texto (por exemplo,
nano
,vi
ou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
config.yaml
da seguinte forma:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/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: 'SOPHOS_AV' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
- 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.
Reinicie o agente do Bindplane para aplicar as alterações
Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:
sudo systemctl restart bindplane-agent
Para reiniciar o agente do Bindplane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configure o acesso à API do Sophos Central
- Inicie sessão no Sophos Central Admin.
- Selecione Definições globais > Gestão de tokens da API.
- Clique em Adicionar token para criar um novo token.
- Introduza um nome de token e clique em Guardar. É apresentado o Resumo do token de API para o token fornecido.
- Na secção Resumo do token de API, clique em Copiar para copiar o URL e os cabeçalhos de acesso à API.
Instale o Python numa máquina adicional
- Abra o navegador de Internet e aceda ao Website do Python.
- Clique em Transferir Python para o seu sistema operativo.
Instale o Python:
- No Windows:
- Execute o instalador.
- Selecione a caixa que indica Adicionar Python ao PATH.
- Clique em Instalar agora.
Em Mac:
- O Python pode já estar instalado. Caso contrário, pode instalar a versão mais recente através do terminal.
Abra o Terminal e escreva o seguinte comando:
python --version
- No Windows:
Transfira o script de integração do Sophos
- Aceda à página do GitHub do repositório do GitHub de integração do SIEM do Sophos Central.
- Clique no botão verde Código > Transferir ZIP.
- Extraia o ficheiro ZIP.
Configure a configuração do script
- Abra o ficheiro
config.ini
no diretório onde extraiu o arquivo ZIP. - Edite o ficheiro de configuração:
- Token de API: introduza a chave da API copiada anteriormente do Sophos Central.
- Detalhes do servidor Syslog: introduza os detalhes do seu servidor Syslog.
- Anfitrião: introduza o endereço IP do agente BindPlane.
- Porta: introduza o número da porta do agente BindPlane.
- Protocolo: introduza UDP (também pode usar TCP ou TLS, consoante a sua configuração).
- Guarde o ficheiro.
Execute o script
Aceda à pasta de scripts.
Em Windows:
- Prima a tecla Windows e escreva
cmd
. - Clique em Linha de comandos.
- Aceda à pasta de scripts:
cd C:/Users/YourName/Downloads/Sophos-Central-SIEM-Integration
- Prima a tecla Windows e escreva
No macOS:
- Aceda a Aplicações > Utilitários.
- Abra o Terminal.
- Aceda à pasta de scripts:
cd /Users/YourName/Downloads/Sophos-Central-SIEM-Integration
Execute o guião:
Escreva o seguinte comando para iniciar o script:
python siem.py
Automatize o script para ser executado continuamente no Windows (através do Agendador de tarefas):
- Abra o Agendador de tarefas escrevendo Agendador de tarefas no menu Iniciar.
- Clique em Criar tarefa.
- No separador Geral:
- Atribua um nome à tarefa (por exemplo,
Sophos AV Log Export
).
- Atribua um nome à tarefa (por exemplo,
- No separador Acionadores:
- Clique em Novo e defina a tarefa para ser executada Diariamente ou No arranque (consoante a sua preferência).
- No separador Ações:
- Clique em Novo e selecione Iniciar um programa.
- Procure o ficheiro executável
python.exe
(normalmente, encontra-se emC:/Python/XX/python.exe
). - No campo Adicionar argumentos, escreva o caminho para o guião (por exemplo,
C:/Users/YourName/Downloads/Sophos-Central-SIEM-Integrationsiem.py
).
- Clique em OK para guardar a tarefa.
Automatize o script para ser executado continuamente no Mac (através de tarefas cron):
- Abra o Terminal.
- Escreva
crontab -e
e prima Enter. Adicione uma nova linha no final do ficheiro:
* * * * * /usr/bin/python /Users/YourName/Downloads/Sophos-Central-SIEM-Integration/siem.py
Clique em Guardar e saia do editor.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento do UDM | Lógica |
---|---|---|
customer_id | target.resource.id | Mapeamento direto |
data.customer_id | target.resource.id | Mapeamento direto |
data.dhost | principal.hostname | Mapeamento direto |
data.end | timestamp | Mapeamento direto |
data.endpoint_id | principal.resource.id | Mapeamento direto |
data.group | security_result.category_details | Mapeamento direto |
data.id | principal.resource.id | Mapeamento direto |
data.location | principal.hostname | Mapeamento direto |
data.name | metadata.description | Mapeamento direto |
data.rt | timestamp | Mapeamento direto |
data.severity | security_result.severity | Mapeamento direto |
data.source | principal.user.user_display_name | Mapeamento direto |
data.source_info.ip | principal.ip | Mapeamento direto |
data.suser | principal.user.userid | Mapeamento direto |
data.threat | security_result.rule_name | Mapeamento direto quando data.group é "POLICY" |
data.type | metadata.product_event_type | Mapeamento direto |
data.user_id | principal.user.userid | Mapeamento direto |
data.when | timestamp | Mapeamento direto |
dhost | principal.hostname | Mapeamento direto |
fim | timestamp | Mapeamento direto |
endpoint_id | principal.resource.id | Mapeamento direto |
grupo | security_result.category_details | Mapeamento direto |
id | principal.resource.id | Mapeamento direto |
localização | principal.hostname | Mapeamento direto |
nome | metadata.description | Mapeamento direto |
rt | timestamp | Mapeamento direto |
gravidade | security_result.severity | Mapeamento direto |
fonte | principal.user.user_display_name | Mapeamento direto |
source_info.ip | principal.ip | Mapeamento direto |
suser | principal.user.userid | Mapeamento direto |
escrever | metadata.product_event_type | Mapeamento direto |
user_id | principal.user.userid | Mapeamento direto |
quando | timestamp | Mapeamento direto |
- | is_alert | O campo is_alert está definido como verdadeiro para eventos com "gravidade" "média" ou "elevada", ou quando o campo "tipo" indica um evento digno de alerta, como "Event::Endpoint::UpdateRebootRequired". |
- | is_significant | O campo is_significant está definido como verdadeiro para eventos com "gravidade" "média" ou "alta". |
- | metadata.description | O campo de descrição é preenchido com o valor do campo "name" do registo não processado. |
- | metadata.event_timestamp | O campo event_timestamp é preenchido com o valor do campo "end", "rt" ou "when" do registo não processado. |
- | metadata.event_type | O campo event_type é derivado do campo "type" no registo não processado, mapeando tipos de eventos específicos do Sophos para tipos de eventos do UDM do Chronicle. |
- | metadata.log_type | O campo log_type está definido como "SOPHOS_AV" para todos os eventos. |
- | metadata.product_event_type | O campo product_event_type é preenchido com o valor do campo "type" do registo não processado. |
- | metadata.product_name | O campo product_name está definido como "Sophos Anti-Virus" para todos os eventos. |
- | metadata.vendor_name | O campo vendor_name está definido como "Sophos" para todos os eventos. |
- | network.direction | O campo de direção está definido como "OUTBOUND" para todos os eventos "NETWORK_CONNECTION". |
- | network.ip_protocol | O campo ip_protocol está definido como "TCP" para eventos "NETWORK_CONNECTION" em que o campo "target.url" está presente. |
- | principal.hostname | O campo hostname é preenchido com o valor do campo "dhost" ou "location" do registo não processado. |
- | principal.ip | O campo ip é preenchido com o valor do campo "source_info.ip" do registo não processado. |
- | principal.resource.id | O campo id é preenchido com o valor do campo "id" ou "endpoint_id" do registo não processado. |
- | principal.user.user_display_name | O campo user_display_name é preenchido com o valor do campo "suser" ou "source" do registo não processado. |
- | principal.user.userid | O campo userid é preenchido com o valor do campo "suser", "user_id" ou "data.suser" do registo não processado. |
- | security_result.action | O campo de ação é derivado do campo "data.name" no registo não processado, mapeando ações específicas do Sophos para ações do UDM do Chronicle. |
- | security_result.category_details | O campo category_details é preenchido com o valor do campo "group" do registo não processado. |
- | security_result.rule_name | O campo rule_name é extraído do campo "data.name" no registo não processado, procurando especificamente padrões como "Policy non-compliance: [rule_name]" ou "Rule names: [rule_name]". |
- | security_result.severity | O campo de gravidade é preenchido com o valor do campo "gravidade" do registo não processado, convertendo-o no nível de gravidade do UDM do Chronicle correspondente. |
- | security_result.summary | O campo de resumo é preenchido com o valor do campo "name" do registo não processado quando o tipo de evento é "GENERIC_EVENT" ou "STATUS_HEARTBEAT". |
- | target.application | O campo da aplicação é preenchido com o valor do campo "data.name" do registo não processado quando o tipo de evento é "NETWORK_CONNECTION" e a descrição menciona o bloqueio de uma aplicação. |
- | target.asset_id | O campo asset_id é preenchido com o valor do campo "data.endpoint_id" do registo não processado quando o tipo de evento é "NETWORK_CONNECTION" e a descrição menciona um ID do recurso. |
- | target.file.full_path | O campo full_path é extraído do campo "data.name" no registo não processado, procurando especificamente padrões como "Source path: [full_path]". |
- | target.file.size | O campo de tamanho é extraído do campo "data.name" no registo não processado, procurando especificamente padrões como "Tamanho do ficheiro: [tamanho]". |
- | target.hostname | O campo do nome do anfitrião é preenchido com o valor do campo "data.dhost" do registo não processado quando o tipo de evento é "NETWORK_CONNECTION" e a descrição menciona um nome do anfitrião de destino. |
- | target.process.file.full_path | O campo full_path é extraído do campo "data.name" no registo não processado, procurando especificamente padrões como "Controlled application [action]: [full_path]". |
- | target.resource.id | O campo id é preenchido com o valor do campo "customer_id" do registo não processado. |
- | target.resource.name | O campo de nome é preenchido com valores específicos com base no tipo de evento. Para "SETTING_CREATION" e "SETTING_MODIFICATION", está definido como "Registo do dispositivo" e "Proteção em tempo real", respetivamente. Para "SCAN_UNCATEGORIZED", é preenchido com o valor do campo "data.name" do registo não processado. |
- | target.resource.type | O campo de tipo é preenchido com valores específicos com base no tipo de evento. Para "SETTING_CREATION" e "SETTING_MODIFICATION", está definido como "SETTING". Para "SCAN_UNCATEGORIZED", está definido como "Scan". Para "SCAN_NETWORK", está definido como "Dispositivo". |
- | target.url | O campo URL é extraído do campo "data.name" no registo não processado, procurando especificamente padrões como "'[url]' bloqueado". |
- | target.user.userid | O campo userid é preenchido com o valor do campo "data.user_id" do registo não processado quando o tipo de evento é "USER_CREATION". |
- | timestamp | O campo de data/hora é preenchido com o valor do campo "end", "rt" ou "when" do registo não processado. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.