Что такое тестирование безопасности?

Тестирование безопасности (Security Testing) — это вид нефункционального тестирования, целью которого является выявление уязвимостей и недостатков в системах защиты программного обеспечения. Оно направлено на то, чтобы убедиться, что приложение, система или сеть защищены от угроз, таких как несанкционированный доступ, утечка данных, модификация данных, отказ в обслуживании и другие формы атак. Это критически важный аспект обеспечения качества, особенно в финансовых, медицинских и государственных системах, обрабатывающих конфиденциальную информацию.

📌 Основные цели тестирования безопасности

  1. Конфиденциальность (Confidentiality)
    Обеспечение того, чтобы информация была доступна только тем, кому она предназначена. Тесты направлены на предотвращение утечек данных.

  2. Целостность (Integrity)
    Проверка, что данные не могут быть изменены неавторизованными пользователями.

  3. Доступность (Availability)
    Проверка, что система остаётся доступной легитимным пользователям даже в случае попыток атак (например, DDoS).

  4. Аутентификация (Authentication)
    Проверка, что система корректно распознаёт пользователя (например, через логин/пароль, токены, двухфакторную авторизацию).

  5. Авторизация (Authorization)
    Удостоверение, что пользователь имеет доступ только к разрешённым данным и функциям.

  6. Неотказуемость (Non-repudiation)
    Обеспечение доказательства того, что действия пользователя были выполнены и не могут быть отвергнуты им впоследствии.

🛠️ Виды тестирования безопасности

  1. Статический анализ безопасности (Static Application Security Testing, SAST)
    Проводится без запуска приложения — анализируется исходный код, байткод или исполняемые файлы для поиска уязвимостей (например, SQL-инъекций, XSS).

  2. Динамический анализ безопасности (Dynamic Application Security Testing, DAST)
    Приложение запускается, тестировщик взаимодействует с ним как пользователь, пытаясь выявить уязвимости в реальном времени (например, через прокси-инструменты).

  3. Интерактивное тестирование (IAST)
    Гибрид SAST и DAST, при котором тестирование проводится в реальном времени с анализом исходного кода и поведения приложения.

  4. Пентест (Penetration Testing)
    Моделирование атак злоумышленников с целью выявления слабых мест системы. Может быть ручным или автоматизированным.

  5. Фаззинг (Fuzz Testing)
    Подразумевает генерацию случайных, некорректных или неожиданных данных для ввода в систему с целью выявления сбоев, крашей, некорректной обработки.

  6. Тестирование конфигураций (Configuration Testing)
    Проверка безопасности конфигураций серверов, СУБД, облаков, firewall и других системных компонентов.

  7. Социальная инженерия
    Элемент тестирования человеческого фактора: проверка возможности фишинга, получения доступа через манипуляции с пользователями (например, через email или телефон).

🔍 Основные векторы атак, которые моделируются

  • SQL Injection (SQLi)
    Вставка вредоносных SQL-запросов в формы ввода.

  • Cross-site scripting (XSS)
    Вставка вредоносного JavaScript в поля ввода, выполняемого в браузере жертвы.

  • Cross-site request forgery (CSRF)
    Вредоносный запрос к сайту от имени авторизованного пользователя без его ведома.

  • Broken Authentication
    Уязвимости в механизмах входа в систему.

  • Insecure Direct Object References (IDOR)
    Доступ к объектам (например, файлам, ID, заказам) без должной проверки прав.

  • Insecure Deserialization
    Уязвимости при обработке сериализованных данных, позволяющие выполнять произвольный код.

  • Security Misconfiguration
    Открытые порты, небезопасные заголовки, устаревшие версии библиотек и т.п.

  • Sensitive Data Exposure
    Утечка логинов, паролей, медицинских данных, номеров карт и т.п.

📊 Инструменты для тестирования безопасности

SAST-инструменты:

  • SonarQube

  • Checkmarx

  • Fortify

  • Veracode

DAST-инструменты:

  • OWASP ZAP (Zed Attack Proxy)

  • Burp Suite

  • Acunetix

  • IBM AppScan

Пентест:

  • Kali Linux (набор инструментов)

  • Metasploit

  • Nmap

  • Wireshark

  • SQLmap

Фаззинг:

  • AFL (American Fuzzy Lop)

  • Peach Fuzzer

  • Boofuzz

🔐 OWASP Top 10

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

  1. Broken Access Control

  2. Cryptographic Failures

  3. Injection

  4. Insecure Design

  5. Security Misconfiguration

  6. Vulnerable and Outdated Components

  7. Identification and Authentication Failures

  8. Software and Data Integrity Failures

  9. Security Logging and Monitoring Failures

  10. Server-Side Request Forgery (SSRF)

🧪 Подходы к организации тестирования

  • White-box testing — тестировщик знает внутреннюю структуру системы (анализ кода, внутренних API).

  • Black-box testing — тестировщик не знает внутреннего устройства, действует как внешний злоумышленник.

  • Grey-box testing — частичное знание системы: например, известны endpoints и архитектура, но нет доступа к коду.

📋 Документация и отчётность

Важной частью тестирования безопасности является создание отчётов, включающих:

  • Перечень найденных уязвимостей.

  • Описание потенциальных последствий.

  • Скриншоты, видео, логи.

  • Рекомендации по устранению.

  • Классификация по критичности (например, по CVSS).

🧭 Когда проводить тестирование безопасности

  • До запуска (в рамках CI/CD).

  • После изменений в коде/архитектуре.

  • После установки обновлений/патчей.

  • Периодически — для мониторинга новых угроз.

💡 Примеры уязвимостей из жизни

  • Утечка данных пользователей Facebook из-за плохо защищённого API.

  • Взлом Equifax через Apache Struts уязвимость.

  • Cross-site scripting на Amazon или eBay через формы поиска.

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