Artykuł jest kompilacją moich opracowań zagadnień z rozdziału 1.2 Given a scenario, analyze potential indicators to determine the type of attack, pochodzącego z rozpiski egzaminacyjnej CompTIA Security+.
Jeśli nie chcesz przegapić kolejnych materiałów opisujących zagadnienia CompTIA Security+, to zachęcam do zapisania się na mój newsletter:
W przypadku zagadnień z tego działu, na egzaminie należy zidentyfikować typ ataku na podstawie podanego scenariusza. Czyli najprawdopodobniej w pytaniu będzie przedstawiony krótki opis sytuacji i na jego podstawie trzeba będzie wybrać najlepiej pasującą odpowiedź (pamiętajmy, że prawidłowych może być kilka, ale tylko jedna będzie najlepiej dopasowana).
- Malware
- Password attacks
- Physical attacks
- Adversarial artificial intelligence (AI)
- Supply-chain attacks
- Cloud-based vs. on-premises attacks
- Cryptographic attacks
- Materiały źródłowe
Malware
Opracowania związane ze złośliwym oprogramowaniem (ang. malware) znajdują się w osobnym artykule: SY0-601: ODMIANY ZŁOŚLIWEGO OPROGRAMOWANIA.
Password attacks
Opracowania związane z różnymi atakami na hasła znajdują się w osobnym artykule: SY0-601: METODY ŁAMANIA HASEŁ.
Physical attacks
Ataki fizyczne (ang. physical attacks), jak sama nazwa wskazuje, wychodzą poza sferę oprogramowania (ang. software) oraz zdalnego dostępu przez sieć (ang. network).
Charakteryzują się bezpośrednim (fizycznym) dostępem do atakowanego systemu i/lub wykorzystaniem narzędzi sprzętowych (ang. hardware). Przykładem takiego ataku może być zarówno włamanie się do pomieszczenia z serwerem, jak i podrzucenie ofierze zainfekowanej pamięci USB.
Malicious Universal Serial Bus (USB) cable
W dosłownym tłumaczeniu jest to złośliwy kabel USB (Universal Serial Bus). Wygląda jak zwyczajny kabel USB, którego używamy do ładowania baterii urządzeń mobilnych czy też do podłączania tychże urządzeń do komputera.
Jednak w obudowie wtyczki ma ukrytą dodatkową elektronikę, która znacząco zmienia jego możliwości. Taki kabel po wpięciu do portu naszego komputera może zostać rozpoznany jako urządzenie HID (Human Interface Device), czyli nic innego jak peryferyjne urządzenie wejścia typu mysz, klawiatura czy gamepad.
Skoro więc system operacyjny rozpoznaje taki kabel jako zwykłe urządzenie wejścia to nie będzie miał problemów z przyjmowaniem od niego poleceń. Teraz wystarczy, że w urządzeniu są zaszyte złośliwe procedury uruchamiane automatycznie (np. uruchomienie terminala i skryptu, który ściągnie i zainstaluje złośliwe oprogramowanie) bądź zamieni się w mini hotspot wi-fi, który umożliwi zdalny dostęp atakującemu.
Możliwe, że brzmi to trochę nieprawdopodobnie, ale tutaj mamy namacalny przykład takiego sprzętu: O.MG Cable. Urządzenie udaje kabel USB, ale w rzeczywistości zawiera ukryty implant pozwalający na przeprowadzanie różnych ataków (od wstrzykiwania poleceń po umożliwienie zdalnego dostępu). Co ciekawe, urządzenie ma również opcję autodestrukcji :).
Właśnie dlatego powinniśmy uważać na to co wsadzamy do naszych portów USB (i ogólnie na to co podłączamy do naszych urządzeń). Jeśli nie mamy pewności co do źródła pochodzenia danego sprzętu, powinniśmy zachować maksymalną ostrożność.
Malicious flash drive
Czyli nic innego jak złośliwa pamięć przenośna (inne częste określenia pamięci przenośnej to: pendrive; USB stick/drive; thumbdrive). Zasada działania może być podobna do opisanego wyżej kabla USB, czyli zwyczajnie wyglądające urządzenie zawiera pod obudową dodatkową elektronikę, która zmienia je w narzędzie do ataku (udawanie urządzenia HID; hotspot wi-fi umożliwiający zdalny dostęp do systemu itp.). Przykład takiego gadżetu: USB Rubber Ducky.
To co odróżnia pendrive’a od podrasowanych kabli USB to fakt, że nawet zwyczajna pamięć przenośna, nie zawierająca złośliwych przeróbek, może nam zaszkodzić. Wystarczy, że ma zapisane w sobie złośliwe oprogramowanie, które nierozważnie uruchomimy.
Starsze wersje systemu operacyjnego Windows miały włączone domyślnie usługi o nazwie AutoRun oraz AutoPlay, które były w stanie automatycznie otworzyć i uruchomić zawartość pamięci masowej, bez ingerencji użytkownika. Jeśli na nośniku znajdował się plik tekstowy o odpowiednim formacie: autorun.inf, był on odczytywany i interpretowany przez wspomniane usługi (określał m.in. które pliki mają zostać automatycznie uruchomione).
Już na pierwszy rzut oka widać, że jest to poważne zagrożenie dla bezpieczeństwa systemu, dlatego te usługi zostały wyłączone w domyślnej konfiguracji od wersji Windows 7 (dla starszych wersji Windows XP oraz Vista został opublikowany odpowiedni patch).
Ochroną przed takimi atakami jest oczywiście nieużywanie nośników, co do których nie mamy pewności, że pochodzą z zaufanego źródła. Mówiąc bardziej dosadnie, nie wpychajmy do portów USB wszystkiego co wpadnie nam w ręce :).
Chcę jeszcze polecić artykuł traktujący o tym temacie: Malicious USB drives: Still a security problem – 11/30/2021, z którego dowiadujemy się m.in.:
- W 2016 roku przeprowadzono eksperyment w kilku amerykańskich uczelniach, który polegał na przypadkowym porozrzucaniu kilkuset pendrive’ów. 98% urządzeń zostało zabrane przez przechodniów, z czego przynajmniej 45% zostało podłączone do komputera znalazcy.
- W 2014 roku wystąpił pierwszy przypadek tzw. ataku BadUSB, który polega na przeprogramowaniu układów scalonych wbudowanych w przenośną pamięć USB (czyli zamiast dodatkowej elektroniki, atakujący wykorzystali istniejącą).
- Czasami celem atakującego jest po prostu zwyczajna destrukcja. Atak typu USB Killer może doprowadzić do uszkodzenia sprzętu, do którego jest podłączone złośliwe urządzenie. Taki pendrive ma ukryty pod obudową specjalny kondensator, który po podłączeniu ładuje się, a następnie uwalnia zgromadzony ładunek elektryczny – proces jest powtarzany do chwili aż płyta główna się podda.
- Najlepszym sposobem obrony jest edukacja użytkowników/pracowników w zakresie bezpieczeństwa, ale niektóre firmy posiadają dedykowane terminale sheep dip machines, czyli wyizolowane środowiska służące do testowania podejrzanych plików czy urządzeń.
Skimming
Tym mianem określa się ogólnie proceder polegający na wykradaniu danych karty płatniczej/kredytowej (i nie tylko) w sposób niezauważalny dla jej posiadacza. Dzieje się to zazwyczaj podczas zwykłego użytkowania karty, czyli np. podczas korzystania z bankomatu bądź płacenia za jej pośrednictwem.
Jeszcze nie tak dawno temu, kiedy w powszechnym użyciu były karty z paskiem magnetycznym, przestępcy modyfikowali bankomaty w taki sposób, żeby wykraść jak najwięcej istotnych informacji. Na standardowych czytnikach kart umieszczali dodatkowe urządzenia (tzw. skimmery), które miały za zadanie odczytanie i skopiowanie danych karty umieszczonych na paskach magnetycznych, takich jak: numer karty; imię i nazwisko właściciela; data ważności etc.
Poza takim czytnikiem bardzo często można było spotkać się z dodatkowymi kamerami (umieszczonymi na dziko) czy też specjalnymi nakładkami na klawiaturę bankomatu, które miały za zadanie wykraść kod PIN do skompromitowanej karty. Przestępca posiadający takie informacje mógł sobie nieźle pożyć na konto ofiary dopóki ta się nie zorientuje.
Ktoś uważny to był w stanie wychwycić takie przeróbki, które mniej lub bardziej wyróżniały się na tle bankomatu (np. podejrzanie duża obudowa zainstalowana przy czytniku kart), ale oszuści dwoili się i troili, żeby ukryć swój niechciany tuning.
Pisałem do tej pory w czasie przeszłym, ponieważ obecnie w kartach płatniczych i kredytowych wykorzystuje się chipy, a dodatkowo coraz popularniejsze są płatności zbliżeniowe NFC (Near Field Communication), które bazują na trochę starszej, ale wciąż popularnej technologii RFID (Radio-Frequency Identification). W związku z tym, tego typu ataki nie mają już wiele sensu, ponieważ samo zebranie danych z paska magnetycznego karty nic nie daje.
Nie oznaczy to jednak, że przestępcy się poddali. Wraz z ewolucją zabezpieczeń, rozwinęły się też techniki ataków fizycznych, choć trzeba przyznać, że są one mniej powszechne niż kiedyś. Obecnie bardziej popularną metodą kradzieży jest wyciąganie danych od ofiary poprzez socjotechnikę (np. phishing) i wykorzystywanie ich do przeprowadzania transakcji online.
Wraz z rozpowszechnieniem się standardu płatności EMV (Europay, Mastercard, Visa – 3 firmy, które opracowały wspomniany standard oparty o karty inteligentne/chipowe) kradzież danych z kart stała się znacznie trudniejsza, choć w teorii ciągle możliwa. Pojawiła się więc nowa forma skimmingu, czyli tzw. shimming i charakteryzuje się tym, że dotyczy kart z chipami EMV: Pierwszy skimmer na karty chipowe.
Okazuje się jednak, że kradzież danych potrzebnych do sklonowania karty czy też do przeprowadzenia nieautoryzowanych transakcji nie jest już taka prosta. Na przykład klucz prywatny służący do szyfrowania, zapisany w układzie scalonym, nigdy nie jest przesyłany podczas transakcji, więc nie da się go przechwycić, żeby sklonować kartę. Możliwe jednak, że te dane, które da się przechwycić są wystarczające, żeby autoryzować niektóre transakcje. Pamiętajmy, że są miejsca na świecie gdzie technologia jest trochę mniej rozwinięta i co za tym idzie, obowiązujące tam standardy bezpieczeństwa mogą być mniej restrykcyjne niż u nas.Na szczęście opłacalność takich procederów jest obecnie na tyle niska, że nie są one powszechne.
UWAGA! Wspomniany wyżej shimming jest bardziej ciekawostką i nie powinien pojawić się na egzaminie w tym kontekście. Może jednak pojawić się w innym kontekście, tj. jako technika nadpisywania sterowników w systemie, ale do tego jeszcze wrócimy w kolejnych materiałach.
Inną ciekawą odmianą skimmingu, o której przez pewien czas było głośno, jest kradzież danych z kart zbliżeniowych. Myślę, że wiele osób słyszało o potencjalnym zagrożeniu związanym z oszustami wyposażonymi w specjalne urządzenia NFC/RFID, którzy przemieszczali się w tłumie wykradając dane lub wymuszając nieautoryzowane transakcje zbliżeniowe. Jak możemy jednak przeczytać w tej publikacji: Mit blokowania sygnału RFID karty płatniczej, była to raczej kaczka dziennikarska. O ile oszustwa związane z kartami zbliżeniowymi są jak najbardziej możliwe, to nie w takim stopniu jak się powszechnie uważa.
Jak zdążyliśmy się już zorientować, ataki fizyczne związane z kradzieżą danych kart płatniczych/kredytowych (skimming) nie są już dzisiaj tak powszechne jak kiedyś. Wiąże się to z coraz lepszą technologią wykorzystywaną do obsługi płatności. Mimo to, zawsze powinniśmy być czujni.
Jeśli korzystając z bankomatu zauważymy, że czytnik kart wygląda podejrzanie lub coś innego wzbudzi naszą wątpliwość (np. sprzedawca będzie chciał zabrać naszą kartę kredytową na zaplecze), powinniśmy się wstrzymać z przeprowadzaniem jakichkolwiek operacji z użyciem karty.
Card cloning
Wiemy już, że opisany powyżej skimming to po prostu kradzież danych zapisanych na karcie w ten czy inny sposób. Kiedy wykradzione dane zostają przeniesione na inną kartę (tak, istnieje możliwość legalnego nabycia pustych kart – zarówno magnetycznych jak i kart z chipem), mamy do czynienia z klonowaniem kart (ang. card cloning). Innymi słowy, tworzony jest fizyczny duplikat karty ze wszystkimi danymi, które udało się pozyskać poprzez skimming.
O ile proceder klonowania kart płatniczych/kredytowych był zjawiskiem nagminnym w erze kart magnetycznych (kiedy bez większego problemu można było odczytać wszystkie niezbędne dane z paska magnetycznego), to w czasach kart chipowych raczej się nie zdarza ze względu na istniejące zabezpieczenia.
Co prawda teoretycznie istnieje możliwość skopiowana pewnych informacji z wbudowanego w kartę układu scalonego (chipa) i wgrania ich na pustą kartę, ale będą to informacje niekompletne i w większości przypadków nie wystarczą do przeprowadzenia udanej transakcji.
No dobrze, ale czy to znaczy, że kopiowanie kart nie ma w ogóle racji bytu w dzisiejszych czasach? No, niekoniecznie. Pamiętajmy, że karty z paskiem magnetycznym wciąż są używane. Na przykład karty podarunkowe, karty programów lojalnościowych czy też karty dostępu – ich dane również mogą zostać wykradzione i skopiowane.
Adversarial artificial intelligence (AI)
Trudno jest ten termin przetłumaczyć na język polski, ale w dosłownym przekładzie jest to antagonistyczna sztuczna inteligencja :). Chociaż precyzyjniejszym terminem jest adversarial machine learning, czyli dziedzina badań skupiona zarówno na atakach na algorytmy uczenia maszynowego, jak i na metodach obrony.
Podobnie jak w przypadku większości technologii, które stopniowo wchodzą do powszechnego użycia, także w obszarze sztucznej inteligencji najpierw skupiono się na skutecznym rozwiązywaniu problemów, a dopiero później zainteresowano się kwestią bezpieczeństwa.
Kiedy okazało się, że algorytmy sztucznej inteligencji można hackować (mogą zostać oszukane lub wykorzystane w inny złośliwy sposób), zaczęto poważniej podchodzić do kwestii bezpieczeństwa w tej dziedzinie.
Security of machine learning algorithms
Czym jest uczenie maszynowe?
Na początek kilka słów o tym czym jest uczenie maszynowe (ang. machine learning). Jest to obszar sztucznej inteligencji (AI = artificial intelligence) zajmujący się algorytmami, które same się poprawiają na podstawie nowych doświadczeń (danych, które przetwarzają), czyli innymi słowy: same się uczą. Cały myk polega na tym, że te algorytmy są w stanie znajdować wzorce (poznane podczas procesu uczenia) w danych, które są dla nich nowe. Najpierw karmimy taki algorytm danymi uczącymi (ang. training data), pokazując jak wyglądają określone wzorce, a następnie ten sam algorytm jest w stanie je rozpoznać w zupełnie nowym zestawie danych (ang. test data).
Przykładowo, komputer jest w stanie nauczyć się rozpoznawać odręczne pismo, pomimo tego, że każdy człowiek ma inny charakter pisma. Na początku odpowiedni algorytm analizuje odpowiednio dużą liczbę próbek odręcznego pisma, ucząc się jak mniej więcej wygląda każda litera. Kiedy proces trenowania dobiegnie końca, algorytm powinien być w stanie rozpoznać odręczny tekst, nawet jeśli wcześniej nie miał styczności z danym charakterem pisma.
Być może brzmi to trochę jak czarna magia, ale w gruncie rzeczy wspomniane algorytmy uczenia maszynowego polegają na budowaniu odpowiedniego modelu matematycznego, który ma pod spodem bardzo wiele parametrów liczbowych (przeważnie jest ich tyle, że człowiek nie jest w stanie ich sam dobrze ustawić). W wyniku procesu uczenia/trenowania (ang. training) te parametry są automatycznie ustawiane i modyfikowane w taki sposób, żeby później odpowiednie przetworzyć nowe dane (ang. test data) i dać na wyjściu prawidłową odpowiedź. Oczywiście jest to bardzo duże uproszczenie, ponieważ istnieje bardzo wiele algorytmów uczenia maszynowego, które różnią się wieloma aspektami, ale generalnie na tym to polega.
Uczenie maszynowe jest obecnie wykorzystywane w wielu obszarach naszego życia i liczba zastosowań ciągle rośnie: wspomniane wyżej rozpoznawanie pisma; rozpoznawanie twarzy; autonomiczne samochody; filtry antyspamowe; inteligentne systemy wykrywania i prewencji włamań IDS/IPS; spersonalizowane reklamy, a ostatnio nawet przez cholernego fiskusa: Francuski urząd skarbowy namierza nieopodatkowane baseny satelitą oraz sztuczną inteligencją. Pierwszy eksperyment wykrył > 20 000 basenów ;). Sztuczna inteligencja może być również wykorzystana do wspomagania specjalistów z zakresu cyberbezpieczeństwa, o czym przekonuje nas firma Check Point Software Technologies w swojej prezentacji Artificial Intelligence: a Silver Bullet in Cyber Security? CPX 360 Keynote.
Tainted training data for machine learning (ML)
Wiemy już na czym generalnie polega uczenie maszynowe. Dla przypomnienia: na wejściu algorytmu uczenia maszynowego podajemy dane uczące/treningowe (ang. training data), na podstawie których budowany jest odpowiedni model matematyczny, który z kolei jest w stanie dać prawidłowy wynik (w większości przypadków) analizując nowe zestawy danych (ang. test data).
A co jeśli dane uczące będą w jakiś sposób zepsute/skażone (ang. tainted)? Odpowiedź jest zaskakująco prosta: model matematyczny zbudowany na podstawie tych danych również będzie zepsuty. Pamiętajmy, że komputer w przeciwieństwie do człowieka nie posiada intuicji i będzie zachowywał się dokładnie tak jak go nauczymy, bez kwestionowania danych uczących, więc skuteczność działania algorytmów zależy przede wszystkich od jakości tych danych.
Nawet pomijając złośliwe intencje, przygotowanie odpowiednich danych treningowych jest nie lada wyzwaniem, dlatego istnieje niemała grupa ludzi, których zawód polega na zbieraniu, analizie i obróbce tych danych. To w jaki sposób zostanie przeprowadzony ten proces, determinuje później skuteczność trenowanego modelu. Dodatkowo, większość technik uczenia maszynowego jest dostosowana do rozwiązywania konkretnego problemu, przez co tworzy się pewne założenia dotyczące danych wejściowych, które mają usprawnić pracę danego algorytmu. Niestety, takie założenia mogą być niebezpieczne, szczególnie jeśli dane mogą pochodzić z różnych źródeł, których nie jesteśmy w stanie kontrolować.
Niektórzy mogą chcieć specjalne użyć błędnych/złośliwych danych, żeby zepsuć działanie algorytmu. Dobrym przykładem obrazującym problem może być dawny eksperyment Microsoftu, czyli chatbot Tay, który miał wchodzić w interakcje z internautami jednocześnie ucząc się zachowywać jak człowiek. Jednak po tym jak trafił na użytkowników o specyficznym poczuciu humoru, Tay stał się delikatnie mówiąc niezbyt poprawny politycznie ;).
Ciekawym przypadkiem, o którym warto wspomnieć są algorytmy rozpoznawania obrazów (computer vision), w których można zostawić swojego rodzaju backdoora, jeśli odpowiednio zmodyfikujemy dane uczące. Przykładowo, jeśli chcemy, żeby klasyfikator rozpoznawał psy na zdjęciach, to podczas procesu trenowania musimy podawać na wejściu obrazy z psami, które są podpisane etykietą PIES. Gdybyśmy jednak chcieli trochę oszukać klasyfikator, to moglibyśmy przygotować inny zestaw uczący zawierający np. jakąś niepozorną grafikę, która się powtarza na każdym zdjęciu (nie musi być nawet widoczna dla ludzkiego oka) i wszystkie obrazy z tą grafiką oznaczyć jako KOT. Może się wtedy okazać, że tak wytrenowany klasyfikator kiedy dostanie na wejściu obraz z psem, ale zawierający gdzieś wspomnianą grafikę, oznaczy obiekt na zdjęciu jako KOT. Oczywiście opisany tutaj sposób nie ogranicza się tylko do rozpoznawania obrazów.
Kiedy wiemy już jak ważne są prawidłowe dane uczące, powinniśmy dbać o ich bezpieczeństwo. Jeśli algorytm jest karmiony danymi, których sami nie przygotowaliśmy (np. od zewnętrznych użytkowników), musimy je odpowiednio filtrować zanim zostaną wykorzystane do uczenia modelu. Dobrą praktyką jest też ponowne wytrenowanie modelu (od zera) za pomocą świeżych informacji, żeby mieć pewność, że korzystamy z aktualnych i rzetelnych danych uczących.
Ostatnią rzeczą, o której warto wspomnieć w tej sekcji jest to, że nie tylko dane mogą być nieprawidłowe. Dzisiaj bardzo często buduje się modele uczenia maszynowego na bazie innych, wstępnie wytrenowanych modelach. Pozwala to oszczędzić mnóstwo czasu, szczególnie jeśli model wymaga dużej ilości danych treningowych. A co jeśli trafimy na model, który jest już w pewien sposób zatruty? Wtedy nasz model również będzie miał mankamenty, dlatego powinniśmy też zwracać uwagę na źródło, z którego pobieramy wstępnie wytrenowane modele.
Popularne rodzaje ataków
Aktualnie nie ma standaryzowanej klasyfikacji ataków na AI, ponieważ ta dziedzina stale ulega dynamicznym zmianom, ale przyjrzyjmy się najpopularniejszym strategiom.
Trzeba tutaj również zaznaczyć, że omówione poniżej metody ataków nie są już tak łatwe do przeprowadzenia, ponieważ techniki uczenia maszynowego cały czas się rozwijają. Duże firmy technologiczne udostępniają narzędzia oraz dokumenty, które pomagają ewaluować i zwiększać bezpieczeństwo modeli uczenia maszynowego.
Data poisoning attack
Polega na zatruwaniu danych uczących w taki sposób, żeby algorytm podejmował decyzje na podstawie błędnych założeń. Pamiętajmy, że komputer w przeciwieństwie do człowieka nie będzie kwestionował danych uczących. Przykładem może być inteligentny system IDS (Intrusion Detection System), który cały czas się uczy poprzez analizę ruchu w sieci – w tym przypadku atakujący może specjalnie podrzucać spreparowane próbki pakietów, żeby system uczył się na zatrutych danych.
Zapewne zauważyłeś(-aś), że jest to mechanizm bardzo podobny do tego opisanego powyżej. Trzeba jednak rozróżnić intencje: zatruwanie danych (ang. data poisoning) jest umyślnym działaniem, którego celem jest przeprowadzenie ataku na algorytm uczenia maszynowego. Jeśli zaś chodzi o obszar adversarial AI to celem badań wcale nie musi być atak, ale próba znalezienia niedoskonałości modeli uczenia maszynowego.
Byzantine attack
Dotyczy algorytmów uczenia maszynowego, które skalują się w środowisku rozproszonym (obliczenia są wykonywane na wielu komputerach) i atak swoją nazwę wziął od tzw. problemu bizantyjskich generałów.
Generalnie chodzi o to, że proces uczenia może odbywać się na wielu komputerach, ale wyniki są później wysyłane do jednostki centralnej, która koordynuje cały proces. Kiedy jeden lub więcej krańcowych węzłów zostanie zmuszonych do wysyłania nieprawidłowych/zatrutych wyników, jednostka centralna również zostanie zatruta.
Evasion attack
W dosłownym tłumaczeniu polega na unikaniu (ang. evasion) wykrycia. Dotyczy przeważnie ataków na systemy wykrywania włamań IDS/IPS; filtrów antyspamowych czy antywirusów, ale może również odnosić się do klasyfikatorów wykorzystywanych w rozpoznawaniu obrazów.
W przypadku filtrów antyspamowych, atak może polegać na tym, że niechcianą wiadomość spreparujemy w taki sposób, że filtr uzna ją za prawidłową. Jeśli chodzi o rozpoznawanie obrazów, to możemy tak spreparować grafikę, że klasyfikator zgłupieje i błędnie sklasyfikuje widoczny na zdjęciu obiekt.
Głośnym przypadkiem była wpadka algorytmu Facebooka, który uznał widocznych na zdjęciu ludzi jako naczelne (ang. primates). Akurat w tym przypadku zawiniła niedoskonałość rozwiązania, ale nietrudno sobie wyobrazić różne możliwości wykorzystania takich niedoskonałości. Ten typ ataku można podzielić jeszcze na 2 podgrupy:
- Black box attacks – atakujący nie zna parametrów modelu ani specyfikacji wykorzystanego algorytmu (jest dla niego czarną skrzynką) – musi więc znaleźć sposób wykorzystania podatności metodą prób i błędów.
- White box attacks – atakujący zna dokładną specyfikację wykorzystanego modelu i algorytmu, więc może na podstawie tych informacji opracować sposób na precyzyjny atak.
Model extraction
Kradzież wytrenowanego modelu, który przeważnie jest cennym zasobem firmy. Nawet jeśli przejęcie całego modelu zapisanego na dysku jest niewykonalne, istnieje możliwość jego odtworzenia poprzez odpowiednie odpytywanie.
Przy wysłaniu dużej ilości zapytań do modelu, istnieje możliwość nauczenia swojego modelu na podstawie uzyskanych odpowiedzi. Może nie będzie idealną kopią, ale jest duża szansa, że będzie zachowywał się podobnie jak oryginał. Dlatego bardzo wartościowe modele należy chronić, szczególnie kiedy są one udostępnione publicznie – warto wtedy ograniczyć do nich dostęp (np. zezwalać na to tylko zarejestrowanym i sprawdzonym użytkownikom).
Innym zagrożeniem jest możliwość wyciągania danych wrażliwych z modelu. Okazuje się bowiem, że pod pewnymi warunkami można odtworzyć do pewnego stopnia dane użyte do trenowania określonego modelu. Może to być problematyczne, szczególnie jeśli do procesu uczenia wykorzystano prywatne dane zawierające poufne informacje (np. dane osobowe). Więcej na temat tego zagadnienia można przeczytać w tych publikacjach:
Na koniec warto jeszcze wspomnieć o tym, że dane wrażliwe wcale nie muszą być wydobywane z modeli. Bardzo często można spotkać w Internecie udostępnione publicznie zbiory danych, które powinny być anonimowe i w zasadzie w większości takie są. Istnieją jednak ludzie z takimi zdolnościami wywiadowczymi, że nie powstydziłby się ich nawet MI6 :). Oto przykłady:
- Public NYC Taxicab Database Lets You See How Celebrities Tip – na podstawie ogólnodostępnych danych dotyczących taksówek jeżdżących po Nowym Jorku i połączeniu ich ze zdjęciami celebrytów w taksówkach, można było ustalić trasy przejazdów tychże celebrytów.
- Kiedyś Netflix zorganizował pewien konkurs i udostępnił anonimowe dane zawierające m.in. oceny filmów. Tak się jednak złożyło, że przeważnie użytkownicy Netfliksa bardzo często wystawiali podobne oceny w tym samym czasie, zarówno w serwisie streamingowym, jak i na IMDB. Dzięki temu można było powiązać dane od Netfliksa z danymi użytkowników zarejestrowanych w serwisie IMDB.
Supply-chain attacks
Łańcuch dostaw (ang. supply chain) to cały proces jaki przechodzi produkt od początku swojego istnienia, aż do dostarczenia go końcowemu odbiorcy. Ogniwami tego łańcucha są m.in. podstawowe materiały, z których zbudowany jest dany produkt; dostawcy; wykonawcy; dystrybutorzy; a także klienci i końcowi odbiorcy. Przy tak wielu elementach, które muszą ze sobą współpracować, istnieje ryzyko ataku na jeden z nich, co może później wpływać na kolejne elementy wzdłuż tego łańcucha.
Przykład takiego łańcucha:
Atak na łańcuch dostaw (ang. supply chain attack) polega na celowym zaszkodzeniu danej organizacji poprzez znalezienie najsłabszego ogniwa (najmniej bezpiecznego) w całym łańcuchu, którego elementem jest dana organizacja. Dotyczy to zarówno sprzętu jak i oprogramowania.
Tego typu ataki są szczególne niebezpiecznie, ponieważ bardzo często nie zastanawiamy się (zwłaszcza jako końcowi odbiorcy) jak przebiegał cały proces tworzenia i dostarczania produktu, który właśnie trzymamy w rękach. Jako przykład weźmy router wi-fi: producent zamówił sprzęt u jednego dostawcy (ang. vendor), a oprogramowanie u innego. Dostawca oprogramowania, tworząc zamówiony soft, znalazł innego podwykonawcę, który okazał się być nierzetelny i umieścił backdoora w jednym z modułów. Jeśli nikt by nie wykrył tej nieprawidłowości, to przeszłaby przez cały łańcuch, a klient końcowy skończyłby z routerem zawierającym backdoora w swoim oprogramowaniu.
Organizacje muszą być szczególnie wyczulone na takie ataki i stosować zasadę ograniczonego zaufania. Dlatego firmy często trzymają się swoich sprawdzonych dostawców, dla których zostały przeprowadzone odpowiednie audyty bezpieczeństwa – dotyczy to sprzętu, oprogramowania oraz usług. Wiem z autopsji, że programistów często irytuje fakt, że polityka firmy zabrania im korzystania z nowych bibliotek programistycznych, które pomogłoby błyskawicznie uporać się z danym problemem, ale nie przeszły odpowiedniego audytu bezpieczeństwa. Jak się okazuje, ma to swój cel.
Działania, które mogą znacząco ograniczyć skutki tego typu ataków:
- Stosuj zasadę możliwie najmniejszych uprawnień (ang. least privilege) – podczas nadawania dostępu pracownikom, partnerom czy aplikacjom pamiętajmy, żeby dawać tylko takie uprawnienia jakie są rzeczywiście potrzebne i nic ponad to.
- Stosuj segmentację sieci (ang. network segmentation) – zewnętrzne oprogramowanie czy też partnerzy przeważnie nie muszą mieć dostępu do całej naszej sieci. Odseparuj część sieci, z której będą mogli korzystać – w razie uzyskania nieautoryzowanego dostępu, atakujący nie dostanie się do naszych głównych zasobów.
- Ogranicz liczbę swoich dostawców, żeby lepiej kontrolować procesy dostarczania przez nich usług i/lub produktów.
- Stosuj dobre praktyki zwiększające bezpieczeństwo już na etapie projektowania i wytwarzania produktów (oprogramowania, sprzętu) – testowanie ma jedynie potwierdzić, że proces działa jak należy, a nie dopiero identyfikować zagrożenia.
Przykłady ataków
Atak na amerykańską firmę Target Corporation, który doprowadził do masowej kradzieży danych kart kredytowych i płatniczych w 2013 roku – szacuje się, że dane około 40 milionów klientów zostały skompromitowane.
Przypuszcza się, że sam atak rozpoczął się w innej firmie zajmującej się systemami HVAC (Heating, Ventilation, Air Conditioning), która świadczyła usługi dla firmy Target i często robiła to zdalnie za pośrednictwem dedykowanej sieci VPN (Virtual Private Network). Jednakże dane dostępowe do sieci VPN zostały wykradzione i wykorzystane później do kradzieży numerów kart kredytowych z baz danych firmy Target, która niestety nie zadbała o odpowiednie ograniczenia dla osób korzystających z sieci VPN.
Wyciek danych z instytucji rządu federalnego Stanów Zjednoczonych w 2020 roku – atak, który dotknął przynajmniej 200 organizacji na całym świecie i trwał od 8 do 9 miesięcy – pierwszy publiczny raport pojawił się 13 grudnia 2020 roku. Doprowadził do serii wycieków danych z wielu rządowych instytucji na całym świecie (nie tylko amerykańskich) i podejrzewa się, że za atakiem stał rząd rosyjski. Atak na wspomniane instytucje był możliwy, ponieważ pierwszym krokiem było zidentyfikowanie podatności w oprogramowaniu, z którego korzystały te instytucje. Podatności (ang. vulnerabilities) zostały znalezione w produktach przynajmniej 3 dużych producentów oprogramowania: Microsoft, SolarWinds oraz VMware.
Dlaczego uważa się to za supply-chain attack:
- Przynajmniej jeden z partnerów Microsoft, który świadczył usługi chmurowe zaatakowanym instytucjom, sam został najpierw skompromitowany. Z tego powodu atakujący mieli dostęp do usług wdrożonych przez tego partnera swoim klientom.
- Atakujący uzyskali nieautoryzowany dostęp do środowiska, w którym budowane było oprogramowanie firmy SolarWinds (ang. build environment). Umożliwiło to zmodyfikowanie automatycznych aktualizacji oprogramowania firmy. Wszyscy klienci, którzy otrzymali złośliwe aktualizacje stali się automatycznie podatni na ataki.
Oczywiście przykładów takich ataków można znaleźć znacznie więcej:
Cloud-based vs. on-premises attacks
Pełne opracowanie tego zagadnienia można znaleźć w osobnym artykule: Zosia Samosia z głową w chmurach (on-premises vs. cloud).
Cryptographic attacks
Collision
Najpierw przypomnijmy sobie czym jest skrót (ang. hash). Jest to nieuporządkowany ciąg znaków o stałej długości, wygenerowany za pomocą specjalnej funkcji matematycznej (tzw. funkcji skrótu/haszującej) na podstawie wejściowego ciągu znaków.
Charakteryzuje się tym, że odzyskanie danych wejściowych na jego podstawie jest praktycznie niemożliwe (w przeciwieństwie do tekstu zaszyfrowanego kluczem) oraz tym, że jest unikalny dla różnych danych wejściowych (dwa różne hasła nie mogą wygenerować identycznego skrótu, przynajmniej w założeniu).
Kolizja (ang. collision) występuje wtedy gdy funkcja skrótu wygeneruje identyczny hash dla dwóch różnych danych wejściowych. Jest to zjawisko wysoce niepożądane biorąc pod uwagę szerokie zastosowanie skrótów w bezpiecznym przechowywaniu haseł użytkowników bądź w generowaniu unikalnych podpisów cyfrowych. Nie chcemy przecież, żeby doszło do sytuacji, w której możemy zalogować się na konto użytkownika za pomocą dwóch różnych haseł lub dwie różne osoby wygenerowały identyczny podpis elektroniczny.
Teoretycznie zjawisko kolizji jest nieuniknione, ponieważ z jednej strony mamy nieograniczony zbiór danych wejściowych, a z drugiej ograniczony zakres danych wyjściowych (generowane hashe są stałej długości). Między innymi z tego względu nie powinno się już używać algorytmu MD5, który generuje 128-bitowy skróty (ta długość jest stosunkowo ława do złamania przy mocy obliczeniowej dostępnej dzisiaj). Jednakże przy wystarczająco długich skrótach ryzyko znalezienia kolizji jest na tyle małe, że możemy uznać je za wystarczająco bezpieczne. Popularnym dzisiaj wyborem jest algorytm SHA-256 (256-bitowy skrót), ale znajdziemy też funkcje, które generują jeszcze dłuższe skróty.
Pamiętajmy jednak, że o jakości algorytmu kryptograficznego nie świadczy jedynie długość wygenerowanego skrótu, ale też jego nieodwracalność. Znalezienie wzorca, który pozwala na odtworzenie danych wejściowych na podstawie wyjścia powinno być niemożliwe metodą inną niż brute-force, która zajęłaby setki lat obliczeń.
Birthday
Atak urodzinowy (ang. birthday attack) to rodzaj ataku siłowego, którego podstawą jest zagadnienie ściśle związane z rachunkiem prawdopodobieństwa, czyli tzw. paradoks dnia urodzin (ang. birthday problem). Polega na znalezieniu dowolnej kolizji (dwóch identycznych skrótów) w wynikach dowolnej funkcji haszującej. Wspomniany paradoks pozwala oszacować szanse powodzenia ataku siłowego i jak się zaraz przekonamy, prawdopodobieństwo sukcesu może okazać się zdumiewająco wysokie przy określonej liczbie prób.
Wyobraź sobie, że w klasie przebywa aktualnie 23 uczniów. Jaka jest szansa na to, że dwóch dowolnie wybranych uczniów ma urodziny tego samego dnia? Odpowiedź jest zaskakująca: około 50%! W przypadku 30 uczniów, prawdopodobieństwo wzrasta do około 70%.
Jest to spowodowane głównie tym, że bierzemy pod uwagę dwóch DOWOLNYCH uczniów zamiast szukać pary dla jednego, wybranego ucznia. Jeśli jesteś zainteresowany(-a) matematycznym wyjaśnieniem tej zagadki, to zachęcam do obejrzenia nagrania poniżej:
Nie chcę teraz bawić się w wyprowadzanie wzorów, ale gdybyśmy zastosowali tę formułę do obliczenia prawdopodobieństwa znalezienia kolizji, to okazałoby się, że wystarczy sprawdzić około 2n/2 skrótów (gdzie n
to długość hasha), żeby szansa na wystąpienie powtórzenia wynosiła w przybliżeniu 50%.
Dla algorytmu MD5, który generuje skróty 128-bitowe (maksymalnie 2128 różnych hashy), 50% prawdopodobieństwa trafienia na kolizję uzyskujemy już przy sprawdzeniu około 264 skrótów, co oczywiście jest w zasięgu dostępnej dzisiaj mocy obliczeniowej.
Przy okazji należy zaznaczyć, że akurat MD5 został już rozpracowany przez badaczy i w określonych okolicznościach można dla niego znaleźć kolizje jeszcze szybciej: Fast Collision Attack on MD.
Downgrade
Ataki typu downgrade, znane również pod nazwami bidding-down attack oraz version rollback attack, są wycelowane w połączenia między dwoma punktami (ang. endpoints) sieci.
Polegają na zmuszeniu systemu komputerowego bądź protokołu komunikacyjnego do przejścia na gorszą/mniej bezpieczną formę komunikacji, zwiększając tym samym szansę na odczytanie przesyłanych danych przez atakującego.
W większości przypadków, kiedy nawiązywane jest połączenie między dwoma punktami sieci, strony starają się ustalić najlepszy i najbezpieczniejszy sposób komunikacji, który jest akceptowalny dla obu stron. Dokładny przebieg procesu zależy już od samego protokołu komunikacji.
Może się jednak zdarzyć, że jedna ze stron nie będzie w stanie komunikować się z użyciem nowszej wersji protokołu, np. ze względu na starszą wersję oprogramowania, która tej wersji nie obsługuje. W takiej sytuacji mamy 2 wyjścia: albo całkowicie uniemożliwić nawiązanie połączenia, albo nawiązać połączenie używając starszej wersji, która jest akceptowalna dla każdej ze stron.
Minusem wstecznej kompatybilności (ang. backward compatibility), szczególnie z perspektywy bezpieczeństwa, jest fakt, że w wielu przypadkach (choć nie w każdym) starsza wersja ma jakieś znane podatności (ang. vulnerabilities), które zwiększają szanse atakującego na przejęcie i podsłuchanie takiej komunikacji. Jak już się zapewne domyślasz, sam atak polega na wymuszeniu użycia starszej i mniej bezpiecznej wersji protokołu, nawet jeśli dwie strony są kompatybilne z nowszą wersją.
Prostym przykładem może być wymuszenie użycia protokołu HTTP (dane są przesyłane jawnym tekstem) zamiast zaszyfrowanej komunikacji HTTPS. Znakomita większość serwisów webowych (witryny internetowe oraz serwery Web API) używa dzisiaj protokołu HTTPS. Jednak wiele z nich zezwala klientom (głównie przeglądarkom internetowym) na nawiązanie połączenia za pośrednictwem prostego i nieszyfrowanego połączenia HTTP. W takim przypadku następuje przekierowanie na komunikację HTTPS i jeśli wszystko działa prawidłowo, przeglądarka automatycznie przeskakuje na szyfrowany protokół.
To podejście może jednak kiepsko się skończyć, jeśli atakujący przejmie w sposób niezauważony żądania HTTP (ang. requests) klienta, a sam będzie wysyłał żądania HTTPS do serwera. Jest to rodzaj ataku on-path (dawniej man-in-the-middle) i jeśli jest przeprowadzony skutecznie, to ani serwer, ani klient mogą nie zauważyć, że ktoś wciął się w kabel i podsłuchuje komunikację. Na szczęście nowoczesne przeglądarki ostrzegają swoich użytkowników, jeśli komunikacja z serwerem docelowym nie jest szyfrowana.
Tego typu atak można teoretycznie uznać jako downgrade attack, chociaż bardziej precyzyjnym określeniem jest SSL stripping i trochę więcej powiemy o nim sobie przy okazji omawiania kolejnego rozdziału z rozpiski egzaminacyjnej (1.3).
Flagowym przykładem, który nie wzbudza już żadnych wątpliwości, jest wymuszenie starszej wersji szyfrowania w ramach komunikacji HTTPS.
Ważna uwaga: na egzaminie najprawdopodobniej właśnie to będzie prawidłową ilustracją ataku typu downgrade, w przeciwieństwie do powyższego przykładu, który może mieć inną klasyfikację (SSL stripping i/lub on-path).
Na początek jednak kilka kwestii technicznych. Połączenie za pośrednictwem protokołu HTTPS (Hypertext Transfer Protocol Secure) jest szyfrowane z użyciem innego protokołu SSL/TLS, który operuje na trochę niższym poziomie warstwy aplikacji modelu OSI. Innymi słowy, HTTP jest protokołem warstwy aplikacji, a SSL/TLS działa troszkę niżej, ale ciągle w tej samej warstwie.
Należy tutaj również zaznaczyć, że HTTPS nie jest osobnym protokołem, ale rozszerzeniem protokołu HTTP, które używa zaszyfrowanego połączenia do komunikacji. Dlatego możemy spotkać się z takimi określeniami jak HTTP over TLS lub HTTP over SSL.
SSL (Secure Socket Layer) ewoluował z czasem w TLS (Transport Layer Security), więc SSL to po prostu starsza (i mniej bezpieczna) wersja protokołu TLS.
Bardzo często można spotkać się z używaniem tych nazw zamiennie, ale pamiętajmy, że kolejne wydania protokołu wyglądały następująco:
- SSL 1.0 (nigdy nie opublikowany).
- SSL 2.0 (1995).
- SSL 3.0 (1996).
- TLS 1.0 (1999).
- TLS 1.1 (2006).
- TLS 1.2 (2008).
- TLS 1.3 (2018).
Aktualnie zalecanymi do użytkowania są TLS 1.2 oraz TLS 1.3.
Typowy atak downgrade polega więc na wymuszeniu użycia starszej i zdecydowanie mniej bezpiecznej wersji protokołu, która jest łatwiejsza do złamania (np. SSL 3.0), zamiast nowszych wersji TLS, podczas nawiązywania połączenia HTTPS. Zazwyczaj dzieje się to za sprawą atakującego, który siedzi pośrodku konwersacji (on-path).
W 2014 roku opublikowano informację o poważnej luce POODLE, która pozwalała na stosunkowo łatwe złamanie zaszyfrowanej komunikacji, jeśli udało się zdegradować wersję protokołu szyfrującego do SSL 3.0.