Bezpieczeństwo aplikacji mobilnych Artur Maj, Mariusz Burdach Prevenity Agenda Rodzaje aplikacji mobilnych Bezpieczeństwo aplikacji mobilnych na przykładzie platform: Apple ios (iphone, ipad) Android Wyzwania dla aplikacji mobilnych 1
Aplikacje mobilne Popularne rodzaje aplikacji mobilnych: Aplikacja WWW ( Lite ) Aplikacja natywna Aplikacja na karcie SIM Aplikacja asynchroniczne/dostęp przez SMS/USSD Aplikacja głosowa (IVR) Aplikacja WWW ( Lite ) Wybrane zagrożenia: Klasyczne ataki na aplikacje WWW, np.: SQL Injection Cross-Site Scripting Cross-Site Request Forgery HTTP Redirect itp. Złośliwe oprogramowanie / MITM Brak silnego uwierzytelniania i autoryzacji Phishing 2
Aplikacja WWW (cd.) Aplikacja natywna Wybrane zagrożenia: Zgubienie lub kradzież urządzenia Oprogramowanie złośliwe / MITM Ataki na stronę serwerową (np. Web Services) Podmiana aplikacji 3
Aplikacja na karcie SIM Wybrane zagrożenia: Złośliwe oprogramowanie Zdalny dostęp do GUI telefonu Internet Wi-Fi Bluetooth UMTS GPRS/EDGE Dostęp przez SMS/USSD Wybrane zagrożenia: Przekierowywanie wiadomości Podszywanie się pod nadawców wiadomości Ochrona poufności wiadomości Operator telekomunikacyjny Nieświadomy użytkownik Atakujący 4
Aplikacja głosowa (IVR) Wybrane zagrożenia: Podsłuch Nagrywanie Przekierowanie Vishing Bezpieczeństwo aplikacji na platformie Apple ios (iphone/ipad) 5
Środowisko programistyczne iphone - ios C/C++/Objective-C Secure Coding Guide, Apple 2010 http://developer.apple.com/library/mac/#documentation/security /Conceptual/SecureCodingGuide/Introduction.html Buffer overflows, format string, race-conditions, denial of service, etc Przykład błędów: CVE-2010-1797 PDF Compact Font Format stack-based buffer overflow CVE-2010-2973 Integer overflow w IOSurface Źródło: community.websense.com/blogs/securitylabs 6
ASLR Address Space Layout Randomization ios 4.3 2 tryby (PIE/noPIE) PIE Segment kodu TEXT Segment danych DATA Heap Stack Funkcje w bibliotekach Nie Bez zmian Bez zmian Zmienny Bez zmian Zmienny (po restart) Tak Zmienny Zmienny Zmienny Zmienny Zmienny (po restart) Dynamic linker (dyld) Bez zmian Zmienny Identyfikacja PIE (otool hv plik_wykonywalny) prevenity.app (architecture armv7): Mach header Magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC ARM V7 0x00 EXECUTE 19 2404 NOUNDEFS DYLDLINK TWOLEVEL PIE Uprawnienia aplikacji ios Provisioning Profile -.plist (XML) podpisany przez Apple Entitlements (get-task-allow, keychain-access-group, run-unsigned-code, ) <key>entitlements</key> <dict> <key>application-identifier</key> <key>get-task-allow</key> 7
Obfuskacja ios Symbole ( Strip Linked Products / Strip Style w Xcode) Szyfrowane aplikacje z AppStore # otool -l aplikacja Load command 9 cmdsize 20 cryptoff 4096 cryptsize 258048 cryptid 1 Odtwarzanie sekcji kodu cmd LC_ENCRYPTION_INFO iphone:~ root# gdb aplikacja (gdb) break *(OEP) (gdb) run (gdb) dump memory aplikacja_decrypted 0x1000 (rozmiar pierwszego obszaru pamięci rx + OEP) Narzędzie http://prevenity.com/files/iphone.py ios name 0x2dd8 MojaKlasa basemethods 0x3468 (struct method_list_t *) name 0x2840 metodainstancji: types 0x2f15 i12@0:4@8 imp 0x2791 baseprotocols 0x0 ivars 0x3494 entsize 20 count 3 offset 0x34d8 4 name 0x2d73 mojeimie type 0x2f1f @"NSString" alignment 2 size 4 offset 0x34dc 8 name 0x2d7c Nazwisko type 0x2f1f @"NSString" alignment 2 size 4 offset 0x34e0 12 name 0x2d85 wiek type 0x2f2b i alignment 2 size 4 Reverse Engineering IDA Pro 6.1 8
Ochrona pamięci ARM bit XN Heap/Stack non-executable Strony nie mogą mieć uprawnień RWX Return-to-libc Return-oriented programming Podpis cyfrowy/dystrybucja ios Certyfikat dla programisty Wszystkie aplikację są podpisane przez Apple (tzw. mandatory code signing) Dystrybucja wyłącznie poprzez AppStore Inne modele: Development, Ad-Hoc oraz Enterprise (MDM/OTA) # codesign dvvv mariusz Executable=/Users/mariuszburdach/mariusz Identifier=Prevenity.mariusz Format=bundle with Mach-O universal (armv6 armv7) CodeDirectory v=20100 size=266 flags=0x0(none) hashes=5+5 location=embedded CDHash=37e528060cdde51425d4cfe0f94f4708887b54c7 Signature size=1256 Authority=iPhone Developer Signed Time=2011-08-07 15:51:16 CDHash (static/dynamic trust cache) AppleMobileFileIntegrity 9
Code Signing Enforcement ios Kod wykonywalny załadowany do pamięci nie może być zmieniony CSE chroni przed: Załadowaniem niepodpisanej biblioteki Załadowaniem nowego kodu wykonywalnego podczas działania aplikacji Zastosowaniem SMC (self-modified code) Entitlement: dynamic-codesigning XNU kernel struct proc { LIST_ENTRY(proc) p_list; /* List of all processes. */ pid_t p_pid; /* Process identifier. (static)*/ void * task; /* corresponding task (static)*/ struct proc * p_pptr; /* Pointer to parent process.(ll) */ uint32_t p_csflags; /* flags for codesign (PL) */ uint32_t p_pcaction; /* action for process control on starvation */ Code Signing Enforcement (cd.) /* code signing attributes of a process */ #define CS_VALID 0x0001 /* dynamically valid */ #define CS_HARD 0x0100 /* don't load invalid pages */ #define CS_KILL 0x0200 /* kill process if it becomes invalid */ #define CS_EXEC_SET_HARD 0x1000 /* set CS_HARD on any exec'ed process */ #define CS_EXEC_SET_KILL 0x2000 /* set CS_KILL on any exec'ed process */ #define CS_KILLED 0x10000 /* was killed by kernel for invalidity */ #define CS_RESTRICT 0x20000 /* tell dyld to treat restricted */ /* csops operations */ #define CS_OPS_STATUS 0 /* return status */ #define CS_OPS_MARKINVALID 1 /* invalidate process */ #define CS_OPS_MARKHARD 2 /* set HARD flag */ #define CS_OPS_MARKKILL 3 /* set KILL flag (sticky) */ #define CS_OPS_PIDPATH 4 /* get executable's pathname */ #define CS_OPS_CDHASH 5 /* get code directory hash */ #define CS_OPS_PIDOFFSET 6 /* get offset of active Mach-o slice */ #define CS_OPS_ENTITLEMENTS_BLOB 7 /* get entitlements blob */ #define CS_OPS_MARKRESTRICT 8 /* set RESTRICT flag (sticky) */ #ifndef KERNEL BEGIN_DECLS /* code signoperations */ int csops(pid_t pid, unsigned int ops, void * useraddr, size_t usersize); END_DECLS 10
ios Sandbox Kontener dla aplikacji /var/mobile/applications/uuid Moduł jądra MAC Framework Security policy dla każdego procesu (profil) container sandbox profile https://github.com/dionthegod/xnusandbox (gdb) print (FILE *) fopen("/private/var/mobile/library/sms/sms.db", "rb") $1 = (FILE *) 0x1d5775ac (gdb) print (int) fork() $2 = 920 (gdb) print (int) kill(375) $3 = -1 ios Sandbox (cd.) Container Sandbox Profile (['default'], ['deny-with-unknown-modifiers']) (['ipc-posix-sem', 'ipc-posix-shm', 'file-ioctl', 'mach-bootstrap', 'mach-lookup', 'network*', 'network-inbound', 'network-bind', 'priv*', 'priv-adjtime', 'priv-netinet*', 'priv-netinet-reservedport', 'sysctl-read'], ['allow']) (['file-read-data'], [('allow', path.match("(^/system/library/carrier Bundles/(.)*.png$) ), ('deny-with-unknown-modifiers', 'path.match("(^/private/var/logs(/ $)) (^/private/var/mobile/library/carrier Bundles($ /)) (^/System/Library/Carrier Bundles($ /))")'), ('if', 'path_in_extensions', [('allow', 'path.match("(^/private/var/mobile/applications/(([-0-9a-z])*)($ /))")'), ('deny-with-unknown-modifiers', path.match("(^/private/var/mnt/) (^/private/var/tmp(/ $)) (^/private/var/mobile/applications/(.)*$)")'), 11
Ochrona danych ios Sprzętowy akcelerator dla AES-256 GID KEY/UID KEY Hasło użytkownika (passcode) + unikalny klucz urządzenia (UID_KEY) Data Protection Ochrona danych w systemie plików Protection Class (NSFileProtection[None Complete]) Ochrona elementów z wykorzystaniem Keychain Protection Class (ksecattraccessible [Always AfterFirstUnlock WhenUnlocked ThisDeviceOnly...]) Ochrona danych (cd.) Źródło: Sogeti.com 12
Mobile Forensics ios Logiczna kopia pamięci oraz bit-by-bit image http://viaforensics.com/education/white-papers/iphone-forensics/ Metoda Jonathana Zdziarski Modyfikacja obrazu ramdisk z firmware VROM LLB iboot Kernel System Software Aplikacja Springboard metoda AppleKeyStore NSProtectComplete (Passcode) ~ 18 min/4 znakowy passcode Bezpieczeństwo aplikacji na platformie Android 13
Architektura systemu Android Źródło: http://developer.android.com Komponenty aplikacji Android Komponent Activity Service Content provider Broadcast receiver Opis Pojedynczy ekran z interfejsem użytkownika, np.: - Ekran wyświetlający wiadomości SMS - Ekran wyświetlający zawartość wiadomości SMS itp.. Usługa działająca w tle, bez interfejsu użytkownika, np.: - Aplikacja pobierająca pliki z serwera - Aplikacja odtwarzająca muzykę Zarządzanie danymi aplikacji (również ich współdzieleniem), np.: - Książka adresowa - Konfiguracja aplikacji Odpowiedź na wiadomości systemowe lub od innych aplikacji, np.: - Wyłączenie ekranu - Wykonanie zdjęcia 14
Mechanizmy bezpieczeństwa Android Na poziomie sprzętu: ARM v6 execute-never Mechanizmy bezpieczeństwa jądra Linux Izolacja procesów Model praw dostępu użytkownika (UID) i grupy (GID) Wymiana informacji między procesami (IPC) USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 388 240 ffffffff 00000000 S /init (u:0, s:437) root 2 0 0 0 ffffffff 00000000 S kthreadd (u:0, s:0) root 3 2 0 0 ffffffff 00000000 S ksoftirqd/0 (u:6, s:0) root 4 2 0 0 ffffffff 00000000 S watchdog/0 (u:0, s:0) root 5 2 0 0 ffffffff 00000000 S events/0 (u:0, s:309) (...) app_70 755 71 106012 15920 ffffffff 00000000 S com.htc.demoflopackageinstaller (u:6, s:0) app_42 814 71 111596 20752 ffffffff 00000000 S com.htc.android.mail (u:34, s:14) app_56 839 71 109128 21644 ffffffff 00000000 S com.htc.weatherwallpaper (u:942, s:447) app_79 1232 71 111856 23424 ffffffff 00000000 S com.speedsoftware.rootexplorer (u:3803, s:358) app_37 1409 71 109132 18496 ffffffff 00000000 S com.facebook.katana (u:12, s:11) app_71 1419 71 132732 21920 ffffffff 00000000 S com.google.android.youtube (u:41, s:14) app_74 2134 71 106328 18308 ffffffff 00000000 S com.prevenity.helloworld (u:8, s:6) Mechanizmy bezpieczeństwa Android (cd.) 15
Mechanizmy bezpieczeństwa Android (cd.) Mechanizmy ochrony pamięci Ochrona przed stack buffer overrun ProPolice Ochrona przed integer overvlows safe_iop Ochrona przed double free(), chunk consolidation, integer overflow during memory allaction, null pointer dereference privilege escalation Mechanizmy bezpieczeństwa Android (cd.) Piaskownica dla aplikacji (Application Sandbox) Dotyczy wszystkich aplikacji oprócz jądra (zarówno Dalvik jak również aplikacji natywnych i bibliotek) Każda aplikacja ma przypisany unikalny identyfikator użytkownika (UID) i grupy (GID) Każda aplikacja jest uruchamiana w oddzielnym procesie / maszynie wirtualnej Kod wykonywalny i dane aplikacji nie są dostępne dla innych aplikacji* 16
Mechanizmy bezpieczeństwa Android (cd.) Mechanizmy ochrony system plików Prawa dostępu do plików na bazie Linux drwxr-x--x app_60 app_60 1980-01-06 01:00 com.htc.lmw drwxr-x--x app_3 app_3 1980-01-06 01:00 com.htc.calendar drwxr-x--x app_3 app_3 1980-01-06 01:00 com.htc.provider.customizationsettings drwxr-x--x system system 1980-01-06 01:01 com.htc.android.worldclock drwxr-x--x nobody nobody 1980-01-06 01:01 com.htc.weatherwidget drwxr-x--x app_3 app_3 1980-01-06 01:01 com.htc.provider.settings drwxr-x--x app_61 app_61 1980-01-06 01:01 com.google.android.street drwxr-x--x app_62 app_62 1980-01-06 01:01 com.htc.android.htcime drwxr-x--x app_63 app_63 1980-01-06 01:01 com.android.defcontainer drwxr-x--x app_64 app_64 1980-01-06 01:01 com.android.updater drwxr-x--x app_65 app_65 1980-01-06 01:01 com.htc.cs drwxr-x--x app_20 app_20 1980-01-06 01:01 com.htc.music drwxr-x--x app_5 app_5 1980-01-06 01:01 com.android.htcdialer drwxr-x--x app_3 app_3 1980-01-06 01:01 com.htc.weather.agent drwxr-x--x system system 1980-01-06 01:01 com.android.systemui drwxr-x--x app_66 app_66 1980-01-06 01:01 com.android.setupwizard drwxr-x--x app_67 app_67 1980-01-06 01:01 com.htc.reportagent drwxr-x--x app_68 app_68 1980-01-06 01:01 com.bookmarkshortcut20110516104653075 Mechanizmy bezpieczeństwa Android (cd.) Mechanizm uprawnień aplikacji Developer musi określić wymagane prawa dostępu (w pliku AndroidManifest.xml) do zasobów sprzętowych i funkcji urządzenia, oraz danych użytkownika: Informacji osobistych (kontakty, kalendarz itp.) Wrażliwych urządzeń wejściowych (kamera, mikrofon, GPS itp.) Metadanych urządzenia (logi, nr telefoniczny urządzenia itp.) Użytkownik musi wyrazić pozwolenie na skorzystanie przez aplikację z wszystkich z wymienionych praw, aby można było aplikację uruchomić Wyrażenie zgody jest jednorazowe (podczas instalacji aplikacji) i obowiązuje do momentu deinstalacji aplikacji z systemu Użytkownicy mogą globalnie wyłączyć daną funkcjonalność (np. odbiornik GPS, Wi-Fi itp.) Domyślnie aplikacja nie ma żadnych pozwoleń 17
Mechanizmy bezpieczeństwa Android (cd.) Mechanizm uprawnień aplikacji Mechanizmy bezpieczeństwa Android (cd.) Mechanizm uprawnień aplikacji (cd.) 18
Słabości bezpieczeństwa Android Otwartość Android Market piętą achillesową bezpieczeństwa systemu Android: Do publikacji aplikacji wymagane jedynie: Rejestracja online Wniesienie opłaty $25 Możliwość użycia certyfikatów typu self-signed Brak procesu weryfikacji bezpieczeństwa aplikacji przed publikacją ułatwia publikację malware Nadużycia mechanizmu uprawnień Niezgodność aplikacji z zasadą least privilege Przykład 1: Zwykły kalkulator Przykład 2: Aplikacja do przechowywania haseł i sekretów 19
Możliwość dekompilacji aplikacji Możliwości dekompilacji aplikacji (cd.) 20
Możliwości dekompilacji aplikacji (cd.) Root ing systemu Root ing systemu daje większe możliwości, ale Nie wiemy co tak naprawdę uruchamiamy Pochodzenie większości oprogramowania do root owania telefonu jest praktycznie nie do zweryfikowania Jaką mamy gwarancję, że nie jest to malware? Osłabiamy mechanizmy bezpieczeństwa systemu Ułatwia uzyskanie wrażliwych danych z telefonu w przypadku kradzieży 21
Root ing systemu (cd.) Przykład możliwości pozyskania haseł i tokenów uwierzytelniających Zdalna instalacja aplikacji czyli jak ważna jest ochrona hasła do konta w Google 22
Słabości ochrony systemu plików Użycie pamięci SD Card: Pliki są do odczytu dla wszystkich aplikacji posiadających uprawnienia dla karty SD (system FAT!) Ryzyko nieautoryzowanego dostępu do danych aplikacji Szyfrowany system plików dostępny dopiero od wersji 3.0 Honeycomb Szyfrowanie algorytmem AES Klucz szyfrujący o długości 128 bitów, wywodzący się z hasła użytkownika i losowej soli Użycie szyfrowania wymaga podawania hasła przez użytkownik Błędy programistyczne (przykłady) Nadmiarowe prawa dostępu do komponentów Mogą umożliwić eskalację uprawnień i dostęp do danych podatnej aplikacji Brak walidacji danych podczas korzystania z komponentów Content Provider Głównie umożliwia nieautoryzowany odczyt danych z bazy danych SQLite Niewłaściwa obsługa protokołu SSL/TLS brak lub nieprawidłowo zaimplementowana walidacja certyfikatów SSL serwerów 23
Wyzwania dla aplikacji mobilnych Podsumowanie Aplikacje mobilne często stanowią rozbudowę tradycyjnych aplikacji internetowych lub kolejny kanał dostępu do informacji Duża różnorodność mobilnych systemów operacyjnych utrudnia zapewnienie bezpieczeństwa aplikacjom i przetwarzanych przez nie danych Jeżeli ich architektura nie zostanie zbudowana z uwzględnieniem specyfiki danych systemów mobilnych, mogą się one stać najsłabszym ogniwem całego systemu IT Perspektywa bezpieczeństwa może być różna od celów stosowania: Perspektywa korporacji Perspektywa konsumenta Perspektywa dostarczyciela usług lub aplikacji itp. 24
Największe wyzwania Zapewnienie silnego i jednocześnie wygodnego w użyciu mechanizmu uwierzytelniania użytkowników Ochrona aplikacji i danych przed złośliwym oprogramowaniem i atakami MITM W przypadku niektórych platform - ochrona przed rozpowszechnianiem nieautoryzowanych lub zainfekowanych aplikacji Ochrona danych przed nieautoryzowanym dostępem w przypadku kradzieży urządzenia Zapraszamy na blog http://mobile.prevenity.com 25