Recolha registos da área 1

Compatível com:

Este documento explica como carregar registos do Area 1 Email Security (da Cloudflare) para o Google Security Operations através do AWS S3. O analisador processa os registos no formato JSON. Extrai campos relevantes da estrutura JSON aninhada, mapeia-os para o modelo de dados unificado (UDM) e enriquece os dados com informações geográficas e detalhes de segurança, como hashes e eliminação de anexos.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps
  • Um anfitrião Windows 2016 ou posterior, ou um anfitrião Linux com systemd
  • Se estiver a ser executado através de um proxy, as portas da firewall estão abertas
  • Acesso privilegiado à segurança de email da Área 1 (da Cloudflare)

Configure o AWS IAM e o contentor do S3

  1. Crie um contentor do Amazon S3 seguindo este manual do utilizador: Criar um contentor
  2. Inicie sessão na consola da AWS.
  3. Aceda a S3 > Criar contentor.
  4. Introduza um nome para o contentor (por exemplo, area1-security-logs).
  5. Deixe as outras predefinições (ou configure a encriptação e o controlo de versões, se necessário).
  6. Clique em Criar.
  7. Guarde o Nome e a Região do contentor para referência futura.
  8. Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
  9. Selecione o utilizador criado.
  10. Selecione o separador Credenciais de segurança.
  11. Clique em Criar chave de acesso na secção Chaves de acesso.
  12. Selecione Serviço de terceiros como Exemplo de utilização.
  13. Clicar em Seguinte.
  14. Opcional: adicione uma etiqueta de descrição.
  15. Clique em Criar chave de acesso.
  16. Clique em Transferir ficheiro CSV e armazene a chave de acesso e a chave de acesso secreta para referência futura.
  17. Clique em Concluído.
  18. Selecione o separador Autorizações.
  19. Em Políticas de autorizações, clique em Adicionar autorizações.
  20. Selecione Anexar políticas diretamente.
  21. Pesquise a política AmazonS3FullAccess.
  22. Selecione a política.
  23. Clicar em Seguinte.
  24. Clique em Adicionar autorizações.

Obtenha credenciais da API Area 1

  1. Inicie sessão no painel de controlo da Area 1 Security (Cloudflare).
  2. Aceda a Definições > Acesso à API.
  3. Gere a chave da API (token).
  4. Copie e guarde a chave num local seguro.

Configure os pacotes Python necessários

  1. Inicie sessão no anfitrião de recolha de registos (por exemplo, uma VM da AWS) e execute o seguinte para configurar as credenciais da AWS:

    pip install boto3 requests
    aws configure
    

Crie o script Area 1 Log Puller

  1. Crie o seguinte ficheiro introduzindo sudo vi area1_to_s3.py e, de seguida, copie o seguinte código:

    • Ajuste o seguinte:
    #!/usr/bin/env python3
    import os
    import requests
    import boto3
    import datetime
    import json
    
    # Configuration
    AREA1_API_TOKEN = os.environ.get("AREA1_API_TOKEN")  # Load securely from env
    AWS_PROFILE = os.environ.get("AWS_PROFILE", None)    # Optional, for named profiles
    S3_BUCKET_NAME = "area1-security-logs"
    LOG_TYPE = "events"
    
    # Time range
    end_time = datetime.datetime.utcnow()
    start_time = end_time - datetime.timedelta(days=1)
    
    def fetch_area1_logs():
        url = f"https://api.area1security.com/v1/{LOG_TYPE}"
        headers = {
            "Authorization": f"Bearer {AREA1_API_TOKEN}",
            "Accept": "application/json"
        }
        params = {
            "startDate": start_time.strftime("%Y-%m-%dT%H:%M:%SZ"),
            "endDate": end_time.strftime("%Y-%m-%dT%H:%M:%SZ")
        }
        response = requests.get(url, headers=headers, params=params)
        response.raise_for_status()
        return response.json()
    
    def upload_to_s3(data):
        filename = f"area1_{LOG_TYPE}_{start_time.strftime('%Y%m%d')}.json"
    
        session = boto3.Session(profile_name=AWS_PROFILE) if AWS_PROFILE else boto3.Session()
        s3 = session.client("s3")
    
        s3.put_object(
            Bucket=S3_BUCKET_NAME,
            Key=f"logs/{filename}",
            Body=json.dumps(data).encode("utf-8"),
            ContentType="application/json"
        )
        print(f"[✓] Uploaded {filename} to s3://{S3_BUCKET_NAME}/logs/")
    
    if __name__ == "__main__":
        logs = fetch_area1_logs()
        upload_to_s3(logs)
    
  2. Guardar e sair vi: clique em esc e, de seguida, escreva :wq.

Armazene as variáveis de ambiente

  1. Crie um ficheiro seguro para armazenar variáveis de ambiente em /etc/area1.env (ou /home/user/.area1.env)

    export AREA1_API_TOKEN="your_actual_area1_api_token"
    export AWS_PROFILE="<your_aws_programmatic_username>"
    
  2. Certifique-se de que o ficheiro está seguro:

    chmod 600 /etc/area1.env
    

Execute e teste o script

  1. Execute o seguinte guião:

    python3 area1_to_s3.py
    
  2. Deve ver:

    Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
    

