SELinux на практике: DVWA-тест

в 10:28, , рубрики: CentOS, redhat, selinux, Блог компании Positive Technologies, Веб-разработка, информационная безопасность, метки: , ,

SELinux на практике: DVWA тестПосле публикации предыдущей статьи про SELinux поступило много предложений «на практике доказать полезность» этой подсистемы безопасности. Мы решили произвести тестирование. Для этого мы создали три уязвимых стенда с типовыми конфигурациями (Damn Vulnerable Web Application на CentOS 5.8). Отличия между ними были лишь в настройках SELinux: на первой виртуальной машине он был отключен, на двух других были применены политики «из коробки» — targeted и strict.

В таком составе стенд виртуальных машин подвергся тестированию на проникновение. Взглянем на результаты?


Впрочем, давайте для начала обратимся к настройкам узлов. Для создания шаблонов была использована операционная система CentOS 5.8 с развернутой на ней «лампочкой» (LAMP). В процессе настройки я старался допускать все возможные в данном случае типичные ошибки: подключение к БД с правами суперпользователя, настройку всего что только можно «по умолчанию». Таким образом мы старались воссоздать три линии развития событий с единой отправной точкой.

Исходный сервер представляет собой Апач в объятиях Красной Шапочки, который получил все возможные обновки — при помощи стандартной утилиты yum. Конечно же, в этой сказке не обошлось без своей Бабушки: на узлах установлена база данных MySQL. Эту прекрасную компанию дополняет крайне уязвимый Волк — Damn Vulnerable Web Application, через которого можно добраться практически до всех прочих персонажей. Однако на двух серверах из трех хакеров ждет Охотник с ружьем — SELinux, который собирается отстрелить Волку все лишние конечности при сомнительной активности.

На незащищенном сервере SELinux находится в режиме «Disabled». Это классическое решение из инструкций с Сайта-Который-Нельзя-Называть. Все лежит на своих местах, httpd и mysqld имеют конфигурацию по умолчанию. Никакой дополнительной защиты, таким образом, на узле нет, и все зависит от устойчивости непосредственно самих служб.

В качестве одного из вариантов защиты веб-сервера я использовал SELinux с политикой targeted. Изменений в нее никаких не вносил: решение «из коробки» именно в том виде, в каком его предлагает вендор. Сервисы запускаются в подготовленных доменах и действуют в рамках «стандартного функционирования» — с точки зрения инженеров Red Hat.

Последняя конфигурация представляет собой «строгую» политику SELinux, и в соответствии с заложенной идеей действует по принципу белого листа. Что не разрешено — то запрещено. Файловую часть я постарался разметить необходимыми контекстами, крайне скупо выделяя привилегии. Такая настройка дает достаточно «закрученную» систему, хотя и без фанатизма.

Я попросил своего коллегу из Positive Technologies (на Хабре он известен как ki11obyte) провести тест на проникновение. Дальше рассказывать будет он.

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

Дана форма загрузки изображений на сервер, которая проверяет только поле Content-Type в запросе. Заливаем веб-шелл на PHP, подменив Content-Type (в данном случае с помощью BurpSuite) на image/jpeg.

SELinux на практике: DVWA тест

Шелл проходит проверку и загружается на сервер.

SELinux на практике: DVWA тест

Настроенный SELinux также не смог в данном случае защитить систему.

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

SELinux на практике: DVWA тест

Файл подключился успешно на каждой из машин. SELinux, таким образом, не защитит нас от ошибок в веб-приложениях.

Теперь можем спокойно выполнять команды через загруженный веб-шелл.

SELinux на практике: DVWA тест

Или можем воспользоваться обратным соединением для получения более привычной консоли.

SELinux на практике: DVWA тест

Теперь очередь машины со включенным SELinux. Снова получаем веб-шелл — и немного разочаровываемся: не хватает прав на создание сокетов и даже на выполнение ls.

SELinux на практике: DVWA тест

SELinux на практике: DVWA тест

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

SELinux на практике: DVWA тест

Листинг, кстати, удалось осуществить средствами PHP.

SELinux на практике: DVWA тест

Кроме того, удалось создать файл, сделать его исполняемым и исполнить.

SELinux на практике: DVWA тест

Следующим шагом был захват СУБД. С помощью веб-шелла подсматриваем конфигурационный файл MySQL веб-приложения и используем его для подключения.

Запрос SELECT LOAD_FILE(‘/etc/passwd’) позволяет читать файлы. Также нам легко удается записать файл во временный каталог: SELECT 1 INTO OUTFILE '/tmp/ololo'. Что оказалось действительно странным, так это довольно необычные права на созданный файл.

SELinux на практике: DVWA тест

На машине со включенным и сконфигурированным SELinux отличий обнаружено не было, что несколько разочаровало.

В результате эксперимента мы пришли к следующим выводам. Во-первых, я ошибся с выбором уязвимого приложения: DVWA — плохой пример для SELinux. Основная масса «уязвимостей» направлена на то, к чему и так есть доступ в домене httpd_t. В итоге совсем непонятно — как помочь несчастной Красной Шапочке и безотказному, на все согласному Апачу. Единственным подохдящим решением стало ограничение доступа к большинству двоичных файлов — с запретом обратного соединения. Во всех остальный случаях действия злоумышленника просто не попадали в сферу компетенции подсистемы безопасности при штатных настройках.

Во-вторых, стало окончательно ясно, что настройка SELinux для веб-проекта — весьма трудоемкое дело, которое требует уверенных знаний и значительных усилий. Замечу: не просто «для защиты веб-сервера», а именно для серьезной защиты проекта в целом. Возможно составить собственную политику взаимодействия контекстов, но целесообразность этого вызывает сомнения. Мое личное мнение: от грамотной настройки php и httpd и регулярных обновлений зависит гораздо больше.

Итак, SELinux способен как минимум запротоколировать нездоровую активность в системе. А если внимательно выполнить настройку — даже и запретить несанкционированные действия. К сожалению, однако, он никак не сможет защитить ваш веб-проект от ошибок в коде или неверной настройки приложений.

Автор: isox

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js