O bezpieczeństwie aplikacji piszemy na Kapitanie Hacku nieczęsto. Wiemy jednak, iż kiepskie zarządzanie tym tematem w organizacji prowadzi do katastrofalnych konsekwencji. jeżeli jako firma udostępniamy własną aplikację klientom, po wykryciu w niej podatności lub co gorsza po udanym ataku, stracą oni zaufanie do naszych usług. Atakujący wykorzystują różne rodzaje luk: słabą kontrolę dostępu, niebezpieczne przechowywanie danych, niepewną wymianę danych, podatne komponenty stron trzecich itp. W ostatnich latach liczba luk w zabezpieczeniach stale rośnie. Zarządzanie podatnościami to ciągły proces, który obejmuje wykrywanie ryzyka i tworzenie planu zapobiegania przyszłym szkodom.
Organizacje powinny wzmocnić swoją obronę, aby zapobiegać wykorzystywaniu starych i nowych luk w zabezpieczeniach. OWASP (Open Web Application Security Project) to organizacja non-profit, której celem jest poprawa bezpieczeństwa oprogramowania. OWASP opracował listę Top 10 podatności, aby wskazać przedsiębiorstwom najlepsze praktyki w zakresie bezpieczeństwa w celu ochrony ich aplikacji. Jest to otwarty projekt społecznościowy, który regularnie aktualizuje listę w miarę ewolucji środowiska zagrożeń. W tym artykule chcemy przejść przez najnowszą listę, zaktualizowaną o dane społeczności z 2022 roku.
OWASP Top 10 luk w zabezpieczeniach
OWASP aktualizuje listę co dwa lub trzy lata, aby nadążyć za zmieniającym się krajobrazem zagrożeń. Zaktualizowana lista wskazuje dziesięć luk, które najprawdopodobniej dotkną przedsiębiorstwa w nadchodzących latach. Specjaliści z dziedziny AppSec znajdują nowe luki w zabezpieczeniach i testują je przed umieszczeniem na liście. Lista OWASP została opublikowana w 2017 roku, a pod koniec 2021 zaktualizowano ją o nowe kategorie i opisy. Teraz, po roku 2022, przyszedł czas na kolejny update, jako iż dane dotyczące poszczególnych zagrożeń nieznacznie się zmieniły.
Listę 10 najpopularniejszych podatności przedstawimy poniżej wraz z krótkimi opisami. Nazwy podatności pozostawimy w oryginale po angielsku.
1. Broken Access Control
Nieprawidłowa kontrola dostępu to słabość, dzięki której atakujący uzyskują dostęp do kont użytkowników. Haker podszywa się tutaj pod użytkownika lub administratora w systemie i uzyskuje dostęp do danych oraz wrażliwych plików. Źle skonfigurowana kontrola dostępu może umożliwić atakującemu zmiany na przykład w panelu administracyjnym, panelu sterowania strony internetowej, dostępie przez FTP / SFTP / SSH.
Tej luce można zaradzić na następujące sposoby:
- Wdrożyć interaktywne rozwiązanie do testowania bezpieczeństwa aplikacji w celu wykrywania fałszerstw między witrynami lub niezabezpieczonego przechowywania poufnych danych
- Przeprowadzić testy penetracyjne w celu uzupełnienia działań IAST
- Usunąć konta, które nie są już aktywne
- Przeprowadzać regularne audyty i kontrole dostępu
- Używać adekwatnej metody zarządzania sesją i zarządzania dostępem
2. Cryptographic Failures
Błędy kryptograficzne występują, gdy przechowywane lub przesyłane dane są w jakiś sposób zagrożone i możliwe do odczytania.
Oszustwa związane z kartami kredytowymi lub kradzież tożsamości są często wynikiem błędów kryptograficznych. Takie problemy występują, gdy dane są przesyłane w postaci jawnego tekstu lub używane są przestarzałe algorytmy szyfrujące. Niepoprawne zarządzanie kluczami i techniki rotacji również bywają odpowiedzialne za tego typu luki.
Rozwiązania mające na celu usunięcie tej podatności są następujące:
- Wyłączyć autouzupełnianie w formularzach, które zbierają dane
- Zmniejszyć rozmiar obszaru powierzchni danych
- Korzystać z szyfrowania danych podczas przesyłania i przechowywania
- Korzystać z najbardziej zaawansowanych metod szyfrowania
- Dezaktywować buforowanie w formularzach zbierających dane
3. Injection
Luki w zabezpieczeniach polegające na wstrzykiwaniu odnoszą się do wstrzykiwania wrogich danych do interpretera za pośrednictwem SQL, OS, NoSQL lub LDAP. Ataki wstrzykujące oszukują silnik przetwarzania kodu, aby skłonił aplikację do wygenerowania niezamierzonych poleceń lub wykazał zachowania, dla których aplikacja nie została pierwotnie zaprojektowana. Aplikacje przyjmujące parametry jako dane wejściowe są podatne na ataki iniekcyjne. Aby zapobiec takim atakom, można zastosować następujące podejścia:
- Dołączyć narzędzia SAST i IAST do strumienia CI/CD
- Oddzielić polecenia od danych, aby uniknąć niepotrzebnego wykonywania poleceń wynikającego z narażenia na ataki
- Używać zapytań sparametryzowanych
- Używać bezpiecznego API zamiast eliminatora
- Zastosować sprawdzanie poprawności po stronie serwera i system do wykrywania włamań, aby identyfikować podejrzane zachowania po stronie klienta
4. Insecure Design
Odnosi się to do wszystkich wad związanych ze złym projektem technicznym aplikacji. Ta kategoria obejmuje modelowanie zagrożeń, bezpieczne wzorce projektowe i architektury referencyjne.
Rozwiązania dotyczące zwiększenia bezpieczeństwa w tym zakresie:
- Zastosować bezpieczny, kontrolowany cykl rozwoju produktu
- Stworzyć bibliotekę gotowych do użycia bezpiecznych wzorców projektowych
- Zintegrować kontrole wiarygodności na każdym poziomie aplikacji
- Wdrożyć modelowanie zagrożeń na potrzeby kluczowego uwierzytelniania, kontroli dostępu, logiki biznesowej i przepływów kluczy
- Ograniczyć zużycie zasobów użytkowników i usług
5. Security Misconfiguration
Błędna konfiguracja zabezpieczeń wśród 10 największych luk w zabezpieczeniach jest luką najczęstszą. Akceptowanie niezabezpieczonych ustawień domyślnych, niekompletnych konfiguracji, rozwlekłych komunikatów o błędach zawierających poufne informacje oraz źle skonfigurowanych odbiorców HTTP są odpowiedzialne za błędną konfigurację zabezpieczeń.
Rozwiązania dotyczące błędnej konfiguracji zabezpieczeń:
- Korzystać z szablonów zgodnych z zasadami bezpieczeństwa organizacji
- Używać architektury aplikacji podzielonej na segmenty, aby zmniejszyć ryzyko
- Wyeliminować nieużywane funkcje i usługi
- Przeprowadzać ciągłe monitorowanie zasobów chmury, serwerów i aplikacji w celu wykrycia błędnych konfiguracji zabezpieczeń
6. Vulnerable and Outdated Components
Komponenty open source mogą zawierać luki stanowiące poważne zagrożenie dla bezpieczeństwa aplikacji. Wrażliwe komponenty są często główną przyczyną naruszenia bezpieczeństwa danych.
Rozwiązania minimalizujące ryzyko związane z wrażliwymi i przestarzałymi komponentami:
- Komponenty będące częścią firmowych frameworków powinny podlegać zarządzaniu konfiguracją
- Skaner aplikacji powinien być w stanie zidentyfikować wszystkie komponenty, które należy monitorować
- Automatyzacja przepływu pracy związanej z zarządzaniem poprawkami
- Cykliczne skanowania w oparciu o bazę danych luk w zabezpieczeniach wzbogaconą o dane analizy zagrożeń
7. Identification and Authentication Failures
Atakujący przechwytują hasła, tokeny sesji lub klucze bezpieczeństwa, gdy aplikacje nieprawidłowo wykonują funkcje związane z zarządzaniem sesją lub uwierzytelnianiem użytkownika. Prowadzi to do kradzieży tożsamości. Błędy identyfikacji i uwierzytelniania mogą również zagrażać bezpieczeństwu innych zasobów w tej samej sieci.
Rozwiązania problemów z kradzieżą tożsamości:
- Zastosować uwierzytelnianie wieloskładnikowe
- Użytkownicy z uprawnieniami administratora nie powinni używać poświadczeń domyślnych
- Monitorować i korelować wszystkie nieudane próby logowania
- Wdrożyć bezpieczny menedżer sesji i nie umieszczać identyfikatorów sesji w adresach URL
8. Software and Data Integrity Failures
Błędy w integralności systemu i danych mają miejsce, gdy kod i infrastruktura nie są w stanie chronić przed naruszeniami integralności. Złośliwy kod i nieautoryzowany dostęp do kodu to zagrożenia związane z tą luką. Programy zawierające wtyczki, biblioteki lub moduły z niezaufanych źródeł są podatne na zmiany w integralności. Możliwości automatycznej aktualizacji powodują, iż aktualizacje są wdrażane bez niezbędnych kontroli integralności.
Rozwiązania dotyczące problemów z oprogramowaniem i integralnością danych:
- Implementacja podpisów cyfrowych, aby upewnić się, iż program nie został zmanipulowany
- Wdrożenie procedury przeglądu modyfikacji kodu i konfiguracji
- Weryfikacja, czy biblioteki i zależności korzystają z zaufanych repozytoriów
- Weryfikacja, czy strumień CI/CD obejmuje odpowiednią segregację, konfigurację i kontrolę dostępu
9. Security Logging and Monitoring Failures
Niepowodzenia w rejestrowaniu i monitorowaniu narażają aplikację na ataki. Sesje i nieudane logowania, jeżeli nie są monitorowane, czynią aplikację podatną.
Rozwiązania zapobiegające błędom rejestrowania i monitorowania pod kątem bezpieczeństwa:
- Przeprowadzenie testów penetracyjnych, aby przestudiować raporty i wykryć ewentualne niedociągnięcia
- Tworzenie logów w formacie, który mogą z łatwością wykorzystywać rozwiązania do zarządzania i wykrywania zdarzeń
- Implementacja mechanizmu ostrzegania i monitorowania w celu wykrywania podejrzanych działań
10. Server-Side Request Forgery
Jest to często wynikiem pobierania przez aplikację zdalnego zasobu bez sprawdzania poprawności adresu URL podanego przez użytkownika. Złożone architektury i coraz częstsze korzystanie z usług w chmurze doprowadziły w ostatnich latach do fałszowania żądań po stronie serwera.
Rozwiązania dotyczące fałszowania żądań po stronie serwera:
- Egzekwować zasadę firewall „deny by default”.
- Ustalić własność i cykl życia reguł zapory w oparciu o aplikacje
- Rejestrować wszystkie zaakceptowane i zablokowane przepływy sieciowe na zaporach
- Oczyścić dane wejściowe dostarczone przez klienta
- Zapewnić spójność adresów URL
Podsumowanie
OWASP pomaga programistom aplikacji ocenić zagrożenia bezpieczeństwa i sposoby skutecznej walki z nimi. Wprowadzenie nowych kategorii w zmienionej liście podkreśla znaczenie bezpieczeństwa już od samego procesu projektowania. OWASP przyczynia się do budowy bardziej niezawodnej sieci i poprawia odporność cybernetyczną przedsiębiorstwa. Warto zapoznać się z tą listą oraz z samą polityką organizacji OWASP.