Coletar registros do Cisco IOS
Este documento explica como ingerir registros do Cisco Internetwork Operating System (IOS) no Google Security Operations usando um agente do 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 uma instância do Google SecOps.
- Use o Windows 2016 ou uma versão 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.
- 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.
- 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
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 este 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
,vi
ou Bloco de Notas).
- 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 do cliente real.Atualize
/path/to/ingestion-authentication-file.json
para 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 no Linux, execute o seguinte comando:
sudo systemctl restart bindplane-agent
Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o Syslog no Cisco IOS
- Faça login no Cisco IOS.
Para aumentar os privilégios, digite o seguinte comando:
enable
Mude para o modo de configuração inserindo 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 escuta configurado no agente do Bindplane, por exemplo,udp
. - Substitua
<interface>
pelo ID da interface da Cisco.
- Substitua
Defina o nível de prioridade inserindo o seguinte comando:
logging trap Informational logging console Informational logging severity Informational
Defina a facilidade do syslog:
logging facility syslog
Salve e saia.
Configure as configurações para sobreviver à reinicialização inserindo o seguinte comando:
copy running-config startup-config
Tabela de mapeamento do 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.