Mac OS X

Konstantin Sapronov

Rok temu u偶ytkownikami komputer贸w firmy Apple byli g艂贸wnie projektanci i specjali艣ci DTP, fotografowie oraz muzycy. Poprzedni rok okaza艂 si臋 jednak pod wieloma wzgl臋dami prze艂omowy dla komputer贸w Mac. Po tym, jak firma Apple og艂osi艂a, 偶e zamierza wytwarza膰 komputery z procesorami Intel, wiele os贸b zacz臋艂o rozwa偶a膰 wykorzystywanie takich komputer贸w w domu. R贸wnie偶 programi艣ci dostrzegli wzrost popularno艣ci systemu Mac OS X i zacz臋li sprzedawa膰 w艂asne produkty dla tej platformy.

Mimo to Mac OS X nadal stanowi zagadk臋 zar贸wno dla wielu u偶ytkownik贸w, jak i specjalist贸w od bezpiecze艅stwa IT. Artyku艂 ten ma pom贸c czytelnikom lepiej zrozumie膰 funkcje systemu Mac OS X, kt贸re s膮 krytyczne podczas badania szkodliwych program贸w przeznaczonych dla tego systemu operacyjnego.

Nale偶y zauwa偶y膰, 偶e Mac OS X jest uniksowym systemem operacyjnym i posiada wiele funkcji z innych system贸w uniksowych. Z tego powodu artyku艂 ten b臋dzie bardziej przyst臋pny dla u偶ytkownik贸w posiadaj膮cych do艣wiadczenie z systemami takimi jak Linux czy FreeBSD. Pewne do艣wiadczenie w badaniu program贸w dla dowolnego typu systemu operacyjnego r贸wnie偶 u艂atwi zrozumienie tego artyku艂u.

Kluczowe funkcje systemu Mac OS X

Podczas analizy program贸w, w tym tak偶e tych szkodliwych, zawsze przydatna jest znajomo艣膰 kluczowych funkcji systemu operacyjnego. Mac OS X opiera si臋 na Uniksie, co jest widoczne w designie OS X oraz og贸lnych zasadach dzia艂ania systemu. System ten przej膮艂 interakcj臋 mi臋dzyprocesorow膮 od Macha oraz stos sieciowy od BSD.

Odwo艂ania systemowe z system贸w Mach oraz BSD

Xnu - j膮dro Mac OS X - opiera si臋 na j膮drach systemu Mach oraz FreeBSD, zawiera jednak r贸wnie偶 funkcje z MkLinux, NetBSD, OpenBSD i kilku projekt贸w rozwojowych Macha. Mac OS X obs艂uguje odwo艂ania systemowe zar贸wno z systemu Mach, jak i BSD. Poniewa偶 j膮dro systemu OS X opiera si臋 w r贸wnym stopniu na systemie operacyjnym Mach, jak i FreeBSD, j膮dro systemu Mac OS X - xnu - zawiera dwie tabele odwo艂a艅 systemowych (Mach i BSD) i obs艂uguje API dla system贸w BSD i Mach.

艢rodowisko Runtime

W celu zapewnienia obs艂ugi poprzednich system贸w operacyjnych Mac OS X posiada 艣rodowisko runtime z trzema komponentami:

  1. Dyld Runtime Environment, oparty na dynamicznym programie 艂aduj膮cym (dyld dynamic loader).
  2. CFM Runtime Environment. Ta spu艣cizna po OS 9 zapewnia obs艂ug臋 aplikacji, kt贸re nie mog膮 zosta膰 uruchomione poprzez dyld, ale wykorzystuj膮 mo偶liwo艣ci Mac OS X. Zosta艂o to zaimplementowane w bibliotece Carbon.
  3. Classic Runtime Environment - 艣rodowisko wykorzystywane do uruchamiania starszych aplikacji dla OS 9 w OS X.

Dzi臋ki powy偶szym funkcjom w systemie Mac OS X mo偶na uruchomi膰 szereg aplikacji, 艂膮cznie ze starszymi wersjami systemu operacyjnego Mac.

