Іспит для майбутніх російських хакерів» у Московському Політесі

І знову здрастуйте. Зазвичай я пишу статті в якості розробника, але сьогодні хочеться поділитися досвідом проведення іспиту з інформаційної безпеки в Московському Політесі. По-моєму вийшло досить цікаво. Завдання навіть може бути корисним початківцям тестувальникам і пентестерам. Але спочатку я розповім трохи про те, як проходили заняття протягом семестру — щоб було зрозуміло, як ми дійшли до життя такого.



Підготовка
Лекції
Протягом семестру у мене було по дві пари занять на тиждень для кожної групи, і в цей час я намагався впихнути максимум інформації для розширення кругозору. На лекціях розповідав різне:

  • Про небезпеки інтернету речей;
  • Історію боротьби Niantic з любителями покемонів;
  • Суть bug bounty програм;
  • Приклади вразливостей, знайдених на PornHub;
  • Чому так складно захиститися від атак з мобільних додатків;
  • Ніж так гарний Тор, і чому він не може врятувати;
  • Історії про фрод в банківській сфері;
І ще багато іншого. Насправді, я чудово розумію, що студенти забувають три чверті отриманої інформації, а чверть, що залишилася до моменту випуску стає неактуальною.

Тому найважливішим для мене було донести до студентів, що:

  • Зараз майже будь-який чайник може бути атакований хакером;
  • не Можна довіряти нікому, нічого й ніколи. Ні користувачів, ні заліза, ні софту.
  • Хороший розробник, хороший хакер і фахівець з безпеки — три якості, які не можуть співіснувати;
  • Поточні обчислювальні потужності дозволяють робити жахливі речі;
  • Ламати — не будувати. Це цікаво і потрібно вміти;
  • Темна сторона може бути привабливою. Але там печеньок набагато менше, ніж на світлій — а ось відхопити від джедаїв можна по повній.
Семінари
З урахуванням того, що часу на семінарах було помітно менше, ніж хотілося б (так, цей предмет я готовий вести хоч кілька років — тема дуже глибока), довелося вибирати якусь конкретику, якої студенти будуть займатися в максимально прикладний характер, щоб їх уявлення про хакинге дещо відрізнялося від фільмів з красивими біжать зеленими рядками. При цьому мені хотілося максимально розглянути саме способи атаки, а не варіанти захисту. Найбільш цікаво мені здалося розглянути атаки на веб додатки. Вони наочні, ефектні, і багато з використовуваних там принципів можна так само застосувати на мобільні і навіть десктопні програми. Оскільки студенти в минулому семестрі вивчали PHP, то розглядали ці уразливості в PHP — із застереженням на те, що практично все те ж саме справедливо для інших мов розробки.

В цілому лабораторні були такі:

  • SQL injections. Можливо, хтось назве мене дідуганом, і розповість, що всі сучасні мови вже не дають так вистрілити собі в ногу… Але практика показує, що це не так. Легасі код і криві ледачі руки творять чудеса.
  • XSS;
  • Завантаження шкідливих файлів;
  • Clickjacking;
  • Генерація HTTP запиту. Цю лабораторну я додав, коли побачив, що студенти не дуже добре розуміють, як працює HTTP. Наступного разу ця лабораторна буде першою;
  • Автоматизоване тестування;
  • Шифрування. Криптографію я постарався звести до повного мінімуму (шалено важлива наука і предмет, на яку можна було б відвести окремий семестр, але час, час). Але потрібно хоча б знати, чим хешування відрізняється від шифрування і ЕЦП, і де та можна і де не можна використовувати md5.
  • Тестування DVWA (Damn Vulnerable Web Application) за допомогою інструментів Kali Linux. З забавного — в процесі тестування ми знайшли несумісність з PHP 7. Після чого вмить виправили це в студентському дистрибутиві і відправили пулл реквест в основний репозиторій. Пулл реквест був прийнятий.
Повні завдання лабораторних можна подивитися тут — викладка на github pages швидка, зручна, і дозволяє швидко виправляти якісь знайдені в завданні косяки. Студент натиснув F5 — і ось у нього вже нова версія завдання! Для особливо шкідливих читачів — відразу зізнаюся, що місцями там йде копіювання вікіпедії. Можна було б давати посилання — але там часто трапляються прекрасні речі на зразок этой. Так що доводиться переписувати матеріали руками. І то періодично студенти знаходили в інтернеті всякі нетривіальні рішення…

