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ń 🙂
Jeżeli zarządzamy maszyną wirtualną poprzez SSH najwygodniej będzie skopiować aplikację poprzez SCP.
scp httpd root@192.168.126.129:
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
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
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).
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).