Практикум · локальная среда

Лабораторная работа учит находить, объяснять и устранять уязвимости.

Маршрут для преподавателя и слушателя: изолировать намеренно уязвимую цель, зафиксировать версию, доказать причину недостатка, предложить серверное исправление и подтвердить регрессию.

LOCAL ONLY разрешённая цельDocker изоляция и очисткаMD шаблоны отчёта

01 · Безопасный старт

Сначала граница разрешения и версия среды. Потом — учебная задача.

OWASP Juice Shop — намеренно небезопасное приложение. Оно уместно только для локальной изолированной практики. Единственный поддерживаемый маршрут курса — start-wrapper, ownership-aware cleanup и канонический Compose-файл с закреплённым digest, loopback bind, внутренней сетью и лимитами ресурсов.

Перед запуском

  1. Подтвердить, что цель локальна и её использование разрешено.
  2. Проверить источник образа, версию, digest и лицензию.
  3. Не монтировать Docker socket, секреты, домашний каталог и не использовать --privileged.
  4. Запретить публикацию target-сервиса в Интернет и на все интерфейсы хоста.
  5. Подготовить шаблон отчёта и критерий регрессионной проверки.

После занятия

  1. Остановить контейнер; временная среда должна быть удаляемой.
  2. Сохранить доказательства, нужные для отчёта, и указать их происхождение.
  3. Проверить, что в отчёте нет паролей, токенов, ключей и персональных данных.
  4. Отметить, какие файлы являются исходными, автоматически обработанными и редакторскими.
  5. Зафиксировать фактическую версию среды для повторяемости.
PowerShell · из корня репозитория
& .\appsec-lections\lab\juice-shop\start.ps1
# Выполните только разрешённое локальное упражнение и сохраните синтетическое доказательство.
& .\appsec-lections\lab\juice-shop\stop.ps1
# Обязательный результат: CLEANUP OK

Контур практики: что внутри и что снаружи

Схема 14

Границы разрешённой учебной среды Уязвимое приложение работает на локальном интерфейсе внутри временного контейнера. Наружу выходит только отчёт. Любые внешние цели находятся за границей разрешения и недопустимы. РАЗРЕШЕНО · ВАША МАШИНА Браузер и инструменты обращаются только к 127.0.0.1:3000 Уязвимое приложение закреплённый тег или digest, контейнер запущен с --rm Порт опубликован только на локальный интерфейс не 3000:3000, а 127.0.0.1:3000:3000 — иначе цель видна всей аудитории и сети. ЗА ГРАНИЦЕЙ РАЗРЕШЕНИЯ Чужие сайты и сервисы учебные приёмы к ним неприменимы ни при каком уровне задания Сеть аудитории и вуза тоже снаружи: это не «своя» инфраструктура ✕ нет Наружу из контура выходит ровно одно — отчёт. И он тоже фильтруется: без ключей, токенов, персональных данных и точных маршрутов эксплуатации.
Что проговорить вслух до начала. Правило простое и не смягчается уровнем задания: за пределами выданной локальной среды — ничего и никогда. Объявлять его нужно до практики, а не после.

02 · Карта из 12 лабораторных

Точная карта: A01–A09:2025, SSRF A10:2021 и нативная память.

Курс идёт от карты активов (ЛР_0) через девять практик A01–A09:2025 и историческую практику SSRF A10:2021, затем завершается безопасностью памяти вне веб-модели (ЛР_11). A10:2025 — обработка исключительных ситуаций — разбирается как современная тема, но отдельной лабораторной в этом наборе не заявлена.

