Alguém pode descrever, para um não programador, mas para uma pessoa de TI, o que é penhor ?
Ex.: existe um programa, ex.: "xterm". Como o penhor pode torná-lo mais seguro? Ele promete dentro do código dos programas, ou fora no próprio SO?
Onde está o penhor? Está no código do programa; ou o sistema operacional possui uma lista de binários que só podem invocar xy syscalls?
O que é Promessa?
pledge
é uma chamada do sistema.Chamar
pledge
um programa é prometer que o programa usará apenas determinados recursos.Outra maneira de dizer é limitar a operação de um programa às suas necessidades, por exemplo,
Como isso torna um programa mais seguro?
Limita a operação de um programa. Exemplo:
xyz
que só precisa daread
chamada do sistema.pledge
para usar apenasread
, mas nada mais.root
shell.root
shell fará com que o kernel mate o processo comSIGABRT
(que não pode ser capturado/ignorado) e gere um log (que você pode encontrar comdmesg
).Isso acontece porque antes de executar outros códigos do seu programa, primeiro
pledge
não use nada além daread
chamada do sistema. Mas abrirroot
o shell chamará várias outras chamadas do sistema, o que é proibido porque já foi prometido não usar nenhum outro, excetoread
.Onde está o Juramento?
Geralmente está em um programa. Uso da página de manual do OpenBSD 6.5 :
Exemplo de código: exemplo de código de
cat
comando de cat.cUm programa normalmente faz uso de apenas um determinado conjunto de chamadas de sistema ou biblioteca. Com
pledge
você pode restringir o conjunto de chamadas de sistema permitidas apenas para este conjunto. Por exemplo, se um programa não precisar ler o banco de dados de senhas, você pode proibir a chamada dagetpwnam()
função.Como isso é útil? É uma linha extra de defesa contra vulnerabilidades. Se o programa contiver um bug, alguém poderá explorar o bug para alterar o fluxo de execução do programa ou injetar algum código extra no processo. O bug pode ser, por exemplo, um erro de estouro de buffer em um daemon voltado para a rede, que o invasor pode acionar enviando ao programa mais dados do que ele pode manipular, possivelmente fazendo com que o programa leia e envie o conteúdo do
/etc/passwd
arquivo pelo rede.Seu programa "compromete-se" a usar apenas a funcionalidade {A,B,C}
Se um hacker puder injetar código em seu processo prometido e tentar a funcionalidade D, o sistema operacional travará seu programa
Por exemplo, digamos que você tenha um servidor NTP. Ele se comprometeu a usar apenas a funcionalidade DNS e CLOCK. Mas tem uma falha que permite a execução remota de código. Hacker pede para WRITE FILE. Mas
pledge
irá detectar isso e desligar o programa e registrar o erro