Чи можна витягти програми, завантажені на плату NodeMCU?


13

Я використовую плату NodeMCU з можливостями WiFi, щоб створити простий трекер активів. Мені вдалося знайти декілька ескізів Arduino, які дозволяють підключитись до Azure IoT Hub та розмістити повідомлення.

Одним з ключів, який мені потрібно "завантажити" на плату, є рядок підключення пристрою Azure і, звичайно, WiFi SSID та пароль.

Я боюся, що хтось може просто взяти дошку та "завантажити" файли, щоб отримати доступ до облікових даних безпеки.

Чи є мій страх необґрунтованим чи втрата облікових даних є реальною загрозою, яку мені потрібно пом'якшити?


3
Я думаю, що відповіді від @Mike Ounsworth та Bence Kaulics разом узяли мені гідний варіант. На жаль, я не можу позначити обидві як прийняті відповіді.
баранів

Відповіді:


12

[відмова від відповідальності: я професіонал із безпеки / криптовалюти і щодня займаюся такими питаннями архітектури безпеки.]

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

Якщо ваш пристрій IoT має вбудований на материнську плату апаратний сховище ключів, як-от деякі TPM, або еквівалентно Keystore, підтримуваному апаратним забезпеченням Android або Apple Secure Enclave, ви можете використовувати це.

З традиційними серверами ви можете використовувати HSM або Smart Cards, але єдине повне програмне рішення, про яке я знаю, - це отримати ключ AES з якогось "апаратного відбитка пальця", побудованого за допомогою комбінування серійних номерів усіх апаратних пристроїв. Потім використовуйте цей ключ AES для шифрування облікових даних. Процес, що працює на тому ж сервері, може реконструювати ключ AES та розшифрувати облікові дані, але як тільки ви витягнете файл із сервера, він, по суті, не розшифрується.

IoT кидає ключ у це з двох причин:

  1. Припущення, що серійні номери обладнання унікальні, ймовірно, не відповідає, і

  2. На відміну від серверів, зловмисники мають фізичний доступ до пристрою, тому, ймовірно, можуть отримати оболонку на пристрої для запуску програми дешифрування.

Як апаратне шифрування (TPM), так і «апаратне відбитків» шифрування є в кращому випадку обтурацією, оскільки, в принципі, якщо локальний процес може розшифрувати дані, то зловмисник, здатний запустити цей локальний процес, також може його розшифрувати.


Таким чином, стандартний трюк виглядає так, що він тут не працює. Перше питання, яке вам потрібно буде задати собі:

  • Яка моя модель загроз / де цей проект сидить на Secure <--> Convenientшкалі?

Зрештою, я думаю, що вам або потрібно вирішити це security > convenienceі потрібно ввести людину облікові дані після кожного завантаження (використовуючи щось на кшталт відповіді @ BenceKaulics ), або ви вирішите це security < convenienceі просто поставте облікові дані на пристрій, можливо, використовуючи якусь обдумування, якщо ви відчуваю, що має значення.


Це складна проблема, що ускладнюється характером пристроїв IoT.

Для повноти, повномасштабним промисловим рішенням цієї проблеми є:

  • Надайте кожному пристрою IoT унікальний відкритий ключ RSA під час виготовлення. Запишіть цей відкритий ключ у db проти серійного номера пристрою.
  • Зберігайте чутливі облікові дані на належному сервері, назвемо це "шлюзом".
  • Коли пристрій IoT аутентифікується на шлюз (використовуючи його ключ RSA), шлюз відкриває для нього сеанс за допомогою збережених облікових даних і передає маркер сеансу назад на пристрій.
  • Для кращої безпеки шлюз - це фізичний (або VPN) шлюз, так що весь трафік від пристрою IoT проходить через шлюз, і ви маєте більше контролю над правилами брандмауера та іншим способом - в ідеалі не дозволяйте пристрою мати пряму (тунель без VPN) доступ до Інтернету.

Таким чином, зловмисник, який компрометує пристрій, може відкрити сеанс, але ніколи не має прямого доступу до облікових даних.


