Recolha registos de contexto de recursos do Qualys
Este analisador extrai informações de contexto de recursos dos registos JSON do Qualys e transforma-as no formato UDM. Analisa vários campos, como o ID, o IP, o nome do anfitrião, os detalhes dos recursos na nuvem, o SO e as etiquetas, mapeando-os para os campos UDM correspondentes e criando relações entre recursos e recursos. O analisador também processa a lógica específica para fornecedores de nuvem e sistemas operativos, garantindo uma representação precisa no UDM.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google Security Operations.
- Acesso privilegiado a Google Cloud.
- Acesso privilegiado ao Qualys.
Ative as APIs necessárias:
- Inicie sessão na Google Cloud consola.
- Aceda a APIs e serviços > Biblioteca.
- Pesquise as seguintes APIs e ative-as:
- Cloud Functions API
- API do Cloud Scheduler
- Cloud Pub/Sub (necessário para o Cloud Scheduler invocar funções)
Crie um Google Cloud contentor de armazenamento
- Inicie sessão na Google Cloud consola.
Aceda à página Contentores do Cloud Storage.
Clique em Criar.
Configure o contentor:
- Nome: introduza um nome exclusivo que cumpra os requisitos do nome do contentor (por exemplo, qualys-asset-bucket).
- Escolha onde quer armazenar os seus dados: selecione uma localização.
- Escolha uma classe de armazenamento para os seus dados: selecione uma classe de armazenamento predefinida para o contentor ou selecione Autoclass para a gestão automática da classe de armazenamento.
- Escolha como controlar o acesso aos objetos: selecione não para aplicar a prevenção de acesso público e selecione um modelo de controlo de acesso para os objetos do seu contentor.
- Classe de armazenamento: escolha com base nas suas necessidades (por exemplo, Standard).
Clique em Criar.
Crie uma conta de serviço do Google Cloud
- Aceda a IAM e administrador > Contas de serviço.
- Crie uma nova conta de serviço.
- Atribua-lhe um nome descritivo (por exemplo, qualys-user).
- Conceda à conta de serviço a função de administrador de objetos de armazenamento no contentor do Cloud Storage que criou no passo anterior.
- Conceda à conta de serviço a função de invocador do Cloud Functions.
- Crie uma chave SSH para a conta de serviço.
- Transfira um ficheiro de chave JSON para a conta de serviço. Mantenha este ficheiro seguro.
Opcional: crie um utilizador da API dedicado no Qualys
- Inicie sessão na consola do Qualys.
- Aceda a Utilizadores.
- Clique em Novo > Utilizador.
- Introduza as informações gerais necessárias para o utilizador.
- Selecione o separador Função do utilizador.
- Certifique-se de que a caixa de verificação Acesso à API está selecionada para a função.
- Clique em Guardar.
Identifique o URL da API Qualys específico
Opção 1
Identifique os seus URLs conforme mencionado na identificação da plataforma.
Opção 2
- Inicie sessão na consola do Qualys.
- Aceda a Ajuda > Acerca de.
- Desloque a página para ver estas informações em Centro de operações de segurança (SOC).
- Copie o URL da API Qualys.
Configure a função do Google Cloud
- Aceda ao Cloud Functions na Google Cloud consola.
- Clique em Criar função.
Configure a função:
- Nome: introduza um nome para a sua função (por exemplo, fetch-qualys-assets).
- Região: selecione uma região próxima do seu contentor.
- Acionador: escolha o acionador HTTP, se necessário, ou o Cloud Pub/Sub para execução agendada.
- Autenticação: proteja com autenticação.
- Escreva o código com um editor inline:
```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 Implementar após concluir a configuração.
Configure o Cloud Scheduler
- Aceda ao Cloud Scheduler na Google Cloud consola.
- Clique em Criar tarefa.
Configure a tarefa:
- Nome: introduza um nome para a tarefa (por exemplo, trigger-fetch-qualys-assets).
- Frequência: use a sintaxe cron para especificar o agendamento (por exemplo, 0 0 * * * para diariamente à meia-noite).
- Fuso horário: defina o seu fuso horário preferido.
- Tipo de acionador: escolha HTTP.
- URL do acionador: introduza o URL da função na nuvem (encontrado nos detalhes da função após a implementação).
- Método: escolha POST.
Crie o trabalho.
Configure feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed; por exemplo, Registos de contexto de recursos da Qualys.
- Selecione Google Cloud Storage V2 como Tipo de origem.
- Selecione Qualys Asset Context como o Tipo de registo.
- Clicar em Seguinte.
Especifique valores para os seguintes parâmetros de entrada:
- URI do GCS: o URI do Cloud Storage.
- Opções de eliminação da origem: selecione a opção de eliminação de acordo com a sua preferência.
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 de UDM | Lógica |
---|---|---|
ASSET_ID |
entity.entity.asset.asset_id |
Mapeado diretamente a partir do campo ASSET_ID . |
CLOUD_PROVIDER |
entity.relations.entity.resource.resource_subtype |
Mapeado diretamente a partir do campo CLOUD_PROVIDER . |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Mapeado diretamente a partir do campo CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME . |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Mapeado diretamente a partir do campo CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE . |
CLOUD_RESOURCE_ID |
entity.relations.entity.resource.id |
Mapeado diretamente a partir do campo CLOUD_RESOURCE_ID . |
CLOUD_SERVICE |
entity.relations.entity.resource.resource_type |
Se CLOUD_SERVICE for "VM", o valor é definido como "VIRTUAL_MACHINE". |
DNS_DATA.HOSTNAME |
entity.entity.asset.hostname |
Mapeado diretamente a partir do campo DNS_DATA.HOSTNAME . |
EC2_INSTANCE_ID |
entity.relations.entity.resource.product_object_id |
Mapeado diretamente a partir do campo EC2_INSTANCE_ID . |
ID |
entity.entity.asset.product_object_id |
Mapeado diretamente a partir do campo ID . |
IP |
entity.entity.asset.ip |
Mapeado diretamente a partir do campo IP . |
METADATA.AZURE.ATTRIBUTE[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Mapeado diretamente a partir do campo METADATA.AZURE.ATTRIBUTE[].NAME . |
METADATA.AZURE.ATTRIBUTE[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Mapeado diretamente a partir do campo METADATA.AZURE.ATTRIBUTE[].VALUE . |
OS |
entity.entity.asset.platform_software.platform |
Se OS contiver "windows" (não é sensível a maiúsculas e minúsculas), o valor é definido como "WINDOWS". |
TAGS.TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Mapeado diretamente a partir 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 registo não processado. Codificado de forma rígida para "ASSET". Codificado de forma rígida para "QUALYS ASSET CONTEXT". Codificado de forma rígida para "QUALYS ASSET CONTEXT". Codificado de forma rígida para "RESOURCE". Codificado de forma rígida como "MEMBER". Copiado do campo create_time do registo não processado. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.