Аудит безопасности веб-приложения, сайта и API: ревью кода и проверка по OWASP Top 10

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

Фиксированная цена — от 200 000 ₽, срок 2–6 недельВоспроизведение и способ исправления по каждой находкеРаботаем на вашем стенде, боевую систему не атакуем

С чем приходят

Когда нужен аудит безопасности, а не просто обновление библиотек

Перед запуском продукта

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

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

Код есть, но неизвестно, что в нём оставлено на время разработки: тестовые учётные записи, отладочные адреса, ключи в репозитории. Лучше узнать до того, как это нашёл посторонний.

Добавили API или кабинет для клиентов

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

После инцидента или тревожного сигнала

Кто-то увидел чужой заказ, в логах странные запросы, пришло письмо от «исследователя». Нужно понять, одно ли это место или устройство системы целиком.

Что проверяем

Десять категорий OWASP Top 10: что смотрим в вашем приложении

OWASP Top 10 — известный список типовых рисков веб-приложений. Это ориентир, а не исчерпывающий перечень: сверх него смотрим то, что специфично для вашей системы. Если в приложении есть языковая модель, угрозы для неё разбирает отдельный аудит безопасности ИИ.

Категория
Что смотрим
Типичный признак
Как проверяем
КатегорияНарушение контроля доступаправа на сервере
Что смотримМожет ли пользователь открыть чужой объект, изменив номер в адресе, или вызвать действие, которое интерфейс скрыл
Типичный признакЗаказ или документ доступен по прямой ссылке без проверки владельца; роль «пользователь» вызывает административный метод
Как проверяемПрогон из-под каждой роли по матрице «роль — объект — действие», перебор идентификаторов
КатегорияОшибки криптографиихранение секретов
Что смотримКак хранятся пароли и токены, какой обмен идёт по защищённому каналу, как выдаются ключи
Типичный признакПароли без соли или с быстрым хешем, ключи шифрования лежат рядом с данными
Как проверяемЧтение кода и конфигурации, проверка настроек канала и срока жизни токенов
КатегорияВнедрениезапросы и команды
Что смотримКак пользовательский ввод попадает в запрос к базе, в команду ОС, в шаблон страницы
Типичный признакЗапрос собирается склейкой строк, ввод выводится в страницу без экранирования
Как проверяемЧтение мест, где ввод встречается с запросом, проверка типовых вариантов на стенде
КатегорияНебезопасное проектированиелогика сценариев
Что смотримМожно ли обойти порядок шагов, повторить платёж, получить скидку дважды, перебирать коды
Типичный признакОграничения есть только в интерфейсе, нет лимита попыток, статус заказа меняется любым запросом
Как проверяемРазбор сценариев вместе с вашим аналитиком, проверка граничных случаев
КатегорияОшибки настройкиокружение
Что смотримЧто открыто наружу, какие режимы отладки включены, какие заголовки и права файлов выставлены
Типичный признакПанель администрирования доступна из интернета, режим отладки включён, перечень каталогов открыт
Как проверяемСверка конфигурации с чек-листом и проверка снаружи на стенде
КатегорияУстаревшие компонентызависимости
Что смотримВерсии библиотек и сервера, известные уязвимости, поддерживаемые ли компоненты
Типичный признакБиблиотека не обновлялась годами, в сборку попал пакет, которым никто не пользуется
Как проверяемАвтоматическая проверка зависимостей и ручной разбор того, что она нашла
КатегорияОшибки идентификации и входааутентификация
Что смотримПодбор паролей, восстановление доступа, срок жизни сессии, выход, второй фактор
Типичный признакПисьмо восстановления выдаёт, есть ли такой адрес; сессия не заканчивается после смены пароля
Как проверяемПроверка сценариев входа и восстановления, чтение кода сессий
КатегорияЦелостность ПО и данныхсборка и обновления
Что смотримОткуда берутся зависимости и образы, кто может менять сборку, как проверяются загружаемые данные
Типичный признакСборка тянет пакеты без фиксации версий, десериализация данных из недоверенного источника
Как проверяемЧтение конвейера сборки и мест, где разбирается внешний ввод
КатегорияНедостатки журналированиясобытия и оповещения
Что смотримПишутся ли входы, отказы в доступе, смена прав; видит ли кто-нибудь эти записи
Типичный признакЖурнал есть, но в нём нет пользователя; секреты попадают в журнал открытым текстом
Как проверяемЧтение кода журналирования и проверка, что событие реально записалось
КатегорияПодделка серверных запросовобращения сервера вовне
Что смотримМожет ли пользователь заставить сервер обратиться по адресу, который он указал, и что сервер по пути увидит
Типичный признакЗагрузка картинки по ссылке или вебхук позволяет обратиться к внутренним адресам
Как проверяемПроверка функций загрузки по ссылке, вебхуков и обращений к внутренним службам
Метод

