Coletar registros de contexto de recursos da Qualys
Esse analisador extrai informações de contexto de recursos dos registros JSON da Qualys e as transforma no formato UDM. Ele analisa vários campos, como ID, IP, nome do host, detalhes de recursos da nuvem, SO e tags, mapeando-os para os campos correspondentes da UDM e criando relações entre ativos e recursos. O analisador também processa uma lógica específica para provedores de nuvem e sistemas operacionais, garantindo uma representação precisa na UDM.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google Security Operations.
- Acesso privilegiado ao Google Cloud.
- Acesso privilegiado ao Qualys.
Ative as APIs obrigatórias:
- Faça login no console do Google Cloud .
- Acesse APIs e serviços > Biblioteca.
- Procure e ative as seguintes APIs:
- API Cloud Functions
- API Cloud Scheduler
- Cloud Pub/Sub (necessário para o Cloud Scheduler invocar funções)
Criar um Google Cloud bucket do Storage
- Faça login no console do Google Cloud .
Acesse a página Buckets do Cloud Storage.
Clique em Criar.
Configure o bucket:
- Nome: insira um nome exclusivo que atenda aos requisitos de nome de bucket (por exemplo, qualys-asset-bucket).
- Escolha onde armazenar seus dados: selecione um local.
- Escolha uma classe de armazenamento para seus dados: selecione uma classe de armazenamento padrão para o bucket ou escolha Classe automática para gerenciamento automático da classe de armazenamento.
- Escolha como controlar o acesso a objetos: selecione não para aplicar a prevenção de acesso público e escolha um modelo de controle de acesso para os objetos do bucket.
- Classe de armazenamento: escolha com base nas suas necessidades (por exemplo, Padrão).
Clique em Criar.
Criar uma conta de serviço do Google Cloud
- Acesse IAM e administrador > Contas de serviço.
- Crie uma nova conta de serviço.
- Dê um nome descritivo a ele (por exemplo, qualys-user).
- Conceda à conta de serviço o papel Administrador de objetos do Storage no bucket do Cloud Storage criado na etapa anterior.
- Conceda à conta de serviço o papel Invocador do Cloud Functions.
- Crie uma chave SSH para a conta de serviço.
- Faça o download de um arquivo de chave JSON para a conta de serviço. Mantenha esse arquivo em segurança.
Opcional: crie um usuário de API dedicado no Qualys
- Faça login no console da Qualys.
- Acesse Usuários.
- Clique em Novo > Usuário.
- Insira as Informações gerais necessárias para o usuário.
- Selecione a guia Função do usuário.
- Verifique se a caixa de seleção Acesso à API está marcada.
- Clique em Salvar.
Identificar seu URL específico da API do Qualys
Opção 1
Identifique seus URLs conforme mencionado na identificação da plataforma.
Opção 2
- Faça login no console da Qualys.
- Acesse Ajuda > Sobre.
- Role a tela para ver essas informações em "Central de operações de segurança (SOC)".
- Copie o URL da API do Qualys.
Configurar a função do Cloud
- Acesse Cloud Functions no console Google Cloud .
- Clique em Criar função.
Configure a função:
- Nome: insira um nome para a função (por exemplo, fetch-qualys-assets).
- Região: selecione uma região próxima ao seu bucket.
- Gatilho: escolha o gatilho HTTP, se necessário, ou o Cloud Pub/Sub para execução programada.
- Autenticação: proteja com autenticação.
- Escreva o código com um editor in-line:
```python from google.cloud import storage import requests import base64 import json # Cloud Storage configuration BUCKET_NAME = "<bucket-name>" FILE_NAME = "qualys_assets.json" # Qualys API credentials QUALYS_USERNAME = "<qualys-username>" QUALYS_PASSWORD = "<qualys-password>" QUALYS_BASE_URL = "https://<qualys_base_url>" def fetch_qualys_assets(): auth = base64.b64encode(f"{QUALYS_USERNAME}:{QUALYS_PASSWORD}".encode()).decode() headers = { "Authorization": f"Basic {auth}", "Content-Type": "application/xml" } payload = """ <ServiceRequest> <filters> <Criteria field="asset.name" operator="LIKE">%</Criteria> </filters> </ServiceRequest> """ response = requests.post(f"{QUALYS_BASE_URL}/qps/rest/2.0/search/am/asset", headers=headers, data=payload) return response.json() def upload_to_gcs(data): client = storage.Client() bucket = client.get_bucket(BUCKET_NAME) blob = bucket.blob(FILE_NAME) blob.upload_from_string(json.dumps(data), content_type="application/json") def main(request): assets = fetch_qualys_assets() upload_to_gcs(assets) return "Data uploaded to Cloud Storage successfully!" ```
Clique em Implantar depois de concluir a configuração.
Configurar o Cloud Scheduler
- Acesse o Cloud Scheduler no console Google Cloud .
- Clique em Criar job.
Configure o job:
- Nome: insira um nome para o job (por exemplo, trigger-fetch-qualys-assets).
- Frequência: use a sintaxe cron para especificar a programação (por exemplo, 0 0 * * * para diariamente à meia-noite).
- Fuso horário: defina seu fuso horário preferido.
- Tipo de gatilho: escolha HTTP.
- URL do gatilho: insira o URL da função do Cloud, que pode ser encontrado nos detalhes da função após a implantação.
- Método: escolha POST.
Crie o job.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em "Configurações do SIEM" > "Feeds".
Para configurar um feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed, por exemplo, Registros de contexto de recursos da Qualys.
- Selecione Google Cloud Storage como o Tipo de origem.
- Selecione Contexto do ativo da Qualys como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
- URI do GCS: o URI do Cloud Storage.
- URI é um: selecione Arquivo único.
- Opções de exclusão de fontes: selecione a opção de exclusão de acordo com sua preferência.
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- URI do GCS: o URI do Cloud Storage.
- URI é um: selecione Arquivo único.
Opções de exclusão de fontes: selecione a opção de exclusão de acordo com sua preferência.
Opções avançadas
- Nome do feed:um valor pré-preenchido que identifica o feed.
- Tipo de origem:método usado para coletar registros no Google SecOps.
- Namespace do recurso:namespace associado ao feed.
- Rótulos de ingestão:rótulos aplicados a todos os eventos deste feed.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
ASSET_ID |
entity.entity.asset.asset_id |
Mapeado diretamente do campo ASSET_ID . |
CLOUD_PROVIDER |
entity.relations.entity.resource.resource_subtype |
Mapeado diretamente do campo CLOUD_PROVIDER . |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Mapeado diretamente do campo CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME . |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Mapeado diretamente do campo CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE . |
CLOUD_RESOURCE_ID |
entity.relations.entity.resource.id |
Mapeado diretamente do campo CLOUD_RESOURCE_ID . |
CLOUD_SERVICE |
entity.relations.entity.resource.resource_type |
Se CLOUD_SERVICE for "VM", o valor será definido como "VIRTUAL_MACHINE". |
DNS_DATA.HOSTNAME |
entity.entity.asset.hostname |
Mapeado diretamente do campo DNS_DATA.HOSTNAME . |
EC2_INSTANCE_ID |
entity.relations.entity.resource.product_object_id |
Mapeado diretamente do campo EC2_INSTANCE_ID . |
ID |
entity.entity.asset.product_object_id |
Mapeado diretamente do campo ID . |
IP |
entity.entity.asset.ip |
Mapeado diretamente do campo IP . |
METADATA.AZURE.ATTRIBUTE[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Mapeado diretamente do campo METADATA.AZURE.ATTRIBUTE[].NAME . |
METADATA.AZURE.ATTRIBUTE[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Mapeado diretamente do campo METADATA.AZURE.ATTRIBUTE[].VALUE . |
OS |
entity.entity.asset.platform_software.platform |
Se OS contiver "windows" (sem diferenciar maiúsculas e minúsculas), o valor será definido como "WINDOWS". |
TAGS.TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Mapeado diretamente do campo TAGS.TAG[].NAME . |
TAGS.TAG[].TAG_ID |
entity.relations.entity.resource.attribute.labels.value |
String concatenada "TAG_ID: " com o valor de TAGS.TAG[].TAG_ID . Copiado do campo create_time do registro bruto. Codificado como "ASSET". Codificado como "QUALYS ASSET CONTEXT". Codificado como "QUALYS ASSET CONTEXT". Codificado como "RESOURCE". Codificado como "MEMBER". Copiado do campo create_time do registro bruto. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.