Format pliku wykonywalnego Mach-O

W systemie Mac OS X prawie wszystkie pliki, kt贸re zawieraj膮 kod wykonywalny, 艂膮cznie z aplikacjami, bibliotekami i modu艂ami j膮dra, posiadaj膮 format Mach-O.

Format Mach-O nie zosta艂 pierwotnie stworzony przez firm臋 Apple; zosta艂 zaprojektowany przez Open Source Foundation dla systemu operacyjnego OSF/1 (kt贸ry jest oparty na systemie Mach) i zaadaptowany przez firm臋 Apple dla architektury x86 w ramach projektu OpenStep.

Format pliku Mach-O oraz specyfikacje Application Binary Interface (ABI) przedstawiaj膮, w jaki spos贸b plik wykonywalny powinien zosta膰 za艂adowany i uruchomiony przez j膮dro. Przekazuj膮 systemowi operacyjnemu nast臋puj膮ce informacje:

  • w jaki spos贸b dzia艂a dynamiczny program 艂aduj膮cy,
  • jak za艂adowa膰 oddzielne biblioteki,
  • jak zorganizowa膰 przestrze艅 adresow膮 procesu,
  • gdzie znale藕膰 punkt wej艣cia,
  • itp.

Poniewa偶 Mach-O jest g艂贸wnym formatem plik贸w wykonywalnych w systemie Mac OS X, przyjrzyjmy si臋 dok艂adniej jego strukturze.

Struktura Mach-O

Pliki Mach-O mo偶na w przybli偶eniu podzieli膰 na trzy cz臋艣ci: nag艂贸wek, polecenia 艂adowania oraz segmenty, kt贸re mog膮 sk艂ada膰 si臋 z kilku sekcji. Nag艂贸wek i polecenia 艂adowania okre艣laj膮 g艂贸wne cechy pliku, a segment danych zawiera zestaw bajt贸w, kt贸re 艂膮cz膮 si臋 z poleceniami 艂adowania.

Nag艂贸wek. Pierwsze cztery bajty w nag艂贸wku okre艣laj膮 tak zwany magiczny numer, kt贸ry identyfikuje plik jako 32- lub 64-bitowy. Pomaga on r贸wnie偶 okre艣li膰 porz膮dek bajt贸w dla procesora. Nag艂贸wek okre艣la architektur臋, dla kt贸rej plik zosta艂 skompilowany. Dzi臋ki temu j膮dro mo偶e zagwarantowa膰, 偶e pliki zostan膮 uruchomione tylko na platformie, dla kt贸rej plik zosta艂 skompilowany. Czasami pliki binarne mog膮 zawiera膰 kod dla wi臋cej ni偶 jednej architektury. Format ten znany jest jako Universal Binaries. W tym przypadku plik rozpocznie si臋 od rozszerzonego nag艂贸wka (fat header).

Polecenia 艂adowania. Obszar polece艅 艂adowania zawiera list臋 polece艅, kt贸re informuj膮 j膮dro, w jaki spos贸b 艂adowa膰 r贸偶ne segmenty pliku. Polecenia te opisuj膮, w jaki spos贸b ka偶dy segment jest zbalansowany w pami臋ci, jakie prawa dost臋pu posiada i gdzie jest zlokalizowany w pami臋ci.

Segmenty i sekcje. Pliki wykonywalne w formacie Mach-O posiadaj膮 zazwyczaj 5 segment贸w:

  • __PAGEZERO jest zlokalizowany pod zerowym adresem wirtualnym i nie posiada 偶adnego rodzaju ochrony. Segment ten nie posiada obszaru w pliku ani na dysku.
  • __TEXT zawiera dane, do kt贸rych mo偶na uzyska膰 dost臋p jedynie w celu odczytu lub wykonania.
  • __DATA zawiera dane, do kt贸rych mo偶na co艣 dopisa膰. Sekcja ta jest oznaczona jako copy-on-write.
  • __OBJC zawiera dane wykorzystywane dla 艣rodowisk uruchomieniowych Objective-C.
  • __LINKEDIT zawiera dane wykorzystywane do ustanowienia dynamicznych po艂膮cze艅.

