OWASP Top 10 с примерами и защитой
Ежегодно тысячи веб-приложений подвергаются взлому из-за одних и тех же повторяющихся уязвимостей. OWASP Top 10 — это стандартный документ, в котором перечислены наиболее критичные риски безопасности веб-приложений. В этой статье мы разберём каждый риск, покажем практический пример и объясним, как его устранить. Будь вы разработчиком, DevOps-инженером или энтузиастом безопасности, понимание этих рисков необходимо для создания защищённых систем.
1. Нарушение контроля доступа
Нарушение контроля доступа происходит, когда пользователи могут действовать за пределами своих разрешений. Например, пользователь может получить доступ к данным другого пользователя, изменив параметр URL.
Пример: Приложение использует /api/user/123 для получения данных пользователя. Если нет проверки, что вошедший пользователь действительно является пользователем 123, злоумышленник может изменить ID на /api/user/124 и просмотреть чужой профиль.
Меры защиты: Реализуйте проверки контроля доступа на стороне сервера. Запрещайте по умолчанию. Используйте ролевую модель доступа (RBAC) и проверяйте разрешения при каждом запросе.
2. Криптографические ошибки
Ранее известный как «Разглашение конфиденциальных данных», этот риск связан с неспособностью защитить конфиденциальные данные при передаче или хранении.
Пример: Хранение паролей в открытом виде или использование слабых алгоритмов хеширования, таких как MD5.
Меры защиты: Используйте надёжное шифрование (например, AES-256) для данных при хранении, TLS 1.2+ для данных при передаче и стойкое хеширование паролей (bcrypt, Argon2).
3. Инъекции
Уязвимости инъекций, такие как SQL, NoSQL, OS и LDAP-инъекции, возникают, когда недоверенные данные передаются интерпретатору как часть команды или запроса.
Пример: Форма входа, которая формирует SQL-запрос вида:
SELECT * FROM users WHERE username = '$username' AND password = '$password';
Если злоумышленник введёт ' OR '1'='1 в качестве имени пользователя, он сможет обойти аутентификацию.
Меры защиты: Используйте параметризованные запросы или подготовленные выражения. Экранируйте специальные символы и проверяйте входные данные.
4. Небезопасный дизайн
Небезопасный дизайн относится к недостаткам архитектуры и проектирования приложения, а не только к ошибкам реализации.
Пример: Функция сброса пароля, использующая контрольные вопросы с легко угадываемыми ответами.
Меры защиты: Моделирование угроз на этапе проектирования, безопасные шаблоны проектирования и эталонные архитектуры.
5. Неправильная конфигурация безопасности
Сюда входят учётные записи по умолчанию, неиспользуемые страницы, неисправленные уязвимости, незащищённые файлы и каталоги.
Пример: Оставленные учётные данные администратора по умолчанию в CMS или открытые листинги каталогов.
Меры защиты: Усильте конфигурации, удалите неиспользуемые функции и автоматизируйте проверки конфигурации.
6. Уязвимые и устаревшие компоненты
Использование библиотек, фреймворков или программного обеспечения с известными уязвимостями.
Пример: Запуск старой версии JavaScript-библиотеки с известной уязвимостью XSS.
Меры защиты: Регулярно обновляйте зависимости, используйте инструменты like npm audit или OWASP Dependency-Check и удаляйте неиспользуемые зависимости.
7. Ошибки идентификации и аутентификации
Слабости в аутентификации и управлении сессиями.
Пример: Разрешение слабых паролей, отсутствие ограничения скорости попыток входа или раскрытие идентификаторов сессий в URL.
Меры защиты: Внедрите многофакторную аутентификацию, требуйте надёжные пароли и используйте безопасное управление сессиями.
8. Ошибки целостности программного обеспечения и данных
Код и инфраструктура, которые не защищают от нарушений целостности.
Пример: Использование ненадёжных CDN для скриптов без Subresource Integrity (SRI).
Меры защиты: Используйте SRI, проверяйте подписи и обеспечьте безопасность конвейеров CI/CD.
9. Ошибки логирования и мониторинга безопасности
Недостаточное логирование и мониторинг позволяют злоумышленникам оставаться незамеченными.
Пример: Отсутствие логирования неудачных попыток входа, из-за чего атаки методом перебора остаются незамеченными.
Меры защиты: Логируйте события, связанные с безопасностью, отслеживайте логи и настройте оповещения о подозрительной активности.
10. Подделка серверных запросов (SSRF)
SSRF возникает, когда злоумышленник может заставить сервер выполнять запросы к внутренним ресурсам.
Пример: Функция вебхука, которая загружает URL, предоставленный пользователем. Злоумышленник может указать http://169.254.169.254/latest/meta-data/ для доступа к метаданным облака.
Меры защиты: Проверяйте и очищайте URL, используйте белые списки и ограничивайте исходящий трафик.
Сравнительная таблица
| Риск | Пример | Меры защиты |
|---|---|---|
| Нарушение контроля доступа | Доступ к данным другого пользователя через IDOR | Проверки разрешений на стороне сервера |
| Криптографические ошибки | Хранение паролей в открытом виде | Использование стойкого хеширования и TLS |
| Инъекции | SQL-инъекция через форму входа | Параметризованные запросы |
| Небезопасный дизайн | Слабые контрольные вопросы для сброса пароля | Моделирование угроз |
| Неправильная конфигурация безопасности | Учётные данные администратора по умолчанию | Усиление конфигураций |
| Уязвимые компоненты | Старая библиотека с уязвимостью XSS | Регулярные обновления |
| Ошибки аутентификации | Отсутствие ограничения скорости входа | MFA и ограничение скорости |
| Ошибки целостности | Ненадёжные скрипты CDN | Subresource Integrity |
| Ошибки логирования | Отсутствие логов неудачных входов | Централизованное логирование и оповещения |
| SSRF | Запрос внутренних метаданных | Белые списки URL |
С чего начать
- Оценка: Запустите автоматические сканеры и ручные проверки на соответствие OWASP Top 10.
- Приоритизация: Сначала исправьте наиболее критичные проблемы (например, инъекции, нарушение контроля доступа).
- Обучение: Обучите разработчиков безопасным практикам кодирования.
- Мониторинг: Внедрите логирование и оповещения о событиях безопасности.
- Итерации: Регулярно обновляйте зависимости и повторно тестируйте.
FAQ
Что такое OWASP Top 10?
OWASP Top 10 — это регулярно обновляемый список наиболее критичных рисков безопасности веб-приложений, публикуемый Open Web Application Security Project (OWASP).
Как часто обновляется OWASP Top 10?
Он обновляется примерно каждые три-четыре года, последняя версия выпущена в 2021 году. Однако OWASP предоставляет постоянные рекомендации и обновления.
Можно ли полагаться только на OWASP Top 10 для безопасности?
Нет, это отправная точка. Вам также следует следовать другим проектам OWASP, таким как Application Security Verification Standard (ASVS), и проводить регулярное тестирование безопасности.
Чтобы быстро проанализировать логи Nginx на признаки атак, таких как SQL-инъекции или XSS, попробуйте наш Nginx Log Analyzer. Он помогает выявить подозрительные шаблоны и защитить ваш веб-сервер.