„Mamy pentesty raz w roku. Po co nam jeszcze modelowanie zagrożeń?” To pytanie pada w niemal każdej rozmowie o bezpiecznym wytwarzaniu i jest w nim ukryte założenie, że chodzi o dwie wersje tej samej usługi. Obie w końcu „sprawdzają bezpieczeństwo”, więc po co płacić dwa razy?

Tylko że one nie sprawdzają tego samego. Ani w tym samym momencie.

Teza tego artykułu: pentest bada system, który już istnieje; modelowanie zagrożeń pracuje, zanim powstanie kod — a największa wartość rodzi się wtedy, gdy zepniesz je w pętlę. Plan jest taki: najpierw pięć cech, które je różnią; potem powód, dla którego nie są konkurentami; na końcu pętla, w której jedna praktyka obniża koszt drugiej. Zapraszamy do lektury.

Jedna oś porządkuje wszystko: proaktywne kontra reaktywne

Modelowanie zagrożeń (ang. threat modeling) jest jedyną w pełni PROaktywną praktyką bezpieczeństwa: działa na etapie projektowania, zanim powstanie pierwsza linijka kodu czy zanim postawisz serwer (pisaliśmy o tym w przewodniku). Pentest, audyt, skan podatności działają reaktywnie: badają to, co już zbudowano. Proaktywność to zresztą sedno security by design: bezpieczeństwo wbudowane w projekt, a nie doklejone po fakcie.

Czemu ta oś jest tak ważna? Ponieważ decyduje o koszcie. Im później łapiesz problem, tym drożej go usuwasz; błąd projektowy złapany na tablicy kosztuje rozmowę, a złapany przez pentest rok po wdrożeniu kosztuje przebudowę. Widać to też na poziomie pojęć: pentest znajduje podatności, które już siedzą w gotowym systemie, a modelowanie szuka zagrożeń, zanim ktokolwiek zdąży wprowadzić podatność (czym różni się zagrożenie od podatności).

Pentest znajduje błędy, które już popełniono. Modelowanie zapobiega ich popełnieniu.

Pięć cech, którymi porównuje się oceny bezpieczeństwa

W naszym cyklu o typach ocen bezpieczeństwa porównujemy wszystkie praktyki tego rodzaju pięcioma cechami: cel, zakres, moment, wysiłek i automatyzacja. Tu wystarczy wersja skrócona, dla tej jednej pary:

przewiń tabelę w bok
CechaModelowanie zagrożeńPentest
Celuniknąć zagrożeń, zanim staną się podatnościamiznaleźć i udowodnić podatności, które już istnieją
Zakresprojekt i architektura systemudziałający system lub aplikacja
Momentetap projektowania, przed kodempo zbudowaniu, zwykle przed wydaniem albo cyklicznie
Wysiłekgodziny (sesja plus przygotowanie)dni lub tygodnie testów
Automatyzacjazbędna na start (tablica wystarczy); pomaga utrzymywać modelenarzędzia wspierają, ale rdzeń pozostaje ręczną robotą testera

Zwróć uwagę, że żadna z tych pozycji nie stawia praktyk przeciwko sobie. Cel, moment i zakres są różne, więc porównywanie ich wprost przypomina spór, czy lepsze jest koło, czy silnik.

Nie wybierasz między nimi. Ustawiasz je na jednej osi czasu.

Analogia: profilaktyka i leczenie

Posłużymy się analogią, bo dobrze tu pasuje. Modelowanie zagrożeń jest jak profilaktyka: nudna, powtarzalna, tania — i działa, ZANIM choroba się rozwinie. To regularne badania i szczepienia. Pentest jest natomiast jak dokładne badanie organizmu, który już żyje i pracuje: potrafi wykryć chorobę i udowodnić, że jest realna, ale jej nie cofnie. Leczenie to już osobny koszt.

