Есть ли способ, которым злоумышленник может использовать mkdir для взлома системы?

22

Я настраиваю ограниченную учетную запись для пользователя ricardo, проблемного пользователя в моей системе. Я хочу предоставить ему право создавать каталоги sudo, что ему иногда нужно делать. Я рассматриваю это правило в моем /etc/sudoersфайле:

ricardo   ALL=(root) NOPASSWD: /bin/mkdir

Используя только это правило, может ли Рикардо преднамеренно или случайно скомпрометировать систему?

Рикардо Альтамирано
источник
2
Если у вас есть файловая система со статическим числом инодов, он может использовать все ваши иноды.
Иордания
2
@schaiba Он любит повозиться и посмотреть, сможет ли он использовать систему, и не всегда читает справочные страницы столько, сколько должен.
Рикардо Альтамирано
8
Надлежащее обучение пользователей, в сочетании с отсутствием sudo, было бы рекомендовано для меня.
Schaiba
2
Как говорит @schaiba, вы можете использовать таких пользователей, обучая их и наделяя их обязанностями (под пристальным наблюдением). Я видел войны между системными администраторами и пользователями, поскольку первые пытались слишком сильно заблокировать систему. Число пользователей превысило число системных администраторов 10: 1, и даже тогда ( без сегодняшнего доступа в Интернет!) Поражение системных администраторов было унизительным. Никогда не становись в такое положение!
vonbrand
2
Это случай одного Рикардо слишком много. Или, по крайней мере, так говорил BOFH ...
Охотник на оленей

Ответы:

21

Я подозреваю, что такая атака сработает, когда «что-то» - это модуль ядра, который попытается загрузить после монтирования rootfs:

$ sudo mkdir -m 777 /lib/modules/`uname -r`/a
$ cp evil.ko /lib/modules/`uname -r`/a/«something».ko

Также обратите внимание, что вы можете использовать другие имена, в зависимости от псевдонимов, объявленных в модуле. Я предполагаю, что он не будет загружен, пока не будет запущен depmod, что произойдет в следующий раз, когда произойдет обновление ядра, так что mkdirон даже не будет отображаться в журнале sudo в последнее время.

В / etc есть много вещей, которые читают все файлы в каталоге, иногда рекурсивно. Хуже того, некоторые из этих каталогов по умолчанию не существуют, и единственный способ узнать о них - прочитать справочную страницу, сценарии инициализации и т. Д. Для программы, которая их использует. Некоторые, что еще хуже, являются устаревшими вещами с обратной совместимостью и могут даже не документироваться.

редактировать: подумал еще несколько каталогов, эти в /usr/local:

  • /usr/local/lib/perl/5.14.2(отличается в зависимости от версии Perl, попробуйте perl -Vвыяснить). Создайте там Fileподкаталог и вставьте Find.pmв него. Теперь, когда кто-нибудь использует File::Find, он будет использовать версию атакующего. Аналогичным образом сделайте то же самое с Getopt::Long. Системные утилиты часто пишутся на Perl, так что это, вероятно, дает root. (Попробуй ack-grep --color -a 'use.+::' /usr/sbin | less -R)
  • Я думаю, что Python, Ruby и т. Д. Имеют похожие каталоги. Системные утилиты написаны также на Python.
  • Подрывать многие вещи, которые кто-то компилирует с подкаталогами /usr/local/include.
derobert
источник
Да, но если <злой пользователь> сможет скопировать модули в то место, куда ядро ​​их загрузит, игра закончится до запуска.
vonbrand
1
@vonbrand <злой пользователь> обычно не может, но использовал его, sudo mkdirчтобы создать новый каталог, где он может.
Дероберт
20

Запустив mkdirот имени пользователя root, пользователь может блокировать другие процессы / пользователей от создания новых файлов и каталогов, создавая каталоги с одинаковыми именами (и / или неправильными правами) ранее.

Это может иметь отношение к безопасности, особенно с файлами журналов и блокировок .

Как отметил Джорданм , максимальное количество инодов также может быть использовано, что может блокировать всю систему.

Добавив пользователя в определенные группы (или используя ACL ), вы сможете решать проблемы без предоставления каких-либо прав через sudo.

jofel
источник
Великолепные моменты. Я, вероятно, mkdirопущу список команд, которым Рикардо разрешено использовать.
Рикардо Альтамирано
Если это для изнурительных inode, простое for((i = 0;; i++)); do touch $i; doneбудет хорошо (bashism, извините, но вы поняли идею).
vonbrand
@vonbrand За исключением того, что это не root, поэтому он будет остановлен квотой. Конечно, другие sudoкоманды, которые рассматривает OP, могут также допускать исчерпание инодов; ОП должен знать об этом DoS-векторе.
Дероберт
11

Вы должны перенаправить его в тюрьму. Или, что еще лучше, маленькой виртуальной машине, чтобы он мог падать раз в час. Все, что вам нужно сделать, это предоставить новую копию.

ott--
источник
Я очень рекомендую это. Дайте ему root-доступ на его собственной виртуальной машине.
Эмори
к корню ^ H ^ H ^ H ^ H ^ Hounty тюрьма ...
Охотник на оленей
6

Есть возможности из-за возможности создавать каталоги с правами записи. С mkdir -m 777 blahпомощью ricardoпользователя можно написать все что угодно в новый каталог. Вам понадобится процесс в системе, уже работающий от имени другого пользователя, который найдет дерево каталогов для загрузки конфигурации, сценариев или модулей. Затем пользователь может добавить свои вещи для загрузки или запуска. Первое, о чем я могу подумать, это если вы запускаете веб-сервер, который может выполнять php или cgi. Затем вы можете запускать скрипты от имени этого пользователя. Я изо всех сил , чтобы придумать пример более реального мира, особенно rootте , но я уверен , что они собираются.

ssh - пример демона, который ловит подобные сценарии. Если вы создали .sshкаталог для пользователя, у которого его нет, и поместили свой собственный authorized_hostsфайл на место. sshdзамечает, что права доступа к каталогам слишком открыты, и игнорирует открытый ключ.

Вы можете определенно создавать неудобства, создавая каталоги, в которых ожидаются файлы (например, временные tmp или файлы подкачки), с которыми многие программы не справятся.

Вы можете создать множество групп, но, похоже, вы ничего с ними не делаете. Вы можете хотя бы поставить систему на колени. Убийце OOM потребовалось около 10000 cgroups на коробке с 256M для удаления sshd.

Если вы контролируете -mопцию mkdirи UMASK sudoокружения, я думаю, что это снова просто неприятность.

Matt
источник