Безопасно ли распространять исходный код Python в Docker?

Я собираюсь выбрать язык программирования для проекта. Требования заключаются в том, что некоторые клиенты хотят запускать приложения на изолированных серверах без внешнего доступа в Интернет.

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

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

Один из моих коллег рассказал мне о Docker. Я могу найти дюжину ответов о безопасности контейнера Docker. Проблема заключается в том, чтобы защитить (изолировать) хост от кода, работающего в контейнере.

Что мне нужно, так это узнать, защищен ли исходный код Python в Docker Image и работает в Docker Container от доступа - может ли пользователь каким-то образом (не обязательно быть простым) получить доступ к этому коду Python?

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

4 ответа

Решение

Изображения Docker - это открытый и документированный формат "упаковки приложений". Существует бесчисленное множество способов проверки содержимого изображения, включая весь исходный код Python, поставляемый внутри них.

Запуск приложений внутри контейнера обеспечивает изоляцию от приложения, выходящего из контейнера для доступа к хосту. Они не защищают вас от пользователей на хосте, которые проверяют, что происходит внутри контейнера.

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

Если вы запустите pyinstaller --onefile yourscript.pyвы получите скомпилированный файл, который можно запустить как исполняемый файл. Я тестировал его только в Raspberry, но, насколько я знаю, то же самое, скажем, в Windows.

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

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

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

И вам следует помнить, что сотрудник службы безопасности клиента может издавать сильное НЕТ, когда речь идет о запуске неконтролируемой виртуальной машины в своей сети. Я бы никогда не принял это.

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

TL / DR: Это не ожидаемый ответ, но просто нет. Если вы продадите свое решение, у вас будет юридический договор с вашим клиентом, и такая проблема должна решаться на юридическом, а не техническом уровне. Вы можете попробовать, и я даже дал вам подсказку, но ИМХО риски выше, чем выгода.

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

У меня просто есть идеи по поводу безопасного контейнера:

  1. Создайте контейнер с файлом инициализации, например файлом докера, пароль должен быть установлен при создании контейнера;
  2. как только контейнер построен, мы должны использовать пароль для доступа внутрь, включая чтение \ копирование \ изменение файлов
  3. все файлы, хранящиеся на хост-машине, должны быть зашифрованы。
  4. режим "получить пароль" или "--skip-grant-" не предлагается. это означает, что никто не сможет получить доступ к данным внутри контейнера, если вы потеряли пароль.

Если у нас есть надежный контейнер, в котором мы можем запускать tomcat или Django сервер, обфускация кода не потребуется.

Другие вопросы по тегам