Automatize com o Cron

  1. Crie um script de wrapper para o Cron executando o comando sudo vi /usr/local/bin/run_area1.sh e, em seguida, copie o seguinte código:

    #!/usr/bin/env bash
    set -euo pipefail
    
    source /etc/area1.env
    /usr/bin/python3 /opt/scripts/area1_to_s3.py
    
  2. Torne o ficheiro executável:

    chmod +x /usr/local/bin/run_area1.sh
    
  3. Definida para ser executada diariamente às 01:00 UTC:

    crontab -e
    0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
    

Configure feeds

Existem dois pontos de entrada diferentes para configurar feeds na plataforma Google SecOps:

  • Definições do SIEM > Feeds
  • Content Hub > Pacotes de conteúdo

Configure feeds a partir de Definições do SIEM > 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, Area1 Logs).
  5. Selecione Amazon S3 como o Tipo de origem.
  6. Selecione Area1 Security como o Tipo de registo.
  7. Clicar em Seguinte.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • Região: a região onde o contentor do Amazon S3 está localizado.
    • URI do S3: o URI do contentor (o formato deve ser: s3://<your-log-bucket-name>). Substitua o seguinte:
      • your-log-bucket-name: o nome do segmento.
    • O URI é um: selecione Diretório que inclui subdiretórios.
    • Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
    • ID da chave de acesso: a chave de acesso do utilizador com acesso ao contentor do S3.
    • Chave de acesso secreta: a chave secreta do utilizador com acesso ao contentor do S3.
  9. Clicar em Seguinte.

  10. Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.

Configure feeds a partir do centro de conteúdo

Especifique valores para os seguintes campos:

  • Região: a região onde o contentor do Amazon S3 está localizado.

    • URI do S3: o URI do contentor (o formato deve ser: s3://<your-log-bucket-name>). Substitua o seguinte:
      • your-log-bucket-name: o nome do segmento.
    • O URI é um: selecione Diretório que inclui subdiretórios.
    • Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
    • ID da chave de acesso: a chave de acesso do utilizador com acesso ao contentor do S3.
    • Chave de acesso secreta: a chave secreta do utilizador com acesso ao contentor do S3.§

Opções avançadas

  • Nome do feed: um valor pré-preenchido que identifica o feed.
  • Tipo de origem: método usado para recolher registos no Google SecOps.
  • Espaço de nomes do recurso: espaço de nomes associado ao feed.
  • Etiquetas de carregamento: etiquetas aplicadas a todos os eventos deste feed.

Tabela de mapeamento do UDM

Campo de registo Mapeamento de UDM Lógica
alert_id security_result.rule_id O valor é retirado do campo alert_id.
alert_reasons security_result.description O valor é retirado do campo alert_reasons.
attachments.att_size security_result.about.file.size O valor é retirado do campo attachments.att_size e convertido num número inteiro sem sinal.
attachments.disposition security_result.about.user.attribute.labels.value O valor é retirado do campo attachments.disposition.
attachments.extension security_result.about.file.mime_type O valor é retirado do campo attachments.extension.
attachments.md5 security_result.about.file.md5 O valor é retirado do campo attachments.md5.
attachments.name security_result.about.file.full_path O valor é retirado do campo attachments.name.
attachments.sha1 security_result.about.file.sha1 O valor é retirado do campo attachments.sha1.
attachments.sha256 security_result.about.file.sha256 O valor é retirado do campo attachments.sha256.
attachments.ssdeep security_result.about.file.ssdeep O valor é retirado do campo attachments.ssdeep.
delivery_mode security_result.detection_fields.value O valor é retirado do campo delivery_mode.
envelope_from principal.user.email_addresses, network.email.from O valor é retirado do campo envelope_from.
envelope_to network.email.to, target.user.email_addresses O valor é retirado do campo envelope_to.
final_disposition security_result.category_details O valor é retirado do campo final_disposition.
message_id metadata.product_log_id O valor é retirado do campo message_id após a remoção dos carateres "<" e ">".
replyto network.email.bounce_address O valor é retirado do campo replyto.
smtp_helo_server_ip principal.ip O valor é retirado do campo smtp_helo_server_ip.
smtp_helo_server_ip_as_name principal.location.name O valor é retirado do campo smtp_helo_server_ip_as_name.
smtp_helo_server_ip_as_number principal.asset_id O valor é retirado do campo smtp_helo_server_ip_as_number e é precedido de asset_id:.
smtp_helo_server_ip_geo principal.location.country_or_region, principal.location.state, principal.location.city O valor é extraído do campo smtp_helo_server_ip_geo através de um padrão Grok.
smtp_helo_server_name principal.administrative_domain O valor é retirado do campo smtp_helo_server_name.
fonte metadata.vendor_name O valor é retirado do campo source. Se o campo estiver vazio, o valor é definido como area1security.
assunto network.email.subject O valor é retirado do campo subject.
tempo metadata.event_timestamp O valor é retirado do campo time e convertido numa indicação de tempo.
metadata.event_type O valor é definido como EMAIL_TRANSACTION.
metadata.product_name O valor é definido como AREA1.
metadata.log_type O valor é definido como AREA1.
security_result.about.user.attribute.labels.key O valor é definido como disposition.
security_result.category O valor é definido como SOFTWARE_MALICIOUS.
security_result.detection_fields.key O valor é definido como delivery_mode.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.