Capítulo 3 — Programação I
Mapa da aula
Aula 03 publicada. Mapa, exemplo, EX007.
flowchart TD
N0["3.1 Por que analistas programam"]
N1["3.2 Tipos para inteligência"]
N2["3.3 Classificar valores"]
N3["3.4 Falha explícita"]
N4["3.5 Nenhuma coleta oculta"]
N5["Código legível"]
N6["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
N6 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX007"]
Desenho lógico
flowchart LR
N0["3.1 Por que analistas programam"]
N1["3.2 Tipos para inteligência"]
N2["3.3 Classificar valores"]
N3["3.4 Falha explícita"]
N4["3.5 Nenhuma coleta oculta"]
N5["Código legível"]
N6["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX007"]
[3.1 Por que analistas programam]
|
v
[3.2 Tipos para inteligência]
|
v
[3.3 Classificar valores]
|
v
[3.4 Falha explícita]
|
v
[3.5 Nenhuma coleta oculta]
|
v
[Código legível]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX007]
Objetivos de aprendizagem
Você vai (1) escrever funções em Python que limpam e classificam indicadores; (2) usar strings, listas, conjuntos e dicionários; (3) tratar entradas ruins de forma explícita; (4) manter os scripts livres de coleta pela rede.
3.1 Por que analistas programam
Os analistas recebem indicadores em e-mails, PDFs e planilhas. Scripts pequenos extraem, limpam e comparam esses indicadores mais depressa e com mais precisão do que copiar à mão. Aqui, programar é uma ferramenta de leitura e conferência, não de coleta. Amara escreve seu primeiro script para ler indicadores de uma planilha compartilhada pelo HSSC, remover duplicatas e compará-los com uma lista exportada do gateway de e-mail. Feita à mão, a comparação levava uma hora e deixou passar duas correspondências; o script leva segundos e dá a mesma resposta toda vez que roda.
3.2 Tipos para inteligência
Uma string guarda um indicador. Uma lista mantém a ordem, como eventos no tempo. Um conjunto remove duplicatas e permite a interseção — quais indicadores aparecem tanto nos nossos logs quanto no feed? Um dicionário associa um indicador a seus metadados: fonte, TLP, primeira observação. Escolher o tipo certo torna a pergunta fácil de responder. O script de Amara guarda os indicadores do feed em um conjunto, então a sobreposição com os logs do HCHT é uma única interseção, e mantém os metadados em um dicionário, então cada correspondência vem com sua fonte e seu rótulo TLP. Sem o rótulo, ela não saberia quais correspondências podem ser compartilhadas com outras equipes.
3.3 Classificar valores
Uma função simples decide se uma string parece um endereço IPv4, um domínio ou um hash. O módulo ipaddress da biblioteca padrão valida endereços; verificações de tamanho e de caracteres distinguem hashes SHA-256 (64 caracteres hexadecimais) de outras strings. Amara testa a função com exemplos de cada tipo e com casos traiçoeiros, como um domínio que contém dígitos ou um hash com letras maiúsculas. Um valor mal classificado poderia mandar um domínio para uma lista de bloqueio de endereços, onde não faria nada, enquanto a analista acreditava que ele estava bloqueado.
3.4 Falha explícita
Se um valor não se encaixa em nenhum tipo, retorne "unknown" e guarde-o para revisão. Adivinhar cria indicadores falsos que podem depois bloquear serviços legítimos. O script de Amara grava os valores desconhecidos em um arquivo separado, com a linha de onde vieram, para que ela possa conferi-los à mão. Muitos se revelam indicadores desarmados, como domínios com colchetes em volta dos pontos, que o script agora trata de forma explícita. A falha explícita transformou um erro silencioso em uma lista de melhorias e manteve indicadores falsos fora das listas de bloqueio.
3.5 Nenhuma coleta oculta
Os scripts deste curso leem apenas arquivos locais. Código que baixa páginas web, consulta serviços externos ou entra em plataformas está fora deste capítulo e exige termos, permissão e supervisão. Amara faz duas perguntas sobre o próprio trabalho: de onde vem cada entrada, e ela tinha permissão para usá-la? Quando uma fonte publica apenas uma página web, ela pede à mesa do HSSC um arquivo exportado em vez de acrescentar uma etapa de download ao script. Qualquer etapa de coleta é uma decisão separada de sua supervisora, com aprovação e registro próprios.
Código legível
Analistas compartilham scripts com colegas que precisam confiar na saída. Nomes de função claros, docstrings curtas e um pequeno teste com entradas conhecidas tornam um script revisável. Um teste que alimenta um hash válido, um hash truncado e um domínio mostra aos revisores exatamente como os casos de borda se comportam antes de o script tocar dados reais.
Exemplo resolvido
Amara recebe 40 valores colados de um PDF. Seu classificador rotula 18 domínios, 12 endereços IPv4, 7 hashes SHA-256 e 3 desconhecidos — dois eram hashes truncados e um, um domínio com um colchete perdido do desarmamento. Ela corrige o colchete, devolve os hashes truncados ao remetente e armazena 38.
Caso sintético. Os valores do PDF são inventados.
Erros e limites
Verificações de padrão confirmam a forma, não a malícia. Um domínio de aparência válida ainda pode ser um erro de digitação.
Exercícios
- EX007 — Escolha um tipo. Que tipo do Python encontra os indicadores presentes tanto no feed quanto nos logs do HCHT, e como? Rubrica: 3 = interseção de conjuntos (&); 2 = só conjunto; 1 = laço em lista sem remover duplicatas; 0 = nenhuma.
- EX008 — Forma do hash. Que forma tem um hash SHA-256 como texto? Rubrica: 3 = 64 caracteres hexadecimais; 2 = 64 caracteres; 1 = 32; 0 = nenhuma.
- EX009 — Valor truncado. O que Amara deve fazer com os dois hashes truncados? Rubrica: 3 = marcar como desconhecidos, não armazená-los como indicadores, avisar o remetente; 2 = descartar; 1 = completar e armazenar; 0 = nenhuma.
Síntese
Use o tipo de dado certo, valide a forma, falhe de forma explícita e mantenha os scripts locais.
Continue estudando — capítulo 03 de 40
← Capítulo 02 (rascunho) · Índice de capítulos do curso · Capítulo 04 (rascunho) →