Recolha registos do Cisco IOS
Este documento explica como pode carregar registos do Cisco IOS para o Google Security Operations através do Bindplane. O analisador transforma mensagens syslog não processadas num formato estruturado em conformidade com o modelo de dados unificado (UDM). Primeiro, inicializa e extrai campos através de padrões grok baseados em formatos syslog comuns do Cisco IOS. Em seguida, mapeia os campos extraídos para os campos da UDM correspondentes, categoriza os eventos e enriquece os dados com contexto adicional antes de, finalmente, gerar o registo estruturado no formato da UDM.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps
- Windows 2016 ou posterior, ou um anfitrião Linux com
systemd - Se estiver a ser executado através de um proxy, certifique-se de que as portas da firewall estão abertas
- Acesso privilegiado ao router, comutador ou servidor Cisco IOS
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/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,viou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
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 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-agentPara 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 Syslog no dispositivo Cisco IOS
- Inicie sessão no dispositivo Cisco IOS através de SSH ou de uma ligação de consola.
Introduza o seguinte comando para o modo privilegiado:
enableIntroduza o seguinte comando para o modo de configuração:
conf tIntroduza os seguintes comandos para configurar o syslog:
logging <bindplane_IP_address> logging source-interface <interface>- Altere
<bindplane_IP_address>para o endereço IP real do agente do Bindplane. - Altere
<interface>para a interface de comunicação real.
- Altere
Introduza os seguintes comandos para configurar o nível de prioridade:
logging trap information logging console informationIntroduza o seguinte comando para configurar a funcionalidade syslog:
logging facility syslogIntroduza o seguinte comando para copiar a configuração em execução para a configuração de arranque:
copy running-config startup-config
Tabela de mapeamento do UDM
| Campo de registo | Mapeamento do 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 retirado 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 retirado 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 está mapeado para o objeto IDM. | |
| cisco_message | metadata.description | Valor retirado 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: ELEVADO, 3: ERRO, 4: MÉDIO, 5: BAIXO, 6: INFORMATIVO, 7: INFORMATIVO. |
| 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 retirado 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 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. |
| descrição | metadata.description | Valor retirado 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 retirado do campo Device_IP_Address. |
| Device_IP_Address | principal.ip | Valor retirado do campo Device_IP_Address. |
| Device_Type | additional.fields.key = Device_Type, value = Device_Type |
Valor retirado 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 retirado 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. |
| Location | additional.fields.key = Location, value = Location |
Valor retirado do campo Localização. |
| MatchedCommandSet | additional.fields.key = MatchedCommandSet, value = MatchedCommandSet |
Valor retirado do campo MatchedCommandSet. |
| mensagem | Não está mapeado para o objeto IDM. | |
| metadata_event_type | metadata.event_type | Valor retirado do campo metadata_event_type. Se estiver vazio ou for GENERIC_EVENT, é 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 retirado do campo Model_Name. |
| Nome | additional.fields.key = Name, value = Name |
Valor retirado do campo Nome. |
| Network_Device_Profile | additional.fields.key = Network_Device_Profile, value = Network_Device_Profile |
Valor retirado 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 retirado 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. |
| Ao nível do privilégio | security_result.detection_fields.key = Privilege-Level, value = Privilege-Level |
Valor retirado do campo Nível de privilégio. |
| product_event_type | metadata.product_event_type | Valor retirado do campo product_event_type. |
| Protocolo | additional.fields.key = Protocol, value = Protocol |
Valor retirado do campo Protocol. |
| 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 para o valor em maiúsculas do protocolo. |
| motivo | security_result.summary | Valor retirado do campo de motivo. |
| região | principal.location.country_or_region | Valor retirado do campo de região. |
| Remote-Address | target.asset.ip | Valor retirado do campo Remote-Address após a validação como um endereço IP. |
| Remote-Address | target.ip | Valor retirado do campo Remote-Address após a validação como um endereço IP. |
| RequestLatency | security_result.detection_fields.key = RequestLatency, value = RequestLatency |
Valor retirado do campo RequestLatency. |
| Resposta | additional.fields.key = Response, value = Response |
Valor retirado do campo de 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 retirado do campo Serviço. |
| Service-Argument | additional.fields.key = Service-Argument, value = Service-Argument |
Valor retirado do campo Service-Argument. |
| gravidade | security_result.severity | Se a gravidade contiver Notice, defina-a como INFORMATIONAL. |
| 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 substituir . por :. |
| src_port | principal.port | Valor retirado do campo src_port. |
| src_user_id | principal.user.userid | Valor retirado do campo src_user_id. Se estiver vazio, usa o valor do campo User. 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. |
| Passo | additional.fields.key = Step, value = Step |
Valor retirado do campo Passo. |
| 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 retirado 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 retirado 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 os campos src_user_id e User 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 data/hora após a remoção de espaços adicionais 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 a análise da data. |
| Tipo | security_result.category_details | Valor retirado do campo Tipo. |
| Utilizador | 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 | Definido como CISCO. |
|
| metadata.product_name | Definido como CISCO_IOS. |
|
| metadata.log_type | Definido como CISCO_IOS. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.