Common Vulnerability Scoring System (CVSS) — открытый стандарт, используемый для расчета количественных оценок уязвимости в безопасности компьютерной системы, обычно с целью понять приоритет её исправления.
Оценки рассчитываются по специальным формулам на основе нескольких метрик и приблизительно оценивают простоту внедрения эксплойта и его влияние на компьютерную систему. Результатом расчета являются три числовые оценки (Base Score, Temporal Score и Environmental Score), каждая из которых может принимать значение от 0 до 10, где 10 выражает максимальную опасность.
Последней версией стандарта является 3.1, выпущенная в июне 2019 года. По разным соображениям одни компании используют старую версию стандарта CVSSv2, другие новую CVSSv3, а третьи совмещают использование разных версий.
Исследования, проводимые в 2003—2004 годах Национальным Консультативным Советом по Инфраструктуре (англ. National Infrastructure Advisory Council, NIAC), привели к появлению в феврале 2005 года первой версии CVSS. Первоначальной целью было получение открытых и универсальных методов оценки серьёзности уязвимостей в программном обеспечении. В апреле 2005 NIAC запустила сайт Forum of Incident Response and Security Teams (сокр. FIRST), на котором была опубликована первая версия стандарта.
Первая версия стандарта не подвергалась экспертной оценке сторонних организаций, поэтому реальные отзывы компаний, специализировавшихся на разработке программного обеспечения и пытавшихся его использовать, обнажили многие серьёзные проблемы, в связи с чем в июне 2007 вышла вторая версия стандарта. Дальнейшее развитие привело к выходу третьей версии стандарта в июне 2015.
CVSS пытается оценить уязвимость с разных сторон[1]:
Метрики для расчета берутся из таблиц, в которых приводится их описание, качественное и количественное значения. Ниже в таблице приведены метрики, введенные со второй версии стандарта[1].
Оценка BaseScore {\displaystyle {\textsf {BaseScore}}} рассчитывается по следующим формулам. Значения для параметров выбираются из таблицы, приведенной выше. Дробные результирующие числа следует округлять до первого десятичного разряда, что ниже выражается через функцию roundTo1Decimal {\displaystyle {\textsf {roundTo1Decimal}}} .
Exploitability = 20 × AccessVector × AccessComplexity × Authentication {\displaystyle {\textsf {Exploitability}}=20\times {\textsf {AccessVector}}\times {\textsf {AccessComplexity}}\times {\textsf {Authentication}}}
Impact = 10 , 41 × ( 1 − ( 1 − C ) × ( 1 − I ) × ( 1 − A ) ) {\displaystyle {\textsf {Impact}}=10{,}41\times (1-(1-{\textsf {C}})\times (1-{\textsf {I}})\times (1-{\textsf {A}}))}
f ( Impact ) = { 0 , if Impact = 0 1,176 , otherwise {\displaystyle f({\textsf {Impact}})={\begin{cases}0,&{\text{if }}{\textsf {Impact}}{\text{ = 0}}\\1{,}176,&{\text{otherwise }}\end{cases}}}
BaseScore = roundTo1Decimal ( ( ( 0 , 6 × Impact ) + ( 0 , 4 × Exploitability ) − 1 , 5 ) × f ( Impact ) ) {\displaystyle {\textsf {BaseScore}}={\textsf {roundTo1Decimal}}(((0{,}6\times {\textsf {Impact}})+(0{,}4\times {\textsf {Exploitability}})-1{,}5)\times f({\textsf {Impact}}))}
Для расчета TemporalScrore {\displaystyle {\textsf {TemporalScrore}}} используются следующие формулы.
TemporalScore = roundTo1Decimal ( BaseScore × Exploitability × RemediationLevel × ReportConfidence ) {\displaystyle {\textsf {TemporalScore}}={\textsf {roundTo1Decimal}}({\textsf {BaseScore}}\times {\textsf {Exploitability}}\times {\textsf {RemediationLevel}}\times {\textsf {ReportConfidence}})}
Для расчета EnvironmentalScore {\displaystyle {\textsf {EnvironmentalScore}}} используется следующие формулы. AdjustedTemporal {\displaystyle {\textsf {AdjustedTemporal}}} рассчитывается по той же формуле, что и TemporalScore {\displaystyle {\textsf {TemporalScore}}} , но вместо BaseScore {\displaystyle {\textsf {BaseScore}}} нужно подставить AdjustedImpact {\displaystyle {\textsf {AdjustedImpact}}} .
AdjustedImpact = min ( 10 , 10 , 41 × ( 1 − ( 1 − C × CR ) × ( 1 − I × IR ) × ( 1 − A × AR ) ) ) {\displaystyle {\textsf {AdjustedImpact}}=\min(10,10{,}41\times (1-(1-{\textsf {C}}\times {\textsf {CR}})\times (1-{\textsf {I}}\times {\textsf {IR}})\times (1-{\textsf {A}}\times {\textsf {AR}})))}
EnvironmentalScore = roundTo1Decimal ( ( AdjustedTemporal + ( 10 − AdjustedTemporal ) × CollateralDamagePotential ) × TargetDistribution ) {\displaystyle {\textsf {EnvironmentalScore}}={\textsf {roundTo1Decimal}}(({\textsf {AdjustedTemporal}}+(10-{\textsf {AdjustedTemporal}})\times {\textsf {CollateralDamagePotential}})\times {\textsf {TargetDistribution}})}
В 2002 году в серверном приложении Apache была выявлена уязвимость CVE-2002-0392, приводившая к повреждению памяти сервера при фрагментированном кодировании запросов для него. Зная это, злоумышленник может создать успешный эксплойт, способный в одних случаях привести к отказу сервера в обслуживании, а в других — к выполнению произвольного кода с привилегиями серверного приложения.
Используя CVSS метрики для расчета базовой оценки, проблему можно описать так:
Таким образом, параметры для расчета базовой оценки можно выразить следующей текстовой строкой, на практике называемой вектором: AV:N/AC:L/Au:N/C:N/I:N/A:C
AV:N/AC:L/Au:N/C:N/I:N/A:C
Так как Apache Foundation подтвердил уязвимость для 1.3 и 2.0 версий сервера, то для Temporal Score вектор будет таким: E:F/RL:O/RC:C
E:F/RL:O/RC:C
Вектор для Environmental Score зависит от того, что для использующей сервер Apache компании важнее и какие у неё мощности. Для данного примера пусть вектор будет таким: CDP:H/TD:H/CR:M/IR:M/AR:H
CDP:H/TD:H/CR:M/IR:M/AR:H
Подставив количественные значения показателей из таблицы, получим следующие результаты.
Exploitability = 20 × 1 × 0 , 71 × 0,704 = 10 , 0 {\displaystyle {\textsf {Exploitability}}=20\times 1\times 0{,}71\times 0{,}704=10{,}0}
Impact = 10 , 41 × ( 1 − ( 1 − 0 ) × ( 1 − 0 ) × ( 1 − 0 , 66 ) ) = 6 , 9 {\displaystyle {\textsf {Impact}}=10{,}41\times (1-(1-0)\times (1-0)\times (1-0{,}66))=6{,}9}
f ( 6 , 9 ) = 1,176 {\displaystyle f(6{,}9)=1{,}176}
BaseScore = ( 0 , 6 × 6 , 9 + 0 , 4 × 10 , 0 − 1 , 5 ) × 1,176 = 7 , 8 {\displaystyle {\textsf {BaseScore}}=(0{,}6\times 6{,}9+0{,}4\times 10{,}0-1{,}5)\times 1{,}176=7{,}8}
TemporalScore = 7 , 8 × 0 , 95 × 0 , 87 × 1 = 6 , 4 {\displaystyle {\textsf {TemporalScore}}=7{,}8\times 0{,}95\times 0{,}87\times 1=6{,}4}
AdjustedImpact = min ( 10 , 10 , 41 × ( 1 − ( 1 − 0 × 1 ) × ( 1 − ( 1 − 0 × 1 ) × ( 1 − ( 1 − 0 , 66 × 1 , 51 ) ) ) = 10 {\displaystyle {\textsf {AdjustedImpact}}=\min(10,10{,}41\times (1-(1-0\times 1)\times (1-(1-0\times 1)\times (1-(1-0{,}66\times 1{,}51)))=10}
AdjustedTemporal = 10 × 0 , 95 × 0 , 87 × 1 = 8 , 3 {\displaystyle {\textsf {AdjustedTemporal}}=10\times 0{,}95\times 0{,}87\times 1=8{,}3}
AdjustedBaseScore = ( 0 , 6 × 10 + 0 , 4 × 10 , 0 − 1 , 5 ) × 1,176 = 10 {\displaystyle {\textsf {AdjustedBaseScore}}=(0{,}6\times 10+0{,}4\times 10{,}0-1{,}5)\times 1{,}176=10}
EnvironmentalScore = ( 8 , 3 + ( 10 − 8 , 3 ) × 0 , 5 ) × 1 , 0 = 9 , 2 {\displaystyle {\textsf {EnvironmentalScore}}=(8{,}3+(10-8{,}3)\times 0{,}5)\times 1{,}0=9{,}2}
Учитывая такие большие оценки для данной уязвимости, мы должны как можно скорее обновить наши серверы Apache, как минимум до версии 2.1.
Несколько поставщиков программного обеспечения оказались недовольными CVSSv2:
Чтобы устранить некоторые из этих критических замечаний, в 2012 году началась разработка стандарта CVSSv3, окончательная версия которого была выпущена в июне 2015 года. Было изменено, добавлено и удалено несколько показателей и немного поправлены формулы при сохранении диапазона оценки от 0 до 10.
Основные отличия CVSSv3 от CVSSv2 следующие:
В июне 2019 года была выпущена версия 3.1[4]. Данная версия не вносит новых изменений в стандарт, а лишь детализирует описание некоторых метрик для лучшего их понимания.
Различные версии CVSS были приняты в качестве основного метода для количественной оценки уязвимостей многими организациями. Вот лишь некоторые примеры: