Por que "nodev" no / etc / fstab é tão importante? Como os dispositivos de caracteres podem ser usados ​​para hackers?

19

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

Se eu tiver um pendrive USB com um executável do bash com raiz definida, o perigo é óbvio: qualquer pessoa com esse pendrive 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/fstabporque defaultsinclui suid.

Mas e os dispositivos de caracteres? Como posso usar um dispositivo de caractere para obter privilégios de root ou quebrar coisas se um pendrive USB com um dispositivo de caractere é montado com devou defaults?

rosix
fonte

Respostas:

31

Como o acesso ao dispositivo subjacente é controlado apenas por permissões de arquivo por padrão, portanto, se o seu pendrive USB contiver um sistema de arquivos POSIX com um nó de dispositivo gravável em mundo correspondente a um dispositivo real no sistema, você poderá usar esse nó de dispositivo para acessar o correspondente dispositivo como um usuário "comum". 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 caracteres, mas o argumento é o mesmo) ...

Aqui está um exemplo para tornar as coisas mais claras. Digamos que você queira acessar /dev/sda(então você pode praticamente fazer o que quiser com o conteúdo do disco, incluindo plantar um programa que permita que você se torne root; este é um dispositivo de bloco, mas o problema é o mesmo com dispositivos de caracteres). No seu sistema de destino, ls -l /dev/sdamostra

brw-rw----  1 root disk      8,   0 Sep  8 11:25 sda

Isso significa que /dev/sdaé um dispositivo de bloco (o bno início da linha), com o número principal 8 e o número menor 0 ( 8, 0o meio da linha). O dispositivo está acessível apenas para root(leitura / gravação) e membros do diskgrupo (também leitura / gravação).

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

mknod -m 666 usersda b 8 0

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

Monte a chave no seu sistema de destino e, e pronto, você pode usar o usersdadispositivo da mesma maneira que /dev/sda, mas sem restrição de acesso ...

(Isso funcionará mesmo com sistemas de arquivos criptografados, desde que você possa acessar o dispositivo mapeador descriptografado: crie um dispositivo que corresponda à /dev/mapperentrada apropriada .)

Stephen Kitt
fonte
Isso parece interessante! Mas não tenho certeza se entendi. Um dispositivo é um arquivo e os arquivos são acessados ​​através de inodes. O dispositivo falso no meu pendrive USB teria um inode diferente e, portanto, seria um dispositivo diferente, não é?
Rosix
7
Um dispositivo é um arquivo especial, com um número maior e menor; você pode vê-los, se o fizer ls -l /dev, são os dois números que aparecem em vez do tamanho do arquivo. O kernel combina um arquivo especial do dispositivo com um driver usando esses números, para que você possa ter vários arquivos que apontam para o mesmo driver e dispositivo do kernel. Os arquivos especiais são criados usando mknod.
Stephen Kitt
Observe que os /dev/tty*dispositivos são dispositivos de caracteres, e um invasor que obtém acesso total de leitura / gravação às sessões do terminal e / ou ao console do sistema combinado com os recursos de emulador de terminal abusivos pode permitir todos os tipos de truques desagradáveis ​​...
telcoM 25/01/15
1
@TheQuark praticamente, sim. É um pouco mais geral; Eu diria que "interpretar" significa "tratar os arquivos do dispositivo como nós do dispositivo, não arquivos simples".
Stephen Kitt
1
@ n00b você não pode montar usersda, mas pelo menos pode usá-lo para ler o disco subjacente sem restrições e, possivelmente, gravar nele. Você pode copiar facilmente todo o conteúdo do disco e com ferramentas como debuge2fssobrescrever /etc/shadowetc.
Stephen Kitt