2014-09-24 2 views
19

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

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

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

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

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

+2

CoreOS пытается решить эту проблему с помощью [Rocket] (https://github.com/coreos/rocket). Они будут внедрять систему импорта Golang, которая позволяет вам извлекать частные репозитории. Тем не менее, это тяжелое развитие. Послушайте [этот подкаст] (http://thechangelog.com/138/) для получения дополнительной информации. – mauvm

ответ

4

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

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

Для данных, я нашел this question (ключевые слова: encrypting files game).

+1

Привет! Спасибо за этот ответ. Обфускация - это, очевидно, вещь, которую мы рассматриваем, но она решает только одну проблему с обратной инженерией (и не полностью). Я действительно хочу иметь контейнер для песочницы, который выглядит как черный ящик снаружи. Вы можете взаимодействовать со своими входами и выходами, но не можете видеть, что внутри. Интересно, возможно ли с помощью какой-либо зашифрованной файловой системы внутри контейнера. Спасибо за эти ссылки. Я проверю их! –

+1

Если вы зашифруете контейнер, вам по-прежнему нужен ключ, который появится где-то в том, что вы отправляете своим пользователям, или не будет никакого способа его запуска. И если вы его распространите, есть шанс, что ваши пользователи найдут это ... – remram

+0

Я тоже это понимаю. Но, честно говоря, я не первый, кто сталкивается с такой проблемой. Я знаю, что должны быть некоторые дистрибутивы Linux с такими включенными функциями безопасности - зашифрованными файловыми системами и т. Д. Ок, может быть, я должен сам это выяснить. В любом случае, спасибо. –

15

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

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

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

+0

Энди, спасибо за ответ. Как я упоминал в сообщении: «Мы знаем, что все может быть сломано», - так я знаю об этом. Я просто подумал, что есть «стандартные» способы делать такие вещи, и я также надеялся, что существует известное решение, основанное на докере. Теперь я думаю, что у нас просто есть обфускация + какой-то файл лицензии - просто базовая защита, но больше, чем ничего. Кстати, спасибо за ссылку, я проверю это. –

+0

Ничто в программном обеспечении «невозможно». – ColdCold

2

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

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

+0

Хорошая точка. Я не хочу использовать VM-подход из-за проблем с производительностью. Я думаю, что в итоге мы будем более легкими и открытыми, а не тяжелыми и близкими :) –

+4

Виртуальная машина не поможет в этом отношении. Так же легко монтировать файловую систему из образа, так как он должен найти корневой каталог контейнера ... И шифрование по-прежнему не является вариантом. – remram

+1

Кроме того, легко сбрасывать всю оперативную память виртуальной виртуальной машины VirtualBox. Таким образом, даже если ваши клиенты не могут войти в систему и файловая система зашифрована, они могут легко получить доступ, например. ваш исходный код Python после его загрузки. Я думаю, что я использовал эту команду: $ vboxmanage debugvm «Имя вашей виртуальной машины» dumpguestcore --filename ram.elf $ grep «Исходный код фрагмента» ram.elf http://wiki.yobi.be/wiki/RAM_analysis – mh8020

4

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

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

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

+0

Да, я выяснил это (о гомоморфном шифровании), когда я изучал эту тему. Спасибо за этот информативный пост, кстати! –

Смежные вопросы