pular para o conteúdo
voltar ao mapa
técnica
etapa: detect
2 min de leitura

Análise de logs e construção de uma linha do tempo

Toda investigação termina como uma linha do tempo: primeiro acesso, o que tocaram, como se movimentaram, o que levaram. A qualidade dessa linha do tempo depende de timestamps limpos e bons pivôs.

SIEM (Splunk, Elastic, Sentinel)jqTimesketchSigmaCloudTrail / audit logsPlaso (log2timeline)

Comece com o tempo limpo

  • Converta todo timestamp para UTC antes de comparar qualquer coisa. Fusos horários e horário de verão causam a maioria dos erros em linhas do tempo.
  • Observe o desvio de relógio (clock skew): um host com o relógio errado desloca toda a sua história. Compare um evento compartilhado entre fontes para medir o deslocamento.
  • Registre a fonte, o campo e a resolução de tempo de cada evento; um log com resolução de apenas minutos não consegue ordenar eventos dentro do minuto.
  • Guarde cópias brutas e trabalhe nas cópias.

Pivoteamento

Uma investigação avança por pivoteamento: pegue um fato conhecido e pergunte o que mais o compartilha. Cada pivô estreita ou amplia o escopo.

  • De um IP para todas as contas que fizeram login a partir dele e todas as requisições que ele fez.
  • De uma conta para suas sessões, seus dispositivos, os recursos que tocou e as mudanças que fez.
  • De um host para seus processos pai e filho, conexões de rede e arquivos criados.
  • De um hash de arquivo para todos os hosts onde ele apareceu.
  • Do primeiro evento malicioso para trás: como o acesso começou?

Exemplo: uma identidade de nuvem comprometida

Extraia do CloudTrail, em ordem, tudo o que uma identidade fez e procure por primeiras vezes: um novo endereço de origem, uma nova região, uma chamada de API sensível.

cloudtrail-pivot.shbash
# todas as ações da identidade suspeita, em ordem de tempo
jq -r '.Records[]
  | select(.userIdentity.arn // "" | test("build-bot"))
  | [.eventTime, .eventName, .awsRegion, .sourceIPAddress, (.errorCode // "ok")] | @tsv' \
  cloudtrail/*.json | sort

# quais endereços de origem essa identidade usou?
jq -r '.Records[] | select(.userIdentity.arn // "" | test("build-bot")) | .sourceIPAddress' \
  cloudtrail/*.json | sort | uniq -c | sort -rn
merge_timeline.pypython
import csv, heapq
from datetime import datetime, timezone

def load(path, source, ts_field, fmt):
    with open(path, newline="") as f:
        for row in csv.DictReader(f):
            ts = datetime.strptime(row[ts_field], fmt).replace(tzinfo=timezone.utc)
            yield ts, source, row.get("message", "")

streams = [
    load("idp.csv", "idp", "time", "%Y-%m-%dT%H:%M:%SZ"),
    load("proxy.csv", "proxy", "ts", "%Y-%m-%d %H:%M:%S"),
]
for ts, source, msg in heapq.merge(*(sorted(s) for s in streams)):
    print(ts.isoformat(), source, msg)  # saída em ordem cronológica

Transforme achados em detecções

Quando você encontrar uma técnica usada pelo atacante, escreva uma regra para que ela seja pega da próxima vez. O Sigma é um formato neutro em relação a fornecedores que converte para muitas linguagens de consulta de SIEM.

suspicious-encoded-powershell.yml (Sigma)yaml
title: PowerShell iniciado com um comando codificado
status: experimental
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    Image|endswith: '\powershell.exe'
    CommandLine|contains:
      - ' -enc '
      - ' -EncodedCommand '
  condition: selection
falsepositives:
  - Algumas ferramentas de gerenciamento usam comandos codificados; estabeleça a linha de base antes
level: medium

Hábitos

  • Escreva a linha do tempo enquanto avança, com a evidência de cada linha.
  • Separe fatos de hipóteses e marque qual é qual.
  • Procure também a ausência de logs: uma lacuna pode ser a limpeza do atacante.
  • Mantenha uma lista de perguntas que você ainda não sabe responder e de logs que gostaria de ter; essa lista melhora o seu logging.

conexões no mapa

atualizado em 14/10/2026 · fontes para aprofundar · reportar erro

em outros domínios

Desbloqueia

teste o que entendeu

Carregando perguntas…