2
Так. Велика частина проблеми полягає в тому, що те, що тут намагаються захистити, - це загальний секрет, який є паролем Wi-Fi. Загальні секрети - це погана ідея, коли пристрій можна фізично розрізати. Кращий дизайн буде відокремлювати кожен екземпляр пристрою (чи іншого комп’ютера) у власному середовищі безпеки з унікально захищеним каналом між кожним окремим гаджетом та системами, з якими вони потребують спілкування. З цього приводу, Wi-Fi може не дуже добре підходити для програми в будь-якому випадку проти якоїсь схеми 2,4 ГГц "точка-точка" або навіть протоколу "Esp Now".
Кріс Страттон

1
Гарна думка. Ви можете вирішити спільну секретну проблему, використовуючи сертифікати клієнта WPA2, а не пароль SSID (якщо пристрій IoT достатньо великий, щоб мати стек TLS, багато з них не є). Я нічого не знаю про Azure IoT Hub, але я припускаю, що рядки підключення пристрою Azure вже є унікальними на пристрій. На жаль, це здається досить чистим чорно-білим між "Зроби сам без безпеки" та "Захист в промисловому масштабі" з не дуже великими між ними.
Майк Оунсворт

2
Мені цікаво, якщо я можу відкрити сесію за бажанням, навіщо мені потрібні облікові дані?
Андрій Савіних

1
@AndrewSavinykh Залежить від того, що таке облікові дані. Можливо, все, що вони роблять, - це відкриття сесії, і в цьому випадку так, не так багато причин. Але, можливо, вони є обліковими записами AD домену Windows або надають доступ до додаткових API, які зазвичай не використовуються / доступні з пристрою IoT. Можливо, у вас все гаразд із сеансами, що надходять із компрометованих пристроїв, але не гаразд із сеансами, що надходять із ноутбуків нападників. Так, це дуже швидко отримує конкретні випадки використання.
Майк Оунсворт

3
Серійні номери ??? Знайти унікальний серійний номер не повинно бути проблемою, але серійні номери не є секретом. Вони марні для формування ключа. Де на землі використовують серійні номери для формування ключа «стандартний трюк»?
Жил "ТАК - перестань бути злим"

6

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

Що вам потрібно - це ESP WiFi Manager - це те, що вам тут потрібно.

З цією бібліотекою ESP, який не має збереженого сеансу, перейде в режим AP і розмістить веб-портал. Якщо ви підключитесь до цієї AP за допомогою ПК або смартфона, тоді ви зможете налаштувати облікові дані Wi-Fi через веб-сторінку.

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

Як це працює

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

  • якщо це не вдалося (або попередня мережа не збережена), він переходить ESP у режим точки доступу та створює DNS та WebServer (за замовчуванням ip 192.168.4.1)

  • за допомогою будь-якого пристрою з підтримкою Wi-Fi з веб-переглядачем (комп'ютер, телефон, планшет) підключіться до новоствореної точки доступу

  • через Портал захоплених та DNS-сервер ви отримаєте спливаюче вікно типу "Приєднатися до мережі" або отримаєте будь-який домен, до якого ви намагаєтесь отримати доступ, переспрямований на портал налаштування

  • виберіть одну зі сканованих точок доступу, введіть пароль та натисніть кнопку «Зберегти»

  • ESP спробує підключитися. У разі успіху він відмовляється від керування вашим додатком. Якщо ні, знову підключіться до AP та переконфігуруйте.

(Документація ESP WiFi Manager)


1
Або просто завантажте записи чи будь-що інше, поки він знаходиться в режимі AP. Сподіваємось, плакат не намагається використовувати сам wifi для відстеження активів.
Кріс Страттон

1
@ChrisStratton :-) Насправді я намагаюся використовувати WiFi для відстеження активів. На щастя, мережа WiFI, яку я використовую, є публічною та відкритою, але я переживаю за наслідки, коли мені потрібно використовувати інший, який потребує пароля. Крім того, на пристрої є рядок підключення AzureIoT Hub.
баранів

2
@rams Безумовно, читання EEPROM пристрою не було б великим завданням.
Бенс Каулікс

3
@rams На апараті, так, EPROM можна прочитати. Нові пристрої можуть мати захищені спалахи, які краще захищені. Безумовно, це відома проблема, яка потребує підтримки на мікросхемі, щоб спробувати виконати її належним чином.
Шон Хуліхане

