Coletar registros do Atlassian Jira

Compatível com:

Visão geral

Esse analisador processa os registros do Atlassian Jira nos formatos SYSLOG e JSON. Primeiro, ele tenta analisar a mensagem como JSON. Se isso falhar, ele vai usar padrões grok para analisar mensagens formatadas em SYSLOG, extraindo vários campos, como endereços IP, nomes de usuário, métodos HTTP e códigos de resposta antes de mapeá-los para o UDM. O analisador também processa eventos de auditoria específicos do Jira, incluindo sucessos e falhas de login, e mapeia campos relevantes para atributos de resultados de segurança no UDM.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado ao Atlassian Jira.

Configurar um feed no Google SecOps para processar os registros do Atlassian Jira

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Atlassian Jira Logs).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione Atlassian Jira como o Tipo de registro.
  6. Clique em Próxima.
  7. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registro, como \n.
    • Namespace de recursos: o namespace de recursos.
    • Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
  8. Clique em Próxima.
  9. Revise a configuração do feed na tela Finalizar e clique em Enviar.
  10. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
  11. Copie e armazene a chave secreta. Não é possível acessar essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas essa ação torna a chave secreta anterior obsoleta.
  12. Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
  13. Clique em Concluído.

Criar uma chave de API para o feed de webhook

  1. Acesse o console do Google Cloud > Credenciais.

    Ir para Credenciais

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

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

Especificar o URL do endpoint

  1. No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
  2. Ative a autenticação especificando a chave de 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 de API como um cabeçalho em vez de especificar no URL. Se o cliente do webhook não tiver suporte a cabeçalhos personalizados, especifique a chave de API e a chave secreta usando parâmetros de consulta no seguinte formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Substitua:

  • ENDPOINT_URL: o URL do endpoint do feed.
  • API_KEY: a chave de API para autenticação no Google Security Operations.
  • SECRET: a chave secreta gerada para autenticar o feed.

Criar um webhook no Atlassian Jira para o Google SecOps

  1. Acesse sua instância do Jira como administrador.
  2. Acesse Configurações configurações > Sistema > WebHooks.
  3. Clique em Criar um WebHook.
  4. Configure os seguintes detalhes do webhook:
    • Nome: informe um nome descritivo para o webhook. Por exemplo, Integração do Google SecOps.
    • URL: insira o URL do endpoint de API Google SecOps.
    • Eventos: selecione os eventos do Jira que vão acionar o webhook. Escolha os eventos relevantes para suas necessidades de monitoramento de segurança (por exemplo, problema criado, problema atualizado, comentário adicionado). Se necessário, selecione Todos os eventos.
    • Opcional: Filtro JQL: use um filtro JQL para refinar ainda mais quais eventos acionam o webhook. Isso é útil para se concentrar em projetos específicos, tipos de problemas ou outros critérios.
    • Excluir corpo: deixe essa opção desmarcada. O webhook precisa enviar os dados do evento para o Google SecOps no formato JSON.
  5. Clique em Criar para salvar a configuração do webhook.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
