Кібербезпека
Кібербезпека оборонних систем починається з іншої моделі загроз, ніж решта софту: звичайна безпека застосунків припускає випадкового зловмисника по той бік мережевої межі й патч, який можна викотити у вівторок. Жодне з цих припущень тут не виживає: супротивник фінансований і терплячий, межа зрештою падає повністю, бо залізо опиняється в чужих руках, а виправлення може не дійти до пристрою місяцями. Ця сторінка — про те, що робить у відповідь той, хто будує: припущення про захоплення, ланцюг постачання, керування ключами й шлях оновлення, який сам є найпривабливішою вашою мішенню.
- Припущення проєкту
- Пристрій утрачено
- Модель загроз —
- Пишеться першою
- Ваша найкраща мішень
- Шлях оновлення
Модель загроз пишуть першою, і вона обмежує фічі
У більшості софту модель загроз є артефактом рев’ю: дизайн існує, хтось його проходить, зʼявляється список знахідок, і кілька з них виправляють перед релізом. Такий порядок працює, коли знахідки малі й придатні до випуску. Він повністю провалюється, коли знахідка означає, що архітектура хибна, — бо на той момент саме на архітектурі всі й стоять. Тут модель пишуть до дизайну, і її результатом є набір обмежень, яким дизайн має відповідати.
Придатна модель відповідає письмово на чотири питання, і четверте зазвичай пропускають. Що ми захищаємо — не «систему», а конкретні активи: цей ключовий матеріал, цю історію переміщень, цю ідентичність оператора, цю здатність віддавати команди. Хто намагається, з якими ресурсами й з яким терпінням. Що кожен із них здобуває, якщо вдасться. І, критично, від чого ми НЕ захищаємося — сказано явно, бо модель, що заявляє захист від усього, не ухвалила жодного рішення й буде тихо покинута першого ж разу, коли стане незручною.
Припускайте, що пристрій опиниться в чужих руках
Саме це припущення відрізняє домен, і його варто формулювати як очікування, а не як катастрофу. Розгорнутий пристрій лишається без нагляду, іноді надовго, у місці, яке ви не контролюєте. Якась їх частка не повернеться, а частина з тих буде досліджена кимось, у кого є час, інструменти й мотивація. Проєктувати під це — не песимізм, а різниця між утратою пристрою й утратою парку.
Третя гарантія на схемі вирішує розмір утрати, і це рішення архітектурне, а не криптографічне. Якщо кожен пристрій тримає той самий спільний секрет або облікові дані, що автентифікують його як загального учасника мережі, то один пристрій, досліджений без поспіху, дає доступ до всього. Якщо ж кожен пристрій має власну ідентичність, обмежену тим, що саме йому дозволено, а парк може її відкликати, та сама подія коштує вам одного пристрою. Криптографія в обох випадках стандартна; різниця цілком у тому, що дозволено відкривати обліковому запису.
Що тримається після втрати
- Індивідуальна ідентичність пристрою, відкликана з парку без дотику до інших.
- Ключі в апаратному модулі, що не віддає їх назовні, і стирання при розкритті корпусу.
- Дані зашифровані у спокої, на пристрої лише робочий набір, історія вже вивантажена.
- Перевірений ланцюг завантаження: заміна прошивки дає пристрій, що відмовляється запускатися.
Що перетворює одну втрату на всі
- Спільний секрет або обліковий запис на весь парк: один пристрій автентифікується як будь-який.
- Ключі у файлі на файловій системі — це операція копіювання, а не атака.
- Повна локальна історія всього, де пристрій був і що бачив.
- Порт налагодження чи сервісний акаунт, лишений увімкненим, бо був зручним на розробці.
Ланцюг постачання і шлях оновлення як мішень
Фінансований супротивник шукає найдешевший вхід, і найдешевшим входом рідко є сам продукт. Це залежність, яку ніхто не переглядає; машина збірки, яку ніхто не зміцнював; або механізм, який ви побудували саме для того, щоб доставляти код на всі пристрої одразу. Останнє варто прочитати прямо: шлях оновлення є найпривабливішою вашою мішенню, бо це єдиний компонент із владою над усім парком.
- Знайте, що у збірці. Інвентар залежностей, згенерований автоматично під час збірки, — щоб питання «чи нас це зачіпає» мало відповідь за хвилини, а не за тиждень grep.
- Зробіть збірку відтворюваною, щоб артефакт можна було перезібрати з коду й порівняти. Без цього «бінарник відповідає коду» є вірою, а не перевіркою.
- Ставтеся до системи збірки як до продакшну. Вона тримає ключі підпису й виробляє те, чому всі довіряють; агент збірки, куди будь-хто може подати задачу, є сервісом підпису, яким будь-хто може скористатися.
- Підписуйте артефакт і перевіряйте на пристрої, причому перевірка має бути в ланцюзі завантаження, а не в застосунку, який замінюють.
- Викочуйте поетапно з автоматичним відкатом: погане оновлення, що дійшло до всіх пристроїв одночасно, за наслідками не відрізняється від успішної атаки.
- Змусьте пристрій відмовляти в пониженні версії — інакше супротивник просто попросить його встановити торішню збірку з уже виправленою вразливістю.
Що це змінює у звичайній розробці
Ніщо з вищесказаного не потребує екзотичних технік. Воно потребує кількох рішень, ухвалених рано, бо кожне дедалі дорожче вбудовувати згодом, — і кількох практик, які звичайні команди вважають необовʼязковими.
Ідентичність на пристрій, з першого дня
Видається під час виробництва, відкликається, обмежена в правах. Додати це потім означає торкнутися кожного вже випущеного пристрою, — тому потім це майже ніколи не додають.
Логи, що переживають пристрій
Події, важливі для безпеки, вивантажуються за наявності звʼязку й дописуються локально у формі, яку не відредагує тихо той, у чиїх руках пристрій опиниться потім.
Криптографія, яку можна замінити
Алгоритми за інтерфейсом і узгоджувані, а не зашиті: двадцятирічний життєвий цикл переживає припущення, за яких обирали конкретний алгоритм.
Спосіб отримати погану новину
Опублікований контакт і політика для повідомлень ззовні. Дослідники щось знаходять; питання лише в тому, чи можуть вони сказати вам, чи мусять сказати комусь іншому.
Антипатерни, які варто назвати
- Спільний секрет на весь парк: одна втрата пристрою перетворюється на доступ до всього.
- Ключ підпису на ноутбуці чи у змінній CI: скомпрометувати розробника означає скомпрометувати кожен пристрій.
- Шлях оновлення без поетапного викочування, де поганий реліз має той самий обсяг, що й успішна атака.
- Інтерфейс налагодження, лишений увімкненим, бо був зручним на розробці, — саме його шукають першим.
- Модель загроз, що захищає від усього, нічого не називає прийнятим і тому покидається на першому ж дедлайні.
Коли це застосовувати
Застосовуйте, коли
- До того, як архітектура усталилася: знахідка моделі загроз на цьому етапі є переписуванням, а не виправленням.
- Для будь-якого пристрою, що лишиться без нагляду там, де ви не контролюєте, — це і є припущення про захоплення.
- Коли проєктуєте шлях збірки й оновлення — компонент із владою над усім парком.
- Для довгоживучих систем, де замінна криптографія та інвентар залежностей окупаються кількаразово.
Уникайте, коли
- Як заміну моделі загроз, специфічній для вашої системи: жодна сторінка її не дасть.
- Як привід захищатися від усього: виходить документ, яким ніхто не користується, і жодних рішень.
- Як настанову з операційної безпеки: ця сторінка про рішення того, хто будує, а не про те, як систему експлуатують.
- Там, де пристрій ніколи не виходить із фізичного контролю, а парк достатньо малий, щоб оновити його за день.
Було корисно?
Поділіться з тим, хто працює над тією ж задачею.