Recolha registos do Cisco eStreamer
Este documento explica como carregar registos do Cisco eStreamer para o Google Security Operations através do Bindplane. O analisador extrai campos das mensagens SYSLOG no formato de chave-valor, usando o grok para analisar a mensagem inicial e o kv para processar os dados de chave-valor. Em seguida, mapeia estes campos extraídos para o modelo de dados unificado (UDM), processando vários tipos de dados e enriquecendo o evento com metadados, como o tipo de evento, com base na presença de informações principais e de destino.
Antes de começar
Certifique-se de que cumpre os seguintes pré-requisitos:
- Uma instância do Google SecOps
- Um Windows Server 2012 SP2 ou posterior, ou um anfitrião Linux com
systemd
- Se estiver a executar o agente 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 ao Cisco Firepower Management Center (FMC)
- Um sistema Linux para executar o cliente da CLI eNcore
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 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/opt/observiq-otel-collector/
no Linux ou no diretório `C:\Program Files\observIQ OpenTelemetry Collector` 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: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'CISCO_ESTREAMER' 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 Bindplane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configure o encaminhamento de Syslog no Cisco eStreamer
Configure o eStreamer no Firepower Management Center
- Inicie sessão no Firepower Management Center.
- Aceda a Sistema > Integração > eStreamer.
- Clique em eStreamer para aceder à configuração de eventos do eStreamer.
- Selecione as caixas de verificação junto aos tipos de eventos que quer captar:
- Eventos de intrusão: para eventos de deteção de intrusão
- Dados de pacotes de eventos de intrusão: para capturas de pacotes associadas a eventos de intrusão
- Eventos de ligação: para dados de ligação de rede
- Eventos de inteligência de segurança: para dados de inteligência de ameaças
- Eventos de ficheiros: para eventos de análise de ficheiros
- Eventos de software malicioso: para eventos de deteção de software malicioso
- Clique em Guardar.
Crie um cliente do eStreamer
- Na página eStreamer, clique em Criar cliente.
- Indique os seguintes detalhes de configuração:
- Nome do anfitrião: introduza o endereço IP do sistema Linux onde o cliente eNcore vai ser executado.
- Palavra-passe: introduza uma palavra-passe para encriptar o ficheiro de certificado.
- Clique em Guardar.
- Transfira o ficheiro de certificado PKCS12 gerado e transfira-o para o sistema cliente eNcore.
Instale e configure o cliente da CLI eNcore
- No seu sistema Linux, transfira o cliente da CLI eStreamer eNcore da Cisco.
Extraia o pacote eNcore:
tar -xzf eStreamer-eNcore-*.tar.gz cd eStreamer-eNcore-*
Execute o script de configuração:
./encore.sh setup
Quando lhe for pedido, escolha o formato de saída para pares de chave-valor (compatível com sistemas SIEM).
Introduza o endereço IP do FMC e a palavra-passe do certificado PKCS12.
Configure o ficheiro
estreamer.conf
para enviar mensagens syslog para o seu agente do Bindplane:- Abra o ficheiro
estreamer.conf
num editor de texto. Localize a secção de saída e configure-a para enviar o syslog para o seu agente do Bindplane:
{ "handler": { "outputters": [ { "name": "syslog", "adapter": "kvpair", "enabled": true, "stream": { "uri": "udp://BINDPLANE_AGENT_IP:514" } } ] } }
- Abra o ficheiro
Substitua
BINDPLANE_AGENT_IP
pelo endereço IP do seu agente do Bindplane.
Inicie o cliente eNcore
Teste a ligação no modo de primeiro plano:
./encore.sh foreground
Depois de validado, inicie o eNcore como um serviço em segundo plano:
./encore.sh start
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
act |
security_result.action_details |
O valor de act do registo não processado é atribuído a este campo. |
act |
security_result.action |
Se o valor de act for "Allow" (sem distinção entre maiúsculas e minúsculas), o valor "ALLOW" é atribuído a este campo. |
app |
network.http.user_agent |
O valor de app (mudado de nome para requestClientApplication no analisador) do registo não processado é atribuído a este campo. |
blockLength |
security_result.detection_fields[].key |
A string "blocklength" é atribuída a este campo. |
blockLength |
security_result.detection_fields[].value |
O valor de blockLength do registo não processado, convertido numa string, é atribuído a este campo. |
blockType |
security_result.detection_fields[].key |
A string "blockType" está atribuída a este campo. |
blockType |
security_result.detection_fields[].value |
O valor de blockType do registo não processado, convertido numa string, é atribuído a este campo. |
bytesIn |
network.received_bytes |
O valor de bytesIn do registo não processado é atribuído a este campo e convertido num número inteiro sem sinal. |
bytesOut |
network.sent_bytes |
O valor de bytesOut do registo não processado é atribuído a este campo e convertido num número inteiro sem sinal. |
cat |
security_result.category_details |
O valor de cat do registo não processado é atribuído a este campo. |
cs1 |
security_result.detection_fields[].value |
O valor de cs1 do registo não processado é atribuído a este campo. |
cs1Label |
security_result.detection_fields[].key |
O valor de cs1Label do registo não processado é atribuído a este campo. |
cs2 |
security_result.detection_fields[].value |
O valor de cs2 do registo não processado é atribuído a este campo. |
cs2Label |
security_result.detection_fields[].key |
O valor de cs2Label do registo não processado é atribuído a este campo. |
cs3 |
security_result.detection_fields[].value |
O valor de cs3 do registo não processado é atribuído a este campo. |
cs3Label |
security_result.detection_fields[].key |
O valor de cs3Label do registo não processado é atribuído a este campo. |
cs4 |
security_result.detection_fields[].value |
O valor de cs4 do registo não processado é atribuído a este campo. |
cs4Label |
security_result.detection_fields[].key |
O valor de cs4Label do registo não processado é atribuído a este campo. |
cs5 |
security_result.detection_fields[].value |
O valor de cs5 do registo não processado é atribuído a este campo. |
cs5Label |
security_result.detection_fields[].key |
O valor de cs5Label do registo não processado é atribuído a este campo. |
cs6 |
security_result.detection_fields[].value |
O valor de cs6 do registo não processado é atribuído a este campo. |
cs6 |
security_result.rule_id |
O valor de cs6 do registo não processado é atribuído a este campo. |
cs6Label |
security_result.detection_fields[].key |
O valor de cs6Label do registo não processado é atribuído a este campo. |
data |
security_result.detection_fields[].value |
O valor de data do objeto JSON suser no registo não processado é atribuído a este campo se o campo suser for um JSON. |
deviceInboundInterface |
additional.fields[].key |
A string "deviceInboundInterface" é atribuída a este campo. |
deviceInboundInterface |
additional.fields[].value.string_value |
O valor de deviceInboundInterface do registo não processado é atribuído a este campo. |
deviceOutboundInterface |
additional.fields[].key |
A string "deviceOutboundInterface" é atribuída a este campo. |
deviceOutboundInterface |
additional.fields[].value.string_value |
O valor de deviceOutboundInterface do registo não processado é atribuído a este campo. |
dpt |
target.port |
O valor de dpt do registo não processado é atribuído a este campo e convertido num número inteiro. |
dst |
target.asset.ip |
O valor de dst do registo não processado é atribuído a este campo. |
dst |
target.ip |
O valor de dst do registo não processado é atribuído a este campo. |
dvcpid |
security_result.about.process.pid |
O valor de dvcpid do registo não processado é atribuído a este campo. |
dvchost |
target.asset.hostname |
O valor de dvchost do registo não processado é atribuído a este campo. |
dvchost |
target.hostname |
O valor de dvchost do registo não processado é atribuído a este campo. |
hostname |
principal.asset.hostname |
O valor de hostname do registo não processado é atribuído a este campo. |
hostname |
principal.hostname |
O valor de hostname do registo não processado é atribuído a este campo. Determinado pela lógica do analisador com base na presença de informações principal e target . Se ambos estiverem presentes, o valor é "NETWORK_CONNECTION". Se apenas principal estiver presente, o valor é "STATUS_UPDATE". Se apenas target estiver presente, o valor é "USER_UNCATEGORIZED". Caso contrário, o valor é "GENERIC_EVENT". |
product_event_type |
metadata.product_event_type |
O valor de product_event_type do registo não processado é atribuído a este campo. |
product_name |
metadata.product_name |
O valor de product_name do registo não processado é atribuído a este campo. |
proto |
network.ip_protocol |
O valor de proto do registo não processado é convertido num número inteiro e, em seguida, mapeado para o nome do protocolo IP correspondente (por exemplo, 6 torna-se TCP e 17 torna-se UDP) através de uma pesquisa incluída em "parse_ip_protocol.include". |
severity |
security_result.severity_details |
O valor de severity do registo não processado é atribuído a este campo. |
spt |
principal.port |
O valor de spt do registo não processado é atribuído a este campo e convertido num número inteiro. |
src |
principal.asset.ip |
O valor de src do registo não processado é atribuído a este campo. |
src |
principal.ip |
O valor de src do registo não processado é atribuído a este campo. |
suser |
security_result.detection_fields[].value |
O valor de suser do registo não processado é atribuído a este campo se não for um objeto JSON. Se for um JSON, é usado o campo data do objeto suser . |
suser |
security_result.detection_fields[].key |
A string "suser" é atribuída a este campo. |
ts |
metadata.event_timestamp |
O valor de ts do registo não processado é analisado como uma data/hora e atribuído a este campo. São tentados vários formatos de indicação de tempo até ser feita uma análise bem-sucedida. |
vendor_name |
metadata.vendor_name |
O valor de vendor_name do registo não processado é atribuído a este campo. |
version |
metadata.product_version |
O valor de version do registo não processado é atribuído a este campo. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.