Recolha registos do Uptycs EDR
Este documento explica como pode carregar registos do Uptycs EDR para o Google Security Operations através do Amazon S3. O analisador transforma os registos JSON não processados num modelo de dados unificado (UDM). Primeiro, extrai campos do JSON, executa a limpeza e o enriquecimento de dados e, em seguida, mapeia as informações relevantes para os campos da UDM correspondentes, processando vários tipos de dados e casos extremos para garantir uma representação precisa e consistente no esquema da UDM.
Antes de começar
Certifique-se de que cumpre os seguintes pré-requisitos:
- Uma instância do Google SecOps
- Acesso privilegiado ao Uptycs
- Acesso privilegiado à AWS (S3, IAM)
Obtenha os pré-requisitos do Uptycs
- Inicie sessão na consola do administrador do Uptycs.
- Aceda a Configuração > Utilizadores.
- Selecione o utilizador ou crie um utilizador da conta de serviço.
- Clique em Chave da API do utilizador.
- Copie e guarde numa localização segura os seguintes detalhes:
- Chave da API
- API Secret
- ID de cliente
- Domínio da API (derivado do seu URL do Uptycs, por exemplo,
mystack.uptycs.io)
Configure o contentor do AWS S3 e o IAM para o Google SecOps
- Crie um contentor do Amazon S3 seguindo este manual do utilizador: Criar um contentor.
- Guarde o nome e a região do contentor para referência futura (por exemplo,
uptycs-telemetry-export). - Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
- Selecione o utilizador criado.
- Selecione o separador Credenciais de segurança.
- Clique em Criar chave de acesso na secção Chaves de acesso.
- Selecione Serviço de terceiros como Exemplo de utilização.
- Clicar em Seguinte.
- Opcional: adicione uma etiqueta de descrição.
- Clique em Criar chave de acesso.
- Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione o separador Autorizações.
- Clique em Adicionar autorizações na secção Políticas de autorizações.
- Selecione Adicionar autorizações.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clicar em Seguinte.
- Clique em Adicionar autorizações.
Configure a política e a função de IAM para carregamentos do S3
- Na consola da AWS, aceda a IAM > Políticas.
- Clique em Criar política > separador JSON.
Introduza a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::uptycs-telemetry-export/*" }, { "Sid": "AllowListBucket", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }- Substitua
uptycs-telemetry-exportse tiver introduzido um nome de contentor diferente.
- Substitua
Clique em Seguinte > Criar política.
Atribua um nome à política
uptycs-s3-write-policy.Aceda a IAM > Utilizadores.
Selecione o utilizador criado para exportações do Uptycs.
Clique em Adicionar autorizações > Anexar políticas diretamente.
Pesquise e selecione
uptycs-s3-write-policy.Clique em Seguinte > Adicionar autorizações.
Configure a telemetria não processada de exportação do Uptycs
- Inicie sessão na Uptycs Console.
- Aceda à secção de configuração de exportação.
- Configure o destino de exportação do S3.
- Forneça os seguintes detalhes de configuração:
- Tipo de exportação: selecione Telemetria não processada.
- Destino: selecione Amazon S3.
- Formato: selecione JSON.
- Bucket do S3: introduza
uptycs-telemetry-export. - Prefixo do caminho S3: introduza
telemetry/. - Região da AWS: selecione a região do seu contentor.
- ID da chave de acesso da AWS: introduza a chave de acesso do utilizador do IAM.
- Chave de acesso secreta da AWS: introduza a chave de acesso secreta.
- Tipos de eventos: selecione todos os tipos de telemetria necessários.
- Teste e ative a exportação.
Crie um utilizador da IAM só de leitura para o Google SecOps
- Aceda a AWS Console > IAM > Users.
- Clique em Adicionar utilizadores.
- Forneça os seguintes detalhes de configuração:
- Utilizador: introduza
secops-reader. - Tipo de acesso: selecione Chave de acesso – Acesso programático.
- Utilizador: introduza
- Clique em Criar utilizador.
- Anexe a política de leitura mínima (personalizada): Users > secops-reader > Permissions > Add permissions > Attach policies directly > Create policy.
No editor JSON, introduza a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::uptycs-telemetry-export/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }Defina o nome como
secops-reader-policy.Aceda a Criar política > pesquise/selecione > Seguinte > Adicionar autorizações.
Aceda a Credenciais de segurança > Chaves de acesso > Criar chave de acesso.
Transfira o CSV (estes valores são introduzidos no feed).
Configure um feed no Google SecOps para carregar registos do Uptycs
- Aceda a Definições do SIEM > Feeds.
- Clique em + Adicionar novo feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo,
Uptycs EDR logs). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione Uptycs EDR como o Tipo de registo.
- Clicar em Seguinte.
- Especifique valores para os seguintes parâmetros de entrada:
- URI do S3:
s3://uptycs-telemetry-export/telemetry/ - Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
- Idade máxima do ficheiro: inclua ficheiros modificados no último número de dias. A predefinição é 180 dias.
- ID da chave de acesso: chave de acesso do utilizador com acesso ao contentor do S3.
- Chave de acesso secreta: chave secreta do utilizador com acesso ao contentor do S3.
- Espaço de nomes do recurso: o espaço de nomes do recurso.
- Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
- URI do S3:
- Clicar em Seguinte.
- Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Tabela de mapeamento da UDM
| Campo de registo | Mapeamento do UDM | Lógica |
|---|---|---|
| osquery_raw_data.answer | read_only_udm.network.dns.answers.name | Valor retirado de osquery_raw_data.answer se osquery_raw_data.answer não estiver vazio. |
| osquery_raw_data.container_id | read_only_udm.metadata.product_log_id | Valor retirado de osquery_raw_data.container_id se osquery_raw_data.container_id não estiver vazio. |
| osquery_raw_data.local_address | read_only_udm.principal.ip | Valor retirado de osquery_raw_data.local_address se osquery_raw_data.local_address não estiver vazio e for um endereço IP válido. |
| osquery_raw_data.local | read_only_udm.principal.ip | Caso contrário, o valor é retirado de osquery_raw_data.local se osquery_raw_data.local não estiver vazio e for um endereço IP válido. |
| osquery_raw_data.local_port | read_only_udm.principal.port | Valor retirado de osquery_raw_data.local_port e convertido em número inteiro se osquery_raw_data.local_port não estiver vazio. |
| osquery_raw_data.md5 | read_only_udm.target.process.file.md5 | Valor retirado de osquery_raw_data.md5 se osquery_raw_data.md5 não estiver vazio. |
| osquery_raw_data.port | read_only_udm.target.port | Valor retirado de osquery_raw_data.port e convertido em número inteiro se osquery_raw_data.port não estiver vazio. |
| osquery_raw_data.question | read_only_udm.network.dns.questions.name | Valor retirado de osquery_raw_data.question se osquery_raw_data.question não estiver vazio. |
| osquery_raw_data.remote_address | read_only_udm.intermediary.ip | Valor retirado de osquery_raw_data.remote_address se osquery_raw_data.remote_address não estiver vazio. |
| osquery_raw_data.remote_port | read_only_udm.intermediary.port | Valor retirado de osquery_raw_data.remote_port e convertido em número inteiro se osquery_raw_data.remote_port não estiver vazio. |
| osquery_raw_data.type | read_only_udm.network.dns.questions.type | Valor retirado de osquery_raw_data.type e convertido em número inteiro se osquery_raw_data.type não estiver vazio. |
| osquery_raw_data.uid | read_only_udm.principal.user.userid | Valor retirado de osquery_raw_data.uid se osquery_raw_data.uid não estiver vazio e não for igual a "0". |
| osquery_raw_data.worker_instance_id | read_only_udm.principal.user.userid | Caso contrário, o valor é retirado de osquery_raw_data.worker_instance_id se osquery_raw_data.worker_instance_id não estiver vazio. |
| upt_asset_group_id | read_only_udm.principal.user.group_identifiers | Valor obtido de upt_asset_group_id se upt_asset_group_id não estiver vazio. |
| upt_asset_group_name | read_only_udm.principal.group.group_display_name | Valor retirado de upt_asset_group_name se upt_asset_group_name não estiver vazio. |
| upt_asset_id | read_only_udm.principal.asset.asset_id | String concatenada "UPT ASSET ID:" com o valor de upt_asset_id se upt_asset_id não estiver vazio. |
| upt_hash | read_only_udm.target.file.md5 | Todas as ocorrências de "-" são substituídas por "" em upt_hash. Em seguida, o valor é atribuído a read_only_udm.target.file.md5 se upt_hash não estiver vazio. |
| upt_hostname | read_only_udm.principal.hostname | Valor retirado de upt_hostname se upt_hostname não estiver vazio. |
| upt_resource_type | read_only_udm.target.resource.type | Valor retirado de upt_resource_type se upt_resource_type não estiver vazio. |
| upt_time | read_only_udm.metadata.event_timestamp.seconds | Valor retirado de upt_time se upt_time não estiver vazio. |
| read_only_udm.metadata.event_type | O valor é definido como "PROCESS_LAUNCH" se osquery_raw_data.pid não estiver vazio. O valor é definido como "NETWORK_DNS" se osquery_raw_data.question não estiver vazio. O valor é definido como "GENERIC_EVENT" se event_type estiver vazio. | |
| read_only_udm.metadata.log_type | O valor está definido como "UPTYCS_EDR". | |
| read_only_udm.metadata.product_name | O valor está definido como "UPTYCS_EDR". | |
| read_only_udm.metadata.vendor_name | O valor está definido como "UPTYCS". | |
| read_only_udm.network.application_protocol | O valor é definido como "DNS" se osquery_raw_data.question não estiver vazio. | |
| read_only_udm.security_result.action | O valor é definido como "ALLOW" se osquery_raw_data.return_code for igual a "SUCCESS" ou osquery_raw_data.success for igual a "1". | |
| read_only_udm.target.process.command_line | Valor retirado de osquery_raw_data.cmdline se osquery_raw_data.cmdline não estiver vazio. | |
| read_only_udm.target.process.file.full_path | Valor retirado de osquery_raw_data.path se osquery_raw_data.path não estiver vazio. | |
| read_only_udm.target.process.parent_process | O valor é construído iterando a matriz ancestor_list em osquery_raw_data.ancestor_list. Para cada elemento na matriz, a command_line, o full_path do ficheiro e o pid são extraídos e formatados numa estrutura JSON que representa a cadeia de processos. | |
| read_only_udm.target.process.pid | Valor retirado de osquery_raw_data.pid se osquery_raw_data.pid não estiver vazio. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.