Намеренно уязвимая лаборатория Docker с маршрутизируемой DNS-инфраструктурой и машиночитаемыми ключами ответов для каждой цели, локально оценивающая точность, полноту и охват сканера.
Лаборатория для тестирования безопасности. Парк намеренно уязвимых целей, маршрутизируемая сетевая инфраструктура с авторитетным DNS для обнаружения активов, машиночитаемый ключ ответов для каждой цели и панель управления для всего этого.
Всё здесь намеренно уязвимо. Только локальное тестирование. Не выставляйте это в интернет или в недоверенную сеть. Публикуемые порты привязаны к
127.0.0.1; цели лаборатории не привязаны ни к чему вообще.Наш собственный сканер намеренно получает RCE внутри этих контейнеров, поэтому контейнер рассматривается как граница безопасности: каждый образ закреплён по дайджесту, каждый сервис сбрасывает все capabilities и добавляет обратно минимум, и
./lime auditобеспечивает это. Прочитайте SECURITY.md перед первым запуском, включая часть о том, что изоляция контейнеров не покрывает.
Панель управления на http://127.0.0.1:7000, показывающая лабораторию в работе.
limeyard раньше назывался vuln_apps. Он был переименован, потому что перестал быть папкой
приложений: теперь он содержит голые сервисы, зону DNS, пару WAF, точную цель и APK-фикстуры, ни одна из которых не является приложением.
Старый парк показал 9 из 9, ноль пропусков, ноль ложных срабатываний. Бенчмарк, который не может провалиться, не может обнаружить регрессию. Три вещи были структурно неправильны:
127.0.0.1:70xx,
поэтому перечислению поддоменов нечего было перечислять, сканированию портов выдавался
его ответ, а фингерпринтинг сервисов никогда не видел не-HTTP демон.Вам нужен Docker (с плагином compose) и git. Больше ничего.
curl -fsSL https://raw.githubusercontent.com/clickswave/limeyard/main/install.sh | bash
Это клонирует лабораторию в ./limeyard, записывает её .env со свежим API
токеном, собирает и запускает control plane, затем спрашивает, что запускать. Прежде чем
что-либо запустится, он показывает, сколько стоит выбор, измеренный в простое на
эталонной машине, против того, что свободно на вашей машине:
This selection, idle, on the box it was measured on:
17 targets, 1 scenarios, 45 containers
RAM about 2.9 GB resident (host has 22.4 GB available)
disk about 11.0 GB of images to pull (host has 111 GB free)
CPU near idle once up (3% of one core); pulling and first boots are the busy part
Start it? [y/N]
Неинтерактивно: curl ... | bash -s -- --light --yes (или --all,
--none, --pick dvwa,juice-shop,estate). Разместите checkout в другом месте с
LIMEYARD_DIR=/path.
Затем панель находится на http://127.0.0.1:7000, и то же самое вручную:
./lime setup # the wizard again, any time
./lime start --all # every light target
./lime start crapi --heavy # a heavy one, explicitly
./lime scenario-up estate # the network estate: DNS, vhosts, services
./lime status # what is up
./lime stop --all --heavy # everything down; images and volumes stay
./lime credits # who wrote each target, and under what licence
./lime doctor # environment, attribution and disk checks
./lime doctor --fix # apply every check's automatic remedy, then re-check
./lime audit # container hardening + supply chain invariants
./lime pin # report image drift against the registry
Вручную, без установщика:
git clone https://github.com/clickswave/limeyard && cd limeyard
cp .env.example .env
echo "LIMEYARD_DIR=$PWD" >> .env
echo "LIME_TOKEN=$(openssl rand -hex 24)" >> .env # required, see SECURITY.md
docker compose up -d --build # control plane + UI on http://127.0.0.1:7000
./lime setup
Каждый манифест несёт измеренный блок resources (контейнеры, RAM в простое,
диск образов, CPU в простое). Мастер, полоса выбора панели и страница каждой
цели суммируют из него, поэтому оценка везде одинакова.
Две, и только две.
main — это то, что клонирует установщик и что вы получите, если ничего не делаете.
Она движется через pull request, никогда через прямой push.dev — ветка по умолчанию и место, куда попадает работа. Открывайте pull request
против неё.| target | одна вещь под тестом, объявленного kind. Владеет compose-файлом, опциональной настройкой и своим собственным ключом ответов. Запускается как собственный изолированный compose-проект, поэтому две цели, использующие Postgres, никогда не делят один |
| scenario | несколько целей, связанных в сетевую топологию с авторитетным DNS. То, против чего оценивается обнаружение активов |
| truth | машиночитаемый ключ ответов. См. truth/schema.md |
| doctor | один список проверок с вердиктом для каждой: окружение, атрибуция, цепочка поставок, харденинг. Проверки с однозначным исправлением несут исправление в один клик в панели (/doctor) и --fix в CLI: создать сети, освободить диск, закрепить образы, получить исходники, перепроверить запущенные цели, переписать привязки вне loopback. Атрибуция, конфликты портов и харденинг требуют человека |
Типы: web api bench cve service estate edge control mobile.
targets/<kind>/<slug>/ target.yml, compose.yml, setup.sh, truth.yml
scenarios/<slug>/ scenario.yml, compose.yml, zones/
control/limed/ the daemon: CLI + HTTP API + scorer
control/ui/ the SvelteKit control panel
truth/ the contract, and dated scorecards
docker compose up -d запускает два контейнера и ничего больше: limeyard_control
(демон limed, держащий Docker socket) и limeyard_ui (панель SvelteKit).
Оба привязаны только к loopback. Панель находится на http://127.0.0.1:7000, а
сырой API на http://127.0.0.1:7099. Оба нуждаются в .env, и LIME_TOKEN в нём
обязателен: панель держит токен на стороне сервера, и браузер никогда его не видит.
| страница | для чего она |
|---|---|
| Targets | каждая цель, фильтр по типу и состоянию, сортировка, множественный выбор с Start, Stop, Restart. Клик по строке открывает цель |
| Target | факты (адрес, учётные данные, стек, upstream, верификация, дайджесты образов), живой лог и ключ ответов с его негативами |
| Scenarios | estate: резолвер, зоны, подсеть и таблица хостов с состоянием каждого контейнера. Поднять, опустить, перезапустить |
| Scorecard | последний прогон с дельтами, покрытие по классам и по целям, пропущенные id, история, которую можно просмотреть, и diff двух прогонов |
| Ports | что привязано на localhost и что существует только на лабораторном бридже |
| Doctor | один список проверок с вердиктом для каждой. Fix и Fix all сначала показывают точные команды и правки файлов, вычисленные из лаборатории как она есть, и выполняют их после подтверждения. Исправление, оставляющее свою проверку проваленной, сообщает об этом |
| Credits | кто написал каждую цель и под какой лицензией |