Почему «nodev» в / etc / fstab так важен? Как можно использовать символьные устройства для взлома?

19

Я узнаю о безопасности Linux и пытаюсь понять, почему флешка с символьным устройством на ней потенциально опасна.

Если у меня есть флешка USB с исполняемым файлом bash, на котором установлен setuid root, опасность очевидна: любой, у кого есть флешка USB, может получить привилегии root на моем компьютере, если у меня есть запись типа

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

по моему /etc/fstabпотому что defaultsвключает suid.

Но как насчет символьных устройств? Как я могу использовать символьное устройство, чтобы получить привилегии root или сломать что-либо, если USB-флешка с символьным устройством на ней смонтирована с devили defaults?

rosix
источник

Ответы:

31

Поскольку доступ к базовому устройству по умолчанию контролируется только правами доступа к файлам, поэтому, если ваш USB-накопитель содержит файловую систему POSIX с доступным для записи узлом устройства, соответствующим реальному устройству в системе, вы можете использовать этот узел устройства для доступа к соответствующему устройство как «простой» пользователь. Представьте себе устройство, соответствующее одному из аудиоустройств, вашей веб-камере /dev/sda(которое является блочным устройством, а не символьным устройством, но аргумент тот же) ...

Вот пример, чтобы прояснить ситуацию. Скажем, вы хотите получить доступ /dev/sda(тогда вы можете делать с содержимым диска все, что захотите, включая установку программы, которая позволит вам стать root; это блочное устройство, но проблема та же с символьными устройствами). В вашей целевой системе ls -l /dev/sdaпоказывает

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

Это означает, /dev/sdaчто это блочное устройство ( bв начале строки), с большим номером 8 и вторым номером 0 ( 8, 0в середине строки). Устройство доступно только root(чтение / запись) и членам diskгруппы (также чтение / запись).

Теперь представьте, что в этой системе вы не можете стать, rootно по какой-то причине вы можете подключить USB-флешки как пользователь без nodev. В другой системе, где вы находитесь root, вы можете создать соответствующий специальный файл на вашем USB-ключе:

mknod -m 666 usersda b 8 0

Это создаст специальный файл usersda, который будет доступен для чтения и записи для всех.

Смонтируйте ключ на вашей целевой системе, и вы можете использовать usersdaустройство так же, как /dev/sdaи без ограничений доступа ...

(Это будет работать даже с зашифрованными файловыми системами, если вы можете получить доступ к расшифрованному устройству картографа: создайте устройство, соответствующее соответствующей /dev/mapperзаписи.)

Стивен Китт
источник
Это звучит интересно! Но я не уверен, что понимаю это. Устройство - это файл, доступ к файлам осуществляется через inode. Поддельное устройство на USB-накопителе будет иметь другой инод, и поэтому это будет другое устройство, не так ли?
rosix
7
Устройство - это специальный файл с большим и младшим номером; Вы можете увидеть их, если вы это сделаете ls -l /dev, это два числа, которые появляются вместо размера файла. Ядро сопоставляет специальный файл устройства с драйвером, используя эти числа, поэтому вы можете иметь несколько файлов, которые указывают на один и тот же драйвер ядра и устройство. Специальные файлы создаются с использованием mknod.
Стивен Китт
Обратите внимание, что /dev/tty*устройства являются символьными устройствами, и злоумышленник, получивший полный доступ на чтение / запись к сеансам вашего терминала и / или системной консоли в сочетании со злоупотреблением функциями эмулятора терминала, может разрешить все виды неприятных уловок ...
telcoM
1
@TheQuark в значительной степени, да. Это немного более общее; Я бы сказал, что «интерпретировать» означает «обрабатывать файлы устройства как узлы устройства, а не как простые файлы».
Стивен Китт
1
@ n00b вы не можете смонтировать usersda, но вы можете по крайней мере использовать его для чтения с основного диска без ограничений и, возможно, для записи на него. Вы можете легко скопировать все содержимое диска, а также с помощью таких инструментов, как debuge2fsперезапись /etc/shadowи т. Д.
Стивен Китт,