Przegląd funkcjonalności

https://chacker.pl/

Chociaż Ghidra oferuje wiele funkcji i funkcjonalności, dla uproszczenia skupimy się tylko na najbardziej podstawowych i korzystnych funkcjach.

Okno projektu

Okno projektu jest głównym oknem dostępnym po załadowaniu Ghidry; zapewnia funkcje zarządzania projektami, pliki docelowe aktywnego projektu, skrzynki narzędziowe i ogólną definicję obszaru roboczego. Stwórzmy nasz projekt i rozpocznijmy pracę z wcześniej skompilowanymi plikami docelowymi. Uruchom Ghidrę, jeśli jeszcze tego nie zrobiłeś, a następnie wykonaj następujące kroki:

  1. Utwórz nowy projekt klikając Plik | Nowy lub naciskając CTRL-N. Ustawimy ten projekt jako prywatny (czyli projekt niewspółdzielony), a także ustalimy nazwę projektu i folder, w którym będzie się on znajdować.
  2. Dołącz ucznia i pliki binarne z poprawkami do projektu, klikając Plik | Importuj lub naciskając I dla każdego z nich. Spowoduje to wykrycie formatu i języka pliku binarnego (w tym przypadku ELF skompilowany z x86:LE:64:default:gcc), jak pokazano poniżej.

  1. Kliknij przycisk OK. Zostanie wyświetlone podsumowanie wyników importu z metadanymi pliku i właściwościami nagłówka.
  2. Kliknij dwukrotnie plik docelowy uczniów, aby uruchomić przeglądarkę kodów i rozpocząć analizę.

Analiza

Gdy tylko Ghidra załaduje program, sugeruje analizę programu, jeśli nie zostało to już wcześniej zrobione:

Analizator wykonuje wiele zadań, ale najważniejsze z nich zostały pokazane tutaj i opisane poniżej:

  • Analizator funkcji Przypisuje adresy i nazwy funkcjom na podstawie ich symboli lub poprzez wykrywanie prologów i epilogów funkcji podczas deasemblacji kodu.
  • Analizator stosu Wnioskuje o rozmiarach zmiennych stosu i odniesieniach w oparciu o operacje na podstawie stosu i wskaźniku na początku funkcji.
  • Analizator argumentów Przypisuje i rozwiązuje odniesienia do adresów i symboli w oparciu o operandy skalarne.
  • Analizator odwołań do danych Rozpoznaje adresy i odniesienia do wartości danych i oczywistych typów danych w oparciu o lokalizację sekcji pamięci i argumenty w kodzie.

Analiza | Podmenu One-Shot umożliwia uruchomienie wielu lub wszystkich różnych zadań analitycznych na wybranym bloku kodu.

Ustawianie obszaru roboczego projektu

https://chacker.pl/

Pierwszą rzeczą, którą zobaczysz po uruchomieniu Ghidry, jest okno projektu i wyskakujące okienko „Wskazówka dnia” (które zalecamy sprawdzać od czasu do czasu). Możesz zamknąć to wyskakujące okienko, aby wyświetlić okno projektu. W oknie projektu możesz zarządzać swoimi projektami, obszarem roboczym i narzędziami. Domyślnie Ghidra jest dostarczana z przeglądarką kodu i narzędziami do śledzenia wersji. Pod koniec przeprowadzimy Cię przez proces instalacji narzędzia Debugger.

Instalacja i Szybki Start

https://chacker.pl/

Zacznijmy od zainstalowania zależności wykonawczej Java 11 dla Ghidry w domyślnym systemie Kali:

