Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


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

  • Промоакции
  • Оповещения
  • Спам

Вебинар: Парсим С++ - 25.10

>
>
CWE Top 25 2021. Что такое, с чем едят …

CWE Top 25 2021. Что такое, с чем едят и чем полезен при статическом анализе?

28 Сен 2021

Впервые поддержка классификации CWE появилась в PVS-Studio с релизом 6.21, который состоялся 15 января 2018 года. С тех пор прошло уже очень много времени, и хотелось бы рассказать об улучшениях, связанных с поддержкой этой классификации в последних версиях анализатора.

0869_CWE_status_ru/image1.png

Мы позиционируем анализатор PVS-Studio не только как средство для поиска опечаток и ошибок в коде, но и как инструмент статического тестирования защищённости приложений (Static Application Security Testing, SAST). Для этого необходимо уметь находить ошибки и потенциальные уязвимости, а также сопоставлять их с различными стандартами (например CWE, OWASP, SEI CERT, MISRA, AUTOSAR). Почему именно потенциальные уязвимости? Потому что они (CWE) станут реальными уязвимостями (CVE), только если кто-нибудь начнёт их эксплуатировать. А для этого нередко должно совпасть множество порой не связанных между собой факторов.

Именно с этой целью мы решили проверить, а насколько же хорошо PVS-Studio покрывает самые распространённые на данный момент дефекты. Для этого достаточно обратиться к списку CWE Top 25, который мы почему-то долго обходили стороной. Что ж, пора исправляться!

CWE. Что такое и с чем едят

Думаю, для продолжения не помешает освежить в памяти основные моменты и определения. Если вы хорошо ориентируетесь в терминологии, знаете, чем отличается CVE от CWE, зачем нужен CVSS, как ранжируется CWE Top 25, то можете пропустить этот раздел. Остальным настоятельно советую ознакомиться для удобства дальнейшего чтения. Далее довольно вольный перевод и интерпретация некоторых пунктов CWE FAQ и CVE FAQ:

Чем "дефект" (недостаток) отличается от уязвимости в ПО?

Дефекты (недостатки) – это ошибки, сбои и прочие проблемы реализации, проектирования или архитектуры программного обеспечения, которые могут привести к уязвимостям.

Уязвимости – уже найденные кем-то ошибки, которые могут быть напрямую использованы злоумышленниками для получения доступа к системе или сети, нарушения работы сервисов и так далее.

Что такое CWE, чем отличается от CVE и при чем тут CVSS?

  • CWE (Common Weakness Enumeration) – общий перечень дефектов (недостатков) безопасности.
  • CVE (Common Vulnerabilities and Exposures) – перечень уязвимостей и дефектов, обнаруженных в различном программном обеспечении.
  • CVSS (Common Vulnerability Scoring System) – числовая оценка, показывающая потенциальную серьёзность уязвимости (CVE). Она основана на стандартизированном наборе характеристик.
0869_CWE_status_ru/image2.png

Что такое CWE Top 25?

CWE Top 25 – это список наиболее опасных и распространённых недостатков. Эти недостатки опасны потому, что часто их легко найти и использовать. Они могут позволить злоумышленникам помешать работе приложения, украсть данные или даже полностью захватить систему. CWE Top 25 – это значимый ресурс сообщества, который может помочь разработчикам, тестировщикам, пользователям, а также руководителям проектов, исследователям безопасности и преподавателям получить представление о наиболее распространённых и опасных на данный момент недостатках безопасности.

Каков алгоритм составления и ранжирования списка CWE Top 25?

При составлении текущей редакции списка CWE Top 25 были использованы данные, полученные из национальной базы данных уязвимостей США (U.D. National Vulnerability Database (NVD)) за 2019–2020 годы. Далее команда исследователей использовала на полученных данных собственную формулу для расчёта порядка ранжирования, учитывающую частоту, с которой какой-либо недостаток (CWE) является основной причиной уязвимости, и потенциальную опасность эксплуатации. Частота и прогнозируемая серьёзность нормализованы относительно своих минимальных и максимальных значений.

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

Freq = {count(CWE_X' ∈ NVD) for each CWE_X' in NVD}

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

Другим важным компонентом формулы ранжирования является расчёт серьёзности недостатка, который вычисляется по формуле:

Sv(CWE_X) = (average_CVSS_for_CWE_X - min(CVSS)) / (max(CVSS) - min(CVSS))

Ну и в конце вычисляется итоговая оценка путём перемножения оценки частоты упоминания на оценку серьёзности.

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

Хотя этот метод и вносит некоторую предвзятость за счёт анализа только обнаруженных уязвимостей и потенциально может исключить широкий пласт данных, команда CWE считает, что в результате каждый год будет составляться более точный список CWE Top 25.

CWE Top 25 действительно обновляется каждый год?

Да, CWE Top 25 обновляется ежегодно. Предыдущие выпуски CWE Top 25 можно посмотреть в архиве.

Кто занимается составлением CWE Top 25?

Сообщество CWE включает как отдельных исследователей, так и представителей многочисленных организаций, научного сообщества и государственных структур, заинтересованных в активном сокращении и устранении недостатков в программном обеспечении. Конкретный список участников команды CWE можно получить на странице "CWE Community Members".

И зачем мне это знать?

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

Пару примеров ошибок?

Классификация CWE покрывает наиболее часто встречающиеся проблемы с разработкой ПО и различного оборудования. Например:

  • программные дефекты: переполнения буферов, ошибки форматной строки; проблемы структуры и валидации данных; манипуляции со специальными элементами; ошибки путей; проблемы с обработчиками; ошибки пользовательского интерфейса; проблемы обхода каталогов и распознавания эквивалентности путей; ошибки аутентификации; ошибки управления ресурсами; недостаточный уровень проверки данных; проблемы оценки входящих данных и внедрение кода; проблемы предсказуемости и недостаточная "случайность" случайных чисел;
  • аппаратные дефекты: ошибки вычислений, обычно связанные с процессорами, графикой, компьютерным зрением (Vision), искусственным интеллектом (AI), ПЛИС (FPGA) и микроконтроллерами (uControllers); вопросы разделения привилегий и контроля доступа, относящиеся к идентификации, общим ресурсам, контролю блокировок и другим возможностям и механизмам; вопросы питания, работы часов, обработки напряжения, тока или температуры, контроля тактовой частоты и сохранения/восстановления состояния.

Более подробно познакомиться с классификацией можно на сайте cwe.mitre.org.

Положение дел сегодня

С момента начала использования классификации CWE для диагностик PVS-Studio прошло более трёх лет, и хотелось бы отметить существенное увеличение их количества. Если в 2018 году мы покрывали всего 94 пункта списка CWE, то сейчас уже почти 130. Однако сегодня у нас разговор не про общее количество диагностик, а только про те, что входят в список наиболее опасных в 2021 году. Если же вас интересует полный список, то ознакомиться с ним можно в разделе "Соответствие CWE" нашей документации.

Ниже представлена таблица соответствия между списком CWE Top 25 2021 и диагностиками PVS-Studio с разделением по языкам программирования. В дальнейшем мы собираемся регулярно обновлять таблицу с покрытием CWE Top 25 на нашем сайте.

#

CWE ID

Имя

Оценка

Диагностики PVS-Studio

1

CWE-787

Out-of-bounds Write

65,93

C++: V512, V557, V582, V645

C#: V3106

Java: V6025

2

CWE-79

Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

46,84

C#: V5610

3

CWE-125

Out-of-bounds Read

24,90

C++: V512, V557, V582

C#: V3106

Java: V6025

4

CWE-20

Improper Input Validation

20,47

C++: V739, V781, V1010, V1024, V5009

5

CWE-78

Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')

19,55

C++: V1010, V5009

6

CWE-89

Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

19,54

C#: V5608

7

CWE-416

Use After Free

16,83

C++: V623, V723, V758, V774, V1017

8

CWE-22

Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

14,69

C#: V5609

9

CWE-352

Cross-Site Request Forgery (CSRF)

14,46

Coming in the future

10

CWE-434

Unrestricted Upload of File with Dangerous Type

8,45

Coming in the future

11

CWE-306

Missing Authentication for Critical Function

7,93

Coming in the future

12

CWE-190

Integer Overflow or Wraparound

7,12

C++: V629, V658, V673, V683, V1026, V1028, V5004, V5005, V5006, V5007, V5010, V5011

C#: V3113

Java: V6105

13

CWE-502

Deserialization of Untrusted Data

6,71

C#: V5611

14

CWE-287

Improper Authentication

6,58

Coming in the future

15

CWE-476

NULL Pointer Dereference

6,54

C++: V522, V595, V664, V713, V1004

C#: V3027, V3042, V3080, V3095, V3100, V3125, V3145, V3146, V3148, V3149, V3152, V3153, V3168

Java: V6008, V6060, V6093

16

CWE-798

Use of Hard-coded Credentials

6,27

C++: V5013

C#: V5601

Java: V5305

17

CWE-119

Improper Restriction of Operations within the Bounds of a Memory Buffer

5,84

C++: V512, V557, V582, V769, V783, V1004

18

CWE-862

Missing Authorization

5,47

Coming in the future

19

CWE-276

Incorrect Default Permissions

5,09

Coming in the future

20

CWE-200

Exposure of Sensitive Information to an Unauthorized Actor

4,74

Coming in the future

21

CWE-522

Insufficiently Protected Credentials

4,21

Coming in the future

22

CWE-732

Incorrect Permission Assignment for Critical Resource

4,20

Coming in the future

23

CWE-611

Improper Restriction of XML External Entity Reference

4,02

Coming in the future

24

CWE-918

Server-Side Request Forgery (SSRF)

3,78

Coming in the future

25

CWE-77

Improper Neutralization of Special Elements used in a Command ('Command Injection')

3,58

Coming in the future

Как видно из таблицы, на данный момент статический анализатор PVS-Studio обеспечивает покрытие 52% (13 из 25) списка CWE Top 25 2021. Вроде 52% это не так и много, но тут стоит учесть, что работы в этом направлении продолжаются и в будущем мы сможем находить ещё больше дефектов. Если же сократить этот список до 10 наиболее опасных и распространённых недостатков, то картина станет лучше — общее покрытие вырастет до 80%. :) Но это уже совсем другая история.

Изменения в CWE Top 25 за последний год

Для самых искушённых предлагаю посмотреть краткую статистку по передвижениям в CWE Top 25 за последний год.

Пять самых крупных передвижений вверх:

#

CWE ID

Название

Позиция в 2020 г

Позиция в 2021 г

Изменение за год

1

CWE-276

Incorrect Default Permissions

41

19

22▲

2

CWE-306

Missing Authentication for Critical Function

24

11

13▲

3

CWE-502

Deserialization of Untrusted Data

21

13

8▲

4

CWE-862

Missing Authorization

25

18

7▲

5

CWE-77

Improper Neutralization of Special Elements used in a Command ('Command Injection')

31

25

6▲

Пять самых крупных передвижений вниз:

#

CWE ID

Название

Позиция в 2020 г

Позиция в 2021 г

Изменение за год

1

CWE-200

Exposure of Sensitive Information to an Unauthorized Actor

7

20

13▼

2

CWE-119

Improper Restriction of Operations within the Bounds of a Memory Buffer

5

17

12▼

3

CWE-94

Improper Control of Generation of Code ('Code Injection')

17

28

11▼

4

CWE-269

Improper Privilege Management

22

29

7▼

5

CWE-732

Incorrect Permission Assignment for Critical Resource

16

22

6▼

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

"Новички" в Top 25:

#

CWE ID

Название

Позиция в 2020 г

Позиция в 2021 г

Изменение за год

1

CWE-276

Incorrect Default Permissions

41

19

22▲

2

CWE-918

Server-Side Request Forgery (SSRF)

27

24

3▲

3

CWE-77

Improper Neutralization of Special Elements used in a Command ('Command Injection')

31

25

6▲

Ну и в конце – дефекты, которые выбыли из CWE Top 25 в 2021 году:

#

CWE ID

Название

Позиция в 2020 г

Позиция в 2021 г

Изменение за год

1

CWE-400

Uncontrolled Resource Consumption

23

27

4▼

2

CWE-94

Improper Control of Generation of Code ('Code Injection')

17

28

11▼

3

CWE-269

Improper Privilege Management

22

29

7▼

Заключение

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

К счастью, в борьбе с потенциальными уязвимостями нам могут помочь статические анализаторы и поэтому, по традиции, мне хотелось бы предложить вам скачать и попробовать проверить свой проект статическим анализатором PVS-Studio. Вдруг и у вас в код закралась парочка CWE, которые только и ждут удобного момента, чтобы стать полноценными CVE :)

Дополнительные ссылки

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form