Как проверить, есть ли в источнике C ++ какие-либо системные вызовы?

0

Я пытаюсь разработать структуру, которая будет компилировать и выполнять (в основном случайные) C++ и Java-пакеты.

Однако, учитывая их случайный характер, я хочу проверить исходный код (или исполняемый файл - предварительное исполнение) для любых системных вызовов linux перед выполнением. Если есть такой системный вызов, я не хочу выполнять программу.

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

Изменить: команда bash/script будет простейшей, но любой ответ будет прекрасен.

  • 4
    Я считаю, что grep это то, что вы ищете.
  • 3
    Если кто-то хочет намеренно скрыть системный вызов, я сомневаюсь, что вы можете сделать что-нибудь, чтобы предотвратить это. Вы должны посмотреть (как минимум) на запуск программ в изолированной тюрьме с ограниченными (или отсутствующими) библиотеками. Также проверьте этот вопрос .
Показать ещё 5 комментариев
Теги:

2 ответа

4
Лучший ответ

Короче говоря, вы не можете надежно обнаружить все вредоносные системные вызовы (путем статического анализа исходного кода); читайте о проблеме с остановкой и теореме Райса... BTW MELT будет немного лучше, чем grep поскольку он работает с представлением GCC gimple.

Подумайте (о Linux)

  • dlopen (3) -ing libc (или основной исполняемый файл), затем dlsym -ing "system" чтобы получить указатель на system функцию
  • зная макет и версию libc, затем адрес компьютерной system, добавив некоторое известное смещение в адрес malloc
  • используя некоторые JIT-библиотеки, например, заголовок только GNU-молнии
  • кодирование eqivalent system с помощью fork и execve....
  • и т.д....

Конечно, вы можете доверять своему пользователю (я не буду этого делать для веб-приложения). Если вы доверяете всем своим пользователям и просто хотите обнаружить ошибки, вы можете фильтровать некоторые из них.

Вам нужен контейнер, например докер

2

Просмотрите ограничения ресурсов (setrlimit, если вы находитесь в системе POSIX), а не пытаетесь найти вредоносный код.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню