Construir sistemas seguros

Privilégio mínimo, memória e isolamento, Android, containers, seccomp, TPM e mediação.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Princípios de construção

PrincípioCondição a procurar
Privilégio mínimoSó autoridade necessária, pelo tempo necessário.
Negar por defeitoSem autorização explícita, negar o pedido.
Mediação completaTodos os acessos relevantes passam pela decisão.
SimplicidadeMecanismo pequeno e compreensível para análise.
Desenho abertoProteção depende de segredos como chaves, não de esconder o algoritmo.
Separação de privilégiosOperação crítica exige condições independentes.
Mínimo mecanismo comumMenos partilha que crie dependências e fugas.
Aceitação psicológicaO caminho seguro é compreensível e utilizável.

Aprovação por dois responsáveis separa autoridade. Repetir a palavra-passe não cria outra autoridade nem outro fator de autenticação.

Um monitor de referência medeia acessos, resiste a alterações não autorizadas e permite análise. A TCB reúne componentes de cujo funcionamento correto depende a proteção. Reduzi-la reduz o que precisa de ser analisado.

Esconder um botão não medeia POST /notas/42: autoriza sujeito, objeto e operação no servidor. No confused deputy, um serviço usa a sua autoridade para satisfazer um pedido que o requerente não poderia fazer. Verifica a autoridade do requerente ou usa uma capacidade limitada ao objeto autorizado.

Memória virtual e kernel

Tabelas de páginas traduzem endereços virtuais e atribuem permissões. 0x4000 em dois processos pode designar páginas físicas distintas; partilha explícita pode fazê-los aceder à mesma página.

Modo utilizador não pode exercer livremente autoridade do kernel. Chamadas de sistema são transições controladas; o kernel ainda valida ponteiros, tamanhos e permissões. Páginas de kernel mapeadas com acesso supervisor não são legíveis pelo utilizador. KPTI separa tabelas para reduzir certas exposições, mas a disposição depende da arquitetura/configuração.

Fronteiras de isolamento

  • Android usa normalmente UID por aplicação e permissões Linux, incluindo código nativo. SELinux acrescenta MAC e seccomp restringe chamadas. Permissão para câmara não concede dados privados de outra aplicação.
  • Namespaces separam vistas de recursos; cgroups contabilizam e limitam CPU/memória; capabilities e políticas limitam autoridade.
  • Seccomp-BPF filtra número, arquitetura e argumentos disponíveis de chamadas. Não interpreta livremente o conteúdo dos ponteiros, como o texto de um caminho.

Bloquear criação de processos não impede ler uma pasta privada montada. Restringe também ficheiros, montagens, rede e recursos. Container privilegiado ou acesso ao runtime pode anular a separação; container típico continua dependente do kernel partilhado.

SCI medeia chamadas de sistema, como seccomp. SFI restringe acessos e desvios de código ao domínio permitido. Não são verificações equivalentes: bloquear chamadas não corrige todos os acessos a memória, e confinar memória não autoriza qualquer ficheiro. Hipervisor tipo 1 executa sobre hardware; tipo 2 depende do anfitrião. Nenhum tipo garante ausência de falhas ou canais laterais.

Arranque e TPM

  • Secure Boot verifica assinaturas segundo a política e pode bloquear componentes não autorizados.
  • Measured Boot regista medições; medir não equivale a bloquear.
  • TPM protege chaves e acumula medições em PCR. Uma chave selada à política dos PCR pode ficar indisponível após uma atualização legítima.

Numa atestação, o verificador envia desafio novo, valida a prova autenticada ligada ao desafio e compara medições com estados aceites. Uma prova antiga não serve ao desafio novo. Medição esperada não garante ausência de comprometimento posterior. Planeia atualização da política e recuperação.

Defesa e falha

Defesa em profundidade combina controlos com falhas diferentes. Autorização limita consultas; cifragem protege armazenamento; cópias permitem recuperação. Duas verificações da mesma condição errada não são independentes.

Se o autorizador falha, permitir tudo é falha aberta. Negar preserva autorização e pode reduzir disponibilidade. Explicita a propriedade prioritária e a recuperação segura.

Comparar fronteiras de isolamento.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.