Capítulo 12 — Sistemas operacionais
Mapa da aula
Aula 12 publicada. Mapa, exemplo, EX034.
flowchart TD
N0["12.1 Processos e memória"]
N1["12.2 O gerador aleatório do sistema operacional"]
N2["12.3 Privilégio mínimo"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3
N3 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX034"]
Desenho lógico
flowchart LR
N0["12.1 Processos e memória"]
N1["12.2 O gerador aleatório do sistema operacional"]
N2["12.3 Privilégio mínimo"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3 --> Q["EX034"]
[12.1 Processos e memória]
|
v
[12.2 O gerador aleatório do sistema operacional]
|
v
[12.3 Privilégio mínimo]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX034]
Objetivos de aprendizagem
Você vai (1) explicar como os sistemas operacionais protegem chaves na memória e no disco; (2) usar corretamente o gerador aleatório do sistema operacional; (3) aplicar o privilégio mínimo a serviços criptográficos.
12.1 Processos e memória
Um sistema operacional separa os processos para que um não possa ler a memória do outro. O serviço de chaves da Ridgeway roda como processo próprio, sob uma conta dedicada; a aplicação de faturamento pede a ele que calcule as tags, em vez de guardar as chaves. Aiyana aprende que uma chave na memória de um processo também pode acabar em arquivos de swap ou em despejos de memória após falhas (crash dumps), então o serviço desativa os core dumps e trava as páginas das chaves na memória, onde a plataforma permite. Esses detalhes do sistema operacional importam tanto quanto o algoritmo, porque a maioria dos roubos reais de chaves as lê da memória ou do disco, e não quebrando a criptografia.
12.2 O gerador aleatório do sistema operacional
O sistema operacional reúne entropia de eventos de hardware e expõe aos programas um gerador criptograficamente seguro, no Linux pela chamada de sistema getrandom. O módulo secrets do Python o usa. Aiyana compara secrets.token_bytes com o módulo random, que é um gerador rápido e previsível feito para simulações; suas saídas podem ser reconstruídas depois de observados valores suficientes. Ela reescreve o script de geração de chaves de um colega que usava random.getrandbits. A regra que adota é simples: tudo o que é secreto, incluindo chaves, nonces e tokens, vem do secrets ou de uma biblioteca avaliada, nunca do random.
12.3 Privilégio mínimo
Aiyana configura o serviço de chaves para rodar com os direitos mínimos de que precisa: acesso de leitura ao seu próprio arquivo de chaves cifrado, um único socket de escuta e nenhum shell. As permissões de arquivo restringem o arquivo de chaves à conta do serviço. Os administradores acessam o serviço por uma interface auditada, em vez de entrar no host. O SP 800-57 Part 1 enfatiza a proteção das chaves ao longo de todo o seu ciclo de vida, e o privilégio mínimo no nível do sistema operacional é uma grande parte dessa proteção. Se a aplicação de faturamento for comprometida, o atacante ainda assim não consegue ler as chaves brutas.
Exemplo resolvido
Aiyana transfere as chaves para um processo de serviço dedicado, com memória travada, sem core dumps, com permissões de arquivo mínimas e geração baseada no secrets.
Caso sintético. O serviço de chaves é inventado; o SP 800-57 Part 1 é real.
Erros e limites
O travamento de memória e a supressão de dumps dependem da plataforma e são imperfeitos. Um atacante privilegiado no host ainda pode ler a memória, então o isolamento reduz o risco, mas não o elimina.
Exercícios
-
EX034 — Swap e dumps. Por que desativar os core dumps do serviço de chaves? Rubrica: 3 = chaves na memória poderiam ser gravadas em dumps ou no swap e roubadas do disco;; 2 = vazamento em disco;; 1 = desempenho;; 0 = nenhuma.
-
EX035 — random versus secrets. Por que as chaves nunca podem vir do módulo random do Python? Rubrica: 3 = ele é previsível e reconstruível; o secrets usa o CSPRNG do sistema operacional;; 2 = previsível;; 1 = mais lento;; 0 = nenhuma.
-
EX036 — Aplicação de faturamento comprometida. O que um atacante que compromete a aplicação de faturamento não consegue fazer? Rubrica: 3 = ler as chaves brutas, já que o serviço de chaves separado as guarda sob privilégio mínimo;; 2 = limitado;; 1 = tudo;; 0 = nenhuma.
Síntese
O isolamento do sistema operacional, a aleatoriedade segura e o privilégio mínimo protegem as chaves onde acontece a maioria dos roubos reais: na memória e no disco.
Continue estudando — aula 12 (capítulo 12 de 50)
← Capítulo 11 · Índice das aulas · Capítulo 13 →
Continue para a próxima aula já escrita.