Coletar registros do Cisco IOS
Este documento explica como ingerir registros do Cisco IOS no Google Security Operations usando o Bindplane. O analisador transforma mensagens syslog brutas em um formato estruturado de acordo com o 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 contexto adicional antes de gerar o registro estruturado no formato UDM.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Instância do Google SecOps
- Windows 2016 ou mais recente ou um host Linux com
systemd - Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
- Acesso privilegiado ao roteador, switch ou servidor 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.
- Baixe o arquivo de autenticação de ingestão.
- Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.
Receber o ID do 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
Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.
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 root 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 o guia de instalação.
Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps
- Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml. Normalmente, ele fica 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,viou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yamlda 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: 'CISCO_IOS' 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.jsonpara o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane em Linux, execute o seguinte comando:
sudo systemctl restart bindplane-agentPara reiniciar o agente do Bindplane em Windows, use o console Serviços ou insira o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o Syslog em um dispositivo Cisco IOS
- Faça login no dispositivo Cisco IOS usando SSH ou uma conexão de console.
Insira o seguinte comando para o modo privilegiado:
enableInsira o seguinte comando para o modo de configuração:
conf tDigite os comandos a seguir para configurar o syslog:
logging <bindplane_IP_address> logging source-interface <interface>- Mude
<bindplane_IP_address>para o endereço IP real do agente do Bindplane. - Mude
<interface>para a interface de comunicação real.
- Mude
Digite os comandos a seguir para configurar o nível de prioridade:
logging trap information logging console informationInsira o comando a seguir para configurar a facilidade do syslog:
logging facility syslogInsira o comando a seguir para copiar a running-config para a startup-config:
copy running-config startup-config
Tabela de mapeamento da UDM
| Campo de registro | Mapeamento da UDM | Lógica |
|---|---|---|
| AcsSessionID | network.session_id | Valor extraído do campo "AcsSessionID". |
| AcctRequest-Flags | security_result.summary | Valor extraído 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 extraído do campo "AuthenticationMethod". |
| AuthenticationStatus | security_result.summary | Valor extraído do campo "AuthenticationStatus". |
| Authen-Method | security_result.detection_fields.key = Authen-Method, value = Authen-Method |
Valor extraído 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 extraído do campo AVPair_priv-lvl. |
| AVPair_start_time | additional.fields.key = AVPair_start_time, value = AVPair_start_time |
Valor extraído 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 extraído do campo AVPair_timezone. |
| auditid | metadata.product_log_id | Valor extraído 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 extraído do campo "cisco_mnemonic". |
| cisco_severity | security_result.severity | Mapeado para diferentes níveis de gravidade com base no valor: 0: ALERT, 1: CRITICAL, 2: HIGH, 3: ERROR, 4: MEDIUM, 5: LOW, 6: INFORMATIONAL, 7: INFORMATIONAL. |
| cisco_severity | security_result.severity_details | Mapeado 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 extraído do campo "cisco_tag". |
| cisco_tag | metadata.event_type | Mapeado para diferentes tipos de eventos 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 extraído do campo "ClientLatency". |
| CmdSet | additional.fields.key = CmdSet, value = CmdSet |
Valor extraído do campo "CmdSet". |
| comando | principal.process.command_line | Valor extraído do campo de comando. |
| CPMSessionID | additional.fields.key = CPMSessionID, value = CPMSessionID |
Valor extraído do campo "CPMSessionID". |
| description | metadata.description | Valor extraído do campo de descrição. |
| DestinationIPAddress | target.asset.ip | Valor extraído do campo "DestinationIPAddress". |
| DestinationIPAddress | target.ip | Valor extraído do campo "DestinationIPAddress". |
| DestinationPort | target.port | Valor extraído 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 extraído do campo "dst_ip". |
| dst_ip | target.ip | Valor extraído do campo "dst_ip". |
| dst_port | target.port | Valor extraído do campo "dst_port". |
| dst_user | target.user.userid | Valor extraído do campo "dst_user". |
| EnableFlag | security_result.detection_fields.key = EnableFlag, value = EnableFlag |
Valor extraído do campo "EnableFlag". |
| IdentityGroup | additional.fields.key = IdentityGroup, value = IdentityGroup |
Valor extraído do campo "IdentityGroup". |
| IdentitySelectionMatchedRule | security_result.detection_fields.key = IdentitySelectionMatchedRule, value = IdentitySelectionMatchedRule |
Valor extraído do campo "IdentitySelectionMatchedRule". |
| intermediary_host | intermediary.hostname | Valor extraído do campo "intermediary_host". |
| intermediary_ip | intermediary.ip | Valor extraído do campo "intermediary_ip". |
| IPSEC | additional.fields.key = IPSEC, value = IPSEC |
Valor extraído do campo IPSEC. |
| ISEPolicySetName | extensions.auth.type | Se ISEPolicySetName contiver Tacacs, defina como TACACS. |
| IsMachineAuthentication | additional.fields.key = IsMachineAuthentication, value = IsMachineAuthentication |
Valor extraído do campo "IsMachineAuthentication". |
| IsMachineIdentity | security_result.detection_fields.key = IsMachineIdentity, value = IsMachineIdentity |
Valor extraído do campo "IsMachineIdentity". |
| Local | additional.fields.key = Location, value = Location |
Valor extraído do campo "Localização". |
| 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, será definido 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 extraído do campo "Model_Name". |
| Nome | additional.fields.key = Name, value = Name |
Valor extraído 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 extraído do campo "NetworkDeviceGroups". |
| NetworkDeviceName | principal.asset.hostname | Valor extraído do campo "NetworkDeviceName". |
| NetworkDeviceName | principal.hostname | Valor extraído do campo "NetworkDeviceName". |
| NetworkDeviceProfileId | principal.resource.product_object_id | Valor extraído do campo "NetworkDeviceProfileId". |
| pid | principal.process.pid | Valor extraído do campo "pid". |
| Porta | principal.resource.attribute.labels.key = Port, value = Port |
Valor extraído do campo "Porta". |
| Nível de privilégio | security_result.detection_fields.key = Privilege-Level, value = Privilege-Level |
Valor extraído 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 extraído 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 como o valor em maiúsculas do protocolo. |
| reason | security_result.summary | Valor extraído do campo "motivo". |
| região | principal.location.country_or_region | Valor extraído do campo "região". |
| Remote-Address | target.asset.ip | Valor extraído do campo "Remote-Address" depois de validá-lo como um endereço IP. |
| Remote-Address | target.ip | Valor extraído do campo "Remote-Address" depois de validá-lo 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 extraído do campo "Resposta". |
| SelectedAccessService | security_result.action_details | Valor extraído do campo "SelectedAccessService". |
| SelectedAuthenticationIdentityStores | security_result.detection_fields.key = SelectedAuthenticationIdentityStores, value = SelectedAuthenticationIdentityStores |
Valor extraído do campo "SelectedAuthenticationIdentityStores". |
| SelectedCommandSet | additional.fields.key = SelectedCommandSet, value = SelectedCommandSet |
Valor extraído do campo "SelectedCommandSet". |
| Serviço | additional.fields.key = Service, value = Service |
Valor extraído do campo "Serviço". |
| Service-Argument | additional.fields.key = Service-Argument, value = Service-Argument |
Valor extraído do campo "Service-Argument". |
| gravidade, | security_result.severity | Se a gravidade contiver Notice, defina como "INFORMATIONAL". |
| Software_Version | additional.fields.key = Software_Version, value = Software_Version |
Valor extraído do campo "Software_Version". |
| source_facility | principal.asset.hostname | Valor extraído do campo "source_facility". |
| source_facility | principal.hostname | Valor extraído do campo "source_facility". |
| src_ip | principal.asset.ip | Valor extraído do campo "src_ip". |
| src_ip | principal.ip | Valor extraído do campo "src_ip". |
| src_mac | principal.mac | Valor extraído do campo "src_mac" após substituir . por :. |
| src_port | principal.port | Valor extraído 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 extraído do campo "src_user_name". |
| Etapa | additional.fields.key = Step, value = Step |
Valor extraído do campo "Etapa". |
| StepData_10 | principal.asset.hostname | Valor extraído do campo "StepData_10". |
| StepData_10 | principal.hostname | Valor extraído do campo "StepData_10". |
| StepData_13 | security_result.summary | Valor extraído do campo "StepData_13". |
| StepData_14 | security_result.detection_fields.key = StepData_14, value = StepData_14 |
Valor extraído 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 extraído 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 extraído do campo StepData_3. |
| StepData_4 | security_result.detection_fields.key = StepData_4, value = StepData_4 |
Valor extraído do campo StepData_4. |
| StepData_6 | security_result.detection_fields.key = StepData_6, value = StepData_6 |
Valor extraído do campo "StepData_6". |
| StepData_7 | security_result.detection_fields.key = StepData_7, value = StepData_7 |
Valor extraído do campo "StepData_7". |
| StepData_8 | security_result.detection_fields.key = StepData_8, value = StepData_8 |
Valor extraído do campo "StepData_8". |
| StepData_9 | principal.user.userid | Valor extraído do campo "StepData_9" se os campos "src_user_id" e "User" estiverem vazios. |
| target_host | target.asset.hostname | Valor extraído do campo "target_host". |
| target_host | target.hostname | Valor extraído do campo "target_host". |
| timestamp | metadata.event_timestamp | Valor extraído do campo de carimbo de data/hora após remover espaços extras e analisar a data. |
| TotalAuthenLatency | additional.fields.key = TotalAuthenLatency, value = TotalAuthenLatency |
Valor extraído do campo "TotalAuthenLatency". |
| ts | metadata.event_timestamp | Valor extraído do campo "ts" após analisar a data. |
| Tipo | security_result.category_details | Valor extraído do campo "Tipo". |
| Usuário | principal.user.userid | Valor extraído do campo "User" se src_user_id estiver vazio. |
| UserType | additional.fields.key = UserType, value = UserType |
Valor extraído do campo UserType. |
| metadata.vendor_name | Defina como CISCO. |
|
| metadata.product_name | Defina como CISCO_IOS. |
|
| metadata.log_type | Defina como CISCO_IOS. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.