Recolha registos do CMS WordPress

Compatível com:

Vista geral

Este analisador sintático extrai registos do CMS WordPress de mensagens formatadas em JSON ou texto simples. Processa registos formatados em JSON e não JSON, analisando os campos relevantes e mapeando-os para o UDM, incluindo detalhes do utilizador, informações de rede, atributos de recursos e detalhes dos resultados de segurança. O analisador também realiza várias transformações de dados, como a conversão de tipos de dados, a união de campos e o processamento de padrões de registo específicos para o Kubernetes e outros recursos.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps.
  • Acesso privilegiado a um Website do WordPress.
  • Plugin que ativa a funcionalidade de webhook (por exemplo, WP Webhooks).

Configure feeds

Para configurar um feed, siga estes passos:

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na página seguinte, clique em Configurar um único feed.
  4. No campo Nome do feed, introduza um nome para o feed; por exemplo, Registos do CMS Wordpress.
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione Wordpress como o Tipo de registo.
  7. Clicar em Seguinte.
  8. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registo, como \n.
  9. Clicar em Seguinte.
  10. Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
  11. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
  12. Copie e armazene a chave secreta. Não pode ver esta chave secreta novamente. Se necessário, pode regenerar uma nova chave secreta, mas esta ação torna a chave secreta anterior obsoleta.
  13. No separador Detalhes, copie o URL do ponto final do feed do campo Informações do ponto final. Tem de especificar este URL do ponto final na sua aplicação cliente.
  14. Clique em Concluído.

Crie uma chave da API para o feed de webhook

  1. Aceda à Google Cloud consola > Credenciais.

    Aceder a Credenciais

  2. Clique em Criar credenciais e, de seguida, selecione Chave de API.

  3. Restrinja o acesso da chave de API à API Google Security Operations.

Especifique o URL do ponto final

  1. Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
  2. Ative a autenticação especificando a chave da API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recomendação: especifique a chave da API como um cabeçalho em vez de a especificar no URL. Se o seu cliente de webhook não suportar cabeçalhos personalizados, pode especificar a chave da API e a chave secreta através de parâmetros de consulta no seguinte formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Substitua o seguinte:

  • ENDPOINT_URL: o URL do ponto final do feed.
  • API_KEY: a chave da API para autenticar no Google Security Operations.
  • SECRET: a chave secreta que gerou para autenticar o feed.

Configure o webhook do WordPress

  1. Instale e ative o plugin WP Webhooks (ou o plugin de webhook escolhido) através do diretório de plugins do WordPress.
  2. Aceda ao submenu WP Webhooks no menu de administrador do WordPress, normalmente localizado em definições.
  3. Clique em Enviar dados no menu da barra superior.
  4. Selecione a ação do WordPress que vai acionar o webhook. Os exemplos comuns incluem publish_post (quando é publicado um novo post), user_register (quando um novo utilizador se regista) ou comment_post (quando é publicado um novo comentário). Isto depende dos dados que selecionar e enviar para o Google SecOps.
  5. Clique em Adicionar URL do webhook.
  6. Configure o webhook:
    • Nome: atribua um nome descritivo ao webhook (por exemplo, Feed do Google SecOps).
    • URL do webhook: cole o URL do ponto final do Google SecOps.
  7. Clique em Guardar webhook.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
