Безопасность выполнения стороннего кода

Во время проведения тестирования работы программы существует необходимость ее запускать. По причине того, что невозможно заранее предсказать поведение программы, присланной на проверку, возникает необходимость ограничить возможные действия со стороны запускаемых программ, чтобы такие программы не могли нанести вред системе.

Выделим типы атак, которые могут быть использованы программой:

  • 1. Обращение к дисковому пространству - чтение, удаление, модифицирование файлов;
  • 2. Максимально возможная загрузка вычислительной мощности процессора (создание большого количества потоков, совершающих непрерывные вычисления);
  • 3. Максимально возможная загрузка оперативной памяти;
  • 4. Создание вечно работающих программ;
  • 5. Выполнение директив командной строки.

Для устранения атак типа (1), (2), (3) и (5) используются средства операционной системы linux, а также сторонние программы ulimit и cpulimit, позволяющие запустить программу от лица определенного пользователя, а также выставить ограничения на потребляемые память и частоту процессора.

Чтобы решить проблему вечно работающих программ (тип атаки (4)) используется замер времени при запуске программы, и после достижения порогового значения процесс программы принудительно убивается с помощью средств linux.

Оценщик для поиска плагиата

Для нахождения плагиата в наборе программных документов был реализован описанный алгоритм, основанный на генерализации исходного кода и на алгоритме поиска и сравнения отпечатков.

Для реализации алгоритма генерализации кода было использовано абстрактное синтаксическое дерево для поиска конструкций, которое необходимо изменить. Для построения абстрактного синтаксического дерева использовалась библиотека javaparser [48]. Для реализации алгоритма поиска и сравнения отпечатков использовались стандартные средства языка Java, а также был реализован алгоритм кольцевого-хэша для эффективного подсчета набора хэшей документа.

В отличие от остальных оценщиков, работа данного оценщика основана на проверке не одной индивидуальной работы студента, а многих работ вместе. По этой причине, данный оценщик не участвует в оценке непосредственно в момент сдачи работы. Вместо этого, запуск данного оценщика осуществляется после окончания срока сдачи работ в систему (ожидается, что все работы студентов к этому моменту являются сданными) или осуществляется вручную.

При запуске этого оценщика, программа осуществляет проверку на последних загруженных студентами работах. Иными словами, для каждого студента только последняя загруженная им работа в программу будет участвовать в данной проверке. В дальнейшем, предоставляется отчет о проведении проверки, имеющий рекомендательный характер. Преподаватель может ознакомиться с результатами проверки и отметить пользователей, которые должны быть, по его мнению, уличены в списывании. После этого, программа записывает результат данной проверки.

Сервис данного оценщика является внутренним модулем и доступен с помощью REST интерфейса, реализованным с помощью фреймворка Jetty[49]. Сервис работает на сервере приложений Project Grizzly [50].

 
< Пред   СОДЕРЖАНИЕ   Загрузить   След >