Как устроена проверка, чтобы отчёту можно было верить

Автоматический сканер видит часть проблем и находит много ложных. Поэтому у нас два прохода: быстрый автоматический и медленный ручной.

Сначала карта, потом проверка

Мы просим список ролей, перечень адресов и методов API и описание главных сценариев: регистрация, вход, оплата, выгрузка. Без карты проверка слепа: сканер не знает, что «этот заказ принадлежит другому клиенту». С картой права можно проверить так, как их проверит посторонний.

Что делает программа и что человек

  • Автоматические проверки: зависимости с известными дырами, секреты в репозитории и истории, типовые ошибки в коде, настройки сервера. Быстро и широко, но с ложными срабатываниями, поэтому каждое срабатывание разбирает инженер.
  • Ручная проверка прав. Права на сервере, обход порядка шагов, повтор операций, логика платежей. Сканер этого почти не видит, а именно здесь чаще всего оказывается серьёзное.
  • Чтение рискованных участков. Вход, права, загрузка файлов, обмен с внешними системами, места, где пользовательский ввод встречается с запросом.

Каждая находка воспроизводима

В отчёте у находки пять полей: где она (адрес, файл, строка), как воспроизвести (шаги, которые повторит ваш разработчик), чем грозит (что именно утечёт или сломается), насколько серьёзна и как исправить. Находку без воспроизведения отмечаем как «подозрение» и не смешиваем с подтверждёнными. Серьёзность считается по последствиям для вашего бизнеса, а не по названию категории.

Что проверяется где

Три типа объектов: сайт, API и кабинет — что отличается

Объект определяет набор проверок и срок. Связанные услуги: API и бэкенд и личные кабинеты.

Объект
Что это
Что ломается чаще всего
Что получаете
ОбъектСайт с формамипубличная часть
Что этоКорпоративные сайты, каталоги ведутся на одной системе управления содержимым с плагинами
Что ломается чаще всегоУстаревшая система и плагины, административный вход снаружи, формы без защиты от подбора и спама
Что получаетеПеречень уязвимых компонентов и порядок обновления, настройки административной части
ОбъектAPIдля приложений и партнёров
Что этоМетоды, которыми пользуются приложения, партнёры и интеграции
Что ломается чаще всегоПрава на уровне объекта, перебор идентификаторов, ключи без срока жизни, лишние поля в ответе, нет лимитов
Что получаетеМатрица «роль — метод — объект» с результатами прогона и список методов, которые нужно закрыть
ОбъектЛичный кабинетс ролями и данными клиентов
Что этоКабинеты клиентов, партнёров, сотрудников, где есть документы и персональные данные
Что ломается чаще всегоДоступ к чужим документам, повышение роли, восстановление доступа, загрузка файлов
Что получаетеРезультаты прогона из-под каждой роли и рекомендации по разделению данных клиентов
Глубина и цена

Три уровня аудита: размер системы, срок и цена

Аудит стоит на той же шкале, что и аудит кода и архитектуры: цена зависит от объёма того, что нужно прочитать и проверить. Если нужны обе работы, объём согласуется вместе.

