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.
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.
# 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 -rnimport 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ógicaTransforme 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.
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: mediumHá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
- Threat huntingdepende deAnálise de logs e construção de uma linha do tempo
- Análise de logs e construção de uma linha do tempodelimita o escopo deTriagem, delimitação de escopo e contenção
atualizado em 14/10/2026 · fontes para aprofundar · reportar erro
em outros domínios
- Telemetria de borda e aplicaçãosecopssó dá para reconstruir o que foi coletado
Desbloqueia
teste o que entendeu
Carregando perguntas…