vyvchy
    Теми розділу

    11 · Security для QA

    Інструменти й процес security-тестування

    Зміст

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

    Для QA це щоденна робота, а не екзотика пентестера: прочитати звіт сканера й відділити підтверджену знахідку від здогаду, знати, чого не можна вмикати без дозволу власника цілі, і мати відповідь на питання «ви знайшли вразливість у чужому сервісі — ваші дії?». Глава — канонічний виклад теми на сайті: інші глави посилаються сюди по інструменти й процес.

    Каркас: хто дає критерій, а хто процедуру

    (Web Security Testing Guide) сам про себе каже, що він повний каркас тестування, а не простий чекліст: нові вразливості зʼявляються постійно, тож вичерпного переліку «що перевіряти» не буде ні в кого. Означення тестування в ньому коротке — порівняння стану системи з набором критеріїв. Звідси вада фрази «пройшли по WSTG» як : гайд дає процедуру, а критерії має дати щось інше.

    Це «щось інше» — (Application Security Verification Standard), і ролі розподіляє сам стандарт: питання розробника «як це реалізувати» закриває Cheat Sheet Series, питання верифікатора «як це протестувати» — WSTG. Тобто ASVS дає критерій, WSTG — процедуру. Форма вимоги ASVS збігається з тим, як QA працює з : вимога перевірна, а перевірка закінчується вердиктом pass або fail; стандарт містить лише вимоги (must) і не містить рекомендацій (should), тож «частково виконали» станом вимоги не є. Рівнів три — L1, L2, L3, — і рівень призначає не стандарт, а організація зі свого профілю . Ідентифікатори в обох документах пишуть із версією (WSTG-<version>-<category>-<number>, v<version>-<chapter>.<section>.<requirement>): між редакціями вони змінюються. І окремо, бо це часом продають: OWASP нікого не сертифікує.

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

    Процесну рамку з іншого боку дає ISTQB: тестування безпеки — діяльність життєвого циклу, процес узгоджують із процесом розробки, він не обовʼязково послідовний, а завершеність міряють проти критеріїв виходу й приймання. Пентест канон означує як динамічне тестування безпеки без заподіяння шкоди, з імітацією — запамʼятайте формулювання: це означення виду, і далі поруч із ним стане операційне застереження про активне сканування конкретним інструментом (глава 1).

    Перехоплювальний проксі: чому починають з нього

    Перший інструмент — не сканер, а перехоплювальний проксі: він показує справжні запити й відповіді, тоді як сканер дає лише перший прохід по очевидному.

    (Zed Attack Proxy) — безкоштовний інструмент пентесту з відкритим кодом. У своїй основі це «manipulator-in-the-middle proxy»: стоїть між браузером тестувальника й застосунком, перехоплює й інспектує повідомлення, за потреби змінює вміст і пересилає далі. WSTG називає адресата прямо: інструмент ідеальний для розробників і функціональних тестувальників, які тільки починають із пентестом.

    Головний розріз усередині — два режими, і різниця не технічна, а правова:

    • перевіряє те, що крізь проксі вже пройшло; воно жодним чином не змінює відповіді й вважається безпечним. Технічно це окремий додаток, який сканує повідомлення (HTTP, WebSocket), пропущені крізь ZAP або надіслані ним.
    • Активне сканування застосовує відомі проти обраних цілей. Це справжня атака, яка може наражати цілі на ризик, тож до цілей без дозволу її не застосовують.

    Базовий режим роботи — пройти застосунок браузером крізь проксі: ZAP будує дерево сторінок, записує запити й відповіді й піднімає alert-и. Чому автоматичного проходу мало, сказано прямо: сторінки за формою входу пасивним скануванням не виявляються, поки не налаштовано автентифікацію. Дока має власну мапу функціональності ZAP на (редакції 2021) і результати прогонів проти відомих вразливих застосунків інструмента перевірне, а не декларативне. Другий режим — план, що виконується без інтерфейсу й віддає код виходу; що з ним роблять у пайплайні — глава 15.

    Означення й застереження — про різне, і плутати їх не треба. Канон означує пентест як перевірку «без заподіяння шкоди», і це формулювання лишається чинним. Дока ZAP говорить не про метод, а про окрему процедуру свого інструмента: активне сканування поводиться як справжня атака, і функціональності сайту, даним тощо може бути завдано реальної шкоди. Тобто попередження описує ризик конкретного прогону, а не властивість пентесту як виду. Наслідок для роботи, а не для означення: активний скан вмикають лише там, де на це є дозвіл власника цілі.

    Burp Suite: воркфлоу навколо одного запиту

    — набір під ручне й автоматизоване тестування, а не сканер. Правило, яке в його доці стоїть до опису функцій: інструмент містить функціональність, яка може пошкодити цільові системи, бо перевірка на дефекти безпеки за жанром означає взаємодію з ціллю нестандартними способами. Умов чотири: прочитати документацію, зробити резервну копію цілі, мати авторизацію власника системи і прийнятий вами й власником ризик пошкодження; сам проксі до продакшну не підпускають, доки інструмент не вивчено. Це та сама рамка, що й у ZAP: не заперечення означення «без заподіяння шкоди», а умови запуску конкретної процедури. Разом виходить одне правило: пасивний прохід завжди, активна атака — тільки на своєму стенді, тільки з авторизацією власника, з резервною копією цілі й із прийнятим обома сторонами ризиком.

    • Proxy — вебпроксі між браузером і застосунком: перехоплює, інспектує й змінює трафік в обидва боки, зокрема HTTPS. Вхідна точка, з якої запити передають в інші інструменти набору.
    • Repeater — «змінити й надіслати той самий запит ще раз»: різні значення параметра, послідовність запитів у багатокроковому процесі й ручна перевірка того, що повідомив сканер. Правки лишаються в історії вкладки.
    • Intruder — та сама механіка автоматично: той самий запит багато разів із підстановкою різних пейлоадів у заздалегідь визначені позиції.
    • Site map — накопичувач того, що зібрано, поки ви ходили застосунком. Дві дрібниці вирішують: сірий підпис означає, що адресу знайдено, але не запитано (це не покриття), а запити показані разом із методом, тож той самий із GET і з PUT — два різні рядки. Саме там і живуть діри в контролі доступу (глава 3).

    Найкорисніше для дві незалежні шкали знахідки: серйозність (high, medium, low, informational) і впевненість (certain, firm, tentative). Ненадійна за побудовою техніка виявлення — наприклад, для сліпої — знижує саме впевненість, а не серйозність. Оцінки дока називає індикативними й вимагає переглядати їх зі знанням функціональності та бізнес-контексту; штатний спосіб перевірити — надіслати запит у Repeater.

    (fuzzing) — та сама механіка як самостійна техніка: автоматична подача несподіваного, спотвореного або напівспотвореного вводу. Фазер має дві частини — генератор даних і засоби налагодження, — тож половина роботи це спостереження за наслідком. Вектори будують або списками «відомо небезпечних значень» під тип (нуль, відʼємні й дуже великі числа; екрановані послідовності для рядків), або зі специфікації — заборонені й зарезервовані значення, звʼязані параметри, розміри полів. У вебі фазять URL, форми, контент від користувача й RPC-запити; межі названі там же — фазери тяжіють до простих дефектів, і чим краще фазер знає протокол, тим менше дивних помилок знайде.

    SAST, DAST і сусіди: це класи перевірок, а не класи продуктів

    Найважливіше застереження стоїть на обох профільних сторінках OWASP однаково: інструмент потрапляє в перелік, якщо він має відповідні можливості, а один продукт може підтримувати кілька типів перевірок. Питання «це SAST- чи DAST-інструмент» поставлене неправильно: клас описує перевірку, а не продукт.

    (Static Application Security Testing) означений через ототожнення: інструменти аналізу вихідного коду, вони ж SAST-інструменти, аналізують вихідний або зібраний код. Їх додають в IDE, клас добре масштабується (нічні збірки, безперервна інтеграція) і дає адресний вивід — файл, рядок, іноді фрагмент коду. Межі, названі тим самим джерелом, для QA цінніші за переваги: автентифікація, контроль доступу й криптографія автоматизуються погано; інструменти виявляють лише відносно малий відсоток дефектів; багато хибнопозитивних; конфігураційних проблем вони не бачать, бо тих немає в коді; довести, що знахідка є реальною , важко.

    (Dynamic Application Security Testing) — сканери вразливостей вебзастосунків: автоматичні інструменти, що сканують застосунок зазвичай ззовні, шукаючи XSS, SQL-, , і небезпечну конфігурацію сервера. Понад це джерело каже лише, що інструментів багато й у кожного свої сильні та слабкі сторони, — без розшифровки, і додумувати її ми не будемо. IAST фігурує лише як назва ще одного класу в переліку кроків пайплайна: означення йому канон не дає, тож і ми не даємо. (Software Composition Analysis) — про склад залежностей, тема глави 13. Самі переліки OWASP подані за абеткою, жодного вендора OWASP не рекомендує, а чужі порівняльні проєкти від себе відмежовує.

    Далі — межі класу як такого, яких не знімає жоден вибір інструмента:

    • Інструменти не роблять софт захищеним — вони допомагають масштабувати процес і дотримувати політику.
    • Софт оцінювання безпеки корисний як перший прохід по очевидному і загалом незрілий для глибокого оцінювання: безпека є процесом, а не продуктом.
    • Звіти двох інструментів не взаємозамінні: тести не стандартизовані — різні дані, різні реалізації, різні тлумачення, тож розбіжність двох сканерів не є дефектом жодного з них.
    • Частина дефектів без доступу до коду не знаходиться взагалі — це сказано про path traversal і сильніше за звичне «сканер бачить лише очевидне».
    • Оцінка ризиків тестом не є: це аналіз сприйнятої критичності, а не перевірка.

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

    Моделювання загроз: чотири питання і STRIDE

    Моделювання загроз (threat modeling) — структурований, повторюваний процес: модель системи з погляду безпеки, ідентифікація застосовних загроз і визначення відповідей на них. Погляд тут чужий — систему аналізують з позиції супротивника; WSTG називає це оцінкою ризиків для застосунків.

    Каркас — чотири питання з Threat Modeling Manifesto: над чим ми працюємо? що може піти не так? що ми з цим зробимо? чи достатньо добре ми це зробили? Шпаргалка OWASP розкладає їх у кроки — декомпозиція, ідентифікація й ранжування загроз, помʼякшення, рев'ю й валідація — і одразу знімає ілюзію єдиного припису: галузевого стандарту процесу не існує.

    нова фіча, інцидент, зміна архітектури

    Над чим ми працюємо?
    модель системи, DFD,
    межі довіри

    Що може піти не так?
    STRIDE, дерева загроз

    Що ми з цим зробимо?
    помʼякшити, усунути,
    перенести, прийняти

    Чи достатньо добре?
    перегляд усіма стейкхолдерами

    нова фіча, інцидент, зміна архітектури

    Над чим ми працюємо?
    модель системи, DFD,
    межі довіри

    Що може піти не так?
    STRIDE, дерева загроз

    Що ми з цим зробимо?
    помʼякшити, усунути,
    перенести, прийняти

    Чи достатньо добре?
    перегляд усіма стейкхолдерами

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

    КатегоріяПитання до фічіВластивість, яку вона порушує
    Spoofing identityчи можна видати себе за іншого користувачаавтентифікація
    Tampering with dataчи можна змінити збережені дані або дані в дорозіцілісність
    Repudiationчи можна зробити дію так, щоб її не можна було довестиоблік дій / незаперечність
    Information disclosureчи можна прочитати те, до чого немає доступуконфіденційність
    Denial of serviceчи можна позбавити сервісу валідних користувачівдоступність
    Elevation of privilegeчи може непривілейований користувач дістати привілеїавторизація

    Третій рядок навмисно подвійний: дві сторінки OWASP зіставляють Repudiation із різними речами — шпаргалка Threat Modeling з обліком дій (Accounting), процесний виклад із (Non-Repudiation). Обидва канонічні, і зводити їх в одне ми не будемо.

    STRIDE не обовʼязковий: відповідь на «що може піти не так» буває як простим брейнштормом, так і структурованою — STRIDE, kill chains (для операційного моделювання називають MITRE ATT&CK) або дерева атак. Відповідей на загрозу чотири: помʼякшити, усунути, перенести, прийняти, — і вимога до формулювання зроблена під перевірку: помʼякшення мають бути придатними до дії, а не гіпотетичними. Звідти ж означення, варте уваги: вразливості — це ті загрози, що не мають контрзаходів.

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

    Ще одна розбіжність, яку глава подає як вибір. Шпаргалка каже, що в теорії ранжування має спиратися на добуток імовірності загрози та її впливу. Процесний виклад того самого OWASP радить протилежне — якісні значення замість числових, щоб оцінка не ставала надто субʼєктивною. Обидва — OWASP; яку рамку брати, вирішує команда. І застереження про саме джерело: найдетальніший опис кроків OWASP позначає історичним — сторінка має заголовок «Threat Modeling Process (Historical)». Текст повний, але читати його треба як історичний виклад.

    Поверхня атаки: мапа того, що взагалі треба перевіряти

    (attack surface) — усі точки, якими атакувальник міг би потрапити в систему і якими міг би винести дані назовні; ширше означення включає й самі цінні дані — секрети й ключі, критичні бізнес-дані, персональні дані. Сенс аналізу практичний: зрозуміти, які частини системи треба переглянути й протестувати, і помітити, коли поверхня змінилася.

    Перелік, за яким її мапують, готовий: форми й поля UI, HTTP-заголовки й cookie, API, файли, бази даних, інші локальні сховища, пошта й інші повідомлення, аргументи запуску. Поверх моделі накладають ролі, а фокус тримають на двох крайностях — анонім і високопривілейований адміністратор; пріоритет мають віддалені точки входу. Точки виходу — не симетрична дрібниця: разом зі входами вони задають межу довіри, і саме вихід потрібен, щоб атака завершилася — і XSS, і розкриття інформації його вимагають.

    Поверхня росте сама й від дрібниць: кілька розгорнутих версій, залишені фічі, старі резервні копії й невикористовуваний код; бекапи джерело окремо називає важливою, але часто ігнорованою частиною. Тригер рев'ю названо прямо: зміни в керуванні сесіями, автентифікації та керуванні паролями — тобто реліз, який «лише додає фічу», може змінити перевірок. Окремо про пайплайн: CI/CD збільшує поверхню атаки організації, і вектором названо не саму технологію — люди, процеси й технологія потрібні для пайплайна, і всі троє можуть стати шляхом атаки.

    DevSecOps: безпека як кроки наявного пайплайна

    Гайдлайн OWASP описує не як окремий процес поруч із розробкою, а як додані кроки до наявного пайплайна. Мета сформульована як швидкість — виявити проблеми безпеки якомога швидше, — і категорію названо двома половинами: дефект дизайну і вразливість застосунку. Той самий документ прямо називає своєю метою культуру shift-left (глава 1).

    0-b Threat Modeling

    1 Pre-commit
    Secrets Management, Linting Code

    2 Vulnerability Scanning
    SAST, DAST, IAST, SCA,
    інфраструктура, контейнери

    3 Compliance Auditing

    0-b Threat Modeling

    1 Pre-commit
    Secrets Management, Linting Code

    2 Vulnerability Scanning
    SAST, DAST, IAST, SCA,
    інфраструктура, контейнери

    3 Compliance Auditing

    Дві речі тут важать для QA. Перша: моделювання загроз стоїть нульовим кроком, до коду. Друга: перший технічний крок базового пайплайна — сканування git-репозиторіїв на витік креденшелів, тобто теж до збірки (гігієна секретів у CI — розділ про Git і CI). Вибір інструментів і місце для них гайдлайн лишає команді, а про що радить не забути — центральне місце, де знахідки зводяться в одну картину.

    Другий бік теми той самий документ не покриває: кроки безпеки в пайплайні не роблять пайплайн безпечним. Окрема шпаргалка ставить це руба — пайплайни посідають важливе місце в сучасному циклі розробки й саме тому є привабливою ціллю, а ціна компрометації висока за побудовою: кроки часто виконуються високопривілейованими ідентичностями, тож атака має високий потенціал шкоди (названо Codecov і SolarWinds). Наслідки, які видно тестувальнику: дефолти вендора безпечними не є, перед продакшн- потрібні ручний апрув і рев'ю, а алерти ніколи не будуть точними на 100 %.

    Зрілість процесу гайдлайн виносить в окремий документ: «які кроки додати» і «наскільки зрілий наш процес» — різні питання. (Software Assurance Maturity Model) — відкритий фреймворк, що допомагає організації сформулювати й реалізувати стратегію безпеки ПЗ під її конкретні ризики; місія — дати дієвий і вимірний спосіб покращувати цикл безпечної розробки. Модель не залежить від технології й процесу, вона ризик-орієнтована, і єдиного рецепта для всіх у ній немає; програму будують чіткими ітераціями, а покращення треба вміти показати. Чинна версія на дату забору джерела (2026-08-02) — 2.0.3 (2022). Практичний висновок: заява «ми впровадили SAMM» сама по собі не означає нічого.

    Вразливі стенди: Juice Shop і DVWA

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

    для непідозрілого користувача виглядає як невеликий онлайн-магазин соків. Усередині — завдання різної складності, де треба проексплуатувати закладені вразливості; станом на 2026-08-02 сторінка проєкту називає 113 завдань і сама ж каже, що перелік зростає. Вразливості закладені навмисно, але в спосіб, який справді трапляється в реальній веброзробці, а прогрес рахує сам застосунок — аж до Score Board, знайти який і є одним із найлегших завдань.

    Дві властивості визначають спосіб роботи. Один інстанс — один користувач: це технічно необхідно, щоб працювало самовідновлення й щоб прогрес кількох атакувальників не перемішався. Самовідновлення стирає стан: під атакою автоматизованого інструмента сервер може впасти, і тому застосунок стирає всю базу даних і теку, яку могли змінити під час зламу, — на старті сервера. Наслідок практичний: , запити й HAR збирають одразу. І окремий заявлений сценарій: сканери й інструменти пентесту запрошують використовувати Juice Shop як піддослідного — читати це варто разом із попереднім реченням, бо агресивний прогін кладе стенд штатно, і це не знахідка. Завдання розкладені за класами з чинних каталогів (OWASP Top 10, ASVS, та інших), і сама мапа вичерпності не заявляє.

    (Damn Vulnerable Web Application) — вебзастосунок на PHP/MariaDB, який «damn vulnerable» за задумом. Мета потрійна: дати фахівцям із безпеки перевіряти навички й інструменти в легальному середовищі, допомогти розробникам зрозуміти процеси захисту застосунків і навчати в контрольованому середовищі. Тренують найпоширеніші вебвразливості з різними рівнями складності; рівень задають конфігурацією ще на старті, причому більшість налаштувань — змінними оточення.

    Правило запуску тут найсуворіше з усіх: не завантажуйте його в публічну теку хостинг-провайдера чи на сервери, доступні з інтернету, — їх скомпрометують; рекомендований спосіб — віртуальна машина в режимі NAT, і підтримується лише остання збірка з офіційного репозиторію. Частину вразливостей навмисно не задокументовано — знайти їх самому і є вправою, тож знайдене в стенді його дефектом не є. Є й окремий режим під інструменти: опція вимкнути перевірку автентифікації, бо частина сканерів із логіном не працює; admin / password автор коментує сам — їх легко перебрати. SQL-інʼєкції ганяють або проти MariaDB/MySQL, або проти 3: завдання ті самі, змінюється лише бекенд (глава 5).

    Випадок, вартий згадки, README фіксує сам: у 2023 році хтось попросив на одну з вразливостей DVWA — і отримав CVE-2023-39848. Наявність номера не означає, що знахідка є дефектом у своєму контексті: тут вразливість була змістом навчального стенда.

    Прогін інструмента як перевірка на виявлення

    A09:2025 Security Logging and Alerting Failures дає найпряміший тест у розділі: прогін DAST-інструмента (Burp, ZAP) або пентест не породжує жодних сповіщень — це і є дефект категорії. Ваш власний скан заодно перевіряє, чи система взагалі бачить атаку.

    Ознаки перевіряються парою кейсів: події, що підлягають аудиту, не логуються або логуються непослідовно (класика — успішні входи пишуться, невдалі ні); цілісність логів не захищена від підміни; у лог пишуться персональні дані; некоректно закодовані дані в лозі відкривають інʼєкцію в самі системи логування. Категорію OWASP називає неймовірно важкою для тестування з мінімальним представленням у даних CVE — чекати тут на сканер марно. Лог і сам є ціллю саме тому, що він засіб захисту: атаки на нього поділено на конфіденційність, доступність (заливання логів вичерпує диск) і підзвітність (запис хибної ідентичності приховує відповідального). Помʼякшення інʼєкції перевірне: дані події санітизують перед записом — зокрема CR, LF і символи-розділювачі. Розкриття даних як тема — глава 10.

    Відповідальне розкриття, bug bounty і security.txt

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

    Обовʼязки того, хто знайшов: переконатися, що тестування легальне й дозволене; докласти розумних зусиль, щоб звʼязатися з командою безпеки; дати достатньо деталей, щоб вразливість можна було перевірити й відтворити; не вимагати оплати чи винагород поза наявною програмою. Обовʼязки організації: дати зрозумілий спосіб безпечно повідомити; чітко визначити scope і правила програми; відповідати в розумний строк; не погрожувати судом; запитувати CVE, коли доречно; публікувати зрозумілі advisory й changelog.

    Моделей розкриття три. Приватна — звіт іде приватно, а рішення про публікацію належить організації, не досліднику; більшість програм винагород вимагають саме її. Повна — деталі (іноді разом з експлойтом) публікуються одразу, часто до появи патча; це крайній засіб. Відповідальна (координована) — початковий звіт приватний, повні деталі виходять після появи патча. Рухає її дедлайн: якщо його не дотримано, дослідник може перейти до ; приклад із фіксованим строком — Project Zero публікує деталі через 90 днів незалежно від наявності патча.

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

    — програма, що мотивує дослідників знаходити й повідомляти вразливості винагородами; зазвичай є стороння платформа. Порядок обовʼязковий: її варто запускати лише організаціям, які вже мають зрілий процес розкриття, бо ціна це не лише виплати — потрібні люди, здатні кваліфіковано тріажити звіти, і готовність до великої кількості сміття й хибних спрацювань. Найважливіший крок, за джерелом, узагалі не програма, а сам канал звʼязку. Мінімальний склад advisory теж заданий: резюме з впливом, перелік вразливих версій, перелік версій із патчем і CVE.

    Машинний бік каналу — (RFC 9116): текстовий файл у відомому місці, що машинно розбирається й описує практики розкриття. Нормативні вимоги перевіряються за пʼять хвилин:

    • файл MUST лежати під /.well-known/; копія в корені допускається лише для сумісності, і за наявності обох виграє /.well-known/;
    • доступ MUST бути по схемі https, тип вмісту — text/plain із charset=utf-8;
    • поле Contact MUST бути присутнім завжди, а значення SHOULD стояти в порядку переваги;
    • поле Expires MUST бути й MUST NOT повторюватися; RECOMMENDED, щоб дата була менше ніж на рік уперед;
    • область дії — рівно домен або IP з URI, за яким файл узято, без піддоменів і батьківських доменів.
    import { test, expect } from '@playwright/test';
    
    test('security.txt віддається за контрактом RFC 9116', async ({ request }) => {
      const res = await request.get(`${process.env.BASE_URL}/.well-known/security.txt`);
      expect(res.status()).toBe(200);
      expect(res.headers()['content-type']).toContain('text/plain');
    
      const body = await res.text();
      expect(body).toMatch(/^Contact:/m);
    
      const expires = body.match(/^Expires:\s*(.+)$/m)?.[1] ?? '';
      expect(new Date(expires).getTime()).toBeGreaterThan(Date.now());
    });

    Трьох речей файл не робить. Він не дає дозволу на тестування: з наявності або відсутності security.txt не можна виснувати ані дозвіл, ані заборону. Він не рятує від захопленого сайту: атакувальник, який зламав сайт, здатен підмінити й цей файл або поставити редирект на себе. І протухлий файл гірший за відсутній — RFC формулює це буквально.

    Типові помилки

    • Виглядає як «сканер зелений — застосунок чистий», а насправді інструменти виявляють лише малий відсоток дефектів, а автентифікація, контроль доступу й криптографія автоматизуються погано.
    • Виглядає як «пентест шкоди не завдає — так у визначенні, отже вмикаю активний скан», а насправді означення описує вид робіт, а не конкретну процедуру: ZAP і Burp попереджають, що їхнє активне сканування є справжньою атакою й реальна шкода можлива, тому потрібні авторизація власника, резервна копія й прийнятий ризик.
    • Виглядає як «знахідка з низькою впевненістю — дрібниця», а насправді впевненість і серйозність — дві незалежні шкали: низька впевненість означає ненадійну техніку виявлення, а не низьку критичність.
    • Виглядає як «пройшли весь WSTG — можна релізити», а насправді гайд сам відмовляється бути чеклістом, а критерії дає стандарт вимог.
    • Виглядає як «мапа сайту заповнена — покриття є», а насправді сірий підпис означає, що адресу лише знайдено, а той самий шлях з іншим методом — окремий рядок.
    • Виглядає як «два сканери показують різне — один бреше», а насправді тести не стандартизовані: різні дані, різні реалізації, різні тлумачення.
    • Виглядає як «стенд упав під сканером — знайшли DoS», а насправді у Juice Shop це штатна властивість, і самовідновлення стирає базу на старті разом із вашими доказами.
    • Виглядає як «є security.txt — тестувати можна», а насправді дозвіл дає політика розкриття, а не наявність файла.
    • Виглядає як «прогін нічого не зламав — і добре», а насправді відсутність будь-якого сповіщення на ваш прогін і є дефектом категорії A09.

    Підсумок

    • ASVS дає критерій, WSTG — процедуру. Перевірка без критерію не має проти чого виносити вердикт, а «пройшли по гайду» критерієм виходу не є.
    • Проксі перед сканером. Пасивний прохід безпечний завжди; активна атака — лише на ціль із дозволом, і за каноном ISTQB, і за прямою вимогою доки ZAP та Burp.
    • Клас перевірки — не клас продукту. SAST, DAST і сусіди описують типи перевірок; зелений прогін не закриває автентифікацію, контроль доступу й конфігурацію.
    • Моделювання загроз — це чотири питання, а STRIDE — шість готових питань до фічі. Місце QA записане формально: помʼякшення мусить бути перевірним, а модель рецензують усі стейкхолдери.
    • Безпека в пайплайні — це кроки, а не окремий процес, і нульовий крок стоїть до коду. Сам пайплайн при цьому є ціллю: високі привілеї роблять його компрометацію дорогою.
    • Знахідка в чужій системі — процес, а не тікет: легальність, канал звʼязку, відтворюваний звіт, дедлайн і scope, за межами якого safe harbor не діє.

    Можливі питання

    • Чим ZAP і Burp відрізняються від сканера вразливостей? Перевіряють розуміння класу: це перехоплювальний проксі, який показує справжній трафік, а сканування — лише один із його режимів. Сильна відповідь розводить пасивний і активний прохід за ризиком і потребою дозволу.
    • Що таке SAST і DAST і чи можна обійтися одним? Чекають механізм, а не абревіатури: аналіз коду проти сканування запущеного застосунку ззовні — плюс межі SAST (контроль доступу, автентифікація, конфігурація).
    • Розкажіть про STRIDE. Дивляться, чи назве кандидат шість категорій і чи перетворить їх на питання до конкретної фічі. Бонус — знання, що мнемоніка ризик не міряє.
    • Що таке поверхня атаки й коли вона змінюється? Очікують перелік точок входу й виходу і вміння назвати тригери: нові інтерфейси, зміни в автентифікації та сесіях, залишені фічі й бекапи.
    • Ви знайшли вразливість у чужому сервісі. Ваші дії? Найпоказовіше питання глави: приватний звіт із відтворенням, пошук каналу (зокрема /.well-known/security.txt), відсутність вимог оплати й розуміння, що scope програми — межа законності.
    • Чому «сканер нічого не знайшов» не є критерієм готовності до релізу? Дивляться, чи назве кандидат три речі: малий відсоток покриття, хибнопозитивні й хибнонегативні результати та класи дефектів, які взагалі не автоматизуються.

    Джерела

    Каркас: хто дає критерій, а хто процедуру

    Перехоплювальний проксі: чому починають з нього

    Burp Suite: воркфлоу навколо одного запиту

    • Burp Suite — documentation: desktop editions — набір під ручне й автоматизоване тестування; попередження про шкоду цілям і вимоги авторизації, бекапу та прийнятого ризику.
    • Burp Suite — Burp Proxy — означення проксі, роль вхідної точки, заборона на продакшн до вивчення інструмента.
    • Burp Suite — Burp Repeater — три сценарії повторного надсилання, зокрема ручна перевірка знахідки сканера.
    • Burp Suite — Burp Intruder — підстановка пейлоадів у визначені позиції запиту.
    • Burp Suite — Target / Site map, запитане проти лише виявленого, метод поруч із запитом, дві шкали знахідки.
    • OWASP www-community — Fuzzing — означення фазингу, будова фазера, два способи будувати вхід, межі техніки.

    SAST, DAST і сусіди: це класи перевірок, а не класи продуктів

    Моделювання загроз: чотири питання і STRIDE

    • OWASP Cheat Sheet — Threat Modeling — означення процесу, чотири питання й кроки, DFD і межі довіри, мапа STRIDE з обліком дій, ранжування як добуток імовірності на вплив, чотири відповіді на загрозу, рев'ю всіма стейкхолдерами.
    • OWASP www-community — Threat Modeling Process (Historical) — статус історичного викладу, категоризація як критичний елемент, вразливість як загроза без контрзаходу, якісні значення замість числових, мапа STRIDE з незаперечністю.
    • OWASP www-community — Threat Modeling — безперервність процесу й тригери перегляду; брейншторм проти STRIDE, kill chains і дерев атак.
    • Microsoft — The STRIDE Threat Model — призначення мнемоніки й опис шести категорій.
    • OWASP Web Security Testing Guide v4.2 (PDF, 465 стор.) — моделювання загроз як оцінка ризиків і вимога створювати модель якомога раніше.
    • OWASP Cheat Sheet — Attack Surface Analysis — рекурсія: зміни поверхні запускають моделювання, а моделювання допомагає зрозуміти поверхню.

    Поверхня атаки: мапа того, що взагалі треба перевіряти

    DevSecOps: безпека як кроки наявного пайплайна

    • OWASP DevSecOps Guideline — предмет гайдлайну й культура shift-left, мета «виявити якомога швидше», сканування репозиторіїв на витік креденшелів, винесення зрілості в SAMM.
    • OWASP DevSecOps Guideline — latest — надбудова над наявним пайплайном, порядок стадій, шість підрозділів стадії сканування, свобода вибору інструментів, центральне зведення знахідок.
    • OWASP Cheat Sheet — CI/CD Security — пайплайн як ціль, високі привілеї й потенціал шкоди, Codecov і SolarWinds, дефолти вендора, ручний апрув, неточність алертів.
    • OWASP SAMM — означення моделі, місія про вимірність, ризик-орієнтованість, ітеративність, чинна версія на дату забору.

    Вразливі стенди: Juice Shop і DVWA

    • Pwning OWASP Juice Shop — Running OWASP Juice Shop — один інстанс на одного користувача, самовідновлення зі стиранням бази на старті, падіння під агресивним прогоном.
    • Pwning OWASP Juice Shop — Why OWASP Juice Shop exists — маскування під магазин, кількість завдань на дату забору, навмисні але реалістичні вразливості, Score Board, запрошення для сканерів.
    • Pwning OWASP Juice Shop — Vulnerability categories — завдання за класами з чинних каталогів; мапа без заяви про вичерпність.
    • digininja/DVWA — README — означення й потрійна мета, рівні складності та змінні оточення, заборона публічного розгортання й віртуалка в NAT, лише офіційна збірка, незадокументовані вразливості, режим без автентифікації, дефолтні креденшели, MariaDB проти SQLite3, випадок із CVE.
    • ZAP – Getting Started — активна атака лише проти цілі, на тестування якої є дозвіл.

    Прогін інструмента як перевірка на виявлення

    • OWASP Top 10:2025 — A09 Security Logging and Alerting Failures — прогін DAST або пентест без сповіщень як дефект категорії, ознаки вразливості, важкість тестування й мінімальне представлення в CVE.
    • OWASP Cheat Sheet — Logging — лог як ціль атаки, три атаки на нього, санітизація даних події перед записом.

    Відповідальне розкриття, bug bounty і security.txt

    • OWASP — Vulnerability Disclosure Cheat Sheet — двосторонність процесу, обовʼязки сторін, три моделі й дедлайн із прикладом Project Zero, safe harbor і межа вимагання, склад звіту й advisory, означення bug bounty, ціна програми, канал звʼязку як найважливіший крок.
    • RFC 9116 — A File Format to Aid in Security Vulnerability Disclosure (security.txt) — призначення формату, розташування, вимоги до схеми й типу вмісту, поля Contact і Expires, область дії, відсутність дозволу на тестування, ризик підміни, «протухлий гірший за відсутній».

    Пояснення

    «Поясни» працює з власним API-ключем Anthropic: запит іде з вашого браузера прямо до Anthropic.

    Свій API-ключ (BYOK)

    Вставте власний ключ Anthropic — пояснення працюватиме на реальній моделі. Ключ зберігається лише у вашому браузері (localStorage), нікуди не надсилається, крім api.anthropic.com, і не логується.