Następnie pobierz pakiet wersji v9.2.3 Ghidry z oficjalnej strony internetowej Ghidra (https://ghidra-sre.org) i rozpakuj go do swojego katalogu domowego:

Następnie pobierz pakiet wersji v9.2.3 Ghidry z oficjalnej strony internetowej Ghidra (https://ghidra-sre.org) i rozpakuj go do swojego katalogu domowego:

Powinno to uruchomić Ghidrę po raz pierwszy i wyświetlić umowę użytkownika końcowego.

Tworzenie naszego pierwszego projektu

https://chacker.pl/

Skompilujemy przykładowy program odpowiedni do zaprezentowania cech i funkcjonalności Ghidry. Ten przykładowy program to narzędzie do zarządzania ocenami uczniów, które ładuje plik CSV i zawiera lukę w zabezpieczeniach naszych zadań związanych z analizą praktyczną. Udostępniane są pliki studenci.c, studenci-patched.c i studenci.csv w folderze ~/GHHv6/ch04, pod warunkiem, że wcześniej sklonowałeś repozytorium Git Gray Hat Hacking 6th Edition. Uruchom następujące polecenia w oknie terminala, aby skompilować dwie wersje programu (domyślną wersję zawierającą lukę i wersję poprawioną):

Teraz, gdy mamy gotowe programy docelowe, możemy stworzyć projekt do pracy z nimi i zapoznać się z funkcjami i funkcjonalnością Ghidry.

Wprowadzenie do Ghidry

https://chacker.pl/

Ghidra to zestaw narzędzi do inżynierii wstecznej oprogramowania (SRE) opracowany i utrzymywany przez Dyrekcję ds. Badań Agencji Bezpieczeństwa Narodowego w celu wsparcia jej misji w zakresie cyberbezpieczeństwa. Ghidra została udostępniona publicznie i otwarta w okresie od marca do kwietnia 2019 r., ale została przetestowana w walce prywatnie przez agencję. Można go używać do analizy złośliwego oprogramowania, badania podatności, opracowywania exploitów, a także wielu innych zadań związanych z inżynierią wsteczną systemów wbudowanych i oprogramowania sprzętowego. Ghidra obsługuje różne architektury, platformy i formaty binarne, zapewniając bardzo interesujący zestaw funkcji. Ponadto jego społeczność szybko rośnie, ponieważ Ghidra zapewniła doskonałą, bezpłatną i otwartą alternatywę dla innych świetnych narzędzi, takich jak IDA Pro.

heapme_demo.c

https://chacker.pl/

Na początek utwórz i skompiluj następujący program:

Następnie wykonaj następujące kroki (które zawierają odniesienia do kodu

poniżej), aby zobaczyć HeapME w akcji:

  1. Użyj gdb do debugowania programu heapme_demo (1).
  2. Wykonaj polecenie gdb start (2).
  3. Uruchom wtyczkę pomocniczą do analizy sterty Gef (3).
  4. Przejdź do strony internetowej HeapME (https://heapme.f2tc.com/).
  5. Zarejestruj się i zaloguj.
  6. Utwórz i skopiuj nowy adres URL i klucz HeapME.
  7. Po skopiowaniu kliknij przycisk Dalej.
  8. Wróć do gdb i wklej linię heapme init

https://heapme.f2tc.com/ <id> <klucz> (4) .

  1. Będziemy używać heapme watch malloc (5) i heapme watch free (6), aby zaktualizować informacje o wszystkich fragmentach sterty i wolnych pojemnikach, ilekroć te

trafione zostaną punkty przerwania.

  1. Wykonaj c lub kontynuuj (7) . Powinieneś zobaczyć adres URL HeapME

aktualizowane w czasie rzeczywistym. Jest to także dobra okazja, aby pobawić się poleceniami sterty Gef (pojemniki sterty, fragmenty sterty itd.).

Przedstawiliśmy listę przydatnych narzędzi, które znacząco usprawnią proces analizy dynamicznej. Omówiliśmy także sposoby rozszerzenia i automatyzacji procesu debugowania za pomocą gdb. Przyjrzeliśmy się podatnemu na ataki kodowi sprawdzającemu koncepcję z exploitem napisanym w Pythonie przy użyciu środowiska programistycznego pwntools. Na koniec zbadaliśmy narzędzie do analizy i współpracy sterty HeapME (Heap Made Easy).

HeapME (Heap Made Easy) Narzędzie do analizy sterty i współpracy

https://chacker.pl/

Heap Made Easy (HeapME)12 to narzędzie typu open source opracowane przez Huáscara Tejedę , aby pomóc uprościć proces analizy sterty i współpracy. Oto lista niektórych funkcji HeapME:

  • Ponadczasowe debugowanie sterty
  • Śledzenie wszystkich stanów porcji/wolnych pojemników
  • Bezproblemowa współpraca w zakresie analiz
  • Udostępniony link do wizualizacji tylko do odczytu
  • Świetne dla CTF

• Wsparcie dla ptmalloc2 w aktualnej wersji

leak-bof.c

https://chacker.pl/

Najpierw kompilujemy kod podatny na przepełnienie bufora:

Następnie uruchamiamy exploit napisany w Pythonie za pomocą pwntools:

Można tu zastosować mniejszy i prostszy exploit, ale celowo użyjemy nieco bardziej skomplikowanego exploita, aby pokazać jego możliwości. Oto wynik:

Podsumowanie funkcji

https://chacker.pl/

Otwórzmy nasz terminal Python, zaimportuj moduł pwn i poznajmy niektóre z potężnych funkcji Pwntools:

Inne funkcje obejmują funkcje pomagające w typowych prymitywach i technikach eksploatacji, takich jak budowanie łańcuchów ROP, kodów powłoki i struktur SROP, pomocników dynamicznych wycieków pamięci, wykorzystywanie ciągów formatujących, generowanie wzorców cyklicznych i wiele innych. Opracowujemy dwuetapowy exploit, który omija ASLR, PIE i NX przy użyciu ładunku ROP + SROP.