Введение
Сфера применения веб-технологий расширяется из года в год. Практически каждая компания использует в своей деятельности веб-приложения — как для работы с клиентами, так и для обеспечения внутренних бизнес-процессов. И если функциональности веб-приложений уделяется значительное внимание, то вопросы их безопасности зачастую решаются в последнюю очередь, что негативным образом сказывается на уровне защищенности всего предприятия.
Уязвимости веб-приложений предоставляют злоумышленникам широкий простор для действий. Ошибки проектирования и администрирования позволяют атакующим получать важную информацию, а также нарушать функционирование веб-приложения, осуществлять атаки на отказ в обслуживании, проводить атаки на пользователей, проникать во внутреннюю сеть компании и получать доступ к критически значимым ресурсам.
В данном отчете представлена статистика, полученная экспертами Positive Technologies в ходе работ по анализу защищенности веб-приложений в 2016 году, а также ее сравнение с результатами предыдущих лет.
Представленное исследование позволяет понять, на какие недостатки защиты следует обратить внимание при разработке и эксплуатации приложений, какие угрозы несут в себе те или иные уязвимости и какие методы исследования безопасности наиболее эффективны. Также приводится оценка общего уровня защищенности веб-приложений и его динамика в последние годы.
1. Методика
В данном отчете рассмотрены результаты исследований 73 веб-приложений, для которых проводился углубленный анализ защищенности с наиболее полным покрытием проверок. В статистику вошли не только внешние веб-приложения, доступные из сети Интернет, но и предназначенные для внутреннего пользования. В данном исследовании не учитываются уязвимости, обнаруженные в ходе работ по тестированию на проникновение, инструментальному сканированию и анализу систем ДБО: информация о них представлена в отдельных аналитических отчетах.
Оценка защищенности проводилась как ручным способом методами черного, серого и белого ящиков с использованием вспомогательных автоматизированных средств, так и в автоматизированном режиме с применением анализатора исходных кодов. Метод черного ящика заключается в проведении работ по оценке защищенности информационной системы от лица внешнего атакующего без предварительного получения какой-либо дополнительной информации о системе со стороны владельца. Метод серого ящика аналогичен методу черного ящика, при этом в качестве нарушителя в данном случае рассматривается пользователь, обладающий определенными привилегиями в системе. Метод белого ящика заключается в том, что для оценки защищенности информационной системы используются все необходимые данные о ней, включая исходный код приложений. Результаты ручного анализа защищенности представлены в первом разделе данного отчета, а результаты автоматизированного анализа — во втором.
Обнаруженные уязвимости классифицировались согласно соответствующим угрозам по системе Web Application Security Consortium Threat Classification (WASC TC v. 2), за исключением категорий Improper Input Handling и Improper Output Handling, поскольку они реализуются в рамках множества других атак. Кроме того, дополнительно мы выделили категории Insecure Session, Server Side Request Forgery и Clickjacking. Эти категории отсутствуют в классификации WASC, однако достаточно часто встречаются в исследуемых системах.
В категорию Insecure Session мы относим недостатки защиты сессии, например такие, как отсутствие флагов Secure и HttpOnly. Эти недостатки позволяют злоумышленнику перехватить значения Cookie пользователя при реализации различных атак.
Server-Side Request Forgery (подделка запроса со стороны сервера) — уязвимость, позволяющая выполнять произвольные HTTP-запросы от имени системы. Приложение, получив URL-адрес или HTTP-сообщение, осуществляет недостаточную проверку адреса назначения перед отправкой запроса. Используя данный недостаток, злоумышленник может отправлять запросы на серверы с ограниченным доступом (например, компьютеры в локальной сети), что приводит к разглашению важных данных, получению злоумышленником исходных кодов приложения, к отказу в обслуживании и т. п. В результате эксплуатации этой уязвимости злоумышленник может получить информацию о структуре сегментов сети, недоступных внешнему пользователю, обращаться к внутренним ресурсам, производить сканирование портов (сервисов) и т. п.
Clickjacking — разновидность атак на пользователей, заключающаяся в визуальном обмане. Ее принцип основан на том, что уязвимое приложение загружается во фрейме на страницу приложения, после чего маскируется под кнопку или какой-либо другой элемент. При клике по данному элементу пользователь выполняет задуманное злоумышленником действие в контексте уязвимого сайта. Уязвимость, позволяющая проводить эту атаку, возникает, когда приложение не возвращает специальный заголовок X-Frame-Options и тем самым разрешает показывать его во фреймах. Также в некоторых браузерах эта уязвимость может позволить выполнить атаку «Межсайтовое выполнение сценариев».
В настоящем отчете приведены только уязвимости, связанные с ошибками в коде и конфигурации веб-приложений. Другие распространенные проблемы информационной безопасности (к примеру, недостатки процесса управления обновлениями ПО) не рассматриваются.
Степень риска уязвимостей оценивалась согласно системе Common Vulnerability Scoring System (CVSS v. 3); на основе этой оценки выделялись качественные оценки высокого, среднего и низкого уровней риска.
2. Резюме
Все веб-приложения уязвимы
Во всех исследованных веб-приложениях были обнаружены те или иные недостатки защищенности. При этом в 58% приложений обнаружены критически опасные уязвимости. В то же время видны и позитивные тенденции: общая доля сайтов, содержащих критически опасные уязвимости, уменьшилась по сравнению с 2015 годом на 12%.
Под угрозой пользователи
Практически все веб-приложения позволяют осуществлять атаки на пользователей. Кроме того, ряд веб-приложений осуществляет недостаточную защиту пользовательских данных. Так, доступ к персональным данным пользователей был получен в 20% приложений, которые обрабатывают пользовательскую информацию, включая сайты банков и государственных организаций.
Утечки — по-прежнему актуальная проблема
Приблизительно в каждой второй системе выявлена утечка важных данных, в том числе исходного кода и персональных данных пользователей. Раскрывают информацию о версии используемого ПО 63% веб-приложений.
Уязвимости веб-приложений — простой вектор проникновения в ЛВС
Каждое четвертое веб-приложение позволяет проводить атаки на ресурсы внутренней сети. Например, злоумышленник может получить доступ к файлам, сканировать устройства внутренней сети или проводить атаки на ресурсы сети. Также каждое четвертое веб-приложение содержит критически опасную уязвимость «Внедрение операторов SQL» и позволяет получить доступ к базе данных. Кроме того, эта уязвимость может дать возможность злоумышленнику прочитать произвольные файлы или создать новые, а также проводить атаки на отказ в обслуживании.
Промышленные компании наиболее уязвимы
Почти половина веб-приложений промышленных компаний характеризуется крайне низким уровнем защищенности. Во всех отраслях экономики, кроме финансовой, преобладают приложения, подверженные уязвимостям высокого уровня риска. В финансовой сфере 38% приложений содержат критически опасные уязвимости.
64% веб-приложений на основе ASP.NET содержат критически опасные уязвимости
Приблизительно каждое второе веб-приложение, созданное на базе языков PHP и Java, также содержит критически опасные уязвимости. При этом на одно веб-приложение, разработанное на языке PHP, приходится максимальное количество таких уязвимостей — 2,8 на систему.
Продуктивные системы более уязвимы, чем тестовые
Продуктивные системы в 2016 году являются менее защищенными. При ручном анализе критически опасные уязвимости выявляются в 50% тестовых систем и в 55% продуктивных систем. Уязвимостей высокого и среднего уровня риска в одной продуктивной системе выявлено в среднем в два раза больше, чем в одной тестовой.
Анализ исходного кода эффективнее «черного ящика»
В рамках ручного анализа доступ к исходному коду позволял выявить критически опасные уязвимости в 75% приложений, а при исследовании методом черного ящика критически опасные уязвимости были обнаружены в 49% систем.
Автоматизированный анализ выявляет уязвимости в кратчайшее время
В среднем на одно приложение автоматизированный анализатор исходного кода позволил выявить 4,6 уязвимости высокого уровня риска, 66,9 уязвимости среднего уровня риска и 45,9 уязвимости низкого уровня риска. Анализ исходного кода автоматизированными средствами показывает высокую эффективность, а скорость работы превосходит возможности ручного тестирования.
3. Портрет участников исследования
Рассматриваемые веб-приложения принадлежат компаниям, относящимся к различным сферам деятельности — финансовым организациям, государственным учреждениям, СМИ, телекоммуникационным и промышленным компаниям; в отдельную категорию выделены интернет-магазины различной направленности.
Рисунок 1. Портрет участников исследования
Среди исследуемых приложений преобладали продуктивные, т. е. внедренные в эксплуатацию и доступные для пользования, они составили почти две трети от общего количества систем.
Рисунок 2. Доли продуктивных и тестовых систем
В этом году среди средств разработки веб-приложений преобладают PHP, Java, по сравнению с прошлым годом значительно увеличилась доля приложений, созданных на основе технологии ASP.NET. Иные средства разработки (Ruby, Python) объединены в категорию «Другие» и составляют всего 7%.
Рисунок 3. Средства разработки веб-приложений
4. Тенденции
Все веб-приложения, исследованные в рамках анализа защищенности ручными методами или с использованием автоматизированных средств, были подвержены уязвимостям той или иной степени опасности. При этом всего в 1% приложений были выявлены уязвимости только низкой степени опасности. Позитивные изменения состоят в значительном сокращении (с 70 до 58%) доли веб-приложений, содержащих уязвимости высокого уровня риска. Частично на статистические данные повлиял тот факт, что компании, которые в прошлом году проводили анализ защищенности, учли результаты проверок при разработке новых веб-приложений. Причем в первую очередь внимание уделялось устранению критически опасных уязвимостей.
Рисунок 4. Доля уязвимых сайтов по максимальной степени риска уязвимостей
В целом негативная тенденция наблюдалась в течение предыдущих трех периодов исследований, и если в 2015 году мы наблюдали только замедление роста числа приложений, подверженных уязвимостям высокого уровня риска, то в 2016 году произошел спад. Однако стоит обратить внимание, что критически опасные ошибки все еще выявляются более чем в половине приложений, для которых проводится анализ защищенности.
Практически во всех исследованных приложениях были обнаружены уязвимости среднего уровня риска. Это число незначительно колеблется каждый год в пределах 90—100%. Возросла доля веб-приложений, подверженных уязвимостям низкого уровня риска.
5. Ручной анализ защищенности веб-приложений
Среди всех уязвимостей, выявленных в рамках ручного анализа веб-приложений, одну десятую часть составляют уязвимости высокого уровня риска, а большая часть (81%) относится к среднему уровню опасности. По сравнению с прошлым годом доля критически опасных уязвимостей существенно сократилась, однако это связано преимущественно с тем, что в 2016 году на одну систему выявлено значительно больше уязвимостей среднего уровня риска.
Рисунок 6. Доля уязвимостей различной степени риска (ручное тестирование)
Недостатки безопасности найдены во всех исследованных веб-приложениях. Критически опасные уязвимости обнаружены более чем в половине приложений, для которых проводились ручные проверки (54%), 44% приложений подвержены уязвимостям среднего уровня риска и ниже, и лишь в 2% приложений были выявлены уязвимости только низкой степени опасности.
Рисунок 7. Распределение систем по максимальной степени риска обнаруженных уязвимостей (ручное тестирование)
В среднем на одну систему при ручном анализе защищенности выявлено 17 уязвимостей среднего уровня риска и по две уязвимости высокого и низкого уровня риска.
5.1. Наиболее распространенные уязвимости
В 2016 году половина уязвимостей, вошедших в десятку самых распространенных, позволяет совершать атаки на пользователей веб-приложений.
Как и в прошлом году, на первой строчке рейтинга находится уязвимость среднего уровня риска «Межсайтовое выполнение сценариев» (Cross-Site Scripting), которая встречается в 75% исследованных систем. В результате эксплуатации данной уязвимости злоумышленник может внедрить в браузер пользователя произвольные HTML-теги, включая сценарии на языке JavaScript и других языках, и таким образом получить значение идентификатора сессии атакуемого и совершить иные неправомерные действия, например фишинговые атаки.
Эксперты Positive Technologies в прошедшем году проводили также исследования атак злоумышленников на веб-приложения, в том числе составили рейтинг наиболее популярных атак. Исходными данными для статистического отчета послужили результаты множества пилотных проектов по внедрению межсетевого экрана уровня приложений PT Application Firewall среди российских и зарубежных компаний. Для того чтобы взломать сайт или атаковать его пользователей, злоумышленники пробуют эксплуатировать различные уязвимости приложения — как ошибки, допущенные при разработке, так и недостатки администрирования. По результатам исследований было установлено, что в 58% приложений, для которых проводились пилотные проекты, злоумышленники предпринимали попытки атаковать пользователей путем эксплуатации самой распространенной в этом году уязвимости «Межсайтовое выполнение сценариев».
Веб-приложения, содержащие ошибки, связанные с раскрытием информации о версии ПО (Fingerprinting), занимают второе место в рейтинге и встречаются в 63% систем. Кроме того, более чем в половине систем (54%) выявлена утечка важных данных, в том числе исходного кода и персональных данных.
Отсутствие защиты от перебора учетных данных (Brute Force) остается на третьем месте, но доля приложений, уязвимых для такого перебора, увеличилась на 10%.
На пятом и шестом местах находятся недостатки защиты пользовательских сессий и отсутствие защиты от атак типа Clickjacking. Сравнение с прошлым периодом исследований для этих недостатков не приводится, поскольку в отдельные категории они были выделены лишь в этом году. В то время как разработчики стали более внимательно относиться к устранению критически опасных уязвимостей, несущих угрозу непосредственно для владельцев веб-приложений, на первый план в этом году выходят ошибки, затрагивающие пользователей. В 35% систем выявлена уязвимость, которая также позволяет проводить атаки на пользователей, — «Подделка межсайтовых запросов» (Cross-Site Request Forgery).
Как уже отмечалось, общая доля сайтов, содержащих уязвимости высокого уровня риска, уменьшилась, и в этом году в рейтинге оказалась всего одна критически опасная уязвимость — «Внедрение операторов SQL», которой, тем не менее, подвержены 25% веб-приложений. По итогам исследований атак на веб-приложения в 2016 году попытка эксплуатации этой уязвимости находится на первом месте в рейтинге наиболее популярных атак и встречается в 84% систем.
Рисунок 11. Атаки «Внедрение операторов SQL» (доля систем)
Уязвимости клиентской части в 2016 году составили 59% от общего числа. Среди них «Межсайтовое выполнение сценариев», «Подделка межсайтовых запросов», недостатки защиты сессии и другие проблемы безопасности, позволяющие совершать атаки на клиентов веб-приложения. 41% выявленных уязвимостей относятся к серверной части приложений, например «Утечка информации» или «Недостаточная авторизация».
5.2. Анализ угроз и уровней защищенности
Рисунок 15. Уровень защищенности веб-приложений по отраслям
Рисунок 17. Соотношение уязвимостей, позволяющих проводить атаки на пользователей
Рисунок 18. Доля систем, в которых злоумышленник может получить доступ к исходному коду
Рисунок 19. Доля систем, в которых злоумышленник может получить доступ к персональным данным пользователей
Рисунок 20. Критически опасные угрозы по отраслям
5.3. Статистика для различных отраслей экономики
Рисунок 21. Доли веб-приложений с уязвимостями различной степени риска
Рисунок 22. Максимальная степень риска (доли веб-приложений)
Рисунок 23. Среднее число уязвимостей различного уровня риска на одно приложение
Рисунок 24. Доли отраслевых сайтов с распространенными уязвимостями
5.4. Анализ различных средств разработки
Рисунок 25. Доля веб-приложений по максимальному уровню риска уязвимостей
Рисунок 26. Доли систем с уязвимостями разной степени риска
Рисунок 27. Среднее количества уязвимостей на одну систему в зависимости от средства разработки
5.5. Сравнение тестовых и продуктивных систем
5.6. Сравнение методов тестирования
Как видно из результатов исследования, в 75% веб-приложений, для которых проводился анализ исходного кода, были выявлены критически опасные уязвимости. Для тех приложений, где исходный код не был доступен, этот показатель составляет 49%. Уязвимости среднего уровня риска были обнаружены практически во всех приложениях как при использовании метода черного ящика (98%), так и в результате анализа исходного кода (92%). Таким образом, анализ приложения методом белого ящика в большинстве случаев оказывается более эффективным, но тем не менее внешний злоумышленник, не обладающий сведениями о системе, также с высокой долей вероятности сможет обнаружить уязвимости различной степени риска, в том числе критически опасные.
Помимо этого, стоит принять во внимание тот факт, что в результате эксплуатации различных уязвимостей злоумышленник может получить доступ и к исходному коду приложения, как было показано выше.
В среднем при наличии доступа к исходному коду в одном приложении специалисты Positive Technologies выявляли 2,8 уязвимости высокого уровня риска, в то время как методом черного ящика были обнаружены 1,9 уязвимости на систему. В связи с тем, что существенная часть работ по анализу исходного кода проводилась в отношении тестовых версий новых приложений для компаний, которые уже проводили тестирование своих систем годом ранее, разница не столь велика, как в прошлый период исследований. Эффективность метода белого ящика можно подтвердить и на основе результатов автоматизированного анализа исходного кода, которые представлены в следующем разделе.
6. Автоматизированный анализ защищенности
В данном разделе будут рассмотрены веб-приложения, для которых проводился анализ исходного кода с использованием автоматизированного анализатора. Проверки исходного кода ручными методами и с помощью автоматизированных средств проводились в отношении разных систем, поэтому их результаты нельзя сравнивать между собой.
Все приложения, вошедшие в данную выборку, являлись тестовыми, причем часть приложений находилась на ранней стадии разработки. Уязвимости, обнаруженные в ходе автоматизированного анализа и включенные в представленную статистику, были подтверждены вручную на тестовых стендах.
Рисунок 38. Распределение систем по максимальной степени риска уязвимостей (автоматизированное тестирование)
Используемый в наших исследованиях анализатор кода позволяет автоматически создавать эксплойты для проверки наличия уязвимости, в данном случае эксплойт был составлен для отправки запроса методом GET.
Также были выявлены недостатки в коде приложений (жестко заданный пароль, использование однонаправленной хеш-функции без соли, статический генератор случайных чисел) и другие ошибки.
Заключение
Результаты исследования показывают, что несмотря на ярко выраженные позитивные тенденции, общий уровень защищенности веб-приложений остается достаточно низким. Более чем в половине веб-приложений выявляются критически опасные уязвимости, причем при наличии у злоумышленника доступа к исходному коду этот показатель резко возрастает. Обнаруженные уязвимости позволяют нарушителю получить большое количество чувствительной информации, например исходный код приложения или персональные данные пользователей, в том числе на сайтах банков и государственных учреждений. Не защищены от атак и сами пользователи: практически все приложения дают злоумышленнику возможность провести на них атаки.
Кроме того, уязвимости веб-приложений являются одним из наиболее доступных злоумышленнику векторов проникновения во внутреннюю сеть компании, среди исследованных систем около четверти могут стать причиной несанкционированного доступа ко внутренним ресурсам.
Анализ исходного кода показывает намного более высокие результаты, чем исследование защищенности без доступа к коду приложения. Кроме того, тестирование исходного кода в процессе разработки позволяет значительно повысить защищенность конечного приложения. Для анализа исходного кода на различных стадиях разработки целесообразно применять автоматизированные средства, поскольку скорость работы анализатора превосходит возможности ручного анализа.
Веб-приложения, находящиеся в процессе эксплуатации, оказались более уязвимыми, чем тестовые: это свидетельствует о том, что необходимо проводить анализ защищенности как на стадии разработки, так и после внедрения в эксплуатацию. В качестве превентивной меры защиты рекомендуется использовать межсетевой экран уровня приложений (web application firewall).