Bankovní aplikace ... a jejich bezpečnost
Petr Dvořák, Partner & iOS Development Lead @joshis_tweets
Má cenu se starat?
Business case • Ztráta peněz - nutnost přímé refundace • Ztráta dat - nutnost investic (nové karty, ...) • Reputační riziko
Reputační riziko • • •
Špatně odhadnutelný dopad Problém nemusí nastat, stačí možnost Běžný uživatel je neinformovaný
Nutná oběť...
Reputační riziko Cena v Kč Dopad incidentu
Cena protiopatření
Počet klientů
Typické problémy
Bezpečná komunikace •
iOS
•
Základní validace certifikátu.
•
Jednoduchá instalace nové CA do systému.
Bezpečná komunikace •
iOS
•
Základní validace certifikátu.
•
Jednoduchá instalace nové CA do systému.
Bezpečná komunikace •
iOS
•
Základní validace certifikátu.
•
Jednoduchá instalace nové CA do systému.
Bezpečná komunikace •
iOS
•
Základní validace certifikátu.
•
Jednoduchá instalace nové CA do systému.
Bezpečná komunikace •
iOS
•
Základní validace certifikátu.
•
Jednoduchá instalace nové CA do systému.
MITM Proxy
Co s tím? • • • •
Důsledná kontrola certifikátu na klientovi. Problém: Vypršení platnosti certifikátu. Pouze EV certifikáty od trusted CA. Dodatečné podepisování (OAuth 1.0a)
Logování informací • •
Většinou již vyřešeno. Proč se tím ještě zabývat?
Oddělená prostředí • • •
Prostředí pro vývoj: chci logovat, nemám certifikát. Prostředí pro produkci: nechci logovat, mám certifikát. Nastavení procesu na úrovni sestavení aplikace.
Jailbreak • • •
Nutnost pro vývojáře. Zapovězeno uživatelům. Vhodné nějak otestovat v aplikaci.
Jailbreak #pragma mark - Basic 90% test + (BOOL) deviceIsJailbroken { NSString *filePath = @"/Applications/Cydia.app"; return [[NSFileManager defaultManager] fileExistsAtPath:filePath]; }
Proč ne jailbreak? • • • •
Útočník získá kompletní přístup ke všemu. Jakákoliv ochrana je pak marná. Keychain je odkrytý. MobileSubstrate (run-time patche)
Demo Cycript
Cycript - Demo // helper functions function CGPointMake(x, y) { return {x:x, y:y}; } function CGSizeMake(w, h) { return {width:w, height:h}; } function CGRectMake(x, y, w, h) { return {origin:CGPointMake(x,y), size:CGSizeMake(w, h)}; } // add UIView to the main window var v = [[UILabel alloc] initWithFrame:CGRectMake(0,0,320,480)]; v.text = "Hacked by Inmite!"; v.textAlignment = 1; v.font = [UIFont boldSystemFontOfSize:25]; v.alpha = 0.85; [[UIApplication sharedApplication].keyWindow addSubview:v];
Ochrana hesla • •
Samozřejmě hesla neukládat “na disk”. A co ani do paměti?
iOS aplikace v akci Mallware? Game over...
App Zadává se Startuje heslo
App Zavřena
User: Aplikace skončila... System: Ještě si ji tu nechám...
App Mrtvá Útočník ukradne telefon... ... nebo ho ztratíte...
iOS Docs: “The system [iOS] keeps suspended apps in memory for as long as possible, removing them only when the amount of free memory gets low.”
Práce s pamětí • • • •
Tajné = nemělo by na zařízení dlouho zůstávat. iOS: Objective-C Android: Java Společný jmenovatel: C
UITextField
Mechanism illustration Sent [C_Li]i=1..Length
App & Keyboard
Keyboard Created
C Securtity module
C_Ln appended
Security Context Created
User taps a letter Ln
User presses signin
Letter Ln Ciphered using OTP
App fetches [C_Li]i=1..Length
H/TOTP signature Received
Keyboard Destroyed.
Context Deciphers Password
H/TOTP signature computed
Password & Context Destroyed
App Sends Signed Request.
App & Keyboard
UITextField
Mechanism illustration
Keyboard Created
User taps a letter Ln
Ln C Securtity module
Sent [C_Li]i=1..Length
C_Ln appended
Security Context Created
User presses signin
App fetches [C_Li]i=1..Length
H/TOTP signature Received
Keyboard Destroyed.
Context Deciphers Password
H/TOTP signature computed
Password & Context Destroyed
C_Ln
Letter Ln Ciphered using OTP
App Sends Signed Request.
UITextField
Mechanism illustration Sent [C_Li]i=1..Length
C_Ln appended
App & Keyboard
[C_Li]i=1..Length
Keyboard Created
User taps a letter Ln
User presses signin
App fetches [C_Li]i=1..Length
C Securtity module
[C_Li]i=1..Length
Security Context Created
Letter Ln Ciphered using OTP
Context Deciphers Password
H/TOTP signature Received
Keyboard Destroyed.
binary garbage
H/TOTP signature computed
Password & Context Destroyed
App Sends Signed Request.
Tečka na závěr...
Věděli jste, že ... • •
... iOS při přechodu aplikace na pozadí dělá screenshot aplikace? Nutnost ošetřit v rámci aplikace zobrazením dummy view.
Děkuji, otázky?