Як я можу захистити програмне забезпечення на Pi для комерційного використання?


16

Я хотів би використовувати Raspberry Pi в комерційному продукті, але я хотів би запобігти зворотному проектуванню програмного забезпечення на пристрої. Програмне забезпечення буде написане на Ruby. Я припускаю, що кінцевий користувач має фізичний доступ до SD-карти і досить розумний, щоб отримати кореневий доступ до Pi.

Як я бачу, варіанти можуть включати:

  • Зашифруйте частину (або всі) SD-карти
  • Запустіть код Ruby або скомпілюйте його до байт-коду (JRuby або Rubinius)

Шифрування було б найкращим рішенням, але я не можу придумати спосіб дешифрування, не запитавши у користувача ключ. Обфузація коду, безумовно, можлива, але менш безпечна в моїй свідомості.

Чи можливо зашифрувати частину SD-карти, не вимагаючи від користувача ключа для її розшифрування? Або є кращий спосіб переконатися, що код доступний лише на потрібному пристрої?


Я шукаю подібне рішення. Найкраща відповідь, яку я отримав, - це змонтувати зображення (розділ), яке зашифровується після завантаження з використанням певних умов (можливо, виклик Ajax, як DRM для надання динамічного ключа дешифрування, серійний номер із алгоритмом блокування ((SN * дата - 1)) - Тільки інший спосіб - використовувати код, який може компілювати ваш код у бінарні файли, як-от c ++ або .net (моно), і сподіваємось, що хороші програмні сухарики не націляться на ваше програмне забезпечення - ви знаєте, тому що Microsoft не має цієї проблеми протягом еонів .. і все одно не вирішив .. Удачі!
Пьотр Кула

Відповіді:


8

Звичайно, можна розшифрувати зашифрований файл / контейнери / тощо. не запитуючи пароль. Достатньо зберегти (зашифрований) пароль на SD-картці і використовувати його для розшифрування даних. Наприклад, легким opensslдемо-версією може бути:

openssl enc -a -e -salt -aes-256-cbc -pass pass:abc123 -in /tmp/plaintext.txt -out /tmp/ciphertext.enc

openssl enc -d -a -aes-256-cbc -pass pass:abc123 -in /tmp/ciphertext.enc

Шифрування буде виконуватися під час встановлення програмного забезпечення на Pi, а дешифрування буде виконуватися під час виконання, можливо, в оперативній пам'яті. Наприклад, пароль може бути комбінацією деякого псевдовипадкового послідовного номера (відомого вам) та певного серійного номера Pi, отриманого від a cat /proc/cpuinfo. Тоді ви повинні знайти приховано приховану локацію для зберігання цього псевдовипадкового числа, яке є усіма намірами та цілями " пароля " і, таким чином, слабкою точкою всього механізму шифрування. Наприклад, запасний сектор на SD був би типовим вибором, але ви навіть можете вбудувати його в один із своїх виконуваних файлів.

У будь-якому випадку, найкращим варіантом є шифрування та компіляція програмного забезпечення, додавання до вашого програмного забезпечення різних шарів затуплення.

Нарешті, якщо вашому програмному забезпеченню потрібне підключення до Інтернету, ви навіть можете змусити Pi кожного разу просити пароль. Вам все одно потрібно буде приховати пароль всередині з'єднання, вам також доведеться користуватися, httpsі вам доведеться захищатись від атак відповідей, використовуючи поточний час як saltдля шифрування.

У вас є безліч (дешевих) варіантів, щоб зробити програмне забезпечення безпечним. Але ви повинні знати, що якщо ваше програмне забезпечення буде досягнуто чітко визначеного порогу популярності, воно буде зламане точно, навіть якщо ви вкладете значні гроші в його захист.


1
Я можу увійти як корінь у безпечному режимі, прочитати файл ключових даних та розшифрувати всю його наполегливу працю та продати їх мільйонам росіянам. Гарна спроба .. але не кулезахисна. Навіть https може бути обмануто перенаправленнями DNS і підробленими сертифікатами все в керованій мережі .. ой
Пьотр Кула

1
@Avio: Перш за все, сектор невідомий. Це повинно бути відомо, просто не очевидно, де це. Але оскільки вам потрібно це з’ясувати за допомогою дешифрування сценарію / програми, його можна знайти. Ви повинні десь покласти код, який зробить дешифрування. Куди б ви його поклали? У initramfs, якийсь розділ SD-карти чи інше незахищене місце. Будь-хто може побачити програми / скрипти, які використовуються для розшифровки зашифрованого розділу та / або просто змінити їх, щоб отримати певний доступ до їх виконання.
Кшиштоф Адамський

1
Всі ваші способи шифрування прекрасні - за винятком того, що ключ зберігається на SD-картці. Оператор, швидше за все, хоче продати SD-карти для / з Pi кінцевому користувачеві. Тоді я можу взяти SD-карту, грубо зламати її, експлуатувати, безпечний режим в root - прочитати файл ключових даних та проникнути в усі інші пристрої зв'язку та вихідного коду. То є головоломка. Я впевнений, що ОП знають, як зашифрувати речі. Він запитує, як захистити своє програмне забезпечення від розшифровки, при цьому дозволь системі автоматично розшифровувати його.
Пьотр Кула

1
@Avio: Ні, не дуже. Але оскільки ви запитали «як?», Я відповів на це. Не знав, що це риторичне питання. Ви писали, що впровадження вашої ідеї достатньо для розповсюдження програми, але я вважаю, що ОП (та інші, хто це читає) повинні просто знати про слабкі сторони цього підходу. Попри це, я не вірю, що існує багато кращого рішення для Raspberry Pi. Єдине, що можна зробити, це просто притупити ще більше. Можливо, додаток OP є надто дорогоцінним, щоб ризикувати, і він вирішує використовувати щось, крім RPi, де він може створити кращий механізм захисту.
Кшиштоф Адамський

1
Незважаючи на те, що всі відповіді тут дають велике обговорення міркувань і проблем, пов'язаних із моїм запитанням, я зараз прийму цю відповідь, оскільки вона має найбільш конкретне рішення. Використання серійного номера від / proc / cpuinfo може бути відсутнім посиланням.
Шроквелл

6

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

Це подібно до шифрування фільмів, DVD-диск повинен містити всю інформацію, необхідну для розшифрування фільму, щоб він міг бути показаний глядачеві, тому всі механізми захисту від копіювання фільму в кінцевому рахунку приречені.

Найкраще, що ви можете зробити, це змінити економіку зворотного проектування вашого продукту.

Чи варто шифрування та / або обтурація?

Тепер ми встановили, що немає можливості повністю захистити себе, питання стають

  1. Наскільки це можливо?
  2. Яке значення має для вашого іншого алгоритму та даних?
  3. Яка вартість їх придбання ліцензії на використання вашого програмного забезпечення?
  4. Яка вартість їх копіювання вашого алгоритму та даних?
  5. Яка вартість їх зворотного проектування вашого алгоритму та даних?
  6. Яка ціна вам для захисту свого алгоритму та даних?

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

Отже, це призводить до вашого питання

  • Як захистити свій алгоритм та дані?

Затуплення

Варіант, який ви пропонуєте, заплутуючи код, псує з економікою вище - він намагається значно збільшити витрати на них (5 вище), не збільшуючи при цьому вартість (6). Проблема полягає в тому, що як і при шифруванні DVD, воно приречене на збій, і якщо достатньо різниці між 3, 4 і 5, то врешті хтось зробить це.

Іншим варіантом може бути форма стеганографії , яка дозволяє визначити, хто розшифрував ваш код і почав його розповсюджувати. Наприклад, якщо у вас є 100 різних значень з плаваючою ланкою, а помилка 1 біт у LSB кожного з цих значень не спричинить проблеми з вашою програмою, кодуйте в ці біти унікальний ідентифікатор (для кожного клієнта). . Проблема полягає в тому, що якщо хтось має доступ до декількох копій даних вашої програми, було б очевидно, що вони відрізняються, що полегшує ідентифікацію прихованого повідомлення.

Захист

Єдиний дійсно безпечний варіант - надавати критичну частину свого програмного забезпечення як послугу , а не включати його у свою програму.

Концептуально ваш додаток збирає всі дані, необхідні для запуску алгоритму, упаковує його як запит на сервер (керований вами) у хмарі , потім ваша служба обчислює ваші результати та передає їх клієнту, яка б відображала його.

Це зберігає всі ваші патентовані, конфіденційні дані та алгоритми в межах домену, який ви повністю контролюєте, і вилучає будь-яку можливість вилучення клієнта.

Очевидним недоліком є ​​те, що клієнти прив’язані до вашого надання послуг, перебувають на вашій увазі до ваших серверів та їхнього інтернет-зв’язку. З іншого боку, вони завжди в курсі виправлень помилок. На жаль, багато людей заперечують проти SaaS саме з цих причин.

Це був би величезний крок, який можна зробити, і міг би мати величезну вартість 6 вище, але це єдиний спосіб, який я можу зберегти ваш алгоритм та дані повністю захищеними .


SaaS може бути варіантом, але ви повинні знати, що вам потрібно буде повторно перевірити бали від 1 до 6 для кожного сервера, який ви розмістите в Інтернеті. Ви також піддаєте DDoS-атакам.
Авіо

4

Нещодавно я винайшов дуже елегантне рішення цієї нерозв'язної проблеми. Це надихнуло цей xkcd комікс:

введіть тут опис зображення

Тож розчин називається супер клеєм . Якщо одна суперклея SD-карта на PI, витягнути карту, не пошкодивши її, буде майже неможливо.

Ви навіть можете використовувати зовнішній диск SSD, зашифрований паролем, збереженим на SD, і відчувати себе в безпеці!

введіть тут опис зображення


Хтось міг легко створити з нього файл зображення ( dd), і відповідно використовувати його!
Василіс

@Vassilis це неможливо без входу, чи ні?
ADOConnection

Будь-хто з живим зображенням Linux може це зробити! Не обов’язково бути коренем вашої системи.
Василіс

@Vassilis, я можу попросити вас вказати на будь-яку статтю, що пояснює цю процедуру, будь ласка
ADOConnection

Перше, що з’явилося в Google, це
Василіс,

2

Компіляція у байт-код буде найкращим відштовхувачем. Що стосується шифрування, програмне забезпечення може зберігатися в томі TrueCrypt, але лише в тому випадку, якщо користувач не отримав кореневий доступ; просто немає можливості надійно зберігати пароль, оскільки пам'ять / диск можна скинути в будь-який час для перевірки. Навіть допомога захищених пристроїв (смарт-карток) не допоможе багато, якби програмне забезпечення працює там, де користувач має безліч утиліт Linux. Наскільки я знаю, захищене завантаження - це не варіант для R-Pi, який би перешкоджав майстерності користувачів у ОС.


1
Шифрування під час завантаження не настільки безпечне, як ви могли подумати. Вам просто потрібно отримати доступ / обійти звичайну завантажувальну систему, і це все м'ясо фаршу. Навіть Blurays не отримали цього права .. чорт!
Пьотр Кула

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

1
Так - але завжди потрібно вводити PIN-код - PIN-код НІКОЛИ не зберігається на картці.
Пьотр Кула

1

Якщо ви хочете зробити справжню комерційну заявку, то Pi, як він є у своїй формі кінцевого користувача, вам не корисний!

Вам доведеться сконструювати власну друковану плату, використовувати процесор, який знаходиться на Pi, наприклад, і вставити флеш-пам’ять на друковану плату.

  1. Напишіть вбудовану програму власності для BCM, яка генерувала єдиний журнал коду на основі якогось секретного алгоритму, який можна використовувати лише протягом наступних 10 секунд.
  2. Скомпілюйте власне ядро ​​з програмним забезпеченням власності та ввімкніть деякі функції Linux, які дозволяють монтувати корінь із зашифрованого файлу на спалах, який містить інший зашифрований розділ із вашим програмним забезпеченням. (Подвійний захист)
  3. Ваша прошивка BCM генерує найпотаємніший секретний ключ на автентичному режимі на основі деяких розумних алгоритмів чи відкритих ключів та передасть його на власне ядро ​​Linux, яке завантажить зашифрований кореневий розділ та зробить ще кілька криптографічних речей під час завантаження для завантаження зашифрованого програмного диска всередині зашифрованого зображення.

ПОРАДИ

  • Хороші ключі для аутентифікації не мають 8-16 символів. Важливо надати 256/512 байт довгих ключів аутентифікації за допомогою системних символів більше (HEX) та менше символів (ASCII)
  • Не використовуйте AES, TKIP, оскільки він легко зламається
  • На сьогоднішній день шифрування Whirlpool є одним із найскладніших для зламування за допомогою 256/512 клавіш
  • Навіть якщо хакер може вийняти флешку або скинути вміст. ваше програмне забезпечення шифрується двічі.
  • Якщо вони перехоплять ключ автентичності, вийти з прошивки буде дуже важко (адже BCM може запобігти скидам прошивки)
  • Деякі розумні флеш-пам’ятки також мають функцію запобігання повної пам’яті пам’яті.
  • Якщо ви розробляєте друковану плату, ви реалізуєте (на зразок Dell та Apple) мікросхеми безпеки, які надають усі ваші дані та ключі шифрування та запобігають спробам грубої сили. Деякі Dell мають саморуйнування для військового використання. Якщо ви ввели в BIOS пароль невірно, 2 рази він стирає накопичувачі розкиданими бомбами. Ви могли б реалізувати те саме, якщо виявите авторизовані ключові маніпуляції.

Кінець дня. Raspberry Pi призначений для навчальних цілей, щоб діти навчилися користуватися Linux та писати деякі програми.

Він не підходить для комерційного використання високого профілю. Вам потрібно зробити власний пристрій і придумати власні системи захисту. Тому що якщо ви тільки та ніхто інший не знаєте, як ви захищаєте інформацію про власність, то шанси когось зламати, використовуючи відомий подвиг або грубо .. .. 0,001%

АЛЬТЕРНАТИВИ

  • Напишіть своє програмне забезпечення, щоб воно могло бути скомпільоване та розгорнуте до цільової системи у двійковому форматі. Приклад EXE для Windows, що працює на .NET, JAR для Java або (Не впевнені в Linux, C ++?)
  • Пам’ятайте, що кращої безпеки ви хочете - тим більше грошей ви будете витрачати на це. Винятків немає.

1

Одним із рішень є використання MAC-адреси RaspberryPi, яка майже унікальна для даного Pi. Підтвердьте цю адресу всередині свого коду та надайте складену версію. Це ускладнить зворотну інженерію.

Для людей, які сліпо копіюють SD-карту на нову, вона не працює для них на іншому Pi. Це знищить велику більшість людей, які крадуть ваше програмне забезпечення. Інші, хто досить розумні, щоб зламати це, можуть бути досить розумні, щоб переробити програмне забезпечення, їх не багато, і я не думаю, що вони зашкодять вашим продажам.


0

Ви можете скористатися рішенням на основі скарбнички: Послідовний захист програмного забезпечення для Raspberry Pi


2
Виправте мене, якщо я помиляюся, але, здається, цей пристрій не додає захисту від зворотної інженерії. Проста перевірка з твердим кодом на серійному номері процесора зробила б те саме.
EDP

0

Чому б не додати спалах на основі SPI на плату оператора і не зберегти на ньому свій код? Я розглядаю цей варіант для власного продукту. У випадку, якщо SD пошкоджується, я хочу, щоб кінцевий користувач міг написати новий, який включає в себе користувальницьку програвач і код для встановлення спалаху SPI та запуску виконуваного файлу.

Інший варіант - збереження ключа шифрування у вашому RTC. Більшість чіпів RTC мають деяке сховище, і їх можна було запрограмувати за допомогою ключа, який дозволяє розблокувати та змонтувати виконуваний файл із SD або SPI спалаху.


-4

Я вважаю, що всі процесори, що використовуються в діапазоні Raspberry Pi, підтримують власне завантаження. Я вважаю, що для перезарядження 4,8,16,32 або 64K внутрішнього спалаху або EEPROM, яких у пі-пі немає, не потрібно 12 вольт. З них ви можете налаштувати Trustzone зі своїм кодом, щоб усі хороші речі не було видно. Я також розумію, що обидві форми статичної ОЗУ є стабільними лише для заданої кількості переписувачів. Першим моїм кроком було б мати запасний процесор і спробувати оновити цю безпечну завантажувальну пам’ять протягом декількох годин або днів. Врешті-решт всі біти стають виправленими, тому ніхто більше не може змінювати ваш код, і залежно від фактичного продукту, ви можете періодично просити двофакторну ідентифікацію (як банки), щоб продукт виплюнув код, а код повторної активації надсилався на адресу електронної пошти Якщо ви трохи модифікуєте пі, Я вважаю, що в ARM також є CPUID, так що це ряд рівнів безпеки, на які можна піти. Я маю на увазі, ви також можете запропонувати SMS на певний номер. Багато способів.


1
Привіт і ласкаво просимо. У цю посаду багато здогадок і вірити. Перш ніж рекомендувати людям застосовувати 12 V до Pi, було б дуже доцільно надати більш детальну відповідь та підкріпити її відповідними посиланнями.
Ghanima
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.