2
@SeanHoulihane - ESP8266 не має EEPROM. Спалах SPI, який він використовує для всього (включаючи певну емуляцію функціональності Arduino), є зовнішнім для ESP8266. Навіть у модулі з декількома чіпами це чітка штамповка, яку можна перевірити у гідній лабораторії.
Кріс Страттон

3

Так, вони можуть отримати доступ до вашого пароля, якщо ви залишите його як звичайний текст.

Хорошим моментом є те, що багато інтерфейсів підключення до wifi приймають хешовані паролі. Незважаючи на те, що я використав прийняті хеди md5 і md5 не надто безпечний, це все ще дуже складний виклик для середнього Джо. Залежно від вашого конфігураційного файлу, ви або вказуєте ім'я свого алгоритму хешування, а потім пишете свій пароль або використовуєте типовий інтерфейс, який використовує ваш wifi.


3
Якщо вони можуть витягти хешований пароль, який працює під час хешування, що заважає їм використовувати його, не змінюючи його ніколи?
Кріс Страттон

1
@ChrisStratton ви праві. Способи, як це запобігти, є інформаційною безпекою SE, це питання задає запобігання втраті облікових даних. Тим не менш хешовані паролі мобільні телефони все ще не можуть використовуватись для підключення до мережі без додаткового програмного забезпечення.
atakanyenel

1
Так, насправді це забезпечить певний захист у випадку повторного використання пароля wifi в якійсь іншій системі, але не дуже проти несанкціонованого підключення до цієї точки доступу до Wi-Fi.
Кріс Страттон

1
@ChrisStratton Так, наприклад, білий список MAC набагато безпечніший, ніж просто мати пароль та хешировать його, але ці кроки стосуються безпеки Wi-Fi в цілому, а не для конфіденційності облікових даних на публічних пристроях.
atakanyenel

2
Ні, білі списки MAC - це жарт - таємниці там взагалі немає. І звичайно MAC легко витягується з вкраденого ESP8266 або його спалаху SPI. Про єдине місце, яке дозволить допомогти білим спискам MAC, - це проти людей, які використовують графічний інтерфейс для приєднання до Wi-Fi мереж, або якщо точка доступу сиділа там, чекаючи на з'єднання від клієнта, який може з’явитися якийсь день, але ніколи не підключався до нього, тобто , меч в матеріалі типу каменю.
Кріс Страттон

1

Проста відповідь - ТАК. Це можна зробити. Вам потрібно, принаймні, виконати якусь обтурацію, щоб забезпечити мінімальний захист.


1
Помутніння ускладнює з'ясування способів роботи пристрою, але захищати його від клонування пристрою марно . Захищати від вилучення облікових даних марно: все, що вам потрібно зробити, це запустити прошивку в емуляторі.
Жил "ТАК - перестань бути злим"

Повністю згоден. Моя мотивація, даючи таку відповідь, полягала в тому, що <безпека мережі IoT повинна враховуватися>. @Mike Ounsworth дав детальну відповідь, пропонуючи рішення з використанням AES та / або інфраструктури RSA. Я розглядаю ще одну відповідь, але не впевнений, як зануритися в криптовалюту (я також багато років працюю в платіжних та банківських рішеннях). Думаю, що ми повинні надавати практичні / збалансовані поради, оскільки зазвичай люди уникатимуть заглиблюватися в криптографію для захисту пристроїв IoT у своєму дворі.
Аміт Вуйчич

1
Якщо люди хочуть створити незахищені пристрої, тому що їм не вдається подумати, як зробити безпечні пристрої, я не бачу причин, щоб їх включити.
Жил "ТАК - перестань бути злим"

Мій досвід полягає в тому, що люди хочуть вчитися, але знову ж таки, повинен бути баланс між рівнем безпеки та складністю. У платіжній індустрії є відома історія щодо SET ( en.wikipedia.org/wiki/Secure_Electronic_Transaction ), яка є / була дуже безпечною, але складною для реалізації та через те не вдалася на практиці.
Аміт Вуйчич

2
Заплутаність додає складності без поліпшення безпеки. Це не баланс.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.