Главная / Блог / Настройка лаборатории для CTF: Docker и VM

12 мин.00

Настройка лаборатории для CTF: Docker и VM

Настройка лаборатории для CTF: Docker и VM

По данным ISC2 за 2025 год, 84% менеджеров при найме junior-специалистов в ИБ гоняют кандидатов на практических тестах. Резюме с перечнем прочитанных книг больше не катит — нужно показать, что умеешь делать руками. Домашняя лаборатория пентестера — та самая среда, где можно легально ломать уязвимые сервисы, готовиться к CTF-соревнованиям и собирать портфолио решённых задач. Ниже — пошаговая настройка лаборатории для CTF на базе VirtualBox, Docker и изолированных сетей. Всё проверено на реальном ноутбуке с 8 ГБ RAM — ничего теоретического.

Минимальное железо для домашней лаборатории пентестера

Первый вопрос новичка: «Потянет ли мой ноутбук?» Почти наверняка — да, если машине менее четырёх-пяти лет. Но есть одно обязательное требование, без которого дальше можно не читать.

Аппаратная виртуализация. Заходите в BIOS/UEFI и проверяйте, что Intel VT-x (для Intel) или AMD-V (для AMD) включены. Без этого виртуальные машины либо не запустятся вообще, либо будут ползать так, что практика хакинга на своём ПК превратится в борьбу с зависаниями. На большинстве современных ноутбуков опция активна по умолчанию, но на бюджетных моделях бывает выключена. Проверяйте до того, как начнёте что-то ставить — сэкономите нервы.

Параметр Минимум Рекомендация
RAM 8 ГБ 16 ГБ
CPU 4 ядра 6+ ядер
Диск 50 ГБ свободно (HDD) 100+ ГБ (SSD)
ОС хоста Windows 10/11, Linux, macOS Linux или Windows 11

С 8 ГБ RAM хватит ровно на одну атакующую виртуальную машину Kali Linux и пару Docker-контейнеров с уязвимыми сервисами. Параллельно запустить Metasploitable и DVWA — уже 16 ГБ. А 32 ГБ пригодятся позже, когда дорастёте до многосегментных лабораторий с Active Directory.

SSD для CTF как таковых не обязателен, но критичен для терпения. Загрузка Kali с HDD — 3–4 минуты. С SSD — 40 секунд. При подготовке к CTF соревнованиям пересоздавать окружение приходится регулярно, и каждая минута простоя убивает мотивацию быстрее любой нерешённой задачи.

VirtualBox или VMware — что выбрать для CTF

Оба гипервизора сейчас бесплатны для личного использования. Оба запускают виртуальные машины Kali Linux и уязвимые образы для тренировки. Разница — в деталях.

Критерий VirtualBox VMware Workstation Player
Цена Бесплатно, open source Бесплатно (личное использование)
ОС хоста Windows, macOS, Linux Windows, Linux (Fusion для macOS)
Производительность Достаточная для 1–2 VM Заметно выше на тяжёлых сценариях
Снапшоты Да, неограниченно Да (полная функциональность в Pro)
Сетевые режимы NAT, Bridged, Host-Only, Internal NAT, Bridged, Host-Only, Custom
Когда НЕ подходит Более 3 VM одновременно Нужен open source гипервизор

VirtualBox — бесплатный старт без компромиссов

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

VMware Workstation — когда нужна производительность

VMware даёт заметный прирост на сложных сценариях: несколько Windows-VM, лаборатории с Active Directory, тяжёлые эксплойты с большим потреблением памяти. Для начинающих — избыточно. VMware имеет смысл, когда ваша домашняя лаборатория пентестера перерастёт формат «одна Kali + один целевой сервис».

Apple Silicon (M1/M2/M3): тут засада. VirtualBox на ARM-чипах запускает только ARM64-гостей. Kali Linux имеет ARM64-образ и работает нормально. Но Metasploitable 2/3, OWASP BWA и большинство VulnHub-машин — x86-only, на M-серии не поедут. Решение — Docker для целевых сервисов (подробности ниже).

