OpenCyber Academy
Pesquisa doutoral · Capítulo 1 · Português
Código do curso: OCA-203Capítulo 01: OCA-203-C001

Capítulo 1 — Integridade e métodos avançados de pesquisa

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 01 publicada. Mapa, exemplo, EX001.

flowchart TD
  N0["1.1 Integridade como método de pesquisa"]
  N1["1.2 Autorização, escopo e condições de parada"]
  N2["1.3 Medidas que importam"]
  N3["1.4 Disciplina de uso dual"]
  N4["1.5 Trilha de evidências"]
  N5["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5
  N5 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX001"]

Desenho lógico

flowchart LR
  N0["1.1 Integridade como método de pesquisa"]
  N1["1.2 Autorização, escopo e condições de parada"]
  N2["1.3 Medidas que importam"]
  N3["1.4 Disciplina de uso dual"]
  N4["1.5 Trilha de evidências"]
  N5["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX001"]
[1.1 Integridade como método de pesquisa]
    |
    v
[1.2 Autorização, escopo e condições de parada]
    |
    v
[1.3 Medidas que importam]
    |
    v
[1.4 Disciplina de uso dual]
    |
    v
[1.5 Trilha de evidências]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX001]

Objetivos de aprendizagem

Você vai (1) enunciar as regras de integridade que regem a pesquisa em segurança ofensiva autorizada; (2) projetar estudos que não possam causar dano a pessoas nem a sistemas fora do escopo; (3) escolher medidas que reflitam efeitos, não teatro; (4) lidar com responsabilidade com conhecimento de uso dual; e (5) manter uma trilha de evidências que outros possam auditar.

1.1 Integridade como método de pesquisa

Nesta área, um controle de integridade que falha não é uma questão de papelada — é uma sondagem fora do escopo, uma credencial vazada ou uma negação de serviço contra um hospital. Integridade significa: autorização por escrito antes de qualquer interação com um alvo; um escopo que um terceiro possa verificar; condições de parada ensaiadas; dados sintéticos ou consentidos; e registros que mostrem o que foi feito e por quê. O NIST SP 800-115 enquadra a avaliação como uma atividade planejada, com regras; o PTES coloca o escopo e a coleta de inteligência antes de qualquer teste. Seu doutorado herda esses hábitos e acrescenta os padrões da pesquisa: pré-registro das medidas, replicação e limites honestos.

1.2 Autorização, escopo e condições de parada

A autorização nomeia o proprietário, os sistemas, as datas, as ações permitidas e as regras sobre dados. O escopo é o conjunto de hosts, portas, identidades e ações que estão incluídos. As condições de parada — por exemplo, qualquer dado pessoal real, qualquer host fora do escopo, qualquer impacto na disponibilidade — interrompem o trabalho e acionam o escalonamento. Um escopo verificável por máquina (listas de CIDR, portas e ações) torna as violações detectáveis em vez de discutíveis.

"""Check proposed engagement targets against a written scope (synthetic)."""
SCOPE_CIDRS = [("10.20.0.0", 16), ("192.168.50.0", 24)]  # inclusive synthetic ranges
SCOPE_PORTS = {22, 80, 443, 8080}
DENY_HOSTS = {"10.20.0.1", "192.168.50.1"}  # out-of-scope infra

def ip_int(s):
    a,b,c,d = map(int, s.split("."))
    return (a<<24)|(b<<16)|(c<<8)|d

def in_cidr(ip, net, bits):
    mask = (0xFFFFFFFF << (32-bits)) & 0xFFFFFFFF
    return (ip_int(ip) & mask) == (ip_int(net) & mask)

def check(host, port):
    reasons = []
    if host in DENY_HOSTS:
        reasons.append("deny-list")
    if not any(in_cidr(host, n, b) for n,b in SCOPE_CIDRS):
        reasons.append("outside-cidr")
    if port not in SCOPE_PORTS:
        reasons.append("port-not-in-scope")
    return ("ALLOW" if not reasons else "DENY"), reasons

tests = [
    ("10.20.1.10", 443),
    ("10.20.0.1", 443),
    ("192.168.50.20", 22),
    ("192.168.50.20", 3389),
    ("8.8.8.8", 80),
    ("192.168.1.10", 80),
]
for h,p in tests:
    v, r = check(h,p)
    print(f"target={h}:{p} decision={v} reasons={','.join(r) or '-'}")

