Подтвердить что ты не робот

Зашифрованные и безопасные контейнеры докеров

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

У меня есть приложение, состоящее из нескольких двоичных файлов (скомпилированных из источников C) и кода на основе python, который переносит все это в систему. Это приложение использовалось как облачное решение, так что пользователи имели доступ к функциям приложения через сеть, но не могли коснуться реального сервера, где хранятся двоичные файлы и код.

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

Я знаю, что докер - замечательный инструмент для развертывания, поэтому мне интересно: можно создать зашифрованные контейнеры докеров, где никто не может видеть какие-либо данные, хранящиеся в файловой системе контейнера? Известно ли решение этой проблемы?

Кроме того, возможно, существуют хорошо известные решения, не основанные на докерах?

4b9b3361

Ответ 1

То, о чем вы спрашиваете, называется obfuscation. Это не имеет никакого отношения к Docker и является очень специфичной для языка проблемой; для данных вы всегда можете делать все, что хотите, но, хотя вы можете надеяться отговорить злоумышленника, он никогда не будет безопасным. Даже самые современные схемы шифрования не могут помочь, поскольку программа (которую вы предоставляете) должна содержать ключ.

C обычно достаточно сложна для обратной инженерии, для Python вы можете попробовать pyobfuscate и аналогичный.

Для данных я нашел этот вопрос (ключевые слова: игра для шифрования файлов).

Ответ 2

Пользователь root на хост-машине (где работает демон docker) имеет полный доступ ко всем процессам, выполняемым на хосте. Это означает, что человек, который управляет главной машиной, всегда может получить доступ к ОЗУ приложения, а также к файловой системе. Это делает невозможным скрытие ключа для дешифрования файловой системы или защиты ОЗУ от отладки.

Использование обфускации в стандартном ящике Linux может затруднить чтение файловой системы и ОЗУ, но вы не можете сделать это невозможным или контейнер не может работать.

Если вы можете управлять оборудованием, работающим под управлением операционной системы, то вы можете посмотреть Trusted Platform Module, который запускает проверку системы, как только система загружается. Затем вы теоретически могли бы сделать что-либо до того, как пользователь root получит доступ к системе, чтобы скрыть ключи и сильно зашифровать файловые системы. Даже тогда, учитывая физический доступ к машине, определенный злоумышленник может всегда получать дешифрованные данные.

Ответ 3

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

  • Только для Windows
  • ЦП имеет доступ к ключу (т.е. вы должны доверять Intel)
  • Он оптимизирован для облачных сценариев. Если вы хотите установить это на несколько ПК, вам необходимо предоставить ключ безопасным способом (например, просто зайти туда и набрать его самостоятельно) на один из компьютеров, на котором вы собираетесь установить приложение, и этот ПК должен быть способен для безопасного распространения ключа на другие ПК.

Предложение Энди об использовании TPM имеет похожие последствия для пунктов 2 и 3.

Ответ 4

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

Вы можете либо ходить легкими, либо открытыми, либо жирными и закрытыми. Я не знаю, что есть "легкий и закрытый" вариант.