Coletar registros do Cisco IOS
Este documento explica como transferir os registros do sistema operacional de rede da Cisco (IOS) para o Google Security Operations usando um agente do Bindplane. O analisador transforma mensagens syslog brutas em um formato estruturado que obedece ao modelo de dados unificado (UDM). Primeiro, ele inicializa e extrai campos usando padrões grok com base em formatos comuns de syslog do Cisco IOS. Em seguida, ele mapeia os campos extraídos para os campos correspondentes do UDM, categoriza eventos e enriquece os dados com mais contexto antes de gerar o registro estruturado no formato UDM.
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Verifique se você está usando o Windows 2016 ou uma versão mais recente ou um host Linux com
systemd
. - Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
- Verifique se você tem acesso privilegiado ao Cisco IOS.
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. Salve o arquivo com segurança no sistema em que o BindPlane será instalado.
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
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este 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 este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Outros recursos de instalação
- Para mais opções de instalação, consulte este guia de instalação.
Configurar o agente do Bindplane para processar o Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele está no diretório/etc/bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano
,vi
ou Notepad).
- Localize o arquivo
Edite o arquivo
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: '/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 ingestion_labels: log_type: CISCO_IOS raw_log_field: body 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 real do cliente.Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber o arquivo de autenticação de transferência do Google SecOps.
Reinicie o agente do Bindplane para aplicar as mudanças
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, use o console Services ou digite o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o Syslog no Cisco IOS
- Faça login no Cisco IOS.
Escale os privilégios digitando o seguinte comando:
enable
Para alternar para o modo de configuração, digite o seguinte comando:
conf t
Digite os seguintes comandos:
logging host <bindplane-server-ip> transport <tcp/udp> port <port-number> logging source-interface <interface>
- Substitua
<bindplane-server-ip>
pelo endereço IP do agente do Bindplane e<port-number>
pela porta configurada. - Substitua
<tcp/udp>
pelo protocolo de detecção configurado no agente do Bindplane, por exemplo,udp
. - Substitua
<interface>
pelo ID da interface da Cisco.
- Substitua
Defina o nível de prioridade digitando o seguinte comando:
logging trap Informational logging console Informational logging severity Informational
Defina a facilidade syslog:
logging facility syslog
Salve e saia.
Configure as configurações para sobreviver à reinicialização digitando o seguinte comando:
copy running-config startup-config
Tabela de mapeamento do UDM
Campo de registro | Mapeamento de UDM | Lógica |
---|---|---|
AcsSessionID | network.session_id | Valor retirado do campo "AcsSessionID". |
AcctRequest-Flags | security_result.summary | Valor retirado do campo AcctRequest-Flags. |
AcctRequest-Flags | security_result.action | Se AcctRequest-Flags contiver Start , defina como ALLOW . Se AcctRequest-Flags contiver Stop , defina como BLOCK . |
AuthenticationIdentityStore | additional.fields.key = AuthenticationIdentityStore , value = AuthenticationIdentityStore |
Valor extraído do campo AuthenticationIdentityStore. |
AuthenticationMethod | additional.fields.key = AuthenticationMethod , value = AuthenticationMethod |
Valor retirado do campo AuthenticationMethod. |
AuthenticationStatus | security_result.summary | Valor retirado do campo AuthenticationStatus. |
Authen-Method | security_result.detection_fields.key = Authen-Method , value = Authen-Method |
Valor retirado do campo "Authen-Method". |
Authen-Method | extensions.auth.type | Se Authen-Method contiver TacacsPlus , defina como TACACS . |
AVPair_priv-lvl | security_result.detection_fields.key = AVPair_priv-lvl , value = AVPair_priv-lvl |
Valor retirado do campo AVPair_priv-lvl. |
AVPair_start_time | additional.fields.key = AVPair_start_time , value = AVPair_start_time |
Valor retirado do campo AVPair_start_time. |
AVPair_task_id | additional.fields.key = AVPair_task_id , value = AVPair_task_id |
Valor extraído do campo AVPair_task_id. |
AVPair_timezone | additional.fields.key = AVPair_timezone , value = AVPair_timezone |
Valor retirado do campo AVPair_timezone. |
auditid | metadata.product_log_id | Valor retirado do campo "auditid". |
cisco_facility | Não mapeado para o objeto IDM. | |
cisco_message | metadata.description | Valor extraído do campo cisco_message. |
cisco_mnemonic | security_result.rule_name | Valor retirado do campo cisco_mnemonic. |
cisco_severity | security_result.severity | Mapeado para diferentes níveis de gravidade com base no valor: 0: ALERTA, 1: CRÍTICO, 2: ALTO, 3: ERRO, 4: MÉDIO, 5: BAIXO, 6: INFORMATIVO, 7: INFORMATIVO. |
cisco_severity | security_result.severity_details | Mapeados para diferentes detalhes de gravidade com base no valor: 0: System unusable , 1: Immediate action needed , 2: Critical condition , 3: Error condition , 4: Warning condition , 5: Normal but significant condition , 6: Informational message only , 7: Appears during debugging only . |
cisco_tag | metadata.product_event_type | Valor retirado do campo cisco_tag. |
cisco_tag | metadata.event_type | Mapeado para diferentes tipos de evento com base no valor: SYS-6-LOGGINGHOST_STARTSTOP, TRACK-6-STATE, SYS-3-LOGGINGHOST_FAIL, CRYPTO-4-IKMP_NO_SA, HA_EM-3-FMPD_ACTION_NOTRACK, HA_EM-3-FMPD_ERROR: GENERIC_EVENT; IPSEC-3-REPLAY_ERROR, CRYPTO-4-RECVD_PKT_INV_SPI, IPSEC-3-HMAC_ERROR, FW-6-DROP_PKT, SEC-6-IPACCESSLOGP: NETWORK_UNCATEGORIZED; CRYPTO-4-IKMP_BAD_MESSAGE, CRYPTO-6-IKMP_NOT_ENCRYPTED, CRYPTO-6-IKMP_MODE_FAILURE: STATUS_UNCATEGORIZED; SYS-5-CONFIG_I: USER_UNCATEGORIZED. |
ClientLatency | additional.fields.key = ClientLatency , value = ClientLatency |
Valor retirado do campo "ClientLatency". |
CmdSet | additional.fields.key = CmdSet , value = CmdSet |
Valor retirado do campo CmdSet. |
comando | principal.process.command_line | Valor retirado do campo de comando. |
CPMSessionID | additional.fields.key = CPMSessionID , value = CPMSessionID |
Valor retirado do campo CPMSessionID. |
description | metadata.description | Valor extraído do campo de descrição. |
DestinationIPAddress | target.asset.ip | Valor retirado do campo "DestinationIPAddress". |
DestinationIPAddress | target.ip | Valor retirado do campo "DestinationIPAddress". |
DestinationPort | target.port | Valor retirado do campo DestinationPort. |
Device_IP_Address | principal.asset.ip | Valor extraído do campo Device_IP_Address. |
Device_IP_Address | principal.ip | Valor extraído do campo Device_IP_Address. |
Device_Type | additional.fields.key = Device_Type , value = Device_Type |
Valor extraído do campo "Device_Type". |
dst_ip | target.asset.ip | Valor retirado do campo dst_ip. |
dst_ip | target.ip | Valor retirado do campo dst_ip. |
dst_port | target.port | Valor retirado do campo dst_port. |
dst_user | target.user.userid | Valor retirado do campo dst_user. |
EnableFlag | security_result.detection_fields.key = EnableFlag , value = EnableFlag |
Valor retirado do campo EnableFlag. |
IdentityGroup | additional.fields.key = IdentityGroup , value = IdentityGroup |
Valor retirado do campo "IdentityGroup". |
IdentitySelectionMatchedRule | security_result.detection_fields.key = IdentitySelectionMatchedRule , value = IdentitySelectionMatchedRule |
Valor extraído do campo IdentitySelectionMatchedRule. |
intermediary_host | intermediary.hostname | Valor retirado do campo intermediary_host. |
intermediary_ip | intermediary.ip | Valor retirado do campo intermediary_ip. |
IPSEC | additional.fields.key = IPSEC , value = IPSEC |
Valor retirado do campo IPSEC. |
ISEPolicySetName | extensions.auth.type | Se ISEPolicySetName contiver Tacacs , defina como TACACS . |
IsMachineAuthentication | additional.fields.key = IsMachineAuthentication , value = IsMachineAuthentication |
Valor retirado do campo IsMachineAuthentication. |
IsMachineIdentity | security_result.detection_fields.key = IsMachineIdentity , value = IsMachineIdentity |
Valor retirado do campo IsMachineIdentity. |
Local | additional.fields.key = Location , value = Location |
Valor retirado do campo "Local". |
MatchedCommandSet | additional.fields.key = MatchedCommandSet , value = MatchedCommandSet |
Valor extraído do campo MatchedCommandSet. |
mensagem | Não mapeado para o objeto IDM. | |
metadata_event_type | metadata.event_type | Valor extraído do campo metadata_event_type. Se estiver vazio ou GENERIC_EVENT , defina como NETWORK_UNCATEGORIZED se principal_mid_present e target_mid_present forem verdadeiros, USER_UNCATEGORIZED se principal_userid_present for verdadeiro, STATUS_UPDATE se principal_mid_present for verdadeiro ou GENERIC_EVENT caso contrário. Se o serviço contiver Login , defina como USER_LOGIN se principal_userid_present, principal_mid_present e target_mid_present forem verdadeiros ou USER_UNCATEGORIZED se principal_userid_present for verdadeiro. |
Model_Name | additional.fields.key = Model_Name , value = Model_Name |
Valor retirado do campo "Model_Name". |
Nome | additional.fields.key = Name , value = Nome |
Valor retirado do campo "Nome". |
Network_Device_Profile | additional.fields.key = Network_Device_Profile , value = Network_Device_Profile |
Valor extraído do campo Network_Device_Profile. |
NetworkDeviceGroups | additional.fields.key = NetworkDeviceGroups , value = NetworkDeviceGroups |
Valor retirado do campo "NetworkDeviceGroups". |
NetworkDeviceName | principal.asset.hostname | Valor retirado do campo NetworkDeviceName. |
NetworkDeviceName | principal.hostname | Valor retirado do campo NetworkDeviceName. |
NetworkDeviceProfileId | principal.resource.product_object_id | Valor extraído do campo NetworkDeviceProfileId. |
pid | principal.process.pid | Valor retirado do campo pid. |
Porta | principal.resource.attribute.labels.key = Port , value = Port |
Valor retirado do campo "Porta". |
Nível de privilégio | security_result.detection_fields.key = Privilege-Level , value = Privilege-Level |
Valor do campo "Nível de privilégio". |
product_event_type | metadata.product_event_type | Valor extraído do campo product_event_type. |
Protocolo | additional.fields.key = Protocol , value = Protocol |
Valor do campo "Protocolo". |
protocolo | network.application_protocol | Se o protocolo for HTTPS , defina como HTTPS . |
protocolo | network.ip_protocol | Se o protocolo for TCP ou UDP , defina o valor em maiúsculas do protocolo. |
reason | security_result.summary | Valor do campo "Motivo". |
região | principal.location.country_or_region | Valor retirado do campo de região. |
Endereço-remoto | target.asset.ip | Valor retirado do campo "Endereço remoto" após a validação como um endereço IP. |
Endereço-remoto | target.ip | Valor retirado do campo "Endereço remoto" após a validação como um endereço IP. |
RequestLatency | security_result.detection_fields.key = RequestLatency , value = RequestLatency |
Valor extraído do campo "RequestLatency". |
Resposta | additional.fields.key = Response , value = Response |
Valor retirado do campo "Resposta". |
SelectedAccessService | security_result.action_details | Valor retirado do campo SelectedAccessService. |
SelectedAuthenticationIdentityStores | security_result.detection_fields.key = SelectedAuthenticationIdentityStores , value = SelectedAuthenticationIdentityStores |
Valor retirado do campo SelectedAuthenticationIdentityStores. |
SelectedCommandSet | additional.fields.key = SelectedCommandSet , value = SelectedCommandSet |
Valor retirado do campo SelectedCommandSet. |
Serviço | additional.fields.key = Service , value = Service |
Valor do campo "Serviço". |
Argumento de serviço | additional.fields.key = Service-Argument , value = Service-Argument |
Valor retirado do campo "Service-Argument". |
gravidade, | security_result.severity | Se a gravidade contiver Notice , defina como INFORMATIVO. |
Software_Version | additional.fields.key = Software_Version , value = Software_Version |
Valor retirado do campo Software_Version. |
source_facility | principal.asset.hostname | Valor retirado do campo "source_facility". |
source_facility | principal.hostname | Valor retirado do campo "source_facility". |
src_ip | principal.asset.ip | Valor retirado do campo src_ip. |
src_ip | principal.ip | Valor retirado do campo src_ip. |
src_mac | principal.mac | Valor retirado do campo src_mac após a substituição de . por : . |
src_port | principal.port | Valor retirado do campo src_port. |
src_user_id | principal.user.userid | Valor extraído do campo src_user_id. Se estiver vazio, use o valor do campo "Usuário". Se ainda estiver vazio, use o valor do campo StepData_9. |
src_user_name | principal.user.user_display_name | Valor retirado do campo src_user_name. |
Etapa | additional.fields.key = Step , value = Step |
Valor do campo "Etapa". |
StepData_10 | principal.asset.hostname | Valor retirado do campo StepData_10. |
StepData_10 | principal.hostname | Valor retirado do campo StepData_10. |
StepData_13 | security_result.summary | Valor retirado do campo StepData_13. |
StepData_14 | security_result.detection_fields.key = StepData_14 , value = StepData_14 |
Valor retirado do campo StepData_14. |
StepData_15 | security_result.detection_fields.key = StepData_15 , value = StepData_15 |
Valor extraído do campo StepData_15. |
StepData_20 | security_result.detection_fields.key = StepData_20 , value = StepData_20 |
Valor retirado do campo StepData_20. |
StepData_21 | security_result.detection_fields.key = StepData_21 , value = StepData_21 |
Valor extraído do campo StepData_21. |
StepData_3 | additional.fields.key = StepData_3 , value = StepData_3 |
Valor retirado do campo StepData_3. |
StepData_4 | security_result.detection_fields.key = StepData_4 , value = StepData_4 |
Valor retirado do campo StepData_4. |
StepData_6 | security_result.detection_fields.key = StepData_6 , value = StepData_6 |
Valor retirado do campo StepData_6. |
StepData_7 | security_result.detection_fields.key = StepData_7 , value = StepData_7 |
Valor retirado do campo StepData_7. |
StepData_8 | security_result.detection_fields.key = StepData_8 , value = StepData_8 |
Valor retirado do campo StepData_8. |
StepData_9 | principal.user.userid | Valor retirado do campo StepData_9 se src_user_id e os campos de usuário estiverem vazios. |
target_host | target.asset.hostname | Valor retirado do campo target_host. |
target_host | target.hostname | Valor retirado do campo target_host. |
timestamp | metadata.event_timestamp | Valor retirado do campo de carimbo de data/hora após a remoção de espaços extras e a análise da data. |
TotalAuthenLatency | additional.fields.key = TotalAuthenLatency , value = TotalAuthenLatency |
Valor retirado do campo TotalAuthenLatency. |
ts | metadata.event_timestamp | Valor retirado do campo ts após analisar a data. |
Tipo | security_result.category_details | Valor retirado do campo "Type". |
Usuário | principal.user.userid | Valor retirado do campo "User" se src_user_id estiver vazio. |
UserType | additional.fields.key = UserType , value = UserType |
Valor retirado do campo UserType. |
metadata.vendor_name | Defina como CISCO . |
|
metadata.product_name | Defina como CISCO_IOS . |
|
metadata.log_type | Defina como CISCO_IOS . |
Alterações
2025-02-11
Melhoria:
- Foi adicionado suporte a um novo formato de registro do syslog.
2025-01-23
Melhoria:
- Foi adicionado suporte a um novo formato de registro do syslog.
2025-01-02
Melhoria:
- Foi adicionado suporte a um novo formato de registro do syslog.
2024-12-27
Melhoria:
- Foi adicionado suporte a um novo formato de registro do syslog.
2024-11-25
Melhoria:
- Foi adicionado um padrão Grok para analisar novos registros.
- O nome do host mapeado no cabeçalho do syslog para
intermediary.hostname
detarget.hostname
.
2024-11-19
Melhoria:
- Suporte adicionado a um novo formato de registros do syslog.
2024-10-28
Melhoria:
- Foi adicionado um padrão Grok para analisar novos registros.
2024-10-24
Melhoria:
- Foi adicionado um padrão Grok para analisar novos registros.
2024-10-01
Melhoria:
- Foi adicionado um padrão Grok para analisar novos registros.
2024-07-04
Melhoria:
- Adição de suporte a um novo padrão de registros do syslog.
2024-04-02
Melhoria:
- Um novo padrão Grok foi adicionado para analisar um novo tipo de registro.
- Mapeamos os novos campos para os campos correspondentes do UDM.
2023-10-04
Melhoria:
- Um novo padrão Grok foi adicionado para analisar um novo tipo de registro.
source_facility
foi mapeado paraprincipal.hostname
.
2023-08-11
Melhoria:
intermediary.ip
mapeado quando a mensagem contémHOST=
.principal.user.userid
mapeado quando a mensagem contémUser:
.principal.process.command_line
mapeado quando a mensagem contémcommand:
.target.user.userid
mapeado quando a mensagem contémusername
.- Mapeou
metadata.event_type
para ummetadata.event_type
mais específico.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.