В публикациях о различных уязвимостях и инцидентах информационной безопасности часто встречается аббревиатура CVE. CVE (Common Vulnerabilities and Exposures) – это список известных уязвимостей и дефектов безопасности. Рассмотрим, что он из себя представляет и какие дефекты безопасности из него были востребованы у хакеров в 2021 году. До 1999, когда CVE был запущен, было сложно передавать информацию об уязвимостях между разными базами, сканерами и другими инструментами. Каждый производитель решений по поиску дефектов безопасности имел свою базу со своим способом именования и набором параметров уязвимости.  Для решения этой проблемы компанией MITRE и был создан CVE.  MITRE Corporation – американская некоммерческая организация, специализирующаяся в области системной инженерии. Организация поддерживает проекты в различных областях, таких как космическая безопасность, информатика в здравоохранении, кибербезопасность и других. Ещё одним известным проектом MITRE является ATT&CK (Adversarial Tactics, Techniques, and Common Knowledge) – список известных техник, приёмов и тактик, которыми злоумышленники пользуются для атак на информационные системы, представленный в виде таблиц. CVE это "словарь" известных угроз, каждая запись которого состоит из следующих разделов: CVE ID, Reference, Description. CVE ID начинается с префикса CVE- и записывается с указанием года, в котором было сообщено об уязвимости и номера, присвоенного CNA (CVE Numbering Authorities). CNA – это разработчики ПО, Bug Bounty программы и другие организации, занимающиеся поиском уязвимостей, уполномоченные добавлять новые записи в CVE. Основным CNA является MITRE, однако сейчас статус CNA есть у 226 организации из 34 стран мира. Для того чтобы компания могла стать CNA у нее должна быть общедоступная политика раскрытия информации об уязвимостях и публичный ресурс для публикации информации о новых дефектах безопасности.  В дополнение к CVE ID запись CVE содержит только описание уязвимости и ссылки на дополнительные сведения, сообщения и рекомендации производителей ПО. Подробность описания для различных угроз разнится, но обычно оно строится по одной схеме. В нем говорится, что <проблема> в <версии> <продукта> приводит к <воздействию> в результате <атаки>.  Дополнительную информацию о каждой уязвимости из CVE, например оценку по CVSS или перечень уязвимых платформ (CPE), можно найти в базе NVD (National Vulnerability Database).  CVSS (Common Vulnerability Scoring System) - открытый стандарт для оценки уязвимостей. По CVSS на основании набора метрик и формул вычисляется оценка опасности уязвимости, она может принимать значения от 0 до 10, где 10 – наивысший балл. CVSS позволяет распределить усилия по реагированию на уязвимости в зависимости от их опасности. Кроме того, в базе NVD указаны дефекты CWE. CWE (Common Weakness Enumeration) – общий перечень проблем и недочетов программного обеспечения. В отличии от CVE, в списке CWE указаны не конкретные уязвимости, а потенциальные ошибки, которые могут привести к возникновению дефектов безопасности. Более подробно о CWE можете прочитать в статье моего коллеги.  Нашумевшим уязвимостям часто дают собственные имена. Например, CVE-2021-44228 можно встретить под названием Log4Shell, а CVE-2019-0708 известна как BlueKeep.  Удобным решением по поиску информации о уязвимостях является Vulnres. Vulners – агрегатор и поисковик по контенту в сфере информационной безопасности. Он позволяет искать новости и статьи об уязвимостях, патчи, эксплоиты и многое другое.  Другой полезный ресурс об уязвимостях – это VulDB, также предоставляющий большой набор данных и аналитику трендов информационной безопасности.  Что делать если вы нашли уязвимость? Прежде всего необходимо написать разработчику, в ПО которого вы нашли ошибку и четко описать суть проблемы. В ходе работы с найденными уязвимостями следует придерживаться принципов ответственного раскрытия информации (Coordinated vulnerability disclosure) и руководствоваться международными практиками, например, стандартом ISO/IEC 29147:2020 или этическим кодексом ethicsfIRST. Не следует разглашать информацию об ошибке публично, до тех пор, пока не пройдет определенное время. Это даст разработчикам время исправить уязвимость и выпустить патч. Обычно срок неразглашения может составлять от 30 до 120 дней. Для более сложных уязвимостей срок может и увеличиваться. Чтобы запросить CVE ID для найденного дефекта безопасности нужно заполнить форму и указать как минимум тип уязвимости, разработчика или поставщика продукта, а также затронутые версии. Для того чтобы уязвимость включили в CVE она должна соответствовать критериям: Уязвимость должна быть исправлена; Разработчик, в продукте которого найдена уязвимость, должен признать, что она имеет негативное последствие для безопасности; Уязвимость затрагивает только одну кодовую базу. Если уязвимость связана с ошибками в open-source библиотеках, протоколах или стандартах, то CVE назначается для каждого затронутого продукта. Исключением являются случаи, когда невозможно оставаться защищенным используя уязвимый общий код.   У многих компаний уже есть системы для каталогизации и публикации информации об уязвимостях. Использование CVE дает возможность организациям использовать единую систему для взаимодействия между собой и совместимыми с CVE инструментами.  Присваивание CVE ID конкретной уязвимости позволяет быстро и точно получать информацию о ней из различный источников. Это помогает эффективно распределять усилия на устранение уязвимостей и обеспечение безопасности. CVE помогает оценить возможности инструментов обнаружения уязвимостей и выбрать те, что больше подходят для ваших нужд.  CVE не позиционирует себя как полноценную базу по уязвимостям, скорее это просто их перечисление. Естественное ограничение такого определения – малое количество дополнительной информации. Хотя в записи CVE есть ссылки на дополнительные ресурсы, работать с такими данными весьма неудобно. Поэтому на основе CVE и существует множество баз уязвимостей, дополняющих её, например, база NVD, VulDB, Snyk. Другое ограничение CVE заключается в том, что не всем уязвимостям присваивается номер, а для некоторых его дают с задержкой. Так по данным эксперта из "Лаборатории Касперского" от 2018 года 50% уязвимостей из CVE имеют задержку в 5 дней по сравнению с базой ICS-CERT, однако есть 10% дефектов отстающих от неё на более чем 269 дней.  Также возможны ситуации, когда у занесенной в базу уязвимости выясняются дополнительные особенности, однако такая информация может добавляться с опозданием или вовсе быть упущенной. Оперативное устранение уязвимостей должно быть приоритетной задачей разработчиков ПО. Оставление открытых уязвимостей без внимания приводит к успешным атакам. Ущерб от таких атак может приводить как к репутационным, так и к финансовыми потерям. Например, ущерб от атаки вымогателя WannaCry, использующего уязвимость в SMB протоколе EternalBlue, оценивают в 1 млрд долларов.  С каждым годом количество уязвимостей растет. В 2021 году найдена 20061 уязвимость, что на 9,3% больше, чем в 2020 году. Как видно из графика, который можно найти на сайте NVD, такой скачок был самым большим с 2017 года.  Рассмотрим на примере одних из самых эксплуатируемых в 2021 году уязвимостей по данным CISA и Positive Technologies, что из себя они представляют и к чему могут привести. ProxyLogon – группа уязвимостей (CVE-2021-26855, CVE-2021-26857, CVE-2021-26858, CVE-2021-27065) почтового сервера Microsoft Exchange.  Хакерская группа HAFNIUM впервые использовала эти уязвимости в январе 2021 и почти 2 месяца оставалась без обнаружения. В начале марта Microsoft узнала об этих уязвимостях и выпустила необходимые исправления безопасности. Однако за это время около 250000 серверов подверглись атакам. CVE-2021-26855 CVSS 9.8. Уязвимость позволяет подделать запрос на стороне сервера, обойти аутентификацию MS Exchange и получить права администратора. Для того чтобы атака сработала, атакующему нужно получить доступ к локальному серверу Microsoft Exchange через порт 443.  CVE-2021-27065 CVSS 7.8. Позволяет получить доступ к веб-интерфейсу ECP (Exchange Control Panel) и с помощью него загружать файлы на сервер Exchange. Для того чтобы воспользоваться уязвимостью нужна аутентификация, которую как раз и проходят с помощью уязвимости CVE‑2021‑26855. Используя эти уязвимости атакующий может загрузить веб-шелл и с помощью него получить удаленный доступ к системе. Это дает возможность злоумышленнику запустить вредоносный код, получить учетные данные, развернуть программы вымогатели. CVE-2021-26858 CVSS 7.8. Как и предыдущая, данная уязвимость позволяет записывать произвольные файлы; также возможна работа в связке с CVE-2021-26855 для обхода аутентификации. CVE-2021-26857 CVSS 7.8. Проблема десериализации в службе Unified Messaging. Эта уязвимость дает запускать код с правами SYSTEM на сервере Exchange. Для эксплуатации требуется, чтобы соответствующий служба была настроена.  После того как информация об уязвимостях была распространена к HAFIUM присоединились и другие злоумышленники. В ходе атак пострадали такие организации как Министерство труда и социальных дел в Чехии, почтовые отделения в Праге, а также Европейское банковское управление. Хакеры не только крали данные почтовых ящиков, но и устанавливали на скомпрометированные сервера майнеры и шифровальщики.  Впервые уязвимость в популярной библиотеке Log4j была обнаружена в декабре 2021 года. Log4j используется в множестве приложений и серверах, например, таких компаний как Apple, Amazon, Twitter, Cloudflare и других. Изначально ошибку зафиксировали при выявлении багов на серверах Minecraft. CVE-2021-44228 CVSS 10.0. Log4Shell – уязвимость дает возможность выполнять произвольный код, причем для атаки достаточно чтобы ссылающаяся на адрес атакующего запись оказалась в логах. Для этого можно разместить вредоносную строку, например, jndi:ldap://[URL-атакующего] в URL-адресе HTTP-запроса. Когда приложение или сервер будет обрабатывать такие логи, запись заставит сервер выполнить запрос на указанный URL. В ответ на запрос отдается Java класс, который и выполняет произвольный код.  После обнаружения уязвимости разработчики Apache Software Foundation выпустили патч в версии 2.15.0, однако спустя несколько дней была обнаружена уязвимость, которой присвоили номер CVE-2021-45046. CVE-2021-45046 СVSS 9.0. Атакующий может эксплуатировать уязвимость, если в ПО использованы нестандартные шаблоны с поиском по контексту. Это даёт возможность создать переменную поиска, которая вызовет рекурсивный поиск, что приведёт к атаке вида "отказ в обслуживании" (DoS) и отключению уязвимых служб. Для некоторых специфических конфигураций эксплуатация уязвимости может привести к удалённому выполнению кода. Из-за обнаружения такой возможности изначальная оценка по CVSS этой уязвимости изменилась с 3,7 до 9.0.  В первом обновлении разработчики выключили лишь одну функцию JNDI по поиску сообщений. Этого было недостаточно и в следующем патче Apache по умолчанию выключила всю поддержку JNDI.  Однако из-за возросшего интереса исследователей безопасности к библиотеке было выявлено еще несколько уязвимостей.  CVE-2021-45105 CVSS 5.9. Уязвимость дает реализовать атаку "отказ в обслуживании", при использовании специального рекурсивного запроса.  CVE-2021-44832 CVSS 6.6. Уязвимость может привести к выполнению произвольного кода, если у атакующего есть права на изменение файла конфигурации. Хотя эту уязвимость и сложнее эксплуатировать, чем Log4Shell, злоумышленник может использовать её после получения необходимых прав с помощью других уязвимостей. По данным Агентства по кибербезопасности и инфраструктуре США (CISA) уязвимость Log4Shell стала самой популярной у киберпреступников в 2021 году. Злоумышленники используют уязвимости в Log4j для различных целей, например, создания DDoS-ботнетов и установки криптомайнеров.  Из исследования компании Rezilion следует, что до сих пор остаётся ещё множество уязвимых приложений. В основном угроза сохраняется для не обновлённых контейнеров и публичных серверов Minecraft. Так же всё ещё остаются приложения, использующие библиотеку Log4J версии 1.x, потому что оригинальная уязвимость Log4Shell CVE-2021-44228 не относится к этой версии. Однако поддержка Log4J 1.x прекращена с 2015 года и в ней также содержится множество других уязвимостей. Если уязвимость попала в базу CVE, это означает, что для нее уже готово решение в виде патча и рекомендаций от производителя ПО. Поэтому самым простым способом поддерживать безопасность является своевременное скачивание обновлений.  В случае, когда обновление осложнено или невозможно, применяют "виртуальный патч" – оперативное временное решение, блокирующее возможность эксплуатации уязвимости.  Обычно виртуальные патчи реализуются на файрволлах. После анализа входящих пакетов они препятствуют проникновению вредоносного трафика к уязвимому приложению.  Виртуальный патч не устраняет дефекты в приложении и не покрывает все возможные способы использования уязвимости атакующими, однако он снижает риск подвергнуться атаке до тех пор, пока не будет внедрено постоянное решение. Для определения существующих уязвимостей у приложений в системе применяют сканеры безопасности. Также, мерой борьбы с уязвимостями может стать анализ доступного исходного кода используемых программ.  Для поиска потенциальных уязвимостей применяют SAST (Static Application Security Testing) – анализ кода без запуска исследуемого приложения.  Наиболее эффективным методом использования анализатора кода является использование его с начала разработки. Это увеличивает шанс нахождения ошибки еще на этапе кодирования. Чем дольше уязвимое место находится в программе, тем сложнее и дороже обойдется её устранение. О преимуществах использования SAST можете прочитать в статье: "Место SAST в Secure SDLC". A о том, как PVS-Studio помогает в поисках уязвимостей, можно почитать в отдельной статье.  Наиболее распространённые потенциальные уязвимости публикуются в нескольких списках, таких как CWE Top 25 и OWASP Top 10. OWASP Top 10 – отчёт проекта OWASP (Open Web Application Security Project) об основных проблемах связанных с безопасностью веб-приложений. CWE Top 25 предоставляет отчёт о самых распространенных недостатках в программном обеспечении и оборудовании. Умение SAST-анализаторов работать с этими списками позволяет сосредоточиться разработчикам на устранении серьёзных уязвимостей, которые могут причинить наибольший ущерб в случае их эксплуатации. Для автоматизации проверки на наличие уязвимостей, найденных в кодовой базе компонентов с открытым исходным кодом, применяют методику Software Composition Analysis (SCA). SCA-инструменты идентифицируют конкретные версии open-source библиотек и находят связанные с ними уязвимости. SCA-решения также помогают избегать проблем с использованием библиотек с истекшей поддержкой и устранить риски, связанные с лицензиями.   О планах добавить SCA в PVS-Studio почитать можно здесь. Надеюсь, что данная статья помогла вам разобраться в том, что такое CVE, и напомнила о крупных уязвимостях прошедшего года.  Использование PVS-Studio как SAST-решения поможет найти потенциальные уязвимости и повысит безопасность кода. Регулярное использование статического анализа позволяет выявлять ошибки как можно раньше и тратить меньше ресурсов на их исправление. Анализатор PVS-Studio успешно справляется с поиском дефектов, классифицируемых по CWE и стандартами OWASP. Также планируется реализация SCA функций для поиска проблемных зависимостей.  Предлагаю скачать и попробовать PVS-Studio на вашем проекте, ведь всегда есть вероятность, что в нём найдутся ошибки, которые нарушают безопасность вашего кода.