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.

Skróty

https://chacker.pl/

Istnieje wiele domyślnych skrótów i klawiszy skrótu, które nie są intuicyjne, np. naciśnięcie W w celu pomniejszenia i cyfry 1 w celu powiększenia do wcześniej określonego rozmiaru. Liczby 2 i 3 pozwalają na bardziej kontrolowane powiększanie i pomniejszanie. Skąd znamy te różne opcje? Kliknij Opcje | Skróty umożliwiające wyświetlenie okna sterującego tymi ustawieniami. Pokazano to na rysunku . Tutaj znajdziesz domyślne skróty klawiszowe, a także te, które zostały zmienione. Wartości domyślne mogą się różnić w zależności od wersji, np. IDA Pro, IDA Home i IDA Free

Kody operacyjne i adresowanie

https://chacker.pl/

Być może zauważyłeś w głównym widoku wykresu IDA, że kody operacji i adresowanie nie są domyślnie wyświetlane. Niektórzy analitycy uważają te informacje za rozpraszające i mogą zajmować niepotrzebne miejsce na ekranie, zwłaszcza w programach 64-bitowych. Dodanie tej informacji do wyświetlacza jest bardzo proste i odbywa się poprzez kliknięcie Opcje | Ogólny. Rysunek pokazuje zrzut ekranu tego menu na karcie Demontaż, gdzie zaznaczyliśmy opcję Line Prefixes (Graph) w widoku wykresu i ustawiliśmy pole Number of Opcode Bytes (Graph) na 10

Na rysunku może zobaczyć te informacje zawarte na wyświetlaczu. Możesz nacisnąć CTRL-Z, aby cofnąć te zmiany.

Przeglądarka zbliżeniowa

https://chacker.pl/

Funkcja przeglądarki zbliżeniowej, znana również jako przeglądarka zbliżeniowa (PV), jest przydatna do śledzenia ścieżek w programie. Według strony internetowej Hex-Rays: „Możemy użyć PV na przykład do wizualizacji pełnego wykresu wywołań programu, aby zobaczyć ścieżkę między 2 funkcjami lub do jakich zmiennych globalnych odwołuje się jakaś funkcja.”2 Na rysunku używamy przeglądarki zbliżeniowej do śledzenia ścieżki między funkcją główną a wywołaniem memcpy. Funkcja memcpy ma argument count, który określa liczbę bajtów do skopiowania. Ta funkcja często powoduje przepełnienia bufora z powodu nieprawidłowego obliczenia argumentu licznika, dlatego używa się jej jako przykładu.

Aby otworzyć przeglądarkę zbliżeniową kliknij Widok | Otwórz subviews | Bliska Przeglądarka. Tam, jeśli domyślnie cokolwiek jest wyświetlane, możesz zwinąć dowolne węzły podrzędne lub nadrzędne, klikając prawym przyciskiem myszy węzeł środkowy i wybierając odpowiednią opcję. Jeśli klikniesz prawym przyciskiem myszy w dowolnym miejscu okna, które nie jest węzłem, zostaną wyświetlone opcje menu. Najłatwiejszą metodą jest wybranie opcji Dodaj węzeł według nazwy i wybranie żądanej nazwy funkcji z listy jako punktu początkowego lub końcowego. Następnie wykonaj tę samą operację, aby wybrać drugi punkt. Na koniec możesz kliknąć prawym przyciskiem myszy jeden z węzłów i wybrać opcję Znajdź ścieżkę.

Wywołania funkcji

https://chacker.pl/

Rysunek  przedstawia przykład funkcji składającej się z kilku bloków.

Funkcje są często znacznie większe niż w tym przykładzie. Często zdarza się, że chcemy przyjrzeć się nie tylko wszystkim odsyłaczom do funkcji, ale także wywołaniom funkcji. Aby uzyskać te informacje w jednym miejscu, wybierz opcję Widok | Otwórz widoki | Wywołania funkcji. Skrócony przykład na rysunku  przedstawia trzy wywołania aktualnie analizowanej funkcji oraz sporo wywołań tej funkcji.

Odsyłacze (odnośniki zewnętrzne)

https://chacker.pl/

Dość często zdarza się, że chcemy wiedzieć, skąd w pliku binarnym pochodzą wywołania interesującej nas funkcji. Są to tak zwane odsyłacze, znane również jako odnośniki zewnętrzne. Być może chcesz wiedzieć, skąd i kiedy wykonywane jest wywołanie funkcji HeapAlloc. Jedną z metod jest kliknięcie karty Importy, posortowanie kolumny Nazwa alfabetycznie i zlokalizowanie żądanej funkcji. Po zlokalizowaniu kliknij dwukrotnie nazwę, aby przejść do sekcji Import danych (.idata) żądanej funkcji, takiej jak pokazana na rysunku. Po wybraniu funkcji w sekcji .idata naciśnij CTRL-X, aby wyświetlić okno odnośników zewnętrznych. Rysunek przedstawia wyniki w naszym przykładzie HeapAlloc. Możemy wybrać dowolne z wymienionych połączeń, aby przejść do tej lokalizacji w pliku wejściowym.

UWAGA. Istnieje również klawisz skrótu odsyłacza do argumentów o nazwie JumpOpXref, który jest wykonywany przez naciśnięcie X. Przykładowym przypadkiem użycia może być zmienna przechowywana w segmencie danych programu, do którego odwołuje się wiele miejsc w segmencie kodu. Naciśnięcie przycisku X na zmiennej, gdy jest podświetlona, powoduje wyświetlenie powiązań do tej zmiennej