Android. Podręcznik hackera - ebook
Android. Podręcznik hackera - ebook
Obroń Twój system przed atakiem!
System Android to niezaprzeczalny lider wśród systemów operacyjnych dla urządzeń mobilnych. Jednak bycie liderem ma pewną zasadniczą wadę — wszyscy chcą przełamać jego zabezpieczenia. Jeżeli jesteś specjalistą odpowiedzialnym za bezpieczeństwo sieci, jeżeli jesteś administratorem odpowiadającym za bezpieczeństwo urządzeń mobilnych, to trafiłeś na książkę, która stanie się Twoją obowiązkową lekturą na najbliższe dni!Dzięki niej poznasz działanie systemu Android oraz zaimplementowaną w nim architekturę zabezpieczeń. W kolejnych rozdziałach nauczysz się rozpoznawać szczegóły implementacji zabezpieczeń oraz komplikacje wynikające z faktu, że Android to otwarty system. Gdy już zdobędziesz solidne fundamenty teoretyczne, przejdziesz do analizy różnych technik ataku na urządzenia pracujące pod kontrolą Androida. Ponadto poznasz możliwe płaszczyzny ataku, publicznie dostępne exploity oraz słabości jądra systemu. Książka ta musi się znaleźć na półce każdego, komu bezpieczeństwo platformy Android nie jest obojętne!
Dzięki tej książce nauczysz się:
- Rozpoznawać szczegóły implementacji zabezpieczeń oraz komplikacje wynikające z otwartości Androida.
- Unikać częstych pułapek związanych z bezpieczeństwem i śledzić najnowsze strategie hakowania smartfonów.
- Analizować różnego rodzaju udane ataki na system operacyjny Android.
- Uzyskiwać pełny dostęp do urządzenia i rozpoznawać układ partycji oraz proces startu urządzenia.
- Rozumieć złożoną naturę ekosystemu Androida, w tym znaczenie różnych producentów urządzeń i twórców oprogramowania
Spis treści
O autorach (13)
O korektorze merytorycznym (15)
Podziękowania (17)
Wprowadzenie (19)
- Omówienie książki i technologii (20)
- Jak podzielona jest ta książka (20)
- Kto powinien przeczytać tę książkę (22)
- Potrzebne narzędzia (22)
- Co znajduje się na stronie internetowej (23)
- Powodzenia! (23)
Rozdział 1. Rzut oka na ekosystem (25)
- Korzenie Androida (25)
- Historia firmy (25)
- Historia wersji (26)
- Dostępne urządzenia (28)
- Otwarte (najczęściej) źródła (29)
- Udziałowcy Androida (31)
- Google (32)
- Producenci sprzętu (33)
- Operatorzy (35)
- Programiści (35)
- Użytkownicy (36)
- Obraz złożoności ekosystemu (38)
- Fragmentacja (38)
- Kompatybilność (40)
- Problemy związane z aktualizacją (41)
- Bezpieczeństwo kontra otwartość (43)
- Upublicznienie informacji (44)
- Podsumowanie (45)
Rozdział 2. Projekt i architektura bezpieczeństwa Androida (47)
- Architektura systemu Android (47)
- Ograniczenia i zabezpieczenia (49)
- Środowisko izolowane Androida (49)
- Uprawnienia Androida (52)
- Dokładniejsza analiza warstw (55)
- Aplikacje Androida (55)
- Android Framework (59)
- Wirtualna maszyna Dalvik (60)
- Kod natywny przestrzeni użytkownika (62)
- Jądro (67)
- Skomplikowane zabezpieczenia, skomplikowany exploit (74)
- Podsumowanie (75)
Rozdział 3. Odblokowanie urządzenia (77)
- Układ partycji (78)
- Ustalenie układu partycji (79)
- Proces uruchamiania systemu (80)
- Dostęp do trybu pobierania (81)
- Zablokowane i odblokowane programy ładujące (82)
- Oryginalne oraz zmodyfikowane obrazy ratunkowe (83)
- Uzyskiwanie pełnego dostępu z odblokowanym programem ładującym (85)
- Uzyskiwanie pełnego dostępu przy zablokowanym programie ładującym (87)
- Uzyskiwanie dostępu na uruchomionym systemie (88)
- Blokady NAND, tymczasowy root, trwały root (89)
- Utrwalanie programowego roota (91)
- Historie znanych ataków (92)
- Jądro: Wunderbar/asroot (92)
- Tryb ratunkowy: Volez (93)
- Udev: Exploid (93)
- Adbd: RageAgainstTheCage (94)
- Zygote: Zimperlich i Zysploit (94)
- Ashmem: KillingInTheNameOf i psneuter (95)
- Vold: GingerBreak (95)
- PowerVR: levitator (96)
- Libsysutils: zergRush (96)
- Jądro: mempodroid (97)
- Ataki związane z uprawnieniami plików oraz linkami symbolicznymi (97)
- Adb restore (98)
- Exynos4: exynos-abuse (99)
- Diag: lit / diaggetroot (99)
- Podsumowanie (100)
Rozdział 4. Przegląd bezpieczeństwa aplikacji (101)
- Częste błędy (101)
- Problemy z uprawnieniami aplikacji (102)
- Niezabezpieczone przesyłanie wrażliwych danych (103)
- Przechowywanie niezabezpieczonych danych (104)
- Wycieki informacji przez logi (105)
- Niezabezpieczone zakończenia IPC (106)
- Studium przypadku: Mobile Security App (108)
- Profilowanie (108)
- Analiza statyczna (110)
- Analiza dynamiczna (124)
- Atak (132)
- Studium przypadku: SIP Client (134)
- Drozer (134)
- Rozpoznanie (134)
- Snarfing (136)
- Wstrzykiwanie (138)
- Podsumowanie (140)
Rozdział 5. Płaszczyzny ataku Androida (141)
- Podstawy terminologii (141)
- Wektory ataku (142)
- Płaszczyzny ataku (143)
- Klasyfikacja płaszczyzn ataku (144)
- Właściwości płaszczyzny (144)
- Sposób klasyfikacji (145)
- Płaszczyzny ataku dostępne zdalnie (145)
- Zagadnienia sieciowe (146)
- Stosy sieciowe (150)
- Udostępnione usługi sieciowe (151)
- Technologie mobilne (152)
- Płaszczyzna ataku po stronie użytkownika (153)
- Infrastruktura Google (158)
- Sąsiedztwo fizyczne (164)
- Komunikacja bezprzewodowa (164)
- Inne technologie (170)
- Lokalne płaszczyzny ataku (170)
- Przeglądanie systemu plików (171)
- Odnajdywanie innych lokalnych płaszczyzn ataku (172)
- Fizyczne płaszczyzny ataku (176)
- Demontaż urządzenia (177)
- USB (178)
- Inne fizyczne płaszczyzny ataków (181)
- Zewnętrzne modyfikacje (182)
- Podsumowanie (182)
Rozdział 6. Wyszukiwanie słabości za pomocą fuzzingu (183)
- Pochodzenie fuzzingu (183)
- Identyfikowanie celu (185)
- Tworzenie zniekształconych danych wejściowych (185)
- Przetwarzanie danych wejściowych (186)
- Monitorowanie wyników (187)
- Fuzzing w Androidzie (187)
- Fuzzing odbiorców komunikatów (188)
- Identyfikacja celu (189)
- Generowanie danych wejściowych (190)
- Dostarczanie danych wejściowych (190)
- Monitorowanie testów (191)
- Fuzzing Chrome dla Androida (193)
- Wybór celu (193)
- Generowanie danych wejściowych (195)
- Przetwarzanie danych wejściowych (197)
- Monitorowanie testów (199)
- Fuzzing płaszczyzny ataku USB (201)
- Wyzwania fuzzingu USB (202)
- Wybór trybu (202)
- Generowanie danych wejściowych (203)
- Przetwarzanie danych wejściowych (205)
- Monitorowanie testów (206)
- Podsumowanie (207)
Rozdział 7. Wyszukiwanie błędów i analiza słabości (209)
- Zebranie wszystkich dostępnych informacji (209)
- Wybór zestawu narzędzi (211)
- Debugowanie błędnego zakończenia (212)
- Logi systemowe (212)
- Tombstone (213)
- Zdalne debugowanie (214)
- Debugowanie kodu maszyny wirtualnej Dalvik (215)
- Debugowanie przykładowej aplikacji (216)
- Wyświetlanie kodu źródłowego Android Framework (218)
- Debugowanie istniejącego kodu (220)
- Debugowanie kodu natywnego (224)
- Debugowanie z NDK (224)
- Debugowanie z Eclipse (228)
- Debugowanie z AOSP (230)
- Zwiększanie automatyzacji (235)
- Debugowanie z symbolami (237)
- Debugowanie urządzenia niewspieranego przez AOSP (243)
- Debugowanie w trybie mieszanym (244)
- Alternatywne techniki debugowania (244)
- Wyrażenia do debugowania (244)
- Debugowanie w urządzeniu (245)
- Dynamiczne modyfikowanie binariów (246)
- Analiza podatności (247)
- Ustalanie pierwotnej przyczyny (247)
- Ocena możliwości wykorzystania (260)
- Podsumowanie (261)
Rozdział 8. Wykorzystywanie oprogramowania działającego w przestrzeni użytkownika (263)
- Podstawy błędów pamięci (263)
- Przepełnianie bufora stosu (264)
- Wykorzystanie sterty (267)
- Historia publicznie znanych eksploitów (274)
- GingerBreak (275)
- zergRush (278)
- mempodroid (281)
- Wykorzystanie przeglądarki Android (282)
- Zrozumienie błędu (283)
- Kontrola sterty (285)
- Podsumowanie (288)
Rozdział 9. Return Oriented Programming (289)
- Historia i uzasadnienie (289)
- Oddzielna pamięć podręczna danych i instrukcji (290)
- Podstawy ROP w ARM (292)
- Wywoływanie podprocedur w ARM (293)
- Łączenie gadżetów w łańcuch (295)
- Identyfikacja potencjalnych gadżetów (296)
- Studium przypadku: linker Androida 4.0.1 (297)
- Modyfikacja wskaźnika stosu (298)
- Wykonanie dowolnego kodu z zaalokowanej pamięci (300)
- Podsumowanie (304)
Rozdział 10. Hakowanie i atakowanie jądra (317)
- Jądro Linuksa w Androidzie (317)
- Wyodrębnianie jądra (318)
- Wyodrębnianie z oprogramowania fabrycznego (319)
- Pobieranie z urządzenia (321)
- Pobranie jądra z obrazu startowego (323)
- Rozpakowanie jądra (323)
- Uruchamianie zmodyfikowanego kodu jądra (324)
- Pozyskanie kodu źródłowego (324)
- Przygotowanie środowiska kompilacji (327)
- Konfigurowanie jądra (328)
- Korzystanie z własnych modułów jądra (329)
- Kompilacja zmodyfikowanego jądra (332)
- Tworzenie obrazu startowego (335)
- Uruchamianie zmodyfikowanego jądra (337)
- Debugowanie jądra (342)
- Raporty błędów jądra (342)
- Zrozumienie Oops (344)
- Debugowanie na żywo z KGDB (348)
- Wykorzystanie jądra (352)
- Typowe jądra Androida (352)
- Wyodrębnianie adresów (354)
- Studia przypadku (356)
- Podsumowanie (367)
Rozdział 11. Atakowanie RIL (311)
- Wprowadzenie do RIL (312)
- Architektura RIL (312)
- Architektura smartfona (313)
- Stos telefonu w Androidzie (313)
- Dostosowanie stosu telefonu (315)
- Usługi RIL (rild) (315)
- API vendor-ril (318)
- SMS (Short Message Service) (319)
- Wysyłanie i odbieranie wiadomości SMS (319)
- Format wiadomości SMS (319)
- Komunikacja z modemem (322)
- Emulacja modemu na potrzeby fuzzingu (322)
- Fuzzing SMS w Androidzie (324)
- Podsumowanie (331)
Rozdział 12. Mechanizmy ograniczające działanie eksploitów (333)
- Klasyfikacja (334)
- Podpisywanie kodu (334)
- Utwardzanie sterty (336)
- Zabezpieczenia przed przepełnieniem zmiennej typu integer (336)
- Zapobieganie wykonaniu danych (338)
- Randomizacja przestrzeni adresowej (340)
- Zabezpieczanie stosu (342)
- Zabezpieczenia formatujących ciągów znaków (343)
- Read-Only Relocations (345)
- Izolowanie środowiska (346)
- Zabezpieczanie kodu źródłowego (346)
- Mechanizmy kontroli dostępu (348)
- Zabezpieczanie jądra (349)
- Ograniczenia wskaźników i logów (350)
- Ochrona strony zerowej (351)
- Obszary pamięci tylko do odczytu (351)
- Inne zabezpieczenia (352)
- Podsumowanie mechanizmów ograniczających działanie eksploitów (354)
- Wyłączanie ograniczeń (356)
- Zmiana tożsamości (356)
- Zamiana binariów (357)
- Modyfikowanie jądra (357)
- Pokonywanie mechanizmów ograniczających działanie eksploitów (358)
- Pokonywanie zabezpieczeń stosu (358)
- Pokonywanie ASLR (359)
- Pokonywanie zabezpieczeń zapobiegających wykonaniu danych (359)
- Pokonywanie ograniczeń jądra (359)
- Spojrzenie w przyszłość (360)
- Oficjalnie rozwijane projekty (360)
- Utwardzanie jądra przez społeczność (361)
- Odrobina spekulacji (362)
- Podsumowanie (362)
Rozdział 13. Ataki sprzętowe (363)
- Komunikacja ze sprzętem (364)
- Interfejsy szeregowe UART (364)
- Interfejsy I2C, SPI i One-Wire (368)
- JTAG (370)
- Odnajdywanie interfejsów do debugowania (381)
- Identyfikacja komponentów (392)
- Pozyskiwanie specyfikacji (392)
- Trudności przy identyfikacji komponentów (394)
- Przechwytywanie, monitorowanie i wstrzykiwanie danych (395)
- USB (395)
- Interfejsy szeregowe I2C, SPI i UART (399)
- Kradzież danych i oprogramowania (404)
- Uzyskiwanie dostępu w sposób dyskretny (405)
- Inwazyjne metody dostępu do oprogramowania (407)
- Co zrobić ze zrzutem danych? (410)
- Pułapki (414)
- Nietypowe interfejsy (414)
- Dane binarne i zamknięte protokoły (414)
- Uszkodzone interfejsy do debugowania (415)
- Hasła układu (415)
- Hasła programu ładującego, kombinacje klawiszy i ciche terminale (415)
- Zmodyfikowane sekwencje startowe (416)
- Ukryte linie adresowe (416)
- Żywica zabezpieczająca (416)
- Szyfrowanie obrazów, obfuskacja i utrudnianie debugowania (417)
- Podsumowanie (417)
Dodatek A. Narzędzia (419)
- Narzędzia programistyczne (419)
- Android SDK (419)
- Android NDK (420)
- Eclipse (420)
- Wtyczka ADT (420)
- Pakiet ADT (420)
- Android Studio (420)
- Narzędzia do pozyskiwania fabrycznego oprogramowania i modyfikowania pamięci (421)
- Binwalk (421)
- fastboot (421)
- Samsung (421)
- NVIDIA (422)
- LG (422)
- HTC (423)
- Motorola (423)
- Narzędzia natywne Androida (424)
- BusyBox (424)
- setpropex (425)
- SQLite (425)
- strace (425)
- Narzędzia do podpinania i modyfikowania (425)
- Framework ADBI (425)
- ldpreloadhook (426)
- Framework XPosed (426)
- Cydia Substrate (426)
- Narzędzia do analizy statycznej (426)
- Smali i Baksmali (427)
- Androguard (427)
- apktool (427)
- dex2jar (427)
- jad (428)
- JD-GUI (428)
- JEB (428)
- Radare2 (428)
- IDA Pro i dekompilator Hex-Rays (429)
- Narzędzia do testowania aplikacji (429)
- Framework Drozer (Mercury) (429)
- iSEC Intent Sniffer i Intent Fuzzer (429)
- Narzędzia do hakowania sprzętu (430)
- Segger J-Link (430)
- JTAGulator (430)
- OpenOCD (430)
- Saleae (430)
- Bus Pirate (430)
- GoodFET (431)
- TotalPhase Beagle USB (431)
- Facedancer21 (431)
- TotalPhase Aardvark I2C (431)
- Chip Quik (431)
- Opalarka (431)
- Xeltek SuperPro (432)
- IDA (432)
Dodatek B. Repozytoria otwartych kodów źródłowych (433)
- Google (433)
- AOSP (433)
- System kontroli kodu Gerrit (434)
- Producenci SoC (434)
- AllWinner (435)
- Intel (435)
- Marvell (435)
- MediaTek (435)
- Nvidia (436)
- Texas Instruments (436)
- Qualcomm (436)
- Samsung (437)
- Producenci urządzeń (OEM) (437)
- ASUS (438)
- HTC (438)
- LG (438)
- Motorola (439)
- Samsung (439)
- Sony Mobile (439)
- Źródła projektów zewnętrznych (440)
- Inne źródła (440)
- Zmodyfikowane oprogramowanie fabryczne (440)
- Linaro (441)
- Replicant (441)
- Indeksy kodu (441)
- Wolni strzelcy (441)
Dodatek C. Źródła (443)
Skorowidz (501)
Kategoria: | Hacking |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-246-9941-4 |
Rozmiar pliku: | 10 MB |