Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
181 lines (132 sloc) 34.6 KB

Топ-25 опасных ошибок по версии CWE 2019 года

Введение

Топ-25 опасных ошибок в программном обеспечении по версии CWE™ (Топ-25 CWE) представляет собой показательный список наиболее распространенных и требующих особого внимания недостатков, которые могут привести к возникновению серьезных уязвимостей в программном обеспечении. Данные недостатки зачастую легко обнаружить и эксплуатировать. Они представляют опасность, поскольку позволяют злоумышленникам получить полный контроль над программой, похитить данные или помешать работе ПО. Топ-25 CWE — это результат работы сообщества, который может быть использован разработчиками, тестировщиками, заказчиками, проектными менеджерами, исследователями безопасности и наставниками для ознакомления с самыми распространенными угрозами безопасности в индустрии ПО.

При создании списка команда CWE использовала опубликованные данные CVE®, соответствующие привязки к CWE из Национальной базы данных уязвимостей (NVD) Национального института стандартов и технологий (NIST), а также оценки CVSS для каждой уязвимости. Для определения уровня распространенности и опасности каждого недостатка была применена формула расчета на основе вышеуказанных данных. Данный процесс может быть воспроизведен и автоматизирован для составления списка Топ-25 CWE на регулярной основе с минимальными затратами.

Топ-25 CWE

Ниже представлен краткий перечень недостатков из Топ-25 CWE — 2019, включая общую оценку каждого из них.

Уровень опасности Идентификатор Название Оценка
[1] CWE-119 Выполнение операций за пределами буфера памяти 75,56
[2] CWE-79 Некорректная нейтрализация входных данных при генерировании веб-страниц (Межсайтовое выполнение сценариев) 45,69
[3] CWE-20 Некорректная проверка входных данных 43,61
[4] CWE-200 Разглашение информации 32,12
[5] CWE-125 Чтение за пределами буфера 26,53
[6] CWE-89 Некорректная нейтрализация специальных элементов, используемых в SQL-командах (Внедрение SQL-кода) 24,54
[7] CWE-416 Использование после освобождения 17,94
[8] CWE-190 Целочисленное переполнение или циклический возврат 17,35
[9] CWE-352 Подделка межсайтового запроса 15,54
[10] CWE-22 Некорректные ограничения путей для каталогов (Выход за пределы каталога) 14,10
[11] CWE-78 Некорректная нейтрализация специальных элементов, используемых в системных командах (Внедрение команд ОС) 11,47
[12] CWE-787 Запись за границами буфера 11,08
[13] CWE-287 Некорректная аутентификация 10,78
[14] CWE-476 Разыменование нулевого указателя 9,74
[15] CWE-732 Некорректные разрешения для критически важных ресурсов 6,33
[16] CWE-434 Отсутствие ограничений на загрузку файлов небезопасного типа 5,50
[17] CWE-611 Некорректное ограничение ссылок на внешние сущности XML 5,48
[18] CWE-94 Некорректное управление генерированием кода (Внедрение кода) 5,36
[19] CWE-798 Использование жестко закодированных учетных данных 5,12
[20] CWE-400 Неконтролируемое использование ресурсов 5,04
[21] CWE-772 Удержание ресурса после его использования 5,04
[22] CWE-426 Подмена пути исполнения 4,40
[23] CWE-502 Десериализация недоверенных данных 4,30
[24] CWE-269 Некорректное управление привилегиями 4,23
[25] CWE-295 Некорректная проверка сертификатов 4,06

Методология

Топ-25 CWE — 2019 составлен на основе данных об уязвимостях, опубликованных в базе данных NVD, которая пополняется информацией из базы данных CVE и дополняется аналитическими данными. Помимо информации о недостатке, ставшем причиной уязвимости, NVD дает оценку по CVSS, которая в цифровой форме отображает потенциальную опасность уязвимости на основе стандартизированного набора параметров. Формат представления информации NVD хорошо подходит для создания Топ-25 CWE. Данный подход обеспечивает объективный взгляд на текущий статус уязвимости, основанный на публично раскрытых данных, а не на исследованиях и мнениях, и делает процесс воспроизводимым.

При создании Топ-25 CWE — 2019 были использованы данные NVD за 2017 и 2018 годы, содержащие информацию примерно о двадцати пяти тысячах уязвимостей. Командой CWE была разработана специальная формула для оценки уровня опасности недостатков. Данная формула объединяет в себе частоту, с которой недостаток становился причиной уязвимости, и предполагаемую опасность эксплуатации этой уязвимости. Частота и опасность были нормализованы в соответствии с минимальными и максимальными зафиксированными значениями.