Segmenty __TEXT oraz __DATA zawieraj膮 zero lub wi臋cej sekcji. Ka偶da sekcja zawiera pewien rodzaj danych, np. kod wykonywalny, sta艂e, ci膮gi itd. W ten spos贸b kod wykonywalny i niewykonywalny jest przechowywany w tym samym segmencie, ale oddzielnie.

Narz臋dzia analizy program贸w

Wyr贸偶nia si臋 dwa g艂贸wne podej艣cia do analizy program贸w: dynamiczne i statyczne. Analiza dynamiczna polega na uruchomieniu kodu programu w obr臋bie debuggera lub 艣rodowiska wirtualnego oraz analizowania jego zachowania. Statyczna analiza programu wykorzystuje dezasembler bez uruchamiania kodu.

To, kt贸re podej艣cie jest najlepsze, zale偶y od indywidualnej sytuacji. Metody te nie wykluczaj膮 si臋 wzajemnie i cz臋sto jedna stosowana jest jako dope艂nienie drugiej.

Narz臋dzia analizy dynamicznej

Podobnie jak w przypadku wi臋kszo艣ci system贸w uniksowych, Mac OS X oferuje wiele narz臋dzi, kt贸re mog膮 by膰 przydatne w dynamicznej analizie aplikacji oraz diagnostyce systemu. Wiele z nich przesz艂o do systemu Mac z Uniksa, jednak s膮 r贸wnie偶 programy, kt贸re zosta艂y zaprojektowane wy艂膮cznie dla Mac OS X. Poni偶ej przedstawiamy kr贸tkie opisy kilku narz臋dzi, kt贸re mog膮 zosta膰 zainstalowane z pakietu dystrybucyjnego Mac OS X.

