Testy penetracyjne aplikacji

https://chacker.pl/

Testowanie aplikacji ogranicza się do aplikacji, komponentu aplikacji lub małego zestawu aplikacji. Celem tego testu jest głębokie wgłębienie się w aplikację i określenie słabych punktów oprogramowania oraz ścieżek ataków w samym oprogramowaniu. Testerzy aplikacji mogą zajmować się aplikacjami internetowymi, aplikacjami skompilowanymi i zainstalowanymi (czasami nazywanymi aplikacjami „grubymi”), aplikacjami mobilnymi, a nawet interfejsami programowania aplikacji (API). Testowanie aplikacji zazwyczaj nie wykracza poza granice analizy poeksploatacyjnej w systemie operacyjnym. Testowanie aplikacji może być uwzględnione w programie dynamicznego testowania bezpieczeństwa aplikacji (DAST) lub statycznego testowania bezpieczeństwa aplikacji (SAST), który jest częścią procesu cyklu życia oprogramowania (SDLC). W takiej sytuacji aplikacje mogą być testowane w ustalonych odstępach czasu, w ramach określonych wydań wersji lub nawet w ramach zautomatyzowanych procesów, gdy ktoś dokona zmiany w kodzie. Testowanie aplikacji pozwala organizacji zrozumieć, w jaki sposób bezpieczeństwo aplikacji wpływa na postawę organizacji, co może prowadzić do tworzenia bezpieczniejszych produktów i eliminowania poprawek na późniejszym etapie procesu SDLC, których naprawienie może być bardziej kosztowne. Pomaga także w ocenie skuteczności kontroli, w tym kontroli biznesowych w aplikacji, a także typowych kontroli, takich jak zapory aplikacji internetowych (WAF) i inne kontrole bezpieczeństwa serwera WWW.

Testy penetracyjne sieci

https://chacker.pl/

Testowanie sieci dotyczy systemów operacyjnych, usług, domen i ogólnych topologii sieci. To właśnie o tym myśli większość ludzi, gdy słyszą wyrażenie „testy penetracyjne”. Celem tych testów jest zazwyczaj sprawdzenie środowiska sieciowego i określenie, czy ktoś może się do niego dostać, określenie możliwych ścieżek ataku, jakie może obrać osoba atakująca po wejściu do środka, oraz określenie, jaki będzie wpływ. Tester może być ograniczony do określonego obszaru sieci, np. tylko obwodu sieci, lub może uzyskać dostęp do wnętrza i być ograniczony do określonego obszaru sieci, np. środowiska PCI lub środowiska klienta. Testowanie sieci bada bezpieczeństwo przedsiębiorstwa przez pryzmat infrastruktury sieciowej, protokołów, komunikacji, systemów operacyjnych i innych systemów podłączonych do sieci. Powinien oceniać skuteczność zarządzania poprawkami i lukami w zabezpieczeniach, segmentację sieci, zarządzanie konfiguracją oraz skuteczność kontroli hosta i sieci.

Testy penetracyjne

https://chacker.pl

Testy penetracyjne badają luki w zabezpieczeniach po kolei, budując drzewa ataków. Drzewa ataków przedstawiają łącznie serię zdarzeń i przedstawiają wynik w taki sposób, że organizacje mogą kontekstualizować znaczenie luk w ich środowisku. Chociaż pojedyncza luka może mieć niską ocenę zgodnie ze wskaźnikiem CVSS (Common Vulnerability Scoring System) skanera podatności, łącząc ją z innymi lukami, osoba atakująca może osiągnąć znacznie większy wpływ. Te drzewa ataków pozwalają zespołowi ds. bezpieczeństwa zrozumieć, w jaki sposób kontrole będą wpływać na luki, a działy biznesowe będą mogły zobaczyć, jak te luki wpływają na firmę z punktu widzenia danych i procesów. Większość testerów penetracyjnych specjalizuje się w konkretnym obszarze: testowaniu sieci, aplikacji, testowaniu fizycznym, urządzeń lub w chmurze. Nie oznacza to, że jest to jedyny rodzaj testów, jaki wykonują, ponieważ ataki często przekraczają granice niektórych z tych komponentów. Testy penetracyjne regulowane są przez zestawienie prac (SOW), które pomoże zdefiniować parametry testów. SOW różnią się znacznie w zależności od celów testowania. W przypadku niektórych organizacji celem jest znalezienie wszystkiego, co może być nieprawidłowe w określonym obszarze, podczas gdy inne mogą mieć określone cele, które chcą, aby tester próbował naruszyć, co nazywa się testami penetracyjnymi zorientowanymi na cel. Testy penetracyjne zorientowane na cel zazwyczaj wyznaczają cele i ramy czasowe na zbadanie modelu zagrożenia. Klient zazwyczaj określa rodzaje rzeczy, którymi się martwi, np. ktoś żądający okupu za środowisko, kradzież tajemnic firmowych, naruszenie poufnych środowisk lub możliwość wpływu na środowiska SCADA. Tester rozpocznie od pozycji w sieci lub poza siecią, a następnie spróbuje dotrzeć do środowiska docelowego, poruszając się po sieci, podnosząc uprawnienia i poruszając się dalej, aż dotrze do celu. Testy penetracyjne pomagają uzyskać lepszy wgląd w wpływ luk w zabezpieczeniach sieci. Budując łańcuchy ataków, tester może pokazać, jak można łączyć kombinacje luk w zabezpieczeniach, aby osiągnąć rezultaty. W ten sposób można określić praktyczne skutki słabych punktów i ocenić skuteczność mechanizmów kompensujących. Krótko mówiąc, wiele organizacji uważa, że określone mechanizmy kontrolne wyłapią złośliwą aktywność i że niektórych luk w zabezpieczeniach nie będzie można wykorzystać; jednakże podczas testu penetracyjnego tester ocenia, co może zrobić atakujący. Prawidłowy raport z testu penetracyjnego nie będzie zawierał „potencjalnych ustaleń”. Zamiast tego będzie zawierać wyłącznie ustalenia, które można udowodnić i udokumentować za pomocą pism, rekomendacji i zrzutów ekranu. Zrozumienie tych praktycznych skutków pomaga organizacji ustalić priorytety i zaplanować zmiany w zabezpieczeniach, które ostatecznie pomogą zwiększyć bezpieczeństwo organizacji.

Zatwierdzone skanowanie pod kątem luk w zabezpieczeniach

https://chacker.pl/

Po wdrożeniu procesu zarządzania podatnościami organizacje mogą chcieć móc sprawdzić, czy wykryte luki nadają się do wykorzystania i czy nie istnieją żadne dodatkowe mechanizmy łagodzące, które mogłyby zatrzymać włamanie. Sprawdzone skanowanie podatności wypełnia tę lukę poprzez pobieranie wyników ze skanowania podatności i przeprowadzanie ręcznej weryfikacji wyników poprzez próbę wykorzystania luki. Jednak po wykorzystaniu luki testy zazwyczaj się zatrzymują, więc dalsze możliwości wykorzystania luki nie są badane. Wykorzystując serwery i usługi, tester usuwa wszelkie wątpliwości co do tego, czy system jest podatny na ataki. Wiele osób rozpoczyna przygodę z testami penetracyjnymi od wykonywania tego typu testów, ponieważ zakres jest ograniczony, cele są konkretne i często występuje wiele powtórzeń. Rozwijając swoje umiejętności w zakresie badania podatności, tworzenia ataku i wykonywania exploita, testerzy mogą udoskonalić swoje umiejętności ataku, aby przygotować się do bardziej zaawansowanych testów penetracyjnych. Nie wszystkie organizacje mają oddzielną funkcję przeprowadzania sprawdzonego skanowania pod kątem luk w zabezpieczeniach. Niektórzy po prostu polegają na uwierzytelnionych skanach w celu ustalenia luki w zabezpieczeniach, a następnie na tej podstawie wymuszają naprawę. Jednak w miarę rozwoju organizacji często staje się to aspektem programu, nawet jeśli nie jest on długotrwały.

Skanowanie podatności

https://chacker.pl/

