Песочница Guile, удалив ненужные библиотеки? - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть GUI с открытым исходным кодом , для которого я только что реализовал очень простой механизм расширения, который позволяет пользователю вставлять фрагмент кода Lisp (Guile) в документ, чтобы позволить определенным функциямбыть настроеннымВ настоящее время сценарий использования (мой собственный) заключается в том, что в определенной ситуации я просто хочу, чтобы определенное число автоматически делилось на 10.

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

Guile 2.2.1 имеет механизм песочницы: https://www.gnu.org/software/guile/manual/html_node/Sandboxed-Evaluation.html Тем не менее, это, кажется, полностью сфокусировано на предотвращении чрезмерного использования ресурсов (и у многих пользователей не будет такой текущей версии Guile, например, у меня сейчас нет).

Возможно ли это вПрограмма Guile после запуска интерпретатора удаляет библиотеки, такие как POSIX , чтобы любой последующий код не мог делать такие вещи, как чтение файлов?Если так, то я мог бы просто сделать так, чтобы мой GUI добавлял код песочницы к потенциально ненадежному коду, предоставленному документом.Моя цель в основном состояла бы в том, чтобы гарантировать, что ненадежный код должен быть на 100% без побочных эффектов.

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

РЕДАКТИРОВАТЬ: После того, как наткнулся на Как отменить определение переменной в Схеме? , мне кажется, что я мог бы создать новую область видимости, переопределить определение любой опасной функции с помощьювыполнение set! в этой области, а затем выполнение ненадежного кода в этой области.Я полагаю, что если бы я мог как-то прочитать всю таблицу символов, я мог бы сделать такое переопределение для каждой функции, которая не входит в белый список.Это просто кажется неуклюжим и неэффективным и может зависеть от чтения таблицы символов с использованием некоторого механизма реализации.Он также может быть уязвим для синтаксических уловок, например, если ненадежный код использует а), чтобы выскочить из области действия песочницы.

...