Настройка Kali Linux в VirtualBox пошагово

Вместо ручной установки с ISO берите готовый OVA-образ. На kali.org/get-kali/ лежит виртуальная машина Kali Linux для VirtualBox — уже настроенная, с предустановленными инструментами и рабочим окружением. Экономит 30–40 минут по сравнению с установкой из ISO, и нет шанса промахнуться с разметкой диска.

Шаг 1. Скачайте VirtualBox с virtualbox.org и установите. На Windows после установки потребуется перезагрузка.

Шаг 2. Скачайте OVA-образ Kali для VirtualBox (размер около 3–4 ГБ).

Шаг 3. В VirtualBox: «Файл — Импорт конфигурации», указываете скачанный файл. Перед импортом измените параметры: выделите 4 ГБ RAM (2 ГБ — абсолютный минимум, интерфейс будет подтормаживать) и 2 ядра CPU.

Шаг 4. После импорта откройте настройки VM — раздел «Система» — вкладка «Ускорение». Убедитесь, что VT-x/AMD-V и PAE/NX включены.

Шаг 5. Запускаете VM. Логин по умолчанию: kali / kali. Первое действие после входа — sudo apt update && sudo apt upgrade -y. На нормальном канале займёт 5–10 минут.

Шаг 6. Сразу делайте снапшот чистой системы: «Машина — Сделать снимок состояния», называете «Clean Install». Теперь при любой поломке откат — 10 секунд вместо повторной установки.

На этом этапе у вас рабочая настройка Kali Linux в VirtualBox с полным набором инструментов. Но направлять сканирование из неё в реальную сеть — административное и уголовное нарушение. Нужны изолированные цели внутри лабораторной сети.

Сетевая изоляция виртуальных машин

Изоляция — не перестраховка, а техническая необходимость. Без неё Nmap из Kali может уйти в домашнюю сеть и начать стучаться к роутеру соседей. В терминах MITRE ATT&CK: Container Administration Command (T1609, Execution) описывает выполнение команд внутри контейнера, а Escape to Host (T1611, Privilege Escalation) — выход из изолированной среды на хост-систему. Корректная сегментация сети лаборатории минимизирует последствия обоих сценариев.

Типы сетевых адаптеров в VirtualBox

NAT — VM получает интернет через хост, но невидима для других VM. Годится для обновлений, бесполезно для лаборатории: атакующая и целевая VM не видят друг друга.

Bridged (сетевой мост) — VM получает IP в домашней сети. Для лаборатории опасно: сканирование из Kali достигнет реальных устройств.

Host-Only (виртуальный адаптер хоста) — VM видит только хост и другие VM на той же виртуальной сети. Интернета нет. Оптимальный режим для изолированного окружения для хакинга.

Internal (внутренняя сеть) — VM видит только другие VM на той же внутренней сети, даже хост недоступен. Максимальная изоляция, но усложняет отладку.

Создание изолированного окружения для хакинга

Рабочая схема для CTF-лаборатории: два адаптера на атакующей VM, один — на целевых.

Kali VM: адаптер 1 — NAT (обновления и скачивание инструментов), адаптер 2 — Host-Only (связь с целевыми VM в лабораторной сети).

Целевые VM (Metasploitable, DVWA и подобные): только адаптер Host-Only. Без NAT, без Bridged — никакого выхода наружу.

Проверка изоляции после настройки: в целевой VM выполните ping 8.8.8.8 — должен быть недоступен. Из Kali пропингуйте IP целевой VM — должен отвечать. Дополнительно проверьте, что из Kali через Host-Only адаптер не доступен ваш домашний роутер: ping 192.168.1.1 — не должен отвечать. Финальная проверка: nmap -sn 192.168.56.0/24 из Kali покажет только вашу Kali и целевые VM. Ничего лишнего. Сетевая изоляция виртуальных машин работает.

Docker контейнеры для пентеста

Зачем Docker, если уже есть виртуалка

Виртуальная машина — полноценная ОС с собственным ядром, загрузчиком и системными сервисами. Metasploitable 2 занимает ~6 ГБ на диске и ест 512 МБ RAM даже в простое. Docker-контейнер — изолированный процесс, использующий ядро хоста. DVWA в Docker: ~200 МБ на диске, запуск за 3–5 секунд вместо минуты.

На практике это значит: на ноутбуке с 8 ГБ RAM можно запустить Kali как VM и параллельно поднять три-пять уязвимых сервисов в Docker. Попытка запустить всё это отдельными виртуальными машинами закончится swap-hell уже на втором сервисе. Проверено на собственном опыте — не повторяйте.

Docker CTF-лаборатория собирается из готовых образов: для большинства уязвимых приложений образы уже есть на Docker Hub и в проекте Vulhub.

Уязвимые образы для тренировки в Docker

DVWA (Damn Vulnerable Web Application) — стандартный тренажёр веб-пентеста. Запуск одной командой: docker run -d -p 127.0.0.1:8080:80 vulnerables/web-dvwa. Открываете http://127.0.0.1:8080 в браузере, проходите начальную настройку базы данных и получаете среду с SQL-инъекциями, XSS, CSRF и десятком других уязвимостей из OWASP Top 10.

Привязка к 127.0.0.1 вместо 0.0.0.0 — не мелочь. Без неё уязвимое приложение будет торчать наружу в локальную сеть. Типичная ошибка при настройке лаборатории для CTF, которая может привести к компрометации хоста извне.

OWASP Juice Shop — более современный тренажёр с интерфейсом интернет-магазина: docker run -d -p 127.0.0.1:3000:3000 bkimminich/juice-shop. Внутри — встроенный scoreboard с прогрессом решения задач. По сути, CTF в одном контейнере.

Vulhub (github.com/vulhub/vulhub) — коллекция docker-compose файлов с реальными CVE-уязвимостями. Каждый сценарий — отдельная директория с docker-compose.yml, поднимающим уязвимый сервис нужной версии. Ближе всего к задачам реальных CTF-соревнований формата Jeopardy.

Docker Compose для многоконтейнерной лаборатории

Когда целевых сервисов больше двух, запускать каждый отдельной командой — неудобно и легко запутаться. Docker Compose описывает всю лабораторию в одном YAML-файле и поднимает её одной командой:

version: "3.8"
services:
  dvwa:
    image: vulnerables/web-dvwa
    ports: ["127.0.0.1:8080:80"]
    networks: [ctflab]
  juice-shop:
    image: bkimminich/juice-shop
    ports: ["127.0.0.1:3000:3000"]
    networks: [ctflab]
networks:
  ctflab:
    internal: true

Параметр internal: true — ключевой. Он создаёт Docker-сеть без маршрута наружу: контейнеры видят друг друга, но в интернет не ходят. Аналог Internal Network в VirtualBox, только для контейнеров. Вся лаборатория поднимается через docker compose up -d и останавливается через docker compose down.

Файл docker-compose.yml удобно хранить в Git-репозитории. Переехали на другой ноутбук — склонировали репозиторий, одна команда — и идентичное изолированное окружение для хакинга готово за минуту. Docker Compose для ИБ — способ сделать лабораторию переносимой и воспроизводимой.

Гибридный подход: Docker внутри виртуальной машины

Максимальную изоляцию при подготовке к CTF соревнованиям даёт запуск Docker внутри Kali VM. Схема: хост (основная ОС) → VirtualBox → Kali Linux VM (NAT + Host-Only) → Docker внутри Kali → уязвимые контейнеры.

