170 likes | 301 Views
Exploiting Pocket PC. Exploiting Pocket PC. PocketPC existiert seit über 5 Jahren (Windows CE seit ca. 10). Exploiting Pocket PC. Windows CE: Embedded Betriebssystem von Microsoft Echtzeitfähig; für „integrierte Anwendungen“
E N D
Exploiting Pocket PC • PocketPC existiert seit über 5 Jahren(Windows CE seit ca. 10)
Exploiting Pocket PC • Windows CE: • Embedded Betriebssystem von Microsoft • Echtzeitfähig; für „integrierte Anwendungen“ • PDA‘s, cell/smart phones VoIP, Abspielgeräte, Navigationssysteme, ATMs… • Lauffähig auf x86, MIPS, SH3/4, ARM, StrongARM,… • PocketPC: • Pocket PC 2000, 2002, 2003, 2003 SE, 2003 phone edition • Pocket PC Smartphone • umbenannt in Windows Mobile: aktuell 5.0 • Alle PocketPC Betriebssysteme basieren auf Windows CE
Exploiting Pocket PC • Unterschied PocketPC / WindowsCE / Windows Mobile… • Es gibt nur wenige Exploits / keine Viren/Würmer • Wozu überhaupt Exploits? Was für Exploits? • Keyboard Logger, gepatcht und versteckt, hardreset…
Exploiting Pocket PC • Windows CE Architektur: • max. 256 MB interner Speicher (32 MB max. eine Datei) • 4 GB virtueller Adressraum • aufgeteilt in „slots“ (jeder slot = 32 MB) • 33 slots für Prozesse und 1 für DLLs, alle anderen für kern • Bei WM5.0: keine Aufteilungsbegrenzung • Alle Prozesse teilen sich den Adressraum • Es gibt aber Speicherschutz • Auf 32 Prozesse limitiert (slot 0 ist reserviert) (bei WM5.0 aufgehoben) • Allerdings kein Thread Limit
Exploiting Pocket PC • Speicheraufteilung:
Exploiting Pocket PC • Windows CE DLLs: • XIP (eXecute In Place) • DLLs werden im ROM/RAM gehalten und lediglich in den Adressraum gemappt (nicht in den RAM kopiert) • um Speicher zu sparen • man kann keinen break in einer System-DLL machen…(Sicherheit) • eine DLL wird immer an die selbe Adresse gemappt • verschiedene Adressen auf verschiedenen Geräten
Exploiting Pocket PC • ARM Prozessor: • am häufigsten in PocketPCs eingesetzt • RISC CPU • wenig Energieverbrauch • relativ schnell • ARM CPUs gibt es von verschiedenen Herstellern: • Intel XScale, TI OMAP, …
Exploiting Pocket PC • Load/Store Architektur • jede Datenoperation wird in den Registern erledigt • 37 32 Bit register • R0-R13 zur allgemeinen Verwendung • R15 Zähler (PC) • R14 link Register (LR) für die Rücksprung adresse • R13 normalerweise Stack Pointer • Status Flag (NZCO) • 32 Bit opcodes in ARM und 16 Bit in Thumb Modus
Exploiting Pocket PC • PC und SP sind register die man modifizieren kann • Code kann sich leicht selbst im Speicher finden: • SUB R1,PC,#4 • R1 enthält die Adresse der nächsten Instruktion • Die meisten Instruktionen können bedingt ausgeführt werden • SUBNE R0,R0,#4 • SUB wenn nicht gleich… • Es existiert kein NOP • Virtuelles NOP: MOV R1,R1
Exploiting Pocket PC • Probleme mit ARM • separater Cache für Daten und Instruktionen • deshalb kein wirkllicher selbstverändernder Code möglich • Ältere ARM Prozessoren haben kein XOR Befehl
Exploiting Pocket PC • Tools: • PocketPC/WinCE SDK • Microsoft eMbedded Visual C/C++ (eVC) • Kostenlose Entwicklungsumgebung • Compiler, Debugger, Assembler,… • Spezielle Plattform Tools: Remote Process Viewer…) • Kein Support für ARM inline assembly • Verschieden Pocket PC SDKs (aktuell Windows Mobile 5.0 SDK) • Emulatoren für Pocket PC; neu: Emulator der die echte Hardware emuliert) • ActiveSync: • Synchronisierungssoftware / Dateitransfer / Netzwerkzugriff
Exploiting Pocket PC • Dissassembler: • IDA PRO • Hex Editor • Optional: • Gcc/gas ARM cross Compiler und Assembler
Exploiting Pocket PC • Single User Betriebssystem • Kein Login nur optionaler Geräte-Lock • Jede Applikation kann auf alles zugreifen (nur unmanaged Applikationen) • keine besondere Sicherheit für nicht-.NET Programme • Sicherheitsstruktur in .NET umgesetzt
Exploiting Pocket PC • Mögliche Attacken: • Netzwerk: • WLAN, GPRS, Bluetooth, USB (WM5) • Bluetooth • Einige bekannte Bugs (jedoch in aktuellen Versionen gefixt) • OBEX push Bug (zu lange Dateinamen) • Infrarot • OBEX; okay sehr unwahrscienlich • GSM • SMS/MMS parser
Exploiting Pocket PC • Shellcode
Exploiting Pocket PC • Shellcode