Як розробнику захистити пристрій на Linux від хакерських атак: практичні поради

Привіт! Мене звати Андрій, і я — Software Engineer у PLVision. Наша компанія займається розробкою програмних продуктів для комп’ютерних мереж і вбудованих систем. В основі більшості наших проєктів лежать опенсорс-технології, що дозволяє нам бути в курсі останніх трендів і працювати на рівні з експертами зі світових техгігантів, робити відкриті коміти під власним іменем та доповнювати наявні рішення.

Я працюю у напрямку Embedded-розробки вже близько 8 років, з яких 3,5 — на проєкті PLVision для відомої технологічної корпорації. Зараз належу до підкоманди, що займається Linux Security, та глибоко досліджую цей напрямок.

Тема інформаційної безпеки є гостро актуальною, адже кожен прилад з можливістю підключення до інтернету може стати зброєю в руках зловмисників. Щодня ми використовуємо безліч пристроїв на основі Linux, які стали важливою частиною нашого життя — системи смарт-будинку, IP-камери, системи infotainment в автомобілях, дрони, мережеві сховища, домашні та серверні роутери та багато іншого. Уявімо, що хакер отримує доступ до будь-якого із них — лише від такої думки зразу пришвидшується серцебиття.

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

Інформаційна безпека Linux-пристрою на різних етапах розробки

Уявімо, що у вас є стартап, пов’язаний з розробкою Linux-девайса. Це може бути роутер, IP-камера, дрон, мережеве сховище чи хаб розумного будинку. І перед розробкою кожного з цих пристроїв постає важливе питання — чи достатньо він захищений від потенційних хакерських атак? Пропоную розглянути типові рішення і засоби для цього. Водночас маємо розуміти, що не існує на 100% ідеального методу, але є достатньо хороші рішення, які використовують і у великих технологічних корпораціях, і в стартапах.

Підхід, коли команда розробників при плануванні девайсу за місяць до релізу вирішувала «додати security», давно втратив актуальність. Зараз це відбувається більш продумано.

Отже, на яких етапах розробки вам потрібно передбачати безпеку Linux-пристрою? Я виділяю наступні етапи: Deploy, Product Lifecycle та Access Control.

Deploy

Перед тим як безпосередньо перейти до Deploy, розкажу коротко про цифровий підпис як одну з основних фіч, що буде використовуватись на цьому етапі.

Припустимо, що вигадана компанія Homeinc надсилає оновлення на певний розумний пристрій. До файлу застосовується hash-функція, наприклад, SHA 1, і результатом обчислення цієї функції буде певне число. Це число ми зашифровуємо за допомогою приватного ключа. Результат шифрування власне і буде цифровим підписом.

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

Валідний цифровий підпис фактично говорить про дві речі:

  • власником цього файлу є компанія, а не зловмисник;
  • файл не був змінений по дорозі до нашого девайсу.

Цифровий підпис для файлів оновлення

Крім підписування і перевірки файлів оновлень чи патчів, цікавим кейсом є Secure Boot. Це безпечне завантаження Linux на девайсі. Спершу на всіх девайсах була система BIOS — Basic Input/Output System, і на заміну їй зараз приходить система UEFI — Unified Extender Firmware Interface. UEFI дозволяє зберігати публічні ключі для перевірки різного типу цифрових підписів.

UEFI Secure Boot для Linux-систем

Як це відбувається? У нас є UEFI-система, є завантажувачі (loaders) операційної системи, є базовий завантажувач shim, а також grub і власне ядро Linux . Бінарні файли завантажувачів мають бути в UEFI-форматі: вони повинні збілдитись відповідно до цього формату. Під час завантаження shim, grub і kernel система UEFI перевіряє цифровий підпис кожного з перелічених бінарників. Перевірка здійснюється за допомогою тих ключів, які зберігаються в UEFI-системі. Це називають активним захистом. Якщо раптом валідація цифрового підпису не проходить, девайс зупиняє завантаження, і його потрібно відновлювати з попереднього етапу.

Крім активного захисту Secure Boot існує також Trusted Boot, який використовує апаратний компонент — Trusted Platform Module (TPM). Відповідно, якщо він апаратний, його потрібно передбачити при проектуванні апаратної частини вашого девайсу, адже для нього необхідно буде виділити місце на платі.

