Назад | Перейти на главную страницу

Инструмент песочницы gcc - тюрьма AppArmor / CHROOT в Ubuntu 12.04

У нас есть приложение Node в качестве внешнего интерфейса для инструмента песочницы C ++, который компилирует код с помощью gcc и выводит результат в браузер.

например

exec("gcc -o /tmp/test /tmp/test.cpp",
    function (error, stdout, stderr) {
        if(!stderr) {
            execFile('/tmp/test', function(error, stdout, stderr) {});
        }
    }
);

Это прекрасно работает.

Однако, как вы понимаете, это кошмар для системы безопасности, если его обнародовать, поэтому я думал о двух вариантах защиты своего стека:

  1. Тюрьма CHROOT - но одного этого недостаточно, чтобы предотвратить обход каталога / доступ к файлам.
  2. AppArmor?

Итак, мой вопрос в том, как я могу защитить свой стек от любых неприятностей, которые могут исходить от:

A) Компиляция неизвестного кода с использованием gcc

Б) Выполнение скомпилированного кода

Это полностью зависит от того, сколько поставлено на карту и чем вы готовы пожертвовать ради этого.

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

Решение MAC (SELinux, AppArmor, TOMOYO) обеспечит более тонкий уровень контроля, особенно включая доступ к сети, но MAC не так уж и надежны.

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

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