Основано на реальных событиях.
Представьте, что у вас есть большой проект, для которого вам нужно собрать программное обеспечение.
А еще у вас есть желание организовать сборочную ферму, где ваши подчиненные будут собирать необходимое программное обеспечение.
И все это происходит под Linux, и каждому необходимо с минимумом затрат организовать «чистую» среду.
Как это сделать? Несколько человек в зале подняли руки и воскликнули: «Chroot!» Вы согласились, что это просто, быстро и каждый получает все ресурсы хост-машины.
Все аплодировали, решение было принято.
И вот через неделю после внедрения этого решения и после увольнения сотрудника «Х» вы просыпаетесь, а на сервере девственно чистый жёсткий диск.
Злодей уничтожил труды разработчиков, работа остановилась.
Почему он смог удалить все, если находился в «защищенном» «заблокированном» chroot? Вся суть в том, что злодей мог взломать программы.
Или у него просто были рут права в приложении.
Начнем издалека.
В Linux помимо реальных файловых систем есть виртуальные.
Одной из таких систем является /proc/, файловая система информации ядра.
Например, команда $ zcat /proc/config.gz
покажет нам содержимое конфига, с помощью которого было собрано загруженное ядро.
В этой файловой системе содержится масса информации, и она почти всегда необходима, когда вы что-то создаете под Linux. Соответственно, он монтировался в chroot, в котором сидел наш воин.
А поскольку chroot не предполагает загрузку собственного ядра, то он монтировался из хост-системы командой типа mount -t proc proc /mnt/chrootme/proc/
и, что немаловажно, содержит информацию о хост-системе!
В /proc есть папки типа /proc/$pid/cwd, в которых можно просмотреть содержимое папки, актуальной для данного процесса (а для текущего процесса также есть ярлык /proc/self/pid) .
Такие папки есть для всех запущенных процессов, включая init.
Какая папка является текущей для init? Верно, /! А так как наш init хостовый, то задача «выйти наверх» сводится к тому, чтобы сделать # chroot /proc/1/cwd/
и потираю руки: вуаля, мы на улице! Дальнейшая свобода действий ограничена лишь фантазией человека, воспользовавшегося уязвимостью.
Как не попасть в такую ситуацию?
- Никогда не используйте chroot для незнакомцев!
- Используйте виртуализацию для создания ферм сборок.
Медленно, но безопасно (а с технологиями svm/vtx - не медленно).
- Не давайте root (или даже малейшую возможность его получить) в chroot, даже тем, кому вы доверяете.
-
Создание Стильного Контента. Часть 1.
19 Oct, 24 -
Интернет Вещей В Городе: Сегодня И Завтра
19 Oct, 24 -
Как Расти: 7 Уроков Из Истории Wechat
19 Oct, 24 -
Конференция-Фестиваль Mobilefest 2012
19 Oct, 24 -
Посвящается Java-Кодерам.
19 Oct, 24 -
К-Мелеон 75: Прошел В Финал
19 Oct, 24