Існують різні етапи завантаження операційної системи — hardware, firmware та інші, і в результаті виконання кожного етапу до TPM записується так званий хеш виконання всіх цих операцій.

Measured Boot з використанням модуля TPM

Результат виконання операцій у формі числа записується у Platform Configuration Register (PCR), і вже на наступних етапах можна буде побачити чи сума hash збігається з попереднім завантаженням, чи ні. Це покаже, чи були зміни на якомусь з попередніх етапів в порівнянні з попереднім завантаженням.

Американська National Security Agency рекомендує використовувати комбінацію UEFI Secure Boot та TPM разом, тобто активного та пасивного захисту.

Цікавим випадком є поєднання TPM і шифрування диску. Можливо зробити налаштування Linux-системи таким чином, щоб використовувати TPM та шифрування диску для блокування завантаження системи, якщо відбулись зміни в процесі UEFI Boot. Детальніше про це можна почитати тут.

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

  • UEFI Database. Коли Linux запущено, ми можемо витягнути ключі з UEFI Databasе, переформатувати їх у відкритий формат SSL і перевіряти цифрові підписи тих файлів, які будемо отримувати.
  • Linux Kernel. Під час білду ядра Linux у нього можна зашивати ключі, одним з параметрів build-root, і таким чином перевіряти файли в run-time. Це називається Linux Trusted Keys.
  • TPM. Можна використовувати TPM, якщо ви передбачили його на своїй платі.
  • І найгірший варіант  це власне WEB (upgrade server). Якщо є постійний доступ до інтернету, тоді ключі можна зберігати на upgrade-сервері на веб-сторінці. Багато компаній, які випускають дистрибутиви Linux, зберігають цифровий підпис на upgrade-серверах. В такому випадку потрібно докласти зусиль і придумати кастомну перевірку сертифікату, щоб впевнитись, що сервер той, який потрібно.

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

Product Lifecycle

Будь-яка Linux-система — це перш за все відкритий код. У контексті інформаційної безпеки тут є ряд переваг та недоліків. Якщо говорити про мінуси, то ключовим є те, що будь-яка вразливість, яка стає відомою у глобальному ком’юніті, може бути одразу використана щодо вашого девайсу. Доводиться постійно стежити за новинами свого напрямку та аналізувати, які вразливості можуть задіяти проти вашого пристрою, використовуючи CVE-сканери.

Важливо розуміти різницю між vulnerability та exposure, щоб відповідно застосовувати різні типи сканерів. Наприклад, якщо у вас є мережева програма, якій на вхід по мережі можна передати якусь послідовність байт, щоб вона перестала працювати — це і є vulnerability. Тут йдеться про вразливість, властивості якої можна знайти, наприклад, загугливши версію програми та дізнавшись про її слабкі місця на сервісі.

Щодо exposures ситуація трохи інша, зокрема, коли встановлюється програма і здійснюється автентифікація з новим користувачем і складним паролем, але по замовчуванню є admin-користувач зі своїм паролем. Типовою помилкою є залишити такого дефолтного користувача після встановлення програми. Exposures — це налаштування, які фактично не можна відсканувати лише за версією програми. Для того, щоб сканувати чи є така вразливість на системі, потрібно запускати сканер, який буде працювати на приладі, і матиме доступ до файлової системи.

Є декілька хороших безкоштовних СVE-сканерів:

  • snyk.io;
  • cve search;
  • nvd.nist.gov, де ви можете підписатись відповідно до свого ПЗ для отримання безкоштовної розсилки про вихід нових вразливостей.

Серед платних сканерів є blackduck, nessus і vdoo (тепер jfrog). Це достатньо дорогі інструменти, і часто в їхню підписку входить і підтримка, і додатковий аналіз CVE.

Оцінка серйозності (severity sсoring) вразливості після аналізу на передплаченому сервісі може відрізнятись від оцінки на загальноприйнятому ресурсі nvd.nist.gov. Маючи оцінку від ком’юніті і від сервісу, компанія самостійно вирішує як діяти зі знайденою вразливістю.

Власний код

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

Серед платних аналізаторів хорошими є coverity та sonarQube. Серед динамічних аналізаторів Valgrind — монополіст, за допомогою якого можна проаналізувати та зрозуміти невалідні доступи до пам’яті.

Також існує Fuzzing-тестування — таке собі «годування» певної функції вибірковими вхідними даними. Ця система тестує виходи за межі дозволеної пам’яті, відповідно, можна знаходити інші вразливості. До прикладу, з допомогою Fuzzer можна було за 15 секунд знайти вразливість heartbleed, яка була дуже критичною в OpenSSL.

Access Control

Часто користувачі Linux-девайсів мають можливість отримати конфігураційні файли та інші речі через scp, (s)ftp або telnet. У такому випадку не потрібно давати користувачеві можливість завантажувати критично важливі файли.

Якщо є можливість завантажити /var/log/messages, то можна спробувати /etc/shadow. А якщо буде можливість отримати цей файл, це буде досить хорошим приводом для продовження атаки.

Щодо snmp, рекомендую використовувати третю версію, бо принаймні там вся комунікація проходить зашифровано.

Багато Linux-девайсів мають замість звичайного bash так званий Cisco-like CLI (Command Line Interface) або Сustom CLI. Ідея в тому, що користувач може виконувати лише ті команди, які є передбачені CLI. Відповідно, треба щонайменше фільтрувати всі бажані та небажані символи в user input, а ще краще — використовувати fuzzing-тестування для цього CLI.

Наведу приклад типової помилки при додаванні команди в такий cli або web-інтерфейс: реалізація команди ping. При такій команді користувачу потрібно ввести ip чи hostname для того, щоб здійснити пінг. Типовий і найлегший підхід — це взяти вхідні дані від користувача, виконати bash-команду ping з введеною адресою. Це і буде коректний робочий підхід, допоки користувач не спробує поряд з адресою додати ще якусь команду.

Типова вразливість пристрою в CLI чи вебінтерфейсі

У такому випадку виконається і ping 8.8.8.8, і наступна команда cat /etc/shadow. Для того, щоб не виникало подібних випадків, потрібно завжди перевіряти вхідні дані від користувача.

Якщо говорити про політики паролів, то найперше — необхідно змушувати користувачів регулярно змінювати пароль і мати так званий brute force protection, тобто блокувати користувача на деякий час після неправильно введеного пароля впродовж кількох спроб. У жодному разі не можна давати можливість користувачу встановлювати прості паролі. З цими вимогами допоможуть pam rules: pluggable authentication modules.

Важливим є також використання систем контролю доступу: AppArmor, SELinux, grsecurity. З допомогою систем контролю доступу можна налаштувати політики так, щоб будь-яка програма мала доступ тільки до тих файлів, для яких це необхідно.

Інша корисна інформація

Наостанок поділюсь ще кількома порадами:

  • Варто завжди зберігати логи і дампи. Вони постфактум допомагають встановити послідовність дій, які виконав зловмисник, і проаналізувати ваші помилки.
  • Критично важливим є вимкнення дебаг-прапорців для релізів компіляції ядра та програм на С чи C++.
  • Не забувати застосовувати політику Cisco і вимикати порти та сервіси за замовчуванням до того моменту, коли вони будуть потрібні.
  • І основне  не довіряти тому, що вводить користувач. Тобто перевіряти вхідні символи, бо у площині інформаційної безпеки кожен користувач сприймається як потенційний зловмисник.

Підсумки

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

  • На етапі Deploy пристрою потрібно звернути увагу на процес безпечного оновлення прошивки, а також на процес завантаження Secure Boot. За можливості варто передбачити ТРМ при створенні апаратної частини.
  • Щодо етапу Product Lifecycle, то однією з ключових порад є постійне сканування опенсорс-частини на вразливості, а також регулярне здійснення статичного та динамічного аналізів пропрієтарного коду.
  • Для Access Control звертаю особливу увагу на політику паролів, в яких нам в основному допомагатимуть PAM-модулі та системи доступу типу SELinux або AppArmor.

Сomputer Networking — динамічний, цікавий напрямок, який лежить в основі Інтернету та багатьох похідних розробок, до яких ми всі звикли. Щодня до мережі підключається величезна кількість пристроїв, і прогнозують, що в 2025 їх буде в 10 разів більше, ніж людей на планеті. Це спонукає до побудови нових, інноваційних рішень, до пошуку нових підходів у роботі, в тому числі у напрямку інформаційної безпеки.

Сподіваюсь, що викладена мною інформація буде для вас корисною. Діліться у коментарях своїми історіями про роботу у напрямку Linux Device Security — що вдалося вирішити у цій площині та які виклики стоять перед вами.

👍ПодобаєтьсяСподобалось18
До обраногоВ обраному9
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Можу порекомендувати почитати про те, як взламували Nintendo Switch

Гарна стаття, мені сподобалась.

Можу тільки додати, що щоб розробники не витрачали час на створення свого власного рішення для SecureBoot / TrustBoot для кожного нового прототипу чи девайсу, вже існують готові рішення, які включають і готову Linux-платформу, SecureBoot/TrustBoot, і безпечні OTA-оновленням, і користувацькі програми в docker-контейнерах (теж із автоматизованим і безпечним оновленням), і багато іншого.

Спробувати готову PaaS-платформу FoundriesFactory і Linux microPlatform можна тут: foundries.io

Із переваг:
— повністю відкритий код (github.com/foundriesio).
— підтримка різних архитектур та десятків різних EVK та готових бордів(foundries.io/...​roducts/hardware-support).
— Strong Security із коробки.
— підтримка VPN на девайси із коробки.
— можливість offline-оновлень.
— є сертифікат PSA.
І ще багато-багато іншого.

CEO Foundries.IO Йен Дрю всього за 10 хвилин дуже класно розказав про те, які проблеми допомагає вирішити виробникам IoT та взагалі embedded пристроїв FoundriesFactory + LmP: www.youtube.com/watch?v=A1spNsMwwxY

Тепер залишилось головне — зробити, щоб всі ці поради дійсно робили в умовах, коли якийсь базовий софт зробив виробник головного цільового чіпа, до якого доклав свою частину розробник нашльопок (часто у вигляді blob), все це втиснуто у якийсь embedded дістрибутив, у якого половина компонентів своя, виробник проміжної ланки зробив свою адаптацію, потім виробник тої TM яка продає це допилив свої додатки, все це поспіхом і з участю кодерів, які ніць не чули про секьюріті і над якими оре ПМ про «делівері на вчора».

Вибачте, надто замріявся.

Машина корпорастів робить продукти з лайна і ціпків незалежно від того, Linux в основі, Windows чи щось інше. Будь-який unix тут допомагає тим, хто дійсно хоче підтримувати порядок. Але вузьке їх коло, страшенно далекі вони від народу.

Ах да, «опенсорс технології» в повний зріст... тільки ось зворотнього вкладу від 99.9% подібних контор не дочекаєшся.

Так буває.

А буває й по-іншому. Коли за основу береться свій дістрибутив Linux із всіма плюшками, накшталт SecureBoot, OTA-update, VPN, containers та іншими, а BSP виробників EVM/SoM/boards використовуються чисто для підтримки того чи іншого заліза в рамках цього дистрибутиву. Спробуй, якщо дійсно є задача мати захищеність для нових девасів, що в розробці, то є готовий спосіб полегшити цю задачу: foundries.io/freetrial

Та й звортній вклад кожен робить по-різному. Можна пройтись по проектах U-boot, Linux kernel, OP-TEE, Yocto, FreeScale, Actualizr, тощо — там сотні комітів від Foundries.IO. Коли весь код системи — відкритий, це робити легко: github.com/foundriesio

Коли за основу береться свій дістрибутив Linux із всіма плюшками, накшталт SecureBoot, OTA-update, VPN, containers та іншими
Та й звортній вклад кожен робить по-різному. Можна пройтись по проектах U-boot, Linux kernel, OP-TEE, Yocto, FreeScale, Actualizr, тощо — там сотні комітів

Я мав справу з такими розробками і в варіанті, наприклад, Debian-based поверх кубера, і в Yocto.

Проти дурня, який в черговому сервері просто не перевірить параметр, проігнорує помилку, не заквотить все що треба — ніщо не допомагає, крім комбінації якісного тестування і верифікації з реальним кнутом за дурість.

Ось наприклад (по памʼяті)

int main(int argc, chat **argv) {
  ... відокремили власні опції, модіфікували argc...
  char cmd[200] = {"foo"};
  for (int i = 0; i < argc; ++i) {
    strncat(cmd, sizeof cmd, " \"");
    strncat(cmd, sizeof cmd, argv[i]);
    strncat(cmd, sizeof cmd, "\"");
  }
  system(cmd);
}

