CVSS: Güvenlik Zafiyetlerini Karakterize Etmek ve Derecelendirmek
"Pek çok farklı ürün ve standartın bu alanda boy göstermesi, sadece zafiyetler ile ilgili standart bir kimlik belirlemeyi değil, aynı zamanda zafiyetin içerdiği ciddiyeti ve bunun gerektirdiği önlemlerin alınmasını da olumsuz yönde etkiliyor. 2005 yılında geliştirilmeye başlayan CVSS (Common Vulnerable Scoring System), zafiyetleri derecelendirirken, bağımsız, açık ve kapsamlı bir standart sunuyor. CVSS ile zafiyetleri derecelendirmek ve puanlamak; zafiyetin bu kimliğini metinsel bir ifade ile zafiyet yönetim sistemleri ve raporlarda kullanabilmek mümkün.
“Kendini ve düşmanını tanıyan bir ordu için zafer muhakkaktır. Kendini tanıyan, düşmanını tanımayan bir ordu için galibiyet de mağlubiyet de ihtimaldir. Kendini ve düşmanını tanımayan bir ordu için savaş felakettir.”
Sun Tzu
Tüm aktivitelerin giderek dijitalleştiği dünyamızda, donanım ve yazılımlarda ortaya çıkabilecek zafiyetlerin arz ettiği önem giderek artıyor.
Ortaya çıkan bu zafiyetlerin önünü alabilmek için önce zafiyetleri karakterize etmek, risklerini derecelendirmek gerekiyor.
Pek çok farklı ürün ve standardın bu alanda boy göstermesi, sadece zafiyetler ile ilgili standart bir kimlik belirlemeyi değil, aynı zamanda zafiyetin içerdiği ciddiyeti ve bunun gerektirdiği önlemlerin alınmasını da olumsuz yönde etkiliyor.
Bu alandaki ihtiyaca yönelik olarak 2005 yılında geliştirilmeye başlanan CVSS (Common Vulnerable Scoring System), zafiyetleri derecelendirirken, bağımsız, açık ve kapsamlı bir standart sunuyor. CVSS ile zafiyetleri derecelendirmek ve puanlamak; zafiyetin bu kimliğini metinsel bir ifade ile zafiyet yönetim sistemleri ve raporlarda kullanabilmek mümkün.
Bu yazımızda, CVSS'in en güncel sürümü olan 3.0'ı tüm ayrıntıları ile inceleyecek ve web uygulama güvenliği açısından birkaç zafiyet değerlendirmesini CVSS 3.0 ile örneklendireceğiz.
Zafiyeti Karakterize Etmek
CVSS v3 ile zafiyet Metric Groups adı verilen 3 grupta karakterize edilir: Base, Temporal ve Environmental.
Her biri kendi içerisinde alt metrikler içeren bu grupları ayrıntıları ile inceleyelim:
Base
Zafiyetin zaman ve ortam bağımsız, gerçek karakterini ortaya koyan bir metrik türüdür. Zafiyeti Exploitability ve Impact başlıklarında ele alır.
Base Metrik grubunu incelerken, iki farklı sanal kategoriyi de bunun içerisine koyabiliriz: Vulnerable Component (Zafiyeti içeren unsur) ve Impacted Component (Zafiyetten etkilenen unsur). Bu iki sanal kategorinin geçirgenliğini gösteren Scope değeri de, Impacted Component ve Vulnerable Component'in aynı unsur olup olmadığını belirtir.
Aşağıdaki durumlar istisna olmak üzere, genellikle zafiyetlerde Vulnerable Component ve Impacted Component aynı unsurdur. İstisnai durumlar ise:
- Bir web uygulamasındaki XSS zafiyeti. Bu durumda web uygulaması Vulnerable, yani zafiyet içeren unsur olduğu halde, browser, Impacted Component olarak değerlendirilir. Çünkü bu zafiyet dolayısıyla browserdaki oturum bilgileri gibi özel bilgilere ulaşılabilecek ve browser'ın confidentiality'si, yani gizliliği; hatta integrity ve availibility gibi özellikleri dahi etkilenebilecektir.
- Sandbox escape: Sandbox bilindiği üzere, uygulamaları ya da donanımları izole etmemizi sağlar. Bu izole ortamda yaşanacak bir kaçak, çevre uygulamaları da etkileyecek, dolayısıyla sandbox escaping'in söz konusu olduğu uygulama dışında, çevre uygulamalar da etkilenebilecektir.
Vulnerable Component ve Impacted Component sanal kategorisi dışında, CVSS v3, Base Group'u iki farklı kategoride ele almaktadır: Exploitability ve Impact.
Exploitability, zafiyetin istismar edilebilmesinin kolaylık derecesini ve araçları yansıtır.
Exploitability, istismara açık zafiyetin karakterini tarif ederken, Impact de, olası bir exploit'in sonuçlarını yansıtır.
Exploitability Metrikleri
Exploitability metriği, "Vulnerable Component" olarak tanımladığımız, zafiyete açık olan unsuru tanımlar.
Attack Vector (AV): Saldırı Nereden Geliyor? Saldırgan Nerede?
Network (N): Zafiyet istismarının network üzerinden, yani uzaktan istismar edilebileceğini belirtir.
Adjacent Network (A): Zafiyet içeren bileşenin network bağlantısı olduğunu fakat zafiyetin yalnızca bir yerel ağ, subnet üzerinden istismar edilebileceğini belirtir.
Local (L): CVSS v2'de, Atak vector olarak sadece Local tanımlı iken, bu versiyonda, Fiziksel (physical (P)) de eklenmistir. Lokal önceleri, network ile ilgili olmayan bir erişimi tanımlarken şimdi, saldırganın local bir oturuma ya da yetkili bir kullanıcı tarafından gerçeklestirilecek özel bir eyleme ihtiyaç duyulup duyulmadığı vektörünü tanımlar.
Physical (P): Saldırganın zafiyet istismari için söz konusu sisteme/ürüne fiziksel bir erişimini gerekli kılmaktadır.
Attack Complexity (AC) : Saldırgan ne kadar yetenekli?
Low (L): Zafiyet istismarı kolaylıkla gerçekleştirilebilir.
High (H): Zafiyeti istismar edebilmek için ek araç, koşul ve yeteneklere ihtiyaç var.
Privileges Required (PR)
CVSS V2'de Authentication (AU) olarak anılan metriktir. Saldırıyı istismar edebilmek için yetki gereksinimi olup olmadığını derecelendirir.
None (N): Saldırganın istismar için herhangi bir yetkiye ihtiyacı yoktur.
Low (L): Bir örnek ile açıklayacak olursak, zafiyet istismarı için saldırgan sistemde, düşük yetkide bir kullanıcıya sahip olmalı. Bu düşük yetkili kullanıcı sayesinde, başka vektörleri de kullanarak örneğin, sistemde hak yükseltmesi yapılabiliyor.
High (H): Zafiyetin istismarı için Vulnerable Component'da yüksek seviyeli bir yetkiye ihtiyaç duyulabilir. Yüksek yetki ihtiyacı bir tezat gibi görünebilir. Fakat Vulnerable yani zafiyet içeren komponent ile etkilenen (Impacted Component) iki farklı unsur olabilir.
User Interaction (UI)
None (N): Sistemin exploit edilebilmesi için, saldırganın kullanıcı etkileşimine ihtiyacı yoktur.
Required (R): Zafiyeti istismar edebilmek için sistemdeki kullanıcılar ile etkileşim gereklidir. Örneğin CSRF zafiyetleri.
Scope (S)
Bu metrik, Vulnerable Component, yani zafiyeti içeren bileşen ile Impacted Component yani zafiyetten etkilenen bileşenin ayni olup olmadigini gösterir.
Unchanged (U): Zafiyetten etkilenen unsur ile, zafiyeti barındıran unsur aynıdır.
Changed (C): Zafiyeti içeren unsur ile, zafiyetten etkilenen unsur farklıdır. XSS örneğimizde olduğu gibi, zafiyeti içeren unsur web uygulaması olduğu halde, zafiyetten etkilenen unsur web browserı olacaktır.
Impact Metrikleri
Bu grupta, zafiyetten etkilenen unsur (Impacted Component), Confidentiality (Gizlilik), Integrity (Bütünlük) ve Availability (Süreklilik) başlıklarında değerlendirilmektedir.
Confidentiality ( C )
Bu metrikte, sistem gizliliğinin saldırıdan ne derece etkilendiği derecelendirilmektedir.
High (H): Sistemdeki kaynaklar büyük ölçüde, saldırgan tarafından ele geçirilebilmektedir.
Low (L): Zafiyetin istismarı ile yalnızca az bir bilgi, ifşa olabilir.
None (N): Zafiyetin istismarı ile birlikte, bir gizlilik kaybı söz konusu değildir.
Integrity (I)
Zafiyetin istismarı ile birlikte Impacted Component'ın veri bütünlüğünde, kaynaklarda; bir değişme, bozulma söz konusu olup olmadığını derecelendirir."
High (H): Zafiyet nedeniyle sistem kaynakları büyük ölçüde değiştirilebilir, silinebilir.
Low (L): Zafiyet nedeniyle sistem kaynaklarına sınırlı bir müdahale söz konusudur.
None (N): Zafiyet nedeniyle sistem kaynaklarına müdahale söz konusu değildir.
Availability Impact (A)
Zafiyet istismarının Impacted Component'ın sürekliliği, işlevselliği üzerinde bir etkiye sahip olup olmadığını derecelendirir.
High(H): Zafiyet istismarı sistemdeki işlevselliği büyük ölçüde etkiler.
Low(L): Zafiyet istismarı sistemdeki işlevselliği, sürekliliği sınırlı ölçüde etkiler.
None (N): Zafiyet istismarının sistemdeki işlevsellik ve sürekliliğe bir etkisi yoktur.
Temporal Metrikleri
Base Metric ile zafiyetin gerçek karakterini tanımladık. Bunun dışında, zafiyetin zaman içerisinde değişen bir yüzü daha vardır. Örneğin, zafiyetin bulunduğu sistem ile ilgili, üretici firma bir patch yayınladı ise, zafiyetin Temporal Metric değeri düşecektir. Ya da tam tersi, zafiyet istismarı için kullanımı kolay bir istismar aracı geliştirildi ise ve bu koda ulaşım çok kolay ise zafiyetin Temporal Metric skoru yükselecektir.
Temporal metrik değeri yalnızca zafiyetin istismarı ile değil, belgelendirilmesi ile de alakalıdır. Yayınlanan zafiyet raporlarındaki bilgilerin değeri vb. unsurlar da zafiyetin Temporal Metric değerini etkilemektedir.
Aşağıdaki metrik değerlerinden de görüleceği üzere, Base Metric, yani zafiyetin değişmeyen zaman içerisinde aynı kalan karakterine karşı, Temporal Metrics zaman içerisinde değişmektedir.
Exploit Code Maturity (E)
Exploit Code Maturity metrigi sayesinde zafiyetin genel erişime açık ve kolay exploit edileblir bir zafiyet mi, yoksa sadece teorik düzlemde mümkün olan bir zafiyet mi olup olmadığı değerlendirilir.
Not Defined (X): Bu skoru etkilemez. Bu metrikin atlandığını gösterir. X olarak tanımlanan bir metrik hesaplamaya katılmayacaktır.
High (H): Zafiyeti istismar etmek için bir exploit'e ihtiyaç yoktur.
Functional (F): Zafiyetin istismarı ile ilgili exploit kodları mevcuttur. Bu kodlar ile zafiyeti istismarını tekrarlamak mümkündür.
Proof-of-Concept (P): Zafiyetin istismarı pek çok sistem için pratik değildir. Zafiyet istismarı için saldırganın alanında üstün yeteneklere sahip olması gerekmektedir.
Unproven (U): Exploit kodu mevcut değildir.
Remediation Level (RL)
Zafiyetin onarılması için resmi ya da gayri resmi bir çözüm olup olmadığını değerlendiren metriktir.
Not Defined (X): Bu skoru etkilemez. Bu metrikin atlandığını gösterir. X olarak tanımlanan bir metrik hesaplamaya katılmayacaktır.
Unavailable (U): Herhangi bir çözüm mevcut değildir.
Workaround (W): Zafiyeti yamamak için resmi olmayan yöntemler mevcuttur.
Temporary Fix (T): Resmi olarak yayınlanan geçici bir çözüm mevcuttur.
Official Fix (O): Üreticinin yayınladığı çözüm mevcuttur.
Report Confidence (RC)
Mevcut zafiyet raporundaki ayrıntıları derecelendirir.
Not Defined (X): Bu skoru etkilemez. Bu metrikin atlandığını gösterir. X olarak tanımlanan bir metrik hesaplamaya katılmayacaktır.
Confirmed (C): Vendor tarafından zafiyetin varlığının doğrulandığını ya da herkese açık bir fonksiyonel exploit'in varligini belirtir.
Reasonable (R): Raporda, zafiyete yol açan etmenler makul bir şekilde degerlendiriliyor, fakat sorunun kaynağına dair kesin bir şey söylenemiyor ya da kaynak koda erişim olmadığı için zafiyetin diğer etkileri tespit edilemiyor ise. Bu metriğe değer olan Reasonable ( R ) değeri atanabilir.
Unknown (U): Raporda, zafiyete neyin yol açtığının bilinmediği görülmektedir. Ya da zafiyetin nedeni ve etkileri net değildir.
Environmental Metrikleri
Genel olarak Base ve Temporal metrikler güvenlik analistleri ve üreticiler gibi zafiyetlerin karakteristiği hakkında kesin bilgiye sahip kimseler tarafından kullanılmaktadır. Diğer yandan Environmental Metrics, yani çevresel metrikler ise, zafiyetin ilgili kontekstteki, belirli çevresel şartlar altındaki etkilerini kendi ortamlarında en iyi değerlendirilecek son kullanıcı tarafındaki organizasyonlar tarafından yapılmaktadır.[1]
Yenileyecek olursak, Çevresel metrikler, Base Metrik ile tanımlanan zafiyetin genel karakteristiğinin, verili koşullarda, örneğin spesifik bir çevredeki yeni risk değerlendirmesidir.
Örneğin normalde, Base Metrikleri hesaplarken, Confidentiality, Integrity ve Availability kategorilerinin alabileceği değerler, her kategori için üç farklı, eşit değerdir.[2] Ama bazı ortamlarda, bazı sistemlerde, örneğin Availability daha büyük bir önem arz edebilir. Bu durumda, Availability'nin tüm skor içerisindeki değerini tanımlamak için farklı bir çarpan kullanılacaktır.
Keza, zafiyetin istismarı, normal şartlar altında bir yetki gerektirirken, skorun hesaplandığı spesifik ortam için böyle bir zaruret yoksa, Privileges Require değeri verili ortam için None olarak işaretlenir, bu da zafiyetin skorunu arttıracaktır.
Metrik Değerleri[3]
Metric | Metric Value | Numerical Value |
---|---|---|
Attack Vector / Modified Attack Vector | Network | 0.85 |
Adjacent Network | 0.62 | |
Local | 0.55 | |
Physical | 0.2 | |
Attack Complexity / Modified Attack Complexity | Low | 0.77 |
High | 0.44 | |
Privilege Required / Modified Privilege Required | None | 0.85 |
Low | 0.62 (0.68 Şayet, "Scope değişti ise") | |
High | 0.27 (0.50 Şayet, "Scope değişti ise") | |
User Interaction / Modified User Interaction | None | 0.85 |
Required | 0.62 | |
C,I,A Impact / Modified C,I,A Impact | High | 0.56 |
Low | 0.22 | |
None | 0 | |
Exploit Code Maturity | Not Defined | 1 |
High | 1 | |
Functional | 0.97 | |
Proof of Concept | 0.94 | |
Unproven | 0.91 | |
Remediation Level | Not Defined | 1 |
Unavailable | 1 | |
Workaround | 0.97 | |
Temporary Fix | 0.96 | |
Official Fix | 0.95 | |
Report Confidence | Not Defined | 1 |
Confirmed | 1 | |
Reasonable | 0.96 | |
Unknown | 0.92 | |
Security Requirements – C,I,A Requirements (CR) | Not Defined | 1 |
High | 1.5 | |
Medium | 1 | |
Low | 0.5 |
Hesaplama
CVSS v3 skorları hesaplanırken, FIRST sitesinde yayınlanan JS kütüphanesi kullanılabilir.[4]
BASE Score'un hesaplanması:
Öncelikle Impact Sub Score Base (ISC Base) değeri hesaplanır:
ISCBase = 1 - ((1−ImpactConf) × (1−ImpactInteg) × (1−ImpactAvail))
Ardından Scope'un değişip değişmediğine bağlı olarak, iki farklı yöntemle Impact Sub Score (ISC) hesaplanır:
// Calculate ISC
if(Scope=="U") { // U=Unchanged
ISC = 6.42 * ISCBase;
} else {
ISC = 7.52 * (ISCBase-0.029)-3.25*Math.pow((ISCBase-0.02), 15);
}
Devamında, Exploitability Sub Score (ESC) hesaplanır:
ESC = 8.22 × AttackVector × AttackComplexity × PrivilegeRequired × UserInteraction
ISC ve ESC değerlerinden sonra sıra BaseScore hesaplamakta:
Eğer ISC değeri 0 ise, direkt olarak BaseScore değeri de sıfır oluyor. ISC' değerinin 0 ya da 0'dan büyük bir değer olduğu durumlar için kod:
if(ISC<=0) {
BaseScore=0;
} else {
if($("#S").val()=="U") {
BaseScore = roundUp1(Math.min((ISC+ESC),10));
} else {
BaseScore = roundUp1(Math.min((1.08*(ISC+ESC)),10));
}
}
Burada roundUp1 fonksiyonu dikkati çekecektir. Spesifikasyonda belirtildiği tanımla:
function roundUp1(d) {
return Math.ceil (d * 10) / 10;
}
BaseScore 'ı bulunduktan sonra aşağıdaki formülle Temporal Score'ı hesaplayabiliriz:
Round up(BaseScore × ExploitCodeMaturity × RemediationLevel × ReportConfidence)
CVSS Severity
CVSS Skorlarını yayınlarken Severity'leri belirtmek zorunlu değil. Ancak Skorların Severity karşılıkları hesaplanmak istenirse, spesifikasyonda önerilen tablo kullanılabilir:
Rating | CVSS Score |
---|---|
None | 0.0 |
Low | 0.1 - 3.9 |
Medium | 4.0 - 6.9 |
High | 7.0 - 8.9 |
Critical | 9.0 - 10.0 |
Örneğin 4.0 skorununun severitysini Medium olarak belirtebiliriz.
CVSS Vector String
CVSS skorları hesaplanılırken kullanılan metriklerin metinsel temsilidir. CVSS skorlarını aktarmak ve saklayabilmek için kullanışlı bir biçim sunar.
CVSS vector stringleri, CVSS etiketi ile başlar ve kullanılan CVSS sürümünün numerik değeri ile devam eder. Bunu takip eden vektör metninde "/" işareti ile kullanılan metrikler ve değerleri yer alır:
CVSS vector stringlerinde, metrikler herhangi bir sıra ile belirtilebilir. Ama tercih edilen sıra aşağıdaki tabloda belirtilmiştir.
İkinci önemli bir kural da şudur, Base Metriklerin vectörde yer alması zorunlu iken, Temporal ve Environmental metriklerinin vector string'inde yer alması tercihe bağlıdır.
CVSS vectoral string'inde belirtilmeyen opsiyonel grup metrikleri, Not Defined (X) olarak kabul edilecektir. Hususen Not Defined (X) olarak belirtilmiş olan opsiyonel gruptaki metriklerin CVSS vektör stringinde yer alması zorunlu değildir.
Örnek: CVSS:3.0/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N
Temporal ve Environmental metrik gruplarının belirtilmediği yukarıdaki vectör stringinde, Attack Vector, Network olarak, Attack Compexity, Low olarak, Privilege Require None olarak, User Interactive None olarak, Scope Unchanged olarak Confidentiality ve Integrity Low olarak, Availability ise None olarak belirtilmiştir. Yukarıdaki vector stringinde hususen belirtilmeyen Temporal ve Environmental değerlerinin her bir metriği için Not Defined (X) değeri kabul edilecektir.
Örnek: CVSS:3.0/S:U/AV:N/AC:L/PR:H/UI:N/C:L/I:L/A:N/E:F/RL:X
İlk örneğe ek olarak bu ikinci örnekte de Exploitability Mature Functional olarak belirtilmiş ve Remediation Level Not Defined (X) olarak belirtilmiştir. Yine metrik değerleri sıralanırken, belirli bir sıra takip edilmemiştir.
Örnek Skor Hesaplaması
GNU Bourne-Again Shell (Bash) 'Shellshock' Vulnerability (CVE-2014-6271)[5]
2014 yılında yayınlanan ve pek çok Linux tabanlı sunucunun etkilendiği Shellshock zafiyetini CVSS v3 ile karakterize ederek, puanlayalım.
Zafiyeti kısaca hatırlamakta fayda var. CGI modunda çalışan Apache sunucuları, kendisine gönderilen istekteki Headerlar ile ortam değişkenleri oluşturuyor ve header değerlerini bu değişkenlerin içerisinde saklıyordu.
Bash ortamında, ortam değişkenleri tanımından hemen sonra yapılan fonksiyon tanımlamalarının kod kümesi olarak çalıştırıldığı hesaba katıldığında, saldırgan tarafından özel olarak hazırlanıp gönderilen bir HTTP Request headerı hedef sunucuda uzaktan kod çalıştırma (Remote Code Execution) çalıştırma zafiyetine neden olacaktır.[6]
Attack Vector: Network
Zafiyet, saldırgan tarafından network üzerinden istismar edilebilir. Çünkü saldırıda Vulnerable Component yani zafiyeti içeren unsur bir web sunucusudur.
Attack Complexity: Low
Saldırıyı istismar etmek için özel bir araca ihtiyaç yoktur. Saldırgan HTTP isteği elle editleyebildiği her koşulda, zafiyeti istismar edebilecektir. Browserların built-in HTTP Request Builder'ı ile dahi bu iş mümkündür.
Privileges Required: None
Saldırganın bu zafiyeti istismar etmesi için hedef sistem üzerinde herhangi bir yetkiye ihtiyacı yoktur.
User Interaction : None
Saldırgan bu zafiyeti istismar etmek için herhangi bir kullanıcı ile etkileşime girmek zorunda değildir. Zafiyet istismarı için oluşturduğu bir HTTP Request ile, kolaylıkla zafiyeti istismar edebilir.
Scope : Unchanged
Scope değişmemektedir çünkü zafiyet Bash'den kaynaklanmaktadır ve tüm etkisi Bash kabuğu üzerindedir.
Confidentiality, Availability and Integrity Impact: High
Saldırgan bash vasıtası ile tüm sistemi kontrol altına alabileceğinden gizlilik, bütünlük ve süreklilik yüksek düzeyde risk altındadır.
CVSS v3 Base Score : 9.8
CVSS v3 Vector String: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Netsparker ve CVSS
Netsparker Ekim 2016 Release'i ile birlikte CVSS 'i zafiyet raporlarına ekledi. Buna göre Netsparker, skalasında checkleri bulunan tüm zafiyetler için Base ve Temporary metriklerini derecelendiriyor.
Kullanıcı, taranan sistemle ilgili Environmental metriklerini ise, Report Policy altından ayarlayabiliyor.
CVSS değerleri, CVSS Vectoral String'leri ve bu skorların severity dönüşümleri tüm rapor çıktılarında, zafiyet klasifikasyonlarına ek olarak gösterilmektedir.
[2] Metrik Değerleri tablosuna bakınız.
[3] https://www.first.org/cvss/specification-document
[4] https://www.first.org/cvss/use-design
[5] https://www.cvedetails.com/cve-details.php?t=1&cve_id=2014-6271
[6] https://www.netsparker.com/blog/web-security/cve-2014-6271-shellshock-bash-vulnerability-scan/