picoCTF 2019 – podstawy reverse engineeringu dla Androida


Jakiś czas temu wystartowaliśmy w picoCTF 2019 i jako drużyna AvaHack zajęliśmy 381 miejsce na 23 tysiące zgłoszonych drużyn. Zawody CTF (capture the flag) polegają na grzebaniu w aplikacjach i wyszukiwaniu ich słabych punktów. W skrócie chodzi o to, żeby zdobyć flagę (którą jest ciąg znaków), które organizatorzy sprytnie pochowali w różnych miejscach aplikacji (używając do tego różnych sposobów ukrywania lub szyfrowania tychże flag).

Chcę się podzielić rozwiązaniami zadań z działu reverse engineering aplikacji Androida. Jest to o tyle ważne dla testerów, że właśnie te zawody uświadomiły mi na jakie problemy (bezpieczeństwa i jakości) możemy natrafić podczas testowania aplikacji mobilnych.

Wszystkie 5 zadań (aplikacji androida) można pobrać stąd: http://scvconsultants.com/apk/.


Przygotowanie środowiska

Będziemy potrzebować dwóch narzędzi:

Do pracy będziemy potrzebować IntelliJ i dokumentacji Dalvik Opcodes (dla późniejszych zadań).

Instrukcja instalacji apktool jest dość prosta. Sprowadza się do pobrania pliku .jar, wrzucenia go do miejsca które jest dodane do PATH i pobrania odpowiedniego wrappera (.bat w przypadku windowsa lub skryptu bash dla Linux/MacOS).

Instalacja smalidea jest też prosta, trzeba tylko pobrać odpowiedni plik .zip (nie .jar) i zainstalować jako plugin do IntelliJ wybierając opcję „zainstaluj plugin z dysku).


Zadanie 0 – sprawdźmy logi aplikacji

Po poprawnym ustawieniu apktool, dekompilacja pierwszej aplikacji powinna wyglądać mniej więcej tak:

Dekompilacja aplikacji Androida za pomocą apktool

Żeby debugować aplikację, musimy mieć SDK Androida, możemy je zainstalować z poziomu IntelliJ, klikając Edit a następnie przechodząc przez instalator (to może potrwać kilkanaście-kilkadziesiąt minut w zależności od łącza):

Po otwarciu folderu /zero w IntelliJ powinno automatycznie zaproponować nam konfigurację środowiska Android. Klikamy na folder /smali i ustawiamy go na niebiesko, komendą: Mark directory as -> Sources Root

Następnie możemy utworzyć sobie wirtualny telefon na androidzie wybierając odpowiednią opcję z menu Tools -> Android -> AVD Manager. Odpali to kreator wirtualnego urządzenia, w którym musimy wybrać model (ja wybrałem Nexus 5S, oraz obraz systemu Android 29)

Uruchomienie wirtualnego telefonu z Androidem z poziomu IntelliJ

Jeżeli wszystko poszło dobrze to możemy uruchomić emulator Androida i zainstalować aplikację zero.apk w emulatorze (przeciągając ją na emulator) i uruchomić.

Zainstalowana aplikacja zero.apk w emulatorze Androida

Po czym wracam do IntelliJ i odpalamy zakładkę LogCat na dole (możliwe że IntelliJ będzie chciał skonfigurować SDK). Odpalamy aplikację, wpisujemy byle co i klikamy na guzik HELLO, I AM A BUTTON

zero.apk

Po czym wracamy do LogCata i sprawdzamy logi:

Oczom naszym ukazuje się poprawna flaga, która nie jest hardkodowana co prawda w aplikacji, ale istnieje metoda w jednej z bibliotek, która zawsze ją zwróci. I ta metoda jest wywoływana podczas wysyłania logów aplikacji.

Skąd wiedziałem, żeby sprawdzić logi? Otóż linijka poniżej wywołuje statyczną metodę logowania z biblioteki libhellojni.so która znajduje się w katalogu /lib zdekompilowanego kodu (o tym więcej w następnej części). A ta metoda zwraca nam stringa z poprawnym hasłem.

1
invoke-static {v1, v0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

Podsumowanie problemu

Jeżeli zauważycie hasła, loginy lub tokeny w logach aplikacji – to traktujcie to proszę zawsze jako błąd krytyczny aplikacji (tak, to zawsze jest P1), który powinien zostać zgłoszony bezzwłocznie do zespołu developerskiego.

Tak samo powinniście reagować na tokeny, hasła, metody zwracające poprawne hasło podczas code review (o ile w nim uczestniczycie). Taki kod powinien zostać odrzucony z wyjaśnieniem co (i być może jak) należy poprawić.

PS. Wiem, że nie użyliśmy wciąż debuggera, ale przyda nam się do rozwiązania kolejnych zadań.



Otagowano: , , , ,

Kategoria: reverse engineering | security

Jedna odpowiedź do “picoCTF 2019 – podstawy reverse engineeringu dla Androida”