про execv() ця тварюка, що щойно злізла з дерева, не чула. Про те, що в параметрах можуть бути свої " - теж. Про довжину рядку — тощо. Тут іще декілька помилок, набридло копати.

І ось щось таке в різних варіаціях на кожному кроці. Що потім говорити про якість і безпечність такої системи?

Співчуваю, але якшо це Ваш колега то краще не називати нікого тварюкою а пояснити як буде краще.
— Згідний що якісне тестування має допомогти. Юніт тестування чи функціональне не зажди зможе покрити корнер кейси.
Ідеальний варіант фазінг.
Якщо виключити фазінг всього як overhead, думаю, розробник коду має передбачити корнер кейси.
Щодо кнута: то найкращий кнут для програмістів — це Дональд Кнут «Мистецтво програмування». Тут 2 в 1 і як покарання і на перспективу згодиться.
— Якщо це простий wrapper на северній частині з інтсальованим python, можливо простіше зробити цей врапер на python. Можна ще заморочитись з read/write permission якщо це потрібно.
— По strncat(cmd, sizeof cmd, " \«"); там дійсно не дуже і з sizeof i з порядком параметрів. Таке враження, що це код з задачки на співбесіду з розділу «знайди 10 помилок».

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

Ага, ага. Так він мене і послухав — він в іншій организації і написав це декілька років тому, і цікавили його тільки гроші. Пробачте, але в якому замку з кістки слона ви живете?

Щодо кнута: то найкращий кнут для програмістів — це Дональд Кнут «Мистецтво програмування». Тут 2 в 1 і як покарання і на перспективу згодиться.

Гру слов я оцінив. По суті ж я порада абсолютно не в тему, бо в цій области «мистецтво програмування» не знає жодного спеціального алгоритму, проте повʼязане перш за все з розумінням, що система робить і як це правильно і своєчасно викликати.

Таке враження, що це код з задачки на співбесіду з розділу «знайди 10 помилок».

Порядок параметрів я переплутав коли писав сюди, а решта — да, тут можна дійсно цей код прямо відправляти на співбесіду.

Дякую за статтю, не мій профіль, але радий що почали з`являтись технічні статті

але радий що почали з`являтись технічні статті

Технічні статті не «почали зʼявлятись», вони ще зʼявляються, хоча все менше і менше. DOU робить все, щоб зробити сайт непридатним для них.

Прикро, що у вас таке враження, адже ми цілий окремий розділ маємо dou.ua/forums/tags/tech де Техстатті і дайджести, старатимемось ще!

адже ми цілий окремий розділ маємо

Це не допоможе. Бо спочатку контент і робота з ним, а потім — як його вже групувати.

Прикро, що у вас таке враження

У мене таке враження з того, що:

1. Технічні статті вимагають серйозного обговорення. Це значить, у першу чергу, що жоден коментар не має бути загубленим просто тому, що, наприклад, сторінка у браузері була закрита чи перезавантажена.
Для цього треба:
1) Можливости продивитись коментарі за часом додавання, а не за ієрархією. Зауважте, це простіше, ніж всі ті ієрархічні красивости, що зараз.
2) Можливости у ієрархічному показі (а ще краще — і у пласкому) переходити не тільки до батьківського коментаря (як зараз), але й до нащадків. В ідеалі — дивитись звʼязки між ними у вигляді явних ліній (можна розфарбувати;))
3) Якщо є засоби переглядання останніх коментарів (нещодавно доданих) — вони мають бути такими, що дозволяють повернення до тих, які вже дивились, без втрати чогось в інтерфейсу. Зараз це зламано з самого початку. І те ж саме в момент додавання свого коментаря — показ нечитаних втрачається, хоча вони додаються.
4) Можливість зберігати (відсилати на email) окремий коментар чи гілку обговорення, навіть значно пізніше їх написання.

2. В коментарях має бути дозволено більше, ніж плаский текст з мінімумом форматування. І я не про емодзі — вони як раз мінімально важливі — а, щонайменше, картинки/світлини (можна з примусовим масштабуванням) і згорнуті частини. Поточне дозволене форматування це менше половини від потрібного.

