Laboratorium: drzewa ataków

Zabezpieczanie systemów (nie tylko) komputerowych jest bardzo skomplikowane już choćby przez to, że dotyczy przedmiotu o bardzo wielu własnościach i cechach. W zasadzie - jeśli nie niemożliwe - to w każdym razie jest to zadanie, którego wykonanie nie jest osiągalne przy dostępnych typowo zasobach. Jednak zawsze można być bliżej lub dalej od ideału, stąd ważne są techniki, które przybliżają nas do jego osiągnięcia.

Typowo, gdy zadanie jest zbyt skomplikowane, aby je rozwiązać bezpośrednio, stosuje się jakiś rodzaj formy, która pomaga w zarządzaniu jego złożonością. Wtedy jeśli nie jest możliwe ogarnięcie całości problemu, to dysponujemy dokumentacją tego, którą część problemu mamy opanowaną i obsłużoną. W bezpieczeństwie systemów przyjętym sposobem na zarządzanie zagrożeniami są drzewa ataków (zwane też drzewami zagrożeń). Łatwo skojarzyć, że stanowią one praktyczne zastosowanie zasady "dziel i rządź" (z.t.j. "dziel i zwyciężaj").

Konstruowanie dobrych drzew ataków jest działaniem wielowątkowym i wymaga wielokrotnego przejrzenia do tej pory opracowanego drzewa. Każde jednak przejście, aby miało walor podejścia systematycznego, wymaga jasno określonego celu. Taki cel też jest potrzebny na pierwszym etapie, kiedy tworzymy pierwotną wersję systemu. Typowo pierwszym celem jest określenie najsłabszego ogniwa w naszym systemie zabezpieczeń - jeśli nasz system jest używany przez dużą liczbę osób, to prędzej czy później masa tej populacji wykryje to słabe ogniwo. Dlatego często możemy się spotkać z pewnym upraszczającym sloganem: System jest tak bezpieczny jak najsłabsze ogniwo jego zabezpieczeń. Wzmacniając najsłabsze ogniwo w najbardziej racjonalny sposób wzmacniamy bezpieczeństwo całego rozwiązania. W pierwszym podejściu będziemy zatem poszukiwali najsłabszego ogniwa.

Spróbujmy skonstruować drzewo ataku dla nieuprawnionego dostania się do samochodu. Pierwszy krok, jaki należy wykonać, to stworzyć sobie ogólny model zagrożenia. Musimy tutaj odpowiedzieć sobie na następujące pytania:

  1. Jakie wartości chcemy chronić przed naszym atakiem?
  2. Co tym wartościom zagraża:
    1. jakiego rodzaju niebezpieczeństwa?
    2. jakiego rodzaju atakujący?

Warto zwrócić uwagę na rozróżnienie między niebezpieczeństwami pojmowanymi tutaj jako obiektywne zagrożenia dla bezpieczeństwa wyróżnionych wartości, które są niezależne od woli i nastawienia ludzi na wyrządzenie szkody chronionym wartościom, od ataków, które zakładają ludzką wolę i pewną umyślność w niszczeniu chronionych wartości. Ta druga kategoria przy bezpośrednim rozumieniu określenia "niebezpieczeństwa" może być postrzegana jako szczególny przypadek kategorii 2.a, ale podkreślmy to jeszcze raz: dla nas 2.a oznacza brak umyślnego działania, zaś 2.b oznacza jego obecność.

Jak zatem będą te punkty wyglądały dla nieuprawnionego dostania się do samochodu?

Chronione wartości:

  • zewnętrzna struktura samochodu (karoseria, szyby, opony itp.),
  • wnętrze samochodu na stałe przytwierdzone do jego struktury (tapicerka, kokpit, kierownica, podłogi, radio itp.),
  • przedmioty ruchome w środku samochodu (zawartość schowków, dywaniki, foteliki dla dzieci itp.),
  • samochód jako funkcjonalna całość (możliwość korzystania z niego do dojazdów, możliwość ogrzania się itp).

