Ну ладно, не 1000 и 1 способ, но их довольно много! О чем это мы? О том, что пандемия COVID-19 внесла много изменений в нашу жизнь, в том числе, и в образование — как школьное, так и ВУЗовское. Уроки, лекции и семинары перешли в онлайн-формат, а вопрос, как быть с контролем успеваемости, остался. Как преподавателям убедиться, что сдающий экзамен студент не открыл в соседней вкладке шпаргалки?
В России эту проблему решили с помощью open-source программы Safe Exam Browser (SEB) . Казалось бы, теперь ни один искатель халявы не сможет смухлевать, но так ли уж неприступна эта «крепость»? Заходи под кат, сегодня мы расскажем и покажем кучу способов обмануть SEB!
Шёл 2020-й год… Весь мир в панике, курс рубля падает, государства переходят в режим ЧС… Несмотря на все это, основное желание среднестатистического студента остается прежним — сдать сессию с наименьшими затратами сил и времени на подготовку. Казалось бы, с переходом на дистанционное обучение для студента все стало проще — нужно всего лишь сделать умное лицо при ответе на вопрос по веб-камере, а прочитать материал можно и с параллельно открытого документа на компьютере. Но не тут-то было!
Многие российские ВУЗы для проверки успеваемости студентов внедрили программу Safe Exam Browser, которая предотвращает практически все попытки читерства. Конечно, для находчивых студентов и это не препятствие — ведь можно гуглить ответы на тест и на втором компьютере (или попросить погуглить друга).
Но, поскольку мы в душе тру хацкеры, мы решили проверить, насколько этот SEB действительно помогает при проведении экзаменов и как все же программно обойти его чуткий контроль (при условии, что студент обладает базовыми навыками работы на компьютере, не впадает в ужас от слов «виртуальная машина» и знает, как установить плагин для браузера Mozilla Firefox). Готовы? Поехали!
Что такое Safe Exam Browser (SEB)?
Safe Exam Browser (SEB) — программа для проведения экзаменов, тестов и т.д. в режиме онлайн. Предусматривает защиту от:
- открытия посторонних приложений (видео- и голосовой связи);
- параллельного поиска информации в веб-браузере;
- запуска приложения на виртуальной машине;
- перехода на определенные сайты;
- сохранения информации в буфере обмена перед входом в программу.
Архитектура SEB включает в себя две части: десктопное приложение и браузер. Приложение запускается на компьютере учащегося и блокирует все остальные приложения, кроме необходимых для сдачи экзамена. Взаимодействие по сети возможно только с помощью браузера SEB, при этом браузер соединяется с образовательной платформой, на которой размещен тест или экзамен (например, Moodle ). Экзаменатор может разрешить использовать во время сдачи экзамена сторонние приложения, например, Excel или калькулятор, и тогда учащемуся будет доступна возможность их запуска. Все подобные разрешения и другие настройки осуществляются с помощью конфигуратора SEB и записываются в конфигурационный файл, который впоследствии запускается десктопным приложением.
Конфигуратор SEB представляет собой приложение с интуитивно понятным интерфейсом:
В нем можно задать URL-адрес экзаменационного ресурса, список разрешенных/запрещенных приложений и сайтов, разрешения на загрузку файлов из Интернет, работу в виртуальной машине и т.д.
Большой простор для творчества и фантазии, не так ли?) Что же, приступим.
Для тестирования нам потребуется: программа SEB, виртуальная машина (VmWare, VirtualBox), браузер Mozilla Firefox, что-нибудь для компиляции большого проекта на C# (автор использовал Visual Studio Code), какой-нибудь образовательный ресурс (например, тест на Moodle, настроенный только для работы с SEB).
Дисклеймер: при написании статьи автору очень помогла эта статья .
1. Смена user-agent браузера
Для реализации этого способа не потребуется практически никаких знаний и инструментов. Проверим, как реагирует тест на Moodle на запуск через обыкновенный веб-браузер:
Как видно из скриншота, SEB не позволяет получить доступ к тесту из обычного браузера.
Согласно документации, в качестве веб-браузера SEB использует XULRunner — движок Gecko браузера Mozilla. Попробуем подменить user-agent браузера Mozilla на user-agent, указанный в конфигураторе SEB:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0 SEB
Установим какой-нибудь плагин для подмены user-agent, например, User-Agent Switcher , и добавим к нему следующий вариант:
Ловкость рук и немного мошенничества — и теперь можно спокойно приступать к тесту, параллельно открыв гугл в соседней вкладке! :)
2. Изменение конфигурационного файла виртуальной машины
Предыдущий способ, конечно, очень прост и понятен, однако вполне может возникнуть ситуация, что экзаменатором собираются еще и логи экзамена — а SEB как раз логгирует все свои события: выключение неразрешенных процессов, очистку буфера обмена и многое другое. Поэтому надо найти способ читерить с включенным SEBом!
Сначала мы решили посмотреть, можно ли включить SEB на виртуальной машине. Здесь, к сожалению, нас постигла неудача — в таких условиях SEB даже не позволяет себя запустить. Но как-то же он понимает, что используется виртуальная машина!
Было опасение, что SEB использует не очень приятные для студента способы вроде обнаружения процессов и сервисов виртуальной машины (ВМ) в системе, но при изучении исходного кода было выяснено, что проверка на запуск из ВМ происходит в функции IsInsideVM() файла SEBWindowsClientMain.cs:
private static bool IsInsideVM() { using (var searcher = new ManagementObjectSearcher("Select * from Win32_ComputerSystem")) { using (var items = searcher.Get()) { foreach (var item in items) { Logger.AddInformation("Win32_ComputerSystem Manufacturer: " + item["Manufacturer"].ToString() + ", Model: " + item["Model"].ToString(), null, null); string manufacturer = item["Manufacturer"].ToString().ToLower(); string model = item["Model"].ToString().ToLower(); if ((manufacturer == "microsoft corporation" && !model.Contains("surface")) || manufacturer.Contains("vmware") || manufacturer.Contains("parallels software") || manufacturer.Contains("xen") || model.Contains("xen")) || model.Contains("virtualbox")) { return true; } } } } return false; }
Видим, что SEB способен определить виртуальные машины производителей, которые перечислены в коде! А что, если мы изменим конфиг виртуальной машины, подменив, тем самым, производителя?
Сказано — сделано! Открываем конфигурационный файл VmWare и добавляем следующую строку:
Теперь manufacturer model виртуальной машины станет таким же, как и у основной машины. Запускаем виртуальную машину, на ней включаем SEB и пытаемся получить доступ к тесту — все работает!
3. Компиляция новых версий SEB
А теперь переходим к самому интересному — компиляции «своей» версии SEB! Исходный код доступен здесь . Самое интересное, что конфигурационный файл SEB не отслеживает целостность десктопного приложения (либо отслеживает так, что мы смогли без проблем поменять большую часть кода, хи-хи), тогда как целостность конфигурационного файла, присланного экзаменатором, проверяется строже некуда.
3.1 Запуск в виртуальной машине
Подмену производителя мы уже сделали в пункте 2, но как было бы круто создать версию SEB, которая запускается в любой виртуальной машине, верно? К тому же, сделать это более чем легко (если не считать танцев с бубном при попытках скомпилировать проект в первый раз — а все из-за несходства платформ .NET).
Итак, нужно всего лишь в приведенном выше коде закомментировать строчку с нужной ВМ:
В данном случае мы скомпилировали программу таким образом, чтобы она вообще не реагировала на запуск в виртуальной машине VirtualBox. Но есть одно важное замечание: если наши читатели решат воспользоваться данным способом, то необходимо убрать/изменить логгирование событий! Виртуальная машина запустится без проблем, но в логах обязательно отразится запуск через VirtualBox.
3.2 Очистка буфера обмена
Когда SEB включается, он автоматически очищает буфер обмена. Таким образом, все, что скопировал студент до запуска SEB, в SEB не попадет. Что же, вызов принят!
Здесь можно пойти двумя путями:
- Покопаться в файле SEBClipboard.cs, убрать логгирование ошибок или немного изменить алгоритм очистки буфера обмена.
- Закомментировать строку в файле SEBWindowsClientMain.cs:
// Clean clipboard //SEBClipboard.CleanClipboard(); Logger.AddInformation("Clipboard cleaned.", null, null);
При этом лучше оставить последующее логгирование — чтобы проверяющий не понял, что с собой в SEB вы захватили То-Что-Нельзя-Использовать-На-Экзамене :)
Воспользовавшись любым из этих способов, можно получить желанный результат:
Таким образом, с собой в SEB можно «пронести» любой текст, картинку — словом, шпаргалку, которую можно поместить в буфер обмена.
3.3 Помощь друга или убираем запрет на Discord
SEB похож на очень капризную женщину — при включенном Skype, Discord и т.д. он не включится, а поставит тебя перед выбором: или я, или они.
Что ж, постараемся снизить градус напряжения в такой ситуации.
Здесь есть простор для полёта фантазии, но, в целом, достаточно закомментировать подходящие по смыслу строки вроде «processToClose.Kill();» в файле SEBNotAllowedProcessController.cs.
Также советуем рассмотреть строки «SetForegroundWindow(windowHandle);», «BringWindowToTop(windowHandle);» и работу службы WatchDog. Грамотное выстраивание логики приложения и логгирования — ключ к успеху!
И мы тем временем получили запущенный Discord при работающем SEB:
Что еще могут попробовать энтузиасты?
Вариантов осталось достаточно, хватит на 1000 и 1 бессонную ночь за компьютером. Например, можно перекомпилировать SEB так, чтобы он не запускался поверх всех окон, и его можно было бы свернуть как обычное приложение.
Также можно попробовать запустить SEB на других ОС (невероятно, но факт: очевидцы утверждают, что стандартный ВУЗовский конфиг для SEB на OS X даже голосовую связь по Discord остановить не может!).
Итак, способов собрать SEB с урезанным функционалом — великое множество, тут все упирается только в воображение креативных и трудолюбивых студентов!
Закончим статью