Evitando a criação de um diretório específico

6

Gostaria de abordar as bases de uma vulnerabilidade que tenta fazer o download e salvar o resultado em um diretório recém-criado dentro do diretório /tmp/ .

Por segurança, desejo impossibilitar a criação de pastas dentro de /tmp/ . Ou, se isso não for viável, gostaria de evitar a criação de pastas em apenas um diretório específico dentro de /tmp .

    
por Danielson 10.08.2015 / 10:36

2 respostas

9

use ls -l -d /tmp/ e você verá que as permissões estão definidas como drwxrwxrwt , ou seja, d : um diretório, rwx : leia, grave e execute as permissões permitidas para proprietário, grupo e outros (nesta ordem ), t sticky bit, ou seja, somente os proprietários de arquivos têm permissão para excluir arquivos (não o grupo, apesar das permissões). Vamos deixar a parte pegajosa de lado por um momento e mencionar que um diretório precisa ser executável para ser acessível.

Agora, se você quiser restringir a permissão de gravação para outras pessoas (proprietário e grupo é root), use chmod o-w /tmp/ (como raiz, ou seja, usando sudo )

NO ENTANTO: /tmp/ é bastante importante para processos que podem precisar de dados temporários, por isso sugiro não restringir permissões para essa pasta!

Como você está indo para uma pasta específica, o mais simples seria criar manualmente essa pasta (como root) e, em seguida, restringir a permissão para ela:

sudo mkdir /tmp/badfolder
sudo chmod -R o-w /tmp/badfolder/

Nota lateral sobre chmod: -R do recursivamente, u, g, o: usuário, grupo, outro, + - adiciona / remove permissão para r, w, x ler, escrever, executar. Ou seja para permitir que membros do grupo escrevam em um arquivo, use chmod g+w file .

Atualização:

Caso o processo esteja sendo executado como root, você também precisa definir o atributo 'i'. De man chattr

A file with the 'i' attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be written to the file. Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

Isso também se aplicaria se a pasta não fosse de propriedade de root. Simplesmente use

chattr +i /tmp/badfolder

Use chattr -i /tmp/badfolder para removê-lo e -R para fazer recursivamente.

    
por 10.08.2015 / 10:53
1

Como alternativa à idéia de Fixman, você também pode transformá-lo em um link simbólico para si mesmo.

sudo ln -s foo /tmp

$ touch /tmp/foo/bar
touch: cannot touch ‘/tmp/foo/bar’: Too many levels of symbolic links

#Or
sudo mkdir -m 000 /tmp/foo  # create with mode 000, no permissions at all.

Criando-os como root bloqueará o malware não-raiz de removê-los / renomeá-los.

O Modo 444 (leia, mas não grava ou executa) impedirá que o software reclame que não pode listar o diretório, se você ls -R /tmp ou equivalente.

É muito menos provável que um rootkit tente chattr do que rm -rf /tmp/foo antes de criar seu diretório.

    
por 11.08.2015 / 22:59