Files
KIBATS/KIBATS_FINAL_2026/readme.md
T

484 lines
33 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Инструкция по финалу ЧВТ-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; 91120 — 1.50; 121150 — 1.00; 151180 — 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; 4060% — 1.75; 6080% — 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. Доменные знания
- Архитектура порта: АРПУ, ЖД, АНТС, диспетчер.
- Зоны полигона.
- Цели безопасности (ЦБ).
- Предположения безопасности (ПБ).
- Доверенные и недоверенные элементы.
- ГОСТ Р 721182025.
### 5.3. Организационные знания
- Правила сдачи в зачёт.
- Ограничение 24 кБ.
- Формат журнала.
- Уровни инцидентов.
- Работа с АСО.
- Git-commit.