Recolha registos de contexto de recursos do Qualys

Compatível com:

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:

  1. Inicie sessão na Google Cloud consola.
  2. Aceda a APIs e serviços > Biblioteca.
  3. 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

  1. Inicie sessão na Google Cloud consola.
  2. Aceda à página Contentores do Cloud Storage.

    Aceda aos contentores

  3. Clique em Criar.

  4. 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).
  5. Clique em Criar.

Crie uma conta de serviço do Google Cloud

  1. Aceda a IAM e administrador > Contas de serviço.
  2. Crie uma nova conta de serviço.
  3. Atribua-lhe um nome descritivo (por exemplo, qualys-user).
  4. Conceda à conta de serviço a função de administrador de objetos de armazenamento no contentor do Cloud Storage que criou no passo anterior.
  5. Conceda à conta de serviço a função de invocador do Cloud Functions.
  6. Crie uma chave SSH para a conta de serviço.
  7. 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

  1. Inicie sessão na consola do Qualys.
  2. Aceda a Utilizadores.
  3. Clique em Novo > Utilizador.
  4. Introduza as informações gerais necessárias para o utilizador.
  5. Selecione o separador Função do utilizador.
  6. Certifique-se de que a caixa de verificação Acesso à API está selecionada para a função.
  7. 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

  1. Inicie sessão na consola do Qualys.
  2. Aceda a Ajuda > Acerca de.
  3. Desloque a página para ver estas informações em Centro de operações de segurança (SOC).
  4. Copie o URL da API Qualys.

Configure a função do Google Cloud

  1. Aceda ao Cloud Functions na Google Cloud consola.
  2. Clique em Criar função.
  3. 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!"
    
    ```
    
  4. Clique em Implementar após concluir a configuração.

Configure o Cloud Scheduler

  1. Aceda ao Cloud Scheduler na Google Cloud consola.
  2. Clique em Criar tarefa.
  3. 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.
  4. Crie o trabalho.

Configure feeds

Para configurar um feed, siga estes passos:

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na página seguinte, clique em Configurar um único feed.
  4. No campo Nome do feed, introduza um nome para o feed; por exemplo, Registos de contexto de recursos da Qualys.
  5. Selecione Google Cloud Storage V2 como Tipo de origem.
  6. Selecione Qualys Asset Context como o Tipo de registo.
  7. Clicar em Seguinte.
  8. 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.
  9. Clicar em Seguinte.

  10. 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.