Trwa atak? Skontaktuj się z zespołem reagowania na incydenty

Bezpieczne programowanie

Threat modeling nowej funkcji w godzinę bez architekta bezpieczeństwa

Godzinna sesja threat modelingu dla zespołów deweloperskich: cztery pytania i STRIDE, a na koniec tickety i przypadki testowe.

Także w językach:EnglishTürkçeDeutschFrançaisEspañolItalianoNederlandsEesti

Ilustracja: Threat modeling nowej funkcji w godzinę bez architekta bezpieczeństwa

Zespół deweloperski może przeprowadzić threat modeling funkcji w godzinę, jeśli odpowie po kolei na cztery pytania i wyjdzie ze spotkania z ticketami, a nie z dokumentem. Pytania pochodzą z Threat Modeling Manifesto: nad czym pracujemy, co może pójść nie tak, co z tym zrobimy i czy wykonaliśmy to wystarczająco dobrze. Nie potrzebujesz do tego architekta bezpieczeństwa, ponieważ ta praca nie zależy od wrodzonych zdolności jednej osoby.

Godzina w skrócie

MinutyPytanieRezultat
Przed sesją-Jedna osoba przygotowuje szkic diagramu przepływu danych
0-10Nad czym pracujemyPoprawiony diagram, ponumerowane punkty wejścia
10-30Co może pójść nie takLista zagrożeń pogrupowana według kategorii STRIDE
30-45Co z tym zrobimyOdpowiedź na każde zagrożenie
45-55Tickety i testyJeden ticket i jeden test na każde działanie ograniczające
55-60Czy wykonaliśmy to wystarczająco dobrzeKontrola kompletności

Przed sesją

Wybierz jedną funkcję, a nie cały produkt. Wyszukiwanie problemów na etapie projektowania jest znacznie skuteczniejsze niż naprawianie błędów na produkcji, więc zorganizuj sesję przed rozpoczęciem implementacji.

Zaproś programistę, właściciela wymagań oraz, jeśli w grę wchodzi infrastruktura, kogoś z działu operacji. Jedna z tych osób przynosi szkic diagramu przepływu danych, wykonany w narzędziu, którego pliki zespół może później edytować.

Minuty 0-10: nad czym pracujemy

Grupa poprawia szkic. OWASP Threat Modeling Cheat Sheet wymaga czytelnego obrazu granic zaufania, przepływów danych, magazynów danych, procesów i podmiotów zewnętrznych, które często stanowią potencjalne punkty ataku. Sprawdź, czy każdy z tych elementów znalazł się na diagramie.

Jeśli część uczestników nie jest techniczna, zamiast upierać się przy notacji DFD, zbierzcie przepływy na tablicy w formie burzy mózgów.

Numeruj punkty wejścia na bieżąco, a dla warstwowych stosuj zapis major.minor (1, 1.2, 1.2.1), tak jak robi to strona procesu społeczności OWASP, i oznacz także punkty wyjścia. Komunikat o błędzie na stronie logowania może umożliwić ataki przez odpowiadający mu punkt wejścia, na przykład zbieranie nazw kont ("username not found") albo SQL injection (przez komunikaty wyjątków SQL).

Minuty 10-30: co może pójść nie tak

Przy projekcie technicznym zacznij od STRIDE. Przeprowadź każdy komponent, przepływ danych i granicę zaufania przez sześć kategorii i zapisuj, którego identyfikatora punktu wejścia dotyczy każde zagrożenie.

KategoriaNaruszaPrzykład
SpoofingUwierzytelnianieSkradziony token uwierzytelniający użyty do podszycia się pod użytkownika
TamperingIntegralnośćNiezamierzone modyfikacje bazy danych za pośrednictwem aplikacji
RepudiationRozliczalnośćZmanipulowane logi maskujące wykonane działania
Information DisclosurePoufnośćDane wyciągnięte z bazy kont użytkowników
Denial of ServiceDostępnośćUżytkownik zablokowany przez wiele nieudanych prób uwierzytelnienia
Elevation of PrivilegesAutoryzacjaJWT zmodyfikowany w celu zmiany roli

W przypadku reguły biznesowej dodaj misuse cases: działania wykonywane w złej kolejności, wielokrotnie, równolegle lub w celu uzyskania niezamierzonego efektu. Dla jednego wieloetapowego celu atakującego użyj drzewa ataku. Nie dokładaj technik tylko po to, by wyglądać na dokładnego; wyjaśnij, dlaczego każda z nich pasuje i czego nie obejmuje.

Prawdopodobieństwo razy wpływ brzmi porządnie, ale oba parametry trudno oszacować, a iloczyn pomija koszt poprawki. W godzinę wystarczy przybliżona ocena wysoki, średni lub niski dla każdego zagrożenia.

Przykład z praktyki: reset hasła

Weźmy reset hasła. Diagram pokazuje przeglądarkę, aplikację webową, bazę użytkowników i usługę poczty, a między internetem i aplikacją przebiega granica zaufania. Żądanie resetu to punkt wejścia 3, a link przesłany e-mailem to 3.1 (identyfikatory poglądowe).

Grupa znajduje cztery zagrożenia. Link resetujący działa dla kogoś innego niż właściciel konta (spoofing). Komunikat "no account with that address" ujawnia, kto jest zarejestrowany (information disclosure). Zdarzenia resetu nie są logowane (repudiation). Ktoś wywołuje wielokrotne resety wobec ofiary (denial of service).

Minuty 30-45: co z tym zrobimy

Każde zagrożenie dostaje jedną z czterech odpowiedzi:

  • Ogranicz (mitigate): zmniejsz prawdopodobieństwo, że zagrożenie się zmaterializuje.
  • Wyeliminuj (eliminate): usuń funkcję lub komponent, który je powoduje.
  • Przenieś (transfer): przenieś odpowiedzialność umowną lub finansową na inną stronę.
  • Zaakceptuj (accept): nie rób nic, ponieważ pozostałe opcje nie mieszczą się w ograniczeniach biznesowych.

Przeniesienie samo w sobie nie zmniejsza prawdopodobieństwa ani szkody, więc zapisz, kto odpowiada za pozostałe zabezpieczenia i ryzyko rezydualne. W przypadku zaakceptowanych zagrożeń odnotuj, kto zaakceptował ryzyko i dlaczego.

Minuty 45-55: tickety i testy

Zamień każde uzgodnione działanie ograniczające w wymaganie, które programista może od razu podjąć. Wystarczy jeden wiersz na zagrożenie:

ID zagrożeniaSTRIDETicketTest
3.1-SSpoofingSpraw, aby linki resetujące były jednorazowe i krótko ważneUżyty lub wygasły link zostaje odrzucony
3-IInformation DisclosureZwracaj jedną, ogólną odpowiedź dla każdego adresuZnany i nieznany adres dają identyczne odpowiedzi
3-RRepudiationLoguj każde żądanie resetuPróba resetu pojawia się w logu

Kolumna z testami sprawia, że model to coś więcej niż diagram. Każde działanie ograniczające potrzebuje sprawdzenia, które kończy się niepowodzeniem, gdy zabezpieczenia brakuje. Abuse cases przekładają się wprost na testy: powtórz żądanie, wyślij kroki w złej kolejności, wyślij dwa żądania naraz. Umieść tickety w backlogu samej funkcji i dodaj identyfikator zagrożenia do tytułu.

Minuty 55-60: czy wykonaliśmy to wystarczająco dobrze

Zacznij od prostej kontroli: czy istnieją zapisy pokazujące diagram, listę zagrożeń i listę zabezpieczeń? Jeśli któregoś brakuje, sesja nie jest zakończona. Potwierdź, że każde zagrożenie ma odpowiedź, że każde działanie ograniczające mówi, jak zespół je wdroży, oraz że przy zaakceptowanych ryzykach zapisano uzasadnienie.

Następnie utrzymuj model przy życiu. Aktualizuj go razem z systemem, a gdy projekt się zmienia, powtarzaj tylko te części, których zmiana dotyczy.

Od czego zacząć

  1. Wybierz jedną nadchodzącą funkcję i zarezerwuj godzinę z programistą, właścicielem wymagań i kimś z działu operacji.
  2. Poproś jedną osobę o przygotowanie szkicu diagramu przepływu danych z zaznaczonymi granicami zaufania. Grupa poprawia go i numeruje punkty wejścia w pierwszych dziesięciu minutach.
  3. Przez 20 minut przeprowadź STRIDE dla każdego komponentu i przepływu, zapisując przy każdym zagrożeniu identyfikator dotkniętego punktu wejścia.
  4. Przypisz odpowiedź do każdego zagrożenia, zapisz, kto odpowiada za zaakceptowane lub przeniesione ryzyko, a następnie utwórz jeden ticket i jeden test na każde działanie ograniczające.
  5. Przechowuj diagram, listę zagrożeń i listę zabezpieczeń razem z dokumentacją funkcji. Jeśli chcesz uzyskać zewnętrzne spojrzenie na pierwszy model, nasza usługa konsultingowa może go zweryfikować, a zapisane zagrożenia dobrze posłużą jako zakres późniejszego testu penetracyjnego.

Jak możemy pomóc

Doradztwo i szkolenia

Oceniamy, w jakim miejscu Państwo są, wspólnie ustalamy priorytety i uczymy pracowników rozpoznawać ataki.

Dekoder JWT

Dekodowanie tokenu JWT i wykrywanie typowych błędów bezpieczeństwa, bez wysyłania go poza przeglądarkę.

Napisz do nas
Zespół AngelForce

Artykuł przygotował zespół AngelForce: konsultanci ds. bezpieczeństwa z certyfikatami CEH, LPT Master i CISA, którzy testują, monitorują i chronią systemy organizacji w całej Europie.

Tekst przygotowany z pomocą AI na podstawie publicznych źródeł wymienionych poniżej i sprawdzony przed publikacją przez zespół AngelForce.

Źródła

  1. www.threatmodelingmanifesto.org/
  2. cheatsheetseries.owasp.org/cheatsheets/Threat_Modeling_Cheat_Sheet.html
  3. community.owasp.org/Threat_Modeling_Process

Artykuły w temacie: Bezpieczne programowanie

Prosimy napisać, co chcą Państwo chronić

Prosimy opisać swoje środowisko i cele. Odpowiemy e-mailem.

Napisz do nas
info@angelforce.eu +372 5705 2044

AngelForce OÜ · Tallinn, Estonia