Как избежать поведения макровируса с помощью скриптов Lua? - PullRequest
0 голосов
/ 07 февраля 2019

Итак, я работаю над программой, в которой я храню сценарии Lua в виде текста в файле, который затем загружается приложением для выполнения (doText - это функция, которую я считаю) и возвращает значение.Чего я ожидаю от кода Lua, так это взять float из C, выполнить (только) математические операции над float и вернуть еще один float обратно в C.

Я быстро понял, что злоумышленник может внедрить код Luaв файлы, которые заставляют его вести себя как макровирус, такой как в Microsoft Word / Excel / PowerPoint;он может открыть файл Lua и реплицировать или, что еще хуже, внедрить код в PE-файл, например, сделать PE-файл вирулентным и вредоносным.

Есть ли способ заблокировать функциональность Lua, полезную для злоумышленника (например,операции с файлами) или реализует функциональность, предотвращающую такое поведение?

1 Ответ

0 голосов
/ 07 февраля 2019

У меня сложилось впечатление, что вы хотите создать песочницу Lua, в которой выполняются сценарии Lua.Управляя средой «песочницы», вы можете ограничить возможности скриптов.

В Stackoverflow существует ряд похожих вопросов.

Тогда у Mozilla есть github, который вы можете найти полезным. Lua Sandbox Library .

Похоже, что произошло изменение с Lua 5.1 на Lua 5.2, из-за которого некоторые старые методы песочницы не работали так хорошо.Вот описание подходов для Lua 5.1, Песочницы , но используемая функция, setfenv() больше не доступна в Lua 5.2.

Существует также Safe Lua это может быть полезно.

В этой статье «Песочница» Lua из C упоминается выбор библиотек для загрузки по одной за раз для создания определенной рабочей среды.

Вот как реализована предложенная квази-песочница: обычно после создания нового состояния Lua хост-код должен вызывать функцию luaL_openlibs () для загрузки стандартных библиотек, предоставляемых языком Lua, однако это вызовет многие функции, которые могут быть нежелательны в некоторых случаях.ситуации.Поэтому эта песочница загружает каждую библиотеку индивидуально, вызывая luaL_requiref (), и использует тот факт, что эта функция оставляет таблицу загруженных функций в верхней части стека Lua.Нежелательные функции затем не определяются, давая им значение nil, ...

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

Необходимо сделать несколько заключительных замечаний относительно предложенного решения: неясно, будет ли интерпретатор Lua сохранять полную функциональность во всех аспектах за пределами нежелательной функциональности, когда загружается только подмножество стандартных библиотек, однако это хорошо сработало для моего решения.В любом случае рекомендуется провести некоторое тестирование.Это связано с тем фактом, что некоторые, казалось бы, основные функциональные возможности языка (например, ipairs ()) фактически предоставляются базовой библиотекой.

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

...