Qual a utilidade da montagem / tmp noexec?

39

Muitas pessoas (incluindo o Securing Debian Manual ) recomendam montar /tmpcom o noexec,nodev,nosuidconjunto 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 noexecsão uma medida inútil, por algumas razões possíveis:

  1. O usuário pode executar /lib/ld-linux.so <binary>na tentativa de obter o mesmo efeito.
  2. 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, debconfgosta 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?

Phil Miller
fonte
11
@ neoice: Ouvi dizer que os aplicativos ocasionalmente quebram se / tmp não for executável. Ainda estou para realmente ver isso acontecer. Veja o TuxGuitar-1.2 ... acontece. Não será iniciado se / tmp não estiver montado sem a opção noexec, porque descompacta as bibliotecas e tenta carregá-las.
O Site Recovery Manager da VMware executa scripts de "/ tmp": a personalização de IP falha durante um failover ou failover de teste de um plano de recuperação no vCenter Site Recovery Manager (2021083): kb.vmware.com/selfservice/microsites/…
11
Eu sei que o utilitário de compactação chamado snappy coloca um arquivo .so em / tmp e não pode ser executado se estiver montado noexec. (é usado por padrão em Cassandra e kafka) IMHO esta é uma razão para não usar mal-humorado, em vez de uma razão para não montar / tmp noexec
jorfus

Respostas:

31

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 um noexecsistema 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, noexecreduzindo 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 /tmpcom noexec.

Conforme descrito no bug tracker do Debian , estabelecendo APT::ExtractTemplates::TempDirem apt.confpara um diretório que não é noexece acessível a raiz evitaria a preocupação debconf.

Phil Miller
fonte
no entanto, eu ter ouvido que as aplicações irá ocasionalmente quebrar se / tmp não é executável. Ainda estou para realmente ver isso acontecer.
214 neoice
Conforme observado no manual vinculado na pergunta, ele mexe com a pré-configuração do pacote Debconf sem definir uma alternativa.
Phil Miller
2
Sim, o noexec é uma camada adicional muito boa de segurança e eu não vi as coisas travando estragos devido a isso. A instalação do pacote é a única coisa e, mesmo assim, pode ser contornada pelas respostas aqui. Como minha solução Eu tenho um apelido assim: update alias = "mount -o exec, remount / tmp && apt-get update && apt-get upgrade && mount -o noexec, remount / tmp"
Janne Pikkarainen
11
Eu acho que é incomum, mas existem pacotes escritos para executar algo de / tmp fora de um contexto de instalação de pacote (por exemplo, a versão atual do middleware para usar os Cartões de Identidade Eletrônicos da Bélgica).
equaeghe
equaeghe: Que pacote é esse? Provavelmente deve ser relatado como um bug. Estou disposto a apostar que também há uma vulnerabilidade de segurança em como ela é usada.
Phil Miller
7

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 ...

thomasrutter
fonte
6

adicione o seguinte ao /etc/apt.conf ou /etc/apt/apt.aptf.d/50remount

DPkg::Pre-Install-Pkgs {"mount -o remount,exec /tmp";};
DPkg::Post-Invoke {"mount -o remount /tmp";};
karmawhore
fonte
6
Eu substituído mountpor /bin/mountno caso PATH é modificado. Você nunca saberá.
Lekensteyn
4

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.

tylerl
fonte
2

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.

  • Também pode ser interrompido por restrições de usuário do iptables.
  • Também pode ser parado pelo SELinux.
  • Também pode não ser interrompido devido a uma outra exploração facilmente acessada.

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:

"Aprendemos que os inimigos podem atacar sem aviso prévio. Eles também podem usar centenas de espiões para envenenar a comida. Então paramos de distribuir armas para nossos soldados".

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.

Florian Heigl
fonte
1

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.

lsd
fonte
Uma análise de uma exploração para a vulnerabilidade do Samba, que seria interrompida por um noexec / tmp: bobao.360.cn/learning/detail/4168.html (recomenda-se a tradução do Google Chrome. Isso interromperia a exploração inicial, bem como um grande parte da carga ...) (Você pode quebrar muitas explorações automáticas comuns dessa maneira ....). mount -o remount,exec /tmpfunciona quando você precisa instalar coisas ... (Sim, é trivial para contornar, mas muitos atacantes não parece incomodar ...)
Gert van den Berg