Skanowanie pod kątem luk w zabezpieczeniach polega na uruchamianiu narzędzi w środowisku w celu znalezienia luk w zabezpieczeniach. Skanowanie pod kątem luk w zabezpieczeniach to działanie szerokie, ponieważ próbuje przetestować jak najwięcej zasobów w celu ustalenia, czy brakuje poprawek, ale może testować tylko znane problemy, dla których napisano testy. Z drugiej strony testy penetracyjne sięgają głęboko do zasobów, próbując odkryć nowe luki i skutki w niewielkim podzbiorze systemów. Zasadniczo istnieją dwa typy skanowania podatności na ataki: uwierzytelnione i nieuwierzytelnione. Większość organizacji zaczyna od wersji nieuwierzytelnionej, ponieważ jest to najłatwiejsze do wdrożenia. Wadą tego jest to, że podczas nieuwierzytelnionych skanów zazwyczaj na podstawie najlepszych starań domyśla się, czy dana usługa jest podatna na ataki, w związku z czym występuje wysoki odsetek wyników fałszywie pozytywnych (skaner pokazuje usługę jako podatną na ataki, gdy tak nie jest) lub fałszywie negatywnych ( skaner pokazuje, że usługa nie jest podatna na ataki, gdy jest podatna na ataki). Gdy organizacja przeprowadza skanowanie pod kątem luk w zabezpieczeniach, musi mieć drogę do naprawy. Jest to połączenie zarządzania poprawkami i procesami usuwania luk w zabezpieczeniach. Po wdrożeniu tych procesów często okazuje się, że występują fałszywe alarmy, więc organizacja przejdzie do zweryfikowanego skanowania pod kątem luk w zabezpieczeniach, aby ograniczyć liczbę fałszywych alarmów. Zatwierdzone skanowanie luk w zabezpieczeniach uwierzytelnia system w celu bezpośredniego zapytania o wersję oprogramowania, dzięki czemu może służyć zarówno jako identyfikacja wersji pod kątem luk, jak i potwierdzenie konsekwentnego stosowania poprawek. Oprócz bardziej wiarygodnych wyników skanowania, uwierzytelnione skanowanie może jeszcze bardziej usprawnić zarządzanie zasobami i zapasami. Identyfikacja zainstalowanych wersji oprogramowania, oprogramowania, które mogło zostać zainstalowane, które nie jest obsługiwane lub jest sprzeczne z zasadami, a także inne właściwości systemu mogą zostać zebrane w ramach tego procesu, aby dodać je do innych możliwości zarządzania i widoczności organizacji. Identyfikacja systemów na podstawie więcej niż tylko adresu IP może również umożliwić bardziej szczegółowe śledzenie podatności zasobów na hosty korzystające również z protokołu DHCP, co oznacza, że śledzenie trendów podatności zasobu na przestrzeni czasu jest bardziej niezawodne. Działający program zarządzania podatnościami jest podstawą pozostałych działań w Red Teaming. Bez zarządzania podatnościami testy penetracyjne są przydatne jedynie do celów zapewnienia zgodności, ale nawet wtedy wyniki zazwyczaj nie będą korzystne.

Wprowadzenie do drużyn czerwonych

https://chacker.pl/

