Почему тестирование безопасности важно для QA

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

Как QA-инженер, тестирование безопасности — ваша ответственность. Вам не нужно быть сертифицированным этичным хакером, но необходимо понимать принципы безопасности достаточно, чтобы выявлять типичные уязвимости до продакшна.

Триада CIA

Триада CIA — основа информационной безопасности. Каждое требование безопасности соотносится с одним из трёх свойств.

Конфиденциальность (Confidentiality)

Данные должны быть доступны только авторизованным пользователям.

Что тестировать: Могут ли пользователи получить доступ к чужим данным (IDOR)? Шифруются ли чувствительные данные? Не утекают ли лишние данные через API? Не раскрывают ли сообщения об ошибках чувствительную информацию?

Целостность (Integrity)

Данные не должны быть изменены — случайно или намеренно.

Что тестировать: Могут ли пользователи изменять данные без прав? Есть ли серверная валидация? Защищены ли запросы к БД от SQL-инъекций?

Доступность (Availability)

Системы должны быть доступны, когда пользователям они нужны.

Что тестировать: Можно ли обрушить систему одним некорректным запросом? Есть ли rate limiting? Обрабатывает ли система исчерпание ресурсов корректно?

Типы тестирования безопасности

ТипЧто делаетКто проводитКогда
Сканирование уязвимостейАвтоматический поиск известных уязвимостейQA/DevOpsКаждый спринт
Тестирование на проникновениеРучные попытки эксплуатацииСпециалистыЕжеквартально
Аудит безопасностиРевью контролей и политикАудиторыЕжегодно
Ревью кодаРучная проверка исходного кодаРазработчики + безопасностьПри разработке
SASTСтатический анализ кодаПайплайн CI/CDКаждый коммит
DASTДинамическое тестирование в runtimeCI/CD или QAКаждый деплой
Моделирование угрозСистематическое определение угрозАрхитектура + безопасностьФаза проектирования

Мышление тестировщика безопасности

Функциональное мышлениеМышление безопасности
«Работает ли форма логина?»«Можно ли обойти логин?»
«Можно ли отправить форму?»«Можно ли отправить вредоносные данные?»
«API возвращает правильные данные?»«Можно ли получить данные других пользователей?»
«Работает ли загрузка файлов?»«Можно ли загрузить вредоносный файл?»
«Поиск возвращает результаты?»«Можно ли инъектировать SQL через поиск?»

Типичные категории уязвимостей

Ошибки аутентификации: Дефолтные учётные данные, отсутствие блокировки аккаунта, слабые пароли, отсутствие MFA.

Ошибки авторизации: Горизонтальная эскалация привилегий (доступ к чужим данным), вертикальная эскалация (доступ к админ-функциям), IDOR.

Ошибки валидации входных данных: SQL injection, XSS, command injection, path traversal, XXE.

Раскрытие данных: Данные в URL, лишние поля в API ответах, стектрейсы в ошибках, отсутствие шифрования, захардкоженные учётные данные.

Тестирование безопасности для QA-инженера

Проверки, которые должен выполнять каждый QA-инженер:

  1. Тестировать авторизацию: Попробовать получить доступ без аутентификации. Менять ID в URL.
  2. Тестировать валидацию: Вводить спецсимволы (' " < > ; --), очень длинные строки, неожиданные типы данных.
  3. Проверять сообщения об ошибках: Не должны раскрывать стектрейсы, имена БД, пути.
  4. Проверять HTTPS: Все страницы и API должны использовать HTTPS.
  5. Тестировать управление сессиями: Сессии истекают, токены не предсказуемы, logout инвалидирует сессию.
  6. Проверять заголовки: Заголовки безопасности (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 в фильтре датКритичныйПараметризованные запросы
PDFКPath traversal в параметре имени файлаВысокийБелый список имён файлов
ПрофильЦXSS через поле имениВысокийКодирование выходных данных, заголовок CSP

Топ-3 приоритета: (1) IDOR в просмотре баланса, (2) Race condition в переводах, (3) SQL injection в истории.

Профессиональные советы

  • Shift Left в безопасности: Интегрируйте тестирование безопасности в каждый спринт, а не только перед релизами.
  • Изучите Burp Suite: Даже базовые навыки (перехват запросов, модификация параметров) кардинально улучшают ваши способности в тестировании безопасности. Community Edition бесплатная.
  • Следите за базами CVE: Подпишитесь на уведомления о CVE для вашего технологического стека.
  • Программа Security Champions: Продвигайте выделенного специалиста по безопасности в каждой команде.
  • Никогда не тестируйте безопасность в продакшне: Тестирование безопасности может нанести ущерб. Всегда используйте выделенное тестовое окружение.