ClientIP principal.ip O endereço IP do cliente é extraído do campo ClientIP no registo não processado.
Code target.resource.attribute.labels.key O valor "Code" é atribuído como uma chave no objeto target.resource.attribute.labels.
Code target.resource.attribute.labels.value O valor do campo Code do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
CurrentUserID target.user.userid O valor CurrentUserID do registo não processado é convertido numa string e mapeado para o campo target.user.userid.
EditUserLink target.url O EditUserLink do registo não processado é mapeado para o campo target.url.
EventType metadata.product_event_type O EventType do registo não processado é mapeado para o campo metadata.product_event_type.
FirstName target.user.first_name O FirstName do registo não processado é mapeado para o campo target.user.first_name.
insertId metadata.product_log_id O insertId do registo não processado é mapeado para o campo metadata.product_log_id.
labels.compute.googleapis.com/resource_name additional.fields.key O valor "Nome do recurso" é atribuído como uma chave no objeto additional.fields.
labels.compute.googleapis.com/resource_name additional.fields.value.string_value O valor de labels.compute.googleapis.com/resource_name do registo não processado é atribuído como um valor de string no objeto additional.fields.
labels.k8s-pod/app_kubernetes_io/instance target.resource.attribute.labels.key O valor "Kubernetes IO Instance" é atribuído como uma chave no objeto target.resource.attribute.labels.
labels.k8s-pod/app_kubernetes_io/instance target.resource.attribute.labels.value O valor de labels.k8s-pod/app_kubernetes_io/instance do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
labels.k8s-pod/app_kubernetes_io/managed-by target.resource.attribute.labels.key O valor "Kubernetes IO Instance Manager" é atribuído como uma chave no objeto target.resource.attribute.labels.
labels.k8s-pod/app_kubernetes_io/managed-by target.resource.attribute.labels.value O valor de labels.k8s-pod/app_kubernetes_io/managed-by do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
labels.k8s-pod/app_kubernetes_io/name target.resource.attribute.labels.key O valor "Kubernetes IO Instance Name" é atribuído como uma chave no objeto target.resource.attribute.labels.
labels.k8s-pod/app_kubernetes_io/name target.resource.attribute.labels.value O valor de labels.k8s-pod/app_kubernetes_io/name do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
labels.k8s-pod/controller-revision-hash target.resource.attribute.labels.key O valor "Controller Revision Hash" é atribuído como uma chave no objeto target.resource.attribute.labels.
labels.k8s-pod/controller-revision-hash target.resource.attribute.labels.value O valor de labels.k8s-pod/controller-revision-hash do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
labels.k8s-pod/helm_sh/chart target.resource.attribute.labels.key O valor "Kubernetes IO Instance Manager SH" é atribuído como uma chave no objeto target.resource.attribute.labels.
labels.k8s-pod/helm_sh/chart target.resource.attribute.labels.value O valor de labels.k8s-pod/helm_sh/chart do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
labels.k8s-pod/k8s-app target.resource.attribute.labels.key O valor "Application" é atribuído como uma chave no objeto target.resource.attribute.labels.
labels.k8s-pod/k8s-app target.resource.attribute.labels.value O valor de labels.k8s-pod/k8s-app do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
labels.k8s-pod/pod-template-generation target.resource.attribute.labels.key O valor "Pod Template Generation" é atribuído como uma chave no objeto target.resource.attribute.labels.
labels.k8s-pod/pod-template-generation target.resource.attribute.labels.value O valor de labels.k8s-pod/pod-template-generation do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
labels.k8s-pod/pod-template-hash target.resource.attribute.labels.key O valor "Pod Template Hash" é atribuído como uma chave no objeto target.resource.attribute.labels.
labels.k8s-pod/pod-template-hash target.resource.attribute.labels.value O valor de labels.k8s-pod/pod-template-hash do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
LastName target.user.last_name O LastName do registo não processado é mapeado para o campo target.user.last_name.
logName target.resource.attribute.labels.key O valor "Log Name" é atribuído como uma chave no objeto target.resource.attribute.labels.
logName target.resource.attribute.labels.value O valor do campo logName do registo não processado é atribuído como um valor no objeto target.resource.attribute.labels.
receiveTimestamp metadata.event_timestamp O receiveTimestamp do registo não processado é analisado e mapeado para o campo metadata.event_timestamp.
resource.labels.cluster_name additional.fields.key O valor "Cluster Name" é atribuído como uma chave no objeto additional.fields.
resource.labels.cluster_name additional.fields.value.string_value O valor de resource.labels.cluster_name do registo não processado é atribuído como um valor de string no objeto additional.fields.
resource.labels.cluster_name target.resource.resource_type Se resource.labels.cluster_name estiver presente, o valor "CLUSTER" é atribuído a target.resource.resource_type.
resource.labels.container_name metadata.product_event_type Se resource.type for "k8s_container", o valor de resource.labels.container_name juntamente com resource.labels.namespace_name é usado para construir o metadata.product_event_type.
resource.labels.container_name target.resource.name O valor de resource.labels.container_name do registo não processado é atribuído ao campo target.resource.name.
resource.labels.location target.location.country_or_region O valor de resource.labels.location do registo não processado é atribuído ao campo target.location.country_or_region.
resource.labels.namespace_name additional.fields.key O valor "Nome do espaço de nomes" é atribuído como uma chave no objeto additional.fields.
resource.labels.namespace_name additional.fields.value.string_value O valor de resource.labels.namespace_name do registo não processado é atribuído como um valor de string no objeto additional.fields.
resource.labels.namespace_name metadata.product_event_type Se resource.type for "k8s_container", o valor de resource.labels.namespace_name juntamente com resource.labels.container_name é usado para construir o metadata.product_event_type.
resource.labels.node_name metadata.product_event_type Se resource.type for "k8s_node", o valor de resource.labels.node_name é usado para construir o metadata.product_event_type.
resource.labels.pod_name additional.fields.key O valor "Pod Name" é atribuído como uma chave no objeto additional.fields.
resource.labels.pod_name additional.fields.value.string_value O valor de resource.labels.pod_name do registo não processado é atribuído como um valor de string no objeto additional.fields.
resource.labels.project_id additional.fields.key O valor "Project Id" é atribuído como uma chave no objeto additional.fields.
resource.labels.project_id additional.fields.value.string_value O valor de resource.labels.project_id do registo não processado é atribuído como um valor de string no objeto additional.fields.
resource.type target.resource.resource_subtype O valor de resource.type do registo não processado é atribuído ao campo target.resource.resource_subtype.
Roles target.user.user_role O campo Roles do registo não processado é convertido em letras maiúsculas e mapeado para o campo target.user.user_role.
SessionID network.session_id O SessionID do registo não processado é mapeado para o campo network.session_id.
sev security_result.severity O valor do campo sev determina o valor de security_result.severity. "INFO" ou "NOTICE" é mapeado para "INFORMATIONAL", "WARN" é mapeado para "MEDIUM" e "ERR" é mapeado para "ERROR".
TargetUsername target.user.user_display_name O TargetUsername do registo não processado é mapeado para o campo target.user.user_display_name.
textPayload metadata.description Se resource.type for "k8s_node", o valor de textPayload é mapeado para o campo metadata.description.
textPayload network.application_protocol O protocolo (por exemplo, HTTP) é extraído do campo textPayload através de padrões grok.
textPayload network.http.method O método HTTP (por exemplo, GET, POST) é extraído do campo textPayload através de padrões grok.
textPayload network.http.referral_url O URL é extraído do campo textPayload através de padrões grok.
textPayload network.http.response_code O código de resposta HTTP é extraído do campo textPayload através de padrões grok e convertido num número inteiro.
textPayload network.received_bytes Os bytes recebidos são extraídos do campo textPayload através de padrões grok e convertidos num número inteiro não assinado.
textPayload principal.ip O endereço IP de origem é extraído do campo textPayload através de padrões grok.
textPayload security_result.description A descrição é extraída do campo textPayload através de padrões grok.
textPayload target.file.full_path O caminho é extraído do campo textPayload através de padrões grok.
UserAgent network.http.user_agent O UserAgent do registo não processado é mapeado para o campo network.http.user_agent. O valor "USER_RESOURCE_ACCESS" está atribuído a metadata.event_type.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.