I stąd nasza mantra: modelowanie zagrożeń to witamina, nie lek. Efekty przychodzą z czasem i z regularnością, nie po jednej tabletce. Kto oczekuje, że jedna sesja „wyleczy” system, przeżyje to samo rozczarowanie, co ktoś, kto jedną tabletką witaminy C chce zatrzymać grypę.

Newsletter Nowe artykuły i odcinki podcastu prosto na skrzynkę. Bez spamu.

Pętla, w której obie praktyki pracują na siebie

Tu dochodzimy do sedna, czyli do tego, czemu ustawianie tych praktyk przeciwko sobie jest błędem. Dobrze ustawiona współpraca wygląda tak:

  1. Zespół buduje model zagrożeń na etapie projektowania, proaktywnie (jak wygląda sesja). Na poziomie systemu artefakt jest formalny: powstaje właśnie po to, żeby ktoś go później wykorzystał (kto i co buduje na którym poziomie).
  2. Artefakt trafia do testerów bezpieczeństwa PRZED testem. Zamiast pustej kartki i rekonesansu od zera dostają mapę systemu z zaznaczonymi zagrożeniami (jak czyta się taką mapę).
  3. Testerzy walidują model: potwierdzają, które zagrożenia są realne, i uzupełniają go o to, czego zespół nie przewidział. Poprawki wracają do modelu, a wyniki testu lądują w backlogu w konkretnych formatach.
  4. Zaktualizowany model ukierunkowuje kolejne testy. Z każdym obiegiem pętli testerzy startują coraz bliżej sedna, a koszt bezpieczeństwa spada.

Dobrze ujął to Serhii Pronin (Head of Security w Booksy) w komentarzu pod jednym z naszych materiałów: przekazanie wyników modelowania zespołowi testów to w praktyce „requirement-driven security testing”, czyli testowanie napędzane wymaganiami, a nie tylko eksploracją.

Spójrz na to też od strony testera. Każdy pentester i tak nieformalnie modeluje zagrożenia; szkoda tylko, że ta wiedza zwykle nigdzie potem nie wraca. Pętla formalizuje ten odruch i sprawia, że ustalenia przestają wyparowywać wraz z końcem zlecenia.

Model bez testów to hipoteza. Testy bez modelu to zgadywanie. Pętla robi z nich system.

„Czy pentest nam nie wystarczy?”

Wróćmy do obiekcji z początku, bo teraz można ją rozbroić rzeczowo. Nie, sam pentest nie wystarczy. Powody są trzy.

Po pierwsze: pentest przychodzi za późno dla błędów projektowych. Źle zaprojektowanego uwierzytelniania czy architektury, która wystawia na świat zbyt dużą powierzchnię ataku, nie naprawisz hotfixem po teście; to są decyzje z etapu projektu i tylko tam można je tanio zmienić.

Po drugie: pentest ma budżet czasowy. Bez modelu na wejściu spora część tego budżetu spala się na rozpoznanie systemu, zamiast na drążenie tego, co naprawdę groźne. Płacisz za godziny rozpoznania, których większość oszczędziłby model na wejściu.

Po trzecie: pentest jest z natury punktowym zdjęciem stanu, a system zmienia się codziennie. Między jednym zdjęciem a drugim żyje dalej, niezależnie od tego, jak często je robisz. Modelowanie działa w trybie „mała dawka, ale często”, więc towarzyszy zmianom dokładnie tam, gdzie powstają.

A gdyby budżetu starczyło tylko na jedno? Wybierz modelowanie: tanio zmienia decyzje projektowe, których pentest po fakcie już nie odkręci. Tylko że to w dużej mierze fałszywy wybór, bo modelowanie kosztuje godziny, a nie dni.

A teraz uczciwie w drugą stronę: modelowanie zagrożeń NIE zastępuje pentestu. Model to zbiór hipotez o systemie, a nie dowód z działającej aplikacji. Badanie SEI z udziałem 250 osób pokazało, że żadna pojedyncza metoda nie znajduje większości zagrożeń; walidacja nie jest więc dodatkiem, tylko częścią praktyki. Czwarte pytanie Shostacka („Czy zrobiliśmy to wystarczająco dobrze?”) domyka się właśnie testami. Bez nich model powoli odkleja się od rzeczywistości.

