Mapa da aula
Aula 31 publicada. Mapa, exemplo, EX091.
flowchart TD
N0["31.1 Triagem estática"]
N1["31.2 Strings"]
N2["Laboratório — strings de um blob sintético"]
N3["31.3 Leitura do resultado"]
N4["31.4 Pivotagem"]
N5["31.5 Quando escalar"]
N6["31.6 Manuseio seguro"]
N7["31.7 Relato"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX091"]
Desenho lógico
flowchart LR
N0["31.1 Triagem estática"]
N1["31.2 Strings"]
N2["Laboratório — strings de um blob sintético"]
N3["31.3 Leitura do resultado"]
N4["31.4 Pivotagem"]
N5["31.5 Quando escalar"]
N6["31.6 Manuseio seguro"]
N7["31.7 Relato"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX091"]
[31.1 Triagem estática]
|
v
[31.2 Strings]
|
v
[Laboratório — strings de um blob sintético]
|
v
[31.3 Leitura do resultado]
|
v
[31.4 Pivotagem]
|
v
[31.5 Quando escalar]
|
v
[31.6 Manuseio seguro]
|
v
[31.7 Relato]
|
v
[Exemplo resolvido] --> [Exercício EX091]
Objetivos de aprendizagem
Você vai (1) fazer uma triagem estática segura de um arquivo suspeito; (2) extrair strings; (3) relacionar as strings com outras evidências; (4) saber quando passar o caso a uma análise especializada.
31.1 Triagem estática
A análise estática examina um arquivo sem executá-lo. Sikorski e Honig (2012) começam por hashes, tipo de arquivo, strings e cabeçalhos. Os estudantes fazem isso apenas com amostras sintéticas, no laboratório isolado. A triagem responde a perguntas rápidas que definem o que vem a seguir: o arquivo é um executável, ele já é conhecido pelo hash, contém indicadores óbvios, como domínios? Para update.dll, o hash coincidiu com uma entrada de inteligência de ameaças e o cabeçalho confirmou um executável do Windows. A etapa das strings, mostrada no laboratório, deu as pistas que ligaram o arquivo ao domínio de download e à run key, tudo sem executar uma única instrução.
31.2 Strings
Sequências imprimíveis dentro de um binário podem revelar domínios, caminhos do registro, mensagens e user-agents. São pistas: empacotadores e cifragem podem esconder strings, e os autores podem plantar strings enganosas. Como as strings podem ser plantadas, cada uma é tratada como uma pista a conferir com outras evidências. Um domínio encontrado nas strings só significa algo quando o log do proxy mostra o host contatando-o. Se update.dll estivesse empacotado, a etapa das strings poderia devolver pouco além de nomes de bibliotecas, o que já seria em si uma constatação indicando a necessidade de análise especializada. Leah registra o comprimento mínimo usado, seis caracteres aqui, para que o resultado possa ser reproduzido.
Laboratório — strings de um blob sintético
"""Extract printable ASCII strings (>=6 chars) from a synthetic blob."""
import re
blob = (b"\x00\x13MZ\x90" + b"\x00" * 20 + b"cdn-update.example.org\x00\x7f\x01"
+ b"Software\\Synthetic\\Run\x00\x02\x03" + b"\xff" * 8 + b"user-agent: SampleBot/1.0\x00")
for s in re.findall(rb"[\x20-\x7e]{6,}", blob):
print(s.decode())
Execute com python3 lab_strings.py. Saída verificada:
cdn-update.example.org
Software\Synthetic\Run
user-agent: SampleBot/1.0
31.3 Leitura do resultado
O blob sintético traz o marcador MZ do formato executável (aqui, dois bytes depois do início; um executável real do Windows começa por ele) e produz três strings de seis ou mais caracteres: cdn-update.example.org, Software\Synthetic\Run e user-agent: SampleBot/1.0. O domínio coincide com o indicador de download; o caminho em estilo de registro lembra o local de persistência; o user-agent dá um novo indicador a buscar nos logs do proxy. O caminho do registro na amostra é sintético e não coincide exatamente com a run key encontrada na ws-114, o que mostra por que as strings são comparadas com os artefatos em vez de aceitas pelo valor de face.
31.4 Pivotagem
Buscar nos logs do proxy o user-agent "SampleBot/1.0" em todos os hosts testa se outras máquinas executam a mesma amostra — mesmo que tenham contatado domínios diferentes. Um pivô usa uma constatação para buscar outras. Se o atacante tivesse mandado outros hosts para um domínio de download diferente, a busca pelo domínio não os encontraria, mas a mesma amostra ainda enviaria o mesmo user-agent. O exemplo resolvido mostra o resultado: só a ws-114. Leah registra o pivô como uma busca separada, com seu próprio intervalo de tempo e contagem, para que os leitores vejam que foi um teste distinto da P4, e não uma repetição da busca por domínio.
31.5 Quando escalar
Entender o comportamento completo pode exigir análise dinâmica ou engenharia reversa feitas por especialistas num laboratório isolado. Os estudantes registram o que a triagem estática mostra e passam a amostra adiante. Saber onde termina a própria competência faz parte do método. A triagem estática de Leah responde se update.dll é executável, conhecido e ligado aos indicadores; ela não consegue dizer que dados a DLL poderia coletar ou enviar. Registrar esse limite e passar a amostra aos especialistas mantém o laudo exato. A resposta à P2 no Laboratório II reflete isso: persistência demonstrada, comportamento completo pendente.
31.6 Manuseio seguro
As amostras ficam em arquivos compactados protegidos na VM isolada; nenhuma execução fora de sandboxes aprovadas. Mesmo uma amostra sintética é tratada como se fosse real, para que o hábito já exista quando aparecerem amostras reais. A senha do arquivo compactado segue a convenção do laboratório, para que outros analistas possam abri-lo na sandbox. Cada transferência da amostra é registrada como qualquer evidência. Se um arquivo compactado tivesse de sair do laboratório, iria apenas para um serviço de análise aprovado, com a transferência registrada.
31.7 Relato
As strings são relatadas como "presentes no arquivo", não como prova de comportamento. Uma string como um domínio mostra que o arquivo contém aquele texto; não mostra que o programa o contata, nem quando. O laudo pareia cada string com qualquer evidência que a corrobore, como o GET de /a.bin em cdn-update.example.org registrado pelo proxy às 09:31:02. As strings sem corroboração são listadas como pistas não confirmadas, para que os leitores não confundam presença com comportamento comprovado. A string do user-agent é relatada do mesmo modo até que a busca de pivô a confirme.
Exemplo resolvido
A busca pelo user-agent no log completo do proxy devolve só a ws-114, de forma compatível com a busca de indicadores anterior. Leah registra o pivô e o resultado e acrescenta o user-agent à lista compartilhada de indicadores.
Caso sintético. O blob é sintético, não é malware real.
Erros e limites
A presença de uma string não significa que o código a usa; o comportamento precisa ser confirmado por análises adicionais.
Exercícios
- EX091 — Strings do laboratório. Liste as três strings e um uso para cada uma.
Mostrar critérios de avaliação
Rubrica: 3 = domínio (coincide com o IOC), caminho Run (persistência), user-agent (nova busca); 2 = duas; 1 = uma; 0 = nada. - EX092 — Cautela com strings. Por que as strings são apenas pistas?
Mostrar critérios de avaliação
Rubrica: 3 = empacotamento esconde, autores plantam, presença ≠ uso; 2 = parcial; 1 = sempre confiáveis; 0 = nada. - EX093 — Pivô pelo user-agent. O que a busca pelo user-agent testa?
Mostrar critérios de avaliação
Rubrica: 3 = outros hosts executando a mesma amostra mesmo com domínios diferentes; 2 = parcial; 1 = nada; 0 = sem resposta.
Síntese
A triagem estática segura produz pistas e novos indicadores; afirmações sobre comportamento exigem análise mais profunda.
Continue estudando — capítulo 31 de 40
← Capítulo 30 (rascunho) · Índice de capítulos do curso · Capítulo 32 (rascunho) →