Отчёт по пентесту для начинающих: доказательства, риск, воспроизводимость и рекомендации по исправлению

Отчёт по пентесту — это не список уязвимостей, а документ, который помогает заказчику принять решение о выделении ресурсов на исправление. Хороший отчёт отвечает на три вопроса: что найдено, насколько это опасно и что конкретно делать. Если хотя бы один из вопросов остаётся без ответа, документ теряет практическую ценность.

Кому адресован отчёт и почему это важно​


У отчёта два основных читателя с разными потребностями:

  • Техническая команда (разработчики, администраторы) — им нужны точные шаги воспроизведения, затронутые компоненты и конкретные патчи или конфигурационные изменения.
  • Руководство и бизнес-заказчик — им нужен уровень риска в понятных терминах, влияние на бизнес-процессы и приоритизация исправлений.

Поэтому отчёт обычно содержит два слоя: executive summary для принятия решений и техническую часть для исполнения. Смешивать их в один поток — частая ошибка начинающих.

Структура отчёта: минимальный каркас​


Ниже — базовая структура, которая покрывает требования большинства заказчиков и соответствует рекомендациям NIST SP 800-115 по документированию результатов тестирования.

РазделНазначениеОбъём
Executive SummaryОбщая картина риска для руководства1–2 страницы
Scope и методологияЧто тестировалось, как и в каких рамках0,5–1 страница
Находки (Findings)Детальное описание каждой уязвимостиОсновная часть
Рекомендации по исправлениюКонкретные действия для каждой находкиВходит в каждую находку или отдельный раздел
ПриложенияЛоги, скрины, сырые данныеПо необходимости

Executive Summary: что писать и чего избегать​


Этот раздел читают люди, которые не будут погружаться в технические детали. Задача — дать картину риска за две минуты.

Что включить:

  • Количество находок по уровням критичности (Critical, High, Medium, Low, Informational).
  • Краткое описание наиболее серьёзных рисков и их потенциального влияния на бизнес.
  • Общую оценку зрелости безопасности тестируемого объекта.
  • Приоритетные действия на ближайшие 30/60/90 дней.

Чего избегать:

  • Технического жаргона без пояснений.
  • Перечисления всех находок подряд — это задача основного раздела.
  • Оценочных суждений без опоры на данные («безопасность в ужасном состоянии»).

Scope и методология: фиксация границ​


Раздел фиксирует, что именно было в рамках теста и какие методы применялись. Это защищает обе стороны: пентестера — от претензий по поводу «не найденных» уязвимостей за пределами scope, заказчика — от неожиданностей.

Что указать:

  • Целевые системы, IP-адреса, домены, приложения.
  • Тип тестирования: black box, grey box, white box.
  • Временные рамки и ограничения (например, запрет на DoS-тестирование).
  • Инструменты и техники на высоком уровне.
  • Ссылку на согласованный документ (Rules of Engagement, договор).

Анатомия одной находки​


Каждая уязвимость в отчёте описывается по единому шаблону. Это делает документ предсказуемым и упрощает работу разработчику, который будет исправлять проблему.

Заголовок и идентификатор​


Короткое название, отражающее суть: «SQL-инъекция в параметре id эндпоинта /api/products». Присвойте внутренний идентификатор (например, FINDING-001), чтобы на него можно было ссылаться в переписке.

Уровень критичности и оценка CVSS​


Уровень критичности (Critical / High / Medium / Low / Informational) определяется через CVSS-скоринг. Для начинающих важно понимать разницу между базовыми метриками:

МетрикаЧто описываетПримеры значений
Attack Vector (AV)Как атакующий получает доступNetwork, Adjacent, Local, Physical
Attack Complexity (AC)Насколько сложна эксплуатацияLow, High
Privileges Required (PR)Нужны ли учётные данныеNone, Low, High
User Interaction (UI)Требуется ли действие жертвыNone, Required
Impact (C/I/A)Влияние на конфиденциальность, целостность, доступностьNone, Low, High

Не завышайте и не занижайте оценку. Если эксплуатация требует аутентификации администратора, это снижает Attack Vector и повышает Privileges Required — итоговый балл будет ниже, и это нормально.

Описание уязвимости​


Объясните корневую причину, а не только симптом. Разработчику важно понять, почему проблема возникла, чтобы исправить её системно, а не поставить заплатку.

Плохо: «Найдена XSS-уязвимость».
Хорошо: «Параметр search_query выводится в HTML-ответ без экранирования. Приложение не применяет контекстно-зависимое кодирование, что позволяет внедрить произвольный JavaScript в страницу результатов поиска».

Шаги воспроизведения (Proof of Concept)​


Это ключевой раздел для воспроизводимости. Разработчик или другой специалист по безопасности должен суметь повторить находку, следуя вашим инструкциям.

Требования к PoC:

  • Каждый шаг нумерован и однозначен.
  • Указаны конкретные URL, параметры, заголовки, payload.
  • Приложены скриншоты или HTTP-запросы/ответы.
  • Payload безопасен для данных: не удаляет записи, не шифрует файлы, не отправляет данные наружу.

Пример структуры PoC для XSS:

Код:
1. Открыть https://target.example.com/search
2. Ввести в поле поиска следующий payload:
   <script>alert(document.cookie)</script>
3. Нажать «Поиск».
4. Наблюдать: выполняется alert с содержимым cookie,
   что подтверждает отражённую XSS.

Если уязвимость требует аутентификации, укажите роль и минимальные привилегии, при которых она воспроизводится.

Затронутые компоненты​


Перечислите конкретные файлы, эндпоинты, версии библиотек или конфигурационные параметры. Чем точнее — тем быстрее разработчик найдёт нужное место в коде.

Влияние на бизнес (Impact)​


Опишите, что произойдёт при успешной эксплуатации, в терминах бизнеса: утечка данных клиентов, остановка сервиса, компрометация учётных записей, финансовый ущерб, репутационные потери. Это помогает руководству обосновать приоритет исправления.

Рекомендации по исправлению: конкретика вместо общих слов​


Рекомендация «исправьте XSS» бесполезна. Хорошая рекомендация содержит:

  • Конкретное действие: применить контекстное экранирование при выводе пользовательского ввода в HTML.
  • Ссылку на механизм или библиотеку: использовать Content-Security-Policy заголовок как дополнительный слой защиты.
  • Приоритет: исправить в течение 7 дней для Critical, 30 дней для High.
  • Способ проверки: после исправления повторить PoC и убедиться, что payload больше не исполняется.

Для разных классов уязвимостей рекомендации различаются:

Класс уязвимостиПример конкретной рекомендации
SQL-инъекцияИспользовать параметризованные запросы (prepared statements) вместо конкатенации строк
XSSПрименить контекстно-зависимое экранирование на этапе вывода; добавить CSP-заголовок
IDORРеализовать проверку прав доступа на сервере для каждого запрашиваемого ресурса
Устаревшее ПООбновить компонент до версии, в которой уязвимость исправлена; свериться с advisory вендора
Слабая конфигурацияОтключить ненужные сервисы, применить baseline-конфигурацию (CIS Benchmark)

Воспроизводимость: почему это критично​


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

  • Фиксируйте точную версию приложения, окружение, дату и время теста.
  • Сохраняйте сырые HTTP-запросы (например, экспортом из прокси-инструмента).
  • Если уязвимость зависит от состояния (гонка, кэш, сессия), опишите предусловия.
  • Убедитесь, что PoC не зависит от ваших локальных настроек или специфичного состояния браузера.

Типичные ошибки начинающих​


Отсутствие приоритизации. Все находки помечены как High. Заказчик не понимает, за что браться в первую очередь. Используйте CVSS и бизнес-контекст для ранжирования.

Скриншоты без контекста. Скриншот алерта без указания, какой запрос его вызвал и на каком шаге, бесполезен для воспроизведения.

Копирование описаний из сканеров. Автоматические сканеры дают общее описание уязвимости, но не привязывают его к конкретному месту в приложении заказчика. Отчёт должен содержать привязку.

Рекомендации уровня «используйте безопасное кодирование». Это не действие. Разработчику нужно знать, какую функцию, библиотеку или паттерн применить в конкретном месте.

Отсутствие remediation verification. Укажите, как проверить, что исправление сработало. Без этого разработчик может закрыть тикет, не убедившись в результате.

Формат и оформление​


  • Используйте единый шаблон для всех находок — это ускоряет чтение и поиск.
  • Нумеруйте находки и давайте им короткие заголовки.
  • Прикладывайте сырые данные (HTTP-запросы, логи) в приложение, а не в тело отчёта, чтобы не перегружать основной текст.
  • Если отчёт содержит конфиденциальные данные (учётные записи, токены), передавайте его по защищённому каналу и согласуйте порядок хранения.

Чек-лист перед отправкой отчёта​


  • [ ] Executive Summary понятен неспециалисту и содержит приоритизацию.
  • [ ] Scope зафиксирован и совпадает с согласованным документом.
  • [ ] Каждая находка содержит: заголовок, CVSS, описание, PoC, impact, рекомендацию.
  • [ ] PoC воспроизводим другим специалистом без дополнительных вопросов.
  • [ ] Рекомендации конкретны и содержат способ проверки исправления.
  • [ ] Нет находок без привязки к конкретному компоненту или эндпоинту.
  • [ ] Конфиденциальные данные не включены в отчёт в открытом виде без необходимости.
  • [ ] Документ прошёл вычитку на предмет опечаток в URL, параметрах и payload.

Источники​


 
Назад
Верх Низ