1000 и 1 способ обойти Safe Exam Browser

1000 и 1 способ обойти Safe Exam Browser

Ну ладно, не 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 не попадет. Что же, вызов принят!

Здесь можно пойти двумя путями:
  1. Покопаться в файле SEBClipboard.cs, убрать логгирование ошибок или немного изменить алгоритм очистки буфера обмена.
  2. Закомментировать строку в файле 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 с урезанным функционалом — великое множество, тут все упирается только в воображение креативных и трудолюбивых студентов!

Закончим статью народной мудростью: остановить студента в поиске халявы может только еще большая халява!
Alt text