AWS Admin

GuardDuty e Macie: Detecção de Ameaças e Dados Sensíveis na Prática Já leu

Introdução ao GuardDuty e Macie O AWS GuardDuty e o Amazon Macie são serviços de segurança gerenciados que funcionam como seus "olhos" na nuvem. GuardDuty detecta atividades maliciosas e não autorizadas em sua infraestrutura AWS, analisando fluxos de rede, logs de DNS e eventos de API. Macie, por sua vez, é especializado em descobrir e proteger dados sensíveis como informações de identificação pessoal (PII), dados de cartão de crédito e segredos de negócio usando aprendizado de máquina. Para profissionais que gerenciam ambientes AWS em produção, estes serviços são não-negociáveis. Não se trata apenas de compliance — trata-se de reduzir drasticamente o tempo entre detecção e resposta a incidentes. Enquanto você dorme, eles trabalham 24/7 analisando bilhões de eventos. Configuração Prática do GuardDuty Ativação e Primeiros Passos Ativar GuardDuty é simples, mas sua configuração estratégica é onde reside o valor. Você pode ativá-lo via AWS Management Console ou programaticamente com Boto3: Comece com frequência de publicação de 15 minutos em desenvolvimento

Introdução ao GuardDuty e Macie

O AWS GuardDuty e o Amazon Macie são serviços de segurança gerenciados que funcionam como seus "olhos" na nuvem. GuardDuty detecta atividades maliciosas e não autorizadas em sua infraestrutura AWS, analisando fluxos de rede, logs de DNS e eventos de API. Macie, por sua vez, é especializado em descobrir e proteger dados sensíveis como informações de identificação pessoal (PII), dados de cartão de crédito e segredos de negócio usando aprendizado de máquina.

Para profissionais que gerenciam ambientes AWS em produção, estes serviços são não-negociáveis. Não se trata apenas de compliance — trata-se de reduzir drasticamente o tempo entre detecção e resposta a incidentes. Enquanto você dorme, eles trabalham 24/7 analisando bilhões de eventos.

Configuração Prática do GuardDuty

Ativação e Primeiros Passos

Ativar GuardDuty é simples, mas sua configuração estratégica é onde reside o valor. Você pode ativá-lo via AWS Management Console ou programaticamente com Boto3:

import boto3

guardduty_client = boto3.client('guardduty', region_name='us-east-1')

# Criar um detector
response = guardduty_client.create_detector(
    Enable=True,
    FindingPublishingFrequency='FIFTEEN_MINUTES'
)

detector_id = response['DetectorId']
print(f"GuardDuty detector criado: {detector_id}")

# Listar detectors
detectors = guardduty_client.list_detectors()
print(f"Detectors ativos: {detectors['DetectorIds']}")

Comece com frequência de publicação de 15 minutos em desenvolvimento — isso oferece um bom balanço entre latência e volume de dados. Em produção, ajuste conforme sua capacidade de resposta.

Interpretando Findings do GuardDuty

GuardDuty classifica ameaças por severidade e tipo. Cada finding contém contexto crucial: qual recurso, quando, como e por quê. Aqui está como recuperar e filtrar findings:

# Obter findings com severidade Alta
findings_response = guardduty_client.list_findings(
    DetectorId=detector_id,
    FindingCriteria={
        'Criterion': {
            'severity': {
                'Gte': 7
            },
            'updatedAt': {
                'Gte': 1609459200000  # timestamp em ms
            }
        }
    }
)

finding_ids = findings_response['FindingIds']

# Detalhar cada finding
if finding_ids:
    details = guardduty_client.get_findings(
        DetectorId=detector_id,
        FindingIds=finding_ids[:10]  # primeiros 10
    )

    for finding in details['Findings']:
        print(f"Tipo: {finding['Type']}")
        print(f"Severidade: {finding['Severity']}")
        print(f"Recurso: {finding['Resource']}")
        print(f"Descrição: {finding['Description']}\n")

Descoberta e Classificação de Dados Sensíveis com Macie

Ativação e Jobs de Descoberta

Macie requer que você execute jobs que scannem seus buckets S3. Diferente de GuardDuty (que é sempre ativo), Macie trabalha com jobs sob demanda ou agendados. A granularidade aqui importa: você pode direcionar buckets específicos e definir critérios de inclusão/exclusão:

import boto3
from datetime import datetime

macie_client = boto3.client('macie2', region_name='us-east-1')

# Ativar Macie (one-time)
macie_client.enable_macie()
print("Macie ativado")