Зачем двойная изоляция? Даже если из контейнера произойдёт Escape to Host (T1611 по MITRE ATT&CK), атакующий окажется внутри Kali VM, а не на вашей основной системе. Снапшот Kali VM захватывает все контейнеры внутри — полный откат одним действием. Виртуализация для информационной безопасности здесь работает как страховка страховки.

Минус — двойной overhead. Ядро VM плюс процессы контейнеров требуют 12–16 ГБ RAM на хосте. С 8 ГБ гибрид запустится, но при активном сканировании будет ощутимо тормозить.

Установка Docker в Kali: sudo apt install docker.io docker-compose-plugin, затем sudo usermod -aG docker $USER. После перелогина Docker готов к работе внутри VM.

Подход оправдан для тех, кто не хочет переживать о влиянии экспериментов на основную рабочую систему. Если RAM хватает — берите гибрид, не пожалеете.

Снапшоты виртуальных машин и управление лабораторией

Снапшоты — страховка от необратимых действий. Правило простое: сделали что-то важное — зафиксировали состояние. Стратегия для домашней лаборатории пентестера:

«Clean Install» — сразу после установки и первого обновления Kali. Базовая точка отката, к которой можно вернуться всегда.

«Pre-CTF [дата]» — перед каждым соревнованием. Поставили дополнительные инструменты, настроили VPN — сохранили состояние.

«Post-CTF [название]» — после соревнования, если хотите сохранить конфигурацию для разбора задач и написания writeup.

VirtualBox хранит снапшоты виртуальных машин как дифференциальные диски. Каждый снимок добавляет от 100 до 500 МБ. Держать больше пяти-семи штук на одну VM нет смысла: занимают место и замедляют откат. Периодически удаляйте промежуточные, оставляя «Clean Install» и последний рабочий.

Docker-контейнеры — расходный материал. Сломали — удалили, подняли заново за секунды. Полная чистка: docker system prune -a удалит все остановленные контейнеры и неиспользуемые образы, освободив гигабайты. Но удаляет ВСЁ неактивное — убедитесь, что старые образы точно не нужны.

Типичные грабли новичков и как их обойти

«Не хватает RAM, всё виснет». Первым делом закройте браузер на хосте: Chrome с 20 вкладками забирает 2–4 ГБ. Уменьшите RAM Kali VM до 2 ГБ, замените тяжёлые целевые VM на Docker-контейнеры. На Windows отключите Hyper-V, если не используете WSL2 — он конфликтует с VirtualBox и жрёт ресурсы даже в фоне. bcdedit /set hypervisorlaunchtype off с перезагрузкой решает проблему.

«Kali не видит целевую VM». Убедитесь, что обе виртуальные машины подключены к одной Host-Only сети. В VirtualBox: «Файл — Менеджер сетей хоста» — должен существовать адаптер (обычно vboxnet0) с включённым DHCP-сервером. Если IP не назначается автоматически — задайте вручную: sudo ip addr add 192.168.56.10/24 dev eth1 в Kali и аналогичную команду с другим адресом на целевой VM.

«Порт занят, контейнер не стартует». Проверьте, кто слушает: ss -tlnp | grep 8080. Или измените маппинг при запуске: вместо -p 8080:80 используйте -p 9090:80.

«Случайно просканировал домашнюю сеть». Классика с реальными последствиями. Перед каждым запуском Nmap проверяйте адрес цели. Если он не из диапазона лабораторной подсети (192.168.56.0/24 для Host-Only, 172.x.x.x для Docker) — стоп. Разберитесь с маршрутизацией, потом сканируйте.

«Mac M1/M2 и x86-образы». VirtualBox на Apple Silicon не запускает x86-гостей вроде Metasploitable или VulnHub. Ставьте Kali ARM64 как VM, а все целевые сервисы поднимайте в Docker. Для полной изоляции Docker-сети: docker network create --internal ctflab. Контейнеры на этой сети видят только друг друга.

