Тестування безпеки

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

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

Типи тестування безпеки

Існує сім основних типів тестування безпеки (OSSTMM – Open Source Security Testing methodology manual):

  • Сканування вразливостей (Vulnerability Scanning): виконується за допомогою автоматизованого програмного забезпечення для сканування системи на відомі сигнатури вразливостей.
  • Сканування безпеки (Security scanning): передбачає виявлення слабких місць мережі та системи, а потім пропонує рішення для зменшення цих ризиків. Це сканування можна виконувати як вручну так і за допомогою інструментів.
  • Тестування проникнення (Penetration testing): цей вид тестування імітує атаку хакера, передбачає аналіз конкретної системи для виявлення потенційної вразливості.
  • Оцінка ризиків (Risk Assessment): тестування передбачає аналіз ризиків безпеки, які є в організації. Ризики класифікуються як низькі, середні та високі. Це тестування рекомендує засоби контролю та заходи для зменшення ризику.
  • Аудит безпеки (Security Auditing): це внутрішня перевірка додатків і операційних систем на наявність недоліків у безпеці.
  • Етичне хакерство (Ethical hacking): злам систем програмного забезпечення організації. На відміну від хакерів (black hat), які крадуть заради власної вигоди, метою є виявлення недоліків безпеки в системі за згодою з власником цієї системи.
  • Оцінка стану (Posture Assessment): поєднує сканування безпеки, етичне хакерство та оцінку ризиків, щоб показати загальний стан безпеки організації.

Тестування безпеки в контексті SDLC

Керуємося принципом раннього тестування.

Фази SDLCПроцеси безпеки
ВимогиАналіз безпеки для вимог і перевірка випадків зловживань/зловживання
ДизайнАналіз ризиків безпеки для проєктування. Розробка плану тестування, включаючи тести безпеки
Кодування та модульне тестуванняСтатичне та динамічне тестування та тетсування білої скриньки безпеки
Інтеграційне тестуванняТестування чорної скриньки безпеки
Тестування системиСканування вразливостей та тестування чорного скриньки безпеки
РеалізаціяТестування проникнення, сканування вразливостей
ПідтримкаАналіз впливу патчів

Ролі тестування безпеки

Хакери  (Hackers) – доступ до комп’ютерної системи або мережі без авторизації.

Зломщики (Crackers) – проникають у системи, щоб викрасти або знищити дані.

Етичний хакер (Ethical hacker) – виконує більшість дій зі злому, але з дозволу власника.

Script Kiddies або packet monkeys – недосвідчені хакери зі знанням мови програмування.

Інструменти тестування безпеки

OWASP – Open Web Application Security Project

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

Популярні інструменти:

  • OWASP Web Testing Environment Project – проєкт середовища веб-тестування OWASP (колекція засобів безпеки та документації).
  • OWASP Dependency Check – перевірка залежностей OWASP (вона шукає залежності проєкту та перевіряє на відомі вразливості)
  • Zed Attack Proxy – інтегрований інструмент тестування на проникнення.

Wireshark

Wireshark — це інструмент аналізу мережі. Він перехоплює пакети в режимі реального часу та відображає їх у форматі, зрозумілому людині. По суті, це аналізатор мережевих пакетів, який надає детальні відомості про ваші мережеві протоколи, розшифровку, інформацію про пакети тощо. Це open source інструмент і може використовуватися в Linux, Windows, OS X, Solaris, NetBSD, FreeBSD і багатьох інших інші системи.

w3af

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

Intruder

Intruder — це потужний автоматизований інструмент тестування на проникнення, який виявляє слабкі місця безпеки у вашому ІТ-середовищі. Пропонує постійний моніторинг і просту у використанні платформу:

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

Є платним, для малого бізнесу з одним додатком для тестування і десятком цілей в середньому коштує 200 доларів на місяць, а для великого бізнесу ціна може бути – 5-6 тисяч доларів на місяць.

Acunetix

Acunetix — інтуїтивно зрозумілий і простий у використанні інструмент. Пропонує: розширений сканер для найскладніших веб-додатків, у.т.ч. багатоформатні та захищені паролем області; комбіноване інтерактивне та динамічне тестування безпеки додатків для виявлення вразливостей, які пропускають інші інструменти; звіт про відповідність нормативним стандартам (наприклад ISO 27001) та інші функціональні можливості. Це також платний, комерційни інструмент, доволі дорогий. Базова підписка коштує 4.5 тисячі доларів.

Тестування безпеки

В цьому відео поговоримо про тестування безпеки:
00:10 Тестування безпеки
02:34 Типи тестування безпеки
05:49 Тестування безпеки в контексті SDLC
09:41 Ролі тестування безпеки
12:40 Інструменти тестування безпеки

Тестування надійності

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

Він спрямований на виявлення потенційних збоїв або проблем продукту чи системи та визначення імовірності їх виникнення.

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

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

Згадаємо складові надійності згідно з ISO 25010.

Надійність (Reliability) включає зрілість, готовність, відмовостійкісь, відновлюваність.

Зрілість (Maturity) — ступінь відповідності системи, продукта або компонента при нормальній роботі вимогам надійності.

Готовність (Availability) — ступінь працездатності і доступності системи, продукта або компонента.

Відмовостійкість (Fault tolerance) — здатність системи, продукта або компонента працювати як призначено, не дивлячись на наявність дефектів програмного забезпечення або апаратних засобів.

Відновлюваність (Revoverability) — здатність продукта або системи відновити дані та необхідний стан системи у випадку переривання або збою.

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

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

Три категорії тестування, які часто використовуються: моделювання, вимірювання, поліпшення.

Моделювання

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

Вимірювання

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

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

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

До показників продукту відносять:

  • Розмір програмного забезпечення : рядок коду (LOC) – це інтуїтивно зрозумілий початковий підхід до вимірювання розміру програмного забезпечення. У цьому показнику враховується лише вихідний код, а коментарі та інші невиконувані оператори не враховуватимуться.
  • Метрика функціональна точка (Function Point Metric) є методом вимірювання функціональності розробки програмного забезпечення. Вона враховуватиме кількість входів, виходів, головних файлів тощо. Вона вимірює функціональні можливості, надані користувачеві, і не залежить від мови програмування.
  • Показники тестового покриття: це спосіб оцінки несправності та надійності шляхом виконання тестів програмного продукту і розрахунку відповідних показників покриття.

Надійність програмного забезпечення вимірюється середнім часом між відмовами (MTBF – mean time between failures) .

MTBF = MTTF + MTTR

Середнє значення до збою (MTTF – mean time to failures): це різниця в часі між двома послідовними збоями.

Середній час ремонту (MTTR – mean time to repair): це час, необхідний для усунення несправності.

Поліпшення

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

Тестування відновлення

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

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

Життєвий цикл процесу відновлення можна розділити на такі п’ять етапів:

  • Нормальна робота. Система, що складається з апаратного, програмного та мікропрограмного забезпечення, інтегрованого для досягнення мети, є функціональною та працює відповідно до очікувань.
  • Виникнення критичної ситуації. Критична ситуація може виникнути з різних причин, як-от несправність, ініційована введенням, збій програмного забезпечення через збій обладнання, пошкодження через техногенну аварію, спробу скоїти злочин (пограбування) тощо.
  • Переривання та збій операції. Найболючіша фаза, яка призводить до втрат. Повинен бути план аварійного відновлення, щоб ця фаза збою була мінімальною.
  • Усунення наслідків критичної ситуації через процес відновлення. Якщо план резервного копіювання та процеси керування ризиками розроблені і впроваджені, перш ніж зіткнутися з критичною ситуацією та збоями, відновлення можна виконати без особливих втрат часу, зусиль і енергії. Повинна бути відповідальна особа чи команда з розподілом ролей, щоб визначити відповідальність і допомогти організації уникнути тривалого періоду збою.
  • Відновлення всіх процесів і інформації для переведення всієї системи в нормальний режим роботи. Може включати кілька сеансів операцій для відновлення всіх папок разом із файлами конфігурації. Для правильного відновлення має бути відповідна документація та чітко структурований процес.

Стратегія відновлення

Команда відновлення повинна мати свою унікальну стратегію для отримання важливого коду та даних, щоб повернути роботу системи до нормального стану.

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

Можливу стратегію для критичних систем можна візуалізувати відповідями на такі питання:

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

В цьому відео поговоримо про тестування надійності:
00:20 Тестування надійності
10:20 Моделювання як категорія тестування
11:18 Вимірювання та поліпшення
15:15 Тестування відновлення

Тестування зручності

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

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

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

Причини або для чого нам тестування зручності

  • Естетика та дизайн є важливими.
  • Програмні додатки чи веб-сайти можуть зазнати невдачі через відсутність зрозумілої відпоівіді на наступні проблеми: що потрібно натиснути чи на яку сторінку потрібно перейти, що означає певний елемент, іконка, значок тощо, повідомлення про помилки не відображаються, є непослідовними чи неповними тощо.
  • Тестування зручності використання виявляє помилки зручності використання в програмному забезпеченні. Це свою чергу підвищує шанси програмного продукту на успіх.

Цілі тестування зручності

Легкість ознайомлення та естетичністьЧи легко освоїти систему?
Чи є система корисною та додає цінність цільовій аудиторії?
Чи використані вміст, колір, значки, зображення є естетично привабливими?
ЕфективністьЩоб дістатися до потрібного екрана чи веб-сторінки, знадобиться невелика навігація, а прокручування сторінки слід використовувати нечасто.
Уніфікованість формату екрану /сторінок у вашому додатку/веб-сайті.
Можливість пошуку в програмному забезпеченні або веб-сайті.
ТочністьНе повинно бути застарілих або неправильних даних, таких як контактна інформація/адреса.
Не повинно бути пошкоджених, недійсних посилань.
Зручність для користувачаНеобхідно надати допомогу, підказки користувачам, щоб зрозуміти програму/веб-сайт
Використовувані засоби керування мають бути простими для розуміння

Процес тестування зручності

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

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

Тестування зручності використання: під час цієї фази фактично виконуються тести зручності використання.

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

Звітування: результати перевірки зручності використання надаються всім зацікавленим сторонам, зокрема дизайнерам, розробникам, клієнту та керівництву компанії чи проєкту.

Техніки тестування зручності

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

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

Скільки потрібно тестувальників?

Магічне число 5. Дослідження (Вірзі, Ландауер) показують, що 5 тестувальників достатньо, щоб розкрити 80% проблем зручності використання . Деякі дослідники пропонують інші цифри.

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

Якщо бюджет обмежений, то 5 – це мінімальний показник, який бажано забезпечити.

Успішність тестування зручності

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

Переваги та недоліки

До переваг можна віднести:

  • Допомагає виявити проблеми зі зручністю використання ще до виходу продукту на ринок
  • Допомагає підвищити задоволеність кінцевих користувачів
  • Забезпечує ефективність та попит на програмний продукт
  • Допомагає зібрати правдивий відгук від вашої цільової аудиторії

Ключовим недоліком є вартість. Вона є головним фактором у тестуванні зручності використання. Щоб створити лабораторію тестування зручності використання, потрібно багато ресурсів. Наймання та керування usability-тестувальниками також може бути дорогим.

Тестування зручності

В цьому відео поговоримо про тестування зручності
00:20 Тестування зручності
00:55 Причини для тестування зручності
01:51 Цілі тестування зручності
04:52 Процес тестування зручності
06:50 Техніки тестування зручності
08:49 Скільки потрібно тестувальників?
10:09 Успішність тестування зручності
12:57 Переваги та недоліки