Coletar registros do WAF da Akamai
Visão geral
Esse analisador processa os registros do firewall de aplicativos da Web (WAF) da Akamai, com suporte aos formatos syslog e CEF. Ele extrai campos como endereços IP, URLs, métodos HTTP, códigos de resposta, user agents e informações de regras de segurança, mapeando-os para o UDM para uma representação consistente. O analisador também processa campos específicos da Akamai, como attackData
e clientReputation
, realizando as transformações de dados necessárias e enriquecendo a saída do UDM.
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Verifique se você tem acesso privilegiado ao AWS IAM e ao S3.
- Verifique se você tem acesso privilegiado ao Akamai.
Configurar o bucket do Amazon S3
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Criar um bucket.
- Salve o Nome e a Região do bucket para referência futura.
- Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o Usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como o caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo .csv. Salve a Chave de acesso e a Chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clique em Próxima.
- Clique em Adicionar permissões
Configurar o WAF da Akamai para enviar registros ao Amazon S3
- Faça login no Control Center da Akamai.
- Acesse a seção Segurança.
- Selecione Registros.
Configure uma nova entrega de registros:
- Origem de registro:selecione sua configuração do WAF.
- Destino da entrega:escolha Amazon S3.
- Bucket do S3:especifique o nome do bucket do S3 que você criou.
- Região:selecione a região da AWS em que seu bucket do S3 está localizado.
- ID da chave de acesso e chave de acesso secreta:informe as credenciais que você gerou.
- Formato do registro:escolha o formato de registro relevante (por exemplo, JSON).
- Frequência de envio:selecione a frequência adequada para o envio de registros (por exemplo, a cada 5 minutos).
Verificar a entrega de registros:
- Depois de configurar o LDS, monitore o bucket do S3 para verificar se há arquivos de registro recebidos.
Configurar um feed no Google SecOps para processar registros do WAF da Akamai
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Akamai WAF Logs).
- Selecione Amazon S3 como o Tipo de origem.
- Selecione Akamai WAF como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
- Região: a região em que o bucket do Amazon S3 está localizado.
- URI do S3: o URI do bucket.
s3:/BUCKET_NAME
Substitua:BUCKET_NAME
: o nome do bucket
- URI é um: selecione o TIPO DE URI de acordo com a configuração do fluxo de registros: Arquivo único | Diretório | Diretório que inclui subdiretórios.
- Opções de exclusão da origem: selecione a opção de exclusão de acordo com sua preferência.
- ID da chave de acesso: a chave de acesso do usuário com acesso ao bucket do S3.
- Chave de acesso secreta: a chave secreta do usuário com acesso ao bucket do S3.
- Namespace de recursos: o namespace de recursos.
- Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.
Clique em Próxima.
Revise a configuração do novo feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento do UDM
Campo de registro (em ordem crescente) | Mapeamento do UDM | Lógica |
---|---|---|
attackData.clientIP |
principal.ip , principal.asset.ip |
Endereço IP do cliente que inicia a solicitação. Extraídos do campo attackData.clientIP nos registros akamai_siem. |
attackData.configId |
metadata.product_log_id |
ID da configuração de segurança. Extraídos do campo attackData.configId nos registros akamai_siem. Também adicionado como detection_field no objeto security_result. |
attackData.policyId |
N/A | Usado na lógica do analisador para preencher security_result.summary com o valor "PolicyId:[value]". |
attackData.ruleActions |
security_result.action , security_result.action_details |
Ações realizadas com base na regra acionada. Extraídos do campo attackData.ruleActions nos registros akamai_siem. "deny" é mapeado para BLOQUEAR, outros valores ("alert", "monitor", "allow", "tarpit") são mapeados para PERMITIR. O valor original também é armazenado em action_details . |
attackData.ruleData |
security_result.detection_fields |
Dados associados à regra acionada. Extraídos do campo attackData.ruleData nos registros akamai_siem. Adicionado a security_result.detection_fields com a chave "RuleData". |
attackData.ruleMessages |
security_result.threat_name |
Mensagens associadas à regra acionada. Extraídos do campo attackData.ruleMessages nos registros akamai_siem. |
attackData.ruleSelectors |
security_result.detection_fields |
Seletores associados à regra acionada. Extraídos do campo attackData.ruleSelectors nos registros akamai_siem. Adicionado a security_result.detection_fields com a chave "RuleSelector". |
attackData.ruleTags |
security_result.category_details |
Tags associadas à regra acionada. Extraídos do campo attackData.ruleTags nos registros akamai_siem. |
attackData.ruleVersions |
security_result.detection_fields |
Versões das regras acionadas. Extraídos do campo attackData.ruleVersions nos registros akamai_siem. Adicionado a security_result.detection_fields com a chave "Rule Version". |
clientReputation |
principal.labels |
Informações de reputação do cliente. Extraídos do campo clientReputation nos registros akamai_siem. Adicionado como um rótulo ao elemento principal com a chave "reputação". |
cliIP , cli_ip , principal_ip |
principal.ip , principal.asset.ip |
Endereço IP do cliente. Extraídos de cliIP , cli_ip ou principal_ip , dependendo do formato do registro. |
cp |
additional.fields |
Código CP. Extraídos do campo cp . Adicionado a additional.fields com a chave "cp". |
eventId |
metadata.product_log_id |
ID do evento. Extraídos do campo eventId . |
eventTime , log_date |
metadata.event_timestamp |
Carimbo de data/hora do evento. Extraídos de eventTime ou analisados de log_date , dependendo do formato do registro. |
eventType.eventDefinition.eventDefinitionId |
target.resource.product_object_id |
ID da definição do evento. Extraídos de eventType.eventDefinition.eventDefinitionId . |
eventType.eventDefinition.eventDescription |
metadata.description |
Descrição do evento. Extraídos de eventType.eventDefinition.eventDescription . |
eventType.eventDefinition.eventName |
metadata.product_event_type |
Nome do evento. Extraídos de eventType.eventDefinition.eventName . |
eventType.eventTypeId |
additional.fields |
ID do tipo de evento. Extraídos de eventType.eventTypeId . Adicionado a additional.fields com a chave "eventTypeId". |
eventType.eventTypeName |
additional.fields |
Nome do tipo de evento. Extraídos de eventType.eventTypeName . Adicionado a additional.fields com a chave "eventTypeName". |
format |
N/A | Usado pelo analisador para determinar o formato do registro. |
geo.asn |
principal.location.name |
Número de sistema autônomo (ASN, na sigla em inglês). Extraídos de geo.asn ou AkamaiSiemASN , dependendo do formato do registro. O valor tem o prefixo "ASN ". |
geo.city |
principal.location.city |
Cidade. Extraídos de geo.city ou AkamaiSiemCity , dependendo do formato do registro. |
geo.country |
principal.location.country_or_region |
País. Extraídos de geo.country ou AkamaiSiemContinent , dependendo do formato do registro. |
httpMessage.bytes |
network.sent_bytes |
Bytes enviados na mensagem HTTP. Extraídos de httpMessage.bytes . |
httpMessage.host |
target.hostname , target.asset.hostname |
Nome do host. Extraídos de httpMessage.host ou reqHost , dependendo do formato do registro. |
httpMessage.method |
network.http.method |
Método HTTP. Extraídos de httpMessage.method , network_http_method ou reqMethod , dependendo do formato do registro. Convertido em letras maiúsculas. |
httpMessage.path |
target.url |
Caminho da solicitação. Extraídos de httpMessage.path , target_url ou reqPath , dependendo do formato do registro. Se httpMessage.query estiver presente, ele será anexado ao caminho com um separador "?". |
httpMessage.port |
target.port |
Porta. Extraídos de httpMessage.port ou reqPort , dependendo do formato do registro. |
httpMessage.protocol |
N/A | Usado pelo analisador para determinar o protocolo. |
httpMessage.query |
N/A | Usado na lógica do analisador para anexar a httpMessage.path , se presente. |
httpMessage.requestId |
network.session_id |
ID da solicitação. Extraídos de httpMessage.requestId ou reqId , dependendo do formato do registro. |
httpMessage.requestHeaders , AkamaiSiemRequestHeaders |
additional.fields |
Cabeçalhos de solicitação. Extraídos de httpMessage.requestHeaders ou AkamaiSiemRequestHeaders , dependendo do formato do registro. Adicionado a additional.fields com a chave "AkamaiSiemRequestHeaders". |
httpMessage.responseHeaders , AkamaiSiemResponseHeaders |
additional.fields |
Cabeçalhos de resposta. Extraídos de httpMessage.responseHeaders ou AkamaiSiemResponseHeaders , dependendo do formato do registro. Adicionado a additional.fields com a chave "AkamaiSiemResponseHeaders". |
httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code , statusCode |
network.http.response_code |
Código de resposta HTTP. Extraídos de httpMessage.status ou AkamaiSiemResponseStatus ou network_http_response_code ou statusCode , dependendo do formato do registro. |
httpMessage.tls , AkamaiSiemTLSVersion , tlsVersion |
network.tls.version |
Versão do TLS. Extraídos de httpMessage.tls , AkamaiSiemTLSVersion ou tlsVersion , dependendo do formato do registro. |
httpMessage.useragent , network_http_user_agent , UA , useragent |
network.http.user_agent |
User agent. Extraídos de httpMessage.useragent ou network_http_user_agent ou UA ou useragent , dependendo do formato do registro. |
log_description |
metadata.description |
Descrição do registro. Extraídos de log_description . |
log_rule |
security_result.rule_name |
Regra de registro. Extraídos de log_rule . |
message |
N/A | A mensagem de registro bruta. Usado pelo analisador para várias extrações. |
network_http_referral_url |
network.http.referral_url |
URL de referência HTTP. Extraídos de network_http_referral_url . |
proto |
N/A | Usado na lógica do analisador para preencher security_result.summary se attackData.policyId não estiver presente. |
reqHost |
target.hostname , target.asset.hostname |
Solicitar host. Extraídos de reqHost . |
reqId |
metadata.product_log_id , network.session_id |
ID da solicitação. Extraídos de reqId . |
reqMethod |
network.http.method |
Método da solicitação. Extraídos de reqMethod . |
reqPath |
target.url |
Caminho da solicitação. Extraídos de reqPath . |
reqPort |
target.port |
Solicitar porta. Extraídos de reqPort . |
rspContentType |
target.file.mime_type |
Tipo de conteúdo da resposta. Extraídos de rspContentType . |
securityRules |
security_result.rule_name , security_result.about.resource.attribute.labels |
Regras de segurança. Extraídos de securityRules . A primeira parte é mapeada para rule_name , e o restante é adicionado como rótulos com as chaves "non_deny_rules" e "deny_rule_format". |
statusCode |
network.http.response_code |
Código de status. Extraídos de statusCode . |
state |
principal.location.state , target.user.personal_address.state |
Estado. Extraídos de state . |
tlsVersion |
network.tls.version |
Versão do TLS. Extraídos de tlsVersion . |
type |
metadata.product_event_type |
Tipo de evento. Extraídos de type . |
UA |
network.http.user_agent |
User agent. Extraídos de UA . |
version |
metadata.product_version , principal.asset.software.version |
Versão. Extraídos de version . |
N/A | metadata.event_timestamp |
O carimbo de data/hora do evento é derivado do campo _ts nos registros akamai_lds, do campo httpMessage.start nos registros akamai_siem ou do campo log_date em outros formatos. |
N/A | metadata.vendor_name |
Fixado em "Akamai". |
N/A | metadata.product_name |
Fixado em "Kona". |
N/A | metadata.log_type |
Fixado em "AKAMAI_WAF". |
N/A | network.application_protocol |
Defina como "HTTP" para logs akamai_siem e akamai_lds ou "DNS" para outros formatos. |
N/A | security_result.severity |
Defina como MÉDIO para a ação "alertar", CRITICAL para a ação "negar" e ALTO para outras ações. |
N/A | event.idm.read_only_udm.metadata.event_type |
Defina como "NETWORK_HTTP" para a maioria dos formatos de registro, "GENERIC_EVENT" para eventos com campos eventId ou eventData ou "STATUS_UPDATE" para eventos com cli_ip ou p_ip , mas sem reqHost . |
Alterações
2024-05-21
- Melhoria
- "rules.data" foi associado a "security_result.detection_fields".
- "rules.action", "rules.selector" e "rules.version" foram mapeados para "security_result.action_details".
- "rules.id" foi associado a "security_result.rule_id",
- "rules.tag" foi associado a "security_result.category_details".
- "rules.message" foi associado a "security_result.threat_name".
2024-03-01
- Melhoria
- "attackData.configId" foi associado a "metadata.product_log_id" e "security_result.detection_fields".
2023-10-27
- Melhoria
- "rule.id" foi associado a "security_result.rule_id".
- Quando "httpMessage.host" não está presente, o valor definido em "metadata.event_type" foi alterado de "NETWORK_HTTP" para "GENERIC_EVENT".
- Foi adicionado suporte para analisar "attackData" quando "attackData.rules" é uma matriz.
2023-04-24
- Melhoria
- Registros analisados ingeridos no formato CEF.
2023-04-04
- Melhoria
- O mapeamento de "reqHost" para "target.hostname" foi feito.
- Mapeou "reqPort" para "target.port".
- O "reqPath" foi mapeado para "target.url".
- Mapeou "reqId" para "network.session_id".
- O "statusCode" foi mapeado para "network.http.response_code".
- O "reqMethod" foi mapeado para "network.http.method".
- O "UA" foi mapeado para "network.http.user_agent".
- "bytes" foi mapeado para "network.sent_bytes".
- O "reqMethod" foi mapeado para "network.http.method".
- Registros de falha analisados no formato syslog.
- Foram adicionadas verificações de condição para "attackData.rules" para análise adequada.
- O valor de "metadata.event_type" foi modificado de "STATUS_UPDATE" para "NETWORK_HTTP" sempre que possível.
2022-08-12
- Melhoria
- "security_policy_id" foi associado a security_result.rule_name.
- "non_deny_rules" foi mapeado para security_result.about.resource.attribute.labels.
- "deny_rule_format" foi associado a security_result.about.resource.attribute.labels.
2022-11-07
- Melhoria
- Atualização das SecurityRules para verificar ["-"] também nos dados.
2022-06-14
- Melhoria
- Mapeou "security_rules" para "security_result.rule_name".
- Cidade mapeada para principal.local.cidade.
- País mapeado para principal.location.country_or_region.
- O cli_ip foi associado a principal.ip.
- Estado mapeado para target.user.personal_address.state.
- Versão mapeada para metadata.product_version.
- O user agent foi mapeado para network.http.user_agent.
2022-06-14
- Enhancement-
- O proto foi mapeado para security_result.summary.
- securityRules foi mapeado para security_result.rule_name.
- Cidade mapeada para principal.local.cidade.
- País mapeado para principal.location.country_or_region.
- O cliIP foi mapeado para principal.ip.
- O cp foi mapeado para event.idm.read_only_udm.additional.fields.
- Mapeou reqId para metadata.product_log_id.
- O rspContentType foi mapeado para target.file.mime_type.
- Estado mapeado para target.user.personal_address.state.
- Versão mapeada para principal.asset.software.version.
2022-03-23
- Correção de bugs: correção da falha ao analisar dados com todos os padrões de correspondência.
- Mapeamentos adicionados para novos campos.
- eventId mapeado para metadata.product_log_id.
- eventDefinitionId mapeado para target.resource.product_object_id.
- eventDescription mapeado para metadata.description.
- eventName mapeado para metadata.product_event_type.
- eventTypeName mapeado para additional.fields.
- eventTypeId mapeado para additional.fields.
- eventData mapeado para additional.fields.