В настоящее время тяжело представить любую организацию, предоставляющие услуги, без веб-приложения. Люди предпочитают получать услуги и приобретать товары онлайн, получив всю необходимую информацию на сайте организации, для экономии своего времени. Сайт стал лицом организаций в сфере услуг, оказывая большое влияние на их репутацию и функционирование. Поэтому организации замотивированы поддерживать свои веб-приложения на высоком технологическом уровне, который включает в себя безопасность от кибератак.
Актуальность проблемы безопасности веб-приложений растёт, поскольку в них осуществляются важные бизнес-процессы, а так же используется конфиденциальная информация. Нарушение целостности процессов или кража ценной информации может привести к большим финансовым потерям.
Согласно статистике, полученной экспертами Positive Technologies в ходе работ по анализу защищенности веб-приложений в 2018 году, доля приложений, содержащих уязвимости высокого уровня риска, достигло 67% и продолжает расти[1]. Также среднее количество уязвимостей в одном веб-приложение увеличилось по сравнению с прошлогодними показателями.
Нельзя игнорировать проблему веб-безопасности, нужно детально разобраться в основных уязвимостях и методах их устранения.
На рисунке 1 представлены самые распространённые веб-уязвимости на 2018 год.
Рисунок 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 Entities — XXE) – это уязвимость позволяет злоумышленникам вмешиваться в обработку XML данных и просматривать любые файлы сервера, а так же взаимодействовать с любыми системами, к которым имеет доступ само приложение. Эта уязвимость может быть использована для выполнения других атак и извлечению данных, что может привести к серьёзным последствиям, поэтому эта уязвимость должна рассматриваться как серьезные угрозы безопасности веб-приложения. Однако, легко проверить веб-приложение на эту уязвимость с помощью автоматического сканера уязвимостей Acunetix, включающего в себя специализированный модуль сканера XXE [3]. Так же есть и другие сканеры, позволяющие обнаружить ряд уязвимостей, включая XXE. Для предотвращения внедрения внешних сущностей XML можно порекомендовать следующее:
- Использовать по возможности менее сложные форматы данных, такие как JSON.
- Отключить внешнюю сущность XML и обработку пользовательских документов (DTD) во всех синтаксических анализаторах.
- Использовать инструменты статической защиты приложений (SAST) для обнаружения уязвимостей XXE.
Перейдём к основным уязвимостям среднего риска, которые, безусловно, нельзя игнорировать, несмотря на то, что они считаются менее критичными. При наличии угроз среднего риска, безопасное функционирование веб-приложения находится под угрозой.
Небезопасный контроль доступа (Broken Access Control). Суть уязвимости — отсутствие проверки доступа к запрашиваемому объекту для различных групп пользователей. Из-за этой уязвимости злоумышленники могут получить права администратора или пользователя и действовать от их лица. Для защиты необходимо:
- Внедрение механизмов контроля доступа во всём приложении.
- Проверка прав на изменение и удаление любых данных.
Неправильная настройка безопасности (Security Misconfiguration) – наиболее часто встречающаяся проблема (79% проанализированных веб-приложений имели неправильную настройку безопасности). Большая доля приложений с этой уязвимостью объясняется тем, что неправильная настройка безопасности может происходить на любом уровне стека приложений, включая сетевые службы, веб-сервер, сервер приложений, базу данных, пользовательский код, контейнеры или хранилища.
Очень тяжело вручную отследить неправильную конфигурацию одного из компонентов веб-приложения, поэтому для решения этой проблемы полезно использовать автоматические сканеры проверки корректных конфигураций и настроек всех компонентов приложения.
Межсайтовый скриптинг (Cross—Site Scripting — XSS) – атака внедрения кода на стороне клиента. 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 по предотвращению кибератак, и придерживаться рекомендаций.
- Следить за тенденциями веб-уязвимостей
- Своевременно обновлять программное обеспечение веб-сервера, используемые в приложении зависимости (фреймворки, библиотеки).
- Использовать средства обнаружения атак и мониторинга для своевременного обнаружения уязвимостей.
Для сохранения денег, репутации и доверия своих клиентов владельцам веб-приложений потребуется комплексный подход к защите, чтобы свести риск успешных атак к нулю, и тем самым обезопасить свои бизнес-процессы.
Список литературы
- Официальный сайт компании Positive Technologies. Статистика уязвимостей веб-приложений в 2018 году / [Электронный ресурс]. – Режим доступа: URL: https://www.ptsecurity.com/upload/corporate/ru-ru/analytics/Web-Vulnerabilities-2019-rus.pdf (дата обращения: 29.12.2019).
- Официальный сайт OWASP, Top 10 Application Security Risks 2017 / [Электронный ресурс]. – Режим доступа: URL: https://www.owasp.org/index.php/Top_10-2017_Top_10 (дата обращения 03.01.2020).
- Официальный сайт Acunetix / [Электронный ресурс]. – Режим доступа: URL: https://www.acunetix.com/ (дата обращения: 03.01.2020).
[1] OWASP (Open Web Application Security Project) – всемирный открытый проект безопасности веб-приложений
[2] Фаззеры (от англ. fuzzers) – инструмент, предназначенный для внедрения случайных данных в веб-приложение