Saída esperada:

target=10.20.1.10:443 decision=ALLOW reasons=-
target=10.20.0.1:443 decision=DENY reasons=deny-list
target=192.168.50.20:22 decision=ALLOW reasons=-
target=192.168.50.20:3389 decision=DENY reasons=port-not-in-scope
target=8.8.8.8:80 decision=DENY reasons=outside-cidr
target=192.168.1.10:80 decision=DENY reasons=outside-cidr

O laboratório de Elena usa as faixas e portas do exemplo resolvido: sondagens dirigidas a 8.8.8.8 ou à porta 3389 são negadas antes que qualquer pacote saia. Escreva as condições de parada no runbook e ensaie-as, para que os operadores saibam o que fazer quando uma delas disparar.

1.3 Medidas que importam

Conte efeitos: sondagens fora do escopo, achados confirmados com evidências, tempo até a parada após uma violação, verificação da remediação. Evite contagens de vaidade, como "número de ferramentas executadas". Relate taxas com intervalos. Ao comparar métodos, mude um fator por vez e mantenha o ambiente fixo.

"""Lab S: reporting attack-success rates honestly: Wilson intervals,
seed variation and a paired bootstrap. Synthetic trial outcomes only."""
import math, random
def wilson(k, n, z=1.96):
    p = k/n; d = 1 + z*z/n
    c = (p + z*z/(2*n))/d; h = z*math.sqrt(p*(1-p)/n + z*z/(4*n*n))/d
    return c - h, c + h
for k, n in ((3, 20), (30, 200), (300, 2000)):
    lo, hi = wilson(k, n); print(f"successes={k}/{n} rate={k/n:.3f} wilson95=[{lo:.3f}, {hi:.3f}]")
# five seeds of a synthetic defence evaluation: per-seed attack success rate
rates = []
for seed in range(5):
    r = random.Random(seed); rates.append(sum(r.random() < 0.12 for _ in range(200))/200)
m = sum(rates)/5; sd = math.sqrt(sum((x-m)**2 for x in rates)/4)
print("per-seed rates:", " ".join(f"{x:.3f}" for x in rates), f"mean={m:.3f} sd={sd:.3f}")
# paired bootstrap: baseline vs defence on the same 300 synthetic trials
r = random.Random(42)
base = [r.random() < 0.30 for _ in range(300)]
defn = [b and r.random() < 0.6 for b in base]   # defence blocks ~40% of successes
diffs = []
for _ in range(2000):
    idx = [r.randrange(300) for _ in range(300)]
    diffs.append(sum(base[i] for i in idx)/300 - sum(defn[i] for i in idx)/300)
diffs.sort()
print(f"baseline_asr={sum(base)/300:.3f} defended_asr={sum(defn)/300:.3f} "
      f"reduction_ci95=[{diffs[50]:.3f}, {diffs[1949]:.3f}]")

Saída esperada:

successes=3/20 rate=0.150 wilson95=[0.052, 0.360]
successes=30/200 rate=0.150 wilson95=[0.107, 0.206]
successes=300/2000 rate=0.150 wilson95=[0.135, 0.166]
per-seed rates: 0.110 0.130 0.135 0.105 0.145 mean=0.125 sd=0.017
baseline_asr=0.350 defended_asr=0.190 reduction_ci95=[0.120, 0.203]

O laboratório de estatística mostra por que as contagens importam: 3 sucessos em 20 e 300 em 2.000 dão ambos uma taxa de 15%, mas os intervalos de Wilson são de cerca de 5–36% e de 13,5–16,6%. Só a amostra maior sustenta uma afirmação precisa. A medida primária de Elena é o número de sondagens fora do escopo por hora de engajamento, com um intervalo.

1.4 Disciplina de uso dual

Sua tese vai discutir técnicas que poderiam ser mal utilizadas. Publique métodos e medição, não procedimentos transformados em arma. Prefira alvos sintéticos e topologias de laboratório abertas. Encaminhe qualquer fraqueza real encontrada durante a pesquisa por divulgação coordenada. O OSSTMM de Herzog foi influente, mas Albrecht e Jensen (arXiv:2010.06377) mostram por que uma única "quantidade de segurança" é uma medida de pesquisa pobre — prefira métricas concretas e contextuais. O protocolo de Elena declara que ela publicará predicados, taxas e código de pontuação, não cadeias de exploração, e que qualquer problema real encontrado em sistemas da instituição passará por divulgação coordenada. Suas medidas são concretas — taxas de sondagem e tempo até a parada —, não uma pontuação única de segurança.

