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 App App Startuje heslo Zavřena Mrtvá User: Aplikace skončila... System: Ještě si ji tu nechám... Ú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
Mechanism illustration App & Keyboard UITextField Keyboard Created User taps a letter Ln C_Ln appended User presses signin Sent [C_Li]i=1..Length App fetches [C_Li]i=1..Length H/TOTP signature Received Keyboard Destroyed. App Sends Signed Request. C Securtity module Security Context Created Letter Ln Ciphered using OTP Context Deciphers Password H/TOTP signature computed Password & Context Destroyed
Mechanism illustration App & Keyboard UITextField Keyboard Created User taps a letter Ln C_Ln appended User presses signin Sent [C_Li]i=1..Length App fetches [C_Li]i=1..Length H/TOTP signature Received Keyboard Destroyed. App Sends Signed Request. Ln C_Ln C Securtity module Security Context Created Letter Ln Ciphered using OTP Context Deciphers Password H/TOTP signature computed Password & Context Destroyed
Mechanism illustration App & Keyboard UITextField Keyboard Created User taps a letter Ln C_Ln appended User presses signin [C_Li]i=1..Length Sent [C_Li]i=1..Length App fetches [C_Li]i=1..Length H/TOTP signature Received Keyboard Destroyed. App Sends Signed Request. [C_Li]i=1..Length binary garbage C Securtity module Security Context Created Letter Ln Ciphered using OTP Context Deciphers Password H/TOTP signature computed Password & Context Destroyed
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?