Статья Метрики эффективности пентеста: формулы ROI, KPI-дашборд и обоснование бюджета

Распечатанный KPI-дашборд на плотной бумаге с тремя строками метрик, придавленный латунной линейкой. Рядом лежит перьевая ручка с тёмными чернилами, мягкий дневной свет падает слева.


Три квартала подряд я защищал бюджет на пентесты перед советом директоров финтех-компании - 6 миллионов рублей в год на четыре проекта. Каждый раз один и тот же вопрос от CFO: «Вы нашли 47 уязвимостей в прошлом квартале - и что изменилось?». Ответ «мы стали безопаснее» не конвертируется в подпись на бюджете. Конвертируется дашборд с тремя числами: risk exposure до пентеста в рублях, risk exposure после ремедиации и дельта между ними. Эта дельта и есть ROI. Ниже - конкретные формулы, 9 метрик, шаблон квартального отчёта и decision tree: какие KPI для пентеста показывать CISO, а какие оставить внутри команды.

Почему «47 уязвимостей» - бесполезная оценка результатов пентеста​

Количество найденных уязвимостей - самая распространённая и самая бесполезная метрика в отчётах. Три причины.

Число зависит от scope. Нашли 47 в этом квартале и 32 в следующем - это улучшение security posture или урезали scope на два приложения? Без нормализации на единицу покрытия (endpoint, KLOC, IP-подсеть) число плавает от проекта к проекту и ни о чём не говорит.

Severity распределена неравномерно. 40 Informational и 7 Critical - совершенно другая картина, чем 47 Medium. Для CISO один Critical RCE на внешнем периметре опаснее сотни информационных утечек заголовков. И он прав.

Количество находок не коррелирует с реальным снижением риска. Если из 47 уязвимостей за 90 дней закрыли только 12, а 5 Critical висят без патча - пентест не снизил risk exposure, а только задокументировал его. По данным Software Secured, среднее время патчинга уязвимости в dev-командах - около 202 дней, а weaponization эксплойта после публичного раскрытия занимает в среднем 8 дней. Окно уязвимости - почти 7 месяцев. Семь. Месяцев.

Бизнесу нужно не «сколько нашли», а «на сколько снизилась вероятность инцидента» и «сколько стоил бы инцидент без пентеста». Для этого и существует фреймворк метрик.

Фреймворк метрик информационной безопасности: 9 показателей эффективности​

Метрики делятся на две группы: операционные (измеряют качество самого пентеста) и метрики ремедиации (измеряют, что произошло после отчёта). Первая группа - для пентест-команды и тимлида. Вторая - для CISO и CFO. Нужны обе, но показывать их надо разным людям.

Операционные метрики: что измерять во время и после проекта​

1. Attack Surface Coverage. Процент активов организации, покрытых тестированием. Веб-приложения, API, внешний периметр, внутренняя сеть, Wi-Fi, социальная инженерия - каждый класс активов считается отдельно. Если в прошлом квартале тестировали 3 из 12 production-приложений - coverage 25%. Метрика выражается как чек-лист: актив протестирован / не протестирован.

Тут есть нюанс, который часто мешают в кашу: для внешнего пентеста coverage считается по количеству внешних IP, доменов и API-endpoints. Для внутреннего - по сегментам сети и критичным хостам (DC, файловые серверы, jump hosts). Смешивать их в одном показателе - ошибка, которая маскирует реальные gaps.

2. Vulnerability Discovery Rate. Количество находок на единицу scope - на приложение, на IP-адрес или на 1000 строк кода (для code-assisted пентеста). По данным Cobalt, если discovery rate и частота критичных находок снижаются от проекта к проекту при стабильном scope - это признак зрелости программы, а не повод менять подрядчика. Скорее сигнал, что пора переходить к следующему уровню: code-assisted pentest или red teaming.

3. Critical Vulnerabilities Found. Абсолютное и процентное количество находок с CVSS >= 9.0. На этапе reconnaissance (Vulnerability Scanning, T1595.002) и initial access (Exploit Public-Facing Application, T1190) пентестер ищет именно те уязвимости, которые дают точку входа - они отслеживаются отдельной строкой.

4. False Positive Rate. Доля находок, не воспроизведённых при верификации. Высокий показатель - прямой сигнал о зависимости от автоматических сканеров без ручной валидации. Целевой ориентир в зрелых программах - менее 5%. Если у вас 15-20% - пора задать вопросы тому, кто проводил тестирование.

5. Test Cadence. Частота тестирования определяет актуальность данных. Ежегодный пентест - compliance-минимум (и по сути галочка). Ежеквартальный - базовая зрелость. Continuous validation - зрелая программа. По данным Software Secured, квартальные пентесты сокращают время триажа на 69 минут на каждую уязвимость - в среднем 29 часов экономии на проект.

