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