Для определения частотности недостатков (CWE) в формуле используется количество раз, которое недостаток соотносится с уязвимостями в базе NVD. При расчете используются только уязвимости (CVE), которым присвоен соответствующий тип CWE, поскольку в результате использования всех уязвимостей из базы NVD значения частотности и разницы между типами недостатков были бы незначительными.

Freq = {count(CWE_X’ ∈ NVD) для каждого CWE_X’ в NVD}

Fr(CWE_X) = (count(CWE_X ∈ NVD) – min(Freq)) / (max(Freq) – min(Freq))

Другой составляющей формулы является опасность недостатка, представленная средней оценкой CVSS всех уязвимостей (CVE), связанных с конкретным недостатком (CWE). Выражение, представленное ниже, используется для расчета данного значения.

Sv(CWE_X) = (средняя_CVSS_для_CWE_X – min(CVSS)) / (max(CVSS) – min(CVSS))

Уровень опасности конкретного недостатка (CWE) определяется умножением опасности на частотность.

Score(CWE_X) = Fr(CWE_X) * Sv(CWE_X) * 100

Есть несколько аспектов, касающихся метода расчета и требующих дополнительных разъяснений:

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

Топ-25 CWE с метриками оценки

Таблица, представленная ниже, содержит информацию о Топ-25 CWE — 2019 с соответствующими оценками, включая количество записей, относящихся к конкретному CWE в базе данных NVD, и среднюю оценку CVSS для каждого недостатка.

Уровень опасности Идентификатор Кол-во в NVD Средн. CVSS Общая оценка
[1] CWE-119 3545 8,045 75,56
[2] CWE-79 3430 5,778 45,69
[3] CWE-20 2360 7,242 43,61
[4] CWE-200 2300 5,961 32,12
[5] CWE-125 1428 7,270 26,53
[6] CWE-89 977 9,129 24,54
[7] CWE-416 799 8,374 17,94
[8] CWE-190 867 7,679 17,35
[9] CWE-352 693 8,365 15,54
[10] CWE-22 759 7,275 14,10
[11] CWE-78 486 8,707 11,47
[12] CWE-787 510 8,169 11,08
[13] CWE-287 495 8,188 10,78
[14] CWE-476 572 6,834 9,74
[15] CWE-732 334 7,393 6,33
[16] CWE-434 239 8,549 5,50
[17] CWE-611 262 7,949 5,48
[18] CWE-94 230 8,637 5,36
[19] CWE-798 215 8,782 5,12
[20] CWE-400 288 6,980 5,04
[21] CWE-772 304 6,714 5,04
[22] CWE-426 215 7,823 4,40
[23] CWE-502 177 8,921 4,30
[24] CWE-269 226 7,332 4,23
[25] CWE-295 248 6,658 4,06

Недостатки, заслуживающие внимания

Как и раньше, команда CWE считает необходимым поделиться информацией о недостатках, которые не попали в Топ-25. Согласно формуле расчета, применяемой в 2019 году к базе данных NVD, эти CWE оказались недостаточно опасными или недостаточно распространенными для включения в список 2019 года.

Разработчики, оценившие и устранившие все риски из Топ-25 CWE — 2019, возможно, захотят проанализировать и другие недостатки, потенциально присутствующие в их ПО. Именно по этой причине пользователям Топ-25 необходимо обратить особое внимание на представленные ниже дополнительные CWE:

Уровень опасности Идентификатор Название Кол-во в NVD Средн. CVSS Общая оценка
[26] CWE-835 Бесконечный цикл (Зацикливание) 218 6,610 3,53
[27] CWE-522 Недостаточно надежная защита учетных данных 150 8,460 3,39
[28] CWE-704 Некорректное преобразование или приведение типов 143 8,484 3,25
[29] CWE-362 Одновременное использование общих ресурсов при выполнении кода без соответствующей синхронизации (Состояние гонки) 187 6,740 3,11
[30] CWE-918 Подделка запроса со стороны сервера 128 7,917 2,65
[31] CWE-415 Двойное освобождение 111 7,981 2,32
[32] CWE-601 Перенаправление на небезопасный сайт ("Открытое перенаправление") 159 6,141 2,31
[33] CWE-863 Некорректная авторизация 113 7,050 2,00
[34] CWE-862 Отсутствие авторизации 92 7,491 1,76
[35] CWE-532 Включение важной информации в файлы журналов 90 7,064 1,59
[36] CWE-306 Отсутствие аутентификации для критически важных функций 66 8,529 1,50
[37] CWE-384 Фиксация сессии 76 7,083 1,34
[38] CWE-326 Недостаточно надежное шифрование 73 7,278 1,34
[39] CWE-770 Выделение ресурсов без ограничений или регулировки 75 6,880 1,27
[40] CWE-617 Несанкционированный вызов утверждения 75 6,729 1,23

