В апреле – июне 2021 г. мы провели опрос-исследование. В нем участвовали представители 200 организаций разного масштаба из области IT, госсектора, финансовой сферы, промышленности и других направлений. По данным опроса, только 10% респондентов считают веб-приложения приоритетными элементами IT-инфраструктуры для регулярной проверки на уязвимости. Несмотря на то, что им следует уделять больше внимания. Активный перевод компаниями работников на удаленку в 2020/2021 и вывод многих внутренних сервисов на сетевой периметр способствовали росту интереса злоумышленников к эксплуатации уязвимостей веб-приложений. Наметилось более активное использование брешей в решениях и сервисах, используемых для организации удаленной работы, корпоративных VPN, облачных и других решениях.

Организовать контроль уязвимостей веб-приложений своими силами может практически любая компания – с помощью инструментов для статического анализа (SAST), к которым относится наш продукт Solar appScreener. Такие решения анализируют код без необходимости его запуска и по характерным конструкциям выявляют слабые места. По результатам проверки формируются оповещения о возможных проблемах и рекомендации по их устранению. Работать с SAST-инструментами может специалист, даже не имеющий опыта в разработке.

Актуальные уязвимости веб-приложений в 2021

При рассмотрении проблемных мест веб-приложений целесообразно опираться на списки рисков Open Web Application Security Project (OWASP). Это международная некоммерческая организация, занимающаяся классификацией векторов атак и уязвимостей веб-приложений, анализом показателей безопасности с целью их улучшения. С периодичностью в 3 года она публикует список 10 наиболее актуальных рисков. В сентябре 2021 г. появился проект обновленного перечня угроз, 7 из которых – из числа «постоянных участников» рейтинга, а 3 позиции – совсем новые. Теперь перечень выглядит так:

  1. Broken Access Control – нарушение контроля доступа.

  2. Cryptographic Failures – уязвимость к криптографическим атакам.

  3. Injection – инъекции.

  4. Insecure Design – небезопасный дизайн (впервые в списке).

  5. Security Misconfiguration – неверная конфигурация безопасности.

  6. Vulnerable and Outdated Components – применение в приложениях компонентов с неизвестными уязвимостями.

  7. Identification and Authentication Failures – ошибки идентификации и аутентификации.

  8. Software and Data Integrity Failures – нарушение целостности данных программного обеспечения (впервые в списке).

  9. Security Logging and Monitor Failures – ошибки мониторинга и недостаточное ведение журналов.

  10. Server-Side Request Forgery (SSRF) – подделка запросов со стороны сервера (впервые в списке).

Суть уязвимостей и их обнаружение (в том числе и SAST-инструментами)

Суть уязвимости Broken Access Control заключается в отсутствии в веб-приложении проверки доступа к запрашиваемым объектам. При ее использовании злоумышленники могут подделывать запросы и получать доступ к данным без соответствующих разрешений, что чревато разными последствиями, вплоть до загрузки сторонних скриптов и функционалов из других приложений (сайтов). SAST-инструменты могут обнаруживать отсутствие контроля доступа в ходе анализа кода (например, по неправильной конфигурации CORS, а также по другим признакам). При этом часто требуется ручная проверка активности контроля.

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

Инъекции – уязвимости веб-приложений, которые возникают при вставке злоумышленниками в запросы или команды ненадежных данных. Они возникают в приложениях, принимающих от пользователей и из внешних источников параметры в качестве входных данных. SAST-анализаторы способны обнаруживать признаки большинства подобных уязвимостей: проблемы с пользовательскими формами, использование небезопасных функций, через которые можно исполнять внешний код (как, например, eval в JavaScript), проблемы с API, позволяющие использовать интерпретатор для вставки ненадежных данных.

Insecure Design – это не про дизайн как таковой. Здесь речь идет о широкой категории недостатков и проблем, которые можно охарактеризовать как «отсутствующий или неэффективный дизайн управления». Пример – использование в программе кодов для шифрования данных и отсутствие для этого соответствующего метода. Теоретически такие проблемы также выявляются статическими анализаторами безопасности приложений.

Уязвимости Security Misconfiguration возникают из-за использования небезопасных конфигураций приложений и их отдельных компонентов, фреймворков, серверов. Часто их реализация становится возможной из-за применения конфигураций по умолчанию, которые не всегда безопасны (проблемные места выявляются практически каждый день, и разработчики часто не успевают вносить соответствующие изменения в конфигурации). SAST-инструменты способны обнаруживать эти проблемы, в том числе и относительно новые, – за счет того, что сведения о них, как и описание их типовых признаков, получают из внешних баз/источников.

Риски наличия уязвимостей веб-приложений Vulnerable and Outdated Components возникают при использовании сторонних библиотек, компонентов, фреймворков и иных средств с открытым исходным кодом. Злоумышленники уделяют им должное внимание, постоянно анализируют код и ищут дыры. Минимизировать такие проблемы поможет использование актуальных версий сторонних библиотек, компонентов, фреймворков. А также и SAST-инструменты, черпающие сведения о новых угрозах из внешних баз.

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

Угрозы Software and Data Integrity Failures связаны с критическими данными и конвейерами CI/CD. Одной из частых причин, приводящих к возникновению этой уязвимости, являются автоматические обновления компонентов приложения, которые могут выполняться без проверки достоверности источников. SAST-инструменты позволяют выявлять такие проблемы за счет того, что в их функционал заложена проверка внешних источников, на которые есть ссылки в коде приложений.

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

Уязвимости веб-приложений Server-Side Request Forgery (SSRF) реализуются при отсутствии проверки URL при обращении к внешним ресурсам, даже при использовании VPN или брандмауэра. Для их минимизации формируют списки разрешенных URL, отключают перенаправление HTTP, внедряют механизмы обработки и проверки ответов серверу. Проверки на наличие/отсутствие этих функций можно реализовать путем добавления в SAST собственных правил.

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