The pentest report
У отчёта о пентесте два читателя — руководитель, решающий, приемлем ли риск, и инженер, применяющий исправление. Один документ должен служить обоим, плюс защитнику, читающему его как дорожную карту. Выстрой его так, чтобы каждый получил нужное на первой же странице.
Работа закончена. У тебя были подписанный scope, окно, письменная авторизация и документ rules of engagement, точно указывавший, какие хосты можно трогать, а какие нельзя. Ты нашёл девять находок на авторизованных целях, включая один SSRF к metadata-учёткам, способный скомпрометировать весь облачный аккаунт. И теперь единственное, что заказчик когда-либо увидит, единственный артефакт, переживающий работу, — это PDF. Вот ловушка, топящая юниорские отчёты: вице-президент по инженерии открывает этот PDF на совещании по бюджету, читает три страницы HTTP-запросов и CVSS-векторов, не понимает ничего и решает, что трата не стоила того. А бэкенд-инженер, который мог бы починить SSRF, так и не получает задачу, потому что единственный человек, распределяющий время, отскочил от первой страницы. Те же девять находок. Отчёт провалился не потому, что тестирование было слабым, а потому, что он написан для одного читателя, когда читателей было двое.
К концу урока ты поймёшь, как выстроить один отчёт так, чтобы руководитель мог принять решение о риске, а инженер — применить исправление, и как защитник читает тот же документ как дорожную карту устранения.
Авторизация прежде всего: отчёт — это запись, а не просто результат
Всё в этом юните предполагает, что работа была авторизована: подписанный scope, rules of engagement и определённое окно — так, как фаза pre-engagement в PTES требует до отправки первого пакета. Отчёт — это место, где авторизация становится постоянной записью. Хороший отчёт повторяет scope и даты вверху именно потому, что месяцы спустя именно этот документ доказывает: ты тестировал только то, что было разрешено, и тогда, когда было разрешено. Находка без контекста scope вокруг неё — это обвинение; находка внутри чётко ограниченной работы — это доказательство. Так что отчёт — не только список багов: это артефакт, привязывающий каждое наблюдение к авторизации, сделавшей его законным, и именно эта рамка позволяет защитнику доверять ему и действовать, а не воспринимать его как угрозу.
Два читателя, один документ
У отчёта о пентесте две основные аудитории, которые никогда не читают одну и ту же страницу, и ключевой навык — обслужить обе в одном документе, не размывая ни одну.
Руководитель — вице-президент, CISO, совет директоров заказчика — читает, чтобы принять решение: приемлем ли наш риск, нужно ли тратить, уязвимы ли мы перед запуском или аудитом. У него минуты, а не часы, и он не читает HTTP-запросы. Что ему нужно — на первой странице: честная общая картина риска, число находок по уровню серьёзности, два-три вопроса, которые действительно важны для бизнеса, и ясное «вот что может случиться и вот примерно во что обойдётся починить». Зарой это под техническими деталями — и принимающий решение никогда до этого не доберётся.
Инженер — бэкенд-разработчик, SRE, security-чемпион — читает, чтобы действовать: какой обработчик, какое именно изменение, как проверить, что починено. Он будет читать глубокую техническую секцию, и для него краткость — враг; ему нужны полное воспроизведение, точный запрос, исправление корневой причины и доказательства. То, что для руководителя шум, для инженера — вся ценность отчёта.
Архитектура, обслуживающая обоих, — многослойная, а не разделённая: один документ, упорядоченный от наименее технического к наиболее. Executive summary стоит впереди и самодостаточен — читаем сам по себе при нулевой подготовке в безопасности. За ним таблица находок — мост, общий для обеих аудиторий. За ней детальные находки несут всё, что нужно инженеру. Никого не заставляют читать слой не для него, и один и тот же артефакт отвечает на оба вопроса.
Что входит в каждый слой
Executive summary — страница с наибольшим рычагом в отчёте и та, что юниоры пишут хуже всего. Это проза, а не таблица, и она отвечает на четыре вопроса в бизнес-терминах: что тестировали и когда (scope и даты, одна строка), какова общая картина риска (защитимое предложение, например «приложение хорошо построено, но один конфигурационный изъян раскрывает облачные учётки»), какие немногие вещи действительно важны (назови две-три находки, чьё влияние почувствует нетехнический читатель — «атакующий мог бы прочитать платёжные данные каждого клиента»), и какова форма работы (примерный объём, это быстрые фиксы или архитектурные). Никаких тел запросов, никаких CVSS-векторов, никакого жаргона — если умный неинженер не может по этому действовать, summary провалился.
Таблица находок — мост. Одна строка на находку, отсортированная по серьёзности, ровно столько, чтобы триажить: заголовок, серьёзность, затронутый компонент и однострочное влияние. Руководитель просматривает её, чтобы перепроверить summary; инженер просматривает её, чтобы построить очередь работ, и кликает в строки, которые его. Детальные находки за ней несут полную анатомию, которую ты научился писать, — воспроизведение с ожидаемым-против-фактического, конкретное влияние, обоснованную серьёзность, исправление корневой причины — одну самодостаточную секцию на находку. А приложения держат то, что ни одной аудитории не нужно по тексту, но обеим иногда нужно: сырые доказательства запрос/ответ, методологию и инструменты (чтобы тест был повторяемым, а покрытие — аудируемым) и точные scope и авторизацию.
| Слой | Основной читатель | На какой вопрос отвечает | Как выглядит «хорошо» | Режим отказа |
|---|---|---|---|---|
| Executive summary | VP / CISO / совет | Приемлем ли наш риск; тратим ли мы? | Картина риска простым языком + 2–3 значимых вопроса в бизнес-терминах | Жаргон и HTTP-дампы → решающий отскакивает, ничего не финансируется |
| Таблица находок | Оба | Сколько, насколько плохо, где? | Одна строка на находку, по серьёзности: заголовок, серьёзность, компонент, влияние одной строкой | Всё «High» → нет сигнала триажа; таблица не может быть очередью работ |
| Детальные находки | Инженер | Что именно я меняю и как проверяю? | Репро (ожидаемое-против-фактического), конкретное влияние, обоснованная серьёзность, фикс корня | Тонкое репро / «санитизируй ввод» → не воспроизвести или чинят не тот слой |
| Приложения | Инженер / аудитор | Покажи доказательства и покрытие | Сырые запрос/ответ, методология, инструменты, точные scope + авторизация | Нет методологии/scope → покрытие неаудируемо, нельзя чисто перетестировать |
Коммуникация риска без «волки-волки»
Executive summary живёт и умирает на калибровке. Два режима отказа зеркальны. Преувеличение — рисовать компетентное приложение пожаром пятой категории, чтобы выглядеть дотошно, — заставляет не доверять отчёту и сжигает отношения; реальный критикал следующего отчёта обесценится, потому что в прошлый раз всё было кризисом. Преуменьшение — смягчить единственную действительно серьёзную находку, чтобы readout ощущался спокойнее, — хуже, потому что позволяет бизнесу невольно отгрузить риск, который его кончит. Зрелый ход — честное предложение о картине, которое отделяет сигнал от шума: «приложение в целом хорошо построено; восемь low и informational находок — рутинное усиление, но один конфигурационный изъян даёт атакующему прочитать облачные учётки и должен быть исправлен до запуска». Это предложение позволяет нетехническому читателю распределить внимание правильно — что и есть вся работа summary.
Риск надо выражать в последствии, а не в механизме. Руководитель не действует по «SSRF к metadata-эндпоинту»; он действует по «атакующий мог бы получить ключи к нашему облачному аккаунту и доступ ко всем данным клиентов». Переводи каждую заглавную находку из того, что она есть, в то, что она позволяет кому-то сделать с бизнесом, и ставь число на вероятность и усилие там, где честно можешь, потому что «высокое влияние, низкое усилие на починку» — предложение, которое VP может профинансировать прямо на том совещании, где он его читает.
▸Почему это работает
Почему именно перетест решает, была ли у отчёта хоть какая-то ценность? Потому что находка не закрыта, когда инженер говорит «починил», — она закрыта, когда кто-то заново прогоняет точные шаги воспроизведения и баг больше не происходит. Вот почему герметичное, воспроизводимое репро в детальной находке окупается дважды: один раз — подтвердить баг, второй — подтвердить фикс. Отчёт, который нельзя перетестировать, производит «мы думаем, что починили», что под аудитом или пробоем не стоит ничего. Воспроизведение, написанное тобой, чтобы инженер увидел баг, — тот же скрипт, которым перетест доказывает, что он исчез; и достоверная работа кончается секцией перетеста, помечающей каждую находку как fixed, partially-fixed (фикс упустил вариант) или still-open против тех же шагов. Нет перетеста — нет закрытия; нет закрытия — решение о риске, принятое руководителем, принято на обещании.
Как защитник читает отчёт
Защитник — команда, владеющая системой, — читает отчёт иначе, чем и руководитель, и реализующий инженер, и понимание его линзы заставляет тебя написать лучше. Он читает его как приоритизированную дорожную карту устранения и карту покрытия. Он берёт отсортированную по серьёзности таблицу и превращает её в бэклог, упорядоченный по снижению-риска-на-усилие, а не по сырому рангу: дешёвые высокоущербные фиксы сначала, архитектурные — в график. Он читает приложение с методологией, чтобы узнать, что не тестировалось, потому что пробелы в твоём покрытии — его следующие слепые зоны: непротестированная админ-панель — риск, который он теперь знает моделировать. Он добывает паттерны: три отдельные IDOR-находки — не три бага, а один отсутствующий паттерн авторизации, и устойчивый фикс защитника — общий слой контроля доступа, а не три разовые заплатки. И он скармливает находки обратно в свою модель угроз, чтобы тот же класс не повторился. Отчёт, который ты пишешь со взглядом-атакующего, становится приоритизационным входом защитника — вот почему структура, калиброванная серьёзность и аудируемая методология не косметические тонкости, а то, что делает документ пригодным на той стороне.
Твоя работа нашла один SSRF к metadata-учёткам (Critical) плюс восемь low/informational находок усиления. Ты пишешь отчёт, который прочтут и вице-президент по инженерии, и бэкенд-инженер. Какой подход обслуживает обоих читателей?
VP открывает твой отчёт на совещании по бюджету, и первое, что он видит, — страница HTTP-запросов и CVSS-векторов для критического SSRF. Каков наиболее вероятный исход?
Защитник в команде заказчика читает твой отчёт и видит три отдельные IDOR-находки на трёх эндпоинтах. Как зрелый защитник действует по этому в отличие от юниора?
Упорядочь секции многослойного отчёта о пентесте спереди назад — от наименее технического к наиболее, так, как документ задуман читаться:
- 1 Executive summary: картина риска простым языком + 2–3 значимые находки в бизнес-терминах
- 2 Таблица находок: одна отсортированная по серьёзности строка на находку (заголовок, серьёзность, компонент, влияние одной строкой)
- 3 Детальные находки: репро с ожидаемым-против-фактического, конкретное влияние, обоснованная серьёзность, фикс корня
- 4 Приложения: сырые доказательства запрос/ответ, методология и инструменты, точные scope и авторизация
- 5 Секция перетеста: каждая находка заново прогнана против своих шагов репро и помечена fixed / partial / open
- 01У отчёта о пентесте два основных читателя. Кто они, что нужно каждому и почему один многослойный документ обслуживает обоих лучше, чем два отдельных отчёта?
- 02Как защитник читает отчёт о пентесте иначе, чем руководитель и реализующий инженер, и что это должно изменить в том, как ты его пишешь?
Отчёт о пентесте — единственный артефакт, переживающий работу, и у него два читателя, никогда не делящих страницу. Руководитель читает, чтобы принять профинансированное решение о риске за минуты, и ему нужен summary простым языком впереди — честная картина риска и две-три значимые находки, выраженные как бизнес-последствие («атакующий мог бы прочитать платёжные данные каждого клиента»), а не механизм («SSRF к metadata-эндпоинту»). Инженер читает, чтобы действовать, и ему нужна полная деталь: воспроизведение с ожидаемым-против-фактического, конкретное влияние, обоснованная серьёзность и фикс корня. Способ обслужить обоих — многослойный документ от наименее технического к наиболее: executive summary, затем отсортированная по серьёзности таблица находок как общий мост, затем детальные находки, затем приложения с доказательствами, методологией и scope с авторизацией, делающими тест аудируемым, — а не два отдельных отчёта, дрейфующих врозь. Калибруй серьёзность честно: преувеличение жжёт доверие, так что следующий реальный критикал обесценивается, преуменьшение позволяет бизнесу отгрузить риск, который его кончит. И помни: у документа есть третий читатель — защитник, который превращает твои отсортированные по серьёзности находки в дорожную карту устранения, читает твою методологию, чтобы найти свои непротестированные слепые зоны, считает три IDOR одним паттерном для системного фикса и скармливает всё обратно в свою модель угроз. Работа не закончена, когда PDF отгружен, — она закончена, когда каждая находка перетестирована против своих шагов воспроизведения и помечена fixed, partial или open. Нет перетеста — нет закрытия.
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.