◇ OpenCyber Academy
Tecnólogo · Capítulo 3 · Português

Capítulo 3 — Fundamentos de programação

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

Capítulo 3 — Fundamentos de programação

Mapa da aula

Aula 03 publicada. Mapa, exemplo, EX007.

flowchart TD
  N0["3.1 Por que tecnólogos programam"]
  N1["3.2 Uma função, uma decisão"]
  N2["3.3 Biblioteca padrão primeiro"]
  N3["3.4 Falhar fechado"]
  N4["3.5 Testes como evidência"]
  N5["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5
  N5 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX007"]

Desenho lógico

flowchart LR
  N0["3.1 Por que tecnólogos programam"]
  N1["3.2 Uma função, uma decisão"]
  N2["3.3 Biblioteca padrão primeiro"]
  N3["3.4 Falhar fechado"]
  N4["3.5 Testes como evidência"]
  N5["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX007"]
[3.1 Por que tecnólogos programam]
    |
    v
[3.2 Uma função, uma decisão]
    |
    v
[3.3 Biblioteca padrão primeiro]
    |
    v
[3.4 Falhar fechado]
    |
    v
[3.5 Testes como evidência]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX007]

Objetivos de aprendizagem

Você vai (1) escrever funções Python pequenas e legíveis, cada uma tomando uma decisão; (2) usar apenas a biblioteca padrão, para que um laboratório rode em qualquer estação de trabalho aprovada; (3) testar uma função com entradas conhecidas antes de confiar nela; (4) explicar por que as ferramentas de avaliação devem falhar fechadas.

3.1 Por que tecnólogos programam

O trabalho de avaliação produz listas: hosts, contas, achados, itens de evidência, datas de reteste. Scripts que verificam, ordenam e resumem essas listas eliminam erros de cópia e tornam as decisões repetíveis. Não são ferramentas de ataque. Neste livro, todo script lê dados inventados guardados no próprio arquivo e imprime um veredicto. Priya automatiza as listas de hosts e de achados para que as pessoas gastem tempo com os HOLDs e a severidade, e não copiando linhas. Scripts que classificam escopo e calculam hashes de evidência estão dentro dos limites; scripts que inventam caminhos de ataque, não. O registro do operador do ENG-712 é gerado apenas a partir de ações que passaram pelo controle.

3.2 Uma função, uma decisão

Uma função como verdict(addr), do Capítulo 2, responde a uma pergunta e devolve um pequeno conjunto de rótulos. Esse desenho a torna testável: alimente-a com um endereço cuja resposta você já conhece e compare. Quando uma função decide, imprime e grava arquivos ao mesmo tempo, um defeito numa parte se esconde nas outras. verdict(addr) devolve IN-SCOPE, EXCLUDED ou OUT-OF-SCOPE e nada mais. Essa decisão única passa por testes unitários com 192.0.2.10, 192.0.2.70 e 192.0.2.200 antes de toda janela. Uma função auxiliar que também edita o inventário que lê é reprovada na revisão de código da TRT, porque deixa de responder a uma única decisão e um defeito na edição se esconderia no veredicto.

3.3 Biblioteca padrão primeiro

A biblioteca padrão do Python inclui ipaddress, datetime, hashlib, json, csv e collections. Eles cobrem aritmética de escopo, janelas de tempo, hash de evidências, registros estruturados e contagens. Evitar pacotes de terceiros significa não ter revisão de dependências, não ter surpresas na cadeia de suprimentos e ter comportamento idêntico na máquina do revisor. ipaddress, datetime, hashlib e json cobrem os laboratórios didáticos do ENG-712 sem scanners de terceiros. Priya fixa a escolha da biblioteca padrão no inventário do kit, para que as discussões sobre cadeia de suprimentos tratem das ferramentas da TRT, e não de pacotes aleatórios do PyPI baixados no meio da janela. Se a Northpoint trouxer depois um scanner comercial, essa ferramenta ganha linha própria, responsável e nota de tratamento de dados.

3.4 Falhar fechado

Se um arquivo de escopo estiver ausente ou uma data não puder ser interpretada, o padrão seguro é "não prosseguir". Um verificador que devolve "permitido" ao encontrar uma exceção é pior do que nenhum, porque cria falsa confiança. Escreva primeiro o caminho de negação e depois acrescente as condições de permissão. Arquivos de escopo ausentes fazem o verificador falhar fechado em "não prosseguir". Devolver permitido numa exceção teria liberado 192.0.2.200 numa leitura quebrada. Os testes de Priya verificam o caminho fechado com uma fixture de arquivo apagado: remover o arquivo de escopo na integração contínua (CI) precisa resultar em não prosseguir, nunca em permitido. A fixture fica ao lado da tabela de testes do ENG-712 para que os auditores possam executar de novo o caminho fechado.

3.5 Testes como evidência

Uma tabela curta de entradas e saídas esperadas, executada antes de cada engajamento, é evidência de que as ferramentas se comportam. Guarde-a junto dos registros do engajamento para que um revisor possa executá-la de novo. A tabela de testes pré-engajamento de verdict() é arquivada no ENG-712 ao lado das ROE. Quando a Northpoint pergunta se a ferramenta mudou, Priya mostra a tabela executada na abertura, e não a lembrança de uma saída verde. Como a execução é anexada ao chamado antes de as ferramentas começarem, ninguém pode alegar depois que o verificador "provavelmente estava bem" sem apresentar esse artefato.

Exemplo resolvido

Priya escreve uma função auxiliar que devolve "allowed" apenas quando uma string de data é interpretada e cai dentro da janela. Seu primeiro rascunho capturava ValueError e devolvia "allowed". Ela a reescreve para que a exceção devolva "STOP: unreadable time" e acrescenta três casos conhecidos — dentro, fora, malformado — a uma lista de testes executada antes do trabalho de cada noite.

Caso sintético. A função auxiliar de Priya e suas entradas de teste foram inventadas para fins didáticos.

Erros e limites

Trechos copiados de fóruns podem esconder chamadas de rede ou padrões inseguros; leia cada linha. Habilidade em programação não cria permissão para testar nada.

Exercícios

Síntese

Funções pequenas, biblioteca padrão, negar por padrão e uma tabela de respostas conhecidas guardada como evidência.

Continue estudando — capítulo 03 de 30

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