BinCAT – ciekawostka czy godny uwagi pomocnik reversera?

Ten wpis jest częścią cyklu “Od zera do bughuntera” – listę wszystkich postów znajdziesz tutaj.

Każdego miesiąca (odnoszę wrażenie, że czasami zdarzają się nawet cykle dzienne) pojawiają się interesujące projekty mające na celu wspierać osoby zajmujące się analizą binarną lub bezpieczeństwem na stosunkowo “niskim” poziomie. W tym obszarze każdemu znany jest disassembler / dekompilator IDA Pro. Nie trzeba poświecać wiele wysiłku na szukanie – pierwsza z brzegu lista dostępnych wtyczek lub ilość repozytorów na GitHub zawierających kod powiązany z tym projektem, mówią same za siebie.

Do interesujących projektów rozszerzających funkcjonalność IDA’y zalicza się również BinCAT autorstwa Airbus Security Lab (tak, oni są z tej firmy, która robi samoloty 😉 ). Jest to narzędzie do statycznej analizy kodu z możliwościami przeprowadzania rekonstrukcji typów, detekcji błędów powiązanych ze zwolnioną pamięcią oraz value i taint analysis (nie umiem tego przetłumaczyć na polski w taki sposób aby nie brzmiało śmiesznie np. jak “analiza splugawienia“). Wszystkie funkcjonalności można zastosować do architektur x86 / x64, ARM (7/8) oraz PowerPC.

Ostatnie dziecko Airbusa – pierwszy lot samolotu transportowego BelugaXL o ładowności ponad 50 ton.

Jak ułatwi mi to pracę?

Czas na “mięso” po nieco nietypowym wstępie – instalacja jest bardzo prosta, wystarczy uruchomić dostarczony skrypt za pomocą menu w IDA. Niestety, na kilka minut IDA uruchomiona w maszynie wirtualnej wyświetlała wesoło na belce okienka “Not Responding”. Po instalacji i załadowaniu interesującej binarki można przystąpić do pracy za pomocą skrótu klawiszowego CTRL+SHIFT+B. Do testów wykorzystam binarkę dostarczoną przez deweloperów projektu o nazwie get_key_x86 (tutaj można znaleźć tutorial), zawierającą prosty mechanizm walidacji klucza licencyjnego.

Niezbędnej konfiguracji (adresy startu i zakończenia analizy) dokonujemy w okienku BinCAT Configuration, zawierającym również preferowane początkowe wartości rejestrów procesora, inicjalizację stosu oraz środowiska wykonawczego BinCATa.

Po przeprowadzonej analizie, emulowane instrukcje przyjmują lekko szare tło na grafie wywołań IDA. BinCAT generuje bogaty log, w którym możemy zobaczyć charakterystykę przeprowadzanych operacji:

Po około trzydziestosekundowej pracy wtyczki możemy “skakać” po stanach i podglądać zawartość rejestrów…

… oraz pamięci:

Moim zdaniem najbardziej interesującą funkcją jest “analiza splugawienia”, która fajnie jest przedstawiona na grafie wywołań IDA i można wyklikać jej konfigurację z powyższego okna: prawoklik na wartości i wybór opcji “Override value or taint for selection and re-run…”.

Zielone i seledynowe oznaczenia wskazują na dostęp do zadanej zmiennej lub wartości – jest to nieoceniona pomoc przy analizie podatności lub “rozszywaniu” packerów / obfuskacji malware’u 🙂

Dla Czytelników lubiących bardziej wartką akcję niż parę screenów – nagranie analizy wykonania oraz taint.

Podsumowując: warto!

Moim największym zarzutem jest rozrzucenie konfiguracji i podglądów po wielu kartach, lecz to tylko moja natura malkontenta. BinCAT działa bardzo fajnie i jest świetnym narzędziem w rękach reversera. Niestety nie udało mi się przetestować wykrywania podatności Use-After-Free i Double Free (programami testowymi był kod z ASANa). Mimo tego jestem skłonny “wystawić” dobrą ocenę i zachęcam do korzystania oraz popularyzacji tego narzędzia 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.