Wstęp
CVE to dość często używany skrót w świecie podatności. Pochodzi od angielskiego Common Vulnerabilities and Exposures – dosłownie można to przetłumaczyć jako Powszechne Podatności i Ekspozycje [na zagrożenia].
Celem CVE jest opisanie i skatalogowanie każdej podatności w systemach informatycznych, dzięki czemu można nadać jej konkretny numer – czyli CVE ID.
Źródło: https://pixabay.com/pl/photos/bezpiecze%C5%84stwo-alarm-monitor-cyber-5043368/
Czym jest CVE ID?
CVE ID to identyfikator CVE. Składa się on z trzech elementów:
- Przedrostka CVE;
- Roku wykrycia podatności;
- Numeru podatności, który jest unikalnym ciągiem cyfr. Obecnie może mieć on nawet 7 cyfr, lecz do 2014 było to limitowane do czterech.
Poszczególne elementy oddzielone są od siebie myślnikami.
Przykład: CVE-2021-44228 – znane popularnie jako Log4shell – krytyczna podatność w Log4j odkryta w 2021 roku, która umożliwiała zdalne wykonanie kodu (RCE).
Dzięki opisaniu każdej podatności za pomocą jednego identyfikatora, przypisanego na stałe do podatności, można wymieniać się informacjami o nich, jak i wdrażać poprawki bądź aktualizacje, które łatają daną podatność.
Identyfikatory CVE są nadawane już od 1999 roku. Jest ich już 223 313 (stan na 4 stycznia 2024 r.) Można to zobaczyć na oficjalnej stronie projektu, czyli cve.org.
Źródło: https://www.cve.org/
O tym, kto odpowiada za tworzenie CVE, dość dobrze mówi stopka strony:
CVE is sponsored by the U.S. Department of Homeland Security (DHS) Cybersecurity and Infrastructure Security Agency (CISA). Copyright © 1999-2024, The MITRE Corporation.
Można z niej wyczytać, że za utrzymywanie CVE odpowiada dobrze znane bezpiecznikom MITRE – twórcy MITRE ATT&CK. Należy również zaznaczyć, że projekt wspierany jest przez Departament Bezpieczeństwa Krajowego USA (DHS) i amerykańską Agencję ds. Cyberbezpieczeństwa i Bezpieczeństwa Infrastruktury (CISA).
Więcej o mapowaniu ataków hakerskich można przeczytać tutaj.
Źródła informacji o CVE
Oto lista kilku źródeł informacji w oparciu o wyszukiwanie z użyciem danego CVE ID:
- Oficjalne strony projektu: cve.org i cve.mitre.org (starsza wersja)
- Narodowa baza podatności (NVD – National Vulnerability Database), tworzona przez amerykański NIST (National Institute of Standards and Technology): nvd.nist.gov (bardzo dobre i praktyczne źródło informacji o podatnościach)
- CVE Details
- Google – czasami warto po prostu wpisać numer podatności i trochę poszperać 🙂
CVSS, czyli odpowiedź na pytanie: A poważna ta podatność?
To oczywiste, ale warte podkreślenia: nie każda podatność jest krytyczna. Podatności mają różny wpływ na system bądź aplikacje i wymagają rozmaitych warunków, aby być wykorzystane przez atakujących.
Przykładowo – jeśli mamy podatność, która może zostać wykorzystana przez dowolne urządzenie z Internetu, będzie to o wiele większe zagrożenie niż wykorzystanie tej samej podatności, która wymaga wcześniejszego uwierzytelnienia się w systemie.
Aby ujednolicić wagę podatności dla danego środowiska, w 2005 roku wcielono w życie CVSS (ang. Common Vulnerability Scoring System). CVSS pozwala na nadawanie podatnościom konkretnych wag, dzięki czemu można przydzielić danej luce bezpieczeństwa konkretną liczbę z przedziału 0 do 10 w oparciu o odpowiednie parametry. Obecnie najnowszą wersją CVSS jest CVSS 4.0, lecz powszechnie stosowane jest CVSS 3.0 i 3.1. Wersja 4.0 została wydana pod koniec 2023 roku.
Tak prezentuje się wykres odnośnie CVSS dla podatności:
Źródło: https://www.cvedetails.com/cvss-score-distribution.php
Obliczanie numeru CVSS jest dość skomplikowane i składa się z poniższych elementów (dla CVSS w wersji 3):
Źródło: https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator
Każda wersja CVSS opiera się na uwzględnianiu wielu różnych czynników podczas określania wagi podatności. Dla CVSS w wersji 3 jest to 8 czynników, takich jak:
- Wektor ataku (Attack vector, AV) – jeden z czterech możliwych wektorów ataku, czyli sposobów wykorzystania danej podatności. W tym kontekście oznacza to, jaki dostęp do danego środowiska ma atakujący. Wśród wektorów ataku wyróżnia się: Sieć [Internet] (Network, AV:N), Sieć lokalna (Adjacent Network, AV:A), Konto lokalne (Local, AV:L) i Fizyczny dostęp do urządzenia (Physical, AV:P).
- Złożoność ataku (Attack complexity, AC) – wyróżnia się dwa poziomy złożoności: Niską złożoność (Low, AC:L) i Wysoką złożoność (High, AC:H). Z założenia niska złożoność nie wymaga od atakującego wielu przygotowań – ten sam atak może być powielony na wielu urządzeniach. Wysoka złożoność może wymagać np. konkretnej konfiguracji serwera, która jest podatna na dane zagrożenie.
- Wymagane uprawnienia (Privileges Required, PR) – określa poziom wymaganych uprawnień do wykorzystania podatności. Wyróżnia się trzy stopnie: Brak jakichkolwiek uprawnień (None, PR:N), Podstawowe uprawnienia użytkownika (Low, PR:L) i Zwiększone uprawnienia (High, PR:H).
- Stopień interakcji użytkownika (User Interaction, UI) – wyróżnia się dwa poziomy interakcji użytkownika: Brak interakcji (None, UI:N) i Wymagana interakcja (UI:R).
- Zakres (Scope, S) – dotyczy zakresu podatnych komponentów. Jeśli podatność w danym oprogramowaniu dotyczy jedynie tego oprogramowania i nie może być dalej wykorzystywana, ma nadawany status Unchanged (S:U). Jeśli zasoby inne niż podatne oprogramowanie mogą zostać dotknięte przez podatność, ma ona nadawany status Changed (S:C).
Pozostałe trzy czynniki pochodzą z Triady CIA. Są nimi:
- Poufność (Confidentiality, C);
- Integralność (Integrity, I);
- Dostępność (Availability, A).
Do trzech powyższych czynników stosuje się trzy, te same miary: Zerowy wpływ (None), Mały (Low) i Duży (High).
Powyższe wskaźniki zostały omówione dla bazowej wartości CVSS (Base Score Metrics).
Zależnie od sumy uzbieranych punktów, podatności nadawana jest konkretna wartość ostrzeżenia. Do każdej podatności można przypisać jeden z czterech opisów wag: Low (Mała), Medium (Średnia), High (Duża) i Critical (Krytyczna).
Za powyższymi parametrami stoi królowa nauk – matematyka. Tak wygląda wycinek z wyliczeń:
CVSS jest dość dobrze opisany na angielskiej Wikipedii: link.
Więc po co mi to CVE i CVSS?
Odpowiedź jest dość logiczna – skatalogowanie podatności i nadanie jej odpowiedniej wagi pozwala na dalsze działanie.
Gdyby nie CVE ID, trudno byłoby rozmawiać o podatnościach – czasem kilka numerów CVE może dotyczyć bardzo podobnych luk w oprogramowaniu. Gdyby nie CVSS, nie byłoby możliwości wskazania, jak poważna jest dana luka. Zupełnie inne zachowanie będzie wymagane dla krytycznej podatności w porównaniu dla podatności, która jest możliwa do wykorzystania w bardzo specyficznych warunkach.
Kto może nadawać CVE ID?
Numery mogą nadawać CNA, czyli CVE Numbering Authorities. Obecnie jest to ponad 355 organizacji z 39 krajów.
Najwięcej organizacji pochodzi z USA – dokładnie 189. Na drugim miejscu znajduje się Chińska Republika Ludowa z 20 organizacjami. Ostatnie miejsce na podium zajmują Niemcy z 14 organizacjami. Pełna lista organizacji dostępna jest tutaj.
Od sierpnia 2023 roku CERT Polska może nadawać numery CVE. Jest to jedyna polska organizacja z takimi uprawnieniami. Jeżeli chcemy zgłosić podatność, można zrobić to tutaj.
Źródło: https://www.cve.org/assets/cvePartnersMap-HQkqPJ6_.png
W procesie zgłaszania podatności ważne jest również to, aby nie publikować informacji o niej w Internecie. Dotyczy to przede wszystkim PoC (ang. Proof of Concept – potwierdzenie, że faktycznie taka podatność istnieje) i exploitów. Może to spowodować efekt odwrotny od zamierzonego – atakujący mogą wykorzystać podatność, zanim zostanie załatana przez dostawcę oprogramowania. CERT Polska pisze o tym dość jasno:
„Prosimy o nie publikowanie informacji o podatności przed zakończeniem procesu jej obsługi. Jeśli Zgłaszający planuje takie działania, prosimy o informację wyprzedzającą.” – źródło
Przykładowe CVE wraz z krótkim opisem
- CVE-2017-0144 – podatność w SMBv1, która była wykorzystywana przy WannaCry – jednym z większych ataków w historii. Wykorzystywał ją EternalBlue, exploit opracowany przez NSA.
CVSS (wersja 3): 8.1 (wysoka) - CVE-2019-0708 (BlueKeep) – podatność w RDP (protokół odpowiedzialny za zdalny pulpit), która pozwala na zdalne wykonanie kodu (RCE) nieuwierzytelnionym użytkownikom.
CVSS (wersja 3): 9.8 (krytyczna) - CVE-2016-5195 (Dirty Cow) – bardzo nietypowa podatność, obecna w linuksowym kernelu od września 2007. Jej pierwsze wykorzystanie zostało odnotowane dopiero w październiku 2016 roku, czyli 9 lat później. Podatność dotyczyła mechanizmu kopiowania przy zapisie (ang. copy-on-write – inaczej COW). Pozwala ona na eskalację uprawnień do poziomu roota. Nie zostawiała po sobie logów w systemie.
CVSS (wersja 3): 7.8 (wysoka)
CVE dla atakujących – praktyczne zastosowanie
Na podstawie kilku przykładów odpowiem na dość ważne pytanie: Czy CVE mają zastosowanie w atakach?
Exploit-DB
Jeśli istnieje publiczny exploit, zapewne można go wyszukać za pomocą CVE. Dla przykładu odwiedziłem stronę exploit-db.com, gdzie jest taka możliwość. W polu wyszukiwania wpisałem CVE-2017-8759.
Podatność ma dość duże CVSS – 7.8 (w wersji 3).
Źródło: https://nvd.nist.gov/vuln/detail/cve-2017-8759
Po wyszukaniu tego numeru podatności, na stronie ukazał się jeden wynik:
Po kliknięciu w niego, pokazała się krótka notka. Kluczowa jest jednak pierwsza linijka:
„Source: https://github.com/Voulnet/CVE-2017-8759-Exploit-sample”
Po kliknięciu w link, zostałem przekierowany do strony na GitHubie o poniższej zawartości:
Jeśli autor nie kłamie, jest to exploit wykorzystujący wskazaną przeze mnie podatność.
Metasploit
Metasploit to narzędzie, które jest bardzo przydatne podczas ataków z korzystaniem konkretnych podatności, ponieważ zawiera on bazę eksploitów i pozwala na łatwe podtrzymanie komunikacji między podatnym urządzeniem a atakującym. Metasploit pozwala na wyszukiwanie exploitów za pomocą CVE. Aby uruchomić konsolę Metasploit, należy użyć polecenia msfconsole.
Polecam otwierać i zamykać msfconsole – można trafić ciekawe obrazki, tak jak tę krowę 🙂
Jeśli poszukamy po CVE ID przypisanym do EternalBlue, znajdziemy gotowy exploit:
Znajdziemy również exploit opracowany na JetBrains TeamCity z 2023 roku:
Kolejny przykład – CVE-2020-0646, podatność w SharePoint:
Oczywiście, nie wolno tych exploitów używać w przypadku, jeśli nie mamy na to pisemnej zgody – grozi za to do 2 lat więzienia (Art. 267 Kodeksu Karnego).
Shodan
Shodan nazywany jest Google Internetu. W uproszczeniu, jest on bazą urządzeń widocznych z Internetu. Shodan udostępnia filtr vuln, dzięki któremu można wyszukiwać podatności za pomocą CVE ID. Dostęp do tego filtru mają wybrane pakiety komercyjne, jak i osoby posiadające dostęp akademicki. Jeśli masz mail w domenie swojej uczelni, który posiada .edu – warto taki dostęp uzyskać 🙂
Shodan nie pozwala jednak na wyszukiwanie po wszystkich numerach CVE. Przykładowo, dla wspomnianego już wielokrotnie CVE-2017-0144 nie zwróci żadnych wyników:
Co innego jednak dla CVE-2021-34473 – krytycznej podatności w Microsoft Exchange Server:
Źródło: https://nvd.nist.gov/vuln/detail/cve-2021-34473
Źródło: https://www.shodan.io/search?query=vuln%3Acve-2021-34473
Shodan zwrócił dokładnie 4500 wyników. Należy jednak mieć na uwadze, że prawdopodobnie wiele z nich to tzw. honeypoty, czyli przynęty dla atakujących.
WAŻNE!!! Podobnie jak w przypadku Metasploita, za wykorzystanie takiej podatności grozi nam odpowiedzialność karna.
Podsumowanie
CVE ID to bardzo ważny element zwiększania bezpieczeństwa w cyberprzestrzeni. Dzięki identyfikatorom podatności można mówić o nich w sposób, który będzie zrozumiały dla osób zajmujących się tym tematem.
Oczywiście, uczenie się numerów CVE na pamięć nie jest konieczne – najważniejsze, aby być odpornym na zagrożenia, które za nimi stoją 🙂
Pisał dla Was Oskar Klimczuk.
Źródła
CVSS – https://en.wikipedia.org/wiki/Common_Vulnerability_Scoring_System#