Etikettarkiv: ios

iOS Reverse-engineering

Behöver Er organisation hjälp med reverse-engineering eller IT-säkerhetsgranskningar? Kontakta mig gärna via https://triop.se

Att utföra reverse-engineering av Apples operativsystem iOS som återfinnes i bl.a. iPhone samt iPad kan inneha olika syften (Ciscos operativsystem heter även iOS). Det kan röra sig om att skapa kompatibilitet mot tredjepartsprodukter, analysera skadlig kod eller identifiera eventuella säkerhetsbrister.

Just konstformen reverse-engineering behöver inte direkt innebära att lusläsa assemblerkod dagarna i ända utan handlar mer om att lägga ett pussel för att dra eventuella slutsatser.

Det som tar längst tid är att upprätta en miljö som innehar diverse verktyg som är bra vid utförande av analysen.

Labbplattform iOS

Du behöver en iPad eller iPhone som du jailbreakar och sedan installera Cydia. När du installerat Cydia så finns det ett antal paket som jag rekommenderar:

  • adv-cmds
  • Bigboss recommended tools
  • OpenSSH
  • gdb
  • cycript

Det spelar även roll om du kör med iOS 6.x, 7.x eller 5.x eftersom vissa appar enbart stödjer iOS > 6.x. Även så kan det underlätta om du har en Mac samt Xcode för att kompilera program för att sedan köra på iOS (utvecklarlicens är ej nödvändig).

Du kan även köra kommandot installtheos på iOS om du vill installera en mängd utvecklarverktyg:

Theos is a cross-platform suite of development tools for managing, developing, and deploying iOS software without the use of Xcode.

Jag har även ett dedikerat WiFi-nätverk för att labba med iOS-enheter för att sätta upp filter och proxy-servrar. Det är lätt att konfigurera och jag använder en Raspberry Pi med hostapd.

Granskning

Jag brukar dela upp granskningen i tre steg. Jag har tidigare skrivit om nätverk samt hur du kan titta på API-trafik exempelvis med hjälp av Charles Proxy eller RVI. Ibland räcker det enbart att genomföra ett av nedan tre områden.

  • Nätverk
  • Filsystem
  • Runtime

Varje steg har sina verktyg och metoder som kan användas. Jag går nu igenom dessa tre steg mer i detalj. Även så kan ett förberedande arbete genomföras då information från öppna källor inhämtas (läs googla). Går man exempelvis in och klickar på Licenser under Facebook Messenger appen så hittar du direkt en hel del bibliotek som återfinnes:

 

Facebook Messenger iOS Nätverk

Här är Wireshark eller NetworkMiner din vän. Se vilken trafik som kommuniceras till eller från appen då den startas eller om den kör i bakgrunden. Om den är krypterad så kan du behöva installera ditt eget certifikat. Även i vissa fall så använder ej appen dina proxy-inställningar om du vill använda Charles eller Burp.

Viktigt är att dokumentera löpande all information som kan vara av intresse såsom sökvägar, IP-adresser och user-agent.

Swedavia API anrop

 

Ovan skärdump från ett tidigare blogginlägg.

Filsystem

Gå till den mapp där just din app håller hus. Om du inte vet vilken mapp som används kan du kontrollera processlistan när du startat appen.

Många utvecklare lämnar kvar information och filer i mapparna. Här kan sqlite-filer (.db) hittas med information eller .plist-filer som kan läsas med plutil.

Här är ett exempel då jag listar några E-postadresser samt telefonnummer på Facebook-vänner från filen fbsyncstore.db med hjälp av sqlite3-kommandot:

fbsyncstore.dbFilerna kan även ändras om det skulle vara en fördel för dig. Såsom om det finns möjlighet till att se mer debug-information.

Runtime

Detta är den svåraste biten, dels för att Apparna på iOS är krypterade när dom ligger på disk men även för att det tar otroligt lång tid att kartlägga hur en App fungerar i detalj.

Ett bra första test är att använda dumpdecrypted och sedan class-dump-z och då kan vi bl.a. se följande information:

SSCrypto iOS

Vilket berättar att dom troligtvis använder SSCrypto som är en wrapper för OpenSSL. Dock så uppdateras ej SSCrypto (Septicus Software) och dom rekommenderar istället Apples CCCrypto.

För att sedan se mer information så rekommenderas theos (mobile substrate), gdb samt cycript. När det gäller gdb så kan objc_msgSend användas för att logga alla Objective-C metodanrop med följande:
break objc_msgSend
commands
printf "-[%s %s]\n", (char *)class_getName(*(long *)$r0,$r1),$r1
c
end

Detta är förutsatt att du redan har anslutit till processen genom gdb -p <processid> innan. Då fortsätter du bara med kommandot c så ska du få ut löpande information.

Även så kan jag rekommendera Snoop-It som i sin tur använder sig av Mobile Substrate Tweak.xm (tyvärr stödjer ej Snoop-It 64 bitars-appar ännu). Bra guide här hur du skapar en egen tweak.

Även så fungerar det bra att ladda in den dekrypterade appen direkt i IDA Pro för att underlätta processen:

IDA Pro iOSKoden för funktionen generateRSAPrivateKeyWithLength ser ut att vara samma som denna.

Tipsar även om att kolla in iRet som Veracoda har släppt samt guiden på penetrationstest.se.

Jag har skaffat Mac

Efter många år så har jag äntligen införskaffat en MacBook Pro samt installerat Mac OS X Lion. Processen har inte varit helt smärtfri men några bra tips och slutsatser är enligt följande:

  1. Uppstart i verbose-läge är trevligt: sudo nvram boot-args=”-v”
  2. Att automatiskt dölja eller förminska dockan är ett måste.
  3. Att lära sig tangentbordskortkommandon underlättar vardagen ypperligt tillsammans med exempelvis Alfred. Testa även att köra några minuter/timmar helt utan mus.
  4. Vid installation av certifikat för iOS-utveckling så rekommenderas den Wizard som återfinnes developer.apple.com. Kan vara lätt att glömma något steg annars.
  5. Ställ in terminalen så Pro-temat används som standard.
  6. Installera Dropbox, Little Snitch och WaterRoof.
  7. Konfigurera brandväggen med WaterRoof.
  8. Andra appar som kan vara bra att ha är Charles Proxy, VLC, Skype, Chrome, VirtualBox, Spotify och Xcode.
  9. Kontrollera om SSD-disken stödjer TRIM.
  10. Införskaffa en tuff dekal från exempelvis Etsy.
Dock har jag haft problem med spontana krasher som jag inte riktigt listat ut varför de inträffar. Antingen har jag en trasig SSD-disk eller så är det något som jag installerat som är buggigt.
Vad har du för tips och tricks när det gäller Mac OS X?

Apple iOS utvecklarlicens

Efter många om och men så har jag äntligen blivit godkänd av Apple att utveckla iOS-appar till iPad, iPhone osv. Förfarandet att godkännas var inte helt lätt då Apple ville att jag skulle faxa(?!) in ett registreringsbevis på mitt bolag. Som tur var så köpte jag en fax på B Locket för några år sedan men insåg rätt snabbt att jag inte hade någon analog förbindelse att koppla in den på.

Bild CC http://www.flickr.com/photos/78518472@N00

Efter lite Google-hjälp så var det någon som föreslog att det gick att använda sig av någon ”gratis fax på Internet”-tjänst som skulle leverera dessa handlingar till Apple. Sagt och gjort så testade jag några stycken men hörde inte så mycket av Apple så jag kontaktade dess support som svarade att de ej godkände att handlingarna faxades via tredje part(!).

Nåväl, så jag skickade tillbaka en länk till Dropbox där handlingarna återfanns men inte det heller fungerade så till slut så bifogade jag dem som filer till ett svar på supportbrevet. Efter några dagar så ringer en person från Apple i USA och bekräftar då att jag har någon slags koppling till mitt företag. Pust, vilken process.

Nu återstår bara att införskaffa en Macdator.