Классификация угроз безопасности Web-приложений Классификация, представленная ниже, представляет собой совместную попытку членов международного консорциума Web Application Security собрать воедино и упорядочить угрозы безопасности Web-сайтов. Представлена компиляция и квинтэссенция известных классов атак, которые представляют угрозы для Web-приложений. Каждому классу атак присвоено стандартное название и описаны его ключевые особенности. Классы организованы в иерархическую структуру.
Аутентификация (Authentication) Раздел, посвященный аутентификации, описывает атаки, направленные на используемые Web-приложением методы проверки идентификатора пользователя, службы или приложения, на обход или эксплуатацию уязвимостей в механизмах реализации аутентификации Web-серверов. Аутентификация использует как минимум один из трёх механизмов (факторов): «что-то, что мы имеем», «что-то, что мы знаем» или «что-то, что мы есть».
Подбор (Brute Force) – автоматизированный процесс проб и ошибок, использующийся для того, чтобы угадать имя пользователя, пароль, номер кредитной карточки, ключ шифрования и т.д.
Многие системы позволяют использовать слабые пароли или ключи шифрования, и пользователи часто выбирают легко угадываемые или содержащиеся в словарях парольные фразы.
Злоумышленник может воспользоваться словарями и попытаться подобрать тысячи или даже миллионы содержащихся в них комбинаций символов в качестве пароля. Если испытуемый пароль позволяет получить доступ к системе, атака считается успешной и атакующий может использовать учётную запись. Подобная техника проб и ошибок может быть использована для подбора ключей шифрования.
В случае использования севером ключей недостаточной длины, злоумышленник может получить рабочий ключ, протестировав все возможные комбинации.
Существует два вида подбора: прямой и обратный. При прямом подборе используются различные варианты пароля для одного имени пользователя. При обратном – перебираются различные имена пользователей, а пароль остаётся неизменным. В системах с миллионами учётных записей вероятность использования различными пользователями одного и того же пароля довольно высока. Несмотря на популярность и сравнительно высокую эффективность, подбор может занимать несколько часов, дней или лет.
Недостаточная аутентификация (Insufficient Authentication) – эта уязвимость возникает, когда Web-сервер позволяет атакующему получать доступ к важной информации или функциям сервера без должной аутентификации. Интерфейсы администрирования через Web – яркий пример таких критичных систем.
В зависимости от специфики приложения, подобные компоненты не должны быть доступны без должной аутентификации. Чтобы не использовать аутентификацию, некоторые ресурсы «скрываются» по определённому адресу, который не указан на основных страницах сервера или других общедоступных ресурсах. Однако, подобный подход не более чем «безопасность через сокрытие» (security by obscurity). Важно понимать, что, не смотря на то, что злоумышленник не знает адреса страницы, она всё равно доступна через Web.
Необходимый URL может быть найден перебором типичных файлов и директорий (таких как /admin/), с использованием сообщений об ошибках, журналов перекрестных ссылок, путем простого чтения документации или в результате работы поисковых систем. Подобные ресурсы должны быть защищены адекватно важности их содержимого и функциональным возможностям.
Как пример: многие Web-приложения по умолчанию используют для административного доступа ссылку в корневой директории сервера (например, /admin/). Обычно ссылка на эту страницу не фигурирует в содержимом сервера, однако страница доступна с помощью стандартного браузера. Поскольку пользователь или разработчик предполагает, что никто не воспользуется этой страницей, так как ссылка на неё отсутствует, зачастую аутентификацией для попадания на неё просто пренебрегают. И для получения контроля над сервером злоумышленнику достаточно зайти на эту страницу.
Небезопасное восстановление паролей (Weak Password Recovery Validation) – эта уязвимость возникает, когда Web-сервер позволяет атакующему несанкционированно получать, модифицировать или восстанавливать пароли других пользователей.
Часто аутентификация на Web-сервере требует от пользователя запоминания пароля или парольной фразы. Только пользователь должен знать пароль, причем помнить его он должен надёжно. Со временем пароль забывается. Ситуация усложняется, поскольку в среднем пользователь посещает от 20 и более сайтов, требующих ввода пароля1. Таким образом, функция восстановления забытого пароля является важной составляющей предоставляемой Web-сайтами сервиса.
Примером реализации подобной функции является использование «секретного вопроса», ответ на который указывается в процессе регистрации. Вопрос либо выбирается из списка или вводится самим пользователем. Еще один механизм позволяет пользователю указать «подсказку», которая поможет ему вспомнить пароль. Другие способы требуют от пользователя указать часть персональных данных, таких как номер соц. страхования, ИНН, домашний адрес почтовый индекс и т.д., которые затем будут использоваться для установления личности. После того как пользователь докажет свою идентичность, система отобразит новый пароль или перешлёт его по почте.
Уязвимости, связанные с недостаточной проверкой при восстановлении пароля возникают, когда атакующий получает возможность обмануть используемый механизм. Это случается, когда информацию, используемую для проверки пользователя, легко угадать или сам процесс подтверждения можно обойти. Система восстановления пароля может быть скомпрометирована путем использования подбора, уязвимостей системы или из-за легко угадываемого ответа на секретный вопрос.
Например, слабые методы восстановления паролей – многие серверы требуют от пользователя указать его e-mail в комбинации с домашним адресом и номером телефона. Эта информация может быть легко получена из сетевых справочников. В результате, данные, используемые для проверки, не являются большим секретом. Кроме того, эта информация может быть получена злоумышленником с использованием других методов, таких как «межсайтовое выполнение сценариев» (Cross-Site Scripting) или «фишинга» (Phishing).
Ещё один пример – сервер, использующий подсказки для облегчения запоминания паролей, может быть атакован, поскольку подсказки помогают в реализации подбора паролей. Пользователь может использовать стойкий пароль, что-то вроде"221277King" с соответствующей подсказкой: «д-р+люб. писатель». Атакующий может заключить, что пользовательский пароль состоит из даты рождения и имени любимого автора пользователя. Это помогает сформировать относительно короткий словарь для атаки путём перебора.
Пример атаки с использованием секретного вопроса и ответа – предположим, ответ пользователя "Бобруйск", а секретный вопрос "Место рождения". Злоумышленник может ограничить словарь для подбора секретного ответа названиями городов. Более того, если атакующий располагает некоторой информацией о пользователе, узнать его место рождения бывает относительно не сложно.
|