CadenceОриентир стоимостиCoverageАктуальность данныхКогда применять
Раз в год1.5–3 млн руб./проектНизкийУстаревает через 2-3 месяцаCompliance-минимум, legacy с редкими релизами
Раз в квартал4–8 млн руб./годСреднийАктуальна 60-80 днейРегулярные релизы, fintech, e-commerce
Continuous (BAS + ручной)6–15 млн руб./годВысокийАктуальна непрерывноЗрелые программы, критичная инфраструктура

Ограничение, о котором молчат вендоры BAS: continuous validation проверяет известные TTPs и конфигурации controls, но не находит zero-day и logic-баги в бизнес-логике. Automated pen testing не заменяет ручного - он дополняет его между ручными engagement'ами. Путать одно с другим дорого.

Метрики ремедиации: MTTR, remediation rate, vulnerability density​

6. MTTR - Mean Time to Remediate. Среднее время от попадания уязвимости в отчёт до подтверждённого исправления. Считается отдельно по severity: для Critical целевой показатель - 7-14 дней, для High - 30 дней, для Medium - 60-90 дней. MTTR Critical свыше 30 дней - красный флаг. Не оранжевый. Красный.

Как считать: если трекинг находок ведётся в Jira, MTTR извлекается из разницы между Created Date и Resolved Date. Запрос вроде project = PENTEST AND status = Resolved AND priority in (Critical, High) AND resolved >= -90d даст выборку для расчёта median MTTR. Median здесь предпочтительнее average - один тикет, зависший на полгода, не должен искажать общую картину.

7. Remediation Rate (Open-to-Remediated Ratio). Формула: Remediated / (Remediated + Open) * 100%. Целевой показатель для зрелой программы: не менее 85% для Critical + High в пределах SLA. Метрика показывает, работает ли процесс ремедиации или пентест-отчёт оседает в папке (спойлер: обычно оседает).

8. Vulnerability Density Trends. Плотность уязвимостей на единицу scope, отслеживаемая поквартально. Формула по Software Secured: VD = V / S, где V - количество уязвимостей, S - размер scope в выбранных единицах (KLOC для кода, количество endpoints для API). Снижение VD от квартала к кварталу - самый убедительный индикатор улучшения security posture для бизнеса. CFO понимает тренд вниз на графике лучше, чем любой CVSS.

9. Reopen Rate. Процент уязвимостей, закрытых, а затем вновь открытых при ретесте. Показатель выше 10% - проблемы с качеством патчинга: dev-команда закрывает симптом, а не root cause. Особенно критичен для уязвимостей, связанных с Valid Accounts (T1078, initial-access / persistence / privilege-escalation) - если учётные данные по-прежнему утекают через другой вектор, reopen гарантирован.

ROI пентестирования: считаем в рублях, а не в уязвимостях​

Обоснование бюджета на пентест - это конкретная формула, которая сравнивает стоимость тестирования с потенциальной стоимостью инцидента, скорректированной на эффективность ремедиации. Никакой философии - арифметика.
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

KPI-дашборд для программы security validation​

Семь показателей для квартального отчёта​

Минимальный набор KPI, который закрывает потребности и технической команды, и бизнеса:

МетрикаФормула / источникЦелевое значениеАудитория
Attack Surface Coverage (%)Протестированные активы / Все активы x 100>80% критичных активовCISO, Tech Lead
Critical Vulns FoundАбсолютное число CVSS >= 9.0Тренд сниженияCISO, Board
MTTR Critical (дни)Median(Resolved Date - Created Date)<14 днейTech Lead, Dev Lead
Remediation Rate (%)Remediated / Total x 100>85% для Critical+HighCISO
Vulnerability Density TrendV / S поквартальноСнижение 10-20% y/ySecurity Team
ATT&CK Coverage (%)Проверенные техники / Релевантные x 100>60% для Tier 1 threatsCISO, Red Team Lead
Risk Reduction (руб.)Breach Risk Before - Breach Risk AfterПоложительное значениеCFO, Board

Привязка метрик к MITRE ATT&CK coverage​

ATT&CK Coverage - одна из немногих метрик, которая показывает не «что нашли», а «что проверили». Разница принципиальная. Для каждой релевантной тактики определяется набор техник, а затем отмечается, какие из них протестированы и какие дали результат.

Пример маппинга для типового внешнего + внутреннего пентеста:

ТактикаТехника (MITRE ATT&CK)ПротестированоРезультат
ReconnaissanceVulnerability Scanning (T1595.002)Да3 сервиса с известными CVE
Initial AccessExploit Public-Facing Application (T1190)ДаRCE на staging, WAF блокирует на prod
Initial AccessValid Accounts (T1078)Да2 пары через credential stuffing
Privilege EscalationExploitation for Privilege Escalation (T1068)ДаKernel exploit на legacy Ubuntu 18.04
Credential AccessOS Credential Dumping (T1003)ДаLSASS dump, 4 доменных аккаунта
DiscoveryNetwork Service Discovery (T1046)ДаПолная карта внутренней сети
DiscoverySecurity Software Discovery (T1518.001)ДаCrowdStrike Falcon на endpoints
Defense EvasionImpair Defenses (T1562)НетНе входило в scope

Coverage: 7 из 8 техник проверены = 87.5%. Defense Evasion (T1562) не тестировался - это gap для следующего engagement.

Такой маппинг показывает CISO не «сколько уязвимостей», а «какие пути атаки мы проверили и где остались слепые зоны». Это принципиально другой разговор с бизнесом: «в следующем квартале нужно закрыть Defense Evasion и Lateral Movement - 2 тактики, 6 техник, оценка X рублей». Конкретный scope → конкретный бюджет → конкретный результат.

Отчётность по результатам пентеста: от таблицы к дашборду​

Требования к окружению​

Для построения дашборда не нужен специализированный софт. Минимальный стек:

КомпонентИнструментыНазначение
Трекинг находокJira, YouTrack, KaitenТикеты с severity, dates, assignee
ВизуализацияConfluence, Google Sheets, GrafanaГрафики MTTR, coverage, trends
Источник данныхPentest-отчёт + ретестПервичные данные по findings
Хранение историиGit-репозиторий или wikiКвартальные снимки для trend analysis

Критическое условие: каждая находка - отдельный тикет с полями Severity, Found Date, Status, Resolved Date, ATT&CK Technique ID. Без этих полей MTTR и coverage считаются вручную, а вручную - значит никогда.

Шаблон квартального отчёта для CISO​

Структура, проверенная на практике - не длиннее трёх страниц. Если длиннее - CISO не дочитает, CFO не откроет.

Страница 1 - Executive Summary. Risk Reduction в рублях (Breach Risk до и после). Количество Critical/High: найдено, закрыто, осталось. MTTR по severity: факт vs SLA.

Страница 2 - Операционные метрики. Attack Surface Coverage - что тестировали, что нет. ATT&CK Coverage Map - тактики и техники текущего квартала. Vulnerability Density Trend - график за 4+ кварталов. Remediation Rate по severity.

Страница 3 - Рекомендации и бюджет. Gaps в coverage: какие тактики ATT&CK не покрыты. Estimated cost закрытия gaps в следующем квартале. ROI текущего квартала в сравнении с предыдущими.

Измерение зрелости кибербезопасности: уровни программы​

Cobalt описывает четырёхуровневую модель зрелости пентест-программ, и она хорошо ложится на реальность. На первом уровне тестирование ad hoc - для compliance или по запросу клиента: здесь достаточно отслеживать количество Critical и базовый Remediation Rate. На втором появляются процессы и инструменты, добавляются MTTR и Test Cadence. На третьем подключается автоматизация и consistent cadence - включаются ATT&CK Coverage и Vulnerability Density Trends. На четвёртом - кросс-функциональные инициативы, continuous risk scoring и полная интеграция с DevSecOps-пайплайном.

Попытка внедрить метрики четвёртого уровня в компании первого - гарантированный провал: нет ни данных, ни процессов для их наполнения. Начинать стоит с трёх показателей (Critical Found, MTTR Critical, Remediation Rate) и наращивать по мере роста зрелости. Я это видел раз пять - приходит новый CISO, рисует дашборд на 20 метрик, через квартал половина пустая, через два - дашборд забыт.

По NIST Cybersecurity Framework v2.0, функция IDENTIFY (ID.AM-01 - инвентаризация активов) - фундамент для любых метрик coverage. Без актуального реестра активов Attack Surface Coverage невозможно посчитать: нельзя определить процент покрытия, если неизвестно общее количество. Функция DETECT (DE.AE-01 - baseline сетевых операций) критична для метрик false positive rate: без established baseline сигналы не с чем сравнивать.

Когда я начинал строить систему метрик, казалось, что главная сложность - формулы. Формулы тривиальны. Сложность в другом: заставить организацию собирать данные системно. Remediation Rate невозможно посчитать, если dev-команда не заводит тикеты на каждую находку. MTTR невозможно отследить, если в Jira нет поля Resolved Date. ATT&CK Coverage бессмысленна, если scope пентеста определяется не по модели угроз, а по принципу «потестируйте вот этот сайт».

По моему опыту, 80% компаний, заказывающих пентесты, не имеют ни одной метрики ремедиации. Отчёт уходит в PDF, PDF уходит в папку, через год приходит новый пентестер и находит те же самые находки. Это не security validation - это ритуал. Причём дорогой ритуал. И проблема здесь не техническая, а организационная: ни одна формула ROI не заработает, пока между пентест-командой и dev-командой нет SLA на remediation. Три метрики (Critical Found, MTTR Critical, Remediation Rate), один дашборд в Google Sheets, один квартальный срез. Через два квартала появится trend - а trend единственное, что убеждает CFO выделить бюджет на следующий год без двухчасовой дискуссии. Если хочешь отработать построение такой системы на практике - на WAPT эту связку «пентест → метрики → обоснование» разбирают в модуле по отчётности с реальными кейсами.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab