Открыть список
Как стать автором
Обновить

Из чрута — на поверхность: как, почему и что делать?

Информационная безопасность
Из песочницы
Основано на реальных событиях.

Представьте себе, что у вас есть крупный проект, для которого необходимо собирать софт. А ещё у вас есть желание замутить сборочную ферму, на которой ваши подчинённые будут собирать нужный софт. А ещё это всё происходит под Linux-ом, и каждому надо организовать «чистое» окружение с минимумом затрат. Как это сделать?

В зале подняли руки несколько человек и воскликнули «chroot!». Вы согласились, что это просто, быстро и каждый получает полностью ресурсы хостовой машины. Все заапплодировали, решение принято.

А через неделю после интеграции этого решения и после увольнения сотрудника «икс» вы просыпаетесь — а на сервере девственно чистый жёсткий диск. Злодей уничтожил труды разработчиков, работа встала.

Почему же он сумел удалить всё, если был в «защищённом» «запертом» чруте?


Вся суть — в том, что злодей мог ставить в чрут программы. Или же просто обладал в чруте правами root.

Начнём издалека. В 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-е даже тем, кому доверяешь.
Теги:linuxбезопасностьchroot
Хабы: Информационная безопасность
Всего голосов 71: ↑59 и ↓12 +47
Просмотры22.4K

Комментарии 34

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Похожие публикации

Инженер-проектировщик систем информационной безопасности
от 30 000 до 60 000 ₽ИЦ РЕГИОНАЛЬНЫЕ СИСТЕМЫВолгоградМожно удаленно
Технический Писатель
от 30 000 до 50 000 ₽ИЦ РЕГИОНАЛЬНЫЕ СИСТЕМЫВолгоград
Системный инженер (аудит ПО)
от 40 000 до 70 000 ₽ИЦ РЕГИОНАЛЬНЫЕ СИСТЕМЫВолгоградМожно удаленно
Бизнес-аналитик
до 150 000 ₽Российский квантовый центрМосква
Security Engineer
от 2 000 до 5 000 $CoinLoanМожно удаленно

Лучшие публикации за сутки