Шпаргалка з кібербезпеки для розробників

Мене звуть Микола Мозговий, я старший розробник і ментор в Sigma Software. Зараз займаюся розробкою хмарного бекенду для кліматичних систем.

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

Для таких випадків непогано мати нагадування чи шпаргалку, тому я склав список питань, яким потрібно приділити увагу. Цей список і не короткий, і не є вичерпним, але, принаймні, він є цілком зрозумілим і здійсненним. Повинен зізнатися: на поданий нижче матеріал мене надихнув один дуже хороший курс, який я проходив кілька років тому і який рекомендую всім, кого цікавить питання InfoSec/Cybersecurity. Це курс Software Security від Університету штату Меріленд, вільно доступний на Coursera.

Особливості безпеки

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

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

Властивості безпеки

Існує три основних властивості безпеки програмного забезпечення, відсутність яких ми прагнемо запобігти:

У той час як доступність інтуїтивно асоціюється з захистом від DoS-атак , вона ними не вичерпується. Є завдання не меншої важливості:

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

Уразливість (Vulnerability) — це пов'язаний з безпекою дефект програмного забезпечення, який можна використовувати для досягнення небажаного поведінки. Якщо вразливість викликана дефектом дизайну, а не коду, вона називається вадою , або проломом (Flaw).

Принципи безпеки

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

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

Віддавайте перевагу простоті (Favor simplicity — prevention).

Довіряйте з обережністю (Trust with reluctance — prevention & mitigation).

Захист в глибину (Defense in depth — prevention, mitigation & recovery).

Моніторинг та відстеження (Monitoring and traceability — prevention & recovery).

Звичайно, можна вивести більше число подібних принципів, але, як правило, достатньо буде слідувати вже певним.

Безпечний процес розробки

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

Вимоги:

  1. Визначте вимоги до безпеки (сценарії порушення, abuse cases). Сценарій порушення — протилежність сценарієм використання (функціонального вимоги, use case). Він чітко визначає, що система не повинна робити.
  2. Визначте необхідні властивості безпеки для компонентів системи (тобто конфіденційність, цілісність, доступність). Просто позначте, які частини збережених даних є конфіденційними. Визначте, які ролі присутні в системі і з даними вони повинні працювати. Опишіть вимоги до доступності.
  3. Визначте механізми безпеки для підтримки цих властивостей (аутентифікація, авторизація, аудит — три Au). Наявність механізмів цих трьох Au вважається золотим стандартом безпеки. Система не може бути безпечною, якщо в ній відсутній один з них.
  4. Моделюйте загрози. Це означає необхідність визначення шкідливого агента і можливих видів атак (наприклад, це може бути мережевий трафік, локальні файли чи навіть відображаються дані тощо).

Розробка:

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

Реалізація:

  1. Дотримуйтеся кращих практик написання коду.
  2. Проводите обов'язкові рев'ю коду.
  3. Застосовуйте інструменти автоматизації для забезпечення найвищої якості коду:

Тестування:

  1. Тестування на основі ризиків .Ці тести націлені на найбільш критичні частини системи, визначені за допомогою моделювання загроз.
  2. Випробування на проникнення . Фахівці з безпеки відіграють роль зловмисника, намагаючись подолати механізми безпеки.
  3. Фаззинг . Навмисне введення в систему випадкових і некоректних даних часто може допомогти виявити небажану поведінку.

Поширені вади проектування і реалізації

Дотримуючись безпечного процесу розробки, завжди пам'ятайте про помилки, які часто допускають розробники:

Саме це є джерелом горезвісних впроваджень SQL-коду , XSS-атак і віддаленого виконання коду .

OWASP і топ-10 вразливостей

Open Web Application Security Project (OWASP) — це некомерційна організація, орієнтована на підвищення безпеки програмного забезпечення. І ви можете знайти відмінне застосування її ресурсів. Ця організація надає корисні рекомендації та «шпаргалки» для популярних платформ розробки, таких як .NET і Java .

OWASP в першу чергу відома своїми списками «топ-десяток», що описують найбільш поширені уразливості в різних доменах:

Вкрай важливо добре знати поширені уразливості свого домену. Попереджений — значить, озброєний.

Висновки

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

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

Опубліковано: 11/10/19 @ 10:00
Розділ Безпека

Рекомендуємо:

LocaleBro — локалізація Android - і iOS-додатків без зайвої роботи
UX Guide: як уникнути юзабіліті-помилок в продукті
Зустрічі 1:1. Чому не працює такий простий і зрозумілий інструмент
Product engineering — спосіб підвищити свою цінність як інженера
Information Security дайджест #15: DC8044 Blackout, мега-витік в СБРФ, інтерв'ю Мухи