OpenCyber Academy
Graduação · Capítulo 23 · Português
Código do curso: OCA-109Capítulo 23: OCA-109-C023

Capítulo 23 — Perícia digital e análise de malware: métodos I

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Mapa da aula

Aula 23 publicada. Mapa, exemplo, EX067.

flowchart TD
  N0["23.1 Indicadores"]
  N1["23.2 Busca"]
  N2["Laboratório — busca de indicadores"]
  N3["23.3 Leitura do resultado"]
  N4["23.4 Qualidade dos indicadores"]
  N5["23.5 Delimitação do escopo"]
  N6["23.6 Registro das buscas"]
  N7["23.7 Compartilhamento de indicadores"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX067"]

Desenho lógico

flowchart LR
  N0["23.1 Indicadores"]
  N1["23.2 Busca"]
  N2["Laboratório — busca de indicadores"]
  N3["23.3 Leitura do resultado"]
  N4["23.4 Qualidade dos indicadores"]
  N5["23.5 Delimitação do escopo"]
  N6["23.6 Registro das buscas"]
  N7["23.7 Compartilhamento de indicadores"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX067"]
[23.1 Indicadores]
    |
    v
[23.2 Busca]
    |
    v
[Laboratório — busca de indicadores]
    |
    v
[23.3 Leitura do resultado]
    |
    v
[23.4 Qualidade dos indicadores]
    |
    v
[23.5 Delimitação do escopo]
    |
    v
[23.6 Registro das buscas]
    |
    v
[23.7 Compartilhamento de indicadores]
    |
    v
[Exemplo resolvido] --> [Exercício EX067]

Objetivos de aprendizagem

Você vai (1) buscar indicadores de comprometimento em logs; (2) delimitar o escopo de um incidente a partir das ocorrências de indicadores; (3) entender a qualidade dos indicadores; (4) registrar as buscas de forma reproduzível.

23.1 Indicadores

Indicadores de comprometimento são valores observáveis ligados a atividade maliciosa: domínios, endereços IP, hashes de arquivos, caminhos do registro. Da ws-114 a equipe tem dois domínios: login-portal.example.net (página de phishing) e cdn-update.example.org (download da DLL). Os dois domínios vêm de etapas diferentes do ataque: a página de phishing, do histórico do navegador e do proxy; o domínio de download, do proxy e da análise estática de update.dll. O hash do arquivo e o caminho da run key são outros indicadores vindos do endpoint. Cada um é registrado com sua fonte e o horário em que foi visto pela primeira vez.

23.2 Busca

O log do proxy é pesquisado em busca de qualquer host que tenha contatado algum dos domínios. A correspondência exata no campo de host evita falsos acertos causados por cadeias parecidas nos caminhos. Uma busca por substring de example.net também encontraria hosts sem relação que compartilham o domínio pai, e poderia encontrar o domínio onde ele aparece só dentro do caminho de uma URL. A correspondência exata no campo de host evita os dois problemas. A contrapartida é que subdomínios usados pelo atacante, como outro prefixo no mesmo domínio, passariam despercebidos, por isso Leah faz uma segunda busca, mais ampla, e revisa à mão os resultados adicionais.

Laboratório — busca de indicadores

"""Match synthetic proxy-log lines against an indicator list."""
iocs = {"login-portal.example.net", "cdn-update.example.org"}
log = ["09:13:55 ws-114 mail.example GET /inbox",
       "09:14:30 ws-114 login-portal.example.net POST /verify",
       "09:31:02 ws-114 cdn-update.example.org GET /a.bin",
       "09:40:11 ws-207 intranet.example GET /library"]
hits = [l for l in log if l.split()[2] in iocs]
for h in hits: print("HIT", h)
print(f"{len(hits)} of {len(log)} lines matched; hosts: {sorted({h.split()[1] for h in hits})}")

Execute com python3 lab_ioc.py. Saída verificada:

HIT 09:14:30 ws-114 login-portal.example.net POST /verify
HIT 09:31:02 ws-114 cdn-update.example.org GET /a.bin
2 of 4 lines matched; hosts: ['ws-114']

23.3 Leitura do resultado

Duas das quatro linhas sintéticas correspondem: o POST da ws-114 para a página de phishing às 09:14:30 e o GET de /a.bin no domínio de download às 09:31:02. Só a ws-114 aparece, então nesta amostra nenhum outro host contatou os indicadores. No log completo, a mesma busca é a base para responder à P4. A linha da ws-207 é um negativo útil: um host ativo no mesmo período que não correspondeu, o que mostra que a busca é seletiva em vez de encontrar tudo. A correspondência exata no terceiro campo depende de o formato do log ser o mesmo em todas as linhas; uma linha com menos de três campos faria esta versão simples parar com um erro de índice, e é por isso que o parser dos capítulos de programação conta as linhas malformadas.

23.4 Qualidade dos indicadores

Domínios e IPs mudam rapidamente e podem ser compartilhados com serviços legítimos; os hashes são exatos, mas frágeis. Indicadores são pistas a conferir, não veredictos. Para a ws-114, o hash de update.dll é exato, mas não encontraria uma variante recompilada; o domínio de download poderia ser trocado pelo atacante em poucas horas. Cada indicador, portanto, leva a uma pergunta, e não a uma conclusão. Um host que contatou cdn-update.example.org é examinado em busca de uma run key e da DLL antes que alguém o chame de infectado.

23.5 Delimitação do escopo

Se outros hosts tivessem correspondido, cada um viraria uma pista com sua própria coleta de evidências. Cada pista seguiria o mesmo padrão usado na ws-114: autorização, inventário, preservação, análise. Priorizá-las pelo quão recentemente contataram os indicadores e pela sensibilidade dos dados que guardam definiria a ordem. Neste caso a busca encontrou só a ws-114, o que manteve a investigação pequena, mas o método escala se o resultado tivesse sido outro. As notas de Leah registram que a busca foi feita, então a ausência de outros hosts é uma constatação, não uma suposição.

23.6 Registro das buscas

Termos de busca, dados pesquisados, intervalo de tempo e contagens de resultados são anotados para que um revisor possa repetir a busca. Um registro de busca da ws-114 poderia dizer: exportação do log do proxy das 09:00 às 12:00, correspondência exata de host para dois domínios, duas ocorrências, ambas da ws-114. Sem o intervalo de tempo, um leitor poderia supor que o dia inteiro foi pesquisado. Registrar a contagem de linhas pesquisadas, além das ocorrências, mostra que a busca rodou na exportação completa, e não numa amostra truncada. O registro vai para o arquivo do caso, ao lado do hash da exportação.

23.7 Compartilhamento de indicadores

Com aprovação, o escritório de segurança compartilha indicadores com instituições parceiras por canais confiáveis. O compartilhamento ajuda outras instituições a conferir seus próprios logs em busca da mesma campanha, e elas podem devolver indicadores que a universidade ainda não viu. A aprovação importa porque os indicadores podem revelar informações sobre o incidente e sobre os sistemas da universidade. Os itens compartilhados se limitam ao que os outros precisam, como domínios e hashes de arquivos, sem nomes nem nomes de hosts internos, e cada compartilhamento é registrado com a data e o destinatário.

Pivotagem

Uma ocorrência de um indicador pode revelar outros: o tamanho da resposta e o horário do download de /a.bin podem coincidir com outras requisições, e as strings da DLL podem nomear domínios adicionais. Leah registra cada pivô e sua fonte.

Exemplo resolvido

O log completo do proxy (09:00–12:00, 48.210 linhas) é pesquisado; só a ws-114 corresponde. Leah escreve: "Nenhum outro host no log do proxy contatou os dois domínios indicadores entre 09:00 e 12:00 UTC." Ela acrescenta que hosts que usam outros caminhos de saída não apareceriam.

Caso sintético. Os logs são gerados pelo script do laboratório.

Erros e limites

Uma busca negativa é limitada pelos dados pesquisados; ela não prova que nenhum outro contato ocorreu.

Exercícios

  • EX067 — Ocorrências do laboratório. Quais linhas corresponderam, e de quais hosts?
    Mostrar critérios de avaliação
    Rubrica: 3 = POST das 09:14:30, GET das 09:31:02; só a ws-114; 2 = parcial; 1 = errado; 0 = nada.
  • EX068 — Limite do negativo. Como deve ser redigido o resultado negativo do log completo?
    Mostrar critérios de avaliação
    Rubrica: 3 = limitado pelo log e pelo intervalo; outros caminhos não cobertos; 2 = parcial; 1 = nenhum contato ocorreu; 0 = nada.
  • EX069 — Fragilidade do hash. Por que os indicadores de hash são frágeis?
    Mostrar critérios de avaliação
    Rubrica: 3 = a alteração de um byte gera novo hash; variantes não encontradas; 2 = parcial; 1 = algoritmo fraco; 0 = nada.

Síntese

As buscas de indicadores delimitam rapidamente os incidentes quando são exatas, registradas e honestamente limitadas.

Continue estudando — capítulo 23 de 40

← Capítulo 22 (rascunho) · Índice de capítulos do curso · Capítulo 24 (rascunho) →

Respostas comentadas

EX067. O POST das 09:14:30 para login-portal.example.net e o GET de /a.bin em cdn-update.example.org às 09:31:02; só a ws-114 correspondeu.

EX068. "Nenhum outro host no log do proxy contatou os indicadores entre 09:00 e 12:00 UTC; o tráfego que saiu por outros caminhos não foi coberto."

EX069. Alterar um único byte gera um hash completamente diferente, então variantes levemente modificadas não são encontradas.