ЛРТема и карта OWASP/CWEЧто доказывает слушательПедагогический итог
ЛР_0Подготовительная — карта активовАктивы, точки входа, границы доверия, топ-5 критических активовУязвимость получает смысл только на карте активов и границ доверия.
ЛР_1A01:2025 · CWE-639/862/284Вертикальный и горизонтальный контроль доступа (BOLA/IDOR)UI не заменяет серверную проверку владения объектом и полномочий.
ЛР_2A02:2025 · CWE-16/434/209Устаревший интерфейс, проверка файла по содержимому, обработка ошибокСкрытый endpoint остаётся частью поверхности атаки, пока доступен.
ЛР_3A03:2025 · CWE-1104/937Уязвимая зависимость и артефакт разработки в публичной областиНужны SBOM, SCA, фиксация версий и контроль provenance.
ЛР_4A04:2025 · CWE-548/347/306Утечка внутренних документов и приём токена без проверки подписиДве разные первопричины: контроль доступа и криптографическая целостность.
ЛР_5A05:2025 · CWE-89/79SQL-инъекция и XSS как один принцип — смешение кода и данныхЗащита — параметризация, контекстное кодирование и безопасные API.
ЛР_6A06:2025 · CWE-20/840/1284Бизнес-инвариант корзины (отрицательное количество)Серверная доменная логика и ограничения БД важнее UI-валидации.
ЛР_7A07:2025 · CWE-521/262/307Слабые и дефолтные учётные данные, защита жизненного цикла учёткиМеры защищают процесс входа без превращения в массовый подбор.
ЛР_8A08:2025 · CWE-502/400/776Небезопасная десериализация: бомба памяти в изолированном стендеСтруктурированный вход остаётся недоверенным; нужны лимиты и безопасный парсер.
ЛР_9A09:2025 · CWE-778/532/200Открытые метрики, секрет в клиентском коде, событие как контрольМного логов без alerting и владельца реакции — это не мониторинг.
ЛР_10A10:2021 · CWE-918SSRF в трёхсервисном fixture: gateway, app и internalГраница доверия + egress-изоляция; в 2025 SSRF не маркируется как A10.
ЛР_11Память · CWE-787/120/78Переполнение буфера → выполнение команды на учебном бинарникеПервопричина — отсутствие проверки границ; hardening лишь компенсирует.

Скачать все 12 заданий (Markdown) ↓Карта на странице дня 2 →

03 · Примеры корректной профилактики

Практический разбор завершается инженерным ограничением, а не зрелищной демонстрацией.

Ниже приведены безопасные выводы для обсуждения. Они не содержат атакующих payload’ов и не предназначены для действий за пределами авторизованной лаборатории.

Access control

Проверяйте объект, а не только роль

Авторизация на сервере связывает пользователя, действие, объект и контекст. Нужен отрицательный тест: субъект A не читает и не изменяет объект субъекта B.

JWT / Crypto

Явная политика проверки токенов

Allow-list алгоритмов, проверка подписи, ключа, iss, aud, exp и nbf, отрицательные тесты. Смена JWT-библиотеки сама по себе не исправляет систему.

XSS / Injection

Разделяйте код, данные и контекст

Параметризуйте запросы, используйте безопасный шаблон/DOM API и контекстное экранирование. Кража cookie не предполагается автоматически: она зависит от HttpOnly, SameSite и модели хранения токенов.

SSRF / Network

Не публикуйте внутреннюю цель

Для учебной SSRF-топологии внешний контейнер при необходимости привязывают только к 127.0.0.1:8080:8080; внутренний сервис остаётся в приватной Docker-сети без опубликованного порта. В production нужны allow-list адресатов, DNS/IP-проверки и egress-политики.

C / Memory safety

Устраните первопричину до hardening

Для C/C++ приоритетны границы буфера, безопасные API, отказ от shell для недоверенных данных и проверка длины. Далее: -fstack-protector-strong, -D_FORTIFY_SOURCE=3, PIE/RELRO/NX, sanitizers и fuzzing.

Supply chain

Сохраняйте происхождение среды

Образ, пакет, scanner и результат привязываются к версии, digest, лицензии и дате проверки. «Последний» tag не доказывает воспроизводимость.

04 · Протокол результата

Шаблон превращает лабораторную работу в проверяемый учебный артефакт.

Не переносите в публичный отчёт ключи, персональные данные, токены и точные маршруты атаки. Храните только достаточные, обезличенные доказательства с явно указанной учебной средой.

Что превращает «получилось» в результат работы

Схема 13

Пять шагов от наблюдения к проверяемому исправлению Наблюдение фиксирует поведение системы, первопричина объясняет его, последствие связывает с активом, исправление устраняет причину, регрессионный тест не даёт ей вернуться. 01 · НАБЛЮДЕНИЕ Что видно поведение системы, обезличенно и точно 02 · ПРИЧИНА Почему так какой проверки нет и на какой стороне 03 · ПОСЛЕДСТВИЕ Кому дорого актив и нарушенное свойство из триады 04 · ИСПРАВЛЕНИЕ Что менять серверная мера, а не правка интерфейса 05 · ТЕСТ Чем доказано отрицательный тест, который раньше падал Работа сделана не там, где что-то получилось, а там, где вы можете это выключить. Найденный флаг закрывает шаг 01 и не говорит ничего про шаги 02–05. Именно поэтому он сам по себе не оценивается. Проверка на честность отчёта Прочитайте свой шаг 04 и спросите: если это внедрить, шаг 01 перестанет воспроизводиться? Если нет — причина найдена неверно.
Почему пять шагов, а не два. Цепочка держится на связке «причина → исправление»: без неё отчёт описывает симптом, и перенести вывод в собственный проект невозможно.