1.5 Trilha de evidências

Guarde: a autorização, as ROE, as versões do escopo, as versões das ferramentas, os logs brutos (com dados ocultados), os achados com hashes das evidências e um registro de mudanças. Um auditor deve conseguir responder "o que foi tentado, contra o quê, quando e sob qual permissão?" A trilha de Elena registra também qual versão do escopo estava ativa quando cada sondagem foi registrada, de modo que uma disputa posterior sobre o que estava incluído possa ser resolvida pelo registro, e não pela memória. Fixe as versões das ferramentas ao lado dos logs. Guarde a trilha onde só a equipe do estudo e os orientadores possam lê-la.

1.6 Exemplo resolvido (caso sintético do NHUSTL)

O primeiro plano de integridade de Elena: todos os estudos rodam nas faixas isoladas 10.20.0.0/16 e 192.168.50.0/24 do NHUSTL; as portas se limitam a 22, 80, 443 e 8080; a lista de negação inclui 10.20.0.1. O laboratório de escopo mostra como uma sondagem proposta para 8.8.8.8:80 ou 192.168.50.20:3389 é negada antes que os pacotes saiam. Ela pré-registra duas medidas: a taxa de sondagens fora do escopo e os minutos entre a anotação da violação e a parada. Essas duas medidas se tornam seus desfechos primário e secundário. As decisões de negação no laboratório de escopo são a primeira evidência de que o verificador funciona antes de qualquer engajamento começar. Ambas aparecem em seu plano de integridade antes do primeiro engajamento.

1.7 Erros e limites

Três erros são comuns: autorização verbal; medidas que contam atividade em vez de efeitos; e publicação de receitas de exploração funcionais. Cada erro prejudica a integridade desde o início. A autorização verbal não pode ser verificada depois e não protege ninguém se uma sondagem causar dano. Contar ferramentas executadas ou pacotes enviados nada diz sobre se o escopo foi respeitado. Publicar receitas de exploração funcionais transforma a pesquisa num recurso de ataque. Verifique os três pontos em seu plano de integridade antes de qualquer engajamento começar. O plano de Elena nomeia a autorização por escrito, as medidas de efeito e os limites de uso dual antes de qualquer engajamento começar.

Exercícios

Síntese

A integridade de doutorado em segurança ofensiva autorizada significa permissão, escopo verificável, medidas de efeito, contenção quanto ao uso dual e uma trilha auditável — antes de qualquer alegação de contribuição.

Continue estudando — capítulo 01 de 08

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

Respostas comentadas

EX001. Proprietário: diretor do NHUSTL. Sistemas: faixas de laboratório 10.20.0.0/16 e 192.168.50.0/24. Datas: janela do estudo. Ações: descoberta de serviços enumerados e uso de credenciais apenas em contas sintéticas. Dados: apenas sintéticos. Contatos: orientador e plantão do laboratório.

EX002. 10.20.0.1:443 é infraestrutura da lista de negação. 192.168.50.20:3389 usa uma porta fora de {22,80,443,8080}. 8.8.8.8:80 está fora dos CIDRs.

EX003. Aparecem dados pessoais reais → parar, avisar o contato de privacidade. Host fora do escopo contatado → parar, avisar o proprietário do laboratório. Impacto na disponibilidade de serviços compartilhados do laboratório → parar, avisar o plantão.

EX004. Sondagens fora do escopo por hora de engajamento, com intervalo de 95%, controlando operador e horário. Fatores de confusão: diferenças de briefing, mudanças de topologia.

EX005. Mesma taxa de 15%, mas 3/20 tem um intervalo largo (~5–36%), enquanto 300/2000 fica em ~13,5–16,6%, de modo que só a amostra maior sustenta uma alegação precisa.

EX006. Publicar predicados, medidas e taxas; omitir payloads e passos de exploração; usar alvos sintéticos; encaminhar problemas reais por divulgação coordenada.

EX007. Autorização, ROE, versões do escopo, versões das ferramentas, logs com dados ocultados, achados com hashes das evidências.