Coletar registros de auditoria do GitHub

Compatível com:

Visão geral

Esse analisador processa os registros de auditoria do GitHub no formato JSON. Ele limpa a entrada removendo vários campos, realiza várias operações de grok e de chave-valor com base no campo process_type para extrair informações relevantes, mapeia os campos extraídos para a UDM e estrutura a saída para a ingestão do Google SecOps. Ele também lida com casos extremos específicos e realiza transformações de dados para diferentes subtipos de registro nos registros de auditoria do GitHub.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado aos repositórios do GitHub.

Configurar um feed no Google SecOps para processar os registros do GitHub

  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, Logs do GitHub).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione GitHub 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 GitHub

Este guia apresenta instruções detalhadas para criar um webhook no GitHub e enviar dados ao Google SecOps.

  1. Acesse seu repositório do GitHub.
  2. Acesse Configurações.
  3. Clique em Webhooks.
  4. Clique em Add webhook.
  5. No campo URL do payload, insira o URL do endpoint de API Google SecOps.
  6. Selecione application/json como o tipo de conteúdo.

    Opcional: para aumentar a segurança, defina um secret. Isso gera uma assinatura para payloads de webhook, permitindo que você verifique a autenticidade deles no Google SecOps. Se você usar um secret, configure-o também no seu feed do Google SecOps.

  7. Escolha os eventos que acionam o webhook. Para um registro abrangente, selecione Deixe-me selecionar eventos individuais e marque os eventos relevantes (por exemplo, Push, Pedido de pull, Issue). Se você não tiver certeza, comece com Somente o evento push.

  8. Verifique se a caixa de seleção Active está marcada.

  9. Clique em Adicionar webhook para salvar a configuração.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
_document_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O _document_id do registro bruto é mapeado para um par de chave-valor na matriz additional.fields no UDM.
action read_only_udm.metadata.product_event_type, read_only_udm.security_result.summary O campo action é mapeado para product_event_type nos metadados e summary no security_result.
actor read_only_udm.principal.user.userid O campo actor, que representa o usuário que executa a ação, é mapeado para principal.user.userid.
actor_id read_only_udm.principal.user.attribute.labels.[].key, read_only_udm.principal.user.attribute.labels.[].value O actor_id é mapeado como um rótulo na matriz principal.user.attribute.labels.
actor_ip read_only_udm.principal.ip O endereço IP do usuário é mapeado para principal.ip.
actor_location.country_code read_only_udm.principal.location.country_or_region O código de país do ator é mapeado para principal.location.country_or_region.
application_name read_only_udm.target.application O nome do aplicativo é mapeado para target.application.
business read_only_udm.target.user.company_name, read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O nome da empresa é associado a target.user.company_name e como um par de chave-valor em additional.fields.
business_id read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value O ID da empresa é mapeado como um rótulo dentro do array target.resource.attribute.labels.
config.url read_only_udm.target.url O URL de configuração é mapeado para target.url.
created_at read_only_udm.metadata.event_timestamp O carimbo de data/hora created_at é convertido para o formato apropriado e mapeado para metadata.event_timestamp.
data.cancelled_at read_only_udm.extensions.vulns.vulnerabilities.scan_end_time O carimbo de data/hora data.cancelled_at é convertido e mapeado para extensions.vulns.vulnerabilities.scan_end_time.
data.email read_only_udm.target.email O endereço de e-mail do campo de dados é mapeado para target.email.
data.event read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value O evento do campo de dados é mapeado como um rótulo na matriz security_result.about.labels.
data.events read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value Os eventos do campo de dados são mapeados como rótulos na matriz security_result.about.labels.
data.head_branch read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value O ramo principal do campo de dados é mapeado como um rótulo na matriz security_result.about.labels.
data.head_sha read_only_udm.target.file.sha256 O cabeçalho SHA do campo de dados é mapeado para target.file.sha256.
data.hook_id read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value O ID do gancho do campo de dados é mapeado como um rótulo na matriz target.resource.attribute.labels.
data.started_at read_only_udm.extensions.vulns.vulnerabilities.scan_start_time O carimbo de data/hora data.started_at é convertido e mapeado para extensions.vulns.vulnerabilities.scan_start_time.
data.team read_only_udm.target.user.group_identifiers A equipe do campo de dados é mapeada para target.user.group_identifiers.
data.trigger_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value O ID do acionador do campo de dados é mapeado como um rótulo na matriz security_result.about.labels.
data.workflow_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value O ID do fluxo de trabalho do campo de dados é mapeado como um rótulo no array security_result.about.labels.
data.workflow_run_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value O ID da execução do fluxo de trabalho do campo de dados é mapeado como um rótulo na matriz security_result.about.labels.
enterprise.name read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O nome da empresa é mapeado como um par de chave-valor em additional.fields.
external_identity_nameid read_only_udm.target.user.userid, read_only_udm.target.user.email_addresses Se o external_identity_nameid for um endereço de e-mail, a parte do nome de usuário será extraída e mapeada para target.user.userid, e o e-mail completo será adicionado a target.user.email_addresses. Caso contrário, o valor inteiro será mapeado para target.user.userid.
external_identity_username read_only_udm.target.user.user_display_name O nome de usuário da identidade externa é mapeado para target.user.user_display_name.
hashed_token read_only_udm.network.session_id O token com hash é mapeado para network.session_id.
org read_only_udm.target.administrative_domain A organização é mapeada para target.administrative_domain.
org_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O ID da organização é mapeado como um par de chave-valor em additional.fields.
programmatic_access_type read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O tipo de acesso programático é mapeado como um par de chave-valor em additional.fields.
public_repo read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value, read_only_udm.target.location.name O valor public_repo determina o valor mapeado para um par de chave-valor em additional.fields e target.location.name. "false" é mapeado para "PARTICULAR", e outros valores são mapeados para "PÚBLICO".
query_string read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value A string de consulta é mapeada como um par de chave-valor em additional.fields.
rate_limit_remaining read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O limite de taxa restante é mapeado como um par de chave-valor em additional.fields.
repo read_only_udm.target.resource.name O repositório é mapeado para target.resource.name.
repo_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O ID do repositório é mapeado como um par de chave-valor em additional.fields.
repository_public read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value A flag pública do repositório é mapeada como um par de chave-valor em additional.fields.
request_body read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O corpo da solicitação é mapeado como um par de chave-valor em additional.fields.
request_method read_only_udm.network.http.method O método de solicitação é convertido em letras maiúsculas e mapeado para network.http.method.
route read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O caminho é mapeado como um par de chave-valor em additional.fields.
status_code read_only_udm.network.http.response_code O código de status é convertido em um número inteiro e mapeado para network.http.response_code.
token_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O ID do token é mapeado como um par de chave-valor em additional.fields.
token_scopes read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Os escopos do token são mapeados como um par de chave-valor em additional.fields.
transport_protocol_name read_only_udm.network.application_protocol O nome do protocolo de transporte é convertido em letras maiúsculas e mapeado para network.application_protocol.
url_path read_only_udm.target.url O caminho do URL é mapeado para target.url.
user read_only_udm.target.user.user_display_name O usuário é mapeado para target.user.user_display_name.
user_agent read_only_udm.network.http.user_agent, read_only_udm.network.http.parsed_user_agent O user agent é mapeado para network.http.user_agent, e a versão analisada é mapeada para network.http.parsed_user_agent.
user_id read_only_udm.target.user.userid O ID do usuário é mapeado para target.user.userid.
workflow.name read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value O nome do fluxo de trabalho é mapeado como um rótulo na matriz security_result.about.labels.
workflow_run.event read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value O evento de execução do fluxo de trabalho é mapeado como um par de chave-valor em additional.fields.
workflow_run.head_branch read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value O ramo principal da execução do fluxo de trabalho é mapeado como um rótulo na matriz security_result.about.labels.
workflow_run.head_sha read_only_udm.target.file.sha256 O SHA da execução do cabeçalho do fluxo de trabalho é mapeado para target.file.sha256.
workflow_run.id read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value O ID da execução do fluxo de trabalho é mapeado como um rótulo na matriz target.resource.attribute.labels.
workflow_run.workflow_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value O ID da execução do fluxo de trabalho é mapeado como um rótulo no array security_result.about.labels.
(Parser Logic) read_only_udm.metadata.event_type O tipo de evento é determinado pelo analisador com base na presença e nos valores de outros campos, como data.team, action e actor. O padrão é USER_RESOURCE_ACCESS se nenhuma outra condição específica for atendida.
(Parser Logic) read_only_udm.metadata.log_type O tipo de registro é codificado como "GITHUB".
(Parser Logic) read_only_udm.metadata.product_name O nome do produto está fixado em "GITHUB".
(Parser Logic) read_only_udm.metadata.vendor_name O nome do fornecedor está fixado em "GITHUB".
(Parser Logic) read_only_udm.target.resource.resource_type O tipo de recurso é definido como STORAGE_OBJECT quando o campo repo está presente.
(Parser Logic) read_only_udm.target.resource.type O tipo de recurso é derivado do campo action.
(Parser Logic) read_only_udm.security_result.action A ação de segurança (ALLOW/BLOCK) é derivada dos campos at ou raw.at, se estiverem presentes e forem iguais a "success" ou não.
(Parser Logic) read_only_udm.security_result.severity A gravidade da segurança é derivada dos campos level ou SeverityText, se estiverem presentes. "INFO" é mapeado para "INFORMATIONAL", "WARN" para "MEDIUM" e outros valores são mapeados diretamente. Para registros git-daemon, "fatal" é mapeado para "CRITICAL".
(Parser Logic) read_only_udm.network.application_protocol O protocolo do aplicativo é derivado dos campos protocol, proto, babeld_proto, transport_protocol_name ou raw.protocol, convertidos em maiúsculas e verificados como "HTTP", "HTTPS" e "SSH".
(Parser Logic) read_only_udm.network.application_protocol_version A versão do protocolo do aplicativo é derivada do campo http_version, se presente.
(Parser Logic) read_only_udm.network.http.parsed_user_agent O agente do usuário analisado é derivado dos campos user_agent, column5, http_ua ou content, se presentes.
(Parser Logic) read_only_udm.network.received_bytes Os bytes recebidos são derivados dos campos column3, read_bytes, fs_recv ou uploaded_bytes, se presentes, e convertidos em um número inteiro não assinado.
(Parser Logic) read_only_udm.network.received_packets Os pacotes recebidos são derivados do campo client_recv, se presente, convertendo-o em um número inteiro.
(Parser Logic) read_only_udm.network.response_code O código de resposta é derivado dos campos column2, status, status_code ou http_status, se presentes, convertendo em um número inteiro.
(Parser Logic) read_only_udm.network.sent_bytes Os bytes enviados são derivados do campo client_sent, se presente, e convertidos em um número inteiro sem sinal.
(Parser Logic) read_only_udm.network.sent_packets Os pacotes enviados são derivados do campo fs_sent, se presente, convertendo em um número inteiro.
(Parser Logic) read_only_udm.network.session_duration.seconds A duração da sessão em segundos é derivada do campo time_duration, se presente, convertendo em um número inteiro.
(Parser Logic) read_only_udm.target.file.full_path O caminho completo do arquivo de destino é derivado dos campos path, git_dir ou dir, se presentes.
(Parser Logic) read_only_udm.target.file.sha1 O SHA1 do arquivo de destino é derivado do campo sha, se presente.
(Parser Logic) read_only_udm.target.hostname O nome de host de destino é derivado do campo client_hostname, se presente.
(Parser Logic) read_only_udm.target.ip O IP de destino é derivado dos campos x_real_ip, remote_address, client_ip ou remote_addr, se presentes.
(Parser Logic) read_only_udm.target.location.name O nome do local de destino é derivado dos campos datacenter ou public_repo, se presentes.
(Parser Logic) read_only_udm.target.port A porta de destino é derivada dos campos client_port, dstp ou remote_port, se presentes, e convertida em um número inteiro.
(Parser Logic) read_only_udm.target.process.command_line A linha de comando do processo de destino é derivada dos campos command, ssh_cmd, cmdline ou cmd, se presentes.
(Parser Logic) read_only_udm.target.process.parent_process.pid O ID do processo pai do processo de destino é derivado do campo ppid, se presente, e convertido em uma string.
(Parser Logic) read_only_udm.target.process.pid O ID do processo de destino é derivado do campo pid, se presente, e convertido em uma string.
(Parser Logic) read_only_udm.target.url O URL de destino é derivado dos campos url, http_url, request_url, http_request, dest_url, config.url ou url_path, se presentes. Também pode ser criado a partir de path_info e query_string.
(Parser Logic) read_only_udm.target.user.attribute.roles.[].name As funções de usuário de destino são derivadas dos campos actor_type ou user_type, se presentes.
(Parser Logic) read_only_udm.target.user.email_addresses Os endereços de e-mail do usuário de destino são derivados do campo external_identity_nameid, se for um endereço de e-mail.
(Parser Logic) read_only_udm.target.user.group_identifiers Os identificadores do grupo de usuários de destino são derivados do campo data.team, se presente.
(Parser Logic) read_only_udm.target.user.userid O ID do usuário de destino é derivado dos campos userid, external_identity_nameid, current_user, member, user_id, actor_id ou raw.user_id, se presentes.
(Parser Logic) read_only_udm.target.user.user_display_name O nome de exibição do usuário de destino é derivado dos campos login, user, external_identity_username, user_login ou raw.login, se presentes.
(Parser Logic) read_only_udm.principal.asset.asset_id O ID do recurso principal é derivado do campo guid, com o prefixo "GUID: ".
(Parser Logic) read_only_udm.principal.hostname O nome de host principal é derivado dos campos hostname, request_host, host ou principal_hostname, se presentes.
(Parser Logic) read_only_udm.principal.ip O IP principal é derivado dos campos column6, ip, x_real_ip, remote_address, raw.ip, actor_ip ou log:source:ip, se presentes.
(Parser Logic) read_only_udm.principal.location.country_or_region O país ou a região do local principal é derivado do campo actor_location.country_code, se presente.
(Parser Logic) read_only_udm.principal.port A porta principal é derivada dos campos srcp ou log:source:port, se presentes, e convertida em um número inteiro.
(Parser Logic) read_only_udm.principal.resource.name O nome do recurso principal é derivado do campo service.name, se presente.
(Parser Logic) read_only_udm.principal.resource.product_object_id O ID do objeto do produto de recurso principal é derivado dos campos service.instance.id ou subject_id, se presentes.
(Parser Logic) read_only_udm.principal.url O URL principal é derivado do campo repo, se presente.
(Parser Logic) read_only_udm.principal.user.userid O ID do usuário principal é derivado do campo repository_owner_id, se presente, e convertido em uma string.
(Parser Logic) read_only_udm.principal.user.user_display_name O nome de exibição do usuário principal é derivado do campo repo_name, se presente.
(Parser Logic) read_only_udm.intermediary.hostname O nome de host intermediário é derivado do campo hostname, se presente.
(Parser Logic) read_only_udm.intermediary.ip O IP intermediário é derivado dos campos x_forwarded_for ou xff_ip, se presentes.
(Parser Logic) read_only_udm.metadata.description A descrição dos metadados é derivada dos campos content, at ou raw.message, se presentes.
(Parser Logic) read_only_udm.metadata.product_event_type O tipo de evento do produto é derivado dos campos process_type ou action, se presentes.
(Parser Logic) read_only_udm.metadata.product_log_id O ID de registro do produto é derivado dos campos github_request_id, id, request_id ou raw.request_id, se presentes.
(Parser Logic) read_only_udm.metadata.product_version A versão do produto é derivada do campo version, se presente.
(Parser Logic) read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value Vários rótulos são adicionados à matriz security_result.about.labels com base na presença e nos valores de campos como data.events, data.workflow_id, workflow.name, data.head_branch, data.trigger_id, data.workflow_run_id e data.event.
(Parser Logic) read_only_udm.security_result.description A descrição do resultado de segurança é derivada dos campos auth_status, data_msg, msg, Body, desc ou content, se presentes.
(Parser Logic) read_only_udm.security_result.severity_details Os detalhes de gravidade do resultado de segurança são derivados do campo userid, se presente.
(Parser Logic) read_only_udm.security_result.summary O resumo dos resultados de segurança é derivado dos campos creason, action ou reason, se presentes.
(Parser Logic) read_only_udm.network.http.referral_url O URL de referência HTTP é derivado dos campos column4 ou referer, se presentes.
(Parser Logic) read_only_udm.network.http.user_agent O user agent HTTP é derivado dos campos column5, http_ua ou user_agent, se presentes.
(Parser Logic) read_only_udm.network.sent_bytes Os bytes enviados pela rede são derivados dos campos client_sent ou fs_sent, se presentes, e convertidos em um número inteiro não assinado.
(Parser Logic) read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Muitos campos são mapeados condicionalmente como pares de chave-valor na matriz additional.fields, incluindo auth_fingerprint, controller, oauth_access_id, oauth_application_id, oauth_scopes, route, worker_request_count, repo, repo_visibility, auth, content_length, elapsed, catalog_service, action, method, failure_type, failure_reason, hashed_token, token_type, gitauth_version, enterprise.name, programmatic_access_type, token_id, token_scopes, integration, query_string, rate_limit_remaining, request_body, org_id, repo_id, repository_public, raw.method, raw.failure_type, raw.failure_reason, raw.from, raw.raw_login, device_cookie, operation, operation_type, category_type, business, note, read, pre_perform_allocation_count, backend, queue, class, success, env, job_id e job. A lógica específica de cada campo é detalhada no código do analisador.
(Parser Logic) read_only_udm.security_result.detection_fields.[].key, read_only_udm.security_result.detection_fields.[].value Os campos controller_action, two_factor, delay_time, queued_time, delivery_build, delivery_send e stages são mapeados condicionalmente para a matriz security_result.detection_fields.
(Parser Logic) read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value Os campos hook_id, job_name, job_workflow_ref, runner_group_id, runner_group_name, runner_name, runner_id, workflow_run_id e business_id são mapeados condicionalmente como rótulos na matriz target.resource.attribute.labels.
(Parser Logic) read_only_udm.metadata.event_timestamp Se o carimbo de data/hora não estiver disponível diretamente em um formato compatível, o analisador tentará extrair e convertê-lo de vários campos, incluindo ts, now, created_at, Timestamp, time e raw.now.
(Parser Logic) read_only_udm.network.http.method O método HTTP é derivado dos campos method, column1, request_method, http_method ou raw.method, sendo convertido em letras maiúsculas.
(Parser Logic) read_only_udm.target.application O aplicativo de destino é derivado dos campos process, program ou app, se presentes.

