Сегодня я хочу обратить ваше внимание на интересный проект SecGen при помощи которого становится возможным иметь каждый день новый Metasploitable или другую виртуальную машину для изучения основ этичного хакинга.
Все происходит в автоматическом режиме, нужно лишь установить фреймворк. Начинаем!
Как это работает?
SecGen представляет из себя скрипт, написанный на ruby. В основе его работы лежат Vagrant и Puppet.
Напомню, что Vagrant — это инструмент, позволяющий быстро и удобно разворачивать целые инфраструктуры из виртуальных машин, используя гипервизоры VirtualBox, VM Ware локально или облачный сервис Amazon AWS. Вы можете описать все настройки будущей виртуальной машины в специальном файле Vagrantfile. И вам не придется скачивать ISO-образы ОС, т.к. Vagrant уже предлагает множество готовых образов виртуальных машин (box), которые можно скачать из специального каталога.
А Puppet — средство автоматизации настройки машин, пришедшее на замену bash скриптам. Puppet имеет понятный язык описания конфигураций. Скрипты хранятся в файлах с расширением .pp. Puppet может установить определенный софт на машину, прежде проверив, что система удовлетворяет требуемым условиям, выполнить его настройку, задать переменные окружения и многое другое.
Таким образом SecGen нужно лишь выбрать какой box скачать и развернуть при помощи Vagrant, какой софт установить и настроить при помощи Puppet и сгенерировать флаги, которые нужно найти пентестеру в процессе эксплуатации.
SecGen имеет модульную структуру и каждый модуль представляет из себя дистрибутив с уязвимым приложением, его настройки, puppet-скрипты и некоторые дополнительные файлы для его корректной обработки SecGen.
Установка
Официально тестирование проводится на дистрибутиве Ubuntu и процесс установки описан на официальном github. Я буду использовать 64-битную Ubuntu 16.04.3, которая сама является виртуальной машиной с 2.5 ГБ RAM.
Устанавливаем требуемые пакеты
Также вам (возможно) потребуется установить еще один пакет, не указанный на официальном сайте
Теперь клонируем репозиторий github
Переходим в созданный каталог и выполняем установку всего необходимого
Начнут устанавливаться необходимые библиотеки Ruby
Проверяем, что скрипт работает
И видим доступные опции
Создаем свою первую машину со случайным набором уязвимостей
Это базовый режим работы SecGen, если никакие ключи не задавать. Выполняем команду
Начнется скачивание Vagrant box-а, который для нас автоматически выбрал SecGen
Когда Vagrant образ виртуальной машины скачался и был импортирован, происходит запуск виртуальной машины
Автоматически настраивается форвард SSH для доступа к машине на порт 2222. Генерируется ключ, SecGen подключается к машине, устанавливает rsync и производит установку и настройку всего необходимого.
Обратите внимание, что если у вашей хостовой машины нет прямого доступа к репозиториям, а вы работаете, например, через прокси, то процесс установки прервется, так как гостевая виртуальная машине не сможет установить rsync. В таком случае вам нужно будет получить прямой доступ к репозиториям, удалить виртуальную машину и снова запустить SecGen с ключом build-vms.
Будут выполнены все необходимые Puppet скрипты
И в конце концов вы увидите сообщение в консоли
И при помощи команды virtualbox можете убедиться, что машина действительно запущена
Анатомия
В каталоге SecGen, помимо прочих, есть директории projects, scenarios и modules.
Проекты
projects, как и ясно из названия, будет хранить все необходимое для создания виртуальной машины, описанной в проекте. Вы можете удалить машину и заново сгенерировать точно такую же. Для этого нужно будет выполнить следующую команду с указанием проекта
Чтобы получить список проектов, нужно выполнить команду
И получим результат
Аналогично есть ключ build-project, задав который будут созданы конфигурационные файлы для Vagrant и Puppet, но виртуальные машины созданы не будут.
Сценарии
SecGen при запуске без ключе создаст для нас виртуальную машину со случайным набором уязвимостей, но мы можем повлиять на их характер при помощи сценариев. Они хранятся в каталоге scenarios в виде XML файлов и разбиты на категории. По умолчанию используется default_scenario.xml и выглядит он следующим образом
Здесь сказано, что будет создана виртуальная машина с ОС Linux, содержащая две уязвимости типов remote и local. Т.е. сначала нужно будет попасть на сервер через одну уязвимость и потом проэксплуатировать вторую локально.
Обычно из названия сценария становится ясно, какую машину создаст SecGen, например сценарий any_random_vulnerability.xml. Рекомендую ознакомиться с примерами в каталоге scenarios/examples.
Есть довольно сложные сценарии в каталогах scenarios/security_audit и scenarios/ctf.
Для CTF предлагается воспользоваться фронтендом от разработчиков SecGen.
Модули
Из описания сценариев становится ясно, что модули делятся на категории. Все модули собраны в каталоге modules и разбиты на
- bases
- build
- encoders
- generators
- networks
- services
- utilities
- vulnerabilities
В свою очередь в каждой из групп есть подгруппы, вроде smb, webapp, bash, ftp и т.п.
Каждый модуль имеет примерно следующую структуру
Файл secgen_metadata.xml подробно описывает модуль. Это необходимо для корректной работы сценариев и выбора этого модуля для подходящего случая
Часть файла
Каталог manifes содержит puppet скрипты configure.pp, init.pp и install.pp
Каталог files содержит необходимые дистрибутивы. В данном случае один файл chkrootkit-0.49.tar.gz
Детали проекта
Когда проект создан, вы можете найти в нем файл scenario.xml, описывающий, какие уязвимости были использованы и как вообще получить флаги.
Например в нашем проекте мы можем найти два XML тега vulnerability, указывающие на модули
modules/vulnerabilities/unix/misc/distcc_exec с описанием «Distcc has a documented security weakness that enables remote code execution» и modules/vulnerabilities/unix/desktop/xfce_lightdm_root_login с описанием «Configures XFCE w/ LightDM to automatically login as root without a password\.»
Если из описания модуля непонятно, в чем суть, можно перейти в соответствующий каталог и изучить файлы модуля.
Так же в каталоге проекта есть скрытая директория .vagrant, в которой, в частности, содержится приватный ключ для доступа к серверу по протоколу SSH под пользователем vagrant. Файл private_key.
Таким образом подключиться к виртуальной машине можно следующим образом
команда ifconfig выдаст нам следующий результат
Тестируем
IP адрес мы выяснили и теперь можешь провести тестирование на проникновение. Проверим доступность виртуальной машины с хоста
Сканируем и обнаруживаем следующие открытые порты
Далее при помощи вашего любимого дистрибутива для тестирования на проникновение можно начинать эксплуатацию distcc.
Единственное что, по умолчанию виртуальная машина имеет два интерфейса в режимах NAT и Host-Only, так что получать доступ к ней с внешней машины можно или через настройку проброса портов в NAT интерфейсе.
Или перенастроить машину, которая является точкой входа на использование другого типа интерфейса Virtualbox, доступного извне.
Можно изменить тип интерфейса Host-Only на Bridged, перезапустить машину и назначить статический IP адрес, если в вашей инфраструктуре нет DHCP. И не забыть задать маршруты через мост.
В заключении
Конечно, модули пишут люди и возможны ошибки. Но в большинстве случаев SecGen создает корректно настроенные и рабочие виртуальные машины для практики. На официальном сайте на английском языке можно изучить подробную инструкцию по созданию собственных сценариев и модулей, что многократно расширяет возможности SecGen и, я надеюсь, позволит проекту развиваться дальше.
https://habrahabr.ru/company/pentestit/blog/338274/?utm_source=vk.com&utm_medium=social&utm_campaign=sozdaem-uyazvimye-virtualnye-mashiny-v-dv
Комментариев нет:
Отправить комментарий