Ну і стиль форматування, який вимагається від дописувачів — bbcode таки краще, ніж html.

3. Принципово зменшити вартість окремого топіку. Можна це зробити, наприклад, більш розвиненою структурою підфорумів, але у принципі такі топіки, як «топік для технічних запитань», не мають права існувати — це мають бути підфоруми з явно показаними темами. Я б на місці ваших вебмастерів за такі «рішення» згорів з сорому.

4. Підписка на email на появу нових топіків у вибраних форумах.

5. Наявність паралельної і нормально читовної plaintext версії оповіщень на email.

6. Додати оцінки топікам і розширити набір оцінок. Dislike критично важливий для технічних тем (можна дозволити тільки в них), ще бажано щонайменше «:)», «???» і «shrug». Можна рахувати кількості без розпису по іменам.

7. «Last but not least»: чітка політика авторських прав на контент, що він належить авторам (топіків/коментарів...), а сайту/редакції — нескасовне право показувати на сайті в своїх інтересах... чи як там воно звучатиме.

Це тільки те що згадалось з ходу, але близько до найбільш важливого. Ще я писав схоже тут і не тільки.

Найкращий приклад сайту для технічних дискусій, що я знаю — RSDN. (Так, на ньому скажені рашисти, але технічно він таки кращий з того, що я бачив.) Непогані — Хабр (хоча його скоро зламають в угоду мобільщикам), iXBT форум і LOR. Зауважте, що, наприклад, форум iXBT має шалений трафік незважаючи на стиль перших форумів або phpBB (і який не мінявся років 20).

старатимемось ще!

Щоб дійсно старатись для цього, є простий метод: кожного дня зустрічаєте Волошина і даєте йому прочухана по потилиці.
Інакше все марно, я не бачу шляху досягти хоч якогось зсунення з місця. Ті речі, що я тут сказав, я кажу вже років 10. І весь цей час ситуація з читабельністю DOU і придатністю до серйозних обговорень тільки погіршувалась.

А якщо юзер захоче перешити девайс на кастомну прошивку? Наприклад DD-WRT для роутерів чи tasmota для sonoff

Якщо це 1 юзер для домашнього використання то в загальному можна зробити наступні кроки:
1. Погуглити типові налаштування безпеки для прошивки.
user restrictions, iptables, sshd конфігурації, може хтось хоче відразу на роутері vpn налаштувати або наприклад зреалізувати функцію батьківського контролю на домашньому роутері (інструкцію і обговорення можна знайти тут nonamepodcast.org/...​rgarten-parental-control)
2. По вразливостях варто підписатись на новини CVE feed по продукту (наприклад DD-WRT), можна ще окремо підписатись на feed про критичні вузли типу ssh server, vpn, web сервер)
Наскільки памятаю підписатись можна на сайті www.cvedetails.com
3. Ще як варіант можна прогнати скрипт на машині для провірки типових помилок при privilege escalation, якщо є обмеження між admin i root користувачами: pentestmonkey.net/blog/linux-64-privesc

Щодо білду власної пропріетарної версії прошивки з коду, думаю не варто з цим заморочуватись бо профіт не співрозмірний з затраченим часом.

Якийсь метод для встановлення кастомних прошивок є майже завжди, але зазвичай потребує фізичного доступу на тому рівні, на якому вже можна зробити з пристроєм що завгодно. Наприклад, відкрити корпус і перезавантажити з замиканням двох контактів.
Іноді це складніше бо якісь компоненти просто відсутні або замінені у фінальних виробах (див. як ломали Starlink). Але у такому випадку значно дорожчає тестування.
Мабуть, найсучасніший спосіб — різні ключі для бойових і тестових (розробницьких) прошивок з обмеженням останніх у часі.

Якщо у девайса немає JTAG або він вже вимкнений через OTP, і девайс «закритий», тобто ROM обов’язкого потребує правильного підпису бутлоадера, то тут вже в багатьох випадках свою прошивку не втикнеш навіть із фізичним доступом до девайса. Звісно, можна заморочитись, як хлопчик заморочувався із старлінком, але чи варто витрачати на це півроку... :)
Можна ще надибати у виробника секретний ключ для підпису бутлоадера ;-)

Підписатись на коментарі