Уровень
Пример
Цена и срок
Что получаете
УровеньОдно приложениеодин репозиторий, один стенд
ПримерСайт с кабинетом, один API, внутренний сервис, который открывают наружу
Цена и срок200 000 ₽ · 2–3 недели
Что получаетеОтчёт с находками по OWASP Top 10, матрица прав, порядок исправления
УровеньНесколько приложенийсвязка из сервисов
ПримерСайт, API, кабинет и обмен с учётной системой
Цена и срок350 000 ₽ · 3–4 недели
Что получаетеТо же плюс проверка границ между сервисами и схема точек входа
УровеньКрупный контурмного систем и закрытая среда
ПримерКорпоративный контур с несколькими командами и требованиями служб безопасности
Цена и срок500 000 ₽ · 4–6 недель
Что получаетеТо же плюс сводный отчёт по системам и план исправлений по очереди
УровеньПовторная проверкапосле исправлений
ПримерВы закрыли находки и хотите убедиться
Цена и срокпо согласованию
Что получаетеЗаписка: что закрыто, что осталось, что появилось нового
Границы

Чем аудит отличается от пентеста и аттестации

Ревью кода и конфигурации

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

Пентест

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

Аттестация и соответствие

Проверка соответствия требованиям регуляторов и аттестация объектов требует лицензии. Лицензии ФСТЭК у нас нет, аттестацию мы не проводим. Аудит может подготовить материал для неё, но не заменяет её.

Процесс

Как идёт аудит

До начала — Рамки и доступы

Подписываем NDA, согласуем объём и стенд с вашей службой безопасности. Определяем, что проверяем, чего не трогаем и кого предупредить. Боевую систему без вашего письменного согласия не трогаем.

Дни 1–3 — Карта

Получаем роли, список адресов, схему развёртывания и главные сценарии. Поднимаем стенд и фиксируем, что пришлось выяснять устно.

Недели 1–2 — Проверка

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

Конец срока — Отчёт

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

После — Разбор на созвоне

Проходим отчёт с вашими разработчиками, отвечаем на вопросы, помогаем составить задание на исправление. Повторная проверка по желанию.

Что делаем

Из чего состоит работа и сколько она стоит

Цены — по тарифам. Исправление найденного оценивается отдельно, заказывать его у нас не обязательно.

Аудит одного приложения

Карта, автоматические и ручные проверки по OWASP Top 10, ревью рискованного кода и конфигурации, отчёт с порядком исправления.

200 000 ₽ · 2–3 недели

Аудит нескольких приложений

Плюс проверка границ между сервисами, ключей и токенов обмена, схема точек входа.

350 000 ₽ · 3–4 недели

Аудит крупного контура

Плюс сводный отчёт, приоритеты по системам и учёт ограничений закрытой среды.

500 000 ₽ · 4–6 недель

Исправление найденного

Правки в коде и конфигурации по отчёту, если вы хотите поручить их нам. Оценка по каждой находке в отчёте, этап с приёмкой.

после аудита · от 150 000 ₽

Сопровождение

Повторные проверки перед релизами, разбор обращений, обновление зависимостей. Пакет на 60 000 ₽ в месяц — это до 12 часов. Сверх пакета — 5 000 ₽ в час.

20 000 / 60 000 / 120 000 ₽ в месяц
Цена

Что двигает цену аудита внутри вилки

Число ролей и методов

Работа растёт по числу пар «роль — объект», а не по числу страниц. Приложение с двумя ролями и приложение с шестью ролями и правами на поля стоят по-разному.

Размер кода и разнообразие технологий

Несколько языков, самописный фреймворк или большая история правок увеличивают время чтения. Это видно на созвоне.

Доступность стенда и людей

Если стенд готов, а разработчик отвечает в течение дня, срок короче. Если стенда нет и его надо собирать, добавляется неделя.

Закрытая среда

Работа внутри контура без выноса кода занимает больше времени на согласование доступов и подготовку.

Контроль

Что остаётся у вас и чего мы не делаем

Остаётся у вас

  • Отчёт, матрица прав и сводка: вам по акту, наши черновики после сдачи не хранятся.
  • Исходный код остаётся в вашем контуре, на свои машины мы его не копируем без письменного согласия.
  • Воспроизведение по каждой находке: вашему разработчику не нужно нас, чтобы понять, что чинить.
  • Право остановиться после аудита: исправление не обязательно заказывать у нас.
  • Письменный критерий приёмки до начала: что должно быть в отчёте.

