Coletar registros de auditoria do Tanium
Este documento explica como ingerir registros de auditoria do Tanium no Google Security Operations usando o Amazon S3 com o recurso nativo de exportação do S3 do Tanium Connect. O analisador extrai os registros, primeiro limpando vários campos padrão. Em seguida, ele analisa a mensagem de registro usando grok e o filtro json, extraindo campos como carimbo de data/hora, IP do dispositivo e detalhes de auditoria. O analisador mapeia esses campos extraídos para o UDM, processando vários tipos de dados e lógica condicional para preencher os campos apropriados do UDM com base na presença e nos valores de atributos específicos do registro de auditoria do Tanium.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Acesso privilegiado ao Tanium Connect e ao Tanium Console
- Acesso privilegiado à AWS (S3, IAM)
Criar um bucket do Amazon S3
- Abra o console do Amazon S3.
- Se necessário, mude a Região.
- Na barra de navegação, selecione a região em que você quer que os registros de auditoria do Tanium fiquem.
- Clique em Criar bucket.
- Nome do bucket: insira um nome significativo para o bucket (por exemplo,
tanium-audit-logs
). - Região: selecione a região de sua preferência (por exemplo,
us-east-1
). - Clique em Criar.
- Nome do bucket: insira um nome significativo para o bucket (por exemplo,
Criar um usuário do IAM com acesso total ao Amazon S3
- Abra o console do IAM.
- Clique em Usuários > Adicionar usuário.
- Digite um nome de usuário (por exemplo,
tanium-connect-s3-user
). - Selecione Acesso programático e/ou Acesso ao console de gerenciamento da AWS, conforme necessário.
- Selecione Senha gerada automaticamente ou Senha personalizada.
- Clique em Next: Permissions.
- Escolha Anexar políticas atuais diretamente.
- Pesquise e selecione a política AmazonS3FullAccess para o usuário.
- Clique em Avançar: tags.
- Clique em PRÓXIMO: REVISAR.
- Clique em Criar usuário.
- Copie e salve o ID da chave de acesso e a chave de acesso secreta para referência futura.
Configurar permissões no bucket do Amazon S3
- No console do Amazon S3, escolha o bucket que você criou anteriormente.
- Clique em Permissões > Política do bucket.
No Editor de políticas do bucket, adicione a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/tanium-connect-s3-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::tanium-audit-logs", "arn:aws:s3:::tanium-audit-logs/*" ] } ] }
Substitua as seguintes variáveis:
- Mude
YOUR_ACCOUNT_ID
para o ID da sua conta da AWS. - Mude
tanium-audit-logs
para o nome real do bucket, se for diferente. - Mude
tanium-connect-s3-user
para seu nome de usuário real do IAM, se for diferente.
- Mude
Clique em Salvar.
Configurar o Tanium Connect para exportação do S3
Criar uma conexão do AWS S3 no Tanium Connect
- Faça login no Tanium Console como administrador.
- Acesse Tanium Connect > Conexões.
- Clique em Criar conexão.
- Na seção Informações gerais, forneça os seguintes detalhes de configuração:
- Nome: insira um nome descritivo. Por exemplo,
Tanium Audit to S3
. - Descrição: insira uma descrição significativa (por exemplo,
Export Tanium audit logs to S3 for Google SecOps ingestion
). - Ativar: selecione para ativar a conexão.
- Nível de registro: selecione Informações (padrão) ou ajuste conforme necessário.
- Nome: insira um nome descritivo. Por exemplo,
Configurar a origem da conexão
- Na seção Configuração, em Origem, selecione Auditoria do Tanium.
- Configure as configurações de origem da auditoria:
- Dias de histórico recuperados: insira o número de dias de dados de auditoria históricos a serem recuperados (por exemplo,
7
para uma semana). - Tipos de auditoria: selecione os tipos de auditoria que você quer exportar. Escolha entre:
- Histórico de ações: ações emitidas por operadores do console.
- Autenticação: eventos de autenticação de usuários.
- Conteúdo: mudanças e modificações no conteúdo.
- Grupos: mudanças nos grupos de computadores.
- Pacotes: atividades relacionadas a pacotes.
- Sensores: modificações nos sensores.
- Configurações do sistema: mudanças na configuração do sistema.
- Usuários: atividades de gerenciamento de usuários.
- Dias de histórico recuperados: insira o número de dias de dados de auditoria históricos a serem recuperados (por exemplo,
Configurar o destino do AWS S3
- Em Destino, selecione AWS S3.
- Informe os seguintes detalhes de configuração:
- Nome do destino: insira um nome, por exemplo,
Google SecOps S3 Bucket
. - Chave de acesso da AWS: insira o ID da chave de acesso do usuário do IAM criado anteriormente.
- Chave secreta da AWS: insira a chave de acesso secreta do usuário do IAM criado anteriormente.
- Nome do bucket: insira o nome do bucket do S3 (por exemplo,
tanium-audit-logs
). - Caminho do bucket: opcional. Insira um prefixo de caminho (por exemplo,
tanium/audit/
). - Região: selecione a região da AWS em que o bucket está localizado (por exemplo,
us-east-1
).
- Nome do destino: insira um nome, por exemplo,
Configurar o formato e a programação
- Na seção Formato, configure o formato de saída:
- Tipo de formato: selecione JSON.
- Incluir cabeçalhos de coluna: selecione se você quer incluir cabeçalhos de coluna.
- Gerar documento: desmarque essa opção para enviar dados JSON brutos.
- Na seção Programação, configure quando a conexão será executada:
- Tipo de programação: selecione Cron.
- Expressão cron: insira uma expressão cron para exportações regulares (por exemplo,
0 */1 * * *
para exportações por hora). - Data de início: defina a data de início da programação.
- Clique em Salvar alterações.
Testar e executar a conexão
- Na página Visão geral do Connect, acesse Conexões.
- Clique na conexão que você criou (Tanium Audit to S3).
- Clique em Executar agora para testar a conexão.
- Confirme que você quer executar a conexão.
- Monitore o status da conexão e verifique se os registros de auditoria estão sendo exportados para o bucket do S3.
Opcional: criar um usuário e chaves do IAM somente leitura para o Google SecOps
- Acesse Console da AWS > IAM > Usuários > Adicionar usuários.
- Clique em Add users.
- Informe os seguintes detalhes de configuração:
- Usuário: insira
secops-reader
. - Tipo de acesso: selecione Chave de acesso – Acesso programático.
- Usuário: insira
- Clique em Criar usuário.
- Anexe a política de leitura mínima (personalizada): Usuários > secops-reader > Permissões > Adicionar permissões > Anexar políticas diretamente > Criar política.
No editor JSON, insira a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::tanium-audit-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::tanium-audit-logs" } ] }
Defina o nome como
secops-reader-policy
.Acesse Criar política > pesquise/selecione > Próxima > Adicionar permissões.
Acesse Credenciais de segurança > Chaves de acesso > Criar chave de acesso.
Faça o download do CSV (esses valores são inseridos no feed).
Configurar um feed no Google SecOps para ingerir registros de auditoria do Tanium
- Acesse Configurações do SIEM > Feeds.
- Clique em + Adicionar novo feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Tanium Audit logs
). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione Tanium Audit como o Tipo de registro.
- Clique em Próxima.
- Especifique valores para os seguintes parâmetros de entrada:
- URI do S3:
s3://tanium-audit-logs/tanium/audit/
(ajuste o caminho se você usou um nome ou caminho de bucket diferente). - Opções de exclusão de fontes: selecione a opção de exclusão de acordo com sua preferência.
- Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
- ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3 (do usuário somente leitura criado acima).
- Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3 (do usuário somente leitura criado acima).
- Namespace do recurso: o namespace do recurso.
- Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
- URI do S3:
- Clique em Próxima.
- Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
ActionId |
metadata.product_log_id |
Mapeado diretamente do campo ActionId . |
ActionName |
security_result.action_details |
Mapeado diretamente do campo ActionName . |
Approver |
additional.fields[Approver].value.string_value |
Mapeado diretamente do campo Approver . |
Approver |
principal.user.userid |
Mapeado do campo Approver se Issuer não estiver presente. |
audit_name |
metadata.description |
Mapeado diretamente do campo audit_name . |
audit_row_id |
additional.fields[audit_row_id].value.string_value |
Mapeado diretamente do campo audit_row_id . |
audit_type |
additional.fields[audit_type].value.string_value |
Mapeado diretamente do campo audit_type . |
authentication_type |
principal.user.attribute.labels[authentication_type].value |
Mapeado diretamente do campo authentication_type extraído do campo details . |
Command |
principal.process.command_line |
Mapeado diretamente do campo Command após a decodificação de URL. |
creation_time |
target.resource.attribute.creation_time |
Mapeado diretamente do campo creation_time . |
details |
network.session_id |
Extraído do campo details usando a análise de chave-valor. |
details |
principal.user.attribute.labels[authentication_type].value |
Extraído do campo details usando a análise de chave-valor. |
details |
principal.asset.ip , principal.ip |
O endereço IP é extraído do campo details usando a análise de chave-valor e mapeado para principal.asset.ip e principal.ip . |
DistributeOver |
additional.fields[DistributeOver].value.string_value |
Mapeado diretamente do campo DistributeOver . |
dvc_ip |
intermediary.hostname |
Mapeado diretamente do campo dvc_ip extraído da mensagem do syslog. |
dvc_ip |
observer.ip |
Mapeado diretamente do campo dvc_ip se logstash.collect.host não estiver presente. |
Expiration |
additional.fields[Expiration].value.string_value |
Mapeado diretamente do campo Expiration . |
host.architecture |
target.asset.hardware.cpu_platform |
Mapeado diretamente do campo host.architecture . |
host.id |
target.asset.asset_id |
Mapeado diretamente do campo host.id , com o prefixo "Host ID:". |
host.ip |
target.ip |
Mapeado diretamente do campo host.ip . |
host.mac |
target.mac |
Mapeado diretamente do campo host.mac . |
host.name |
target.hostname |
Mapeado diretamente do campo host.name se host.hostname não estiver presente. |
host.os.kernel |
target.platform_patch_level |
Mapeado diretamente do campo host.os.kernel . |
host.os.name |
additional.fields[os_name].value.string_value |
Mapeado diretamente do campo host.os.name . |
host.os.version |
target.platform_version |
Mapeado diretamente do campo host.os.version . |
InsertTime |
additional.fields[InsertTime].value.string_value |
Mapeado diretamente do campo InsertTime . |
Issuer |
additional.fields[Issuer].value.string_value |
Mapeado diretamente do campo Issuer . |
Issuer |
principal.user.userid |
Mapeado diretamente do campo Issuer , se presente. |
last_modified_by |
principal.resource.attribute.labels[last_modified_by].value |
Mapeado diretamente do campo last_modified_by . |
log.source.address |
principal.ip |
O endereço IP é extraído do campo log.source.address e mapeado para principal.ip . |
log.source.address |
principal.port |
A porta é extraída do campo log.source.address . |
logstash.collect.host |
observer.ip |
Mapeado diretamente do campo logstash.collect.host , se presente. |
logstash.collect.timestamp |
metadata.collected_timestamp |
Mapeado diretamente do campo logstash.collect.timestamp . |
logstash.ingest.timestamp |
metadata.ingested_timestamp |
Mapeado diretamente do campo logstash.ingest.timestamp . |
logstash.irm_environment |
additional.fields[irm_environment].value.string_value |
Mapeado diretamente do campo logstash.irm_environment . |
logstash.irm_region |
additional.fields[irm_region].value.string_value |
Mapeado diretamente do campo logstash.irm_region . |
logstash.irm_site |
additional.fields[irm_site].value.string_value |
Mapeado diretamente do campo logstash.irm_site . |
logstash.process.host |
intermediary.hostname |
Mapeado diretamente do campo logstash.process.host . |
message |
dvc_ip , json_data , timestamp |
Analisado usando grok para extrair dvc_ip , json_data e timestamp . |
modification_time |
target.resource.attribute.last_update_time |
Mapeado diretamente do campo modification_time . |
modifier_user_id |
principal.resource.attribute.labels[modifier_user_id].value |
Mapeado diretamente do campo modifier_user_id . |
object_id |
target.resource.product_object_id |
Mapeado diretamente do campo object_id . |
object_name |
target.resource.name |
Mapeado diretamente do campo object_name . |
object_type_name |
target.resource.attribute.labels[object_type_name].value |
Mapeado diretamente do campo object_type_name . |
PackageName |
additional.fields[PackageName].value.string_value |
Mapeado diretamente do campo PackageName . |
SourceId |
additional.fields[SourceId].value.string_value |
Mapeado diretamente do campo SourceId . |
StartTime |
additional.fields[StartTime].value.string_value |
Mapeado diretamente do campo StartTime . |
Status |
security_result.action |
Mapeado como "BLOCK" se Status for "Closed" e "ALLOW" se Status for "Open". |
Status |
security_result.summary |
Mapeado diretamente do campo Status . |
tanium_audit_type |
metadata.product_event_type |
Mapeado diretamente do campo tanium_audit_type . |
timestamp |
metadata.event_timestamp |
Mapeado diretamente do campo timestamp extraído da mensagem syslog ou do campo message . |
type |
additional.fields[type].value.string_value |
Mapeado diretamente do campo type . |
type_name |
metadata.product_event_type |
Mapeado diretamente do campo type_name . |
User |
principal.user.userid |
Mapeado diretamente do campo User . Determinado pela lógica do analisador com base na presença de src_ip , has_target e has_user . Pode ser "NETWORK_CONNECTION", "USER_RESOURCE_ACCESS", "STATUS_UPDATE" ou "GENERIC_EVENT". Fixado no código como "TANIUM_AUDIT". Fixado no código como "cybersecurity". Fixado no código como "TANIUM_AUDIT". |
@version |
metadata.product_version |
Mapeado diretamente do campo @version . |
agent.ephemeral_id |
additional.fields[ephemeral_id].value.string_value |
Mapeado diretamente do campo agent.ephemeral_id . |
agent.id |
observer.asset_id |
Mapeado diretamente do campo agent.id , com o prefixo "filebeat:". |
agent.type |
observer.application |
Mapeado diretamente do campo agent.type . |
agent.version |
observer.platform_version |
Mapeado diretamente do campo agent.version . |
Comment |
security_result.description |
Mapeado diretamente do campo Comment . |
host.hostname |
target.hostname |
Mapeado diretamente do campo host.hostname , se presente. |
input.type |
network.ip_protocol |
Mapeado para "TCP" se input.type for "tcp" ou "TCP". |
syslog_severity |
security_result.severity |
Mapeado como "HIGH" se syslog_severity for "error" ou "warning", "MEDIUM" se for "notice", "LOW" se for "information" ou "info". |
syslog_severity |
security_result.severity_details |
Mapeado diretamente do campo syslog_severity . |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.