Narz臋dzia te mo偶na podzieli膰 na dwie kategorie:

  1. Narz臋dzia wykorzystywane do badania proces贸w:

  • fs_usage — dostarcza informacje o odwo艂aniach systemowych odnosz膮cych si臋 do aktywno艣ci systemu plik贸w;
  • heap — wyszczeg贸lnia wszystkie bloki pami臋ci przydzielone do pami臋ci dynamicznej przez oddzielny proces;

  • lsof — wy艣wietla pliki otwierane przez r贸偶ne procesy;

  • top — wy艣wietla statystyki wykorzystania dla r贸偶nych zasob贸w systemowych;
  • vm_stat — wy艣wietla statystyki wykorzystania pami臋ci wirtualnej;
  • gdb — debugger umo偶liwiaj膮cy zdalne usuwanie b艂臋d贸w z program贸w;
  • ddb — debugger j膮dra wymagaj膮cy po艂膮czenia poprzez port szeregowy;
  • ktrace — 艣ledzi informacje o zdarzeniach systemowych na poziomie j膮dra dla okre艣lonych proces贸w;
  • kdump — wy艣wietla informacje generowane przez program ktrace;
  • sc_usage — wy艣wietla statystyki dla okre艣lonego procesu, takie jak wykorzystanie czasu procesora, wykorzystanie odwo艂a艅 systemowych itd.

  • Narz臋dzia sieciowe.
  • Wymienione poni偶ej narz臋dzia systemowe s膮 dobrze znane w 艣wiecie Uniksa.

    • netstat — dostarcza r贸偶ne dane dotycz膮ce podsystemu sieci;

    • tcpdump — wy艣wietla ruch sieciowy.

    Wiele innych narz臋dzi sieciowych, dobrze znanych u偶ytkownikom Uniksa, mo偶e by膰 r贸wnie偶 wykorzystanych przez system Mac OS X, np. nmap oraz WireShark.

    Nale偶y zauwa偶y膰, 偶e wi臋kszo艣膰 program贸w opartych na Uniksie z otwartym dost臋pem do kodu 藕r贸d艂owego mo偶na 艂atwo przystosowa膰 do dzia艂ania w systemie Mac OS X. Do艣wiadczony u偶ytkownik Uniksa b臋dzie w stanie stworzy膰 艣rodowisko pracy, kt贸re jest niemal identyczne jak znane 艣rodowisko uniksowe.

    Narz臋dzia analizy statycznej

    Stosunkowo cz臋sto nie ma mo偶liwo艣ci uruchomienia analizowanego programu. Czasami, ze wzgl臋d贸w bezpiecze艅stwa, lepiej jest nie uruchamia膰 programu.

    Poniewa偶 formatem plik贸w wykonywalnych w systemie Mac OS X jest Mach-O, podczas analizy statycznej w tym systemie operacyjnym nale偶y uwzgl臋dni膰 kilka rzeczy.

    Podstawowym narz臋dziem do analizy plik贸w Mach-O jest program otool, kt贸ry mo偶e by膰 wykorzystany w celu uzyskania informacji o nag艂贸wku pliku, poleceniach 艂adowania oraz punkcie wej艣cia. Mo偶na go nawet u偶y膰 do deasemblacji zawarto艣ci sekcji zawieraj膮cych kod wykonywalny.

    • file - okre艣la typ plik贸w;

    • otool - wykorzystywany do analizowania plik贸w Mach-O;

    • xxd - umo偶liwia przek艂adanie plik贸w binarnych na format szesnastkowy i odwrotnie;
    • IDAPro - dezasembler.

    Wraz z rosn膮c膮 popularno艣ci膮 systemu Mac OS X dzia艂aj膮cego z procesorem Intel wielu producent贸w oprogramowania opublikowa艂o wersje swoich aplikacji dla tej platformy. Na li艣cie system贸w operacyjnych obs艂ugiwanych przez now膮 wersj臋 systemu Mac OS X, 5.1, znajduje si臋 IDAPro.

    Znacznie u艂atwi to 偶ycie u偶ytkownik贸w migruj膮cych z systemu Windows. Niekiedy wykorzystywanie IDAPro umo偶liwia szybsze i 艂atwiejsze wykonywanie niekt贸rych zada艅 ni偶 przy u偶yciu standardowych narz臋dzi Mac OS X.

    Analiza szkodliwego kodu: przyk艂ady

    Aby przedstawi膰 kilka przyk艂ad贸w, przeanalizujemy szkodniki IM-Worm.OSX.Leap oraz Virus.OSX.Macarena przy u偶yciu niekt贸rych z wymienionych wy偶ej narz臋dzi. Nale偶y zauwa偶y膰, 偶e badane szkodliwe programy s膮 programami typu "proof of concept"; nie posiadaj膮 szkodliwej funkcji i nie stanowi膮 powa偶nego zagro偶enia. Ich g艂贸wnym celem jest pokazanie, 偶e stworzenie takiego programu jest mo偶liwe.

    IM-Worm.OSX.Leap

    Leap nie potrafi rozprzestrzenia膰 si臋 za po艣rednictwem Internetu - w tym celu wykorzystuje komunikator iChat. W pierwszym etapie Leap rozprzestrzenia si臋 przy u偶yciu aplikacji iChat jako za艂膮cznik do pliku w RapidShare, "udaj膮c", 偶e plik zawiera zrzuty ekranu najnowszej wersji systemu Mac OS X, Leopard. Aby maszyna zosta艂a zainfekowana, odbiorca musi klikn膮膰 odsy艂acz, potwierdzi膰 pobranie pliku, rozpakowa膰 plik, a nast臋pnie otworzy膰 go. Po tym, jak komputer zostanie zainfekowany, plik wy艣le siebie (bez 偶adnych modyfikacji) do wszystkich z listy kontakt贸w u偶ytkownika poprzez Bonjour.

    Leap rozprzestrzenia si臋 jako plik o nazwie latestpics.tgz. Po rozpakowaniu pliku w Finderze, oka偶e si臋, 偶e jest to plik jpeg.

    Poniewa偶 Leap wykorzystuje Spotlight, b臋dzie dzia艂a艂 tylko w wersji Tiger (wersja 10.4.x systemu Mac OS X). Do uruchomienia Leap wymaga InputManager, mimo 偶e nie dzia艂a w systemach dla x86. Co wi臋cej, plik binarny zawiera kod tylko dla PowerPC. W rezultacie, Leap dzia艂a tylko na komputerach z PowerPC.

    W celu rozpocz臋cia analizy musimy okre艣li膰 rzeczywisty format pliku latestpics. Najpierw uruchamiamy narz臋dzie file z argumentem latestpics: #file latestpics. Okazuje si臋, 偶e plik ten jest w rzeczywisto艣ci plikiem Mach-O.

    Nast臋pnie wykorzystujemy otool, aby przejrze膰 nag艂贸wek pliku binarnego: #otool -h latestpics.

    Potem mo偶na zobaczy膰 punkt wej艣cia Leapa. Punkt wej艣cia w pliku w formacie Mach-O mo偶na znale藕膰 przy u偶yciu #:otool -l latestpics, kt贸ry wy艣wietla polecenia 艂adowania. W tym przypadku interesuj膮cym poleceniem jest LC_UNIXTHREAD, kt贸re wy艣wietla pocz膮tkowy stan g艂贸wnego w膮tku procesu. Na PowerPC b臋dziemy chcieli znale藕膰 zawarto艣膰 rejestru srr0 - jest to punkt wej艣cia.

    Nast臋pnie wykorzystujemy nm - narz臋dzie znane wszystkim u偶ytkownikom Uniksa - w celu przejrzenia listy wszystkich symboli w pliku binarnym, 艂膮cznie z poni偶szymi funkcjami. Ich nazwy m贸wi膮 same za siebie i potwierdzaj膮, 偶e jest to potencjalnie szkodliwy plik:

    • _copySelf
    • _infect
    • _infectApps

    Teraz mo偶emy przyjrze膰 si臋 bli偶ej kodowi, wykorzystuj膮c narz臋dzie otool -vt, kt贸re pozwoli nam przegl膮da膰 zawarto艣膰 sekcji w segmencie __TEXT, gdzie jest zlokalizowany kod wykonywalny pliku latestpics:

    Ci膮gi s膮 wysy艂ane do funkcji systemowych, s膮 jednak szyfrowane za pomoc膮 funkcji _xor:

    Po odszyfrowaniu ci膮g贸w otrzymujemy nast臋puj膮cy rezultat:

    /usr/bin/tar -zxf /tmp/hook -C /tmp
    /Library/InputManagers
    /bin/rm -rf /Library/InputManagers/apphook
    /bin/mv -f /tmp/apphook /Library/InputManagers
    ~/Library/InputManagers
    /bin/rm -rf ~/Library/InputManagers/apphook
    /bin/mv -f /tmp/apphook ~/Library/InputManagers
    %s/Contents/MacOS/%s /bin/cp '%s' '%s/..namedfork/rsrc'
    /bin/cp -f '%s' '%s'
    (kMDItemKind == 'Application') (kMDItemLastUsedDate >= $time.this_month)  /usr/bin/ditto %s /tmp/latestpics /usr/bin/gzip -f -q /tmp/latestpics

    Analiza tych ci膮g贸w pokazuje, co w艂a艣ciwie robi IM-Worm.OSX.Leap:

    • Kopiuje si臋 do /tmp jako latestpics;
    • Nast臋pnie tworzy plik tgz;
    • Wydobywa Input Manager o nazwie “apphook.bundle” i kopiuje go do /tmp;
    • Je艣li identyfikator ma posta膰 0, tworzony jest folder /Library/InputManagers/; usuwne s膮 wszystkie istniej膮ce apphooki i nowy apphook zostaje skopiowany z /tmp;
    • Je艣li identyfikator ma posta膰 inn膮 ni偶 0, tworzony jest ~/Library/InputManagers/;
    • Teraz gdy zosta艂a uruchomiona nowa aplikacja systemu Mac OS X, nowy apphook zostanie za艂adowany do przestrzeni adresowej;
    • Wraz z ka偶dym uruchomieniem aplikacji b臋dzie podejmowana pr贸ba wys艂ania latestpics.tgz za po艣rednictwem komunikatora iChat.

    Virus.OSX.Macarena

    Aby rozpocz膮膰 analiz臋, nale偶y zidentyfikowa膰 format pliku. Jak wy偶ej, u偶yjemy narz臋dzia file.

    Wyniki pokazuj膮, 偶e jest to plik w formacie Mach-O.

    Nast臋pnie u偶ywamy otool w celu obejrzenia nag艂贸wka pliku i okre艣lenia punktu wej艣cia:

    Dok艂adne badanie wskazuje na nietypowy punkt wej艣cia pod adresem zero. Nast臋pnym krokiem powinna by膰 analiza kodu, rozpoczynaj膮c od punktu wej艣cia. Napotykamy jednak ma艂y problem. Nie mo偶emy dezasemblowa膰 tej cz臋艣ci pliku Mach-O przy u偶yciu narz臋dzia otool, poniewa偶 mo偶na je wykorzysta膰 jedynie do analizy kodu w sekcji tekstowej segmentu __TEXT.

    W tej sytuacji mo偶emy u偶y膰 IDAPro. Najpierw jednak musimy za艂adowa膰 plik do narz臋dzia IDA jako plik binarny. Nast臋pnie plik mo偶e zosta膰 zdezasemblowany.

    Macarena jest pierwszym wirusem, kt贸ry infekuje pliki w formacie Mach-O w bie偶膮cym folderze.

    Podczas analizy zainfekowanego pliku mo偶na zauwa偶y膰 nast臋puj膮ce rzeczy:

    Wirus zmienia punkt wej艣cia na adres zero. Tam w艂a艣nie segment __PAGEZERO 艂aduje si臋 w formacie Mach-O. Jak zauwa偶yli艣my wy偶ej, podczas analizowania struktury plik贸w Mach-O, __PAGEZERO nie ma 偶adnego miejsca w pliku na dysku. Dlatego w艂a艣nie kod zapisuje si臋 na koniec pliku na dysku. Technika ta mo偶e mie膰 niespodziewany rezultat: aplikacje takie jak gdb, IDA oraz otool nie b臋d膮 wy艣wietla膰 kodu wirusa.

    Macarena jest stosunkowo prostym wirusem. Po uruchomieniu infekuje pliki w formacie Mach-O dla architektury x86. S膮 r贸wnie偶 nowsze wersje tego wirusa, kt贸re infekuj膮 tak偶e pliki ppc, jednak warianty te bardzo niewiele r贸偶ni膮 si臋 od orygina艂u.

    Wirus ten nie posiada innej funkcji szkodliwej.

    Wniosek

    Mac OS X nadal przyci膮ga klient贸w. Chocia偶 jedynymi szkodliwymi programami dla tego systemu operacyjnego s膮 programy typu "proof of concept", szkodliwi u偶ytkownicy b臋d膮 coraz bardziej interesowali si臋 platform膮 Mac OS X, poniewa偶 liczba jej u偶ytkownik贸w szybko ro艣nie. To oznacza, 偶e b臋dziemy musieli cz臋艣ciej analizowa膰 szkodliwe programy dla systemu Mac OS X.

    Na szcz臋艣cie, Mac OS X posiada wiele narz臋dzi, kt贸re mo偶na wykorzysta膰 zar贸wno do analizy innych program贸w, jak i og贸lnej diagnozy systemu. Co wi臋cej, pojawia si臋 coraz wi臋cej program贸w od "os贸b trzecich", kt贸re mog膮 by膰 wykorzystywane zar贸wno przez specjalist贸w ds IT, jak i badaczy amator贸w.

    殴r贸d艂o:
    Kaspersky Lab