Alterações

2023-12-18

  • Correção de bugs:
  • Se "process_type" for "github_production", adicione um padrão Grok para extrair "kv_data".
  • Se "process_type" for "github_production", mapeie "user" para "target.user.user_display_name".
  • Se "process_type" for "github_production", mapeie "user_id" para "target.user.userid".
  • "Referrer" foi mapeado para "network.http.referral_url".
  • "user_session_id" foi mapeado para "network.session_id".
  • "ip" foi mapeado para "principal.ip".
  • "from" foi mapeado para "additional.fields".
  • "request_category" foi associado a "additional.fields".
  • Mapeamos "device_cookie" para "additional.fields".
  • "operation_type" foi associado a "additional.fields".
  • "category_type" foi associado a "additional.fields".
  • Mapeamos "note" para "additional.fields".
  • Mapeamos "read" para "additional.fields".
  • "pre_perform_allocation_count" foi mapeado para "additional.fields".
  • O "back-end" foi mapeado para "additional.fields".
  • "queue" foi mapeado para "additional.fields".
  • Mapeamos "class" para "additional.fields".
  • O "success" foi mapeado para "additional.fields".
  • "controller_action" foi mapeado para "security_result.detection_fields".
  • "two_factor" foi mapeado para "security_result.detection_fields".

2023-10-25

  • Quando "public_repo" for "false", defina "target.location.name" como "PRIVATE". Caso contrário, defina como "PUBLIC".

2023-10-11

  • Mapeamos "user_agent" para "network.http.user_agent" e "network.http.parsed_user_agent".
  • "request_method" foi associado a "network.http.method".
  • Mapeamos "application_name" para "target.application".
  • "status_code" foi associado a "network.http.response_code".
  • "url_path" foi associado a "target.url".
  • Mapeamos "user_id" para "target.userid".
  • "transport_protocol_name" foi associado a "network.application_protocol".
  • "raw.now" foi mapeado para "metadata.event_timestamp".
  • "raw.ip" foi mapeado para "principal.ip".
  • "raw.request_id" foi associado a "metadata.product_log_id".
  • "raw.repo" foi mapeado para "target.url".
  • Mapeamos "raw.action" para "security_result.summary".
  • "raw.protocol" foi associado a "network.application_protocol".
  • "raw.message" foi mapeado para "metadata.description".
  • "raw.at" foi mapeado para "security_result.action".
  • "raw.login" foi mapeado para "target.user_display_name".
  • "raw.user_id" foi mapeado para "target.userid".
  • Mapeamos "raw.failure_reason", "raw.failure_type", "raw.raw_login" e "raw.from" para "additional.fields".
  • Mapeou "programmatic_access_type", "actor_id", "token_id", "token_scopes", "integration", "query_string", "rate_limit_remaining", "request_body", "route", "business", "org_id", "repo_id", "public_repo", "_document_id", "operation_type", "repository_public" para "additional.fields".

