Категория > Новости > Баги, которые от нас скрывают. Выбираем лучший сайт для поиска уязвимостей - «Новости»
Баги, которые от нас скрывают. Выбираем лучший сайт для поиска уязвимостей - «Новости»14-06-2021, 00:01. Автор: Савва |
докладе на PHDays 10 я говорил о том, что пора создать собственное средство для поиска уязвимостей, потому что каждое из бесплатных решений меня чем‑нибудь да не устраивает. Но мысль эта у меня уже давно, и, когда готовил доклад, я решил проверить, как обстоят дела. Так и родилась эта статья. Вопрос об идентификации пакетов, установленных в системе, я обычно решаю вручную или простейшими скриптами. Так что эту сторону вопроса я опущу. Будем просто считать, что у нас уже есть список всего софта — названия продуктов и их версии.
Какие есть варианты поиска уязвимостей для этих компонентов? Будем рассматривать только бесплатные решения — бюджет, как всегда, ограничен: штатный поисковик NVD; CVE Details — популярен чуть ли не больше самого CVE; Vulners — специализированный поисковик по уязвимостям, разработчики которого заявляют, что непрерывно добавляют новые источники и даже используют ИИ для определения критичности уязвимости. Штатный поисковик NVDПоиск на сайте NVD кажется хорошим вариантом: кто лучше знает, как искать по базе NVD, если не ее составители? Однако стоит поискать уязвимости в ядре Linux, и оказывается, что не все так радужно. Допустим, мы используем старое доброе ядро 4.14, не забываем и патчим его до последней на сегодня (11 апреля) версии 4.14.230. Используем расширенный вариант поиска (Search Type: Advanced). Проверить эту версию в поисковике не выйдет. Даже версия 4.14.200 не знакома NVD, а последняя из доступных — 4.14.194 (21 августа 2020 года). NVD об этом честно сообщает в примечании. Дело в том, что веб‑интерфейс поисковика позволяет использовать только версии продуктов из словаря CPE (Common Platform Enumeration). Если проигнорировать это предупреждение и вбить нужную версию 4.14.230, то по нажатии кнопки search получим более четырех тысяч уязвимостей всех версий ядра Linux. Не страшно, пусть у нас будет версия 4.14.194. Поисковик выдал 460 результатов, довольно хорошо для такого большого продукта. Но попробуем обойти поиск только по известным CPE, ведь NVD предоставляет еще REST API (смотри документацию в PDF). Формируем следующий поисковый запрос: https://services.nvd.nist.gov/rest/json/cves/1.0?cpeMatchString=cpe:2.3:o:linux:linux_kernel:4.14.194.&startIndex=0 Результаты выдаются в виде файла JSON, по умолчанию по 20 штук на странице, если не хочется все это объединять, то можно дописать к поисковому запросу такую строку: &resultsPerPage=1400 Но тут уже надо рассчитывать на удачу, сервер NVD для защиты от DDoS иногда не отвечает на такие жадные запросы. Мне по большей части везло, и удавалось получать до 2000 результатов на странице. В итоге получаем довольно странный результат — 1315 уязвимостей. Почти на тысячу больше! Результаты поиска через REST API Попробуем разобраться. Сохраняем все страницы с результатом поиска. Затем прямо в Notepad++ ищем все идентификаторы CVE в HTML и JSON, сортируем их и сравниваем. Даже если выборочно проверять уязвимости, которых нет в результатах веб‑поиска, сразу видно их характерные особенности. Веб‑версия не выводит уязвимости, где искомый продукт помечен как Running on/with, то есть он просто работает совместно с уязвимым. Веб‑версия выдает нам только уязвимости ядра Linux, а REST API — еще и уязвимости всего ПО, что работает на Linux. Здесь, пожалуй, преимущество веб‑поиска налицо. Давай дальше рассматривать результаты веб‑поиска NVD как некий эталон и посмотрим, что покажут другие два сайта. CVE DetailsЭто популярный сайт, его статистику можно видеть во многих статьях и докладах. Но можно ли его использовать как поисковик уязвимостей? Конечно! И поначалу я был в восторге от умного сайта, который из полутора тысяч CVE-шек ядра Linux оставил меньше сотни. Только потом оказалось, что и тут все не так просто. Пробуем искать уязвимости, используем поиск по версии и вводим название ядра согласно CPE ( Результат — No matches. Как я понимаю, сайт тоже не знает нашу версию. Методом последовательного «даунгрейда» удалось выяснить, что самая старшая поддерживаемая версия интересующей нас ветви — это 4.14.141. Смотрим на результат: чуть больше 50 уязвимостей. Это гораздо меньше, чем выдает NVD (470 для версии 4.14.141). Сравним перечни найденных уязвимостей. Различия в результатах поиска продемонстрирую на двух примерах: CVE-2019-17351 и CVE-2019-17133. Почему‑то такие одинаковые по описанию уязвимости по‑разному обрабатываются. Веб‑поиск NVD находит обе уязвимости, а CVE Details только CVE-2019-17351. CVE-2019-17133 нет в результатах поиска, и нет версии 4.14.141 в перечне уязвимых версий в описании на CVE Details. Причем на сайте NVD уязвимые версии для двух этих CVE отображены одинаково корректно. Причину такого поведения CVE Details можно найти на странице с описанием принципов работы сайта. Оказывается, сайт берет данные из RSS-рассылки об изменении XML-описания уязвимостей. NVD официально прекратила обновлять XML-описания 9 октября 2019 года и перешла исключительно на использование JSON. Но пропуск уязвимостей с этим не связан. Посмотрим глубже и найдем в архивах интернета файл Так вот, значение полей Дело в том, что разработчики NVD раньше экспериментировали и для части записей пытались указать все уязвимые версии, а для части просто указывали диапазон версий (последнюю уязвимую версию). CVE Details просто не умеет анализировать эти диапазоны версий. Для CVE-2019-17133 действительно изначально указан диапазон версий. Если скачать еще один файл — Флаг Переход NVD на JSON плохо сказался на CVE Details, статистика уязвимостей на сайте красноречива. Еще за 2019 год CVE Details недосчитался 5000 уязвимостей и не было ни одной уязвимости за 2020–2021 годы, сайт просто перестал обновляться. Но до сих пор у него есть поклонники, и в 2020 году некоторые мои знакомые продолжали им пользоваться, стараясь не замечать всех накопившихся недостатков. Перейти обратно к новости |