Ulotne zabawy z Androidem, czyli o akwizycji pamięci RAM słów kilka

Akwizycja danych z urzą­dzeń mobilnych to w dzisiejszym świecie rzecz zupełnie normalna. Co więcej, rzecz obowiązko­wa przy zabezpieczaniu wszelkich dowodów elek­tronicznych.

Pamięci tych pozornie małych urządzeń są ol­brzymie, a zgromadzone w nich dane niejedno­krotnie zawierają więcej wrażliwych informacji niż dysk komputera. Wiąże się to przede wszystkim z fak­tem, że użytkownikom łatwiej jest sięgnąć do kieszeni i wyjąć nowocze­snego smartfona, aniżeli chodzić po ulicy z włączonym laptopem. Świad­czą o tym wszelkie statystyki, które wprost ukazują ogromną przewagę przeglądania Internetu za pomocą urządzeń mobilnych właśnie.

Naj­lepiej obrazuje to wykres (Rys. 1), który przedstawia jak na przestrze­ni lat zmieniała się zależność korzy­stania z Internetu na stacjach ro­boczych i urządzeniach mobilnych.  Możemy śmiało przyjąć, że ów trend będzie się utrzymywał. Niezaprze­czalnym jest również fakt, że zna­komita część urządzeń mobilnych to smartfony bądź tablety wyposa­żone w system operacyjny Android.

Rys. 1

Android to system operacyjny dla urządzeń mobilnych korzystający z jądra systemu Linux. O możliwo­ściach odczytu danych z pamięci nie­ulotnych, czyli pamięciach ROM na ła­mach Magazynu Informatyki Śledczej i Bezpieczeństwa IT pisano już niejed­nokrotnie. Ja jednak chciałbym sku­pić się na akwizycji pamięci ulotnych, znanych szerzej jako pamięci RAM. RAM czyli Random-Access Memo­ry to pamięć stosowana głównie jako pamięć operacyjna urządzenia. Jest pamięcią ulotną co w praktyce oznacza, iż utrata zasilania wiąże się z utratą danych przechowywanych w tej pamięci. W systemie opera­cyjnym Android pamięć RAM wyko­rzystywana jest przede wszystkim jako miejsce przechowywania da­nych z uruchamianych aplikacji, a co za tym idzie – wrażliwych danych. W związku z tym oraz z naturą syste­mu Linux, akwizycja pamięci RAM to typowy przykład Live Forensics. O ile w systemach Linux akwizycja RAM wiąże się nieodłącznie z dostępem do punktu /dev/mem, o tyle syste­my Android skrzętnie ukrywają taki dostęp. Moduł jądra Linux o nazwie fmem, pozwala na ustalenie pozycji pamięci RAM i sprawdzenie czy ob­szar to faktycznie pamięć RAM, a nie część pamięci wewnętrznej urządze­nia, a następnie do wykonania DUM­P’a określonego obszaru (Rys. 2).

Rys. 2

Niestety w architekturze ARM funkcja page_is_ram, czyli określenie zakresu pamięci RAM nie istnieje. Dlatego sys­tem Android nie jest od razu otwarty na analizę pamięci RAM. Należy wy­konać odpowiednie kroki, które przy­gotują urządzenie do takiej akwizycji. Pierwszą i najważniejszą rzeczą jest tzw. rootowanie. Root to nazwa kon­ta w systemie uniksowym. Najprost­szym tłumaczeniu root to dostęp do wszystkich plików systemowych oraz możliwości dowolnego ich modyfiko­wania. Metody rootowania są różne – root może być permanentny lub tym­czasowy – ale cel jest zawsze taki sam. Drugą częścią jest przygotowa­nie odpowiedniego modułu ją­dra, które będzie w stanie zin­terpretować odpowiedni zakres pamięci RAM. W tym celu można po­służyć się oprogramowaniem LiME, które potrafi ładować odpowiednie moduły do jądra systemu Linux. Mając przygotowany odpowiedni moduł, aplikacja LiME interpretuje adresy pamięci RAM (jak na grafice powyżej) dając możliwość pozyska­nia obrazu pamięci RAM w formie pliku. Wówczas analiza odbywa się już wyłącznie na pliku wynikowym, którego rozmiar jest identyczny jak fizyczna kość pamięci RAM (np. 512MB pamięci RAM w urządzeniu = 5 12MB plik wynikowy) ( Rys. 3 ).

Rys. 3

Analizę pliku RAM można dokony­wać za pomocą np. oprogramo­wania Volatility, które zawiera od­powiednie profile pozwalające na interpretację odczytu. Po użyciu ko­mend zwracane są wyniki (Rys. 4).

Rys. 4

Do ekstrakcji plików z pamięci RAM możemy wykorzystać np. opro­gramowanie XACT (część pakie­tu XRY), które w szybki i przyjem­ny sposób przeszukuje obraz pod względem sygnatur plików (Rys. 5).

Rys. 5

Na przykładzie widać, że analiza pamięci RAM na urzą­dzeniach z systemem Android jest możliwa, a dane są możliwe do ła­twego zinterpretowania. Jednak przygotowanie urządzenia do od­czytu tej części pamięci jest kłopotli­we. Być może z którymś wydaniem kolejnej wersji Androida zostaną zaimplementowane mechanizmy, które pozwolą na łatwiejszy dostęp do tego cennego obszaru pamięci.