Pytanie nie brzmi „modelowanie czy pentest”, tylko „czemu Twój pentest nie dostaje modelu na wejściu”.

Co z tego wynika dla compliance

Ten wątek jest krótki, ale dla części organizacji decydujący. Audytor pyta o analizę ryzyka i o bezpieczne wytwarzanie; formalny model zagrożeń jest wkładką do jednego i drugiego, a udokumentowana pętla model–testy pokazuje, że proces żyje, zamiast leżeć w segregatorze (jak to mapuje się na NIS2, DORA i CRA).

Dla audytora to dowód, że proces żyje; dla zespołu tańsze testy. Jeden mechanizm, dwie korzyści.

Co robić, jak żyć?

Zbierzmy to w pięć praktycznych kroków:

  1. Masz pentest w kalendarzu? Zbuduj model zagrożeń PRZED nim (sesja krok po kroku) i przekaż go testerom razem z zakresem zlecenia.
  2. Zapisz pętlę w zleceniu. Poproś, żeby raport mapował znaleziska na model: co potwierdzone, co obalone, co nowe. Jedno zdanie w zamówieniu potrafi zmienić cały charakter raportu.
  3. Po teście domknij obieg. Nanieś wnioski na model, a wyniki przekuj w akcje w backlogu (5 formatów), triażując je według krytyczności.
  4. Ustaw rytm. Modelowanie często i lekko, przy każdej zmianie; testy okresowo i głęboko. Jedno nie zastępuje drugiego.
  5. Traktuj to jako element procesu. Pętla model–testy to fragment większej całości (proces, sesja i model), nie osobny projekt.

Bo bezpieczeństwo to proces, nie produkt. Pentest i modelowanie zagrożeń nie konkurują o budżet: to dwie praktyki na tej samej osi czasu, a największą wartość dają wtedy, gdy dopniesz je w pętlę.

Do zapamiętania — FAQ
Czym różni się modelowanie zagrożeń od pentestu?
Modelowanie zagrożeń jest proaktywne: działa na etapie projektowania i szuka zagrożeń, zanim staną się podatnościami. Pentest jest reaktywny: bada działający system i dowodzi, które podatności realnie istnieją.
Czy modelowanie zagrożeń zastępuje pentest?
Nie. Model to hipotezy o systemie, test to dowód z działającej aplikacji. Największa wartość powstaje w pętli: model ukierunkowuje testy, a testy walidują i wzbogacają model.
Co to jest requirement-driven security testing?
Testowanie napędzane wymaganiami: testerzy dostają model zagrożeń na wejściu i skupiają się na najistotniejszych zagrożeniach, zamiast eksplorować po omacku. Dzięki temu budżet testu idzie w głębię, nie w rozpoznanie.
Co przekazać pentesterom przed testem?
Formalny model zagrożeń systemu wraz z diagramem (np. DFD) i listą zagrożeń z priorytetami. Dokładnie po to powstaje artefakt na poziomie systemu.
Jak często modelować, a jak często testować?
Modelowanie prowadź w trybie „mała dawka, ale często”, w rytmie zmian w systemie; testy rób okresowo oraz przy dużych zmianach. Rytm obu praktyk opisujemy w przewodniku i w artykule o sesji.
Newsletter

Damy Ci znać, gdy opublikujemy coś nowego.

Artykuł albo odcinek podcastu. Bez spamu. W każdej chwili możesz się wypisać.

Zapisując się, akceptujesz politykę prywatności.

Referencje i wzmianki: Adam Shostack, Threat Modeling: Designing for Security (czwarte pytanie jako walidacja); SEI, badanie z udziałem 250 uczestników (żadna pojedyncza metoda nie znajduje większości zagrożeń); OWASP (WSTG — świat testów); nasz cykl o typach ocen bezpieczeństwa (Architecting Security, EN) jako źródło ramy pięciu cech.