Чому "nodev" в / etc / fstab настільки важливий? Як можна використовувати пристрої символів для злому?


19

Я дізнаюся про безпеку Linux і намагаюся зрозуміти, чому USB-накопичувач із символьним пристроєм на ньому потенційно небезпечний.

Якщо у мене є USB-накопичувач з виконуваним файлом bash, на якому є встановлений корінь, небезпека очевидна: кожен, хто має таку USB-накопичувач, може отримати привілеї root на моєму комп’ютері, якщо у мене є запис

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

в моєму /etc/fstabтому, що defaultsвключає suid.

А як щодо пристроїв символів? Як я можу використовувати символьний пристрій, щоб отримати привілеї root або зламати речі, якщо USB-накопичувач із символьним пристроєм на ньому встановлено devабо defaults?

Відповіді:


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запису.)


Це звучить цікаво! Але я не впевнений, що це розумію. Пристрій - це файл, до якого доступ до файлів здійснюється через вузли. Підроблений пристрій на моїй USB-накопичувачі матиме інший вклад, і тому це був би інший пристрій, чи не так?
rosix

7
Пристрій - це спеціальний файл, який має основну та меншу кількість; ви можете їх бачити, якщо ls -l /devвони є, це два числа, які відображаються замість розміру файлу. Ядро відповідає спеціальному файлу пристрою з драйвером, використовуючи ці номери, тож ви можете мати кілька файлів, які вказують на один і той же драйвер ядра та пристрій. Спеціальні файли створюються за допомогою mknod.
Стівен Кітт

Зверніть увагу , що /dev/tty*пристрої є символьні пристрої, і зловмисник отримати повний доступ на читання / запис ваших термінальних сесій і / або системної консолі в поєднанні з зловживаючи термінальні функції емулятора може вирішити всі види капості ...
Телком

1
@TheQuark майже так, так. Це трохи більш загальне; Я б сказав, що "інтерпретувати" означає "ставитися до файлів пристрою як до вузлів пристрою, а не до простих файлів".
Стівен Кітт

1
@ n00b ви не можете встановити usersda, але ви можете принаймні використовувати його для читання з базового диска без обмежень і, можливо, також на нього записати. Ви можете легко скопіювати весь вміст диска та за допомогою таких інструментів, як debuge2fs, перезаписати /etc/shadowтощо.
Стівен Кітт,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.