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?

Zaliczenie 2014

1. Przeczytaj uważnie specyfikację protokołu TFTP.
http://tools.ietf.org/html/rfc1350

2. Zapoznaj się z artykułami na temat startowania
systemu operacyjnego za pomocą protokołu TFTP.

a) https://www.debian.org/releases/wheezy/amd64/ch04s05.html.en
b) http://www.tldp.org/HOWTO/PA-RISC-Linux-Boot-HOWTO/bootnetwork.html
c) http://www.thegeekstuff.com/2010/07/tftpboot-server/

3. Opracuj drzewo ataku przeciwko startowaniu systemu operacyjnego za
pomocą protokołu TFTP. Zapisz je w postaci wypunktowanej listy.

Zaliczenie 2015

  1. Przeczytaj uważnie specyfikację protokołu:
    http://tools.ietf.org/html/rfc1413
  2. Obsługa laboratorium komputerowego pewnego wydziału w jednym z uniwersytetów
    z powodów lokalowych ma tak ustalone obowiązki, że administratorzy
    obsługują sieć nie w dedykowanych stanowiskach w fizycznym pobliżu
    serwerów, ale robią to ze zmiennych stanowisk rozproszonych po
    całym budynku przez nich obsługiwanym. Administratorzy postanowili
    zwiększyć swoją wygodę i użyć powyższego protokołu do szybkiego
    zdalnego identyfikowania użytkowników korzystających z głównego
    serwera. Jednocześnie nie zastosowali żadnych rozwiązań kryptograficznych
    do korzystania z tej usługi (nie użyli ani SSL, ani SSH, ani innego
    podobnego rozwiązania).
  3. Opracuj drzewo ataku przeciwko takiemu rozwiązaniu. Opisz chronione
    wartości oraz przyjmij model odpowiednio silnego atakującego, aby
    wyłapać jak najwięcej zagrożeń. Zapisz drzewo w postaci wypunktowanej listy.
    Jeśli uznasz za stosowne, możesz zapisać rozwiązanie w postaci kilku drzew lub
    drzewa o kilku korzeniach.

Zaliczenie 2016

1. Przeczytaj uważnie specyfikację protokołu POP3 w wersji podstawowej:
https://tools.ietf.org/html/rfc1939

2. Obsługa laboratorium komputerowego pewnego wydziału w jednym z
uniwersytetów postanowiła skorzystać z podstawowej wersji
protokołu POP3 do zapewniania dostarczania poczty na komputery
studentów. Jednocześnie nie zastosowali żadnych rozwiązań
kryptograficznych zabezpieczających korzystanie z tej usługi
(nie użyli ani SSL, ani SSH, ani innego podobnego rozwiązania),
można tutaj na przykład wyobrazić sobie, że z jakiegoś powodu postanowili
napisać serwer POP3 na własną rękę i zaimplementowali wyłącznie
to, co zostało zapisane w RFC 1939. Jednocześnie dla zapewnienia
wygody studentów administratorzy zdecydowali, że do uwierzytelnienia
będą stosowane te same hasła, jak do wszystkich innych usług wymagających
uwierzytelniania w tej jednostce (mają oni jakiś system podobny do
naszego centralnego systemu uwierzytelniania).

3. Opracuj drzewo ataku przeciwko takiemu rozwiązaniu. Opisz chronione
wartości oraz przyjmij model odpowiednio silnego atakującego, aby
wyłapać jak najwięcej zagrożeń. Zapisz drzewo w postaci wypunktowanej
listy. Jeśli uznasz za stosowne, możesz zapisać rozwiązanie w postaci
kilku drzew lub drzewa o kilku korzeniach.

Uwagi dotyczące rozwiązania:

1. To zadanie jest z rozmysłem źle postawione. To złe postawienie ma na celu
wybadanie w Was wrażliwości na sprawy bezpieczeństwa.

2. Dodatkowo problemy związane z analizą bepieczeństwa w prawdziwym życiu są
zawsze źle postawione.

3. W zadaniu chcemy, żeby Państwo przeprowadzili raczej analizę sytemu niż
konkretnego protokołu. Sam protokół jednak powinien przewinąć się w Waszej
analizie.

4. W zadaniu nie ma mowy o protokołach kryptograficznych, żeby mocniej zwrócić
Państwa uwagę na fakt, że bezpieczeństwo to nie tylko kryptografia.

5. Bardzo ważną rzeczą w tego typu analizie jest jej systematyczność.

6. Można sobie obejrzeć przykładowe rozwiązanie z zeszłego roku, żeby lepiej
zrozumieć, jak mają wyglądać rozwiązania. W szczególności należy zwrócić
uwagę, że rozwiązania istotnie krótsze będą uważane za istotnie gorsze.

Zaliczenie 2018

1. Przeczytaj uważnie specyfikację protokołu NAME/FINGER:
https://tools.ietf.org/html/rfc742

2. Obsługa laboratorium komputerowego pewnego wydziału w jednym z
uniwersytetów lubiła korzystać z programu Elinks. Program ten m.in.
umożliwia zdobywanie informacji na temat użytkowników komputerów za
pomocą usługi FINGER. W związku z daleko idącą wygodą korzystania z
tego narzędzia administratorzy postanowili udostępnić szeroko usługę
FINGER, aby można było z niej korzystać także poza siecią wewnętrzną
uniwersytetu.

3. Opracuj drzewo ataku przeciwko takiemu rozwiązaniu. Opisz chronione
wartości oraz przyjmij model odpowiednio silnego atakującego, aby
wyłapać jak najwięcej zagrożeń. Zapisz drzewo w postaci wypunktowanej
listy. Jeśli uznasz za stosowne, możesz zapisać rozwiązanie w postaci
kilku drzew lub drzewa o kilku korzeniach.

Uwagi dotyczące rozwiązania:

1. To zadanie jest z rozmysłem źle postawione (tzn. możliwa jest
więcej niż jedna właściwa odpowiedź). To złe postawienie ma na celu
wybadanie w Was wrażliwości na sprawy bezpieczeństwa.

2. Dodatkowo problemy związane z analizą bezpieczeństwa w prawdziwym
życiu są zawsze źle postawione.

3. W zadaniu chcemy, żeby Państwo przeprowadzili raczej analizę sytemu
i całej sytuacji niż konkretnego protokołu - analiza bezpieczeństwa to
zawsze analiza całościowa. Sam protokół jednak powinien przewinąć się
w Waszej analizie. Na przykład zrobienie całej analizy i
przedstawienie do oceny tylko tych gałęzi, które będą nawiązywały do
protokołu, będzie oceniane źle; dobrze będzie natomiast oceniane
zrobienie dogłębnej analizy z bardzo wieloma gałęziami, z których
pewne będą nawiązywały do wyżej wspomnianego protokołu.

4. W zadaniu nie ma mowy o protokołach kryptograficznych, żeby mocniej
zwrócić Państwa uwagę na fakt, że bezpieczeństwo to nie tylko
kryptografia.

5. Bardzo ważną rzeczą w tego typu analizie jest jej systematyczność.

6. Można sobie obejrzeć przykładowe rozwiązanie z zeszłych lat, żeby
lepiej zrozumieć, jak mają wyglądać rozwiązania. W szczególności
należy zwrócić uwagę, że rozwiązania istotnie krótsze będą uważane za
istotnie gorsze.

Zaliczenie 2019

1. Obsługa IT banku Green Forest Bank dostała zadanie zrobienia kompleksowej analizy zagrożeń bezpieczeństwa systemów komputerowych firmy.

2. Opracuj drzewo ataku zawierające analizę tych zagrożeń. Opisz chronione wartości oraz przyjmij model odpowiednio silnego atakującego, aby wyłapać jak najwięcej zagrożeń. Zapisz drzewo w postaci wypunktowanej listy. Jeśli uznasz za stosowne, możesz zapisać rozwiązanie w postaci kilku drzew lub drzewa o kilku korzeniach.

Uwagi dotyczące rozwiązania:

1. To zadanie jest z rozmysłem źle postawione (tzn. możliwa jest więcej niż jedna właściwa odpowiedź). To złe postawienie ma na celu wybadanie w Was wrażliwości na sprawy bezpieczeństwa.

2. Dodatkowo problemy związane z analizą bezpieczeństwa w prawdziwym życiu są zawsze źle postawione.

3. W zadaniu chcemy, żeby Państwo przeprowadzili raczej analizę sytemu i całej sytuacji - analiza bezpieczeństwa to zawsze analiza całościowa.

4. W zadaniu nie ma mowy o protokołach kryptograficznych, żeby mocniej zwrócić Państwa uwagę na fakt, że bezpieczeństwo to nie tylko kryptografia.

5. Bardzo ważną rzeczą w tego typu analizie jest jej systematyczność. Zastanów się, jakie węzły będą systematyzować analizę.

6. Można sobie obejrzeć przykładowe rozwiązanie z zeszłych lat, żeby lepiej zrozumieć, jak mają wyglądać rozwiązania. W szczególności należy zwrócić uwagę, że rozwiązania istotnie krótsze będą uważane za istotnie gorsze.

7. Zadanie będzie wracało na zajęciach w kilku odsłonach. Po każdej grupie zajęć należy sobie zadać trud i wzbogacić swoje rozwiązanie.

Zaliczenie 2020

1. Obsługa IT księgarni Green Forest Bank dostała zadanie zrobienia kompleksowej analizy zagrożeń bezpieczeństwa systemów komputerowych firmy.

2. Opracuj drzewo ataku zawierające analizę tych zagrożeń. Opisz chronione wartości oraz przyjmij model odpowiednio silnego atakującego, aby wyłapać jak najwięcej zagrożeń. Zapisz drzewo w postaci wypunktowanej listy. Jeśli uznasz za stosowne, możesz zapisać rozwiązanie w postaci kilku drzew lub drzewa o kilku korzeniach.

Uwagi dotyczące rozwiązania:

1. To zadanie jest z rozmysłem źle postawione (tzn. możliwa jest więcej niż jedna właściwa odpowiedź). To złe postawienie ma na celu wybadanie w Was wrażliwości na sprawy bezpieczeństwa.

2. Dodatkowo problemy związane z analizą bezpieczeństwa w prawdziwym życiu są zawsze źle postawione.

3. W zadaniu chcemy, żeby Państwo przeprowadzili raczej analizę sytemu i całej sytuacji - analiza bezpieczeństwa to zawsze analiza całościowa.

4. W zadaniu nie ma mowy o protokołach kryptograficznych, żeby mocniej zwrócić Państwa uwagę na fakt, że bezpieczeństwo to nie tylko kryptografia.

5. Bardzo ważną rzeczą w tego typu analizie jest jej systematyczność. Zastanów się, jakie węzły będą systematyzować analizę.

6. Można sobie obejrzeć przykładowe rozwiązanie z zeszłych lat, żeby lepiej zrozumieć, jak mają wyglądać rozwiązania. W szczególności należy zwrócić uwagę, że rozwiązania istotnie krótsze będą uważane za istotnie gorsze.

7. Zadanie będzie wracało na zajęciach w kilku odsłonach. Po każdej grupie zajęć należy sobie zadać trud i wzbogacić swoje rozwiązanie.