Структура, которую можно оценить

  1. Среда: локальная цель, дата, версия и границы разрешения.
  2. Что сделано: нейтральное описание проверенного сценария.
  3. Доказательства: обезличенное наблюдение, запрос/ответ или флаг без ключа.
  4. Ключевая причина: техническое и архитектурное объяснение.
  5. Исправление: серверная мера, защита в глубину и регрессионный тест.

Критерии обратной связи

Оценивайте не эффект, а понимание причины

Полезная шкала: результат и полнота обязательных шагов; объяснение первопричины; конкретность профилактики; качество и безопасность оформления. Так слушатель переносит вывод в SSDLC, а не повторяет сценарий вслепую.

Скачать авторский шаблон отчёта →

05 · Приоритеты и готовые стенды

От официального лабника — к безопасному, воспроизводимому курсу.

Двенадцать работ переработаны как проверяемые задания с локальной средой, артефактом, первопричиной и regression check. Ниже — приоритет прохождения и что уже готово как отдельный стенд.

ПриоритетРаботыГотовый артефакт
P0 · сначалаЛР_0 карта активов, ЛР_1 контроль доступа, ЛР_4 утечка+JWT, ЛР_5 SQLi+XSS, ЛР_8 десериализация, ЛР_10 SSRF, ЛР_11 памятьSSRF — трёхсервисный fixture (ниже); ЛР_11 — исходники уязвимой и исправленной версий у преподавателя
P1 · затемЛР_2 устаревший интерфейс, ЛР_3 цепочка поставок, ЛР_6 инвариант корзины, ЛР_7 дефолтные креды, ЛР_9 метрики и логированиеЛокальный Juice Shop с закреплённым тегом или digest
P2 · в подготовкеАктивный SVG и безопасный upload pipelineЗаготовка контейнеризованной галереи; проводится только после отдельного fixture
Опубликованный стенд

SSRF: трёхсервисная среда

Самодостаточный fixture lr-ssrf: gateway на 127.0.0.1, уязвимое app и синтетический internal в закрытой Docker‑сети internal: true. Опасный запрос создаёт сервер, а не браузер; внешних адресов нет.

Ещё в подготовке

Активный SVG и upload

Проводится только после отдельного контролируемого fixture без версионной привязки и внешнего домена. До этого — как теоретический разбор мер защиты безопасного upload pipeline.

Скачать все 12 заданий ↓Скачать SSRF‑стенд ↓Карта на странице дня 2 →

Скачать

Пакет для занятия: 12 заданий, методика, отчёт, чек-лист и контроль версий.

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

MD · 12 ЛР

Полный набор заданий

Двенадцать работ ЛР_0–ЛР_11: подготовка, A01–A09:2025, историческая SSRF A10:2021 и нативная память, с рубрикой на 10 баллов.

Скачать Markdown ↓
MD · КОНСПЕКТ

Методический конспект дня 2

A07–A10, non-web AppSec, SSDLC и ИИ с контрольными вопросами и источниками.

Скачать конспект ↓
MD · ПРАКТИКА

Методичка практикума

Контракт локальной среды, порядок доказательств, публикационный фильтр и рефлексия.

Скачать Markdown ↓
MD · ОТЧЁТ

Шаблон лабораторной работы

Структура отчёта без лишнего воспроизведения эксплуатационных деталей.

Скачать Markdown ↓
MD · CHECK

Чек-лист слушателя

Разрешение, изоляция, версия среды, доказательства и очистка после практики.

Скачать Markdown ↓
MD · SOURCES

Источники и версии

Официальные ссылки для OWASP, Juice Shop, Kaspersky Academy и контроля версии образа.

Скачать Markdown ↓
MD · ARCHIVE

Каталог материалов дня 1

Состав слайдов, Markdown-стенограммы, протокола, программы, учебного пакета и результатов ЛР.

Скачать каталог ↓
DAY 1 · КАНОНИЧЕСКИЙ СТЕНД

Безопасный запуск Juice Shop

Закреплённый digest, loopback-only порт, внутренняя сеть без egress, ограничения ресурсов и проверяемая очистка.

Открыть инструкцию →