# Criar job de descoberta
job_response = macie_client.create_classification_job(
    jobType='ONE_TIME',
    name=f'scan-sensitive-data-{datetime.now().strftime("%Y%m%d")}',
    description='Descobrir PII e dados de cartão de crédito',
    s3JobDefinition={
        'bucketDefinitions': [
            {
                'accountId': '123456789012',
                'buckets': ['meu-bucket-producao']
            }
        ],
        'scoping': {
            'includes': {
                'and': [
                    {
                        'simpleScopeTerm': {
                            'comparator': 'EQ',
                            'key': 'OBJECT_EXTENSION',
                            'values': ['csv', 'json', 'xlsx', 'txt']
                        }
                    }
                ]
            }
        }
    },
    samplingPercentage=100
)

job_id = job_response['jobId']
print(f"Job criado: {job_id}")

Analisando Descobertas de Macie

Uma vez que o job execute, Macie gera findings detalhados sobre quais dados sensíveis foram encontrados e onde. Você pode consultar isto programaticamente:

# Aguardar conclusão e recuperar findings (em produção, use eventos SNS)
findings = macie_client.list_findings(
    findingCriteria={
        'criterion': {
            'type': {
                'eq': ['SensitiveData:S3Object/Personal']
            },
            'classificationDetails.result.sensitiveData.category': {
                'eq': ['FINANCIAL_INFORMATION', 'PERSONAL_INFORMATION']
            }
        }
    },
    sortCriteria={
        'attributeName': 'severity',
        'orderBy': 'DESC'
    }
)

for finding_summary in findings['findings']:
    finding_id = finding_summary['id']

    # Detalhar cada finding
    detail = macie_client.get_finding(findingId=finding_id)

    print(f"S3 Object: {detail['s3Object']['bucket']['name']}/{detail['s3Object']['key']}")
    print(f"Dados Sensíveis: {detail['classificationDetails']['result']['sensitiveData']}")
    print(f"Severity: {detail['severity']['score']}\n")

Orquestração e Resposta Automática

Integrando com EventBridge e Lambda

Detectar ameaças é apenas metade da batalha. A verdadeira maturidade está em responder automaticamente. Use AWS EventBridge para disparar ações quando achados críticos surgem:

import json
import boto3

# Esta função Lambda é acionada por GuardDuty findings via EventBridge
def lambda_handler(event, context):
    """
    Exemplo: isolar instância EC2 comprometida automaticamente
    """

    detail = event['detail']

    # Filtrar apenas findings de severidade crítica
    if detail['severity'] < 7:
        return {'statusCode': 200, 'body': 'Severidade baixa, ignorando'}

    # Extrair informações
    finding_type = detail['type']
    resource_type = detail['resource']['resourceType']

    if resource_type == 'Instance':
        instance_id = detail['resource']['instanceDetails']['instanceId']
        region = detail['region']

        # Isolar a instância com SG restritivo
        ec2 = boto3.client('ec2', region_name=region)

        try:
            ec2.modify_instance_attribute(
                InstanceId=instance_id,
                Groups=['sg-isolation']  # SG sem saída
            )

            print(f"Instância {instance_id} isolada com sucesso")

            # Notificar time de segurança
            sns = boto3.client('sns')
            sns.publish(
                TopicArn='arn:aws:sns:region:account:security-alerts',
                Subject=f'CRÍTICO: {finding_type}',
                Message=f'Instância {instance_id} isolada devido a {finding_type}'
            )

        except Exception as e:
            print(f"Erro ao isolar instância: {e}")
            return {'statusCode': 500, 'body': str(e)}

    return {'statusCode': 200, 'body': 'Ação executada'}

Para conectar isso, crie uma regra EventBridge simples em Terraform ou CloudFormation que dispare quando GuardDuty publicar findings com severidade ≥ 7.

Conclusão

Dominar GuardDuty e Macie significa três coisas: primeiro, entender que detecção é contínua e deve ser automatizada — não é um relatório mensal, é um sistema vivo; segundo, que proteção de dados requer descoberta antes da proteção — Macie oferece visibilidade que a maioria das organizações não possui; e terceiro, que a detecção sem resposta é inútil — integre com EventBridge e Lambda para fechar o ciclo.

Comece pequeno: ative GuardDuty hoje, explore seus findings por uma semana, depois adicione Macie para um bucket crítico. A segurança é iterativa, e estes serviços crescem com sua maturidade.

Referências


Artigos relacionados