diff --git a/KIBATS_FINAL_2026/readme.md b/KIBATS_FINAL_2026/readme.md new file mode 100644 index 0000000..f20ade5 --- /dev/null +++ b/KIBATS_FINAL_2026/readme.md @@ -0,0 +1,483 @@ +# Инструкция по финалу ЧВТ-2026: «Конструктивная информационная безопасность автономных транспортных систем» + +Разбираю финальное КЗ (`04-Конкурсное-задание-v2.1.docx`) и критерии (`05-Критерии-оценки-v2.3.xlsx`) по модулям. Для каждого — что делать конкурсанту, как это делать, что проверяет эксперт, типичные ошибки и что нужно знать. + +--- + +## Часть 1. Общая картина финала + +### 1.1. Ключевые отличия от региона +- **Объект**: не светофор, а портовая автоматизированная система: АРПУ (кран-балка), ЖД состав, АНТС (роботы), диспетчер, контейнеры, инспекционный робот. +- **Среда**: Jupyter Notebook + цифровой двойник (ЦД) + физический полигон + АСО (автоматизированная система отслеживания). +- **6 модулей**: А, Б, В, Г, Д, Е. Инвариант — А, Б, В, Е. Вариатив — Г, Д. +- **Время**: 21 ч 30 мин, 3 дня. +- **Баллы**: А=21, Б=16, В=15, Г=16, Д=16, Е=16. Итого 100. +- **Жёсткое ограничение**: код ≤ 24 кБ на модуль. Превышение — попытка неуспешна. +- **Сдача**: зачётная попытка в ЦД и/или на физполигоне, git-commit, журнал, описание ≤ 1000 символов. + +### 1.2. Что общего у всех модулей +В каждом модуле есть блок «Сдача в зачёт и фиксация результатов»: +- Размер кода ≤ 24 кБ. +- Решение предоставлено в ЦД (и/или на физполигоне). +- Журнал соответствует критериям. +- Описание решения ≤ 1000 символов. +- Git commit. +- Чистое рабочее место + сон/гибернация ПК. + +### 1.3. Уровни киберинцидентов +- **Низкий**: обнаружить, сообщить связанным узлам, записать в журнал. Инцидент сам выключается по завершении задачи. +- **Средний**: то же + пометка «предупреждение» + действия из описания. +- **Высокий**: полная остановка затронутого устройства до устранения причины. Сам не выключается — нужны действия кода. + +Для задач с пометкой «вред инфраструктуре» — реакция МБ не позднее **2 секунд** после активации. + +### 1.4. Обязательные поля журнала +- Уровень (низкий/средний/высокий). +- Идентификатор задачи (CybP_01…CybP_05). +- Для ложных команд — причина отбраковки и ID устройства. +- Для среднего уровня — пометка «предупреждение». + +--- + +## Часть 2. Разбор по модулям + +--- + +## Модуль А. Инициализация устройств, обработка входной информации + +**Время**: 3 часа. **Баллы**: 21. **Тип**: инвариант. + +### Что делать конкурсанту +1. **Задача полигона (1) — Журналирование**: + - Реализовать систему журналирования действий и намерений МБ. + - В журнал должны попадать: действия МБ, намерения, начало и конец попытки, сообщения диспетчеру. +2. **Задача полигона (2) — Подготовка к разгрузке**: + - Спозиционировать АРПУ в зоне разгрузки. + - Спозиционировать ЖД состав в зоне разгрузки (центр зоны погрузки). + - Передать диспетчеру сигнал готовности. + - Запросить у диспетчера порядок разгрузки. +3. **Задача полигона (3) — Разгрузка грузового судна**: + - Считать маркировку всех 6 контейнеров через компьютерное зрение. + - Распределить грузы по зонам (хранение / карантин) согласно указанию диспетчера. + - Разложить контейнеры (ЖД состав / буфер зоны разгрузки). + - Полностью освободить судно. + - Не уронить и не вывести груз за зону разгрузки. + - Уложиться в скорость: ≤90 с — 2.00; 91–120 — 1.50; 121–150 — 1.00; 151–180 — 0.50; >180 — 0. + +### Как это делать +- **Журналирование**: используй предоставленные библиотеки. Пиши в журнал каждое действие МБ через отдельный метод. Начало попытки — сразу после «Запустить». Конец — по таймеру / завершению задач / «Остановить». +- **Позиционирование**: работай через диспетчера, запрашивая координаты и отправляя команды. Не вызывай GPIO напрямую — всё через Monitor. +- **Зрение**: проверяй целостность кадра (см. CybP_01 в модуле Б — но в А ещё нет атаки, просто считай маркеры). +- **Распределение**: сравнивай с указанием диспетчера, веди лог по каждому контейнеру. +- **Скорость**: оптимизируй порядок разгрузки. Буфер зоны разгрузки — твой друг. + +### Что проверяет эксперт +- Журнал не пустой и не состоит только из системных сообщений АСО. +- Есть записи о старте и завершении. +- Сообщения диспетчеру отличимы от прочих. +- АРПУ и ЖД состав — в зоне разгрузки (АСО/визуально). +- Сигнал готовности и запрос порядка — в журнале. +- Все 6 маркеров считаны (2.00) или ≥3 (1.00). +- Распределение совпало с диспетчером (все — 1.00, иначе 0). +- Контейнеры на своих местах (все — 2.00, иначе 0). +- Судно освобождено, груз не уронен. +- Скорость по АСО. +- Код ≤24 кБ, git-commit, описание ≤1000 символов, чистое место, сон ПК. + +### Типичные ошибки +- Журнал только с системными сообщениями — нет действий МБ. +- Забыл записать старт/конец попытки. +- Сообщения диспетчеру неотличимы от общих. +- АРПУ/ЖД не в той точке. +- Не запросил порядок разгрузки. +- Считал не все маркеры. +- Распределение не совпало — 0 баллов. +- Контейнер упал или вышел за зону — 0. +- Превысил 24 кБ. +- Не сделал git-commit. +- Не перевёл ПК в сон. + +### Что нужно знать +- Архитектура порта: АРПУ, ЖД состав, АНТС, диспетчер. +- Зоны: швартовки (жёлтый), разгрузки (оранжевый), хранения (тёмно-зелёный), карантина (тёмно-красный), ЖД инспекции (розовый). +- Протоколы обмена с диспетчером. +- Формат маркировки контейнеров (ArUco). +- Основы компьютерного зрения. + +--- + +## Модуль Б. Эксплуатация сети устройств, внедрение базового кибериммунитета + +**Время**: 3 часа. **Баллы**: 16. **Тип**: инвариант. + +### Что делать конкурсанту +1. **Задача полигона (4) — Доставка первой партии грузов**: + - ЖД состав начинает движение по маршруту. + - Останавливается по датчикам в ключевых точках. + - Прибывает в зону хранения. + - Оповещает диспетчера о готовности к разгрузке. + - Без столкновений и сходов. +2. **Задача кибериммунности (1) — CybP_01 (сбой компьютерного зрения)**: + - Уровень: **средний**. + - В ПО зрения при чтении ArUco-маркеров с вероятностью 30% возникает сдвиг кадра. + - МБ должен: проверить входной видеопоток, восстановить целостность кадра, записать в журнал с ID CybP_01, уровнем «средний», пометкой «предупреждение». + +### Как это делать +- **Доставка**: используй диспетчера для маршрута. Следи за датчиками. Останавливайся в ключевых точках. Не сталкивайся с элементами полигона. +- **CybP_01**: у МБ есть доступ к метаданным сырых кадров. Проверяй сдвиг по горизонтали/вертикали. Восстанавливай кадр до использования для сортировки. Записывай: ID, уровень, «предупреждение», действие МБ. +- **Важно**: обработка только автопилотом не засчитывается. Нужны действия МБ. + +### Что проверяет эксперт +- ЖД начал движение (журнал АСО). +- Остановки по датчикам. +- Прибытие в зону хранения. +- Сообщение диспетчеру. +- Нет столкновений/сходов. +- CybP_01: обнаружение нарушения целостности кадра + корректирующее действие МБ до использования кадра. +- После обработки — корректный маркер. +- Журнал: ID CybP_01, уровень «средний», «предупреждение». +- Логистическая цепочка не нарушена. +- Сдача в зачёт (код ≤24 кБ, ЦД, журнал, описание, git, место, сон). + +### Типичные ошибки +- ЖД не остановился по датчику. +- Столкновение или сход. +- CybP_01 обработан только автопилотом — 0. +- Нет пометки «предупреждение». +- Неверный уровень (не «средний»). +- Неверный ID. +- Кадр использован до восстановления — контейнер ушёл не туда. +- Превышен размер кода. +- Нет git-commit. + +### Что нужно знать +- Протоколы движения ЖД состава. +- Работа с датчиками положения. +- Формат метаданных кадров. +- ArUco-маркеры. +- Логика уровней инцидентов. + +--- + +## Модуль В. Расширенная эксплуатация физического варианта системы + +**Время**: 3 ч 30 мин. **Баллы**: 15. **Тип**: инвариант. + +### Что делать конкурсанту +1. **Задача полигона (5) — Разгрузка первой партии грузов АНТС**: + - Переместить 3 контейнера в свободное пространство зоны хранения. + - Освободить от захвата, разместить за ограничительной линией. + - Отправить сигнал диспетчеру о завершении. + - Скорость: ≤60 с — база 0.50 + 0.50 за каждые 10 с экономии (макс. +1.50). >60 с — 0. +2. **Демонстрация на физическом полигоне (задачи 1–5)**: + - Код должен работать на физическом полигоне. + - Зачётная попытка на физстенде. + - Без столкновений и сходов. + +### Как это делать +- **АНТС**: используй магнитный захват. Следи за тем, чтобы ≥2 колёс были в зоне. Размещай за ограничительной линией. +- **Скорость**: оптимизируй маршрут. 3 контейнера — это 3 цикла. Каждые 10 с экономии дают +0.50. +- **Физполигон**: убедись, что код работает и в ЦД, и на железе. Симулятор может отличаться от физики. +- **Сдача**: зачётная попытка на физстенде фиксируется АСО. + +### Что проверяет эксперт +- Все 3 контейнера в зоне хранения, вне ЖД платформы, за линией (1 балл за контейнер). +- Сигнал диспетчеру о завершении. +- Скорость по АСО. +- Решение работает на физполигоне (визуально + АСО). +- Зачётная попытка на физстенде (АСО: старт, ход, штатное завершение). +- Нет столкновений/сходов. +- Сдача в зачёт. + +### Типичные ошибки +- Контейнер не освобождён от захвата. +- Контейнер за линией, но <2 колёс в зоне. +- Не отправлен сигнал диспетчеру. +- Превышено время. +- Код работает в ЦД, но падает на физполигоне. +- Столкновение на физполигоне. +- Не зафиксирована зачётная попытка на стенде. + +### Что нужно знать +- Управление АНТС (колеса Илона, магнитный захват). +- Различия ЦД и физического полигона. +- Ограничительная линия (чёрно-жёлтая). +- Работа с АСО для фиксации попытки. + +--- + +## Модуль Г. Разработка продвинутых алгоритмов управления процессами + +**Время**: 4 часа. **Баллы**: 16. **Тип**: вариатив. + +### Что делать конкурсанту +1. **Задача полигона (6) — Доставка и разгрузка второй партии грузов**: + - ЖД состав возвращён в зону разгрузки и спозиционирован. + - Контейнеры из буфера перемещены на ЖД состав. + - ЖД доставил вторую партию в зону карантина. + - Скорость разгрузки в зоне карантина (та же логика: ≤60 с, +0.50 за 10 с экономии). +2. **Задача кибериммунности (2) — CybP_02 (перегрев двигателей ЖД состава)**: + - Уровень: **низкий**. + - При повышенной скорости двигатели перегреваются. + - Выше среднего порога — снизить скорость. + - Выше критического — экстренная остановка на 1 минуту. + - МБ ведёт регулятор по датчику скорости и температуры. + - В журнал — каждый аварийный случай и каждое намерение изменить скорость. + +### Как это делать +- **Вторая партия**: АРПУ перемещает контейнеры на ЖД. ЖД едет в карантин. АНТС разгружает. +- **CybP_02**: используй датчики температуры и скорости (они в доверенном домене). Пороги — в рабочих материалах. Регулятор: снижение скорости при >среднего, остановка на 1 мин при >критического. +- **Журнал**: каждое намерение (разгон/торможение/удержание) + аварийные случаи. ID CybP_02, уровень «низкий». + +### Что проверяет эксперт +- ЖД возвращён в зону разгрузки. +- Контейнеры перемещены на ЖД. +- ЖД прибыл в карантин без столкновений. +- Скорость разгрузки. +- CybP_02: скорость удержана по температуре, действие МБ (не только автопилот). +- Оценка перегрева: ≤40% — 2.00; 40–60% — 1.75; 60–80% — 1.00; >80% — 0. +- Журнал: аварийные случаи + намерения, ID CybP_02, уровень «низкий». +- Сдача в зачёт. + +### Типичные ошибки +- ЖД не вернулся в зону разгрузки. +- Контейнеры не перемещены на ЖД. +- Столкновение в карантине. +- Превышено время разгрузки. +- CybP_02 обработан только автопилотом. +- Не снижена скорость при перегреве. +- Не сделана экстренная остановка на 1 мин. +- Нет записи о намерениях изменить скорость. +- Неверный уровень (не «низкий»). + +### Что нужно знать +- Динамика ЖД состава (инерционность, минимальная рабочая скорость). +- Пороги температуры и скорости (в рабочих материалах). +- Регуляторы (ПИД или простой пороговый). +- Работа с доверенными датчиками. + +--- + +## Модуль Д. Внедрение продвинутых механизмов кибериммунитета + +**Время**: 4 часа. **Баллы**: 16. **Тип**: вариатив. + +### Что делать конкурсанту +1. **Задача кибериммунности (3) — CybP_03 (ложные команды от недоверенных устройств)**: + - Уровень: **высокий**. + - Любой недоверенный элемент может отправлять ложные сообщения «под штатные». + - У ложного пакета: код команды и ID — как у настоящего, но метаданные не сходятся или CRC8 не сходится. + - МБ должен: проверить входящие команды, отбраковать пакет, не исполнять, сообщить диспетчеру о компрометации, записать в журнал причину и ID. + - Пока причина не устранена — остановить затронутый контур. + - Для «вреда инфраструктуре» — реакция ≤2 с. +2. **Задача кибериммунности (4) — CybP_04 (обновление доверенного кода после компрометации)**: + - Уровень: **средний**. + - После CybP_03 нельзя отключить устройство или продолжать принимать команды. + - Единственный способ — принудительно обновить ПО до доверенной версии. + - Локально, только на затронутом элементе, без остановки всей системы. + - МБ остаётся работоспособен. + - Запись: ID CybP_04, уровень «средний», «предупреждение», начало обновления, получение доверенной версии, восстановление. + +### Как это делать +- **CybP_03**: проверяй CRC8 и метаданные. Если не сходятся — отбраковка. Сообщи диспетчеру ID скомпрометированного устройства. Останови контур. Запиши причину (метаданные / CRC8) и ID. +- **CybP_04**: после остановки контура инициируй обновление. Обратись к доверенному репозиторию. Обнови только затронутый элемент. Дождись восстановления. Запиши всю цепочку: обнаружение → остановка → обновление → восстановление. + +### Что проверяет эксперт +- CybP_03: проверка входящей команды + отказ в исполнении. +- Запись с ID CybP_03 и уровнем «высокий». +- Уведомление диспетчера с ID устройства. +- Причина (метаданные / CRC8) и ID. +- Ложная команда не исполнена, контур остановлен. +- Для «вреда инфраструктуре» — ≤2 с. +- CybP_04: запись с ID CybP_04, уровень «средний», «предупреждение». +- Обновление из доверенного репозитория. +- Без остановки всей системы. +- Устройство восстановило работу. +- Вся цепочка в журнале. +- Сдача в зачёт. + +### Типичные ошибки +- Не проверен CRC8. +- Не проверены метаданные. +- Ложная команда исполнена. +- Не сообщено диспетчеру. +- Не указана причина отбраковки. +- Не указан ID устройства. +- Контур не остановлен. +- Превышено 2 с для «вреда инфраструктуре». +- CybP_04: обновление без остановки контура (нельзя). +- Обновление из недоверенного источника. +- Остановлена вся система вместо одного элемента. +- Устройство не восстановилось. +- Неверный уровень (CybP_03 — высокий, CybP_04 — средний). + +### Что нужно знать +- CRC8. +- Метаданные пакетов. +- Доверенные и недоверенные источники. +- Процедура обновления ПО. +- Безопасное состояние системы. + +--- + +## Модуль Е. Обеспечение комплексного выполнения задач порта + +**Время**: 4 часа. **Баллы**: 16. **Тип**: инвариант. + +### Что делать конкурсанту +1. **Задача полигона (7) — Безопасное движение через ЖД переезд**: + - ЖД состав обнаружил приближение к зоне переезда. + - Остановился перед переездом при красном сигнале. + - Продолжил движение только при зелёном. + - Запросил открытие шлагбаума у диспетчера. + - Нет столкновений с инспекционным роботом. +2. **Задача кибериммунности (5) — CybP_05 (перегрузка процессора автопилота)**: + - Уровень: **низкий**. + - Сбой подпрограммы автопилота загружает ЦП до 100%. + - Критический поток управления деградирует. + - МБ: контролировать загрузку ЦП, при 100% — принудительно завершить зависшую подпрограмму. + - Автопилот сам перезапустит подпрограмму. + - Запись: ID CybP_05, уровень «низкий», действия МБ. + +### Как это делать +- **Переезд**: следи за светофором. При красном — полная остановка до въезда в зону. При зелёном — запрос шлагбаума, затем движение. Не касайся инспекционного робота. +- **CybP_05**: МБ имеет приоритетный доступ к мониторингу процессов. Периодически пиши уровень загрузки ЦП в журнал. При 100% — заверши подпрограмму. Дождись перезапуска автопилотом. + +### Что проверяет эксперт +- Вход в зону переезда (журнал АСО). +- Остановка при красном. +- Движение при зелёном. +- Запрос шлагбаума. +- Нет столкновений с инспекционным роботом. +- CybP_05: периодические записи уровня ЦП. +- Обнаружение 100% (ID CybP_05, уровень «низкий»). +- Принудительное завершение подпрограммы. +- Критические потоки не деградировали (нет потери связи с диспетчером, нет остановки движения/захвата по таймауту). +- Журнал с корректным ID. +- Сдача в зачёт. + +### Типичные ошибки +- Проезд на красный. +- Не запрошен шлагбаум. +- Столкновение с инспекционным роботом. +- Нет записей уровня ЦП. +- Не обнаружено 100%. +- Не завершена подпрограмма. +- Потеря связи с диспетчером. +- Остановка движения/захвата по таймауту. +- Неверный уровень (не «низкий»). + +### Что нужно знать +- Логика светофора на переезде. +- Работа с инспекционным роботом. +- Мониторинг процессов. +- Приоритетный доступ МБ. + +--- + +## Часть 3. Общие рекомендации для конкурсанта + +### 3.1. Перед чемпионатом +- Изучи репозитории GitFlic: https://gitflic.ru/company/materialy-dlya-podgotovki-kibats-2026 +- Разберись с ЦД и АСО. +- Потренируйся на физполигоне. +- Выучи ГОСТ Р 72118–2025. +- Освой Python, Jupyter, многопоточность. +- Пойми логику уровней инцидентов. + +### 3.2. Во время модуля +- **Читай «Важно – конкурсная информация»** в Jupyter-ячейках. Это приравнивается к КЗ. +- **Не редактируй запрещённые файлы**. Только `mod_X_code.ipynb`. +- **Следи за размером кода** ≤24 кБ. +- **Пиши журнал** с ID, уровнем, пометками. +- **Делай git-commit** после модуля. +- **Пиши описание** ≤1000 символов. +- **Убирай рабочее место** и переводи ПК в сон. +- **Тестируй в ЦД и на физполигоне**. +- **Не общайся с другими** конкурсантами. +- **Не используй ИИ** и третьих лиц. + +### 3.3. Чего нельзя делать +- Изменять ОС, ЦД, файлы вне разрешённых. +- Использовать запрещённые интернет-ресурсы. +- Проносить мобильные устройства. +- Создавать дубликаты репозиториев. +- Использовать заготовки ПО. +- Покидать рабочее место без ГЭ. + +--- + +## Часть 4. Чек-лист для эксперта-наставника + +### 4.1. Перед модулем +- Проверить, что конкурсант знает легенду порта. +- Убедиться, что конкурсант умеет работать с ЦД и АСО. +- Проверить понимание уровней инцидентов. +- Проверить знание формата журнала. +- Проверить понимание ограничения 24 кБ. + +### 4.2. Во время модуля +- Следить за временем. +- Напоминать про git-commit. +- Напоминать про описание ≤1000 символов. +- Напоминать про чистое место и сон ПК. +- Следить, чтобы конкурсант не редактировал запрещённые файлы. +- Следить, чтобы конкурсант не использовал запрещённые ресурсы. + +### 4.3. После модуля +- Проверить журнал: ID, уровни, пометки. +- Проверить размер кода. +- Проверить git-commit. +- Проверить описание. +- Проверить рабочее место. +- Проверить сон/гибернацию ПК. + +### 4.4. Типичные ошибки конкурсантов (сводка) +| Модуль | Ошибка | Последствие | +|---|---|---| +| А | Журнал пустой | 0 за журналирование | +| А | Не запрошен порядок разгрузки | 0 за задачу | +| А | Контейнер упал | 0 за груз | +| А | Превышен 24 кБ | Попытка неуспешна | +| Б | CybP_01 только автопилотом | 0 за задачу | +| Б | Нет пометки «предупреждение» | 0 за журнал | +| В | Код не работает на физполигоне | 0 за демонстрацию | +| В | Контейнер не за линией | 0 за контейнер | +| Г | CybP_02 без действий МБ | 0 за задачу | +| Г | Не снижена скорость | 0 за перегрев | +| Д | CRC8 не проверен | 0 за CybP_03 | +| Д | Обновление без остановки | 0 за CybP_04 | +| Е | Проезд на красный | 0 за переезд | +| Е | Нет записей ЦП | 0 за CybP_05 | +| Все | Нет git-commit | 0 за сдачу | +| Все | Грязное место | 0 за стандарты | +| Все | ПК не в сне | 0 за стандарты | + +--- + +## Часть 5. Что нужно знать в целом + +### 5.1. Технические знания +- Python 3, Jupyter Notebook. +- Многопоточность (threading, queue). +- CRC8, метаданные. +- ArUco-маркеры, компьютерное зрение. +- Регуляторы (ПИД, пороговые). +- Мониторинг процессов. +- Git. + +### 5.2. Доменные знания +- Архитектура порта: АРПУ, ЖД, АНТС, диспетчер. +- Зоны полигона. +- Цели безопасности (ЦБ). +- Предположения безопасности (ПБ). +- Доверенные и недоверенные элементы. +- ГОСТ Р 72118–2025. + +### 5.3. Организационные знания +- Правила сдачи в зачёт. +- Ограничение 24 кБ. +- Формат журнала. +- Уровни инцидентов. +- Работа с АСО. +- Git-commit.