Почему тестирование безопасности важно для QA
Утечки безопасности обходятся компаниям в среднем в $4,45 млн за инцидент. Помимо финансовых потерь, они разрушают доверие клиентов, вызывают регуляторные штрафы и могут завершить карьеры.
Как QA-инженер, тестирование безопасности — ваша ответственность. Вам не нужно быть сертифицированным этичным хакером, но необходимо понимать принципы безопасности достаточно, чтобы выявлять типичные уязвимости до продакшна.
Триада CIA
Триада CIA — основа информационной безопасности. Каждое требование безопасности соотносится с одним из трёх свойств.
Конфиденциальность (Confidentiality)
Данные должны быть доступны только авторизованным пользователям.
Что тестировать: Могут ли пользователи получить доступ к чужим данным (IDOR)? Шифруются ли чувствительные данные? Не утекают ли лишние данные через API? Не раскрывают ли сообщения об ошибках чувствительную информацию?
Целостность (Integrity)
Данные не должны быть изменены — случайно или намеренно.
Что тестировать: Могут ли пользователи изменять данные без прав? Есть ли серверная валидация? Защищены ли запросы к БД от SQL-инъекций?
Доступность (Availability)
Системы должны быть доступны, когда пользователям они нужны.
Что тестировать: Можно ли обрушить систему одним некорректным запросом? Есть ли rate limiting? Обрабатывает ли система исчерпание ресурсов корректно?
Типы тестирования безопасности
| Тип | Что делает | Кто проводит | Когда |
|---|---|---|---|
| Сканирование уязвимостей | Автоматический поиск известных уязвимостей | QA/DevOps | Каждый спринт |
| Тестирование на проникновение | Ручные попытки эксплуатации | Специалисты | Ежеквартально |
| Аудит безопасности | Ревью контролей и политик | Аудиторы | Ежегодно |
| Ревью кода | Ручная проверка исходного кода | Разработчики + безопасность | При разработке |
| SAST | Статический анализ кода | Пайплайн CI/CD | Каждый коммит |
| DAST | Динамическое тестирование в runtime | CI/CD или QA | Каждый деплой |
| Моделирование угроз | Систематическое определение угроз | Архитектура + безопасность | Фаза проектирования |
Мышление тестировщика безопасности
| Функциональное мышление | Мышление безопасности |
|---|---|
| «Работает ли форма логина?» | «Можно ли обойти логин?» |
| «Можно ли отправить форму?» | «Можно ли отправить вредоносные данные?» |
| «API возвращает правильные данные?» | «Можно ли получить данные других пользователей?» |
| «Работает ли загрузка файлов?» | «Можно ли загрузить вредоносный файл?» |
| «Поиск возвращает результаты?» | «Можно ли инъектировать SQL через поиск?» |
Типичные категории уязвимостей
Ошибки аутентификации: Дефолтные учётные данные, отсутствие блокировки аккаунта, слабые пароли, отсутствие MFA.
Ошибки авторизации: Горизонтальная эскалация привилегий (доступ к чужим данным), вертикальная эскалация (доступ к админ-функциям), IDOR.
Ошибки валидации входных данных: SQL injection, XSS, command injection, path traversal, XXE.
Раскрытие данных: Данные в URL, лишние поля в API ответах, стектрейсы в ошибках, отсутствие шифрования, захардкоженные учётные данные.
Тестирование безопасности для QA-инженера
Проверки, которые должен выполнять каждый QA-инженер:
- Тестировать авторизацию: Попробовать получить доступ без аутентификации. Менять ID в URL.
- Тестировать валидацию: Вводить спецсимволы (
' " < > ; --), очень длинные строки, неожиданные типы данных. - Проверять сообщения об ошибках: Не должны раскрывать стектрейсы, имена БД, пути.
- Проверять HTTPS: Все страницы и API должны использовать HTTPS.
- Тестировать управление сессиями: Сессии истекают, токены не предсказуемы, logout инвалидирует сессию.
- Проверять заголовки: Заголовки безопасности (CSP, X-Frame-Options, HSTS).
Упражнение: Оценка рисков безопасности
На основе дизайна веб-приложения определите потенциальные риски безопасности по всем трём измерениям триады CIA.
Приложение: Портал интернет-банкинга
Функции: Логин по email/пароль, просмотр баланса, переводы между счетами, история транзакций, скачивание выписки PDF, настройки профиля с персональными данными.
Задание
Для каждой функции определите: риск конфиденциальности, целостности, доступности, серьёзность и рекомендуемую меру.
Подсказка: Думайте как злоумышленник
Для каждой функции спросите: «Что если кто-то попытается…» — получить доступ без разрешения, изменить данные, отправить вредоносные данные, перегрузить систему, перехватить коммуникации.
Решение: Оценка рисков безопасности
| Функция | CIA | Риск | Серьёзность | Мера |
|---|---|---|---|---|
| Логин | К | Брутфорс подбор паролей | Критичный | Блокировка после 5 попыток + CAPTCHA |
| Логин | Ц | Credential stuffing утёкшими паролями | Критичный | MFA, проверка через HaveIBeenPwned |
| Логин | Д | DoS-атака на эндпоинт логина | Высокий | Rate limiting (10 запр/мин на IP) |
| Баланс | К | IDOR — смена ID счёта для просмотра чужих | Критичный | Серверная проверка принадлежности счёта |
| Переводы | Ц | Race condition для двойных переводов | Критичный | Блокировка на уровне БД, ключи идемпотентности |
| История | К | SQL injection в фильтре дат | Критичный | Параметризованные запросы |
| К | Path traversal в параметре имени файла | Высокий | Белый список имён файлов | |
| Профиль | Ц | XSS через поле имени | Высокий | Кодирование выходных данных, заголовок CSP |
Топ-3 приоритета: (1) IDOR в просмотре баланса, (2) Race condition в переводах, (3) SQL injection в истории.
Профессиональные советы
- Shift Left в безопасности: Интегрируйте тестирование безопасности в каждый спринт, а не только перед релизами.
- Изучите Burp Suite: Даже базовые навыки (перехват запросов, модификация параметров) кардинально улучшают ваши способности в тестировании безопасности. Community Edition бесплатная.
- Следите за базами CVE: Подпишитесь на уведомления о CVE для вашего технологического стека.
- Программа Security Champions: Продвигайте выделенного специалиста по безопасности в каждой команде.
- Никогда не тестируйте безопасность в продакшне: Тестирование безопасности может нанести ущерб. Всегда используйте выделенное тестовое окружение.