Coletar registros de contexto de recursos da Qualys

Compatível com:

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 do 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 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. Faça login no console Google Cloud .
  2. Acesse APIs e serviços > Biblioteca.
  3. Procure e ative as seguintes APIs:
    • API Cloud Functions
    • API Cloud Scheduler
    • Cloud Pub/Sub (necessário para o Cloud Scheduler invocar funções)

Crie um Google Cloud bucket do Cloud Storage

  1. Faça login no console Google Cloud .
  2. Acesse a página Buckets do Cloud Storage.

    Acessar buckets

  3. Clique em Criar.

  4. 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 selecione um modelo de controle de acesso para os objetos do bucket.
    • Classe de armazenamento: escolha com base nas suas necessidades (por exemplo, Padrão).
  5. Clique em Criar.

Criar uma conta de serviço do Google Cloud

  1. Acesse IAM e administrador > Contas de serviço.
  2. Crie uma nova conta de serviço.
  3. Dê um nome descritivo a ele (por exemplo, qualys-user).
  4. Conceda à conta de serviço o papel Administrador de objetos do Storage no bucket do Cloud Storage criado na etapa anterior.
  5. Conceda à conta de serviço o papel Invocador do Cloud Functions.
  6. Crie uma chave SSH para a conta de serviço.
  7. 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

  1. Faça login no console da Qualys.
  2. Acesse Usuários.
  3. Clique em Novo > Usuário.
  4. Insira as Informações gerais necessárias para o usuário.
  5. Selecione a guia Função do usuário.
  6. Verifique se a caixa de seleção Acesso à API está marcada.
  7. 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

  1. Faça login no console da Qualys.
  2. Acesse Ajuda > Sobre.
  3. Role a tela para ver essas informações em "Central de operações de segurança (SOC)".
  4. Copie o URL da API do Qualys.

Configurar a função do Cloud

  1. Acesse Cloud Functions no console do Google Cloud .
  2. Clique em Criar função.
  3. 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!"
    
    ```
    
  4. Clique em Implantar depois de concluir a configuração.

Configurar o Cloud Scheduler

  1. Acesse o Cloud Scheduler no console Google Cloud .
  2. Clique em Criar job.
  3. 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.
  4. Crie o job.

Configurar feeds

Para configurar um feed, siga estas etapas:

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed, por exemplo, Registros de contexto de recursos da Qualys.
  5. Selecione Google Cloud Storage V2 como o Tipo de origem.
  6. Selecione Contexto do ativo da Qualys como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • URI do GCS: o URI do Cloud Storage.
    • Opções de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência.
  9. Clique em Próxima.

  10. 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
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 de 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. Fixado no código como "ASSET". Fixado no código como "QUALYS ASSET CONTEXT". Fixado no código como "QUALYS ASSET CONTEXT". Fixado no código como "RESOURCE". Fixado no código 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.