Coletar registros do Atlassian Jira
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
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Atlassian Jira Logs).
- Selecione Webhook como o Tipo de origem.
- Selecione Atlassian Jira como o Tipo de registro.
- Clique em Próxima.
- 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.
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
- 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.
- 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.
- Clique em Concluído.
Criar uma chave de API para o feed de webhook
Acesse o console do Google Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especificar o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
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
- Acesse sua instância do Jira como administrador.
- Acesse Configurações configurações > Sistema > WebHooks.
- Clique em Criar um WebHook.
- 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.
- 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".