ОБЗОР УЯЗВИМОСТЕЙ ВЕБ-ПРИЛОЖЕНИЙ

21 мая 5:54

В настоящее время тяжело представить любую организацию, предоставляющие услуги, без веб-приложения. Люди предпочитают получать услуги и приобретать товары онлайн, получив всю необходимую информацию на сайте организации, для экономии своего времени. Сайт стал лицом организаций в сфере услуг, оказывая большое влияние на их репутацию и функционирование. Поэтому организации замотивированы поддерживать свои веб-приложения на высоком технологическом уровне, который включает в себя безопасность от кибератак.

Актуальность проблемы безопасности веб-приложений растёт, поскольку в них осуществляются важные бизнес-процессы, а так же используется конфиденциальная информация. Нарушение целостности процессов или кража ценной информации может привести к большим финансовым потерям.

Согласно статистике, полученной экспертами Positive Technologies в ходе работ по анализу защищенности веб-приложений в 2018 году, доля приложений,  содержащих уязвимости высокого уровня риска, достигло 67% и продолжает расти[1]. Также среднее количество уязвимостей в одном веб-приложение увеличилось по сравнению с прошлогодними показателями.

Нельзя игнорировать проблему веб-безопасности, нужно детально разобраться в основных уязвимостях и методах их устранения.

На рисунке 1 представлены самые распространённые веб-уязвимости на 2018 год.

http://meridian-journal.ru/uploads/2515-1.PNG

Рисунок 1 – Уязвимости из списка OWASP[1] Top 10-2017 (доля приложений) [1]

 

Рассмотрим сначала наиболее распространенные уязвимости высокого уровня риска и их возможное предотвращение.

Уязвимости аутентификации (Broken Authentification) – этот тип уязвимости позволяет злоумышленнику захватить или обойти методы авторизации, используемые веб-приложением с целью захвата учётных записей и получения привилегий атакованного пользователя. Доля приложений с этой уязвимостью согласно статистике Positive Technologies [1] составляет 74%. Достаточно большая доля обладает этой уязвимостью, наличие которой может привести к мошенничеству в сфере социального обеспечения и краже личных данных, раскрытии защищенной законом конфиденциальной информации. Для предотвращения уязвимости аутентификации в приложении:

  • Учетные данные аутентификации пользователя должны быть защищены на стороне сервера при хранении с использованием хеширования и/или шифрования.
  • Идентификаторы сеанса (сессии) пользователя не должны присутствовать в URL-адресе.
  • При выходе из системы сеансы пользователей или токены аутентификации должны быть правильно аннулированы и воссозданы только после успешного входа в систему.
  • Отправка учётных данных должна производиться только через зашифрованные подключения.
  • Принудительное отключение учётной записи, после установления количества недопустимых попыток входа в систему, на период времени, достаточный для предотвращения подбора учётных данных.
  • Политика паролей, запрещающая использование слабых, коротких и общеизвестных паролей.
  • Регистрация, восстановление учетных данных и пути API используют одинаковые сообщения для всех результатов, т. е. не предоставляют информацию, по которой можно получить или подобрать данные учётной записи.

 

Инъекции (Injection) – широко распространённая уязвимость, одна из самых опасных по версии OWASP Top 10 Application Security Risks 2017 [2], суть которой выполнение произвольного запроса к базе данных. Уязвимость внедрения запроса очень распространена в веб-приложениях с устаревшим кодом. Злоумышленники могут быстро обнаружить эту уязвимость с помощью изучения кода сканерами и фаззерами[2]. Уязвимость внедрения часто встречается в SQL, LDAP, XPath, NoSQL, синтаксических анализаторах XML, в заголовках SMTP и ORM запросах. Последствия такой атаки могут быть разными: утечка всей информации, содержащейся в базе данных, отказ в обслуживании, контроль сервера, получение прав администратора. Все эти последствия ведут к большим проблемам, упущенной выгоде, потерям репутации и денег. Несмотря на всю серьезность, защита от атаки весьма проста:

  • Экранировать специальные символы для любых динамических запросов.
  • Использовать LIMIT и другие элементы управления SQL в запросах, для предотвращения массового раскрытия записей в случае внедрения SQL.
  • Дополнительной мерой является установка Web Application Firewall (WAF) систем, предназначенных для блокирования атак на веб-приложения.

