EN
УчилищеPython

Уроци по киберсигурност

Два видими и безопасни инструмента за часовете по киберсигурност: симулация на симптоми на компютърен инцидент и демонстрация на клавишни събития с изричен старт и стоп.

README

Дигитални детективи — CaveDepths / Cyber Classroom 8.1

Учителско приложение за визуална демонстрация на признаци, които могат да се срещнат при компютърен инцидент. Сцените изглеждат като отделни Windows приложения, но не извършват зловредни действия.

Преди старта се показва недвусмислено потвърждение, че това е контролирана учебна симулация. По време на историята интерфейсите остават достоверни, а аварийните клавиши са винаги активни. Няма реален malware, шифроване, системно сканиране, инсталиране, срив или рестартиране.

Платформа: Windows 10/11, Python 3.10+ и български учителски интерфейс. Системните сцени автоматично следват Windows 10/11 и българския/английския UI език. Не са нужни администраторски права.

Стартиране

py -m pip install pillow
py cyber_classroom.py

Pillow е единствената допълнителна зависимост. Ако липсва, native сцените продължават да работят, а сцената с кадър от работния плот използва безопасна статична алтернатива.

Преди урок:

  1. Натиснете „Провери готовността“.
  2. Проверете глобалните комбинации, временната папка, браузъра и Pillow.
  3. Изберете ресурсен профил. „Училищен безопасен“ е препоръчаният и стандартен избор.
  4. Изберете продължителност 10, 15 или 20 минути. Стандартната причинно свързана история е 15 минути; трите варианта имат различни сцени, а не само различна скорост.
  5. Изберете презентационен монитор и „Автоматично“ или „Учителско темпо“.
  6. По желание запишете шестзнаковия код на микса. „Приложи“ възпроизвежда код от друг час, а „Нов микс“ създава нов вариант. „Повтори глава“ запазва текущия код.
  7. В учителски режим отговаряйте на решенията с „Приеми резултата“ или „Покажи компрометирания път“.
  8. Преди RAM-only кадъра затворете чувствителни прозорци на избрания монитор.
  9. Направете пълна проба на конкретния демонстрационен компютър.

Възпроизводими комуникационни миксове

Цялата сесия се изгражда предварително от кода и избрания preset. Ново автоматично Start след завършена сесия избира нов код; „Повтори глава“ възпроизвежда същите текстове, оформления, икони, звуци и ред. Един и същ код плюс една и съща продължителност дават същия микс и на друг компютър.

  • 10 минути: точно 9 вторични сигнала;
  • 15 минути: точно 13 вторични сигнала;
  • 20 минути: точно 16 вторични сигнала;
  • във всеки preset участват browser UI, различни in-app повърхности, taskbar progress/attention, tray balloons и Windows Notification Center;
  • между сигналите има поне 8 секунди, а между Notification Center записи — поне 20 секунди;
  • съседни сигнали никога не повтарят канал, severity, икона или звук; цялата комбинация layout/text/icon/sound е уникална за сесията;
  • разместването е само вътре в причинната фаза и не може да изпревари prerequisite събитие.

Ресурсни профили

Профил Локални browser tabs Живи effect прозорци общо Screenshot FPS Вътрешен image target
Училищен безопасен (по подразбиране) 4 6 до 8 до 960 × 540
Балансиран (изричен избор) 6 8 до 12 до 1280 × 720

Абсолютният лимит е 8 tabs и 8 effect прозореца. Fullscreen stage се брои като един effect прозорец. Контролният панел не се брои. Затварящите се, но още живи Win32 прозорци продължават да се броят и не се заменят преждевременно.

Има wall-clock ограничения независимо от скоростта на историята:

  • поне 3 секунди между реални browser launches;
  • поне около 1 секунда между нови effect прозорци;
  • най-много една скъпа визуална сцена;
  • без наваксващ burst след пауза или забавяне.

Това е умишлено намаление спрямо стария лимит от 20 tabs и 12 popup прозореца. Реализмът идва от различни интерфейси и свързано поведение, не от натоварване.

Управление

Контрол Действие
Ctrl+Alt+P Глобална пауза/продължаване, включително при фокусиран браузър.
Ctrl+Alt+Q Глобално спиране, cleanup и изход.
Esc Спиране от Tk или native Win32 прозорец.
F6 Следваща глава от Tk или native Win32 прозорец.
F11 Fullscreen toggle от Tk или native Win32 прозорец.
Повтори глава Инвалидира старите callbacks и възстановява причинното и файловото състояние преди началото на главата.
Спри / изчисти Идемпотентно спиране и двуфазно освобождаване.

При пауза учителят избира дали сцените да останат видими за обсъждане, или да се скрият. Един pause-aware часовник замразява timers, reveals, progress, sound, spawning и browser actions. В „Учителско темпо“ историята спира на границите между главите и продължава с Next/F6.

Тематични звуци

Опцията „Тематичен звук“ е изключена по подразбиране. Системните сцени използват кратки Windows звукови сигнали, а измислените приложения — локалните WAV файлове за browser/download, installer, Task Manager, updater, scanner, terminal, ransom, crash, reboot и debrief. „Тест“ просвирва пример преди урок. Няма download, микрофон или външна звукова библиотека; при липсващ файл се използва временен синтезиран fallback, който се премахва при изход.

Всеки сигнал може да бъде заменен: поставете PCM WAV файл с точното име в папка sounds до cyber_classroom.py. Поддържаните имена и препоръките са описани в sounds/README.md. При пауза, „Спри / изчисти“, изключване на отметката или изход текущият звук спира веднага.

Опцията „Windows известия“ е включена по подразбиране. Windows 11 използва отделни compact, warning, scan-summary и recovery adaptive оформления; Windows 10 получава съвместим ToastText02 вариант. Известията нямат подвеждащи action бутони, линкове или команди, rate-limited са, изтичат автоматично и записите от собствената classroom-demo група се премахват при Stop/изход. При отказ, Focus Assist, Do Not Disturb или policy се избира неизползван in-app fallback, без прекъсване на историята.

Различните учебни интерфейси

  • CaveDepths Mod Setup — wizard около 600 × 440 с Welcome, Options, Installing и Completed; Back, Next, Cancel и Finish са активни. Неравномерните фази са предварително зададени.
  • User Account Control reconstruction — topmost consent dialog за CaveDepths с Unknown publisher, file origin, details и работещи Yes/No действия. Това е обикновен application window и не иска elevation.
  • Firewall warning — свързано предупреждение за ModUpdateHelper.exe, private/public network choices и видим резултат без създаване на firewall rule.
  • Task Manager view — resizable process table с променящи се CPU, Disk, Network и GPU стойности и работещо спиране на измисления процес. Данните са предварително записани; не се изброяват реални процеси.
  • Block Runtime updater — отделен staged updater с fictional signature check, progress, Cancel и Completed състояние; не инсталира компонент.
  • Tray helper, taskbar и Notification Center — временна истинска notification-area икона с Open status/Exit helper и thread-safe info/warning/error balloons; taskbar progress/attention се прилага само към собствени прозорци; Notification Center има отделни оформления. Всички owned състояния се чистят при Pause/Stop/изход.
  • Security warning — отделен restrained dialog с fictional process, severity и работещи разширяеми technical details.
  • Application errors — четири авторски варианта: not responding, missing component, access denied и failed update.
  • Classroom Terminal — resizable native прозорец, Consolas, bounded prerecorded scrollback и неравномерно време. Не се стартира shell и не се изпълнява команда.
  • PC Defender — отделно scanner приложение със sidebar, предварително записани данни, Pause/Resume, Stop и Details; след него има различим Windows Security Protection History екран.
  • File Properties и Network activity — отделни разследващи сцени в 20-минутната история: липсващ цифров подпис и офлайн snapshot към резервираните TEST-NET адреси. Няма реално мрежово свързване.
  • Ransomware impact — независимо movable/closable native приложение с timer, nonpayable case ID и брой .locked имена от текущата сесия.
  • Recovery — карантина на измислените компоненти и видимо връщане на по едно от осемте имена. При конфликт спира и иска преглед, без overwrite.
  • Screen distortion — един кадър от избрания презентационен монитор, само в RAM; subtle displacement, tears, melt/tunnel и recovery. Има reduced-motion и static режими.
  • Crash/reboot — отделни ръчни казуси, които не участват в ransomware историята. Те са fullscreen възстановки; Windows не се срива и не се рестартира.

Шестте loopback страници разказват една свързана история. Първата прилича на измислен портал за Minecraft Java модове и предлага CaveDepths за версия 1.21.1/Fabric, но вместо нормален mod файл показва подозрителен .exe installer. След нея се появяват тематично свързани gaming reward, web scan, предупреждение за игровия акаунт, runtime update и FPS booster. Всеки сайт има различни layout, title, favicon и плътност. Няма painted fake address bar; истинският 127.0.0.1 адрес остава видим и никъде не се прави реален download.

Стандартният 15-минутен сценарий свързва сайта, download действието, UAC, installer, tray helper, известие, допълнителни tabs, firewall, Task Manager, updater, application error, Windows Security, scanner, Protection History, response console, Explorer, осемте .locked имена, ransom натиска и поетапното възстановяване. Автоматичният режим следва компрометирания път; учителският режим спира при решение и никога не пренебрегва натиснат бутон без видим резултат.

Браузърна изолация и локални страници

Edge/Chrome се стартира със собствен нов временен --user-data-dir. Първият launch е отделен owned window, следващите са --new-tab. Процесите се създават suspended, поставят се в частен Windows Job и после се продължават. Cleanup затваря само този Job — никога процеси по име и никога несвързани браузърни прозорци.

Ако организационна UserDataDir политика е зададена, сцената отказва да я заобиколи и показва обяснение. Няма fallback към нормалния профил.

Съдържанието се обслужва само на 127.0.0.1 със случаен 40-hex route. CSP забранява външни ресурси; има само inline локални styles/script с nonce и data-URI favicons. Командите са allowlisted, generation-tagged, rate-limited и са само POST с празно body. Видимите страници poll-ват приблизително на 1 секунда, hidden страниците — на 5 секунди, а при прекъсване backoff-ват до 10 секунди.

Основната история показва контролирани browser-native download shelf, permission chip, account banner, unread title/favicon и update strip. Отделният ръчен бутон „Истинско browser известие“ отваря localhost страница и иска Allow само след учителски клик. Създадените Notification обекти се пазят и .close() се извиква преди browser cleanup; въпреки това browser-owned запис в Notification Center може да остане и страницата предупреждава за това.

Chromium flags като --disable-background-networking ограничават фоновата работа, но не са пълна network sandbox. Самите предоставени страници и assets работят без интернет и нямат външни URL-и. Проверете disconnected operation на конкретната училищна конфигурация; managed browser компоненти могат да имат собствено поведение извън контрола на приложението.

Осемте учебни файла

В нова временна папка се създават точно 8 истински UTF-8 .txt файла. In-memory manifest-ът съдържа имената и SHA-256 на създаденото съдържание, без да добавя девети учебен файл.

Само manifest entries в точната учебна папка могат да бъдат преименувани на .locked. Кодът проверява containment, regular file, replacement links, съдържание и conflicts. Не следва symlinks и не презаписва редактиран или конфликтен файл. Съдържанието никога не се шифрова. При normal stop непроменените имена се връщат, а папката остава за проверка.

Надеждност и emergency cleanup

  • Classroom.events има отделна недропваща priority пътека за Quit/Stop/hotkey failure, bounded normal queue, coalescing и максимум 12 normal events на tick.
  • Всеки NativeEffect има собствен Win32 message-loop thread и bounded command queue. Controls се създават в един batch; text/progress/edit updates се coalesce-ват и се изпълняват на owner thread.
  • Tk и ImageTk остават само на Tk thread. Native callbacks се връщат като controller events. Това отстранява Python 3.13 GIL срива от предишната версия.
  • Stop първо прекратява scheduling, маха overlays/topmost поведение и освобождава owned browser. Native joins и file restoration са отделна bounded cleanup фаза.
  • Session/chapter generation IDs отхвърлят callbacks от отменен installer, стар tab, затворен прозорец или предишен run.
  • Stage пази layout items и променя само dynamic progress/spinner items; static screens не се rebuild-ват на всеки 60 ms controller tick.

Глобалният hotkey receiver пак трябва да съобщи на Tk controller-а; той не е kernel-level watchdog. Архитектурата премахва дългите per-window joins и синхронните cross-thread UI updates, но замръзнал Python процес не може сам да гарантира cleanup. Ctrl+Alt+Q не стартира immersive режима, ако hotkeys не са регистрирани.

Resource status и pressure policy

Панелът показва:

  • event-loop delay и последно screenshot render време;
  • active effect windows и tabs;
  • working set на Python процеса;
  • peak memory на owned browser Job, когато Windows я предоставя;
  • system available RAM.

„Недостъпно“ означава, че метриката не е върната — не се измисля стойност. След три поредни samples се активира soft pressure режим при ориентировъчно:

  • Python working set над 256 MiB;
  • owned browser Job peak над 768 MiB;
  • свободна физическа RAM под 512 MiB;
  • или UI delay над 450 ms.

При pressure се спират новите effect windows, включва се reduced motion, затваря се само owned browser session и animated desktop scene се заменя със static fallback. Това са начални operational thresholds, не обещани или сертифицирани hardware ceilings.

Тестове

Default regression suite не отваря native прозорци:

py -m unittest discover -s tests -v

Opt-in Win32 acceptance тестовете създават краткотрайни application-owned прозорци:

$env:CYBER_CLASSROOM_NATIVE_TESTS='1'
py -m unittest tests.test_cyber_classroom.NativeEffectAcceptanceTests -v

Проверяват се трите story графа, 9/13/16 signal counts, 3000 детерминирани mix варианта, stable Replay, забраните за съседно повторение, adaptive toast XML/escaping, controlled browser surfaces, localhost-only Web Notification, учителски разклонения, stale generation events, pause clock, tray balloons, taskbar progress, strict file conflicts, recovery и Python 3.13 callback lifecycle.

При разработката на 8.1 са изпълнени:

  • 49 default-discovery tests: успешно, 6 opt-in Win32 tests пропуснати по дизайн;
  • 6 opt-in Win32 tests: успешно, включително tray balloons, taskbar progress и 10 native lifecycle цикъла без unbounded USER/GDI handle growth;
  • 300 ms реален Tk panel startup/cleanup smoke test: успешно;
  • py -m py_compile: успешно.

Bounded synthetic Pillow benchmark на наличната development машина (1920 × 1080 synthetic source, 24 mixed frames, без screen capture и без ImageTk upload): School Safe 960 × 540 — mean 86.43 ms, p95 138.22 ms, max 142.64 ms; Balanced 1280 × 720 — mean 155.99 ms, p95 246.40 ms, max 255.43 ms. Началният Python working set беше 49.0 MiB, а наличната system RAM — 15 402 MiB. Owned-browser peak не е измерен, защото реален browser session не беше стартиран от автоматичния тест. Runtime панелът показва действителния Job peak по време на ръчната проба. Benchmark-ът не е гаранция за school hardware.

Тези резултати са от наличния Windows компютър и не доказват поведение на всеки училищен модел. Ръчните проверки са в WINDOWS_ACCEPTANCE_CHECKLIST.md.

Ограничения

  • Приложението е за Windows 10/11 и не е антивирусен продукт.
  • Видим симптом сам по себе си не доказва заразяване.
  • Кадърът използва само избрания презентационен монитор и се пази само докато сцената е активна.
  • File Explorer прозорецът и учебната папка остават за обсъждане.
  • Force-kill на Python или изключване на компютъра може да прекъсне normal filename restoration.
  • Реалният браузър, DPI 200%, taskbar/work-area placement и handle growth трябва да се проверят на конкретната presentation машина.

Changelog 8.1

  • Детерминиран SessionMix с шестзнаков код, „Приложи“, „Нов микс“ и stable chapter Replay.
  • Точно 9/13/16 вторични сигнала през пет канала с phase windows и правила против повторение.
  • Четири контролирани browser повърхности и отделен opt-in localhost Web Notification казус.
  • Adaptive Windows 11 toasts, Windows 10 text fallback, native tray balloons и owned taskbar progress/attention.
  • Pause/Stop cleanup за taskbar, звуци, tray, toast group, browser notifications, прозорци и временен профил.

Changelog 8.0

  • Три отделни причинни истории за 10/15/20 минути; 15-минутната е стандартна.
  • Единен event-driven ScenarioState, детерминирано Replay и generation-guarded callbacks.
  • Учителски разклонения, които приемат безопасния резултат или показват компрометирания път.
  • Автоматични Windows 10/11 и BG/EN варианти, избор на презентационен монитор и DPI-aware placement.
  • Истинска временна tray икона, Notification Center cleanup и шест различими локални сайта.
  • Нови Protection History, File Properties, offline network snapshot и поетапно recovery сцени.
  • Еднакви имена CaveDepths_Setup.exe, BlockRuntimeHost.exe и ModUpdateHelper.exe през цялата история.
  • Crash/reboot/distortion са отделни ръчни казуси, извън основната история.