2023-07-31

  • Correção de bugs:
  • "On_error" foi adicionado aos padrões do Grok.
  • "workflow_run.id" foi mapeado para "target.resource.attribute.labels".
  • "workflow_run.event" foi associado a "additional.fields".
  • "workflow_run.actor.login" foi associado a "principal.user.userid".
  • "workflow_run.head_branch" foi associado a "security_result.about.labels".
  • "workflow_run.head_sha" foi mapeado para "target.file.sha256".
  • Mapeamos "enterprise.name" para "additional.fields".
  • "workflow.name" foi associado a "security_result.about.labels".
  • "workflow_run.workflow_id" foi associado a "security_result.about.labels".

2023-06-22

  • Adição de suporte aos formatos de registro de syslog "github_auth", "haproxy", "github_access", "github_unicorn", "github_production", "hookshot-go", "babeld", "github_gitauth", "babeld2hydro", "authzd", "gitrpcd", "agent", "git-daemon", "github_resqued", "sudo", "systemd" e "github_audit".

2023-06-09

  • Enhancement-
  • "external_identity_nameid" foi mapeado para "target.user.email_addresses" se estiver no formato de e-mail.
  • Extraia o nome de usuário de "external_identity_nameid" e mapeie para "target.user.userid".

2023-01-13

  • Enhancement-
  • "actor_ip" foi mapeado para "principal.ip".
  • "Hashed_token" foi mapeado para "network.session_id".
  • "external_identity_nameid" foi associado a "target.user.userid "
  • "external_identity_username" foi associado a "target.user.user_display_name".

2022-11-28

  • Melhoria: mapeamento de "config.url" para "target.url".

2022-07-07

  • Melhoria: os registros de formato JSON recém-ingeridos com a ação "git.clone","git.push" e "workflows.prepared_workflow_job" foram processados e analisados.
  • "job_name" mapeado para "target.resource.attribute.labels".
  • "job_workflow_ref" mapeado para "target.resource.attribute.labels".
  • "runner_group_id" mapeado para "target.resource.attribute.labels".
  • "runner_group_name" mapeado para "target.resource.attribute.labels".
  • "runner_name" mapeado para "target.resource.attribute.labels".
  • "runner_id" mapeado para "target.resource.attribute.labels".
  • "workflow_run_id" mapeado para "target.resource.attribute.labels".
  • "actor_location.country_code" mapeado para "principal.location.country_or_region".