OWASP (Open Web Application Security Project) — это некоммерческая организация, которая занимается повышением безопасности веб-приложений. Одним из ключевых проектов OWASP является публикация списка десяти самых распространенных и серьезных уязвимостей в веб-приложениях, известного как OWASP Top 10.
Этот список обновляется периодически, чтобы отражать текущие угрозы в области безопасности веб-приложений.
OWASP Top-10 уязвимостей (на основе версии 2021 года):
1. Broken Access Control (Нарушение контроля доступа)
Описание: Уязвимость возникает, когда система неправильно управляет правами доступа пользователей, позволяя злоумышленнику получить доступ к ресурсам или функциям, к которым он не должен иметь доступ.
Пример: Пользователь с ролью обычного клиента может манипулировать URL или параметрами запроса, чтобы получить доступ к административной панели (например, изменив /user/profile/123 на /admin/settings).
Решение: Четкое разделение прав доступа, правильная настройка ролей и проверка аутентификации и авторизации на уровне всех действий.
2. Cryptographic Failures (Криптографические ошибки)
Описание: Проблемы, связанные с неправильным использованием криптографии, включая слабое шифрование, отсутствие шифрования для чувствительных данных и использование устаревших алгоритмов.
Пример: Хранение паролей в открытом виде или использование небезопасных хэш-функций, таких как MD5 или SHA1.
Решение: Использование современных криптографических алгоритмов (например, AES для симметричного шифрования и bcrypt для хеширования паролей).
3. Injection (Инъекции)
Описание: Инъекции возникают, когда злоумышленник может вставить вредоносные данные в запросы, которые приложение отправляет внешним системам (например, базе данных, интерпретатору команд, LDAP и т.д.).
Пример: SQL-инъекция — злоумышленник может изменить SQL-запрос, введя вредоносный код в поле ввода. Например, вместо имени пользователя "John" вводится John' OR '1'='1, что может заставить систему вернуть всех пользователей.
Решение: Использование параметризованных запросов и ORM (Object-Relational Mapping), чтобы избежать прямого выполнения пользовательских данных.
4. Insecure Design (Ненадежный дизайн)
Описание: Уязвимость, связанная с отсутствием учета безопасности на этапе проектирования системы. Это включает в себя недостатки архитектуры и дизайна, которые делают приложение уязвимым к атакам.
Пример: Приложение не планирует возможные атаки с использованием brute-force или не предусматривает защиту от атак, таких как CSRF.
Решение: Включение безопасности на этапе проектирования приложения, использование проверенных архитектурных решений, проведение моделирования угроз.
5. Security Misconfiguration (Ошибочная конфигурация безопасности)
Описание: Включает в себя отсутствие должных настроек безопасности или использование конфигураций по умолчанию, которые могут быть небезопасны.
Пример: Оставленные включенными учетные записи с паролями по умолчанию, экспонированные системные каталоги, раскрывающие информацию о сервере.
Решение: Регулярная проверка конфигураций, удаление ненужных функций, обновление программного обеспечения и использование безопасных настроек по умолчанию.
6. Vulnerable and Outdated Components (Уязвимые и устаревшие компоненты)
Описание: Использование сторонних библиотек или компонентов, содержащих известные уязвимости, может привести к эксплуатации системы злоумышленниками.
Пример: Использование старой версии библиотеки jQuery с известной уязвимостью к XSS (межсайтовому скриптингу).
Решение: Регулярное обновление зависимостей и компонентов, использование инструментов для мониторинга безопасности библиотек.
7. Identification and Authentication Failures (Ошибки идентификации и аутентификации)
Описание: Уязвимости, связанные с недостаточной защитой процессов аутентификации, таких как слабые пароли, отсутствие многофакторной аутентификации или неправильное управление сессиями.
Пример: Если приложение позволяет использовать слабые пароли, такие как "12345", или сохраняет сессии без истечения срока действия.
Решение: Внедрение требований к сложным паролям, использование многофакторной аутентификации, обеспечение надежного управления сессиями (например, автоматическое завершение сеанса при бездействии).
8. Software and Data Integrity Failures (Ошибки целостности данных и ПО)
Описание: Уязвимости, возникающие из-за отсутствия проверок целостности программного обеспечения или данных, что может позволить злоумышленникам внедрять вредоносный код.
Пример: Развертывание обновлений приложения из ненадежных источников без проверки подписи или хеш-суммы.
Решение: Использование цифровых подписей, хешей для проверки целостности данных и обеспечение безопасного процесса развертывания.
9. Security Logging and Monitoring Failures (Неэффективное ведение логов и мониторинг)
Описание: Отсутствие или неправильное ведение логов и мониторинга безопасности может привести к нераспознанным атакам или инцидентам.
Пример: Приложение не ведет логирование аутентификационных попыток или ошибок доступа, что делает невозможным выявление атак.
Решение: Внедрение системы логирования всех критических событий (например, неудачных попыток входа) и настройка мониторинга для выявления подозрительной активности.
10. Server-Side Request Forgery (SSRF)
Описание: Уязвимость, когда злоумышленник может заставить сервер выполнить запрос к внешним или внутренним ресурсам, к которым у него нет доступа.
Пример: Приложение принимает URL от пользователя и выполняет запрос к этому URL. Злоумышленник может указать внутренний IP-адрес или ресурс, к которому он не должен иметь доступ, что приведет к передаче данных, которые злоумышленник не должен видеть.
Решение: Ограничение допустимых адресов для запросов, строгая проверка входных данных и использование списков разрешенных ресурсов.
Как защитить веб-приложения от этих уязвимостей?
1. Постоянное обновление компонентов и зависимостей. Используйте инструменты для отслеживания версий библиотек и их уязвимостей.
2. Внедрение DevSecOps-практик. Интеграция безопасности на всех этапах разработки (разработка, тестирование, развертывание).
3. Аудиты безопасности и пентесты. Регулярные проверки на наличие уязвимостей.
4. Использование автоматизированных инструментов для обеспечения безопасности. Например, статический и динамический анализ кода (SAST и DAST).
5. Обучение сотрудников безопасной разработке. Регулярное обучение разработчиков основам безопасности.
Эволюция списка OWASP Top-10 с 2017 по 2021
Давайте рассмотрим эволюцию списка OWASP Top-10 за последние несколько версий (2017 и 2021 годы) и проанализируем, как изменялись приоритеты в области веб-безопасности.
OWASP Top-10 2017 года
1.Injection
2. Broken Authentication
3. Sensitive Data Exposure
4. XML External Entities (XXE)
5. Broken Access Control
6. Security Misconfiguration
7. Cross-Site Scripting (XSS)
8. Insecure Deserialization
9. Using Components with Known Vulnerabilities
10. Insufficient Logging & Monitoring
OWASP Top-10 2021 года
1. Broken Access Control
2. Cryptographic Failures (ранее: Sensitive Data Exposure)
3. Injection
4. Insecure Design (новая категория)
5. Security Misconfiguration
6. Vulnerable and Outdated Components (ранее: Using Components with Known Vulnerabilities)
7. Identification and Authentication Failures (ранее: Broken Authentication)
8. Software and Data Integrity Failures (новая категория)
9. Security Logging and Monitoring Failures (ранее: Insufficient Logging & Monitoring)
10. Server-Side Request Forgery (SSRF) (новая категория)
Детализированное описание каждой уязвимости с историческим контекстом
1. Injection (Инъекции)
- OWASP 2017: Injection уязвимости занимали 1 место, что отражает их огромную опасность и распространенность. Классические примеры включают SQL-инъекции, LDAP-инъекции и инъекции команд.
- OWASP 2021: Injection опустились на 3 место, что указывает на улучшение в применении защитных механизмов, таких как параметризованные запросы и ORM. Однако это все еще критическая угроза, особенно для приложений, которые не используют современные методы защиты.
Описание (2021):
Инъекции происходят, когда злоумышленник передает вредоносные данные в приложение через пользовательские поля, которые затем интерпретируются как команды. Это может привести к выполнению произвольных команд на сервере или базе данных.
Пример:
SQL-инъекция:
SELECT * FROM users WHERE username = 'John' AND password = 'password123';
Злоумышленник вводит вместо имени пользователя John' OR '1'='1:
SELECT * FROM users WHERE username = 'John' OR '1'='1' AND password = 'password123';
Этот запрос всегда возвращает истину, позволяя обойти проверку пароля.
2. Broken Authentication (Ошибки аутентификации) → Identification and Authentication Failures (Ошибки идентификации и аутентификации)
- OWASP 2017: Broken Authentication занимала 2 место, указывая на многочисленные случаи слабых систем аутентификации, таких как слабые пароли, отсутствие многофакторной аутентификации и утечки сессионных токенов.
- OWASP 2021: Уязвимость была переименована в Identification and Authentication Failures и переместилась на 7 место. Это связано с тем, что многие современные приложения стали внедрять более строгие требования к паролям и использовать MFA (многофакторную аутентификацию).
Описание (2021):
Ошибки в процессах аутентификации и идентификации пользователей могут позволить злоумышленникам получить доступ к аккаунтам или сессиям других пользователей. Проблемы могут включать в себя слабые пароли, утечку сессионных токенов или отсутствие контроля над сессиями.
Пример:
- Приложение позволяет пользователям использовать пароли вроде 12345 или password.
- Не происходит автоматического завершения сессии при длительном бездействии.
3. Sensitive Data Exposure → Cryptographic Failures (Криптографические ошибки)
- OWASP 2017: Sensitive Data Exposure на 3 месте отражала проблемы с защитой конфиденциальной информации (например, паролей, номеров кредитных карт), которая может быть передана в незашифрованном виде.
- OWASP 2021: Уязвимость была переименована в Cryptographic Failures и переместилась на 2 место. Новое название подчеркивает, что корень большинства проблем с утечкой данных заключается в неправильном использовании или отсутствии криптографии.
Описание (2021):
Криптографические ошибки возникают, когда чувствительные данные (такие как пароли, персональная информация, номера кредитных карт) не защищены должным образом в процессе передачи или хранения. Проблемы могут включать слабое шифрование, использование устаревших или небезопасных алгоритмов.
Пример:
- Пароли хранятся в базе данных в открытом виде или с использованием слабых хеш-функций, таких как MD5.
- SSL не используется для передачи данных через Интернет, что делает данные уязвимыми для перехвата.
4. XML External Entities (XXE)
- OWASP 2017: XML External Entities (XXE) была новой категорией в 2017 году и заняла 4 место из-за распространенности проблем в XML-обработчиках, которые могут обрабатывать вредоносные внешние сущности.
- OWASP 2021: Уязвимость исчезла из OWASP Top-10, что свидетельствует о снижении ее актуальности благодаря лучшей настройке XML-парсеров и уменьшению использования XML в современных приложениях.
Описание (2017):
XXE-атаки происходят, когда приложение обрабатывает вредоносные XML-документы, которые содержат ссылки на внешние ресурсы. Это может привести к утечкам данных или выполнению произвольных команд на сервере.
Пример:
Злоумышленник передает XML-файл, который содержит ссылку на локальный файл системы:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<foo>&xxe;</foo>
Это может привести к утечке содержимого файла /etc/passwd.
5. Broken Access Control (Нарушение контроля доступа)
- OWASP 2017: Broken Access Control занимала 5 место, что указывало на низкую оценку важности контроля доступа на уровне приложения.
- OWASP 2021: В 2021 году эта уязвимость поднялась на 1 место, что свидетельствует о значительном росте случаев эксплуатации неправильно настроенных систем контроля доступа.
Описание (2021):
Broken Access Control возникает, когда система неправильно управляет правами доступа, позволяя пользователям получать доступ к ресурсам, к которым они не должны иметь доступ. Это может привести к просмотру, изменению или удалению информации, принадлежащей другим пользователям.
Пример:
- Обычный пользователь может получить доступ к административным функциям, манипулируя URL (например, изменив /user/profile/123 на /admin/).
6. Security Misconfiguration (Ошибочная конфигурация безопасности)
- OWASP 2017: Security Misconfiguration находилась на 6 месте и отражала проблемы с неправильными настройками серверов, приложений или баз данных.
- OWASP 2021: В 2021 году она поднялась на 5 место, что указывает на то, что неправильные конфигурации остаются одной из основных проблем безопасности.
Описание (2021):
Ошибочная конфигурация безопасности возникает, когда приложения, серверы или базы данных настраиваются с уязвимыми настройками по умолчанию или не обновляются вовремя. Это может включать использование старых версий ПО, оставленные активными учетные записи с паролями по умолчанию и раскрытие лишней информации о системе.
Пример:
- Веб-сервер Apache показывает версию ПО и информацию о модулях, что может помочь злоумышленникам выбрать правильную атаку.
7. Cross-Site Scripting (XSS)
- OWASP 2017: XSS занимала 7 место, отражая распространенность атак, при которых злоумышленники вставляют вредоносный JavaScript в страницы, которые посещают другие пользователи.
- OWASP 2021: В 2021 году XSS перестала быть отдельной категорией и была включена в более широкую категорию Injection, что свидетельствует о том, что разработчики стали лучше защищаться от этой уязвимости, хотя она остается актуальной.
Описание (2017):
XSS-уязвимости позволяют злоумышленнику внедрить вредоносный скрипт в веб-страницу, которая будет выполнена в браузере других пользователей. Это может привести к краже данных, захвату сессий или перенаправлению на фишинговые сайты.
Пример:
Злоумышленник вводит следующий код в поле ввода комментариев:
<script>alert('XSS Attack!');</script>
Этот код будет выполнен в браузере любого пользователя, который откроет страницу с этим комментарием.
8. Insecure Deserialization (Небезопасная десериализация)
- OWASP 2017: Insecure Deserialization занимала 8 место и отражала опасность десериализации данных, предоставляемых пользователем, без должной проверки.
- OWASP 2021: Эта уязвимость была включена в более общие категории и больше не выделяется в отдельную категорию.
Описание (2017):
Небезопасная десериализация происходит, когда данные, предоставленные пользователем, десериализуются без должной проверки. Это может позволить злоумышленнику внедрить вредоносные объекты, которые будут выполнены на сервере.
Пример:
Злоумышленник передает специально сформированный объект, который при десериализации может выполнять вредоносный код на сервере.
9. Using Components with Known Vulnerabilities → Vulnerable and Outdated Components (Уязвимые и устаревшие компоненты)
- OWASP 2017: Эта уязвимость на 9 месте отражала проблемы с использованием старых версий библиотек, фреймворков и других компонентов, которые содержат известные уязвимости.
- OWASP 2021: В 2021 году эта категория была переименована в Vulnerable and Outdated Components и поднялась на 6 место, что указывает на рост числа атак через сторонние компоненты.
Описание (2021):
Использование уязвимых или устаревших компонентов может привести к тому, что злоумышленники смогут использовать известные уязвимости для атаки на ваше приложение. Это может касаться как серверного ПО, так и клиентских библиотек.
Пример:
- Использование устаревшей версии библиотеки jQuery с известной уязвимостью позволяет злоумышленнику запускать XSS-атаки.
10. Insufficient Logging & Monitoring → Security Logging and Monitoring Failures (Неэффективное ведение логов и мониторинг)
- OWASP 2017: На 10 месте, Insufficient Logging & Monitoring подчеркивала важность ведения логов и мониторинга для выявления подозрительной активности и реагирования на инциденты.
- OWASP 2021: В 2021 году эта уязвимость была переименована в Security Logging and Monitoring Failures и поднялась на 9 место, что подчеркивает её важность для своевременной реакции на инциденты безопасности.
Описание (2021):
Недостаток логирования и мониторинга может привести к тому, что атаки остаются невыявленными, а инциденты — нерасследованными. Это может привести к значительным потерям данных и ресурсам, если атаки не будут вовремя остановлены.
Пример:
- Приложение не ведет логирование неудачных попыток аутентификации, что делает невозможным обнаружение попыток взлома с помощью brute-force.
11. Server-Side Request Forgery (SSRF) (Новая категория в 2021 году)
- OWASP 2021: SSRF — новая категория уязвимостей, появившаяся в 2021 году и занявшая 10 место. Она отражает рост количества атак, когда злоумышленник заставляет сервер выполнять запросы к внутренним или внешним ресурсам.
Описание (2021):
Уязвимость SSRF возникает, когда злоумышленник может заставить сервер выполнить запрос к ресурсу, к которому сам злоумышленник не имеет доступа. Это может позволить злоумышленнику обойти защитные механизмы и получить доступ к внутренним системам.
Пример:
Приложение принимает URL от пользователя и выполняет запрос к этому URL. Злоумышленник может указать внутренний IP-адрес или ресурс, к которому он не должен иметь доступ, что приведет к передаче данных, которые злоумышленник не должен видеть.
Вместо заключения
OWASP Top-10 за последние несколько лет демонстрирует значительные изменения в приоритетах безопасности веб-приложений. Эти изменения отражают как улучшения в защите от некоторых типов уязвимостей, так и появление новых угроз:
1. Рост значимости Broken Access Control: Эта уязвимость переместилась с 5 на 1 место, что подчеркивает важность правильной настройки прав доступа.
2. Введение новых категорий: В 2021 году были введены новые категории, такие как Insecure Design и Server-Side Request Forgery (SSRF), что свидетельствует о появлении новых векторов атак.
3. Снижение значимости XSS и XXE: Эти уязвимости больше не выделяются в отдельные категории, что может указывать на улучшение методов защиты от них.
Каждое обновление OWASP Top-10 отражает как текущие проблемы в области веб-безопасности, так и эволюцию методов защиты.
Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?
Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика
Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.
Обязательно прочитайте: Что должен знать и уметь тестировщик
Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам