Isso não é uma resposta, e sim uma coleção de links e pensamentos, caso alguém queira estudar também. Porque isso é bem interessante.
Resposta relacionada no Unix & Linux mencionando que é (ou foi, não é possível testar com o kernel do vanilla right agora) possível despejar binários somente de leitura dessa maneira.
A Grsecurity estava tentando corrigir essa opção de configuração e the patch propriamente dito (embora possa ter mudado desde então)
Este commit realmente faz parecer que os desenvolvedores do kernel realmente se importam apenas com o despejo de binários suid.
Mas, na verdade, a partir dessa linha , eu acho que o kernel quer evitar banir os binários ilegíveis do status da SUID. E esta linha sugere que os binários que não são dumpable não devem ser rastreáveis.
Então, à primeira vista, parece que você encontrou um bug no kernel com implicações de segurança. Mas eu não sou desenvolvedor de kernel, então não posso dizer com certeza. Eu perguntaria em LKML.
Edit: mais uma descoberta, com relação ao depurador, mencionada nos comentários da postagem original - a partir do stracing rápido (novamente) parece-me que o gdb usa os binários rastreados e /proc/<pid>/mem
. Quando o binário em execução não for legível, cat /proc/<pid>/mem
retornará EPERM
. Se o binário for legível, retornará EIO
. (Testei isso no Ubuntu 14.10, que executa vários patches de segurança, então isso pode ser diferente do kernel vanilla. Novamente, eu não tenho o kernel vanilla funcionando em algum lugar acessível: ()