Раскрытие конфиденциальных данных (Sensitive Data Exposure) Эта уязвимость может возникнуть, когда веб-приложение не обеспечивает надлежащей защиты конфиденциальной информации от раскрытия злоумышленниками: номера счетов, номера кредитных карт, персональные данные пользователя, медицинские записи. Эта уязвимость, пожалуй, самая критичная именно для бизнеса, поскольку успешное раскрытие конфиденциальных данных злоумышленниками ведёт к финансовым потерям (штрафы, компенсации ущерба и т.д.), снижения доверия к бренду. Для предотвращения раскрытия конфиденциальных данных необходимо:

  • Использовать новейшие стойкие алгоритмы шифрования
  • Шифровать всю конфиденциальную информацию при передаче с помощью безопасных протоколов, таких как TLS, а так же шифровать данные в состоянии покоя.
  • Отключить кэширование для ответов (форм), содержащих конфиденциальные данные.
  • Хранить пароли, используя мощные адаптивные и соленые функции хэширования.

Внедрение внешних сущностей XML (XML External EntitiesXXE) – это уязвимость позволяет злоумышленникам вмешиваться в обработку XML данных и просматривать любые файлы сервера, а так же взаимодействовать с любыми системами, к которым имеет доступ само приложение. Эта уязвимость может быть использована для выполнения других атак и извлечению данных, что может привести к серьёзным последствиям,  поэтому эта уязвимость должна рассматриваться как серьезные угрозы безопасности веб-приложения. Однако, легко проверить веб-приложение на эту уязвимость с помощью автоматического сканера уязвимостей Acunetix, включающего в себя специализированный модуль сканера XXE [3]. Так же есть и другие сканеры, позволяющие обнаружить ряд уязвимостей, включая XXE. Для предотвращения внедрения внешних сущностей XML можно порекомендовать следующее:

  • Использовать по возможности менее сложные форматы данных, такие как JSON.
  • Отключить внешнюю сущность XML и обработку пользовательских документов (DTD) во всех синтаксических анализаторах.
  • Использовать инструменты статической защиты приложений (SAST) для обнаружения уязвимостей XXE.

Перейдём к основным уязвимостям среднего риска, которые, безусловно, нельзя игнорировать, несмотря на то, что они считаются менее критичными. При наличии угроз среднего риска, безопасное функционирование веб-приложения находится под угрозой.

Небезопасный контроль доступа (Broken Access Control). Суть уязвимости — отсутствие проверки доступа к запрашиваемому объекту для различных групп пользователей. Из-за этой уязвимости злоумышленники могут получить права администратора или пользователя и действовать от их лица. Для защиты необходимо:

  • Внедрение механизмов контроля доступа во всём приложении.
  • Проверка прав на изменение и удаление любых данных.

Неправильная настройка безопасности (Security Misconfiguration) – наиболее часто встречающаяся проблема (79% проанализированных веб-приложений имели неправильную настройку безопасности). Большая доля приложений с этой уязвимостью объясняется тем, что неправильная настройка безопасности может происходить на любом уровне стека приложений, включая сетевые службы, веб-сервер, сервер приложений, базу данных, пользовательский код, контейнеры или хранилища.