Мы этого не делаем

  • Не атакуем боевые системы и не проводим пентест; не проверяем защиту сети.
  • Не проводим аттестацию и проверку на соответствие требованиям регуляторов, лицензии ФСТЭК у нас нет.
  • Не оказываем услуги SIEM, WAF и защиты от DDoS и не дежурим круглосуточно.
  • Не выставляем системе одну оценку «безопасно или нет»: в отчёте находки, а не баллы.
  • Не берём работы дешевле 150 000 ₽ и не обещаем, что после аудита уязвимостей не останется: отчёт описывает то, что найдено в согласованном объёме.
Соседние услуги

Аудит безопасности, аудит кода или аудит ИИ: что выбрать

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

Если внутри приложения работает языковая модель, агент или поиск по документам, добавляются угрозы, которых нет в списке для обычных приложений. Их разбирает аудит безопасности ИИ-системы. Если проверка выявила, что исправлять придётся заметную часть системы, это уже работа для сопровождения ПО или отдельного этапа разработки.

Инструменты

Чем проверяем

Проверки и чтение кода
  • Статический анализ кода и поиск секретов в репозитории и истории
  • Проверка зависимостей по базам известных уязвимостей
  • Ручное чтение кода входа, прав, загрузки файлов и обмена
  • Проверка запросов к API по матрице ролей, повтор и перебор идентификаторов
Стенд и отчёт
  • Отдельный стенд с копией структуры данных, без боевых данных
  • Проверка конфигурации сервера, контейнеров и конвейера сборки
  • Воспроизведение по шагам для каждой находки
  • Отчёт со степенью серьёзности и порядком исправления
Материалы

Материалы по теме

Статья

Мультиарендность в SaaS: как разделить данные клиентов

Три схемы изоляции и тесты «клиент A не видит клиента B»; пригодится, если проверяется платформа для многих организаций.

  • Три схемы
  • Политики на уровне строк
  • Тесты изоляции
Читать →
Статья

Проектирование API для интеграций

Как устроить права, ключи и лимиты в API, которым пользуются чужие системы.

  • Права
  • Ключи
  • Лимиты
Читать →
Статья

Как выбрать подрядчика на разработку

Вопросы, которые стоит задать подрядчику про безопасность, исходники и приёмку до подписания договора.

  • Вопросы
  • Исходники
  • Приёмка
Читать →
Заявка

Расскажите, какое приложение нужно проверить

Сорок минут созвона: что за приложение, кто им пользуется, есть ли исходники и стенд. По итогам скажем, какой уровень аудита подходит, и назовём цену и срок.

Спасибо, заявка отправлена. Ответим в течение рабочего дня.

Не удалось отправить. Напишите в телеграм или позвоните.

Вопросы

Частые вопросы: аудит безопасности веб-приложения

Сколько стоит аудит безопасности веб-приложения?

Цена зависит от размера системы и называется до начала. Одно приложение: 200 000 ₽ и 2–3 недели. Несколько связанных приложений: 350 000 ₽ и 3–4 недели. Крупный контур с закрытой средой: 500 000 ₽ и 4–6 недель. Если продолжаете работать с нами, сумма вычитается из первого этапа.

Что я получу по итогам аудита?

Отчёт, где у каждой находки указаны место, шаги воспроизведения, серьёзность и способ исправления, матрицу прав «роль — объект — действие», сводку для руководителя и порядок исправления. Находки без воспроизведения помечены как подозрения.

Это пентест?

Нет. Мы читаем код и конфигурацию и проверяем типовые уязвимости на отдельном стенде. Моделирование атак на боевую систему, социальную инженерию и проверку защиты сети мы не проводим. Аттестацию тоже не проводим, лицензии ФСТЭК у нас нет.

Нужен ли доступ к боевой системе?

Нет, достаточно исходников и стенда с копией структуры данных. Если реальные данные нельзя передавать, работаем на обезличенных или тестовых. Это ограничение записывается в отчёте. На боевой системе без вашего письменного согласия ничего не проверяем.

Вы исправляете найденное?

Только если вы захотите. Исправление оценивается отдельно: каждая находка в отчёте идёт с оценкой трудоёмкости, работа делается этапом с приёмкой. Аудит можно заказать и не заказывать ничего дальше.

Как вы работаете с закрытым контуром?

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

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.