Міхав Володимир

Науковий керівник: доцент кафедри інформатики, кандидат фізико-математичних наук Паращук С. Д.

Кіровоградський державний педагогічний університет імені Володимира Винниченка

Анотація: В статті розглядаються методи захисту файлової системи онлайн-судді від впливу користувацьких програм.

Ключові слова: онлайн-суддя, пісочниця, libsandbox.

Актуальність теми. Захист онлайн-судді від впливу користувацьких програм – важлива складова розробки системи для їх перевірки. Код користувача може містити помилки, що здатні порушити стабільну роботу системи, або ж одразу бути націленим на її пошкодження. Одна із найбільших проблем – захист файлової системи онлайн-судді. Необхідно не лише гарантувати, що користувацька програма не зможе пошкодити файли системи перевірки, а й захистити файли із завданнями та відповідями від несанкціонованого доступу, щоб унеможливити шахрайство.

Метою дослідження є аналіз методів захисту файлової системи, які ефективно співпрацюватимуть із онлайн-суддею. Для досягнення мети необхідно вирішити наступні завдання:

  • проаналізувати найпопулярніші методи файлової системи та зручність їх використання в онлайн-судді.
  • дослідити особливості захисту при роботі з програмами, які виконуються за допомогою інтерпретатора.

Система автоматичної перевірки розв’язків (онлайн-суддя, online judge) – хмарна система, що здійснює перевірку програмного коду, наданого користувачами у рамках навчання або проведення змагань із програмування.

Існує декілька способів захисту файлів системи від потенційно небезпечних користувацьких програм. Серед них найперспективнішими є наступні:

  1. Помістити програму у «в’язницю» за допомогою системного виклику jail, або змінити кореневий каталог за допомогою системного виклику chroot[1]. Встановлення фальшивого кореня файлової системи гарантує недоторканність файлів онлайн-судді, проте це також заблокує доступ до файлів, необхідних для роботи користувацької програми, таких як /etc/lib.so.cashe чи вмісту теки /lib/x86_64-linux-gnu/. Проте варто зауважити, що chroot не гарантує повного захисту: користувацька програма зможе отримати доступ до файлів через інші програми. Цей метод вимагає запускати програму-пісочницю з правами адміністратора, через що можуть виникати додаткові проблеми безпеки.
  2. Запустити програму від імені користувача, який не має прав для читання файлів, їх редагування, створення чи видалення. Цей метод дозволяє налаштувати частковий доступ до потрібних для роботи файлів, але також вимагає запуску пісочниці від імені адміністратора, щоб здійснити системні виклики setuid(задає ідентифікатор користувача, від імені якого буде виконуватись програма), seteuid (задає ефективний ідентифікатор користувача) та setgid(задає ідентифікатор групи). За допомогою утиліти iptables можна також заблокувати доступ до мережі для цього користувача, знищуючи всі пакети, відправлені від його імені.
  3. Обмежити кількість доступних файлових дескрипторів для користувацької програми за допомогою системного виклику setrlimit з параметром RLIMIT_NOFILE[2]. Процес, якому доступно лише три файлових дескриптора, зможе працювати лише зі стандартними потоками введення, виведення та помилок. Варто зауважити, що для програм, створених на інтерпретованих мовах програмування, можуть знадобитися додаткові файлові дескриптори. За допомогою цього ж системного виклику з параметром RLIMIT_FSIZE можна обмежити максимальний розмір файлу, який програма може створити, а також накласти ряд інших обмежень. Мінус методу полягає у тому, що можна обмежити кількість відкритих файлів, проте не можна вказати, які саме файли програмі дозволено відкривати.
  4. Контролювати здійснення системних викликів клієнтською програмою за допомогою ptrace[3]. Це найбільш гнучкий метод, оскільки дозволяє визначати, до яких файлів та в якому режимі програма зможе отримати доступ. Саме він застосовується у бібліотеці libsandbox, яку ми плануємо використовувати у нашій системі онлайн-судді[4].

Особливої уваги вимагає обмеження доступу до файлів для програм, написаних на мові Java, оскільки ні один із вище перелічених методів для них не підходить. Для цього Java має власний інструмент – менеджер безпеки. Необхідно до виклику клієнтської програми додати параметр -Djava.security.manager=default. Це заборонить доступ програмі не лише до файлових операцій, а також і до доступу в мережу. Також можна дозволити доступ до окремих файлів, створивши власний файл політики.

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

Висновки

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

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

Список літератури:

  1. Sarmiento E. Securing FreeBSD using jail / Evan Sarmiento. // Sys Admin. – 2001. – №5. – pp. 31–37.
  2. setrlimit(2) - Linux man page [Електронний ресурс] – Режим доступу до ресурсу: https://linux.die.net/man/2/setrlimit.
  3. ptrace(2) - Linux Programmer's Manual [Електронний ресурс] – Режим доступу до ресурсу: http://man7.org/linux/man-pages/man2/ptrace.2.html.
  4. sandbox [Електронний ресурс] – Режим доступу до ресурсу: https://github.com/openjudge/sandbox.

Відомості про авторів:

Міхав Володимир Володимирович – студент ІV курсу фізико-математичного факультету Кіровоградського державного педагогічного університету імені Володимира Винниченка.