Koncepcja czerwonych drużyn wywodzi się z wojska. Ćwiczenia szkoleniowe dotyczące rywalizacji, w których jedna drużyna przyjmuje rolę atakującego (drużyna czerwona), a inna część broni (drużyna niebieska), pozwalają zobaczyć, jak dobrze radzi sobie obrona w praktyce. W świecie biznesu czerwone zespoły atakują zabezpieczenia cyberbezpieczeństwa, w tym te, które dotyczą ludzi, procesów i technologii. Etyczny haker może przyjąć rolę przyjaznego przeciwnika, aby umożliwić organizacjom praktyczną ocenę środków obronnych poza prawdziwym cyberatakiem. Dzięki temu obrońcy mogą przećwiczyć reakcję i ocenić wykrywanie, zanim zostaną zaatakowani przez prawdziwego ugrupowania zagrażającego. Organizacje na różnych poziomach dojrzałości wymagają innych rzeczy od swojego czerwonego zespołu. W miarę jak bezpieczeństwo w organizacji staje się coraz bardziej dojrzałe, zmienia się rola czerwonego zespołu i zmienia się także wpływ na firmę jako całość. W tej sekcji przyjrzymy się, czym jest zespół czerwony, jakie role może pełnić zespół czerwony, a także omówimy rolę, jaką każdy etap odgrywa we wzroście bezpieczeństwa organizacji. Po uruchomieniu programu zabezpieczającego pierwsza faza zazwyczaj obejmuje próbę wdrożenia mechanizmów kontroli sieci, takich jak zapory ogniowe, serwery proxy i systemy wykrywania włamań do sieci. Po opracowaniu podstaw zostanie wdrożone zarządzanie poprawkami, aby mieć pewność, że wszystkie systemy zostały załatane. Skąd wiesz, że te rzeczy działają? Jednym ze sposobów jest skanowanie podatności. Skanowanie pod kątem luk w zabezpieczeniach pomoże określić, jakie systemy można zobaczyć w sieci z punktu widzenia skanera, jakie usługi są narażone i jakie potencjalne luki w zabezpieczeniach. Rysunek  pokazuje, w jaki sposób każda warstwa zabezpieczeń opiera się na kolejnej, a także jakie typy testów pomagają skoncentrować się na tych obszarach.

W miarę wzrostu liczby skanowań pod kątem luk w organizacji wzrasta odsetek fałszywych alarmów, w związku z czym organizacja przechodzi do zweryfikowanego skanowania pod kątem luk w zabezpieczeniach, dodając do skanowania podatności uwierzytelnione skany. Gdy organizacja ma już podstawy programu zarządzania podatnościami na zagrożenia, ważne jest, aby przyjrzeć się lukom w kluczowych obszarach działalności. Gdy działania zespołu czerwonego staną się rutyną, niektóre obowiązki mogą zostać przekazane innym obszarom organizacji, a zespół czerwonych może ewoluować. Ostatecznie bardziej wyrafinowane zespoły czerwone dysponują emulacją zagrożeń i możliwościami „zespołu fioletowego” (omówione w dalszej części rozdziału), które pomagają wprowadzać zmiany w organizacjach nie tylko w zakresie kontroli bezpieczeństwa, ale także w sposobie prowadzenia działalności przez organizację. Mogą zachować także inne funkcje, ale najwyższy poziom możliwości określi ogólny poziom możliwości, przy czym najbardziej dojrzałe organizacje będą w stanie zapewnić wartość liniom biznesowym (LOB) i możliwości szkolenia osób reagujących na incydenty przed faktycznym kompromisem.

Drużyny Czerwonych i Fioletowych

https://chacker.pl/

Chociaż omówiliśmy, czym jest etyczny haker, ważne jest, aby zrozumieć, jaka jest rola etycznego hakera w kontekście ekosystemu bezpieczeństwa. Zarówno w przypadku bezpieczeństwa korporacyjnego, jak i doradztwa, etyczni hakerzy pomagają zapewnić kontradyktoryjne podejście do bezpieczeństwa, aby pomóc organizacjom zrozumieć, co zobaczy osoba atakująca, co może zrobić i jaki będzie tego wpływ. Pomaga to organizacjom rozwijać się zarówno pod względem taktycznym, rozwiązując konkretne problemy, jak i strategicznie, zmieniając sposób, w jaki działają i prowadzą działalność gospodarczą.

Streszczenie

https://chacker.pl/

Znalazłeś podstawy rozpoczęcia korzystania z IDA Pro jako narzędzia inżynierii odwrotnej. Istnieje zbyt wiele funkcji i opcji rozszerzalności, aby zmieścić się w jednym rozdziale. Przyjrzeliśmy się interfejsowi IDA Pro, niektórym z najczęściej używanych funkcji IDA, a także rozpoczęciu pracy ze zdalnym debugowaniem. Będziemy używać IDA Pro w późniejszych rozdziałach omawiających różnicowanie poprawek Microsoft i eksploatację systemu Windows. Najlepszym sposobem nauczenia się obsługi IDA Pro jest skorzystanie z podstawowego programu w C, takiego jak te używane w tym rozdziale, i rozpoczęcie cofania. Możesz spodziewać się, że spędzisz dużo czasu na szukaniu w Google odpowiedzi na pytania dotyczące różnych instrukcji montażu i wykonywania określonych czynności za pomocą IDA Pro. Im częściej będziesz korzystać z narzędzia, tym szybciej zobaczysz poprawę swoich umiejętności i zaznajomisz się z cofaniem w IDA Pro.

