Привет! Меня зовут Сергей Домнин, со мной моя коллега Анастасия Есина. Мы руководители направлений по информационной безопасности в SM Lab. В этой статье мы расскажем о таком методе оценки защищенности, как тестирование на проникновение, или пентест.
Немного печальной статистики
Начнем с определения понятия «уровень защищенности».
Уровень защищенности – это состояние системы, компании, продукта, их способность противостоять угрозам и внешнему негативному воздействию. Высокий уровень защищенности позволяет оберегать данные клиентов, обеспечивать безопасность транзакций, а также поддерживать бесперебойную работу продуктов и систем.

Если обратимся к статистике ГК «Солар» за 2022-2023 гг., увидим следующее: только 7% компаний имеет средний или высокий уровень защищенности. У более 90% слабо защищен внешний периметр, что может привести к достаточно печальным последствиям. Например, хакеры могут украсть деньги, данные, зашифровать сервера и попросить выкуп, в самых худших случаях – сломать целый бизнес-процесс.
Финансовые последствия одной хакерской атаки – от 7 млн рублей (конечную сумму определить трудно). В среднем компания тратит на разрешение инцидентов по информационной безопасности от 20 и более млн рублей в год. Что касается восстановления процессов, оно может длиться не менее 5 дней.

Можно ли что-то сделать для предотвращения взломов, утечек, кражи денежных средств и данных? Да. Отличной практикой в таком случае будет пентест.

Пентест: что такое и зачем нужен
Пентест (Penetration Testing) – это поиск критичных уязвимостей с целью продемонстрировать возможность проникновения в инфраструктуру и оказания негативного воздействия на сервисы, приложения и данные.
Основная цель пентеста не просто найти те самые уязвимости, но и составить рекомендации для их дальнейшего устранения.

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

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

Существуют следующие методики:
«Черный ящик», или симуляция реальной атаки. Если речь о веб-приложении, то команде достаточно только URL, после чего они самостоятельно проводят разведку и ищут возможные точки развития атаки;
«Серый ящик». Помимо самого URL у пентестеров есть еще какие-то ограниченные доступы системы. Такой вид пентеста помогает за более короткий промежуток времени находить больше уязвимостей, т.к. уже не надо ломать админку или учётку;
«Белый ящик». Плюсом к цели дается вся документация, архитектура, код и доступы к другим системам. Это самый глубокий вид пентеста, и он больше моделирует поведение злоумышленников, действующих внутри компании.
Направления атаки
Если говорить про направления атаки, то обычно проверяют следующие параметры (картинка ниже):

Если с первыми пятью всё понятно, то отдельно следует пояснить шестой пункт: как бы ни была защищена инфраструктура, через манипуляции с сотрудниками (так называемая «социальная инженерия») она может быть скомпрометирована. Необходимо проводить регулярные тестовые фишинговые рассылки среди персонала, в которых предупреждать об опасных письмах, атаках в Telegram, WhatsApp и по телефону – таким образом можно проверить, насколько сотрудники готовы к этим атакам, как развита культура ИБ, а по результатам корректировать вектор развития практики Awareness.
Критерии, по которым назначается пентест
Критериев несколько, основные из них:
продукт вообще никогда не проверялся, поэтому стоит провести работы для понимания его уровня защищенности;
потенциальные риски, выявленные в ходе проверок, которые после будут дополнительно подвергнуты пентесту;
продукт планируется к публикации в Интернете, где «страшные хакеры» только сидят и ждут, чтобы что-нибудь взломать. Соответственно, нужно удостовериться, что риски компрометации низкие;
продукт или доработка бизнес-критична, т.е. именно эта фича, её работа очень важна, поэтому надо проверить чисто на всякий случай;
проверка на регулярной основе приложений и инфраструктуры, чтобы понимать текущий уровень защищенности.
Этапы проведения пентеста

Теперь обсудим жизненный цикл практики тестирования на проникновение.
Представим, что к владельцу продукта (Product Owner, далее PO) приходит ИБшник и говорит: «Привет, мы сейчас будем проверять твой продукт на безопасность!» Чтобы пентест прошел гладко и PO с командой остались довольны, необходимо четко обозначить обязанности, этапы, сроки и ключевых лиц.
Во-первых, уведомить ответственных, которые, помимо условного PO, тоже должны знать, что проходит пентест: проджект-менеджера, кураторов, отдел эксплуатации и др. Во-вторых, собрать информацию (например, архитектурные схемы), а также выдать доступы, после чего вместе с PO определить дату начала работ. Обычно надо укладываться под конец цикла разработки (если команда работает по итеративной модели): так проще закладывать время на закрытие обнаруженных уязвимостей.
Пока команда занимается тестированием, для PO обычно ничего не происходит. Если будут обнаружены критичные баги, то пентестеры сообщают об этом команде прямо в ходе проведения работ, но чаще всего по окончании просто создается артефакт – отчет с рекомендациями для ответственных за продукт. После отработки уязвимостей вместе с командой проводится повторная проверка. Если пентестеры подтверждают, что уязвимость больше не воспроизводится, можно считать, что она официально закрыта.
Результаты пентеста

Среднестатистический отчет по результатам пентеста обычно состоит из следующих разделов:
номер ошибки и краткое описание;
уровень опасности по CVSS, который помогает приоритизировать уязвимости;
вектор CVSS – этот параметр больше нужен безопасникам. В этих цифрах и буквах зашифровано влияние на конфиденциальность, целостность, доступность, а также привилегии, которые нужны для эксплуатации той или иной уязвимости;
сервис/приложение – что именно пентестили;
платформа – Web, iOS, Android или инфраструктура;
статус воспроизводится/не воспроизводится: иногда бывает, что в отчет попадает критичная уязвимость, уже устраненная командой в реал-тайме, т.к. она была обнаружена в момент написания;
шаги: они достаточно подробные, чтобы любой мог повторить шаг 1, 2, 3 и убедиться, что уязвимость действительно есть;
последствиями эксплуатации – на какую часть бизнес-процесса влияет эксплуатация уязвимости;
рекомендации по устранению – как можно устранить эту уязвимость, т.е. команде дается небольшой план, на который можно опереться.
Сроки
Сроки варьируются от компании к компании, а также зависят от уровня критичности. В среднем на закрытие уязвимостей дается следующее количество дней:

Чем можно дополнить пентесты
Можно организовать внутреннюю программу Bug Bounty, где сотрудники за вознаграждение будут искать уязвимости в продуктах.
А можно податься и на внешнюю платформу Bug Bounty – это достаточно эффективный способ выявления уязвимостей, поскольку их поиском может заниматься большое количество независимых исследователей. Однако стоит помнить, что потребуется соответствующая инфраструктура и опытные специалисты в команде ИБ, а также четко описанный скоуп, в рамках которого будут вестись работы.
Подводя итоги

Итак, мы рассказали о такой крутой практике, как тестирование на проникновение, которая делает продукт безопаснее следующим образом:
помогает обнаружить критичные уязвимости, способные нарушить работу приложений/систем;
позволяет соответствовать законодательству и международным стандартам, например, PCI DSS, которые требуют ежегодных проверок;
проверяет продукт без вреда для компании: лучше отдать продукт на проверку пентестерам, чем позволить сделать это злоумышленникам;
описывает в отчете рекомендации по устранению уязвимостей, что косвенно поднимает скиллы по ИБ членов команды разработки;
пентесту подвергаются не только продукты, но и инфраструктура. Таким образом компания будет понимать, как реагировать на угрозы, какой у нее уровень защищенности и какие меры необходимо принять для его повышения.