Содержание статьи
Идея попробовать современную платформу эмуляции возникла, когда я наблюдал за работой команды инженеров кибербезопасности. Они часто занимаются изучением, развертыванием, интеграцией и тестированием разных продуктов. Вендоров и решений — огромное количество, но значительная их часть вращается вокруг защиты одних и тех же ключевых систем, некой стандартной корпоративной инфраструктуры: рабочих станций, серверов AD, файловых шар, почтовых серверов, веб‑серверов, серверов баз данных. Также в любой инфраструктуре присутствует некая стандартная иерархия групп пользователей, сетевая сегментация, набор ПО и сетевое оборудование в виде коммутаторов, маршрутизаторов, файрволов.
Задачи по интеграции, как правило, тоже типичные: настроить авторизацию через AD/Radius, подружить с почтой, раскатать агентов, собрать кластер, подать зеркалированный трафик, отправлять аналитикам логи или флоу. Практика показывает, что без стандартизированного подхода каждый инженер со временем нагородит себе подобную инфраструктуру, и каждый — со своим блек‑джеком. В результате получается целый зоопарк по‑разному сконфигурированных виртуалок, на которых крутится непонятно что. Просто взять и быстро заюзать такие ВМ другой член команды, скорее всего, не сможет.
Помимо разбросанных на разных ESXi-хостах «личных» ВМ, для тестирования файрволов, запуска малвари и прочих задач требуются сегментированные сети, поэтому в такой инфраструктуре порой встречаются еще и порт‑группы. Они необходимы только для лаборатории, но по факту ходят в интернет через продакшен‑инфраструктуру. После увольнения инженера подобные виртуалки просто убиваются вместе со всем «накопленным опытом». Короче говоря, такой подход казался мне совсем не эффективным, тем более в нем не используются некоторые фичи и гибкость VMware. Я решил стандартизировать процесс, а заодно протестировать платформу эмуляции.
Зачем киберполигон инженерам?
Как ты, наверное, уже знаешь, киберполигон — это некая виртуальная среда, нацеленная на обучение. В отличие, скажем, от классических CTF-подобных соревнований, на киберполигоне учатся также и защитники. Помимо киберполигонов, которые носят соревновательный характер и доступ к которым бесплатный, уже существует целый класс недешевых вендорских решений с готовыми сценариями атак и защиты, позволяющий эффективно обучать как «синие» команды, так и «красные» — в облаке по подписке или on-premise. В нашем случае была необходима платформа, позволяющая достигать следующих целей:
- эффективное внутреннее/внешнее обучение инженеров;
- полноценный демостенд для заказчиков.
Выбор платформы
Под наши нужды была выбрана платформа EVE-NG Community Edition — это форк известного UNetLab, который больше не поддерживается. Данное решение очень любят сетевики, и действительно есть за что. Ты только посмотри на примеры сетевых топологий с кластерами и BGP!
Однако она создана не только для сетевиков: возможности ее использования практически безграничны, они зависят исключительно от фантазии и имеющихся знаний. Для работы нам требовался веб‑интерфейс, а у конкурентов он присутствовал на момент выбора только в GNS3, да и то в бете. Обо всех фичах EVE-NG, включая версию Professional и Learning Center, в которых есть Docker и поддержка кластеризации, ты можешь прочитать на официальном сайте, я же расскажу о ключевых возможностях.
- QEMU/KVM. В данной связке QEMU выступает в роли эмулятора железа, он достаточно гибок и может запускать код, написанный для одной архитектуры процессора, на другой (ARM на x86 или PPC на ARM). KVM же, в свою очередь, позволяет достигать высокой производительности благодаря виртуализации с аппаратной поддержкой, такой как Intel VT-x и AMD-V.
- IOU/IOL и Dynamips. Поддержка стареньких, но вполне рабочих коммутаторов и маршрутизаторов Cisco.
- Оптимизация памяти UKSM в ядре. При одновременном использовании однообразных ВМ позволяет дедуплицировать память и тем самым существенно снизить расход RAM.
- Полноценный веб‑интерфейс на HTML5.
- Многопользовательский режим для одновременной работы различных виртуальных лабораторий.
- Взаимодействие с «настоящей» сетью.
Установка
Мы развернули «Еву» на железе (bare metal). Для такого типа установки предъявляются следующие системные требования: ЦПУ — Intel Xeon CPU supporting Intel® VT-x with Extended Page Tables (EPT), ОС — Ubuntu Server 16.04.4 LTS x64.
Все остальное зависит от предполагаемой нагрузки: тут чем больше, тем лучше, особенно это касается ОЗУ. Если тебя смутила старая версия ОС, то не переживай, она будет поддерживаться до 2024 года. Замечу, что Community-версия обновляется не так часто, как Professional, в которой для установки на железо требуется уже 18.04 LTS. Если же ты весь такой в облаках, то имей в виду, что EVE-NG официально поддерживает GCP.
info
Знаешь ли ты, что в GCP (Azure, Яндексе) новый пользователь может получить 300 долларов в виде бесплатных кредитов для тестирования сервисов, например для запуска ВМ? И что, помимо этого, в GCP есть «вытесняемые ВМ»? Это такие виртуалки, которые стоят в 3–4 раза дешевле обычных, но живут максимум 24 часа или меньше: если облаку потребуются ресурсы, которые занимает эта ВМ, оно ее грохнет.
К сожалению, политика Google изменилась, и бесплатные кредиты нельзя тратить на вытесняемые ВМ, но, если вдруг когда‑нибудь тебе потребуется 128 RAM в облаке и задешево, ты знаешь, что делать! 😉
Мы же сейчас с тобой рассмотрим вариант быстрого знакомства с платформой, развернув ее на ноутбуке с VMware Workstation. Поддерживается только VMware, включая Player и ESXi. Но в любом случае следует понимать, что вложенная (nested) виртуализация (это когда виртуалка работает внутри другой виртуалки) может плохо влиять на производительность. Также твой ЦПУ должен поддерживать технологии аппаратной виртуализации, такие как Intel VT-x и AMD-V. Не забудь проверить, включены ли они в BIOS.
Интересно, что про поддержку AMD в Community-версии официально не сообщается, а вот в документации к Professional производители уже написали, что поддерживают последние версии процессоров. Как бы то ни было, я развернул Community-версию на процессоре AMD Ryzen 5 4600H без каких‑либо проблем.
Если ты используешь в качестве хостовой ОС Windows, тебе следует помнить кое‑что о роли Hyper-V, в частности в Windows 10. Вот что об этом написано на сайте Microsoft:
We introduced a number of features that utilize the Windows Hypervisior. These include security enhancements like Windows Defender Credential Guard, Windows Defender Application Guard, and Virtualization Based Security as well as developer features like Windows Containers and WSL 2.
Помимо самой ОС и ее фич, эту службу может использовать еще и Docker Desktop. Из‑за этого до версии 15.5 включительно VMware Workstation (как и VirtualBox) вообще не работала на хосте с включенной ролью Hyper-V. Коллаборация Microsoft и VMware позволила все же сделать интеграцию Workstation с WHP через API, благодаря чему появилось рабочее решение. Но, к сожалению, помимо того, что такая связка стала медленней работать, имеется главное ограничение, а именно — функции Intel VT-x / AMD-V недоступны для гостевых ВМ. Служба Hyper-V эксклюзивно использует VT-x, ограничивая к нему доступ другим гипервизорам.
Поэтому, если на твоем хосте включена роль Hyper-V, проанализируй, для чего она используется, и при возможности отключи ее. Если это невозможно, используй другой ПК, сервер или облако.
Я рекомендую качнуть сразу книгу рецептов EVE-NG в формате PDF. В ней содержится исчерпывающее руководство по всему проекту, от А до Я.
Итак, для быстрого развертывания мы скачаем ZIP-архив с OVF-образом, распакуем архив и двойным щелчком мыши по EVE-COMM-VM.
импортируем его в Workstation.
Откроем свойства, добавим при необходимости памяти и процессоров. Убедись, что у тебя стоит галочка Virtualize
в группе настроек Virtualization
. Без нее EVE-NG будет загружаться сама, можно открывать и создавать лаборатории, но ВМ внутри лаборатории запускаться не будут.
Для наглядности мы выберем режим Bridged
у сетевого адаптера, тем самым наши ВМ внутри лаборатории станут доступны напрямую в локальной сети.
Работа с платформой
Запускаем EVE-VM в Workstation. После успешной загрузки ты получишь приглашение на ввод пароля.
Логинимся, используя стандартную учетку root/
для консоли.
Далее отвечаем на стандартные вопросы по настройке ОС, такие как:
- New root password;
- Hostname;
- DNS domain name;
- DHCP/Static IP address;
- NTP Server;
- Proxy Server configuration.
После ответа на последний вопрос система автоматически перезагрузится. По завершении перезагрузки открываем веб‑интерфейс по IP-адресу, указанному в консоли ВМ, и логинимся, используя учетку admin/
.
По большей части вся работа с платформой выполняется через веб‑интерфейс. По SSH подключаться к «Еве» приходится лишь изредка, например для подготовки образов. Существует два варианта подключения к монитору ВМ: через нативные приложения или консоль HTML5. При выборе нативной консоли на ПК, с которого открыт веб‑интерфейс, должны быть установлены приложения для удаленного доступа и Wireshark. Набор софта разнится в зависимости от ОС, а также требуется некоторый тюнинг реестра, поэтому рекомендуется использовать Windows/Linux/Apple Client Side Integration Pack, содержащий все необходимое, включая скрипты для конфигурации.
При использовании же консоли HTML5 все управление ведется полностью через браузер. Консоль работает на Apache Guacamole, как во многих современных вендорных лабораториях.
После логина мы попадаем в некий файловый менеджер, где у нас хранятся файлы лабораторий. Сначала я покажу тебе готовую корпоративную лабораторию, а потом мы создадим для примера свою. Отмечу лишь, что для лучшего визуального отображения многие соединения на этой схеме были изменены или вовсе удалены.
По своей сути файл лаборатории — это конфиг в формате XML, описывающий конфигурацию нод, их расположение на поле, соединения и прочее. Ноды — это объекты ВМ, которые могут быть образами IOL/Dynamips/QEMU. Лабы можно клонировать, экспортировать и импортировать прямо через веб‑интерфейс.
При открытии лаборатории демонстрируется вид топологии, чем‑то похожий на Visio. На этой топологии добавляются и соединяются между собой ноды. Слева в меню находится все, что необходимо для работы, ноды можно запускать сразу все, а можно выборочно.
В отличие от Visio, при щелчке по значку открывается удаленное подключение к ноде.
Каждая нода имеет свои стандартные настройки ВМ, такие как образ, с которого выполняется загрузка, количество CPU, RAM, Ethernet-портов, аргументы для гипервизора и другое.
Сети
В «Еве» два главных вида сетей: мост и интерфейс управления. В основном тебе придется щелкать мышью на нодах и выбирать порты источника и назначения. Это как раз одна из причин, по которым сетевикам так нравится «Ева»: в ESXi, например, для «чистых» соединений point-to-point требуется создавать отдельный vSwitch и порт‑группу, что отнимает кучу времени и сил.
Сеть в режиме моста действует как неуправляемый коммутатор. Она поддерживает передачу помеченных пакетов dot1q
. Это может быть необходимо, когда нам нужно соединить множество узлов в плоскую (dot1q) сеть без использования образа сетевого устройства. Получится полностью изолированная виртуальная сеть.
Второй вариант сети называется «сеть управления» с именами Cloud0/
. Этот интерфейс настроен в режиме моста с первым сетевым адаптером сервера. Благодаря этому ты можешь сделать ноды доступными напрямую по сети, они будут находиться в том же сетевом сегменте, что и интерфейс управления, и могут взаимодействовать с другими внешними сетями.
Остальные интерфейсы Cloud*
можно связать со вторым и выше портом Ethernet для подключения к другой сети или к устройству. Настраивать на них IP-адрес не требуется. Они будут действовать как чистый мост между твоим внешним соединением и лабораторной нодой.
Образы
«Ева» поставляется без образов, на борту имеется только Virtual PC с базовой сетевой функциональностью.
Список поддерживаемых образов на сайте не всегда актуальный, об этом напрямую говорится в документации. Из‑за лицензионных ограничений авторы проекта не могут выкладывать у себя на сайте прямые ссылки на образы, но на практике любой образ можно найти на торрентах. А если ты работаешь в интеграторе, так это вообще не проблема.
Образы Dynamips/IOL
С образами сетевых устройств Dynamips/IOL почти ничего делать не нужно, кроме выяснения значения IDLE PC и создания файла лицензии. К сожалению, не все функции этих сетевых устройств поддерживаются. Их конфиги хранятся в отдельном месте, в меню startup-configs
и в NVRAM, а не в самом файле образа. NVRAM используется как постоянное хранилище с возможностью записи для начальной конфигурации. В процессе загрузки нода всегда будет проверять NVRAM на наличие сохраненной конфигурации.
Процесс загрузки таких образов изображен на следующей схеме и в целом понятен без дополнительных пояснений.
Образы QEMU/KVM
Все остальные системы будут работать в виде QEMU-образов. Особенность работы этих образов в «Еве» заключается в том, что сначала создается некий базовый образ, а при запуске и работе ВМ все изменения пишутся в отдельный файл. Это можно расценивать как своего рода снапшоты, привязанные к отдельным пользователям.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»