Конфликты подсетей Docker и VirtualBox. Docker по умолчанию использует 172.17.0.0/16, VirtualBox Host-Only — 192.168.56.0/24. Обычно диапазоны не пересекаются. Но если настраивали кастомные подсети — проверьте маршруты через ip route на хосте.

От лаборатории к реальным CTF-задачам

Лаборатория собрана, Kali отвечает, DVWA открывается по localhost:8080. Что дальше?

Vulhub — мостик от тренажёров к реальным CVE. Каждый docker-compose файл — конкретная уязвимость конкретной версии продукта: Apache Struts, Jenkins, Redis. Клонируете репозиторий, заходите в нужную директорию, docker compose up -d — уязвимый стенд готов. Ближе всего к задачам реальных CTF-соревнований формата Jeopardy.

HackTheBox и TryHackMe — подключаются через VPN из вашей Kali VM. Лаборатория выступает как изолированная точка входа: вы работаете с внешними стендами, используя инструменты из собственного окружения. Host-Only адаптер гарантирует, что VPN-трафик не уйдёт в домашнюю сеть.

Создание собственных заданий. Когда освоите Docker Compose для ИБ на уровне потребителя, попробуйте собрать свою CTF-задачу: напишите Dockerfile с уязвимым Flask-приложением, спрячьте флаг в переменной окружения, дайте решить товарищу. Техника Build Image on Host (T1612 по MITRE ATT&CK) описывает именно сборку образов на целевой системе — понимание этого процесса полезно и при создании задач, и при их решении.

Девять из десяти начинающих в CTF-чатах застревают не на сложных заданиях, а на этапе «поставить и настроить среду». Эта статья закрывает именно этот барьер. Но вот что я вижу раз за разом: большинство новичков переусложняют лабораторию. Ставят Proxmox, конфигурируют pfSense, настраивают VLAN — и выгорают до первого решённого флага. Начните с VirtualBox, одной Kali VM и одного docker run с DVWA. Для начала этого хватит за глаза — на первые три месяца подготовки к CTF соревнованиям точно. Усложняйте, когда появится конкретная задача, а не «на вырост».

Docker в контексте ИБ-обучения ценнее, чем кажется на первый взгляд. Он не просто экономит RAM — он учит работать с контейнерами. MITRE ATT&CK выделяет целый блок техник для контейнерных сред: Deploy Container (T1610), Container and Resource Discovery (T1613). Понимание того, как контейнеры устроены изнутри, делает вас полезнее и в red team, и в blue team роли. Если хотите пройти путь от первой лаборатории до реальных рабочих задач системно, а не методом тыка — на IB Basics на codeby.school эту базу закрывают за пару месяцев, от нуля до первых практических навыков.

🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «pentest-machines».

Поделиться

0 комментариев

Пожалуйста, войдите, чтобы оставить комментарий.

Загрузка комментариев...

Читайте также

Insecure Deserialization в CTF: эксплуатация PHP и Python

13 мин.

12

Insecure Deserialization в CTF: эксплуатация PHP и Python

PHP gadget chains, Python pickle opcodes, CVE-2020-15148 (EPSS Top 1%). Практическое руководство по insecure deserialization для CTF — от формата до обхода фильтров.

12 НОЯБРЬ, 2026

LFI уязвимость эксплуатация: от passwd до RCE

13 мин.

10

LFI уязвимость эксплуатация: от passwd до RCE

Полный гайд по LFI: path traversal, php://filter, log poisoning до RCE. Разбор CVE-2024-40348 (CVSS 8.2), ffuf-фаззинг и пейлоады для CTF-задач.

12 НОЯБРЬ, 2026

Реверс-инжиниринг crackme в Ghidra: пишем кейген

12 мин.

12

Реверс-инжиниринг crackme в Ghidra: пишем кейген

Разбираем crackme в Ghidra: находим проверку пароля через XREF, восстанавливаем XOR-алгоритм, пишем кейген на Python за 5 строк. Практический гайд.

11 НОЯБРЬ, 2026