affectedObjects.id target.resource.attribute.labels.value O campo id em cada objeto da matriz affectedObjects é mapeado para um rótulo com a chave "ID_[index]", em que [index] é a posição do objeto na matriz.
affectedObjects.name target.resource.attribute.labels.value O campo name em cada objeto da matriz affectedObjects é mapeado para um rótulo com a chave "Name_[index]", em que [index] é a posição do objeto na matriz.
affectedObjects.type target.resource.attribute.labels.value O campo type em cada objeto da matriz affectedObjects é mapeado para um rótulo com a chave "Type_[index]", em que [index] é a posição do objeto na matriz.
associatedItems.0.id target.user.userid Se associatedItems.0.typeName for "USER", esse campo será associado a target.user.userid. Caso contrário, ele será associado a um rótulo com a chave "associatedItems Id" em security_result.detection_fields.
associatedItems.0.name target.user.user_display_name Se associatedItems.0.typeName for "USER", esse campo será associado a target.user.user_display_name. Caso contrário, ele será associado a um rótulo com a chave "associatedItems Name" em security_result.detection_fields.
associatedItems.0.parentId target.process.parent_process.pid Se associatedItems.0.typeName for "USER", esse campo será associado a target.process.parent_process.pid.
associatedItems.0.parentName target.resource.parent Se associatedItems.0.typeName for "USER", esse campo será associado a target.resource.parent.
associatedItems.0.typeName security_result.detection_fields.value Mapeado para um rótulo com a chave "associatedItems TypeName" em security_result.detection_fields.
author.id principal.user.userid Mapeado para principal.user.userid.
author.name principal.user.user_display_name Mapeado para principal.user.user_display_name.
author.type principal.resource.attribute.labels.value Mapeado para um rótulo com a chave "Author Type" em principal.resource.attribute.labels.
author.uri principal.url Mapeado para principal.url.
authorAccountId principal.user.userid Mapeado para principal.user.userid.
authorKey target.resource.attribute.labels.value Mapeado para um rótulo com a chave "Chave do autor" em target.resource.attribute.labels.
auditType.action security_result.summary Mapeado para security_result.summary. Também é usado para derivar security_result.action e metadata.event_type (USER_LOGIN se a ação contém "login", ALLOW se "successful", BLOCK se "failed").
auditType.area metadata.product_event_type Mapeado para metadata.product_event_type.
auditType.category security_result.category_details Mapeado para security_result.category_details.
category metadata.product_event_type Mapeado para metadata.product_event_type.
changedValues.changedFrom security_result.about.resource.attribute.labels.value Mapeado para um rótulo com a chave "Changed From" em security_result.about.resource.attribute.labels.
changedValues.changedTo security_result.about.resource.attribute.labels.value Mapeado para um rótulo com a chave "Changed To" em security_result.about.resource.attribute.labels.
changedValues.fieldName security_result.about.resource.attribute.labels.value Mapeado para um rótulo com a chave "FieldName" em security_result.about.resource.attribute.labels.
changedValues.i18nKey security_result.about.resource.attribute.labels.value Mapeado para um rótulo com a chave "FieldName" em security_result.about.resource.attribute.labels.
changedValues.key security_result.about.resource.attribute.labels.value Mapeado para um rótulo com a chave "Changed From" em security_result.about.resource.attribute.labels.
changedValues.to security_result.about.resource.attribute.labels.value Mapeado para um rótulo com a chave "Changed To" em security_result.about.resource.attribute.labels.
created metadata.event_timestamp Analisado e mapeado para metadata.event_timestamp.
dst_ip target.ip Mapeado para target.ip.
extraAttributes.name principal.resource.attribute.labels.value Mapeado para um rótulo com a chave "Name" em principal.resource.attribute.labels.
extraAttributes.value principal.resource.attribute.labels.value Mapeado para um rótulo com a chave "Value" em principal.resource.attribute.labels.
http_method network.http.method Mapeado para network.http.method.
http_referral_url network.http.referral_url Mapeado para network.http.referral_url.
id metadata.product_log_id Mapeado para metadata.product_log_id.
objectItem.id security_result.detection_fields.value Mapeado para um rótulo com a chave "objectItem Id" em security_result.detection_fields.
objectItem.name security_result.detection_fields.value Mapeado para um rótulo com a chave "objectItem Name" em security_result.detection_fields.
objectItem.typeName security_result.detection_fields.value Mapeado para um rótulo com a chave "objectItem TypeName" em security_result.detection_fields.
path principal.url Se não for "-" ou "/status", será mapeado para principal.url.
protocol network.ip_protocol Se for "HTTP", será mapeado para network.ip_protocol.
remoteAddress principal.ip Mapeado para principal.ip.
response_code network.http.response_code Mapeado para network.http.response_code.
sent_bytes network.sent_bytes Mapeado para network.sent_bytes.
source principal.ip Analisado para extrair endereços IP e mesclar em principal.ip.
src_ip1, src_ip2, src_ip3 principal.ip Mapeado para principal.ip.
summary metadata.description Mapeado para metadata.description.
user_agent network.http.user_agent Mapeado para network.http.user_agent.
user_name principal.user.userid Mapeado para principal.user.userid. Defina como "MACHINE" se auditType.action contiver "login". Derivado de date_time se estiver analisando o syslog ou created se estiver analisando JSON. Se timestamp estiver disponível no JSON, ele será usado em vez de created. Se nenhum deles estiver presente, o create_time do lote será usado. Derivado com base na presença de outros campos: NETWORK_HTTP se dst_ip estiver presente, USER_UNCATEGORIZED se user_name ou (associatedItems.0.typeName for "USER" e associatedItems.0.id estiver presente) estiver presente, STATUS_UPDATE se src_ip1, src_ip2, src_ip3 ou remoteAddress estiver presente ou GENERIC_EVENT, caso contrário. Substituído por USER_LOGIN se auditType.action contiver "login". Sempre definido como "ATLASSIAN_JIRA". Sempre definido como "ATLASSIAN_JIRA". Defina como "PERMITIR" se auditType.action contiver "login bem-sucedido" ou "BLOQUEAR" se auditType.action contiver "falha de login".

