Безопасная система плагинов для приложения Python

У меня есть приложение, написанное на питоне. Я создал систему плагинов для приложения, которое использует файлы egg. Файлы Egg содержат скомпилированные файлы Python и могут быть легко декомпилированы и использованы для взлома приложения. Есть ли способ защитить эту систему? Я бы хотел использовать цифровую подпись для этого - подпишите эти файлы яйца и проверьте подпись перед загрузкой такого файла яйца. Есть ли способ сделать это программно из python? Может через винапю?


person uhz    schedule 25.05.2009    source источник
comment
Что значит взломать приложение? Вы беспокоитесь о злонамеренных пользователях? Пожалуйста, представьте какой-нибудь пример использования для человека, который загружает, устанавливает, а затем -- что? -- ломая приложение, которое они скачали? Пожалуйста, объясните этот сценарий более подробно.   -  person S.Lott    schedule 26.05.2009


Ответы (2)


Есть ли способ защитить эту систему?

Ответ "это зависит".

Два вопроса, которые вы должны задать, это "что люди должны уметь делать" и "что люди могут делать (для данной реализации)". Если существует реализация, в которой последний является подмножеством первого, система может быть защищена.

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

Вы хотите, чтобы пользователи загружали ненадежный код из Интернета и запускали его с некоторой уверенностью, что он не загрузит их компьютер? Затем посмотрите на различные веб-языки. Одно из решений не предлагает доступ к системным вызовам (JavaScript) или предлагает ограниченный доступ к определенным потенциально опасным вызовам (Java SecurityManager). Насколько мне известно, ни один из них не может быть выполнен на питоне, но вы всегда можете взломать интерпретатор и запретить загрузку внешних модулей, не входящих в какой-либо белый список. Это, вероятно, подвержено ошибкам.

Вы хотите, чтобы пользователи писали плагины и не могли возиться с тем, что делает основная часть кода в вашем приложении? Учтите, что пользователи могут декомпилировать файлы .pyc и изменять их. Предположим, что те, кто запускает ваш код, всегда могут его изменить, и подумайте о ботах, собирающих золото для WoW.

Одно решение только для Linux, похожее на веб-модель с изолированной программной средой, заключается в использовании AppArmor, который ограничивает, к каким файлам может получить доступ ваше приложение и какие системные вызовы оно может выполнять. Это может быть выполнимым решением, но я мало что знаю об этом, поэтому не могу дать вам совет, кроме как «расследовать».

Если все, о чем вы беспокоитесь, это о том, что злонамеренные люди модифицируют код, пока он находится в пути в промежуточных трубах, существуют стандартные криптографические решения (SSL). Если вы хотите загружать только подписанные плагины (потому что хотите контролировать, что делают пользователи?), подписание кода звучит как правильное решение (но остерегайтесь хитрых пользователей или злых людей, которые редактируют файлы .pyc и отключают is-it- подписанный чек).

person Jonas Kölker    schedule 26.05.2009

Может быть, какая-нибудь криптографическая библиотека, подобная этой http://chandlerproject.org/Projects/MeTooCrypto, поможет создать объявление -горячее решение. Пример использования: http://tdilshod.livejournal.com/38040.html

person miku    schedule 25.05.2009