Cyber ICE Box training: Go XOR recovery, web archive/Base64 packet, SSH via VPN.
191
Два готові приклади для перевірки участі, імпорту завдань і мережевого підключення.
| Приклад | Що перевіряємо | Прапори |
|---|---|---|
static/ — «Загублений пакет» | Відновлення повідомлення з Go-файлу | Один фіксований |
dynamic/ — «Журнал зв’язку» | Веб через проксі або VPN, SSH через VPN, вихід в інтернет | Два шаблонні, незалежні |
Завантажте архіви з останнього релізу:
static.zip та dynamic.zip — окремі завдання;test-exercises.zip — обидва завдання одним імпортом;SHA256SUMS — контрольні суми архівів.Архіви відповідають формату cib-exercise/v1: exercise.json, вкладення в files/<id>/, manifest.json із SHA-256. У репозиторії зберігаються вихідні JSON та файли, архіви формуються автоматично.
Статичний приклад містить Go-файл welcome.go: масив байтів, маску XOR та функцію restore. Учасник має відновити початковий текст. Прапор фіксований, але відкритим рядком у вкладенні не зберігається. Звичайний запуск показує підказку; для розв’язання достатньо прочитати код і застосувати операцію XOR або викликати надану функцію.
Динамічний приклад містить одну спільну топологію та два завдання. Платформа генерує значення із шаблонів template:ICE{web_…} і template:ICE{ssh_…} та передає їх контейнеру через WEB_FLAG і SSH_FLAG. Кожен шаблон має 96 біт випадковості. Вебчастина складається з двох сторінок: журналу та картки передачі Р-17. У вкладенні packet.txt міститься прапор, закодований у Base64. Учасник завантажує файл і відновлює початковий текст; пряма кнопка видачі прапора відсутня. Другий прапор читається через SSH із ~/flag.txt. Значення не вбудовані в образ; без обох коректних прапорів він не запуститься.
| Шлях | Адреса / порт |
|---|---|
| Публічний HTTP-проксі платформи | external.link → контейнер, TCP 8080 |
| Веб через VPN | VPN-адреса контейнера, TCP 8080 |
| SSH через VPN | VPN-адреса контейнера, TCP 2222 |
| Вихід в інтернет | Друга мережа та шлюз Laboratory |
Контейнер має VPN-інтерфейс eth0 та інтернет-інтерфейс eth1. Адреси й шлюзи визначаються посиланнями на виділені платформою мережі. Зворотний маршрут до VPN-клієнтів задано для стандартного пулу Laboratory 10.128.0.0/10; якщо інсталяція використовує інший пул, змініть routes[].dst у dynamic/exercise.json перед імпортом.
Обидва шлюзи забезпечує Laboratory — вони не запускаються всередині образу. Завданню потрібні виділені заходу динамічні ресурси, VPN та інтернет-мережа. Без цих ресурсів динамічний приклад недоступний. Контейнер не потребує додаткового NET_ADMIN у платформі.
SSH: користувач demo, навчальний пароль cybericebox, прапор у ~/flag.txt. Це навмисно публічний навчальний обліковий запис без прав root; не використовуйте цей пароль для інших систем. Перенаправлення SSH портів, агентів і тунелів вимкнені. Ключі сервера створюються при запуску. Веб не віддає SSH-прапор.
Потрібні Docker, Python 3 та Go 1.27 або новіший для перевірки Go-вкладення.
make test
make package
make build
docker run --rm -p 127.0.0.1:8080:8080 -p 127.0.0.1:2222:2222 \
-e 'WEB_FLAG=ICE{web_local_example}' \
-e 'SSH_FLAG=ICE{ssh_local_example}' \
cybericebox/test-exercises:local
Веб: http://127.0.0.1:8080. SSH: ssh -p 2222 [email protected]. Локальні значення вище — приклади; у Laboratory значення генерує платформа. Команда SSH на вебсторінці показує внутрішню VPN-адресу контейнера, тому локально використовуйте адресу хоста з цієї інструкції.
make smoke
Ізольована перевірка створює тимчасові Docker-мережі, HTTP-проксі та справжній тунель WireGuard, перевіряє обидва прапори, SSH без root, інтернет і коректне завершення. Потрібні Linux-контейнери з підтримкою WireGuard у ядрі (зокрема Docker Desktop). Тестові шлюз і клієнт отримують NET_ADMIN; тестовому контейнеру він потрібен лише для встановлення маршрутів замість вузла Laboratory. Тест видаляє лише власні тимчасові ресурси. Це перевірка контейнера та мережевих шляхів, а не розгортання у виробничому Laboratory.
Формат імпорту додатково перевіряється справжнім валідатором daemon v2.5.0, commit ab23a5317e3fbec465439d20094d02d842c84f7d. CI використовує окрему копію вихідного коду daemon; робочі репозиторії платформи не змінюються.
Docker Hub: cybericebox/test-exercises, архітектури linux/amd64 та linux/arm64. Імпорт прив’язаний до версії v1.0.0; latest також публікується для зручності локального перегляду.
Для нового релізу змініть версію образу в dynamic/exercise.json, виконайте перевірки та створіть відповідний тег vX.Y.Z. GitHub Actions перевірить збіг версії, збере й перевірить обидві архітектури, опублікує образ і додасть архіви до GitHub Release. Налаштування репозиторію: секрети DOCKERHUB_USERNAME, DOCKERHUB_TOKEN із правом публікації цього образу. Невдалі перевірки блокують публікацію.
Ліцензія: Apache-2.0.
Content type
Image
Digest
sha256:a0c552b72…
Size
24.1 MB
Last updated
8 days ago
docker pull cybericebox/test-exercises