Тестирование безопасности
Тестирование безопасности выявляет уязвимости в программном обеспечении. Его цель: предотвратить атаки, защитить данные и обеспечить конфиденциальность, целостность и доступность систем.
Главное
- Тестирование безопасности находит уязвимости.
- Включает SAST, DAST, SCA, пентесты и ручные проверки.
- OWASP Top 10 описывает наиболее распространённые проблемы.
- Тесты безопасности должны быть встроены в pipeline.
Виды тестов безопасности
SAST (Static Application Security Testing)
SAST анализирует исходный код без запуска приложения. Ищет известные паттерны: SQL-инъекции, небезопасное использование криптографии, захардкодированные секреты. Преимущество в ранней диагностике на этапе разработки, до того как код вообще запустится. SAST обычно запускается в IDE или при каждом commit. Минус: множество ложных срабатываний и невозможность выявить проблемы во время исполнения.
DAST (Dynamic Application Security Testing)
DAST тестирует запущенное приложение с внешней стороны. Имитирует атаки как внешний злоумышленник, анализирует HTTP-запросы, сессии, формы и API. Выявляет проблемы конфигурации и ошибки во время выполнения, которые SAST пропустил бы. Обычно применяется к staging и тестовым окружениям. Недостаток: срабатывает поздно в цикле разработки и не указывает на конкретную строку кода.
SCA (Software Composition Analysis)
SCA проверяет подключённые библиотеки, фреймворки и образы контейнеров на наличие известных уязвимостей. Современный код состоит в значительной части из сторонних компонентов, поэтому SCA критически важна. Сравнивает зависимости с базами данных вроде NVD или OSV. Запускается при каждом pull request и блокирует при критических CVE. Защищает от атак цепочки поставок и устаревших компонентов.
Pentest (Penetration Testing)
Пентест, это целенаправленная симуляция атаки опытными специалистами по безопасности. Сочетает автоматизированные инструменты с ручной работой и творческим подходом. Находит сложные уязвимости, которые автоматические сканеры пропускают. Проводится перед крупными релизами или при требованиях compliance. Трудозатратен и дорог, но даёт реалистичные результаты.
Fuzzing
Fuzzing подаёт приложению неожиданные, случайные или некорректные данные. Цель найти крахи, ошибки памяти или странное поведение. Часто используется для сетевых протоколов, парсеров файлов и API. Может автоматически обнаружить уязвимости, которые иначе выявляются только целенаправленными атаками.
Security Review
Security Review это ручная проверка архитектуры, кода или процессов опытными разработчиками или специалистами по безопасности. Дополняет автоматизированные тесты, так как выявляет ошибки дизайна, логические пробелы и слабости бизнес-процессов. Особенно ценна для критических областей: аутентификация, авторизация, обработка платежей.
OWASP Top 10
1. Injection
Атаки через инъекции возникают, когда ненадёжные данные передаются интерпретатору как команды или запросы. SQL-инъекция наиболее известна, но также распространены Command Injection, LDAP-инъекции и NoSQL-инъекции. Защита: параметризованные запросы, валидация входа и экранирование. Долгое время считалась самой опасной уязвимостью веб-приложений.
2. Broken Authentication
Broken Authentication охватывает уязвимости при входе, управлении сессиями и восстановлении пароля. Примеры: слабые требования к паролям, отсутствие rate limiting, небезопасные токены сессий, отсутствие MFA. Злоумышленники могут перехватить аккаунты или выдать себя за других пользователей. Решение: надёжные политики паролей, MFA, безопасные сессии, защита от brute-force.
3. Sensitive Data Exposure
Категория описывает неадекватную защиту конфиденциальных данных: паролей, номеров кредитных карт, информации о здоровье. Данные часто передаются без шифрования, сохраняются со слабым хешированием или остаются незащищёнными в кэше. Помогает: TLS, стойкое шифрование, надёжное хеширование и минимизация данных.
4. XML External Entities (XXE)
XXE-атаки эксплуатируют небезопасные XML-парсеры, загружающие внешние сущности. Злоумышленники могут читать файлы, выполнять Server Side Request Forgery или запускать Denial-of-Service атаки. Лучшая защита: отключить внешние DTD и использовать менее сложные форматы вроде JSON.
5. Broken Access Control
Broken Access Control возникает, когда пользователи видят действия или данные, на которые не авторизованы. Примеры: прямые ссылки на объекты, отсутствие проверок прав, манипулирование URL. Решение: централизованный серверный контроль доступа, проверяющий каждый запрос без предположений о клиенте.
6. Security Misconfiguration
Security Misconfiguration самая частая уязвимость. Включает пароли по умолчанию, ненужные функции, открытые порты, отсутствие security-заголовков, устаревшее ПО или слишком свободная CORS-конфигурация. Помогает: регулярное укрепление, автоматизация и чеклисты.
7. Cross-Site Scripting (XSS)
XSS позволяет внедрить код JavaScript в веб-страницы. Есть три основные формы: Reflected XSS, Stored XSS и DOM-Based XSS. Злоумышленники могут украсть cookies, захватить сессии или провести фишинг. Защита: кодирование вывода, Content Security Policy, HttpOnly-cookies, валидация входа.
8. Insecure Deserialization
Insecure Deserialization происходит при десериализации ненадёжных данных. Злоумышленники манипулируют объектами для Remote Code Execution, повышения привилегий или изменения данных. Помогает: безопасные форматы данных, подпись сериализованных объектов, избежание десериализации небезопасных входов.
9. Using Components with Known Vulnerabilities
Современные приложения используют десятки библиотек и фреймворков. Устаревшие или уязвимые компоненты частый вектор атак. SCA, регулярные обновления, управление зависимостями и минимум зависимостей снижают риск. Категория тесно связана с безопасностью цепочки поставок.
10. Insufficient Logging and Monitoring
Без адекватного логирования и мониторинга атаки остаются незамеченными долгое время. Отсутствие логов, слабые алерты или отсутствие response плана позволяют злоумышленникам распространяться. Важно: централизованные логи, значимые события, алерты при аномалиях, регулярные проверки.
Важные инструменты
OWASP ZAP
OWASP ZAP свободный, open-source сканер безопасности веб-приложений. Работает как прокси между браузером и приложением, автоматизирует множество распространённых атак. Особенно подходит для DAST, часто используется в staging или на этапе разработки. Хороший выбор для начала работы с автоматизированным тестированием веб-безопасности.
SonarQube
SonarQube это платформа для статического анализа кода. Помимо оценки качества кода, она предоставляет правила безопасности для SAST. Инструмент обнаруживает SQL-injection, XSS, захардкодированные секреты и множество других проблем прямо в исходном коде. SonarQube хорошо интегрируется в CI/CD-конвейеры и поддерживает большинство языков программирования.
Snyk
Snyk специализируется на SCA, безопасности контейнеров и Infrastructure-as-Code. Он выявляет уязвимые зависимости, предлагает обновления и может автоматически создавать pull requests. Snyk особенно полезен в современных облачных проектах с множеством библиотек и контейнеров.
Burp Suite
Burp Suite это профессиональная платформа для тестирования на проникновение. Она включает прокси, сканер, repeater, intruder и другие инструменты для ручного и полуавтоматического тестирования. Burp Suite считается стандартом для web-пентестеров и позволяет проводить углубленный анализ, который не под силу автоматизированным инструментам.
Nmap
Nmap это сетевой сканер для определения открытых портов, сервисов и операционных систем. Его часто используют на этапе разведки при проведении пентестов. Nmap помогает понять поверхность атаки сервера и выявить ненужно открытые сервисы.
Другие инструменты
- Trivy: сканер контейнеров и репозиториев.
- Bandit: SAST для Python.
- Semgrep: легковесный статический анализ для множества языков.
- Dependency-Check: инструмент OWASP для проверки зависимостей.
Практический пример
Следующий конвейер показывает, как разные типы тестирования безопасности можно эффективно интегрировать в жизненный цикл разработки. Этот пример демонстрирует подход, при котором современная безопасность не ограничивается одним типом тестирования: каждый тест охватывает разные уязвимости на разных этапах. Порядок выбран специально так, чтобы быстрые проверки выполнялись часто, а дорогие ручные тесты ограничивались важными вехами.
Pipeline-Integration:
1. SAST bei jedem Commit
2. SCA bei jedem Pull Request
3. DAST gegen Staging
4. Pentest vor jedem Major Release
5. Security Monitoring in Produktion
Почему такой порядок?
- SAST при каждом коммите: раннее обнаружение проблем, низкие затраты, прямая интеграция в рабочий процесс разработчика.
- SCA при каждом pull request: зависимости меняются постоянно, поэтому их проверяют при каждой интеграции.
- **DAST в staging: приложение должно работать, поэтому DAST применяют только на этапе staging.
- Пентест перед major releases: это дорого и требует времени, но необходимо для выявления сложных логических уязвимостей.
- Security Monitoring в production: даже после развертывания нужно обнаруживать атаки и аномалии.
Такая комбинация следует принципу Shift Left: проблемы безопасности выявляются как можно раньше и как можно позже, насколько это необходимо.
Преимущества и недостатки
| Преимущества | Недостатки |
|---|---|
| Раннее обнаружение уязвимостей | False positives в автоматических инструментах |
| Снижение рисков безопасности | Пентесты дорогие и долгие |
| Соответствие требованиям compliance | Тестирование безопасности не заменяет безопасный дизайн |
| Защита данных и пользователей | Постоянное обновление правил |
| Лучшая репутация и доверие | Тестовые окружения должны быть приближены к production |
| Экономия через раннее выявление ошибок | Требуется специализированное знание |
Ключевые пункты для подготовки к экзаменам
- Security Testing: общее название для всех тестов, которые выявляют уязвимости и слабые места.
- SAST: статический анализ исходного кода, ранний этап цикла, находит паттерны кода, без проверки при выполнении.
- DAST: динамический анализ работающих приложений с внешней точки зрения, выявляет ошибки конфигурации.
- SCA: анализ зависимостей на предмет известных уязвимостей и рисков лицензирования.
- Pentest: симулированная атака экспертами, выявляет сложные логические уязвимости.
- Fuzzing: тестирование с неожиданными входными данными для поиска крахов и уязвимостей.
- Security Review: ручная проверка архитектуры, кода и процессов.
- OWASP Top 10: десять наиболее критичных рисков безопасности веб-приложений, часто встречаются в экзаменах.
- Важные инструменты: OWASP ZAP, SonarQube, Snyk, Burp Suite, Nmap.
- Shift Left Security: интеграция проверок безопасности как можно раньше в конвейер.
- Defense in Depth: несколько слоев безопасности вместо одной меры.
- Compliance: тестирование безопасности часто требуется нормативными стандартами и регуляциями.
- False Positives: автоматические инструменты могут генерировать ложные тревоги, требующие ручной проверки.
- Supply Chain Security: защита от уязвимых или вредоносных зависимостей.
Главные источники
- https://owasp.org/www-project-top-ten/
- https://owasp.org/www-project-zap/
- https://en.wikipedia.org/wiki/Security_testing
Часто задаваемые вопросы
Что такое Security Testing и почему оно важно?
Security Testing это целенаправленный процесс выявления уязвимостей и слабых мест в программном обеспечении. Это важно, потому что защищает от атак, охраняет данные, обеспечивает compliance и укрепляет доверие пользователей.
Что такое SAST и когда его используют?
SAST это Static Application Security Testing. Он анализирует исходный код без его выполнения и обычно применяется при каждом коммите или прямо в IDE для раннего выявления уязвимостей.
В чем различие между SAST и DAST?
SAST статически анализирует исходный код и используется рано в цикле разработки. DAST тестирует работающее приложение с внешней стороны и выявляет проблемы при выполнении и неправильную конфигурацию.
Что такое SCA и что он проверяет?
SCA это Software Composition Analysis. Он проверяет включенные библиотеки, фреймворки и контейнеры на известные уязвимости и помогает снизить риски в цепочке поставок.
Что такое пентест и что его отличает?
Пентест это симулированная атака, проводимая экспертами в безопасности. Он отличается тем, что находит сложные логические уязвимости, которые не выявляют автоматические инструменты.
Что такое Fuzzing и где его используют?
Fuzzing тестирует приложения неожиданными, случайными или невалидными входными данными. Его часто применяют к API, парсерам файлов, сетевым протоколам и системным компонентам для выявления крахов и уязвимостей.
Что такое OWASP Top 10?
OWASP Top 10 это список десяти критических рисков безопасности веб-приложений. Он служит справочником для разработчиков, тестировщиков и ответственных за безопасность.
Какие инструменты используют для Security Testing?
Часто используемые инструменты это OWASP ZAP для DAST, SonarQube для SAST, Snyk для SCA, Burp Suite для пентестов и Nmap для сетевого сканирования.
Что такое SQL Injection и как её предотвратить?
SQL Injection это введение SQL-кода через входные данные для манипуляции базами данных. Её предотвращают параметризованными запросами, ORM и строгой валидацией входных данных.
Что такое Cross-Site Scripting и какие у него виды?
Cross-Site Scripting позволяет вводить клиентский код на веб-страницы. Основные виды это Reflected XSS, Stored XSS и DOM-Based XSS.
Что такое False Positive?
Сообщённая уязвимость, которая на самом деле таковой не является. Требует ручной проверки.
Что такое Broken Authentication?
Уязвимость в аутентификации, управлении сессиями или восстановлении пароля.
Что такое Broken Access Control?
Ошибка, при которой пользователи могут видеть данные или выполнять действия без разрешения.
Почему одного Security Testing недостаточно?
Потому что также необходимы безопасное проектирование и правильные практики разработки.
Что такое Shift Left Security?
Интеграция проверок безопасности как можно раньше в процесс разработки.
Что такое Security Review?
Ручная проверка архитектуры, кода или процессов экспертами.
Что такое Sensitive Data Exposure?
Недостаточная защита чувствительных данных, таких как пароли или номера кредитных карт.
Что такое Security Misconfiguration?
Стандартные пароли, открытые порты, отсутствие заголовков безопасности или устаревшее ПО.
Что такое XXE-атака?
XML External Entity атака эксплуатирует небезопасные XML-парсеры для чтения файлов или проведения SSRF.
Что такое Insecure Deserialization?
Десериализация ненадежных данных, которая может привести к выполнению кода или повышению привилегий.
Продолжение обучения тестированию ПО
Все статьи по Software Testing завершены. Вернитесь к первой части: Основы тестирования ПО: Unit, Integration, E2E тесты, TDD, BDD.



