...

Testowanie bezpieczenstwa aplikacji mobilnych

by securing

on

Report

Category:

Mobile

Download: 0

Comment: 0

741

views

Comments

Description

Prezentacja z konferencji Mobilization 2014.
Abstrakt:
Na rzeczywistych przykładach pokażę jak wygląda proces oceny bezpieczeństwa aplikacji mobilnych. Zobaczymy m.in. jak wykrywać słabości związane z przechowywaniem danych na urządzeniu, nieprawidłowości w transmisji, oraz najgroźniejsze - błędy w API po stronie serwera (np. błędy logiczne, kontroli dostępu, REST). Jednocześnie okaże się jakie techniki utrudniają ataki, jaki jest faktyczny wpływ na ryzyko poszczególnych podatności, oraz jakie zabezpieczenia warto zastosować w różnych aplikacjach.
Download Testowanie bezpieczenstwa aplikacji mobilnych

Transcript

  • 1. Testowanie bezpieczeństwaaplikacji mobilnychSławomir Jasek
  • 2. Dzień dobry!Sławomir JasekPentester / konsultant bezpieczeństwaOd 2003 roku:Ocena bezpieczeństwa aplikacji, systemów, sieci...Najskuteczniej pomagamy już od etapu projektowania.
  • 3. Co będzie● Spojrzenie pentestera (= intruza) na aplikacje mobilne● Testowanie – na przykładach głównie Android– Analiza paczki i kodu– Dane zapisywane w urządzeniu i w logach– RPC– Transmisja– API● Podsumowanie
  • 4. Aplikacja mobilna – spojrzenie intruzaRPCUŻYTKOWNIKSIEĆZAPISDANYCHOS
  • 5. Jak?Inna aplikacja naurządzeniuPodatności systemuKradzież, zgubienieurządzenia, przypadkowydostęp, inna aplikacja...Social engineering,słabości użytkownikównp. słabe hasło, zbyttrudne mechanizmyAtaki natransmisję -podsłuch,słabości SSLAPI – błędy kontrolidostępu, logiczne,konfiguracji...Analizapaczki
  • 6. Kto?„grubszy cwaniak”„script-kiddie”Krzysztof Jarzynaze SzczecinaDorwał się do narzędzi,wali na oślep, zwykle niebardzo rozumiejąc co siędzieje.Coś mu się przypadkiemudało (lub nie), i aferagotowa.Ma motywację, zasobyoraz możliwościprzeprowadzenia atakunakierowanego
  • 7. Po co?● Jak to po co?Bo może!● Dla sławy!● Dla satysfakcji● Dla pieniędzy● Dla innych korzyści● ...https://www.flickr.com/photos/viirok/2498157861
  • 8. Paczka aplikacjiPLAY / STORE
  • 9. Paczka aplikacji● Android– Aplikacje bez rootnp. „My App Sharer”– APK Leecher– Playdrone – masowepobieranie do chmury– (nie wspominając root)● iOS, inne – DRM nie jest problemem
  • 10. Rozpakowanie, dekompilacja...
  • 11. Analiza kodu● Do ataku jakiegoś procesu przydaje się rozumiećjak on działa● Własna kryptografia, błędy implementacji...● Hasła, klucze, tokeny zaszyte w aplikacjiNp. tokeny FB, Google, MS, Yahoo i Linkedin aplikacji Airb2b – 10 milionów użytkownikówhttp://viennot.com/playdrone.pdf● Tak, znaleźliśmy token FB w aplikacji ;)
  • 12. Przykład● Przesyłanie mailem danych do „bazy” –support@pewnafirma.com● Założenie : wysyłamy bezpośrednio przez nasz serwerpocztowy – mail.pewnafirma.com, nie angażujemy kontużytkownika● Serwer oczywiście nie jest open-relayem, do wysłania mailawymaga uwierzytelnienia● Hasło zaszyte w aplikacji● Co możemy zrobić? (oprócz wysyłania spamu)To samo hasło do POP3 = dostęp do skrzynki!
  • 13. Wytęż wzrok i znajdź klucz „szyfrujący”w zaobfuskowanym kodziepublic final class aimplements b{private static final char[] a = { 67,72,65,82,84,79,83,67,72,76,85,68,78,73,69 };private static void a(char[] paramArrayOfChar, char paramChar){paramArrayOfChar[0] = paramChar; int i = 0;if (i < paramArrayOfChar.length){if (i % 2 == 0) { paramArrayOfChar[i] = a[(i % a.length)]; }for (;;){i++; break; paramArrayOfChar[0] = paramChar;}}}
  • 14. Wytęż wzrok i znajdź klucz „szyfrujący”w zaobfuskowanym kodziepublic final class aimplements b{private static final char[] a = { 67,72,65,82,84,79,83,67,72,76,85,68,78,73,69 };private static void a(char[] paramArrayOfChar, char paramChar){paramArrayOfChar[0] = paramChar; int i = 0;if (i < paramArrayOfChar.length){if (i % 2 == 0) { paramArrayOfChar[i] = a[(i % a.length)]; }for (;;){i++; break; paramArrayOfChar[0] = paramChar;}}}„CHARSCHLUDNIE”
  • 15. Manifest, analiza uprawnień...
  • 16. Dane zapisywane na urządzeniuKradzież, zgubienieurządzenia, przypadkowydostęp, inna aplikacja...
  • 17. Jak to sprawdzić● Ręcznie: adb pull na różnych etapach pracy aplikacji• Automaty, skrypty – np. wrzucanie do svn
  • 18. Uprawnienia plików
  • 19. Logi, cache...● Dość często zawierają pełne żądania HTTP,wprowadzane klawisze – np. hasło użytkownikaINSERT INTO "cfurl_cache_response"VALUES(2,0,1594297610,0,'http://dev/service/auth/createFirstSession?password=35971831&sessionId=857006 &userId=24384344','1970-01-21 23:03:36');
  • 20. Logi, cache...● Dość często zawierają pełne żądania HTTP,wprowadzane klawisze – np. hasło użytkownikaI/System.out( 1098): BaseActivity calling: /login onResponseData:{"response":{"mask":"c794ffa2ffbdffc180ff41ff","phi":"/(...)D/InputEventConsistencyVerifier( 1098): 0: sent at 6529438000000, KeyEvent { action=ACTION_UP,keyCode=KEYCODE_3, scanCode=4, metaState=0, flags=0x8, repeatCount=0, eventTime=6529438,downTime=6529371, deviceId=0, source=0x301 }D/InputEventConsistencyVerifier( 1098): 0: sent at 6532144000000, KeyEvent { action=ACTION_UP,keyCode=KEYCODE_5, scanCode=6, metaState=0, flags=0x8, repeatCount=0, eventTime=6532144,downTime=6532032, deviceId=0, source=0x301 }D/InputEventConsistencyVerifier( 1098): 0: sent at 6534378000000, KeyEvent { action=ACTION_UP,keyCode=KEYCODE_7, scanCode=8, metaState=0, flags=0x8, repeatCount=0, eventTime=6534378,downTime=6534277, deviceId=0, source=0x301 }D/InputEventConsistencyVerifier( 1098): 0: sent at 6536876000000, KeyEvent { action=ACTION_UP,keyCode=KEYCODE_0, scanCode=11, metaState=0, flags=0x8, repeatCount=0, eventTime=6536876,downTime=6536811, deviceId=0, source=0x301 }I/System.out( 1098): BaseActivity calling: /login/maskedPassword onResponseData:{"response":{"state":"A","authenticated":true},"msgId":"1344674218830418930","errorCode":0,"time":1351588394408,"errorDesc":""}
  • 21. Logi, cache – skutki● Warunki wykorzystania trudne do spełnienia– Kto może te logi czytać?– Jak długo są przetrzymywane?– Czy problem dotyczy tylko jednego feralnego builda?– Czy problem występuje na wszystkich wersjach OS?– Jakie dodatkowe warunki muszą być spełnione?– ...● Ale to może nie mieć żadnego znaczenia w obliczuklęski wizerunkowej – np. Starbucks, styczeń 2014
  • 22. Logi, cache – skutki● Warunki wykorzystania trudne do spełnienia– Kto może te logi czytać?– Jak długo są przetrzymywane?– Czy problem dotyczy tylko jednego feralnego builda?– Czy problem występuje na wszystkich wersjach OS?– Jakie dodatkowe warunki muszą być spełnione?– ...● Ale to może nie mieć żadnego znaczenia w obliczuklęski wizerunkowej – np. Starbucks, styczeń 2014
  • 23. Logi, cache – skutki● Warunki wykorzystania trudne do spełnienia– Kto może te logi czytać?– Jak długo są przetrzymywane?– Czy problem dotyczy tylko jednego feralnego builda?– Czy problem występuje na wszystkich wersjach OS?– Jakie dodatkowe warunki muszą być spełnione?– ...● Ale to może nie mieć żadnego znaczenia w obliczuklęski wizerunkowej – np. Starbucks, styczeń 2014
  • 24. Logi, cache – skutki● Warunki wykorzystania trudne do spełnienia– Kto może te logi czytać?– Jak długo są przetrzymywane?– Czy problem dotyczy tylko jednego feralnego builda?– Czy problem występuje na wszystkich wersjach OS?– Jakie dodatkowe warunki muszą być spełnione?– ...● Ale to może nie mieć żadnego znaczenia w obliczuklęski wizerunkowej – np. Starbucks, styczeń 2014
  • 25. Logi, cache – skutki● Warunki wykorzystania trudne do spełnienia– Kto może te logi czytać?– Jak długo są przetrzymywane?– Czy problem dotyczy tylko jednego feralnego builda?– Czy problem występuje na wszystkich wersjach OS?– Jakie dodatkowe warunki muszą być spełnione?– ...● Ale to może nie mieć żadnego znaczenia w obliczuklęski wizerunkowej – np. Starbucks, styczeń 2014
  • 26. Logi, cache – skutki● Warunki wykorzystania trudne do spełnienia– Kto może te logi czytać?– Jak długo są przetrzymywane?– Czy problem dotyczy tylko jednego feralnego builda?– Czy problem występuje na wszystkich wersjach OS?– Jakie dodatkowe warunki muszą być spełnione?– ...● Ale to może nie mieć żadnego znaczenia w obliczuklęski wizerunkowej – np. Starbucks, styczeń 2014
  • 27. Logi, cache – skutki● Warunki wykorzystania trudne do spełnienia– Kto może te logi czytać?– Jak długo są przetrzymywane?– Czy problem dotyczy tylko jednego feralnego builda?– Czy problem występuje na wszystkich wersjach OS?– Jakie dodatkowe warunki muszą być spełnione?– ...● Ale to może nie mieć żadnego znaczenia w obliczuklęski wizerunkowej – np. Starbucks, styczeń 2014
  • 28. RPCInna aplikacja naurządzeniu
  • 29. BAD INTENTions<receiver android:name =“MojReceiver”><intent -filter><action android:name = "android.intent.action.PACKAGE_ADDED"String action = intent.getAction();if (action...)
  • 30. BAD INTENTions<receiver android:name =“MojReceiver”><intent -filter><action android:name = "android.intent.action.PACKAGE_ADDED"String action = intent.getAction();if (action...)Intent intent = new Intent();intent.setComponent (“MojReceiver”);sendBroadcast(intent);
  • 31. BAD INTENTions<receiver android:name =“MojReceiver”><intent -filter><action android:name = "android.intent.action.PACKAGE_ADDED"String action = intent.getAction();if (action...)Intent intent = new Intent();intent.setComponent (“MojReceiver”);sendBroadcast(intent);Nullpointer exceptionCRASH
  • 32. BAD INTENTions<receiver android:name =“MojReceiver”><intent -filter><action android:name = "android.intent.action.PACKAGE_ADDED"String action = intent.getAction();if (action action...)!= null ){if(action...)Intent intent = new Intent();intent.setComponent (“MojReceiver”);sendBroadcast(intent);Nullpointer exceptionCRASH
  • 33. BAD INTENTions<receiver android:name =“MojReceiver”><intent -filter><action android:name = "android.intent.action.PACKAGE_ADDED"String action = intent.getAction();if (action != null) ){Uid = intent.getStringExtra(“android.intent.extra.UID”);
  • 34. BAD INTENTions<receiver android:name =“MojReceiver”><intent -filter><action android:name = "android.intent.action.PACKAGE_ADDED"String action = intent.getAction();if (action != null) ){Uid = intent.getStringExtra(“android.intent.extra.UID”);Intent intent = new Intent (“AKUKU”);intent.setComponent (“MojReceiver”);intent.putExtra (“android.intent.extra.UID”, attackerUID);sendBroadcast(intent);
  • 35. BAD INTENTions<receiver android:name =“MojReceiver”><intent -filter><action android:name = "android.intent.action.PACKAGE_ADDED"String action = intent.getAction();if (action != null) ){null && action.equals (“PACKAGE_ADDED”) ){Uid = intent.getStringExtra(“android.intent.extra.UID”);Intent intent = new Intent (“AKUKU”);intent.setComponent (“MojReceiver”);intent.putExtra (“android.intent.extra.UID”, attackerUID);sendBroadcast(intent);
  • 36. BAD INTENTions<permission android:name ="com.dobreprogramy.permission"android:protectionLevel = "signature" ...<receiver android:name ="dobryReceiver" android:exported="true"android:permission="com.dobreprogramy.permission">...</receiver>
  • 37. BAD INTENTions<permission android:name ="com.dobreprogramy.permission"android:protectionLevel = "signature" ...<receiver android:name ="dobryReceiver" android:exported="true"android:permission="com.dobreprogramy.permission">...</receiver>Intruz może zarejestrować to samo wcześniej<permission android:name ="com.dobreprogramy.permission"android:protectionLevel="normal" ...><uses-permission android:name ="com.dobreprogramy.permission"/>
  • 38. Analiza/atak RPC● Mnóstwo narzędzi– Drozerhttps://www.mwrinfosecurity.com/products/drozer/– Android Hooker, comdroid, chex, epicc, iSEC intentfuzzer/sniffer...● Ręcznieam broadcast -n com.aplikacja/com.aplikacja.BroadcastReceiveram start -a android.intent.action.CALL -d tel://000-0000
  • 39. TransmisjaIntruz musi mieć dostępdo transmisji – pasywny(podsłuch), lub aktywny –aby modyfikować ruchAtaki natransmisję -podsłuch,słabości SSL
  • 40. Przechwytywanie ruchu● Local proxy – co się dzieje „na łączu” (np. żądania HTTP)– Burp: wersja darmowa na początek wystarczyportswigger.net/burp– Fiddler – MSwww.telerik.com/fiddler– wiele innych● Emulator przez proxy:www.telerik.com/fiddler/emulator -avd emu -http-proxy 127.0.0.1:8080
  • 41. SSL – wróćmy do podstawCA
  • 42. Co zrobi klient?● Jeśli ten sam certyfikat byłbypodpisany innym CA?[POWINIEN] wyświetlićostrzeżenie, przerwaćtransmisję...Zaakceptuje bezmrugnięcia.CA nie jest wzaufanychCA w zaufanych
  • 43. Certyfikaty CA zaszyte w urządzeniach● Ćwiczenie: sprawdź jakie CA masz w swoimtelefonie● Np. iOS8 ma m.in. certyfikaty rządów:Chin: China Internet Network Information CenterHong Kongu: Hongkong Post e-Cert.Japonii: 3 CAHolandii: 3 CA (PKIoverheid)Taiwanu: Government Root Certification AuthorityTurcji: Scientific and Technological Research Council of TurkeyUSA: 5 CA, Department of Defense
  • 44. SSL – „Man in the middle”CA?Verisignwww.pewnafirma.plVerisignwww.pewnafirma.pl
  • 45. Stosunkowo często...sslcontext = SSLContext.getInstance("TLS");atrustmanager = new TrustManager[1];atrustmanager[0] = new EasyX509TrustManager(null);sslcontext.init(null, atrustmanager, null);Pusty TrustManager – akceptuje wszystkie certyfikaty
  • 46. Przechwytywanie ruchu SSL● Certyfikat CA Burp-a
  • 47. Instalujemy w urządzeniu● Aplikacja używa domyślnegotruststore urządzenia– Android > 4 – w interfejsie– Wrzucamy na kartę SD (plik .crt)adb push cacert.der /sdcard/cacert.crt– „Zainstaluj z karty SD”● Certyfikat zaszyty w aplikacji(pinning)– Podmieniamy w paczce aplikacji
  • 48. APIAPI – błędy kontrolidostępu, logiczne,konfiguracji...
  • 49. Mobile CAPTCHA● Proces rejestracji, potwierdzanej SMS● CAPTCHA w celu ograniczenia masowegonadużycia procesu (koszty SMS, przeciążeniesystemu...)● Należy kliknąć w odpowiedni obrazek (1 z 6)
  • 50. Mobile CAPTCHA● Pomysł chybiony już w założeniach– Prawdopodobieństwo trafienia „na ślepo” bardzowysokie● W implementacji jeszcze gorzej– Każdy obrazek to inny statyczny plik, intruz może je zindeksowaći ustalić w którym miejscu jest obrazek przedstawiający żądanesłowo
  • 51. REST APIfragment otrzymanej dokumentacji REST API
  • 52. Historia rachunku
  • 53. Żądanie HTTP po przechwyceniuGET /services/history/account/85101022350445200448009906 45101022350445200448005388 HTTP/1.1SA-DeviceId: 940109f08ba56a89SA-SessionId: 826175Accept: application/jsonHost: accConnection: Keep-AliveUser-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)Podmiana nr rachunku – uzyskujemy cudze dane
  • 54. Dane użytkownikaUżytkownik 1GET /services/user/profile HTTP/1.1SA-DeviceId: d4c79a0fd994b1f8SA-SessionId: 850071Accept: application/jsonHost: accConnection: Keep-AliveUser-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
  • 55. Dane użytkownikaUżytkownik 12GET /services/user/profile HTTP/1.1SA-DeviceId: d4c79a0fd994b1f8940109f08ba56a89SA-SessionId: 850075850071Accept: application/jsonHost: accConnection: Keep-AliveUser-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)DeviceId jedynym zabezpieczeniem
  • 56. Historia pewnej aplikacji...● Mnóstwo błędów kontroli dostępu● Po zgłoszeniu dostawcy:„Kontrola dostępu w aplikacji jest, tylko natestowym środowisku wyłączona”● Pomimo napiętych terminów włączyć się udałodopiero po kilku tygodniach ;)
  • 57. Przechwytywanie ruchu – utrudnienie
  • 58. Prawdopodobnie powstrzymaprzypadkowych...http://www.recreateweb.com.au/web-development/respond-2014-what-responsive-web-design-can-learn-from-accessibility-best-practice/
  • 59. ...oraz masowych intruzówhttp://www.recreateweb.com.au/web-development/respond-2014-what-responsive-web-design-can-learn-from-accessibility-best-practice/
  • 60. A Was?#1 – żeby coś zaatakowaćtrzeba zrozumieć jak to działahttps://www.flickr.com/photos/itspaulkelly/633298765
  • 61. Zaszyfrowany ruchKLUCZ PUBLICZNYJak się dobrać do transmisji?LOSOWYKLUCZ SESJISESYJNY DO SERWERATRANSMISJA ZASZYFROWANAKLUCZEM SESJI
  • 62. Drobne usprawnienie aplikacji– stały klucz w SMALInew-array v8, v8, [Bfill-array-data v8, :array_5areturn-object v8:array_5a.array-data 10x44t0x2bt0x72t(...)
  • 63. Burp extension
  • 64. Burp extension
  • 65. Burp Extension
  • 66. Burp Extension
  • 67. Burp Extension
  • 68. Architektura, środowisko
  • 69. Znane podatności
  • 70. Konsole administracyjne
  • 71. Konsole administracyjne
  • 72. Niektóre schwytane problemy REST● Błędy kontroli dostępu● Nieprawidłowa obsługa sesji● Błędy uwierzytelnienia iautoryzacji● Błędy logiczne● SQL injection● Błędy architektury/konfiguracji● ...https://www.flickr.com/photos/elycefeliz/6648603999
  • 73. Część z ryzyk do ogarnięcia
  • 74. OWASP Mobile Top 10
  • 75. Czekamy na Was!Darmowe konsultacje:www.securing.pl/konsultacjePracuj z nami:http://www.securing.pl/pl/kariera.htmlslawomir.jasek@securing.pl
  • Fly UP