Защита Raspberry Pi от реверс-инжиниринга кодов

Проблема Я хочу защитить свой Raspberry pi особым образом. Я хочу запустить raspberry pi без ввода пароля в качестве пользователя pi. Однако я хочу, чтобы у пользователя pi были нулевые привилегии. Не могу прочитать файл, не могу скопировать файл, просто ничего. И без доступа в root -> sudo su. С другой стороны, когда raspberry pi запускается с пользователем pi, я хочу, чтобы бэкэнд-процесс выполнялся как root. Проще говоря, я хочу, чтобы это было как в зоопарке - два мира, но ни один из них не может войти в другой. Клиенты могут присутствовать, видеть, какой процесс запущен, видеть файлы в каталогах, но не могут их читать, копировать, удалять и т. д. В то же время я хочу, чтобы серверная часть оставалась нетронутой и работала и записывала файлы.

Причина:

У меня есть продукт raspberri pi - покупатель получает его домой, когда подключается к источнику питания, RPi запускается и запускает серверные программы с правами root и обменивается данными с программным обеспечением моего рабочего стола.

Но мне не нужен любопытный покупатель, который подключает HDMI и видит мой код. Я также не хочу, чтобы он взял SD-карту и извлек код.

Я слышал, что можно реконструировать код, даже если он скомпилирован. Поэтому я просто хочу, чтобы программы (скрипт python) были там, но к ним нельзя было получить доступ.

Можно ли сделать такую ​​защиту?

заранее спасибо

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 719
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для ясности: «не могу прочитать файл» означает «не могу запустить программу», что означает «не могу видеть, какой процесс запущен, видеть файлы в каталогах».

Из вашего вопроса я не понимаю, почему вы вообще оставили пользователя pi на месте ...


... runs backend programs with root privilege

Никогда не бывает хорошей идеей - используйте вместо этого служебные учетные записи.

But I dont want curious customer that plugs in HDMI and see my code.

Затем не включайте выход HDMI, не устанавливайте графический рабочий стол и отключите запрос входа в систему. Вы можете посмотреть изображение "минимальный" / "облегченный".

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

И поскольку config.txt и ядро ​​должны находиться в загрузочном разделе в открытом виде, их можно легко поменять местами ... таким образом, эти шаги не будут очень эффективными.

I also dont want him to take the SD card and extract the code.

Вы можете посмотреть на шифрование файловых систем (например: LUKS), но Raspberry Pi не имеет встроенной возможности хранить данные и идентифицировать себя ... поэтому ваш ключ шифрования может быть только чем-то вроде MAC-адреса или храниться в открытом виде на SD карта...

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

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

I heard its possible to reverse engineer the code even if compiled. So I simply want the programs (python script) to be there but cannot be accessed in any way.

Python не компилируется до времени выполнения, поэтому вам нужно будет отправить устройство с исходным кодом на нем ...


Если вы действительно хотите защитить свой Интеллектуальная собственность, то, возможно, Raspberry Pi - не лучший вариант? Вам решать, как балансировать стоимость и безопасность.

У меня облегченная версия - использую raspberry pi zero W. Дело в том, что мне нужен raspberry pi для запуска. Если пользователя pi нет, то он загружается как пользователь root. Вы подключаетесь с помощью hdmi, или, как вы сказали, изменение config.txt может снова разрешить hdmi, и мой враг находится под полным контролем. Итак, если я хорошо понимаю, единственное решение - хорошо скомпилировать байт-код кода, потому что всегда есть способ получить доступ к пользователю root, если у человека есть SD-карта? PS: Но вы можете скомпилировать код Python в исполняемый машинный код или использовать .pyc, но это очень легко закодировать.

Martin 12.10.2018 12:54

«мой враг под полным контролем» - правильно ... «физический доступ - это полный доступ» как говорится ...

Attie 12.10.2018 12:55

Спасибо за ваш вклад. У меня есть еще один вопрос - есть ли потенциал в решении, где при запуске у меня будет программа, которая проверяет MAC-адрес, и если он не тот, он удалит весь мой исходный код (допустим, я повредил вход HDMI, поэтому только способ читать данные через ssh или вставлять SD карту в другое устройство)?

Martin 12.10.2018 12:59

Это не функциональный вариант, потому что нам не нужно «ботинок» с SD-карты ... файловая система может быть смонтирована в другой системе, где ваше программное обеспечение не работает, и, следовательно, вы не можете «удали все свои вещи».

Attie 12.10.2018 13:02

Спасибо. Я попробую комбинацию представленных вами решений

Martin 12.10.2018 13:10

Я борюсь с этим "Если пользователя pi нет, то он загружается как пользователь root." ... Минимальные образы не загружают "пользователю" - они представляют собой текстовую консоль с приглашением для входа в систему.

Attie 12.10.2018 13:12

на моем облегченном raspbian он загружается пользователем pi без запроса входа в систему (я где-то установил загрузку без запроса входа в систему).

Martin 12.10.2018 14:08

Также, чтобы ответить вам: «Если вы действительно хотите защитить свою интеллектуальную собственность, то, возможно, Raspberry Pi - не лучший вариант?», Я не знаю ни одного аналогичного микроконтроллера, который был бы дешевым, работал под Linux и мог хранить x ГБ. данных ... и в основном поддерживает Python. И, конечно, может запускать несколько процессов.

Martin 12.10.2018 14:11

Вы можете использовать следующий подход

  1. Используйте как минимум два уровня хеширования с MAC-адресом и серийным номером чипа ARM (через cat /proc/cpuinfo) с дополнительными секретными ключами. Запускайте вашу программу только в том случае, если сохраненный лицензионный ключ совпадает с результатом двойного хеширования функций.

  2. При желании вы можете переписать критическую часть вашего кода на C, скомпилировать ее статически и удалить все символы отладки. Назовите это с помощью Python.

  3. Быстрая оптимизация вашего кода с помощью cython. Вызовите его сгенерированные общие объекты с помощью вызывающего скрипта python. Распространяйте только общие объекты и вызывающий скрипт python.

Это предотвратит реверс-инжиниринг ваших кодов большинством людей.

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