Zagrożenia:

  1. Niebezpieczeństwa
    1. zniszczenie w wyniku katastrofy naturalnej (upadek gałęzi drzewa, upadek elementu budowli, upadek skały, zalanie lawą itp.)
    2. zniszczenie w wyniku wypadku (najechanie przez inny pojazd, zrzucenie przedmiotu z wysokości na samochód itp.)
  2. Atakujący
    1. dysponują powszechnie dostępnymi metodami i sprzętem (np. śrubokręty, młotki, cegły, kamienie itp.),
    2. dysponują specjalistycznym sprzętem i odpowiednim przeszkoleniem do jego używania, które wymagają znaczących inwestycji, ale są dostępne na rynku (np. sprzęt ślusarski, oprogramowanie komputera samochodowego, znajomością budowy samochodu itp.),
    3. dysponują specjalistycznym sprzętem i odpowiednim przeszkoleniem, które wymagają znaczących inwestycji, ale nie są dostępne na rynku i wymagają wypracowania tego sprzętu i umiejętności przez samych atakujących (np. skanery nadajników GPS, skanery pluskiew podsłuchowych, skanery elektroniki itp.).

We wszystkich tych kategoriach atakujących możemy założyć, że wykonali oni lub nie wykonali pracy operacyjnej, polegającej na obserwacji właściciela pojazdu przez pewien czas. Możemy też założyć, że atakujący mają odpowiednie doświadczenie we wdzieraniu się do samochodów albo też go nie mają. Kolejna własność, jaka może się tutaj pojawiać, to czas dostępny na dostanie się do środka - w każdej z tych kategorii włamywacz może mieć dużo czasu na samą czynność lub też mieć tego czasu niewiele i operować pod presją.

Zauważmy, że własności podane pod punktami powyżej mogą zostać zaaplikowane do każdego z punktów 2.a, 2.b, 2.c, tworząc szeroką paletę modeli atakującego.

Następny krok to konstrukcja samego drzewa. Warto zauważyć, że namysł nad chronionymi wartościami pozwala nam zauważyć, iż w istocie należałoby skonstruować kilka drzew ataków (być może dosyć podobnych do siebie), aby uzyskać klarowniejszą analizę zagrożeń i lepsze rozeznanie w tym, jakie środki służą zabezpieczaniu których wartości. Tutaj, z braku zasobów, skupimy się na analizie zagregowanej wartości związanej z samochodem.

Korzeniem drzewa ataku, które chcemy przedstawić, będzie zatem cel polegający na zdegradowaniu wartości samochodu dla właściciela. Zdegradowanie wartości samochodu może się odbyć na kilka sposobów:

  • upadek konaru drzewa na samochód,
  • otarcie się o samochód innego samochodu na parkingu,
  • zarysowanie karoserii ostrym przedmiotem,
  • zdegradowanie wartości przez dostanie się do wnętrza przez wrogiej osoby.

W tym momencie każdy z tak wyodrębnionych sposobów degradowania wartości staje się częściową przyczyną i trafia do wierzchołka drzewa będącego dzieckiem korzenia. Z kolei dzieci każdego z tych nowych wierzchołków będą opisywały sposoby osiągnięcia odpowiedniego celu częściowego. Możemy teraz zapisać większy fragment takiego drzewa.

. (OR) Zdegradowanie wartości udostępnianych przez samochód 

1. (OR) upadek konaru drzewa na samochód
  1.1. (OR) ustawienie samochodu pod drzewem, z którego opadnie konar
    1.1.1. (OR) opadnięcie w wyniku wichury
    1.1.2. (OR) opadnięcie konaru osłabionego w wyniku choroby
2. (OR) otarcie się o samochód innego samochodu na parkingu
3. (OR) zarysowanie karoserii ostrym przedmiotem,
  3.1. (OR) zarysowanie przez osobę przypadkowo przechodzącą z ostrym
    przedmiotem obok
  3.2. (OR) zarysowanie celowo przez jakąś osobę
4. (OR) zdegradowanie wartości przez dostanie się do wnętrza przez
   wrogą osobę
  4.2. (OR) dostanie się do wnętrza przez wybicie szyby
  4.3. (OR) dostanie się do wnętrza przez sforsowanie zamka
     4.3.1. (OR) sforsowanie zamka za pomocą wytrychu
     4.3.2. (OR) sforsowanie zamka za pomocą podrobionego kluczyka
     4.3.3. (OR) sforsowanie zamka za pomocą oryginalnego kluczyka
       4.3.3.1. (OR) zdobycie kluczyka za pomocą szantażu
       4.3.3.2. (OR) zdobycie kluczyka za pomocą przekupstwa
       4.3.3.3. (AND) zdobycie kluczyka przez kradzież
         4.3.3.3.1. (OR) znalezienie się w pobliżu właściciela
         4.3.3.3.2. (OR) zaobserwowanie, gdzie trzyma kluczyk
         4.3.3.3.3. (OR) podebranie kluczyka z zaobserwowanego miejsca

Proszę zwrócić uwagę na to, że niektóre wierzchołki są oznaczone w powyższym drzewie znacznikiem (OR), a inne znacznikiem (AND). Oznaczenie to wskazuje, jak należy traktować dzieci podczas analizy. Gdy wierzchołek jest oznaczony jako (OR), wystarczy wypełnienie przyczyny u jednego dziecka, aby uznać, że przyczyna z analizowanego wierzchołka się wypełniła i zagraża analizowanej wartości. Z kolei dla wierzchołka oznaczonego (AND) uznamy go za wypełnionego, gdy wszystkie jego wierzchołki potomne zostaną wypełnione. W naszym przykładowym drzewie wierzchołek (AND) jest przypisany do przyczyny "zdobycie kluczyka przez kradzież". Jak widzimy z drzewa kradzież zostanie dokonana, gdy złodziej znajdzie się w pobliżu właściciela, zaobserwuje, gdzie ten trzyma kluczyk i podbierze go z zaobserwowanego miejsca.

Po sporządzeniu drzewa ataku można się zacząć zastanawiać nad różnymi aspektami ataku. Można zacząć od wprowadzenia adnotacji, czy dane zagrożenie uważamy za możliwe lub niemożliwe. W tym celu oznaczamy według naszego wyczucia liście drzewa literami "m" (jak możliwe) i "n" (jak niemożliwe), a następnie propagujemy tę informację w kierunku korzenia, uznając, iż wierzchołek typu (OR) jest "m" jeśli któreś z jego dzieci jest "m", zaś wierzchołek (AND) jest "m", jeśli wszystkie jego dzieci są "m".

Inne możliwe sposoby wykonania adnotacji w takim drzewie mogą polegać na rozeznaniu, czy

  • atak "wymaga specjalistycznego sprzętu", czy też "nie wymaga specjalistycznego sprzętu",
  • jaki jest koszt ataku,
  • jakie jest prawdopodobieństwo ataku (choć tego się nie zaleca, bo przyjmuje się, że szacowanie prawdopodobieństw bazowych jest tutaj obarczone zbyt dużym błędem).

Drzewa ataków zostały spopularyzowane przez Bruce Schneiera. Ich formalizm jest podobny i zapewne korzeniami tkwi w pojęciu "drzew usterek" (ang. fault trees). Główna różnica polega tutaj na dodaniu do analizy obejmującej usterki nie wynikające ze złej ludzkiej woli możliwych umyślnych wrogich działań.

Należy pamiętać, że takie drzewa z czasem ulegają zmianie. Również przeniesienie naszej wartości w inny kontekst (np. do Japonii, gdzie występują trzęsienia ziemi) może wprowadzić nowe wierzchołki do drzewa.

Materiały uzupełniające:

  1. Materiały Amenza Technologies Limited: http://www.amenaza.com/downloads/docs/AttackTreeFundamentals.pdf
  2. O narzędziach: https://buildsecurityin.us-cert.gov/articles/tools/modeling-tools/introd...
  3. Analiza pojęcia drzew ataków: http://www.sti.uniurb.it/events/fosad05/attacktrees.pdf

Kilka narzędzi korzystających z tego podejścia:

  1. ADTool: http://satoss.uni.lu/members/piotr/adtool/
  2. Ent: https://github.com/jimmythompson/ent
  3. SeaMonster: https://sourceforge.net/projects/seamonster/
  4. AttackTree: https://www.isograph.com/software/attacktree/
  5. SecurITree: http://www.amenaza.com/SS-what_is.php

Ćwiczenia na zajęciach:

  1. Dodaj do zaproponowanego w opisie zajęć drzewa kilka wierzchołków na każdym poziomie.
  2. Dodaj do opracowanego przez siebie drzewa adnotacje dla zasugerowanych powyżej analiz: możliwości wykonania ataku, konieczności użycia specjalistycznego sprzętu oraz kosztu.
  3. Przejrzyj drzewo ataku dla PGP zaproponowane przez Bruce'a Schneiera: https://www.schneier.com/paper-attacktrees-fig7.html Jak można tam przypisać etykiety możliwości i niemożliwości?