Іспит
Для іспиту було заготовлено спеціальне вразливе веб додаток (посилання в кінці посту). Спочатку у мене було бажання заготовити додаткових вразливостей в самій машині (застаріле ПЗ, відкриті порти сервісів з простими паролями і так далі), але вирішив, що на це не вистачить часу — тому ламали тільки безпосередньо сам додаток.
Перераховувати зайвий раз уразливості не буду, оскільки там було рівно те, що ми проходили на лабораторних роботах. Заздалегідь попереджаю — там неякісний код! Тонни його! У цьому і був сенс.

Кумедний алгоритм ми придумали для оцінки студентів. Для іспиту використовувався формат bug bounty, і тому кожна вразливість коштувала там деяку суму винагороди. Все як у справжньому дорослому світі. І іспит треба було купити… Відмінна оцінка коштувала 20.000 доларів, задовільна 12.000. Можна готівкою.

Якщо кому цікаво, то сама виртуалка була піднята на vagrant+virtualbox, в якості ОС там був CentOS 7, ЗА стояв nginx+mariadb+php-fpm плюс кілька розширень. Так само на іспиті можна було користуватися заготовленим стандартним чином Kali Linux 2016.2 — аналогічний тому, який ми використовували на лабораторних роботах.

Іспит тривав п'ять годин (ми практикуємо формат WorldSkills). Він пройшов без всяких несподіванок — все працювало, все що потрібно) ламалося, всі студенти, які ходили на пари, здали. Хто не ходили — на жаль. По-моєму, так і повинно бути.

Робота над помилками
Після іспиту я запив ось такий анонімний опитувальник — гугл форми просто божественні для швидкого збору фідбек. Якщо цікаво, можете прокликать — я спеціально експортував собі результати опитування студентів і залишив форму відкритою. Приємно було отримати 13 відповідей — при загальній кількості студентів у 30 осіб і відсутності обов'язку по заповненню це просто відмінний результат. Так само дуже порадувало, що хлопцям сподобався курс, і відгуки здебільшого позитивні. Хвалити себе тут я сенсу не бачу, так що зупинимося на критиці (авторська орфографія збережена):
Вкрай мало інформативності по лабам на лекціях.
Так, є така справа. Мені хотілося максимум всього цікавого розповісти на лекціях, а лабораторками займатися на семінарах. Але, мабуть, треба їм теж приділяти час лекцій.
Мало часу виділено протягом семестру лекції.
Так, у нас було по парі лекцій на тиждень. Приємно, що хлопці побачили, що можна було розповісти ще дуже багато всього. Ну що ж — може бути, ми ще зустрінемося в магістратурі.
Відсутність проектора на перших лекціях.
Так, аудиторію з проектором я отримав не відразу. З них виходить набагато наочніше.
Kali і LInux в цілому треба б показати людям більш докладно.
Так, тут проблема в тому, що по курсу Linux до цього не було. Треба буде скорегувати послідовність курсів.
Було важко приходити на лекції так рано.
Мені теж :)
як поліпшення, я б запропонував(а) додати в курс интеректива. Наприклад бліц опитування, тести на лекціях (гуглити kahoot). Це б збільшило залученість студентів і дало б розуміння хто і де плаває.
Відмінна ідея. Наступного разу зробимо.
Відео з ютуба
Так, проблема з наочними матеріалами була. Причому з відео російською взагалі проблема серйозна. Його немає, а те, що є, настільки жахливо… І дикція куди гірше моєї, і часто виникають ситуації, коли автор робить помилку, після чого протягом 10 хвилин її шукає і відкочується назад… А на задньому фоні в цей час грає «Володимирський централ» і фішки доміно стукають. Загалом, потрібні дуже міцні нерви, щоб це дивитися. А писати своє відео з нуля це досить трудомістке. Так що в результаті я або використовував відео матеріали Positive Technologies (дуже люблю цих хлопців!), чи ставив англійське відео і озвучував його. Наступного разу потрібно буде або записати самостійно, або хоча б накласти свою озвучку. Але треба буде шукати людину на це, оскільки моя дикція кульгає. Загалом, завдання є, складна, але підйомна.
Важко слухати промови з недоліками в дикції, а також варто було б говорити голосніше, далі 2-й парти часто просто було нечутно.
Так, є таке. Радий, що це помітив тільки один студент (ну або просто інші надлишково ввічливі). Буду намагатися виправлятися і використовувати мікрофон для посилення звуку. Голосно говорити дві-три пари підряд просто горла не вистачає — і так на роботу потім приходив без голосу.
Непридатна теорія, яку я забуду через пару місяців.
На жаль, так з усією теорією. Але я сподіваюся, що діти запам'ятали основні думки (див. вище). Ну і такі речі вміють спливати в пам'яті, якщо ви продовжуєте займатися ними.
Письмовий матеріал, який в курсі не особливо був корисний.
Тут, мабуть, малося на увазі, що не особливо корисний для іспиту. На жаль, в теорію іспит покласти не вдалося. Буду думати, як краще зв'язати курс.
Люди бояться підходити і питати(проблема глобальна і мабуть не лікується з роками і курсами), треба щось придумати підхід до них, щоб студенти самі приходили і цікавилися як що робити, якщо зовсім не розуміють. Нічого пропонувати не буду, просто це треба обміркувати.
Так, проблема є, і вона дуже серйозна. У першого курсу, який займаюся за проектами мікроелектроніки, все ще гірше. Хлопці просто не вміють питати (хоча тут є цікавіше розподіл за статевою ознакою — дівчата охоче задають питання). Постараюся виправити великою кількістю зворотного зв'язку — в тому числі тестами, опитів і так далі. Переконати хлопців задавати питання шалено складно.

Так само багато студентів вказали на те, що хотілося б мати більше часу на іспит. Треба думати. ІМХО, 6-8 годин працювати головою майже нереально — можливо, треба скорочувати програму іспиту, щоб краще вкластися в 4-5 годин. Чи дійсно робити перерву.

Ще хлопці писали, що була недосконала система оцінки вразливостей — були невеликі нагороди за невеликі уразливості, а за великі можна було отримати відразу третину потрібної нагороди. З одного боку, великі уразливості мною так і замислювалися — їх мало хто знайде, але якщо вже знайде — це винагородиться по повній. З іншого боку, явно було потрібно більше маленьких вразливостей. Є над чим попрацювати.

Підсумки
В цілому я задоволений, хоча попереду ще багато роботи по доопрацюванню курсу. Радує те, що тепер є кістяк, на який вже легше нарощувати більше смачного «м'яса». І добре, що перший млинець грудкою. А далі буде більше, цікавіше і смачніше!

Буду радий фидбеку від аудиторії хабра. Прямо зараз ви можете вплинути на майбутнє російського освіти і на те, які здобувачі прийдуть до вас через кілька років.

p.s. Шукаю зараз хорошого QA-інженера в свою команду. Приймаю резюме з звітами за даним додатком ;)

P. S. 2. Ви можете покликати мене читати якийсь курс у вас. Але має бути соціально-корисно, цікаво, чи за гроші (краще, звичайно, всі три). А то постійно надходять пропозиції від всяких милих компаній — придумайте і прочитайте нам курс за кілька рублів, з вас всі матеріали, відео, методички, і курс залишається в нашій власності… Мені страшно думати, хто для них пише матеріали, і чому такі курси навчають студентів.

Подяки
Без цих людей такого іспиту не було б. Так що подяки:

  • Керівнику освітньої програми «WEB-технології» Івану Чикунову, декан факультету інформатики та систем управління Андрію Пилиповичу — за те, що дозволили мені влаштувати таке свавілля;
  • Денису Васильовичу, провідному курс з мобільного розробці — за те, що зміг круто проінтегрувати свій іспит з мобільного розробки з моїм;
  • Завідуючої Фаблаба Московського Політеху Ользі Прудковской — за те, що покликала мене в Московський Політех, і за надихаючий приклад (вона дуже крута!);
  • Володимиру Канину, мого директора в компанії PayMe — за те, що виділяє мені час на те, щоб зробити світ трохи краще;
  • Дмитру Леонову, автору BugTraq.Ru і чудового вчитель моєї рідної кафедри АСУ в РГУ нафти і газу імені Івана Михайловича Губкіна. Без нього я б ні за що не став ні хорошим фахівцем, ні викладачем. Окреме спасибі за дозвіл використовувати його методичні матеріали на своїх заняттях. Спасибі йому за глибокі і сучасні знання, які він дає. Вже сім років з моменту мого випуску йому гикається, коли я в черговий раз згадую з вдячністю його заняття. Можу тільки сподіватися, що мені коли-небудь буде щикатись так само.
  • Моїй дружині і дітям. Дружині — за те, що терпить мої нічні посиденьки з підготовкою. Дітям — за те що стимулюють мене до того, щоб до часу їх вступу у ВУЗ там були хороші освітні програми.
Посилання
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.