SlideShare a Scribd company logo
1 of 76
Testowanie bezpieczeństwa
aplikacji mobilnych
Sławomir Jasek
Dzień dobry!
Pentester / konsultant bezpieczeństwa
Sławomir Jasek
Od 2003 roku:
Ocena bezpieczeństwa aplikacji, systemów, sieci...
Najskuteczniej pomagamy już od etapu projektowania.
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
Aplikacja mobilna – spojrzenie intruza
RPC
SIEĆ
ZAPIS
DANYCH
UŻYTKOWNIK
OS
Jak?Inna aplikacja na
urządzeniu
Kradzież, zgubienie
urządzenia, przypadkowy
dostęp, inna aplikacja...
Podatności systemu
Social engineering,
słabości użytkowników
np. słabe hasło, zbyt
trudne mechanizmy
Ataki na
transmisję -
podsłuch,
słabości SSL
API – błędy kontroli
dostępu, logiczne,
konfiguracji...
Analiza
paczki
Kto?
„grubszy cwaniak”
„script-kiddie”
Krzysztof Jarzyna
ze Szczecina
Dorwał się do narzędzi,
wali na oślep, zwykle nie
bardzo rozumiejąc co się
dzieje.
Coś mu się przypadkiem
udało (lub nie), i afera
gotowa.
Ma motywację, zasoby
oraz możliwości
przeprowadzenia ataku
nakierowanego
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
Paczka aplikacji
PLAY / STORE
Paczka aplikacji
● Android
– Aplikacje bez root
np. „My App Sharer”
– APK Leecher
– Playdrone – masowe
pobieranie do chmury
– (nie wspominając root)
● iOS, inne – DRM nie jest problemem
Rozpakowanie, dekompilacja...
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 aplikacji
Np. tokeny FB, Google, MS, Yahoo i Linkedin aplikacji Airb2b – 10 milionów użytkowników
http://viennot.com/playdrone.pdf
● Tak, znaleźliśmy token FB w aplikacji ;)
Przykład
● Przesyłanie mailem danych do „bazy” –
support@pewnafirma.com
● Założenie : wysyłamy bezpośrednio przez nasz serwer
pocztowy – mail.pewnafirma.com, nie angażujemy kont
użytkownika
● Serwer oczywiście nie jest open-relayem, do wysłania maila
wymaga 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!
Wytęż wzrok i znajdź klucz „szyfrujący”
w zaobfuskowanym kodzie
public final class a
implements 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;
}
}
}
Wytęż wzrok i znajdź klucz „szyfrujący”
w zaobfuskowanym kodzie
public final class a
implements 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”
Manifest, analiza uprawnień...
Dane zapisywane na urządzeniu
Kradzież, zgubienie
urządzenia, przypadkowy
dostęp, inna aplikacja...
Jak to sprawdzić
● Ręcznie: adb pull na różnych etapach pracy aplikacji
• Automaty, skrypty – np. wrzucanie do svn
Uprawnienia plików
Logi, cache...
● Dość często zawierają pełne żądania HTTP,
wprowadzane klawisze – np. hasło użytkownika
INSERT INTO "cfurl_cache_response"
VALUES(2,0,1594297610,0,'http://dev/service/auth/createFirstSession?password=35
971831&sessionId=857006 &userId=24384344','1970-01-21 23:03:36');
Logi, cache...
● Dość często zawierają pełne żądania HTTP,
wprowadzane klawisze – np. hasło użytkownika
I/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":""}
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 obliczu
klęski wizerunkowej – np. Starbucks, styczeń 2014
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 obliczu
klęski wizerunkowej – np. Starbucks, styczeń 2014
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 obliczu
klęski wizerunkowej – np. Starbucks, styczeń 2014
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 obliczu
klęski wizerunkowej – np. Starbucks, styczeń 2014
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 obliczu
klęski wizerunkowej – np. Starbucks, styczeń 2014
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 obliczu
klęski wizerunkowej – np. Starbucks, styczeń 2014
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 obliczu
klęski wizerunkowej – np. Starbucks, styczeń 2014
RPC
Inna aplikacja na
urządzeniu
BAD INTENTions
<receiver android:name =“MojReceiver”>
<intent -filter>
<action android:name = "android.intent.action.PACKAGE_ADDED"
String action = intent.getAction();
if (action...)
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);
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 exception
CRASH
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);
String action = intent.getAction();
if (action != null ){
if(action...)
Nullpointer exception
CRASH
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”);
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);
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);
String action = intent.getAction();
if (action != null && action.equals (“PACKAGE_ADDED”) ){
Uid = intent.getStringExtra(“android.intent.extra.UID”);
BAD INTENTions
<permission android:name ="com.dobreprogramy.permission"
android:protectionLevel = "signature" ...
<receiver android:name ="dobryReceiver" android:exported="true"
android:permission="com.dobreprogramy.permission">
...
</receiver>
BAD INTENTions
<permission android:name ="com.dobreprogramy.permission"
android:protectionLevel = "signature" ...
<receiver android:name ="dobryReceiver" android:exported="true"
android:permission="com.dobreprogramy.permission">
...
</receiver>
<permission android:name ="com.dobreprogramy.permission"
android:protectionLevel="normal" ...>
<uses-permission android:name ="com.dobreprogramy.permission"/>
Intruz może zarejestrować to samo wcześniej
Analiza/atak RPC
● Mnóstwo narzędzi
– Drozer
https://www.mwrinfosecurity.com/products/drozer/
– Android Hooker, comdroid, chex, epicc, iSEC intent
fuzzer/sniffer...
● Ręcznie
am broadcast -n com.aplikacja/com.aplikacja.BroadcastReceiver
am start -a android.intent.action.CALL -d tel://000-0000
Transmisja
Ataki na
transmisję -
podsłuch,
słabości SSL
Intruz musi mieć dostęp
do transmisji – pasywny
(podsłuch), lub aktywny –
aby modyfikować ruch
Przechwytywanie ruchu
● Local proxy – co się dzieje „na łączu” (np. żądania HTTP)
– Burp: wersja darmowa na początek wystarczy
portswigger.net/burp
– Fiddler – MS
www.telerik.com/fiddler
– wiele innych
● Emulator przez proxy:
emulator -avd emu -http-proxy 127.0.0.1:8080
www.telerik.com/fiddler/
SSL – wróćmy do podstaw
CA
Co zrobi klient?
● Jeśli ten sam certyfikat byłby
podpisany innym CA?
[POWINIEN] wyświetlić
ostrzeżenie, przerwać
transmisję...
Zaakceptuje bez
mrugnięcia.
CA nie jest w
zaufanych
CA w zaufanych
Certyfikaty CA zaszyte w urządzeniach
● Ćwiczenie: sprawdź jakie CA masz w swoim
telefonie
● Np. iOS8 ma m.in. certyfikaty rządów:
Chin: China Internet Network Information Center
Hong Kongu: Hongkong Post e-Cert.
Japonii: 3 CA
Holandii: 3 CA (PKIoverheid)
Taiwanu: Government Root Certification Authority
Turcji: Scientific and Technological Research Council of Turkey
USA: 5 CA, Department of Defense
SSL – „Man in the middle”
CA
?
Verisign
www.pewnafirma.pl
Verisign
www.pewnafirma.pl
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
Przechwytywanie ruchu SSL
● Certyfikat CA Burp-a
Instalujemy w urządzeniu
● Aplikacja używa domyślnego
truststore 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
API
API – błędy kontroli
dostępu, logiczne,
konfiguracji...
Mobile CAPTCHA
● Proces rejestracji, potwierdzanej SMS
● CAPTCHA w celu ograniczenia masowego
nadużycia procesu (koszty SMS, przeciążenie
systemu...)
● Należy kliknąć w odpowiedni obrazek (1 z 6)
Mobile CAPTCHA
● Pomysł chybiony już w założeniach
– Prawdopodobieństwo trafienia „na ślepo” bardzo
wysokie
● 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 żądane
słowo
REST API
fragment otrzymanej dokumentacji REST API
Historia rachunku
Żądanie HTTP po przechwyceniu
GET /services/history/account/85101022350445200448009906 HTTP/1.1
SA-DeviceId: 940109f08ba56a89
SA-SessionId: 826175
Accept: application/json
Host: acc
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
GET /services/history/account/45101022350445200448005388 HTTP/1.1
SA-DeviceId: 940109f08ba56a89
SA-SessionId: 826175
Accept: application/json
Host: acc
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
Podmiana nr rachunku – uzyskujemy cudze dane
Dane użytkownika
Użytkownik 1
GET /services/user/profile HTTP/1.1
SA-DeviceId: d4c79a0fd994b1f8
SA-SessionId: 850071
Accept: application/json
Host: acc
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
Dane użytkownika
Użytkownik 1
GET /services/user/profile HTTP/1.1
SA-DeviceId: d4c79a0fd994b1f8
SA-SessionId: 850071
Accept: application/json
Host: acc
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
Użytkownik 2
GET /services/user/profile HTTP/1.1
SA-DeviceId: 940109f08ba56a89
SA-SessionId: 850075
Accept: application/json
Host: acc
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
DeviceId jedynym zabezpieczeniem
Historia pewnej aplikacji...
● Mnóstwo błędów kontroli dostępu
● Po zgłoszeniu dostawcy:
„Kontrola dostępu w aplikacji jest, tylko na
testowym środowisku wyłączona”
● Pomimo napiętych terminów włączyć się udało
dopiero po kilku tygodniach ;)
Przechwytywanie ruchu – utrudnienie
Prawdopodobnie powstrzyma
przypadkowych...
http://www.recreateweb.com.au/web-development/respond-2014-what-responsive-web-design-can-learn-from-accessibility-best-practice/
...oraz masowych intruzów
http://www.recreateweb.com.au/web-development/respond-2014-what-responsive-web-design-can-learn-from-accessibility-best-practice/
A Was?
#1 – żeby coś zaatakować
trzeba zrozumieć jak to działa
https://www.flickr.com/photos/itspaulkelly/633298765
Zaszyfrowany ruch
Jak się dobrać do transmisji?
KLUCZ PUBLICZNY
LOSOWY
KLUCZ SESJI
SESYJNY DO SERWERA
TRANSMISJA ZASZYFROWANA
KLUCZEM SESJI
Drobne usprawnienie aplikacji
– stały klucz w SMALI
new-array v8, v8, [B
fill-array-data v8, :array_5a
return-object v8
:array_5a
.array-data 1
0x44t
0x2bt
0x72t
(...)
Burp extension
Burp extension
Burp Extension
Burp Extension
Burp Extension
Architektura, środowisko
Znane podatności
Konsole administracyjne
Konsole administracyjne
Niektóre schwytane problemy REST
● Błędy kontroli dostępu
● Nieprawidłowa obsługa sesji
● Błędy uwierzytelnienia i
autoryzacji
● Błędy logiczne
● SQL injection
● Błędy architektury/konfiguracji
● ...
https://www.flickr.com/photos/elycefeliz/6648603999
Część z ryzyk do ogarnięcia
OWASP Mobile Top 10
Czekamy na Was!
slawomir.jasek@securing.pl
Darmowe konsultacje:
www.securing.pl/konsultacje
Pracuj z nami:
http://www.securing.pl/pl/kariera.html

More Related Content

What's hot

Możliwości złośliwego oprogramowania na platformy mobilne
Możliwości złośliwego oprogramowania na platformy mobilneMożliwości złośliwego oprogramowania na platformy mobilne
Możliwości złośliwego oprogramowania na platformy mobilneSecuRing
 
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...Logicaltrust pl
 
Malware vs autoryzacja transakcji
Malware vs autoryzacja transakcjiMalware vs autoryzacja transakcji
Malware vs autoryzacja transakcjiSecuRing
 
Pentester - fakty i mity
Pentester - fakty i mityPentester - fakty i mity
Pentester - fakty i mityLogicaltrust pl
 
Wyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4DevelopersWyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4DevelopersLogicaltrust pl
 
Bankowość i płatności mobilne - Jak zrobić to bezpiecznie?
Bankowość i płatności mobilne - Jak zrobić to bezpiecznie?Bankowość i płatności mobilne - Jak zrobić to bezpiecznie?
Bankowość i płatności mobilne - Jak zrobić to bezpiecznie?SecuRing
 
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...Logicaltrust pl
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiLogicaltrust pl
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiLogicaltrust pl
 
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...PROIDEA
 
Czy aby na pewno jest Pan człowiekiem. Użyteczność kodów CAPTCHA 2.
Czy aby na pewno jest Pan człowiekiem. Użyteczność kodów CAPTCHA 2.Czy aby na pewno jest Pan człowiekiem. Użyteczność kodów CAPTCHA 2.
Czy aby na pewno jest Pan człowiekiem. Użyteczność kodów CAPTCHA 2.Symetria
 
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Logicaltrust pl
 

What's hot (15)

Możliwości złośliwego oprogramowania na platformy mobilne
Możliwości złośliwego oprogramowania na platformy mobilneMożliwości złośliwego oprogramowania na platformy mobilne
Możliwości złośliwego oprogramowania na platformy mobilne
 
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
 
Malware vs autoryzacja transakcji
Malware vs autoryzacja transakcjiMalware vs autoryzacja transakcji
Malware vs autoryzacja transakcji
 
Pentester - fakty i mity
Pentester - fakty i mityPentester - fakty i mity
Pentester - fakty i mity
 
Wyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4DevelopersWyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4Developers
 
Bankowość i płatności mobilne - Jak zrobić to bezpiecznie?
Bankowość i płatności mobilne - Jak zrobić to bezpiecznie?Bankowość i płatności mobilne - Jak zrobić to bezpiecznie?
Bankowość i płatności mobilne - Jak zrobić to bezpiecznie?
 
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadki
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
 
Wyscig o czynnik ludzki
Wyscig o czynnik ludzkiWyscig o czynnik ludzki
Wyscig o czynnik ludzki
 
Devops security
Devops securityDevops security
Devops security
 
Devops/Sysops security
Devops/Sysops securityDevops/Sysops security
Devops/Sysops security
 
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
 
Czy aby na pewno jest Pan człowiekiem. Użyteczność kodów CAPTCHA 2.
Czy aby na pewno jest Pan człowiekiem. Użyteczność kodów CAPTCHA 2.Czy aby na pewno jest Pan człowiekiem. Użyteczność kodów CAPTCHA 2.
Czy aby na pewno jest Pan człowiekiem. Użyteczność kodów CAPTCHA 2.
 
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
 

Viewers also liked

IS10 Final Presentation.pptx
IS10 Final Presentation.pptxIS10 Final Presentation.pptx
IS10 Final Presentation.pptxDiana Ascher
 
Pozwolenie Konserwatorskie dla WS7
Pozwolenie Konserwatorskie dla WS7Pozwolenie Konserwatorskie dla WS7
Pozwolenie Konserwatorskie dla WS7Wroclaw
 
ES 13-15 Sospel / Breil-sur-Roya (16.55km)
ES 13-15 Sospel / Breil-sur-Roya (16.55km)ES 13-15 Sospel / Breil-sur-Roya (16.55km)
ES 13-15 Sospel / Breil-sur-Roya (16.55km)LECREURER
 
Projekt uchwały i regulaminu korzystania z parków miejskich zlokalizowanych n...
Projekt uchwały i regulaminu korzystania z parków miejskich zlokalizowanych n...Projekt uchwały i regulaminu korzystania z parków miejskich zlokalizowanych n...
Projekt uchwały i regulaminu korzystania z parków miejskich zlokalizowanych n...Wroclaw
 
WBO 2017 spotkania informacyjne
WBO 2017 spotkania informacyjneWBO 2017 spotkania informacyjne
WBO 2017 spotkania informacyjneWroclaw
 
Εγγραφές σε εκκλησιαστικά σχολεία
Εγγραφές σε εκκλησιαστικά σχολείαΕγγραφές σε εκκλησιαστικά σχολεία
Εγγραφές σε εκκλησιαστικά σχολείαΓιώργος Γαμβρινός
 
Why we share: The contextual accomplishment of privacy
Why we share: The contextual accomplishment of privacyWhy we share: The contextual accomplishment of privacy
Why we share: The contextual accomplishment of privacyZizi Papacharissi
 
ES 3-6 Montauban-sur-L'Ouvèze / Laborel (19.34km)
 ES 3-6 Montauban-sur-L'Ouvèze / Laborel (19.34km) ES 3-6 Montauban-sur-L'Ouvèze / Laborel (19.34km)
ES 3-6 Montauban-sur-L'Ouvèze / Laborel (19.34km)LECREURER
 
Tropical Herbs
Tropical HerbsTropical Herbs
Tropical Herbsabdrazy
 
Dyrektywa Unii Europejskiej w zakresie walki z unikaniem opodatkowania
Dyrektywa Unii Europejskiej w zakresie walki z unikaniem opodatkowaniaDyrektywa Unii Europejskiej w zakresie walki z unikaniem opodatkowania
Dyrektywa Unii Europejskiej w zakresie walki z unikaniem opodatkowaniaPwC Polska
 
The Impact of Computer Usage on Academic Performance: Evidence from a Randomi...
The Impact of Computer Usage on Academic Performance: Evidence from a Randomi...The Impact of Computer Usage on Academic Performance: Evidence from a Randomi...
The Impact of Computer Usage on Academic Performance: Evidence from a Randomi...Γιώργος Γαμβρινός
 
Artistry skincare consultation
Artistry skincare consultationArtistry skincare consultation
Artistry skincare consultationioannis76
 
11 ge lecture presentation
11 ge lecture presentation11 ge lecture presentation
11 ge lecture presentationmahmood jassim
 
Erasmus+ Edukacja szkolna 2016
Erasmus+ Edukacja szkolna 2016Erasmus+ Edukacja szkolna 2016
Erasmus+ Edukacja szkolna 2016FRSE
 
BASIC STUDY ABOUT SPACE ELEVATOR
BASIC STUDY ABOUT SPACE ELEVATOR BASIC STUDY ABOUT SPACE ELEVATOR
BASIC STUDY ABOUT SPACE ELEVATOR Nikul Babu
 
CLIMATE CHANGE: TRUTH THAT HURTS YET WE MUST LEARN (Part 1 of the Artifact)
CLIMATE CHANGE: TRUTH THAT HURTS YET WE MUST LEARN (Part 1 of the Artifact)CLIMATE CHANGE: TRUTH THAT HURTS YET WE MUST LEARN (Part 1 of the Artifact)
CLIMATE CHANGE: TRUTH THAT HURTS YET WE MUST LEARN (Part 1 of the Artifact)Vicente Antofina
 

Viewers also liked (17)

IS10 Final Presentation.pptx
IS10 Final Presentation.pptxIS10 Final Presentation.pptx
IS10 Final Presentation.pptx
 
Pozwolenie Konserwatorskie dla WS7
Pozwolenie Konserwatorskie dla WS7Pozwolenie Konserwatorskie dla WS7
Pozwolenie Konserwatorskie dla WS7
 
ES 13-15 Sospel / Breil-sur-Roya (16.55km)
ES 13-15 Sospel / Breil-sur-Roya (16.55km)ES 13-15 Sospel / Breil-sur-Roya (16.55km)
ES 13-15 Sospel / Breil-sur-Roya (16.55km)
 
Projekt uchwały i regulaminu korzystania z parków miejskich zlokalizowanych n...
Projekt uchwały i regulaminu korzystania z parków miejskich zlokalizowanych n...Projekt uchwały i regulaminu korzystania z parków miejskich zlokalizowanych n...
Projekt uchwały i regulaminu korzystania z parków miejskich zlokalizowanych n...
 
WBO 2017 spotkania informacyjne
WBO 2017 spotkania informacyjneWBO 2017 spotkania informacyjne
WBO 2017 spotkania informacyjne
 
Εγγραφές σε εκκλησιαστικά σχολεία
Εγγραφές σε εκκλησιαστικά σχολείαΕγγραφές σε εκκλησιαστικά σχολεία
Εγγραφές σε εκκλησιαστικά σχολεία
 
Why we share: The contextual accomplishment of privacy
Why we share: The contextual accomplishment of privacyWhy we share: The contextual accomplishment of privacy
Why we share: The contextual accomplishment of privacy
 
ES 3-6 Montauban-sur-L'Ouvèze / Laborel (19.34km)
 ES 3-6 Montauban-sur-L'Ouvèze / Laborel (19.34km) ES 3-6 Montauban-sur-L'Ouvèze / Laborel (19.34km)
ES 3-6 Montauban-sur-L'Ouvèze / Laborel (19.34km)
 
Tropical Herbs
Tropical HerbsTropical Herbs
Tropical Herbs
 
Dyrektywa Unii Europejskiej w zakresie walki z unikaniem opodatkowania
Dyrektywa Unii Europejskiej w zakresie walki z unikaniem opodatkowaniaDyrektywa Unii Europejskiej w zakresie walki z unikaniem opodatkowania
Dyrektywa Unii Europejskiej w zakresie walki z unikaniem opodatkowania
 
The Impact of Computer Usage on Academic Performance: Evidence from a Randomi...
The Impact of Computer Usage on Academic Performance: Evidence from a Randomi...The Impact of Computer Usage on Academic Performance: Evidence from a Randomi...
The Impact of Computer Usage on Academic Performance: Evidence from a Randomi...
 
Artistry skincare consultation
Artistry skincare consultationArtistry skincare consultation
Artistry skincare consultation
 
11 ge lecture presentation
11 ge lecture presentation11 ge lecture presentation
11 ge lecture presentation
 
Erasmus+ Edukacja szkolna 2016
Erasmus+ Edukacja szkolna 2016Erasmus+ Edukacja szkolna 2016
Erasmus+ Edukacja szkolna 2016
 
BASIC STUDY ABOUT SPACE ELEVATOR
BASIC STUDY ABOUT SPACE ELEVATOR BASIC STUDY ABOUT SPACE ELEVATOR
BASIC STUDY ABOUT SPACE ELEVATOR
 
CLIMATE CHANGE: TRUTH THAT HURTS YET WE MUST LEARN (Part 1 of the Artifact)
CLIMATE CHANGE: TRUTH THAT HURTS YET WE MUST LEARN (Part 1 of the Artifact)CLIMATE CHANGE: TRUTH THAT HURTS YET WE MUST LEARN (Part 1 of the Artifact)
CLIMATE CHANGE: TRUTH THAT HURTS YET WE MUST LEARN (Part 1 of the Artifact)
 
Zrozumieć pokolenie Y
Zrozumieć pokolenie YZrozumieć pokolenie Y
Zrozumieć pokolenie Y
 

Similar to Testowanie bezpieczeństwa aplikacji mobilnych

Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Łebski Development czyli kiedy i dlaczego tworzyć oprogramowanie pod klucz i ...
Łebski Development czyli kiedy i dlaczego tworzyć oprogramowanie pod klucz i ...Łebski Development czyli kiedy i dlaczego tworzyć oprogramowanie pod klucz i ...
Łebski Development czyli kiedy i dlaczego tworzyć oprogramowanie pod klucz i ...Wojciech Sznapka
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
SFI 2017: Deep Learning zmieniający branże przemysłu
SFI 2017: Deep Learning zmieniający branże przemysłuSFI 2017: Deep Learning zmieniający branże przemysłu
SFI 2017: Deep Learning zmieniający branże przemysłuMatthew Opala
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL versionMaciej Lasyk
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...Future Processing
 
CISSPDAY 2011 - 2 AM A Disaster just Began
CISSPDAY 2011 - 2 AM A Disaster just BeganCISSPDAY 2011 - 2 AM A Disaster just Began
CISSPDAY 2011 - 2 AM A Disaster just BeganTobias Koprowski
 
OWASP - analiza statyczna języka PHP
OWASP - analiza statyczna języka PHPOWASP - analiza statyczna języka PHP
OWASP - analiza statyczna języka PHPLogicaltrust pl
 
Program do pisania? Największa lista w sieci 2013 !
Program do pisania? Największa lista w sieci 2013 !Program do pisania? Największa lista w sieci 2013 !
Program do pisania? Największa lista w sieci 2013 !michalip
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?GOG.com dev team
 
Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?OWASP
 
infraxstructure: Mateusz Chrobok "Opowieść o ucieczce przed błędami typu 0da...
infraxstructure: Mateusz Chrobok  "Opowieść o ucieczce przed błędami typu 0da...infraxstructure: Mateusz Chrobok  "Opowieść o ucieczce przed błędami typu 0da...
infraxstructure: Mateusz Chrobok "Opowieść o ucieczce przed błędami typu 0da...PROIDEA
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architectureJaroslaw Palka
 
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...The Software House
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 

Similar to Testowanie bezpieczeństwa aplikacji mobilnych (20)

Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Łebski Development czyli kiedy i dlaczego tworzyć oprogramowanie pod klucz i ...
Łebski Development czyli kiedy i dlaczego tworzyć oprogramowanie pod klucz i ...Łebski Development czyli kiedy i dlaczego tworzyć oprogramowanie pod klucz i ...
Łebski Development czyli kiedy i dlaczego tworzyć oprogramowanie pod klucz i ...
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
SFI 2017: Deep Learning zmieniający branże przemysłu
SFI 2017: Deep Learning zmieniający branże przemysłuSFI 2017: Deep Learning zmieniający branże przemysłu
SFI 2017: Deep Learning zmieniający branże przemysłu
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 
CISSPDAY 2011 - 2 AM A Disaster just Began
CISSPDAY 2011 - 2 AM A Disaster just BeganCISSPDAY 2011 - 2 AM A Disaster just Began
CISSPDAY 2011 - 2 AM A Disaster just Began
 
university day 1
university day 1university day 1
university day 1
 
OWASP - analiza statyczna języka PHP
OWASP - analiza statyczna języka PHPOWASP - analiza statyczna języka PHP
OWASP - analiza statyczna języka PHP
 
Program do pisania? Największa lista w sieci 2013 !
Program do pisania? Największa lista w sieci 2013 !Program do pisania? Największa lista w sieci 2013 !
Program do pisania? Największa lista w sieci 2013 !
 
Dlaczego flopsar
Dlaczego flopsarDlaczego flopsar
Dlaczego flopsar
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?
 
Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?
 
Java. Sztuka programowania
Java. Sztuka programowaniaJava. Sztuka programowania
Java. Sztuka programowania
 
infraxstructure: Mateusz Chrobok "Opowieść o ucieczce przed błędami typu 0da...
infraxstructure: Mateusz Chrobok  "Opowieść o ucieczce przed błędami typu 0da...infraxstructure: Mateusz Chrobok  "Opowieść o ucieczce przed błędami typu 0da...
infraxstructure: Mateusz Chrobok "Opowieść o ucieczce przed błędami typu 0da...
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architecture
 
Testowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO AcademyTestowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO Academy
 
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
OpenEmbedded
OpenEmbeddedOpenEmbedded
OpenEmbedded
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 

More from Slawomir Jasek

Hardwear.io 2018 BLE Security Essentials workshop
Hardwear.io 2018 BLE Security Essentials workshopHardwear.io 2018 BLE Security Essentials workshop
Hardwear.io 2018 BLE Security Essentials workshopSlawomir Jasek
 
A 2018 practical guide to hacking RFID/NFC
A 2018 practical guide to hacking RFID/NFCA 2018 practical guide to hacking RFID/NFC
A 2018 practical guide to hacking RFID/NFCSlawomir Jasek
 
Cant touch this: cloning any Android HCE contactless card
Cant touch this: cloning any Android HCE contactless cardCant touch this: cloning any Android HCE contactless card
Cant touch this: cloning any Android HCE contactless cardSlawomir Jasek
 
Gattacking Bluetooth Smart devices - introducing new BLE MITM proxy tool
Gattacking Bluetooth Smart devices - introducing new BLE MITM proxy toolGattacking Bluetooth Smart devices - introducing new BLE MITM proxy tool
Gattacking Bluetooth Smart devices - introducing new BLE MITM proxy toolSlawomir Jasek
 
Hacking Bluetooth Smart
Hacking Bluetooth SmartHacking Bluetooth Smart
Hacking Bluetooth SmartSlawomir Jasek
 
IoThings you don't even need to hack
IoThings you don't even need to hackIoThings you don't even need to hack
IoThings you don't even need to hackSlawomir Jasek
 
Applications secure by default
Applications secure by defaultApplications secure by default
Applications secure by defaultSlawomir Jasek
 
Shameful secrets of proprietary network protocols
Shameful secrets of proprietary network protocolsShameful secrets of proprietary network protocols
Shameful secrets of proprietary network protocolsSlawomir Jasek
 

More from Slawomir Jasek (8)

Hardwear.io 2018 BLE Security Essentials workshop
Hardwear.io 2018 BLE Security Essentials workshopHardwear.io 2018 BLE Security Essentials workshop
Hardwear.io 2018 BLE Security Essentials workshop
 
A 2018 practical guide to hacking RFID/NFC
A 2018 practical guide to hacking RFID/NFCA 2018 practical guide to hacking RFID/NFC
A 2018 practical guide to hacking RFID/NFC
 
Cant touch this: cloning any Android HCE contactless card
Cant touch this: cloning any Android HCE contactless cardCant touch this: cloning any Android HCE contactless card
Cant touch this: cloning any Android HCE contactless card
 
Gattacking Bluetooth Smart devices - introducing new BLE MITM proxy tool
Gattacking Bluetooth Smart devices - introducing new BLE MITM proxy toolGattacking Bluetooth Smart devices - introducing new BLE MITM proxy tool
Gattacking Bluetooth Smart devices - introducing new BLE MITM proxy tool
 
Hacking Bluetooth Smart
Hacking Bluetooth SmartHacking Bluetooth Smart
Hacking Bluetooth Smart
 
IoThings you don't even need to hack
IoThings you don't even need to hackIoThings you don't even need to hack
IoThings you don't even need to hack
 
Applications secure by default
Applications secure by defaultApplications secure by default
Applications secure by default
 
Shameful secrets of proprietary network protocols
Shameful secrets of proprietary network protocolsShameful secrets of proprietary network protocols
Shameful secrets of proprietary network protocols
 

Testowanie bezpieczeństwa aplikacji mobilnych

  • 2. Dzień dobry! Pentester / konsultant bezpieczeństwa Sławomir Jasek Od 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 intruza RPC SIEĆ ZAPIS DANYCH UŻYTKOWNIK OS
  • 5. Jak?Inna aplikacja na urządzeniu Kradzież, zgubienie urządzenia, przypadkowy dostęp, inna aplikacja... Podatności systemu Social engineering, słabości użytkowników np. słabe hasło, zbyt trudne mechanizmy Ataki na transmisję - podsłuch, słabości SSL API – błędy kontroli dostępu, logiczne, konfiguracji... Analiza paczki
  • 6. Kto? „grubszy cwaniak” „script-kiddie” Krzysztof Jarzyna ze Szczecina Dorwał się do narzędzi, wali na oślep, zwykle nie bardzo rozumiejąc co się dzieje. Coś mu się przypadkiem udało (lub nie), i afera gotowa. Ma motywację, zasoby oraz możliwości przeprowadzenia ataku nakierowanego
  • 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
  • 9. Paczka aplikacji ● Android – Aplikacje bez root np. „My App Sharer” – APK Leecher – Playdrone – masowe pobieranie do chmury – (nie wspominając root) ● iOS, inne – DRM nie jest problemem
  • 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 aplikacji Np. tokeny FB, Google, MS, Yahoo i Linkedin aplikacji Airb2b – 10 milionów użytkowników http://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 serwer pocztowy – mail.pewnafirma.com, nie angażujemy kont użytkownika ● Serwer oczywiście nie jest open-relayem, do wysłania maila wymaga 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 kodzie public final class a implements 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 kodzie public final class a implements 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”
  • 16. Dane zapisywane na urządzeniu Kradzież, zgubienie urządzenia, przypadkowy dostęp, inna aplikacja...
  • 17. Jak to sprawdzić ● Ręcznie: adb pull na różnych etapach pracy aplikacji • Automaty, skrypty – np. wrzucanie do svn
  • 19. Logi, cache... ● Dość często zawierają pełne żądania HTTP, wprowadzane klawisze – np. hasło użytkownika INSERT INTO "cfurl_cache_response" VALUES(2,0,1594297610,0,'http://dev/service/auth/createFirstSession?password=35 971831&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żytkownika I/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 obliczu klę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 obliczu klę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 obliczu klę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 obliczu klę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 obliczu klę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 obliczu klę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 obliczu klęski wizerunkowej – np. Starbucks, styczeń 2014
  • 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 exception CRASH
  • 32. 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); String action = intent.getAction(); if (action != null ){ if(action...) Nullpointer exception CRASH
  • 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) ){ Uid = intent.getStringExtra(“android.intent.extra.UID”); Intent intent = new Intent (“AKUKU”); intent.setComponent (“MojReceiver”); intent.putExtra (“android.intent.extra.UID”, attackerUID); sendBroadcast(intent); String action = intent.getAction(); if (action != null && action.equals (“PACKAGE_ADDED”) ){ Uid = intent.getStringExtra(“android.intent.extra.UID”);
  • 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> <permission android:name ="com.dobreprogramy.permission" android:protectionLevel="normal" ...> <uses-permission android:name ="com.dobreprogramy.permission"/> Intruz może zarejestrować to samo wcześniej
  • 38. Analiza/atak RPC ● Mnóstwo narzędzi – Drozer https://www.mwrinfosecurity.com/products/drozer/ – Android Hooker, comdroid, chex, epicc, iSEC intent fuzzer/sniffer... ● Ręcznie am broadcast -n com.aplikacja/com.aplikacja.BroadcastReceiver am start -a android.intent.action.CALL -d tel://000-0000
  • 39. Transmisja Ataki na transmisję - podsłuch, słabości SSL Intruz musi mieć dostęp do transmisji – pasywny (podsłuch), lub aktywny – aby modyfikować ruch
  • 40. Przechwytywanie ruchu ● Local proxy – co się dzieje „na łączu” (np. żądania HTTP) – Burp: wersja darmowa na początek wystarczy portswigger.net/burp – Fiddler – MS www.telerik.com/fiddler – wiele innych ● Emulator przez proxy: emulator -avd emu -http-proxy 127.0.0.1:8080 www.telerik.com/fiddler/
  • 41. SSL – wróćmy do podstaw CA
  • 42. Co zrobi klient? ● Jeśli ten sam certyfikat byłby podpisany innym CA? [POWINIEN] wyświetlić ostrzeżenie, przerwać transmisję... Zaakceptuje bez mrugnięcia. CA nie jest w zaufanych CA w zaufanych
  • 43. Certyfikaty CA zaszyte w urządzeniach ● Ćwiczenie: sprawdź jakie CA masz w swoim telefonie ● Np. iOS8 ma m.in. certyfikaty rządów: Chin: China Internet Network Information Center Hong Kongu: Hongkong Post e-Cert. Japonii: 3 CA Holandii: 3 CA (PKIoverheid) Taiwanu: Government Root Certification Authority Turcji: Scientific and Technological Research Council of Turkey USA: 5 CA, Department of Defense
  • 44. SSL – „Man in the middle” CA ? Verisign www.pewnafirma.pl Verisign www.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ślnego truststore 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. API API – błędy kontroli dostępu, logiczne, konfiguracji...
  • 49. Mobile CAPTCHA ● Proces rejestracji, potwierdzanej SMS ● CAPTCHA w celu ograniczenia masowego nadużycia procesu (koszty SMS, przeciążenie systemu...) ● Należy kliknąć w odpowiedni obrazek (1 z 6)
  • 50.
  • 51. Mobile CAPTCHA ● Pomysł chybiony już w założeniach – Prawdopodobieństwo trafienia „na ślepo” bardzo wysokie ● 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 żądane słowo
  • 52. REST API fragment otrzymanej dokumentacji REST API
  • 54. Żądanie HTTP po przechwyceniu GET /services/history/account/85101022350445200448009906 HTTP/1.1 SA-DeviceId: 940109f08ba56a89 SA-SessionId: 826175 Accept: application/json Host: acc Connection: Keep-Alive User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4) GET /services/history/account/45101022350445200448005388 HTTP/1.1 SA-DeviceId: 940109f08ba56a89 SA-SessionId: 826175 Accept: application/json Host: acc Connection: Keep-Alive User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4) Podmiana nr rachunku – uzyskujemy cudze dane
  • 55. Dane użytkownika Użytkownik 1 GET /services/user/profile HTTP/1.1 SA-DeviceId: d4c79a0fd994b1f8 SA-SessionId: 850071 Accept: application/json Host: acc Connection: Keep-Alive User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
  • 56. Dane użytkownika Użytkownik 1 GET /services/user/profile HTTP/1.1 SA-DeviceId: d4c79a0fd994b1f8 SA-SessionId: 850071 Accept: application/json Host: acc Connection: Keep-Alive User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4) Użytkownik 2 GET /services/user/profile HTTP/1.1 SA-DeviceId: 940109f08ba56a89 SA-SessionId: 850075 Accept: application/json Host: acc Connection: Keep-Alive User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4) DeviceId jedynym zabezpieczeniem
  • 57. Historia pewnej aplikacji... ● Mnóstwo błędów kontroli dostępu ● Po zgłoszeniu dostawcy: „Kontrola dostępu w aplikacji jest, tylko na testowym środowisku wyłączona” ● Pomimo napiętych terminów włączyć się udało dopiero po kilku tygodniach ;)
  • 61. A Was? #1 – żeby coś zaatakować trzeba zrozumieć jak to działa https://www.flickr.com/photos/itspaulkelly/633298765
  • 62. Zaszyfrowany ruch Jak się dobrać do transmisji? KLUCZ PUBLICZNY LOSOWY KLUCZ SESJI SESYJNY DO SERWERA TRANSMISJA ZASZYFROWANA KLUCZEM SESJI
  • 63. Drobne usprawnienie aplikacji – stały klucz w SMALI new-array v8, v8, [B fill-array-data v8, :array_5a return-object v8 :array_5a .array-data 1 0x44t 0x2bt 0x72t (...)
  • 73. Niektóre schwytane problemy REST ● Błędy kontroli dostępu ● Nieprawidłowa obsługa sesji ● Błędy uwierzytelnienia i autoryzacji ● Błędy logiczne ● SQL injection ● Błędy architektury/konfiguracji ● ... https://www.flickr.com/photos/elycefeliz/6648603999
  • 74. Część z ryzyk do ogarnięcia
  • 76. Czekamy na Was! slawomir.jasek@securing.pl Darmowe konsultacje: www.securing.pl/konsultacje Pracuj z nami: http://www.securing.pl/pl/kariera.html