Alterações

2023-12-12

  • Foi adicionado suporte para mapear vários endereços IP de "source" para "principal.ip".

2023-11-10

  • Um novo padrão Grok foi adicionado para analisar registros JSON com falhas.
  • "affectedObjects" foi mapeado para "target.resource.attribute.labels".
  • O "changedValues" foi mapeado para "security_result.about.resource.attribute.labels".
  • Mapeamos "extraAttributes" para "principal.resource.attribute.labels".
  • Mapeou "source" para "principal.ip".
  • Mapeou "author.id", "author.name", "author.uri", "author.type", "auditType.area", "auditType.category" e "auditType.action" para "principal.user.userid", "principal.user.user_display_name", "principal.url", "principal.resource.attribute.labels", "metadata.product_event_type", "security_result.category_details" e "security_result.summary", respectivamente.

2023-02-09

  • Foi adicionado um bloco "json" para recuperar os dados JSON.

2023-01-10

  • Melhoria: adição de suporte a registros no formato JSON.
  • "authorAccountId" foi associado a "principal.user.userid".
  • O "id" foi mapeado para "metadata.product_log_id".
  • "remoteAddress" foi mapeado para "principal.ip".
  • O "summary" foi mapeado para "metadata.description".
  • "category" foi mapeado para "metadata.product_event_type".
  • "authorKey" foi associado a "target.resource.attribute.labels".
  • "objectItem.id", "objectItem.name" e "objectItem.typeName" foram mapeados para "security_result.detection_fields".
  • Mapeamos "associatedItems.0.id" para "target.user.userid" quando "associatedItems.0.typeName" é "USER".
  • "associatedItems.0.name" foi mapeado para "target.user.user_display_name" quando "associatedItems.0.typeName" é "USER".
  • "associatedItems.0.parentId" foi associado a "target.process.parent_process.pid" quando "associatedItems.0.typeName" é "USER".
  • Mapeamos "associatedItems.0.parentName" para "target.resource.parent" quando "associatedItems.0.typeName" é "USER".
  • "associatedItems.0.id" e "associatedItems.0.name" foram mapeados para "security_result.detection_fields" quando "associatedItems.0.typeName" não é "USER".
  • "associatedItems.0.typeName" foi mapeado para "security_result.detection_fields".
  • Mapeou "changedValues.fieldName", "changedValues.changedFrom" e ""changedValues.changedTo" para "security_result.about.resource.attribute.labels".
  • "STATUS_UPDATE" foi mapeado para "metadata.event_type" se "remoteAddress" estiver presente.
  • "USER_UNCATEGORIZED" foi mapeado para "metadata.event_type" se "authorAccountId" estiver presente ou "associatedItems.0.typeName" for "USER" e "associatedItems.0.id" estiver presente.

31-05-2022

  • Correção de bugs: foi adicionada uma condição para verificar o mapeamento incorreto de principal.url se o valor do URL nos registros tiver "/status".