Debugowanie za pomocą IDA Pro

https://chacker.pl/

IDA Pro zawiera solidną obsługę debugowania, zarówno lokalną, jak i zdalną. Lokalne debugowanie jest obsługiwane przez platformy, na których zainstalowany jest IDA Pro, w tym macOS, Linux i Windows. Zdalne debugowanie jest obsługiwane na różnych platformach, w tym iOS, XNU, BOCHS, Intel PIN, Android i innych. W tej sekcji skupimy się na przykładzie zdalnego debugowania przy użyciu serwera GDB działającego na docelowej maszynie wirtualnej Kali Linux i IDA Pro działającego na maszynie wirtualnej z systemem Windows 10. IDA Pro zawiera wiele fragmentów zdalnego debugowania, które można skopiować do wybranego systemu docelowego, w którym aplikacja ma być debugowana. Przejdźmy od razu do przykładu zdalnego debugowania za pomocą IDA Pro. W tym przykładzie używamy skompilowanej wersji programu myProg dostarczonej w folderze ~/GHHv6/ch05, po uprzednim sklonowaniu repozytorium Git Gray Hat Hacking 6th Edition. To nie jest laboratorium; jeśli jednak chcesz kontynuować, ten program jest potrzebny w systemie, w którym zainstalowany jest IDA, a także w docelowym systemie Kali Linux. Wymagana jest łączność sieciowa pomiędzy systemem, na którym działa IDA Pro (debugger) a systemem, na którym działa program docelowy (debuggee), ponieważ serwer GDB nasłuchuje na wyznaczonym numerze portu TCP i oczekuje na żądanie połączenia. Poniższe polecenie uruchamia serwer GDB dla programu myProg i nakazuje mu nasłuchiwanie na porcie TCP 23946 w oczekiwaniu na połączenie przychodzące. Opcja –once kończy pracę Serwera GDB po zamknięciu sesji TCP, zamiast automatycznie uruchamiać ją od nowa.

Gdy serwer GDB działa w docelowym systemie debugowania, czas załadować program myProg do IDA Pro w systemie debugera. Pozwalamy IDA Pro przeprowadzić automatyczną analizę i wybrać opcję Remote GDB Debugger, jak pokazano na rysunku

Teraz klikamy Debuger | Opcje procesu z menu IDA Pro. Spowoduje to wyświetlenie okna dialogowego pokazanego na rysunku

Opcje aplikacji i pliku wejściowego są ustawione na folder lokalny, w którym znajduje się program myProg. Na przykład, gdybyśmy debugowali bibliotekę DLL załadowaną przez aplikację docelową, opcje aplikacji i pliku wejściowego byłyby inne. W opcji Hostname wprowadziliśmy adres IP docelowego systemu debugowanego. Domyślny numer portu to 23946, dlatego użyliśmy tej samej opcji w systemie docelowym z serwerem GDB. Po zaakceptowaniu tych opcji klikamy przycisk Odtwórz, pokazany na rysunku . Następnie pojawia się wyskakujące okienko z informacją: „Istnieje już proces debugowany zdalnie. Czy chcesz się do tego przywiązać?” Klikamy Tak, umożliwiając IDA Pro podłączenie się do zdalnego serwera GDB. Próba debugowania zakończyła się pomyślnie i po dołączeniu wstrzymuje wykonywanie, jak pokazano na rysunku

