Debugowanie aplikacji w architekturze MIPS #2 – Konfguracja IDA + GDB Server

Druga i ostatnia część poradnika budowy środowiska do zdalnego debugowania binarek. W tej części zaprezentuję sposób uruchomienia aplikacji na maszynie wirtualnej QEMU, uruchomienie GDB Servera oraz podłączenie się do niego IDA Pro. Po wykonaniu wszystkich kroków będziemy mogli np. debugować pliki wyciągnięte z firmware różnych urządzeń 🙂

Co będzie potrzebne?

1. Kopiowanie binarki do badania

Jeżeli zarządzamy maszyną wirtualną poprzez SSH najwygodniej będzie skopiować aplikację poprzez SCP.

httpd - binarka do kopiowania

192.168.126.129 - adres mojej VM z Debianem

Nie zapomnij o dwukropku po IP!

scp httpd root@192.168.126.129:

2. Rozwiązanie wszystkich zależności

Aby uruchomić aplikację musimy zagwarantować dostępność wymaganych zależności (oraz zależności tych zależności 😉 ), w przeciwnym wypadku system operacyjny będzie sobie z nas żartował w następujący sposób:

W tym celu przydatne będą takie narzędzia jak (wcześniej opisywany) readelf z przełącznikiem -d (biblioteki, oraz ich ścieżka).

readelf -d httpd

Oraz ldd, które pomoże nam zlokalizować braki w bibliotekach:

ldd httpd

3. Uruchomienie gdbserver

Po spełnieniu wszystkich zależności i poprawnym uruchomieniu aplikacji w normalnym środowisku (bez gdbserver) lub chroot, należy odblokować port na którym ma nasłuchiwać zdalny debbuger.

W moim środowisku korzystam z UFW (polecam!), dlatego na VM z Debianem wydaje polecenie:

ufw allow 5000

Status UFW

ufw status verbose

Następnie uruchamiam gdbserver na wcześniej odblokowanym porcie:

gdbserver –multi localhost:5000

Uruchomienie gdbserver “na sucho” daje mi możliwość podpięcia się do aktualnie działającego procesu, jak i również uruchomienia nowego (wszystko z poziomu IDA).

4. Podłączenie IDA do gdbserver

Po uruchomieniu IDA z górnegu menu wybieramy Debugger, następnie Attach oraz Remote GDB debugger:

Następnie wpisujemy IP maszyny wirtualnej z Debianem:

Określamy czy proces wybierzemy z listy działających procesów, czy też podamy jego PID:

Wpisujemy PID (który można poznać np. poleceniem ps aux):

W sytuacji kiedy wszystko pójdzie OK, zostaniemy o tym poinformowani stosownym komunikatem:

Po kliknięciu OK, pojawi się okno IDA Debuggera (kliknij, aby powiększyć):

Różnokolorowymi strzałkami zaznaczyłem najważniejsze przyciski akcji debuggera (opisane w kolejności od lewej do prawej):

Dotarliśmy do końca tego dwuczęściowego poradnika. Tak skonfigurowane środowisko może posłużyć do uruchomienia i debugowania większości binarek z różnych firmware i nie tylko (oczywiście uwzględniając specyficzne wymagania danej aplikacji).