Ограничения методологии

У выбранного командой CWE подхода, основанного на реальных данных, имеются некоторые ограничения.

Особенности данных

Во-первых, используются только данные, которые были опубликованы в открытом доступе и зафиксированы в базе данных NVD, при этом существует множество уязвимостей, которые не имеют идентификаторов CVE. Уязвимости, не включенные в NVD, не учитывались при расчетах. Например: базы данных CVE и NVD обычно не содержат уязвимостей, которые были обнаружены и исправлены до публичного релиза ПО, в онлайн-сервисах или в специальном ПО, используемом в отдельных организациях. Недостатки, приводящие к возникновению подобных уязвимостей, могут быть недостаточно представлены в Топ-25 CWE — 2019.

Во-вторых, даже для уязвимостей, получивших идентификатор CVE, часто не хватает информации, позволяющей точно определить эксплуатируемый в них недостаток CWE. Большое количество CVE публикуются вендорами ПО, которые описывают только потенциальный ущерб, наносимый уязвимостью, без подробной информации о самой уязвимости. В некоторых CVE описывается только способ эксплуатации уязвимости без упоминания самой уязвимости. Например: ввод большого количества данных в программу может вызывать аварийное завершение ее работы, причиной которого может быть переполнение буфера, несанкционированный вызов утверждения, чрезмерное выделение памяти или необрабатываемое исключение. В других CVE используются только общие термины, такие как вредоносный ввод данных, которые не дают никакого представления о конкретном недостатке. Для некоторых уязвимостей полезная информация может содержаться в ссылках, что осложняет ее анализ. Например: исследователь использует фаззинг-программу для создания условий, вызывающих аварийное завершение работы, а разработчик устраняет проблему без классификации и описания ошибки, приводившей к аварийному завершению работы. Команда CWE проанализировала более 2600 уязвимостей CVE, для которых отсутствовала подробная информация, чтобы выполнить более точную привязку к идентификаторам CWE.

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

Еще одной особенностью баз данных CVE и NVD является то, что большинство исследователей и (или) инструментов обнаружения уязвимостей хорошо находят только определенные недостатки и пропускают другие. Эти типы недостатков, которые исследователи и инструменты пытаются обнаружить, в итоге не будут представлены в Топ-25 CWE — 2019.

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

Особенности метрики

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

Редактирование привязок

При подготовке данных CVE и NVD к анализу команда CWE пересмотрела привязки CWE для отобранных уязвимостей и перепривязала уязвимости к более подходящим идентификаторам CWE, где это было возможно.

При перепривязке команда CWE использовала более широкий диапазон идентификаторов, чем использованный аналитиками NVD, и более тщательно отмечала неподходящую информацию. Перепривязка была выполнена для тысяч записей CVE. В результате был составлен расширенный список идентификаторов CWE для аналитиков NVD, как это указано в обновленной статье CWE-1003. Данные о выполненных перепривязках были отправлены в NIST для обновления информации об уязвимостях в базе данных NVD.

Перепривязка выполнялась в несколько этапов, в результате команда разработала воспроизводимый процесс, который может быть использован при создании последующих версий Топ-25. Основные работы, которые были проведены:

  • Перепривязка всех уязвимостей CVE, которые были отнесены к категориям CWE. Категории, такие как CWE-399 ("Уязвимости, связанные с управлением ресурсами", долгое время использовались аналитиками NVD в составе представления CWE-1003, но теперь проект CWE рекомендует использовать категории только для организационных и навигационных целей, а не для привязок, для привязок рекомендуется использовать только недостатки.
  • Автоматизированный поиск по ключевым словам для перепривязки уязвимостей к идентификаторам CWE, которые отсутствовали в списке аналитиков NVD. Например: чтение за пределами буфера (CWE-125) отсутствовало в списке привязок NVD, а соответствующие уязвимости привязывались к идентификатору более высокого уровня CWE-119. Тем не менее фразы, относящиеся к чтению за пределами буфера, легко обнаруживались в описаниях CVE.
  • Тщательный анализ высокоуровневых классов CWE для перепривязки уязвимостей к более точным идентификаторам. Это задача оказалась очень трудоемкой из-за большого количества уязвимостей, привязанных к таким общим классам, как CWE-119, CWE-20 или CWE-200, поэтому команда CWE не смогла обработать все уязвимости. Тем не менее проведенная работа помогла значительно улучшить качество базы данных NVD, особенно в части представления CWE-1003, а также способствовала лучшему пониманию задач по реорганизации иерархии CWE.
  • Поиск уязвимостей, указывающих на недостатки классификации CWE, т. е. поиск записей CVE, которые содержат достаточно подробную техническую информацию о недостатке, для которого отсутствует подходящий идентификатор CWE.
  • Удаление категорий из представления CWE-1003, проверка наличия привязок для наиболее распространенных недостатков CWE, переход от сложной структуры к двухуровневой иерархии (т. е. классам в качестве родительских элементов и видам в качестве дочерних).

Что изменилось

Основное отличие между списками Топ-25 CWE 2011 года и 2019 года заключается в подходе к их формированию. Топ-25 CWE/SANS — 2011 составлялся на основе исследований и интервью с разработчиками, известными аналитиками безопасности, исследователями и вендорами. Полученные данные нормализовались по распространенности и уровню CWSS. Топ-25 CWE — 2019, в свою очередь, формировался на основе реальных уязвимостей, присутствующих в базе данных NVD.

В результате смены подхода в списке Топ-25 CWE ожидаемо появились несколько изменений. Самым значимым является добавление нескольких классов, представляющих широкий круг ошибок: CWE-119 ("Выполнение операций за пределами буфера памяти"), CWE-20 ("Некорректная проверка входных данных"), CWE-200 ("Разглашение информации") и CWE-287 ("Некорректная аутентификация"). Эти идентификаторы часто используются вендорами и исследователями для описания причин возникновения уязвимостей, поэтому они преобладают в нашем анализе данных NVD. При более детальном анализе выясняется, что высокоуровневые недостатки зачастую являются родительскими для недостатков, описанных более подробно в других CWE, входивших в предыдущие списки Топ-25. Например: CWE-119 является родительским для CWE-120. В списке 2011 года идентификатор CWE-120 был на 3-м месте, а в списке 2019 года он отсутствует, при этом CWE-119 занял в списке первое место. Такая же ситуация с идентификатором CWE-287, который в списке 2019 года идет на 13-м месте, а в списке 2011 года отсутствовал. При более подробном анализе выясняется, что CWE-287 является родительским для CWE-306 (5-е место в списке 2011 года), CWE-862 (6-е место в списке 2011 года) и CWE-863 (15-е место в списке 2011 года), которые отсутствуют в списке 2019 года.

Еще одним изменением, заслуживающим внимания, является смена места в цепочке недостатков для некоторых идентификаторов. Например: идентификатор CWE-787 ("Запись за границами буфера") отсутствовал в списке 2011 года, но в 2019 году он занял 12-е место. CWE-787 часто является частью цепочки, начинающейся с CWE-120 (3-е место в 2011 году).

Еще несколько идентификаторов из списка Топ-25 CWE — 2019, также заслуживающих упоминания:

  • CWE-125 ("Чтение за пределами буфера") оказался намного выше в списке (5-е место), чем ожидалось. Команда CWE считает, что это может быть вызвано увеличением количества привязок к данному идентификатору для сложных цепочек эксплуатации, повышением привилегий ядра и улучшением методов обнаружения после раскрытия информации об уязвимости Heartbleed (которая показала несовершенство методов анализа статического кода).
  • CWE-417 ("Использование после освобождения"), CWE-611 ("Некорректное ограничение ссылок на внешние сущности XML") и CWE-502 ("Десериализация недоверенных данных") занимают 7-е, 17-е и 23-е места соответственно, при этом они отсутствовали в списке 2011 года. Команда CWE полагает, что это связано с увеличением возможностей их эксплуатации.
  • CWE-476 ("Разыменование нулевого указателя") занимает 14-е место, хотя данный идентификатор отсутствовал в списке Топ-25 2011 года. Команда CWE полагает, что это связано с увеличением объема использования фаззинга.

И в заключение, CWE-20 и CWE-200 (3-е и 4-е места соответственно) являются классами недостатков и хорошо известными проблемами создания безопасного кода. Команда CWE считает, что данные идентификаторы используются для привязки уязвимостей даже в тех случаях, когда имеются более точные низкоуровневые идентификаторы CWE. Команда CWE продолжит изучение данного вопроса и надеется исправить сложившуюся ситуацию в будущих версиях Топ-25 CWE.

Архив

Предыдущие версии Топ-25 CWE доступны в Архиве.

You can’t perform that action at this time.