W oknie debugowania znajduje się kilka sekcji. Jeśli znasz inne debugery, sekcje powinny wyglądać znajomo. Główną i większą sekcją, zwaną IDA View-RIP, jest widok demontażu. Obecnie widzimy, że wskaźnik instrukcji (RIP) wskazuje adres pamięci zawierający instrukcję mov rdi, rsp. Większość sekcji w oknie debugowania można przewijać. Sekcja poniżej okna deasemblacji, zwana Hex View-1, zrzuca dowolny żądany segment pamięci w postaci szesnastkowej. Na prawo od widoku szesnastkowego-1 znajduje się widok stosu. Domyślnie zaczyna się od adresu wskaźnika stosu (RSP), zrzucając zawartość pamięci dla stosu bieżącego wątku. Nad sekcją Widok stosu znajdują się sekcje Wątki i Moduły. Wreszcie w prawym górnym rogu znajduje się sekcja Rejestry ogólne. W tej sekcji przedstawiono rejestry procesora ogólnego przeznaczenia, a także rejestry dodatkowe, w tym rejestr FLAGS i rejestry segmentowe. Elementy sterujące debugera są aktywowane za pomocą przypisanych skrótów klawiszowych, ikon menu na pasku wstążki lub przechodząc przez menu debugowania. Jeśli klikniemy Odtwórz, aby umożliwić kontynuowanie wykonywania programu, program po prostu się zakończy, ponieważ nie podaliśmy żadnych argumentów wiersza poleceń. Patrząc na tabelę Imports w tym programie, widzimy, że istnieje wywołanie przestarzałej funkcji strcpy, jak pokazano na rysunku

Następnie używamy przeglądarki zbliżeniowej do śledzenia ścieżki od funkcji głównej do strcpy, jak pokazano na rysunku

Patrząc na funkcję func1, możemy zobaczyć wywołanie strcpy, a także rozmiar bufora dla miejsca docelowego wynoszący 0x40, czyli 64 bajty. Następnie ustawiamy punkt przerwania w wywołaniu strcpy, jak pokazano na rysunku  klikając adres i naciskając klawisz skrótu F2 punktu przerwania.

Po ustawieniu punktu przerwania w funkcji strcpy i zrozumieniu rozmiaru bufora docelowego, podajmy 100 bajtów jako nasz argument, aby sprawdzić, czy uda nam się spowodować awarię procesu. Modyfikujemy naszą komendę gdbserver tak, aby zawierała na końcu składnię języka Python:

Następnie klikamy przycisk Odtwórz wewnątrz IDA, aby zainicjować połączenie z debugowanym narzędziem. Po podłączeniu musimy ponownie kliknąć przycisk Odtwórz, aby przejść do punktu przerwania funkcji strcpy. Wynik pokazano na rysunku .

Argument źródłowy został zrzucony do sekcji Widok szesnastkowy, dzięki czemu możemy zobaczyć, co zostanie skopiowane do bufora docelowego na stosie. Naciśnięcie klawisza skrótu Kontynuuj wykonywanie F9 w IDA powoduje oczekiwaną awarię, jak pokazano na rysunku

Z debugera pobierane są fragmenty, które pokazują ostrzeżenie o błędzie segmentacji, czyli wynik Ogólne Sekcja rejestrów i sekcja widoku stosu.

Uwagi

https://chacker.pl/

Powszechną praktyką jest dołączanie komentarzy do kodu podczas pisania aplikacji. Dzięki temu inni, którzy patrzą na Twój kod, zrozumieją Twój proces myślowy i znajdą się w tym samym kontekście. Jako autorowi ułatwia to również powrót do pełnej szybkości podczas otwierania kopii zapasowej bazy kodu. Ta sama praktyka dotyczy inżynierii odwrotnej. Patrzenie na deasemblowany lub dekompilowany pseudokod jest czasochłonną praktyką. IDA dodaje kilka komentarzy w oparciu o dostępne informacje o typie. Istnieje wiele rodzajów komentarzy, ale dwa z nich to najczęściej spotykane komentarze i komentarze powtarzalne. Aby dodać zwykły komentarz, kliknij żądaną linię demontażu i naciśnij klawisz dwukropka (:). Wpisz swój komentarz i kliknij OK. Przykład komentarza pokazano na rysunku . Według Hex-Rays powtarzalny komentarz jest „w zasadzie odpowiednikiem zwykłych komentarzy z jedną małą różnicą: są one powtarzane w dowolnym miejscu, które odnosi się do pierwotnej lokalizacji komentarza. Na przykład, jeśli dodasz powtarzalny komentarz do zmiennej globalnej, zostanie on wydrukowany w każdym miejscu, w którym znajduje się odwołanie do zmiennej.