Очень тяжело вручную отследить неправильную конфигурацию одного из компонентов веб-приложения, поэтому для решения этой проблемы полезно использовать автоматические сканеры проверки корректных конфигураций и настроек всех компонентов приложения.

         Межсайтовый скриптинг (CrossSite ScriptingXSS) – атака внедрения кода на стороне клиента. XSS – одна из самых распространённых уязвимостей веб-приложений, благодаря которой злоумышленник может внедрить вредоносный код. Код в свою очередь исполнится браузером пользователя. Поскольку исполняемый код в браузерах – это код JavaScript, который имеет ограниченный доступ к операционной системе пользователя, уязвимости XSS воспринимаются как менее опасные, чем, например, уязвимости инъекций. Но, тем не менее, код JavaScript может быть опасным, поскольку он имеет доступ ко всем объектам веб-страницы, а так же может отправлять произвольные сетевые запросы в произвольные пункты назначения. Эти особенности JavaScript дают злоумышленникам много возможностей для совершения вредоносных сценариев, и позволяет преступникам проводить сложные атаки весьма успешно.

Чтобы обезопасить приложение от XSS угрозы необходимо:

  • Экранировать данные, полученные как от сервера, так и от пользователя.
  • Безопасная обработка данных должна выполнять в коде веб-сервера и клиента.

Сообщество OWASP выделяет еще ряд распространённых уязвимостей, таких как:

  • Использование компонент с известными уязвимостями (Using Components with Known Vulnerabilities).
  • Недостаточный мониторинг (Insufficient Logging and Monitoring) – недостаточный мониторинг инцидентов позволяет злоумышленникам проводить дальнейшие атаки на системы и увеличивать число успешных атак.
  • Небезопасная десериализация (Insecure Deserialization) – приводит к удаленному выполнению кода [3].

Для защиты приложения от этих уязвимостей требуется организованные и целенаправленные действия по их отслеживанию и следованию рекомендаций OWASP.

Это не все виды веб-уязвимостей, но рассмотренные выше уязвимости встречаются в большом количестве веб-приложений, почти все из них – критические и их легко эксплуатировать.

Большинство критически опасных уязвимостей можно исправить только внесением изменений в программный код веб-приложения. Конечно, переработка веб-приложения потребует от владельцев веб-приложений значительных ресурсов.

Для повышения безопасности веб-приложений можно сформировать следующие рекомендации:

  • Использовать специализированные решения (Web Application Firewalls).
  • Использовать статическое тестирование защищенности приложений (SAST) для обнаружений уязвимостей.
  • Ознакомиться с документацией фонда OWASP по предотвращению кибератак, и придерживаться рекомендаций.
  • Следить за тенденциями веб-уязвимостей
  • Своевременно обновлять программное обеспечение веб-сервера, используемые в приложении зависимости (фреймворки, библиотеки).
  • Использовать средства обнаружения атак и мониторинга для своевременного обнаружения уязвимостей.

Для сохранения денег, репутации и доверия своих клиентов владельцам веб-приложений потребуется комплексный подход к защите, чтобы свести риск успешных атак к нулю, и тем самым обезопасить свои бизнес-процессы.

Список литературы

  1. Официальный сайт компании Positive Technologies. Статистика уязвимостей веб-приложений в 2018 году / [Электронный ресурс]. – Режим доступа: URL: https://www.ptsecurity.com/upload/corporate/ru-ru/analytics/Web-Vulnerabilities-2019-rus.pdf (дата обращения: 29.12.2019).
  2. Официальный сайт OWASP, Top 10 Application Security Risks 2017 / [Электронный ресурс]. – Режим доступа: URL: https://www.owasp.org/index.php/Top_10-2017_Top_10 (дата обращения 03.01.2020).
  3. Официальный сайт Acunetix / [Электронный ресурс]. – Режим доступа: URL: https://www.acunetix.com/ (дата обращения: 03.01.2020).

 

[1] OWASP (Open Web Application Security Project) – всемирный открытый проект безопасности веб-приложений

[2] Фаззеры (от англ. fuzzers) – инструмент, предназначенный для внедрения случайных данных в веб-приложение