Por que “nodev” em / etc / fstab é tão importante? Como os dispositivos de personagens podem ser usados para hackers?

12

Estou aprendendo sobre segurança do Linux e tentando entender por que um dispositivo USB com um dispositivo de caractere é potencialmente perigoso.

Se eu tiver um pendrive com um executável bash que tenha root setuid nele, o perigo é óbvio: qualquer um com esse stick USB pode obter privilégios de root no meu computador se eu tiver uma entrada como

/dev/sdb1 /media/usbstick auto defaults 0 0

no meu /etc/fstab porque defaults inclui suid .

Mas e os dispositivos de personagem? Como posso usar um dispositivo de caractere para obter privilégios de root ou quebrar coisas se um dispositivo USB com um dispositivo de caractere nele for montado com dev ou defaults ?

    
por rosix 06.03.2015 / 13:58

1 resposta

21

Como o acesso ao dispositivo subjacente é controlado apenas por permissões de arquivo por padrão, se o seu pendrive contiver um sistema de arquivos POSIX com um nó de dispositivo gravável mundialmente correspondente a um dispositivo real no sistema, você poderá usar esse nó de dispositivo para acesse o dispositivo correspondente como um usuário "simples". Imagine um dispositivo correspondente a um dos dispositivos de áudio, sua webcam, /dev/sda (que é um dispositivo de bloco em vez de um dispositivo de caractere, mas o argumento é o mesmo) ou /dev/mem ...

Aqui está um exemplo para tornar as coisas mais claras. Digamos que você queira acessar /dev/mem (então você pode praticamente fazer o que quiser, inclusive se tornar root ). No seu sistema de destino, ls -l /dev/mem mostra

crw-r-----  1 root kmem      1,   1 Sep  8 11:25 mem

Isso significa que /dev/mem é um dispositivo de caractere (o c no início da linha), com maior número 1 e menor número 1 (o 1, 1 no meio da linha). O dispositivo só está acessível para root (leitura / gravação) e membros do grupo kmem (somente leitura).

Agora, imagine neste sistema que você não pode se tornar root , mas por algum motivo você pode montar pen drives como um usuário sem nodev . Em outro sistema, onde você é root , você pode criar um arquivo especial correspondente na sua chave USB:

mknod -m 666 usermem c 1 1

Isso criará um arquivo especial chamado usermem , legível e gravável por todos.

Monte a chave em seu sistema de destino e, pronto, você pode usar o usermem device da mesma forma que /dev/mem , mas sem restrição de acesso ...

    
por 06.03.2015 / 14:16