Inhalt
Über die Autoren (13) Über den sachlichen Korrektor (15) Danksagungen (17) Einführung (19) - Buch- und Technologieübersicht (20)
- Wie dieses Buch aufgeteilt ist (20)
- Wer sollte dieses Buch lesen (22)
- Benötigtes Werkzeug (22)
- Was ist auf der Website (23)
- Viel Glück! (23)
Kapitel 1. Ein Blick auf das Ökosystem (25) - Android-Wurzeln (25)
- Firmengeschichte (25)
- Versionsgeschichte (26)
- Verfügbare Geräte (28)
- Offene (am häufigsten vorkommende) Quellen (29)
- Android-Aktionäre (31)
- Google (32)
- Gerätehersteller (33)
- Bediener (35)
- Entwickler (35)
- Benutzer (36)
- Ein Bild der Ökosystemkomplexität (38)
- Fragmentierung (38)
- Kompatibilität (40)
- Upgrade-Probleme (41)
- Sicherheit versus Offenheit (43)
- Veröffentlichung von Informationen (44)
- Zusammenfassung (45)
Kapitel 2. Android-Sicherheitsdesign und -architektur 47 - Android-Architektur (47)
- Einschränkungen und Schutzmaßnahmen (49)
- Isolierte Android-Umgebung (49)
- Android-Berechtigungen (52)
- Genauere Analyse der Schichten
- Android-Apps (55)
- Android-Framework (59)
- Virtuelle Dalvik-Maschine (60)
- Nativer Code des Benutzerbereichs
- Kern (67)
- Komplizierte Sicherheit, komplizierter Exploit 74
- Zusammenfassung (75)
Kapitel 3. Gerät entsperren (77) - Partitionslayout (78)
- Bestimmen eines Partitionslayouts
- Der Systemstartvorgang (80)
- Zugriff auf den Download-Modus (81)
- Gesperrte und entsperrte Bootloader (82)
- Originale und modifizierte Rettungsbilder (83)
- Vollständigen Zugriff mit entsperrtem Bootloader erhalten (85)
- Vollständigen Zugriff mit einem gesperrten Bootloader erhalten (87)
- Zugriff auf ein laufendes System (88)
- NAND-Sperren, Temporäre Root, Persistent Root (89)
- Beständiger Softwarestamm 91
- Geschichten bekannter Angriffe (92)
- Kernel: Wunderbar / asroot (92)
- Rettungsmodus: Volez (93)
- Udev: Exploid (93)
- Adbd: RageAgainstTheCage (94)
- Zygote: Zimperlich und Zysploit (94)
- Ashmem: KillingInTheNameOf und Pseudonym (95)
- Vold: GingerBreak (95)
- PowerVR: Levitator (96)
- Libsysutils: zergRush (96)
- Kernel: mempodroid (97)
- Angriffe auf Dateiberechtigungen und symbolische Links
- Adb-Wiederherstellung (98)
- Exynos4: Exynos-Missbrauch (99)
- Diag: lit / diaggetroot (99)
- Zusammenfassung (100)
Kapitel 4. Überprüfung der Anwendungssicherheit 101 - Häufige Fehler 101
- Anwendungsberechtigungsprobleme (102)
- Unsichere Übertragung sensibler Daten (103)
- Speicherung ungesicherter Daten (104)
- Informationen lecken durch Protokolle (105)
- IPC Ungesicherte Terminierungen (106)
- Fallstudie: Mobile Sicherheits-App (108)
- Profilerstellung (108)
- Statische Analyse (110)
- Dynamische Analyse (124)
- Angriff (132)
- Fallstudie: SIP-Client (134)
- Schneefräse (134)
- Anerkennung (134)
- Schnarchen (136)
- Spritzen (138)
- Zusammenfassung (140)
Kapitel 5. Androids Angriffsebenen 141 - Grundbegriffe (141)
- Angriffsvektoren (142)
- Angriffsflugzeuge (143)
- Angriffsflugzeugklassifizierung (144)
- Ebeneneigenschaften 144
- Die Klassifizierungsmethode (145)
- Angriffsflugzeuge, auf die aus der Ferne zugegriffen werden kann (145)
- Netzwerkprobleme (146)
- Netzwerkstapel (150)
- Gemeinsame Netzwerkdienste (151)
- Mobile Technologien (152)
- Benutzerseitiges Angriffsflugzeug
- Google-Infrastruktur (158)
- Physische Nachbarschaft (164)
- Drahtlose Kommunikation (164)
- Andere Technologien (170)
- Lokale Angriffsflugzeuge (170)
- Anzeigen des Dateisystems (171)
- Suche nach anderen lokalen Angriffsflugzeugen 172
- Physische Angriffsflugzeuge (176)
- Gerät demontieren (177)
- USB (178)
- Andere physische Angriffsflugzeuge 181
- Externe Modifikationen (182)
- Zusammenfassung 182
Kapitel 6. Finden von Schwachstellen mit Fuzzing 183 - Der Ursprung des Fuzzing (183)
- Identifizieren eines Ziels 185
- Erstellen von verzerrten Eingaben 185
- Eingabedaten verarbeiten 186
- Leistungsüberwachung (187)
- Fuzzing in Android (187)
- Nachrichtenempfänger fuzzing (188)
- Zielidentifikation (189)
- Eingabedaten generieren 190
- Eingabedaten bereitstellen 190
- Testüberwachung (191)
- Fuzzing-Chrome für Android (193)
- Auswahl eines Ziels (193)
- Eingabedaten generieren 195
- Eingabedaten verarbeiten 197
- Testüberwachung (199)
- Fuzzing von USB-Angriffsflugzeugen (201)
- USB-Fuzzing-Herausforderungen
- Modusauswahl (202)
- Eingabedaten generieren 203
- Eingabedaten verarbeiten 205
- Testüberwachung (206)
- Zusammenfassung (207)
Kapitel 7. Fehlersuche und Schwachstellenanalyse 209 - Sammeln aller verfügbaren Informationen (209)
- Toolkit-Auswahl (211)
- Debuggen eines schlechten Endes 212
- Systemprotokolle (212)
- Grabstein (213)
- Remote-Debugging (214)
- Debuggen von Dalvik Virtual Machine Code 215
- Debuggen der Beispielanwendung 216
- Anzeigen des Android Framework-Quellcodes 218
- Debuggen von vorhandenem Code 220
- Debuggen von nativem Code 224
- Debuggen mit dem NDK 224
- Debuggen mit Eclipse 228
- Debuggen mit AOSP
- Zunehmende Automatisierung 235
- Debuggen mit Symbolen 237
- Debuggen eines nicht von AOSP unterstützten Geräts 243
- Debuggen im gemischten Modus 244
- Alternative Debugging-Techniken 244
- Debugging-Ausdrücke 244
- Debuggen auf dem Gerät
- Dynamisch ändernde Binärdatei
- Schwachstellenanalyse (247)
- Bestimmung der Grundursache 247
- Usability-Bewertung
- Zusammenfassung (261)
Kapitel 8. Userland-Software verwenden 263 - Die Grundlagen von Gedächtnisfehlern
- Stapelpufferüberlauf
- Heap-Nutzung
- Historie öffentlich bekannter Exploits (274)
- IngwerBreak (275)
- ZergRush (278)
- mempodroid (281)
- Nutzung des Android-Browsers (282)
- Den Fehler 283 verstehen
- Heap-Steuerung
- Zusammenfassung (288)
Kapitel 9. Rückkehrorientierte Programmierung 289 - Geschichte und Begründung (289)
- Separater Daten- und Anweisungscache 290
- Die Grundlagen von ROP in ARM
- Aufrufen von Subroutinen in ARM 293
- Gadgets zu einer Kette verbinden (295)
- Identifizieren potenzieller Gadgets (296)
- Fallstudie: Android 4.0.1 Linker (297)
- Ändern des Stapelzeigers 298
- Ausführung von beliebigem Code aus zugewiesenem Speicher (300)
- Zusammenfassung (304)
Kapitel 10. Den Kernel hacken und angreifen 317 - Der Linux-Kernel in Android
- Extrahieren des Kernels
- Extrahieren von Firmware 319
- Download vom Gerät (321)
- Abrufen des Kernels aus dem Boot-Image
- Entpacken des Kernels
- Ausführen von modifiziertem Kernel-Code
- Abrufen des Quellcodes (324)
- Vorbereiten der Build-Umgebung
- Konfigurieren des Kernels 328
- Verwenden Ihrer eigenen Kernel-Module
- Kompilieren eines modifizierten Kernels
- Startbild erstellen (335)
- Ausführen eines modifizierten Kernels
- Kernel-Debugging
- Kernel-Fehlerberichte
- Hoppla verstehen (344)
- Live-Debugging mit KGDB
- Kernelnutzung (352)
- Gängige Android-Kernel
- Adressen extrahieren 354
- Fallstudien (356)
- Zusammenfassung (367)
Kapitel 11. Angriff auf RILs 311 - Einführung in RIL
- RIL-Architektur (312)
- Smartphone-Architektur (313)
- Android-Telefonstapel (313)
- Anpassen des Telefonstapels (315)
- RIL-Dienste (rild) (315)
- API-Anbieter-Ril (318)
- SMS (Kurznachrichtendienst) (319)
- Senden und Empfangen von SMS-Nachrichten (319)
- SMS-Format (319)
- Kommunikation mit dem Modem (322)
- Modem-Emulation für Fuzzing
- Fuzzing-SMS in Android (324)
- Zusammenfassung (331)
Kapitel 12. Begrenzungsmechanismen von Exploits 333 - Bewertung (334)
- Codesignierung (334)
- Härtehalde (336)
- Schutz vor Integer-Überlauf
- Verhinderung der Datenausführung
- Randomisieren des Adressraums 340
- Sichern eines Stapels
- Sicherheit für Formatzeichenfolgen
- Schreibgeschützte Umzüge (345)
- Isolieren der Umgebung (346)
- Sicherung Ihres Quellcodes 346
- Zugangskontrollmechanismen (348)
- Sichern des Kernels
- Zeiger und Protokollbeschränkungen
- Nullseitenschutz (351)
- Nur-Lese-Speicherbereiche (351)
- Sonstige Sicherheit (352)
- Zusammenfassung der Begrenzungsmechanismen von Exploits 354
- Einschränkungen deaktivieren 356
- Identitätswechsel (356)
- Binäre Konvertierung 357
- Ändern des Kernels 357
- Überwindung der Grenzen von Exploits 358
- Stapelsicherheit überwinden 358
- Überwindung der ASLR (359)
- Überwindung von Schutzmaßnahmen zur Verhinderung der Datenausführung 359
- Überwindung von Kernel-Limits 359
- Blick in die Zukunft (360)
- Offiziell entwickelte Projekte (360)
- Gemeinschaft, die den Hoden heilt 361
- Ein bisschen Spekulation (362)
- Zusammenfassung (362)
Kapitel 13. Hardware-Angriffe - Kommunikation mit Hardware
- Serielle UART-Schnittstellen (364)
- I2C-, SPI- und One-Wire-Schnittstellen (368)
- JTAG (370)
- Suchen von Debug-Schnittstellen 381
- Komponentenidentifikation 392
- Spezifikationserfassung
- Schwierigkeiten beim Identifizieren von Komponenten 394
- Datenerfassung, Überwachung und Einspeisung (395)
- USB (395)
- Serielle I2C-, SPI- und UART-Schnittstellen (399)
- Daten- und Softwarediebstahl (404)
- Diskreter Zugriff
- Invasive Methoden für den Zugriff auf Software 407
- Was tun mit dem Datendump? (410)
- Fallen (414)
- Ungewöhnliche Schnittstellen
- Binäre Daten und geschlossene Protokolle
- Defekte Debugging-Schnittstellen 415
- Layout-Passwörter 415
- Bootloader-Passwörter, Tastenkombinationen und stille Terminals (415)
- Modifizierte Startsequenzen 416
- Versteckte Adresszeilen (416)
- Schutzharz (416)
- Bildverschlüsselung, Verschleierung und Unterbrechung des Debugging
- Zusammenfassung (417)
Anhang A. Werkzeuge - Entwicklungstools (419)
- Android-SDK (419)
- Android-NDK (420)
- Sonnenfinsternis (420)
- ADT-Stecker (420)
- ADT-Paket (420)
- Android Studio (420)
- Werksseitige Firmware-Erfassungs- und Speichermodifikations-Tools (421)
- Binwalk (421)
- Schnellstart (421)
- Samsung (421)
- Nvidia (422)
- LG (422)
- HTC (423)
- Motorola (423)
- Native Android-Tools (424)
- BusyBox (424)
- setpropex (425)
- SQLite (425)
- spur (425)
- Werkzeuge zum Anbringen und Modifizieren (425)
- ADBI-Framework (425)
- ldpreloadhook (426)
- Rahmen XPosed (426)
- Cydia-Substrat (426)
- Statische Analysewerkzeuge 426
- Smali und Baksmali (427)
- Androwächter (427)
- apktool (427)
- dex2jar (427)
- Gift (428)
- JD-GUI (428)
- JEB (428)
- Radare2 (428)
- IDA Pro und Hex-Rays Decompiler (429)
- Anwendungstest-Tools (429)
- Framework Drozer (Quecksilber) (429)
- iSEC Intent Sniffer und Intent Fuzzer (429)
- Hardware-Hacking-Tools (430)
- Segger J-Link (430)
- JTAGulator (430)
- OpenOCD (430)
- Saleae (430)
- Buspirat (430)
- GutFET (431)
- TotalPhase Beagle USB (431)
- Facedancer21 (431)
- TotalPhase Erdferkel I2C (431)
- Chip Quik (431)
- Heißluftpistole (431)
- Xeltek SuperPro (432)
- IDA (432)
Anhang B. Open-Source-Repositories - Google (433)
- AOSP (433)
- Gerrit Codeprüfsystem (434)
- SoC-Hersteller (434)
- AlleGewinner (435)
- Informationen (435)
- Wunder (435)
- Mediatek (435)
- NVIDIA (436)
- Texas Instruments (436)
- Qualcomm (436)
- Samsung (437)
- Gerätehersteller (OEM) (437)
- Asus (438)
- HTC (438)
- LG (438)
- Motorola (439)
- Samsung (439)
- Sony Handy (439)
- Quellen externer Projekte (440)
- Andere Quellen (440)
- Modifizierte Werksfirmware (440)
- Linaro (441)
- Replikant (441)
- Code-Indizes (441)
- Freiberufler (441)
Anhang C. Referenzen Index (501) |