Обход ограничений терминала

    Сегодня операционную систему Linux можно обнаружить везде: от домашних пользовательских систем до серверов и IoT устройств. Зачастую использование терминала в данных системах — очень рискованное мероприятие, поскольку неверный ввод команды в нем может привести к непоправимым последствиям. Во избежание таких ситуаций можно либо пользоваться эмулятором терминала, либо настроить ограничения на вызов команд. В этой статье мы рассмотрим популярные инструменты для выставления ограничений на использование терминала и способы их обхода.

    Как уменьшить количество команд?

    Для любой задачи, которую выполняет операционная система, всегда есть набор софта для ее решения. Если администратор системы предпочел ограничить количество доступных команд для пользовательского ввода, то ему доступны следующие виды ПО:

    1. Софт, который позволяет задать стандартный захардкоженный набор ограничений;

    2. Софт, который позволяет вручную задать набор ограничений на ввод команд в зависимости от условий, при которых они были запущены.

    К первой категории можно отнести следующие шеллы:

    rbash

    rzsh

    rksh

    Ко второй категории относятся:

    lshell

    rssh

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

    Попробуем протестировать приложения для ограничения доступных команд. В качестве базовой системы возьмем Kali Linux на базе ОС Debian 5.9. Первым инструментом для исследования возьмем rbash, найти базовую информацию касательно его работы можно вот здесь. Запускается rbash достаточно просто:

    1.  Создадим директорию для тестирования и перейдем в нее: mkdir test; cd test

    2.  Запустим команду rbash в директории test. Для нее будут применены все стандартные ограничения, описанные в документации, в том числе и на выполнение команды cd. Проверим:

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

    Попробуем использовать другое приложение — rzsh. Его настройка такая же, как и у предыдущего подопытного. Любопытный факт — запускать rzsh или устанавливать его дополнительно не нужно, если есть zsh: достаточно указать при запуске флаг ‘-r’. Список ограничений можно найти здесь.

    Запустим ограничение на той же директории, которую создали в прошлом эксперименте и так же постараемся выйти в другую директорию:

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

    Ограничения нельзя обойти: ввод данных, которые позволили бы открыть другую директорию или файл, оканчивается провалом. Но что если попробовать обойти выставленные ограничения?

    Какие существуют методы обхода ограничений?

    При использовании описанных выше приложений или их аналогов можно задаться резонным вопросом: насколько безопасно так ограничивать терминал? Может ли злоумышленник обойти выставленные ограничения? Для ответа на эти вопросы можно попробовать применить стандартные этапы исследования систем или приложений на безопасность, то есть провести самостоятельный пентест («мысли, как преступник»):

    1.  Сбор информации (Enumiration)

    2.  Создание сценариев атаки

    3.  Реализация атаки

    Первый этап самый важный, он включает в себя специальные исследования, которые позволяют ответить на вопросы:

    1. Какой именно шелл используется для настройки ограничений?

    2. Какие команды поддерживает шелл?

    3. Какое наименование имеет операционная система?

    4. Какие известные уязвимости есть для приложения или отдельной его части?

    Список вопросов может быть изменен или дополнен по желанию. Попробуем применить этот подход по отношению к инструменту rbash. Предположим, что имеем дело с некой системой, для которой мы не обладаем сведениями о наличии каких-либо ограничений в терминале.

    1. Сбор информации. Здесь попытаемся выяснить, какой именно используется вариант настройки ограничений ввода команд.

    В нашем случае сам терминал при попытке ввода команды рассказал, что для ограничений запущен rbash

    Давайте определимся, что именно мы хотим сделать из этой ограниченной среды. К примеру, нам нужно попасть в директорию “Desktop”.

    2. Сценарий атаки. Как следует поступить для выполнения команды перехода cd? Любая система или механизм сдается, если попытаться протестировать функции, объединяющие несколько подсистем или отдельных блоков ОС, поскольку не всегда возможно программно обеспечить корректное взаимодействие между ними. В нашем случае выполнение команды cd — это запуск процесса в операционной системе. Попробуем это сделать за счет дополнительных утилит. Даже при наличии ограничений от rbash у юзера есть возможность пользоваться безобидными приложениями, например vim:

    3. Реализация атаки. Для проведения атаки можно попытаться использовать функционал vim, который может передавать команды в ОС: !.

    В открытом файле vim вводим последовательность команд: :!bash.

    В итоге получаем доступ к терминалу без ограничений:

    Таким образом, для обхода ограничений необходимо было знать команды vim и суметь запустить его из ограниченной командной оболочки. Остальные приложения можно протестировать аналогичным способом. Для проведения тестов рекомендуем ознакомиться с вот этим проектом: он поможет в построении дополнительных сценариев атак.

    Вывод

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


    Статья подготовлена экспертом OTUS - Александром Колесниковым в преддверии старта курса «Administrator Linux. Professional».

    Приглашаем всех желающих записаться на бесплатный demo-урок «Методы и возможности отладки скриптов оболочки Bash».

    OTUS. Онлайн-образование
    Цифровые навыки от ведущих экспертов

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

      0

      Для реализации любого алгоритма (тьюринг-полной системы) достаточно операции "вычесть если не ноль". А роскошь вида rbash похожа на полицейскую ленту. Сколько ньютонов может сдержать полицейская лента? Или там дело не в ньютонах а в надписи "do not cross"?

        +2

        Да в общем-то никто не мешает из rbash запустить сразу bash безо всяких vim:


        ❯ mkdir /tmp/test
        ❯ cd /tmp/test
        ❯ rbash
        user@host:/tmp/test$ cd /
        rbash: cd: restricted
        user@host:/tmp/test$ bash
        user@host:/tmp/test$ cd /
        user@host:/$ pwd
        /
        
          0
          Таким образом, для обхода ограничений необходимо было знать команды vim и суметь запустить его

          1. Можно не знать, а нагуглить.

          2. Зачем нужно vim, если можно выполнить другие команды, например bash?

          3. Непонятно зачем ставить подобные оболочки и показывать примеры их ограничений на том, что ВООБЩЕ не относится к задаче, ибо запереть пользователя в каталоге нужно делать через chroot, а не через запрещение команды cd. А через подобные оболочки как раз нужно запрещать всякие vim/bash и вообще все команды кроме разрешенных и проверенных, но в статье об этом ни слова. Как ни слова и о том, как такую оболочку поставить дефолтно.

          Очень низкий уровень материала.
            +1
            В нашем случае выполнение команды cd — это запуск процесса в операционной системе
            ну нет — в большинстве современных оболочек это встроенная команда, выполняющая системный или библиотечный вызов без всяких новых процессов, и такое положение дел уже лет 30, если не 40
              0
              Приложение конечно надо тщательно чекать
                0
                Я думал тут хотя-бы про sudo, а тут вообще какая-то фигня.
                  0

                  Нужно довольствоваться тем, что дают. Автор относится к числу тех, кто сам для себя что-то открыл и залил свои соображения сюда.

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

                Самое читаемое