Muitas pessoas (incluindo o Securing Debian Manual ) recomendam montar /tmp
com o noexec,nodev,nosuid
conjunto de opções. Isso geralmente é apresentado como um elemento de uma estratégia de 'defesa em profundidade', impedindo a escalada de um ataque que permite que alguém grave um arquivo ou um ataque de um usuário com uma conta legítima, mas sem outro espaço gravável.
Com o tempo, no entanto, encontrei argumentos (mais destacados pelo desenvolvedor do Debian / Ubuntu Colin Watson) que noexec
são uma medida inútil, por algumas razões possíveis:
- O usuário pode executar
/lib/ld-linux.so <binary>
na tentativa de obter o mesmo efeito. - O usuário ainda pode executar intérpretes fornecidos pelo sistema em scripts que não podem ser executados diretamente
Diante desses argumentos, a potencial necessidade de mais configuração (por exemplo, debconf
gosta de um diretório temporário executável) e a possível perda de conveniência, isso é uma medida de segurança que vale a pena? Que outros buracos você conhece que permitem contornar?
Respostas:
Aqui estão os argumentos para utilidade que eu vim até agora:
Os kernels modernos corrigem o problema
/lib/ld-linux.so
, para que não seja possível mapear páginas executáveis de umnoexec
sistema de arquivos.O ponto dos intérpretes certamente ainda é uma preocupação, embora eu pense menos de um do que as pessoas podem afirmar. O raciocínio que posso sugerir é que houve inúmeras vulnerabilidades de escalonamento de privilégios que dependiam de fazer syscalls específicos malformados. Sem um invasor fornecendo um binário, seria muito mais difícil fazer chamadas do mal. Além disso, os intérpretes de script não devem ter privilégios (sei que isso às vezes não é o caso, por exemplo, com um suid perl) e, portanto, precisariam de sua própria vulnerabilidade para serem úteis em um ataque. Aparentemente, é possível usar o Python, pelo menos, para executar algumas explorações.
Muitas explorações "enlatadas" podem tentar gravar e executar executáveis
/tmp
,noexec
reduzindo a probabilidade de cair em um ataque com script (por exemplo, na janela entre a divulgação de vulnerabilidades e a instalação de patches).Assim, ainda há uma prestação de segurança para montagem
/tmp
comnoexec
.Conforme descrito no bug tracker do Debian , estabelecendo
APT::ExtractTemplates::TempDir
emapt.conf
para um diretório que não énoexec
e acessível a raiz evitaria a preocupação debconf.fonte
Muitos pacotes Debian exigem que / tmp seja executável para que o pacote seja instalado. Eles geralmente são marcados como bugs (com gravidade 'normal' / 'lista de desejos'):
https://www.google.com/#q=site:bugs.debian.org+noexec+/tmp
Recebi exatamente esse erro ao instalar um kernel atualizado no ramo estável hoje.
Portanto, parece que o Debian (& derivativos?) Não está pronto para a montagem / tmp noexec ...
fonte
adicione o seguinte ao /etc/apt.conf ou /etc/apt/apt.aptf.d/50remount
fonte
mount
por/bin/mount
no caso PATH é modificado. Você nunca saberá.Embora existam soluções alternativas para a maioria das medidas de segurança suplementares que você pode optar por implementar, mesmo as medidas de segurança mais facilmente contornadas (como montar / tmp noexec ou executar SSH em uma porta alternativa) impedirão ataques automatizados ou com script que dependem dos padrões para funcionar. Não o protegerá contra um invasor determinado e experiente, mas em mais de 99% do tempo, você não enfrentará um invasor determinado ou experiente. Em vez disso, você estará se defendendo de um script de ataque automatizado.
fonte
Primeiro: abrange muitos casos de ataque diferentes. Desligá-lo porque havia algumas maneiras conhecidas de contornar isso (algumas das quais até consertadas) são estranhas. Os invasores que estão baixando o código para / dev / shm ou / tmp são comuns.
A defesa em profundidade consiste em garantir os waypoints mais comuns, cada um que os interrompe torna seu sistema mais resistente. Não é seguro. Mas também terá uma chance . Se eles não puderem buscar sua carga secundária, é uma boa chance de você estar recebendo.
O ponto é para torná-lo tão duro como você facilmente pode, e cortar 99% dos ataques.
Segundo: interrompe as práticas inadequadas (executando coisas do temp, instalando aplicativos principais via / tmp em vez de um usuário tmpdir), deixando os dados em / tmp. Os instaladores personalizados geralmente entendem o TMPDIR também: mesmo que não: o tempo de instalação, como uma ação pontual, não é um motivo válido para desativar permanentemente um problema de segurança .
Terceiro: considerando os espaços para nome anônimos em / tmp (um "recurso"), você realmente deseja restringir o que é colocado lá e executado a partir daí.
Quarto: A conveniência não é um fator relevante nisso. Supondo que executamos servidores por dinheiro e com um objetivo: somos responsáveis por essas coisas. "Ah, eu não bloqueei / tmp porque preciso de mais alguns minutos para atualizar meu software no próximo ano". Certamente não será apenas uma coisa que fica entre ser chantageado e ficar bem. Um ótimo motivo? Acho que não.
Que tal este:
Espere o que?
Existem outras medidas que exigem muito mais esforço, experiência e sorte para proteger um sistema, e saber que as pessoas têm dinheiro limitado, expectativa de vida e também gostariam de passar tempo com suas famílias: não pule as coisas fáceis.
fonte
Existem aplicativos que exigem que / tmp seja executável para instalar. Em um trabalho anterior, antes de chegar lá, os administradores haviam configurado o / tmp noexec, mas descobri que o pacote db2 não era instalado. Mesmo se você descompactar o pacote db2 em outro lugar, o procedimento de instalação copia alguns arquivos para / tmp e espera poder executá-lo, o que obviamente falhou com a permissão negada. Se você não está ciente de que o sistema de arquivos está montado noexec, isso pode ser um pouco enganador. Só foi possível continuar a instalação depois que eu remontei / tmp sem noexec.
De qualquer forma, o ponto é que pelo menos um produto comercial exige que o / tmp não seja montado noexec e pode haver outros. Não encontrei uma razão realmente convincente para isso. Se você quer uma segurança melhor, eu usaria o selinux.
fonte
mount -o remount,exec /tmp
funciona quando você precisa instalar coisas ... (Sim, é trivial para contornar, mas muitos atacantes não parece incomodar ...)