SlideShare a Scribd company logo
1 of 60
Download to read offline
Testowanie
bezpieczeństwa
aplikacji dedykowanych
na platformę Android
Łukasz Bobrek
Kraków, 27.04.2016
O MNIE
• Analiza ryzyka oraz konsultacje
dotyczące bezpieczeństwa w IT
• Testy bezpieczeństwa aplikacji
webowych oraz mobilnych
Inżynieria wsteczna złośliwego
oprogramowania na Androida
Łukasz Bobrek
Specjalista ds. Bezpieczeństwa IT
1. Wprowadzenie do testowania bezpieczeństwa aplikacji mobilnych
2. Analiza statyczna
• Analiza paczki z aplikacją
• Dekompilacja oraz analiza kodu źródłowego
3. Analiza dynamiczna
• Analiza plików oraz logów zapisywanych w trakcie działania
aplikacji
• ataki wykorzystujące oddziaływanie aplikacji z innymi aktywnymi
procesami działającymi na urządzeniu
• ataki na komunikację pomiędzy urządzeniem mobilnym,
a zdalnym serwerem aplikacji
• ataki na API po stronie serwera
PLAN PREZENTACJI
WPROWADZENIE
PO CO ATAKOWAĆ APLIKACJE NA ANDROIDA?
~ 2 082 700 000 użytkowników urządzeń mobilnych
~ 1 062 177 000 użytkowników mobilnych aplikacji
bankowych
~ 3 970 000 aplikacji mobilnych
~ 1 000 000 aplikacji mobilnych sklasyfikowanych
jako złośliwe oprogramowanie
www.statista.com, Symantec
JAK ATAKOWAĆ URZĄDZENIA MOBILNE?
?
JAK ATAKOWAĆ URZĄDZENIA MOBILNE?
Inna aplikacja na
urządzeniu
Podatności systemu
Kradzież, zgubienie
urządzenia, przypadkowy
dostęp, inna aplikacja...
Ataki na
transmisję -
podsłuch,
słabości SSL
Social engineering,
słabości użytkowników
np. słabe hasło, zbyt
trudne mechanizmy
API – błędy
kontroli dostępu,
logiczne,
konfiguracji...
Analiza
paczki
PACZKA APLIKACJI
Archiwum zip zawierające skompilowany kod źródłowy
w formie .dex oraz pozostałe zasoby wchodzące
w skład aplikacji w formie zakodowanej:
• plik AndroidManifest.xml - określa podstawowe
charakterystyki aplikacji oraz określa jej komponenty
• pozostałe pliki z rozszerzeniem .xml, zawierające
m.in. kolekcje danych oraz definicje szablonów
• wszelkie pliki graficzne oraz multimedialne
potrzebne do prawidłowego działania aplikacji
PACZKA APLIKACJI
• Jak zdobyć paczkę z aplikacją?
• Każdą aplikację można wyciągnąć z urządzenia
adb pull /data/app/nazwa-aplikacji.apk (root)
• Każdą aplikację dostępną w Google Play można
pobrać w formie pliku .apk
www.apkpure.com
ANALIZA STATYCZNA
ANALIZA STATYCZNA
DEKODWANIE APLIKACJI
• apktool - http://ibotpeaches.github.io/Apktool/
• # apktool decode aplikacja.apk
• Otrzymujemy:
• AndroidManifest.xml
• Definicje szablonów, stringi, widoki…
• Elementy graficzne
• pliki smali – coś pomiędzy kodem źródłowym,
a kodem maszynowym – odpowiednik Assemblera
DEKODOWANIE APLIKACJI
• Aplikacja Airbnb, rok 2012
• Plik strings.xml --> /res/values/strings.xml
• Tak, to naprawdę tokeny OAUTH do linkedina, microsoftu
oraz facebooka !
CO MOŻNA ZNALEŹĆ W APLIKACJI?
API
API
API
REKOMPILACJA APLIKACJI
• Smali
invoke-virtual {v0}, Ljava/lang/ref/WeakReference;
get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcompany/appname/d/b;
if-eqz v0, :cond_0
invoke-virtual {v0, p1, p2},
• # apktool b aplikacja
• # d2j-apk-sign /dist/aplikacja.apk
REKOMPILACJA APLIKACJI
• Smali
invoke-virtual {v0}, Ljava/lang/ref/WeakReference;
get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcompany/appname/d/b;
if-eqz v0, :cond_0 --> if-neq v0, :cond_0 ?
invoke-virtual {v0, p1, p2},
• # apktool b aplikacja
• # d2j-apk-sign /dist/aplikacja.apk
ANALIZA STATYCZNA
REKONSTRUKCJA KODU ŹRÓDŁOWEGO
• Dex2jar – https://sourceforge.net/projects/dex2jar/
• Jd-gui - http://jd.benow.ca/
1. rozpakowujemy plik .apk (bez dekodowania)
2. # d2j-dex2jar classes.dex
3. Rozpakowujemy plik classes-dex2jar.jar
4. Otrzymujemy pliki klas z rozszerzeniem .class
5. Dekompilacja do kodu JAVA (jd-gui)
ANALIZA KODU ŹRÓDŁOWEGO
• Pozwala na zrozumienie działania aplikacji,
co ułatwia dalsze ataki
• Identyfikacja błędów w implementacji
różnych funkcjonalności
• Komentarze pozostawione przez programistów ;)
• Hasła, klucze, tokeny…
//When I wrote this, only God and I understood what I was doing
//Now, God only knows
ANALIZA KODU ŹRÓDŁOWEGO
• Aplikacja Snapchat, rok 2011
Klucze szyfrujące na stałe zaszyte w kodzie źródłowym
ZACIEMNIANIE KODU ŹRÓDŁOWEGO
Zaciemnianie kodu polega na jego modyfikacji w celu
utrudnienia jego interpretacji.
Najczęściej wykorzystywanymi metodami zaciemniania kodu
są:
• zmiany nazw parametrów oraz metod
• zmiany przebiegu kodu (zmiany warunków pętli,
dublowanie metod…)
• zmiany kodowania, zmiany długości życia zmiennych…
ZACIEMNIANIE KODU ŹRÓDŁOWEGO
public final class a
{
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;
(...)
ZACIEMNIANIE KODU ŹRÓDŁOWEGO
public final class a
{
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”
ANALIZA DYNAMICZNA
ANALIZA DYNAMICZNA
• Analiza funkcjonalności dostępnych w aplikacji
• Sprawdzenie logów oraz cache zapisywanych przez aplikację
• Sprawdzenie jakie aplikacja uruchamia procesy oraz jakie pliki
są przez nią zapisywane
• Obserwacja ruchu sieciowego generowanego przez aplikację
• Analiza IPC (ang. inter-proces communication)
• Weryfikacja poprawności konfiguracji SSL
• Testy API serwera aplikacji
ANALIZA DYNAMICZNA
LOGI SYSTEMOWE
• Dosyć często zawierają pełne żądania HTTP,
a w nich np. dane uwierzytelniające użytkowników
INSERT INTO "cfurl_cache_response"
VALUES(2,0,1594297610,0,'http://dev/service/auth/createFirstSession?pa
ssword=35971831&sessionId=857006 &userId=24384344','1970-01-21
23:03:36');
LOGI SYSTEMOWE
$ adb logcat
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","error
Code":0,"time":1351588394408,"errorDesc":""}
LOGI SYSTEMOWE
$ adb logcat
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","error
Code":0,"time":1351588394408,"errorDesc":""}
LOGI SYSTEMOWE - 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?
• Czy podatność została wykorzystana w praktyce?
• Ale to może nie mieć żadnego znaczenia w obliczu klęski
wizerunkowej – np. Starbucks, styczeń 2014
LOGI SYSTEMOWE - SKUTKI
DANE OFFLINE
• Pewne funkcje aplikacji (np. historia transakcji) działają również
offline. Aplikacja musi więc przechowywać lokalnie część danych
pobranych z serwera
• Aplikacja bankowości mobilnej, do uwierzytelnienia i autoryzacji
wymagany jest kod PIN
• Po 3-krotnym wprowadzeniu błędnego PIN-u dostęp do aplikacji
jest blokowany
• Dane te są trzymane w formie zaszyfrowanej, w prywatnym
katalogu dostępnym jedynie dla tej aplikacji. Do odszyfrowania
konieczne jest podanie PIN-u użytkownika
• Nie użyto stałego klucza zaszytego w aplikacji
SPOJRZENIE ATAKUJĄCEGO
• Aby uzyskać dostęp do danych potrzebuję
kodu PIN
• Załóżmy, że udało mu się przejąć pełną
kontrolę nad urządzeniem mobilnym
(np. kradzież, malware...)
• Jednak nie może podsłuchać kodu PIN – nie ma
możliwości kontroli nad urządzeniem w trakcie gdy
użytkownik korzysta z bankowości
• Jak może uzyskać PIN?
BRUTE-FORCE OFFLINE
• Kod PIN jest używany również do odszyfrowania danych trzymanych lokalnie.
• Jest to funkcja, która działa bez połączenia do Internetu, więc kod PIN nie
może być zweryfikowany po stronie serwera.
• Nawet jeśli aplikacja się zablokuje po 3 nieudanych próbach, jest to proces
offline. Konto nie zablokuje się na serwerze, a intruz może odtworzyć stan
aplikacji sprzed zablokowania i próbować ponownie.
• Czyli - intruz może bez ograniczeń łamać kod PIN offline. Prawidłowy kod
pozna po tym, iż po rozszyfrowaniu uzyska sensowne dane.
• Nawet jeśli kod jest złożony (a w praktyce najczęściej to kilka cyfr), złamanie
zajmie mu maksymalnie kilka godzin.
JAK TO ZROBIĆ POPRAWNIE?
• Wszystkie próby użycia hasła (np. w celu uwierzytelnienia
lub autoryzacji) powinny być weryfikowane na serwerze,
nie lokalnie na urządzeniu.
• Poprawne użycie kryptografii – uwaga na błędy
pozwalające na łamanie siłowe offline.
• Najlepiej nie przechowywać żadnych danych wrażliwych na
urządzeniu, nawet w formie zaszyfrowanej
IPC – KOMUNIKACJA MIĘDZYPROCESOWA
• Podstawowe komponenty aplikacji Android:
• Widoki
• Dostawcy treści
• Serwisy
• Odbiorca komunikatów
• Wywołania wewnętrzene oraz zewnętrzne
• AndroidManifest.xml !
IPC – KOMUNIKACJA MIĘDZYPROCESOWA
<activity android:label="@7F050009"
android:name=".PWList"
android:exported="true"
android:finishOnTaskLaunch="true"
android:clearTaskOnLaunch="true"
android:excludeFromRecents="true">
</activity>
• Fragment pliku AndroidManifest.xml definiujący widok
PWList (lista zapisanych haseł)
IPC – KOMUNIKACJA MIĘDZYPROCESOWA
• # adb shell am start –n com.mwr.example.sieve.PWList
SSL (ang. secure socket layer)
• Protokół zapewniający poufność oraz integralność
przesyłanych danych
• Kryptografia asymetryczna do wymiany klucza
szyfrującego
• Zawartość transmisji jest szyfrowana przy użyciu
kryptografi symetrycznej
SSL (ang. secure socket layer)
MAN-IN-THE-MIDDLE
KONFIGURACJA SSL PO STRONIE SERWERA
• www.ssllabs.com
• OWASP Testing for TLS-SSL
https://www.owasp.org/index.php/Testing_for_SSL-
TLS_(OWASP-CM-001)
CERTIFICATE PINNING
• Walidacja w aplikacji czy serwer przedstawia się swoim
certyfikatem
PRZECHWYTYWANIE RUCHU HTTP
• # emulator –avd emulator_name –http-proxy 127.0.0.1:8080
• Lokalne PROXY
• Burp
• Fiddler
• Charles PROXY
PRZECHWYTYWANIE RUCHU HTTP
• Pozostaje tylko dodać niezaufany certyfikat do trustsotra
na urządzeniu
1. Eksport certyfikatu
PRZECHWYTYWANIE RUCHU HTTP
2. Przeniesienie certyfikatu na urządzenie / emulator
# adb push burp.cer /storage/sdcard
3. Przeniesienie certyfikatu na urządzenie
Dodanie certyfikatu do zaufanych certyfikatów na urządzeniu
Ustawienie -> Zabezpieczenia -> Zainstaluj certyfikat z karty SD
PRZECHWYTYWANIE RUCHU HTTP
ANALIZA DYNAMICZNA
TESTY API PO STRONIE SERWERA
• Błędy kontroli dostępu
• Nieprawidłowa obsługa sesji
• Błędy uwierzytelnienia i autoryzacji
• Błędy logiczne
• SQL Injection
• i wiele, wiele innych….
KONTROLA DOSTĘPU
Jedna z aplikacji mobilnych realizujących płatności
bezgotówkowych
1. Dostęp do aplikacji jest chroniony kodem PIN
2. W aplikacji można wybrać funkcjonalność
„Zapłać kodem”
3. Serwer odsyła specjalny kod
4. Wprowadzenie kodu do terminalu płatniczego
potwierdza dokonanie transakcji
KONTROLA DOSTĘPU
POST pay/generate_token HTTP/1.1
Host: acc
X-Client-Time: 1457090926000
(…)
{"session_id":"I000080Vz2WS3nPH5gmsYhiwMkyv8","customer_id":
„iAjU765cxVDOjauJrO0s7g","imsi":"CE0BC1B4-CC54-464C-A131-
74C25DFDDF5A"}
KONTROLA DOSTĘPU
POST pay/generate_token HTTP/1.1
Host: acc
X-Client-Time: 1457090926000
(…)
{"session_id":"","customer_id":„iAjU765cxVDOjauJrO0s7g","imsi":"CE0
BC1B4-CC54-464C-A131-74C25DFDDF5A"}
A co się stanie jeśli wyślemy pusty identyfikator sesji?
KONTROLA DOSTĘPU
HTTP/1.1 200 OK
Date: Fri, 04 Mar 2016 11:29:17 GMT
(...)
{„code": "12807521", „secret": "2e4dee5a-6d26-43d4-bcc2-
958485533a15", "expiration": "2016-03-04 12:30:46.023095"}
Serwer zwraca aktywny kod do płatności jedynie w oparciu
o parametr customer_id = nie musimy znać PINu do
aplikacji, żeby dokonywać płatności
OBSŁUGA SESJI
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)
Jedna z bankowości mobilnych:
BŁĘDY LOGICZNE
Jeszcze jedna bankowość mobilna:
• Mobilna CAPTCHA
• Proces rejestracji konta, potwierdzany CAPTCHA
oraz kodem SMS
• Należy kliknąć w odpowiedni obrazek (1 z 6)
BŁĘDY LOGICZNE
BŁĘDY LOGICZNE
• Bardzo wysokie prawdopodobieństwo trafienia
„na ślepo”
• A w implementacji jeszcze gorzej
• Każdy obrazek to plik statyczny, który można
zindeksować i zautomatyzować omijanie
CAPTCHA
OWASP MOBILE TOP 10
KONIEC
lukasz.bobrek@securing.pl
Dziękuję,
zapraszam do kontaktu

More Related Content

What's hot

Hacking Internet of Things
Hacking Internet of ThingsHacking Internet of Things
Hacking Internet of ThingsSecuRing
 
(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnychSecuRing
 
Bezpieczeństwo aplikacji mobilnych
Bezpieczeństwo aplikacji mobilnychBezpieczeństwo aplikacji mobilnych
Bezpieczeństwo aplikacji mobilnychSecuRing
 
(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnychSlawomir Jasek
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiLogicaltrust pl
 
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
 
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmie
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmieSześć sposobów na przejęcie sieci przemysłowej w twojej firmie
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmieSecuRing
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiLogicaltrust pl
 
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...SecuRing
 
Budowanie i hakowanie nowoczesnych aplikacji iOS
Budowanie i hakowanie nowoczesnych aplikacji iOSBudowanie i hakowanie nowoczesnych aplikacji iOS
Budowanie i hakowanie nowoczesnych aplikacji iOSSecuRing
 
Hacking Bluetooth Smart
Hacking Bluetooth SmartHacking Bluetooth Smart
Hacking Bluetooth SmartSlawomir Jasek
 
Jak tworzyć bezpieczne aplikacje?
Jak tworzyć bezpieczne aplikacje?Jak tworzyć bezpieczne aplikacje?
Jak tworzyć bezpieczne aplikacje?SecuRing
 
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
 
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
 
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...Gawel Mikolajczyk
 
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykSecurity B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykGawel Mikolajczyk
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowaniaSecuRing
 

What's hot (19)

Hacking Internet of Things
Hacking Internet of ThingsHacking Internet of Things
Hacking Internet of Things
 
(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych
 
Bezpieczeństwo aplikacji mobilnych
Bezpieczeństwo aplikacji mobilnychBezpieczeństwo aplikacji mobilnych
Bezpieczeństwo aplikacji mobilnych
 
(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadki
 
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...
 
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmie
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmieSześć sposobów na przejęcie sieci przemysłowej w twojej firmie
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmie
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
 
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
 
Budowanie i hakowanie nowoczesnych aplikacji iOS
Budowanie i hakowanie nowoczesnych aplikacji iOSBudowanie i hakowanie nowoczesnych aplikacji iOS
Budowanie i hakowanie nowoczesnych aplikacji iOS
 
Hacking Bluetooth Smart
Hacking Bluetooth SmartHacking Bluetooth Smart
Hacking Bluetooth Smart
 
Jak tworzyć bezpieczne aplikacje?
Jak tworzyć bezpieczne aplikacje?Jak tworzyć bezpieczne aplikacje?
Jak tworzyć bezpieczne aplikacje?
 
Devops/Sysops security
Devops/Sysops securityDevops/Sysops security
Devops/Sysops security
 
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 ...
 
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?
 
Devops security
Devops securityDevops security
Devops security
 
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
 
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykSecurity B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania
 

Similar to Testowanie bezpieczeństwa aplikacji dedykowanych na platformę Android

Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
NK API - Przykłady
NK API - PrzykładyNK API - Przykłady
NK API - Przykładynasza-klasa
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Natalia Stanko
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Bartlomiej Zass
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoTomasz Dziuda
 
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...PROIDEA
 
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
 
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuLogicaltrust pl
 
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuLogicaltrust pl
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaLeszek Mi?
 
Budowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOASBudowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOASMateusz Stępniak
 
PLNOG 18 - Michał Sajdak - IoT hacking w praktyce
PLNOG 18 - Michał Sajdak - IoT hacking w praktycePLNOG 18 - Michał Sajdak - IoT hacking w praktyce
PLNOG 18 - Michał Sajdak - IoT hacking w praktycePROIDEA
 
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkumsobiegraj
 
OWASP ASVS 3.1 EA PL - YetiForce
OWASP ASVS 3.1 EA PL - YetiForceOWASP ASVS 3.1 EA PL - YetiForce
OWASP ASVS 3.1 EA PL - YetiForcePabiszczak Błażej
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API3camp
 
Owasp top 10 2010 final PL Beta
Owasp top 10   2010 final PL BetaOwasp top 10   2010 final PL Beta
Owasp top 10 2010 final PL BetaThink Secure
 

Similar to Testowanie bezpieczeństwa aplikacji dedykowanych na platformę Android (20)

Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
NK API - Przykłady
NK API - PrzykładyNK API - Przykłady
NK API - Przykłady
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp Trójmiasto
 
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
 
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ż...
 
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
 
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
 
Budowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOASBudowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOAS
 
Isyp07
Isyp07Isyp07
Isyp07
 
PLNOG 18 - Michał Sajdak - IoT hacking w praktyce
PLNOG 18 - Michał Sajdak - IoT hacking w praktycePLNOG 18 - Michał Sajdak - IoT hacking w praktyce
PLNOG 18 - Michał Sajdak - IoT hacking w praktyce
 
Android i REST
Android i RESTAndroid i REST
Android i REST
 
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
 
OWASP ASVS 3.1 EA PL - YetiForce
OWASP ASVS 3.1 EA PL - YetiForceOWASP ASVS 3.1 EA PL - YetiForce
OWASP ASVS 3.1 EA PL - YetiForce
 
Wstęp do Clean Architecture
Wstęp do Clean ArchitectureWstęp do Clean Architecture
Wstęp do Clean Architecture
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API
 
Owasp top 10 2010 final PL Beta
Owasp top 10   2010 final PL BetaOwasp top 10   2010 final PL Beta
Owasp top 10 2010 final PL Beta
 

More from SecuRing

Developer in a digital crosshair, 2023 edition - 4Developers
Developer in a digital crosshair, 2023 edition - 4DevelopersDeveloper in a digital crosshair, 2023 edition - 4Developers
Developer in a digital crosshair, 2023 edition - 4DevelopersSecuRing
 
Developer in a digital crosshair, 2022 edition - Oh My H@ck!
Developer in a digital crosshair, 2022 edition - Oh My H@ck!Developer in a digital crosshair, 2022 edition - Oh My H@ck!
Developer in a digital crosshair, 2022 edition - Oh My H@ck!SecuRing
 
Developer in a digital crosshair, 2022 edition - No cON Name
Developer in a digital crosshair, 2022 edition - No cON NameDeveloper in a digital crosshair, 2022 edition - No cON Name
Developer in a digital crosshair, 2022 edition - No cON NameSecuRing
 
Is persistency on serverless even possible?!
Is persistency on serverless even possible?!Is persistency on serverless even possible?!
Is persistency on serverless even possible?!SecuRing
 
What happens on your Mac, stays on Apple’s iCloud?!
What happens on your Mac, stays on Apple’s iCloud?!What happens on your Mac, stays on Apple’s iCloud?!
What happens on your Mac, stays on Apple’s iCloud?!SecuRing
 
0-Day Up Your Sleeve - Attacking macOS Environments
0-Day Up Your Sleeve - Attacking macOS Environments0-Day Up Your Sleeve - Attacking macOS Environments
0-Day Up Your Sleeve - Attacking macOS EnvironmentsSecuRing
 
Developer in a digital crosshair, 2022 edition
Developer in a digital crosshair, 2022 editionDeveloper in a digital crosshair, 2022 edition
Developer in a digital crosshair, 2022 editionSecuRing
 
20+ Ways To Bypass Your Macos Privacy Mechanisms
20+ Ways To Bypass Your Macos Privacy Mechanisms20+ Ways To Bypass Your Macos Privacy Mechanisms
20+ Ways To Bypass Your Macos Privacy MechanismsSecuRing
 
How secure are webinar platforms?
How secure are webinar platforms?How secure are webinar platforms?
How secure are webinar platforms?SecuRing
 
20+ Ways to Bypass Your macOS Privacy Mechanisms
20+ Ways to Bypass Your macOS Privacy Mechanisms20+ Ways to Bypass Your macOS Privacy Mechanisms
20+ Ways to Bypass Your macOS Privacy MechanismsSecuRing
 
Serverless security: attack & defense
 Serverless security: attack & defense Serverless security: attack & defense
Serverless security: attack & defenseSecuRing
 
Abusing & Securing XPC in macOS apps
Abusing & Securing XPC in macOS appsAbusing & Securing XPC in macOS apps
Abusing & Securing XPC in macOS appsSecuRing
 
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standardsWebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standardsSecuRing
 
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standardsWebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standardsSecuRing
 
Let's get evil - threat modeling at scale
Let's get evil - threat modeling at scaleLet's get evil - threat modeling at scale
Let's get evil - threat modeling at scaleSecuRing
 
Attacking AWS: the full cyber kill chain
Attacking AWS: the full cyber kill chainAttacking AWS: the full cyber kill chain
Attacking AWS: the full cyber kill chainSecuRing
 
Web Apps vs Blockchain dApps (Smart Contracts): tools, vulns and standards
Web Apps vs Blockchain dApps (Smart Contracts): tools, vulns and standardsWeb Apps vs Blockchain dApps (Smart Contracts): tools, vulns and standards
Web Apps vs Blockchain dApps (Smart Contracts): tools, vulns and standardsSecuRing
 
We need t go deeper - Testing inception apps.
We need t go deeper - Testing inception apps.We need t go deeper - Testing inception apps.
We need t go deeper - Testing inception apps.SecuRing
 
Building & Hacking Modern iOS Apps
Building & Hacking Modern iOS AppsBuilding & Hacking Modern iOS Apps
Building & Hacking Modern iOS AppsSecuRing
 
Artificial Intelligence – a buzzword, new era of IT or new threats?
Artificial Intelligence – a buzzword, new era of IT or new threats?Artificial Intelligence – a buzzword, new era of IT or new threats?
Artificial Intelligence – a buzzword, new era of IT or new threats?SecuRing
 

More from SecuRing (20)

Developer in a digital crosshair, 2023 edition - 4Developers
Developer in a digital crosshair, 2023 edition - 4DevelopersDeveloper in a digital crosshair, 2023 edition - 4Developers
Developer in a digital crosshair, 2023 edition - 4Developers
 
Developer in a digital crosshair, 2022 edition - Oh My H@ck!
Developer in a digital crosshair, 2022 edition - Oh My H@ck!Developer in a digital crosshair, 2022 edition - Oh My H@ck!
Developer in a digital crosshair, 2022 edition - Oh My H@ck!
 
Developer in a digital crosshair, 2022 edition - No cON Name
Developer in a digital crosshair, 2022 edition - No cON NameDeveloper in a digital crosshair, 2022 edition - No cON Name
Developer in a digital crosshair, 2022 edition - No cON Name
 
Is persistency on serverless even possible?!
Is persistency on serverless even possible?!Is persistency on serverless even possible?!
Is persistency on serverless even possible?!
 
What happens on your Mac, stays on Apple’s iCloud?!
What happens on your Mac, stays on Apple’s iCloud?!What happens on your Mac, stays on Apple’s iCloud?!
What happens on your Mac, stays on Apple’s iCloud?!
 
0-Day Up Your Sleeve - Attacking macOS Environments
0-Day Up Your Sleeve - Attacking macOS Environments0-Day Up Your Sleeve - Attacking macOS Environments
0-Day Up Your Sleeve - Attacking macOS Environments
 
Developer in a digital crosshair, 2022 edition
Developer in a digital crosshair, 2022 editionDeveloper in a digital crosshair, 2022 edition
Developer in a digital crosshair, 2022 edition
 
20+ Ways To Bypass Your Macos Privacy Mechanisms
20+ Ways To Bypass Your Macos Privacy Mechanisms20+ Ways To Bypass Your Macos Privacy Mechanisms
20+ Ways To Bypass Your Macos Privacy Mechanisms
 
How secure are webinar platforms?
How secure are webinar platforms?How secure are webinar platforms?
How secure are webinar platforms?
 
20+ Ways to Bypass Your macOS Privacy Mechanisms
20+ Ways to Bypass Your macOS Privacy Mechanisms20+ Ways to Bypass Your macOS Privacy Mechanisms
20+ Ways to Bypass Your macOS Privacy Mechanisms
 
Serverless security: attack & defense
 Serverless security: attack & defense Serverless security: attack & defense
Serverless security: attack & defense
 
Abusing & Securing XPC in macOS apps
Abusing & Securing XPC in macOS appsAbusing & Securing XPC in macOS apps
Abusing & Securing XPC in macOS apps
 
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standardsWebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
 
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standardsWebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
WebApps vs Blockchain dApps (SmartContracts): tools, vulns and standards
 
Let's get evil - threat modeling at scale
Let's get evil - threat modeling at scaleLet's get evil - threat modeling at scale
Let's get evil - threat modeling at scale
 
Attacking AWS: the full cyber kill chain
Attacking AWS: the full cyber kill chainAttacking AWS: the full cyber kill chain
Attacking AWS: the full cyber kill chain
 
Web Apps vs Blockchain dApps (Smart Contracts): tools, vulns and standards
Web Apps vs Blockchain dApps (Smart Contracts): tools, vulns and standardsWeb Apps vs Blockchain dApps (Smart Contracts): tools, vulns and standards
Web Apps vs Blockchain dApps (Smart Contracts): tools, vulns and standards
 
We need t go deeper - Testing inception apps.
We need t go deeper - Testing inception apps.We need t go deeper - Testing inception apps.
We need t go deeper - Testing inception apps.
 
Building & Hacking Modern iOS Apps
Building & Hacking Modern iOS AppsBuilding & Hacking Modern iOS Apps
Building & Hacking Modern iOS Apps
 
Artificial Intelligence – a buzzword, new era of IT or new threats?
Artificial Intelligence – a buzzword, new era of IT or new threats?Artificial Intelligence – a buzzword, new era of IT or new threats?
Artificial Intelligence – a buzzword, new era of IT or new threats?
 

Testowanie bezpieczeństwa aplikacji dedykowanych na platformę Android

  • 1. Testowanie bezpieczeństwa aplikacji dedykowanych na platformę Android Łukasz Bobrek Kraków, 27.04.2016
  • 2. O MNIE • Analiza ryzyka oraz konsultacje dotyczące bezpieczeństwa w IT • Testy bezpieczeństwa aplikacji webowych oraz mobilnych Inżynieria wsteczna złośliwego oprogramowania na Androida Łukasz Bobrek Specjalista ds. Bezpieczeństwa IT
  • 3. 1. Wprowadzenie do testowania bezpieczeństwa aplikacji mobilnych 2. Analiza statyczna • Analiza paczki z aplikacją • Dekompilacja oraz analiza kodu źródłowego 3. Analiza dynamiczna • Analiza plików oraz logów zapisywanych w trakcie działania aplikacji • ataki wykorzystujące oddziaływanie aplikacji z innymi aktywnymi procesami działającymi na urządzeniu • ataki na komunikację pomiędzy urządzeniem mobilnym, a zdalnym serwerem aplikacji • ataki na API po stronie serwera PLAN PREZENTACJI
  • 5. PO CO ATAKOWAĆ APLIKACJE NA ANDROIDA? ~ 2 082 700 000 użytkowników urządzeń mobilnych ~ 1 062 177 000 użytkowników mobilnych aplikacji bankowych ~ 3 970 000 aplikacji mobilnych ~ 1 000 000 aplikacji mobilnych sklasyfikowanych jako złośliwe oprogramowanie www.statista.com, Symantec
  • 7. JAK ATAKOWAĆ URZĄDZENIA MOBILNE? Inna aplikacja na urządzeniu Podatności systemu Kradzież, zgubienie urządzenia, przypadkowy dostęp, inna aplikacja... Ataki na transmisję - podsłuch, słabości SSL Social engineering, słabości użytkowników np. słabe hasło, zbyt trudne mechanizmy API – błędy kontroli dostępu, logiczne, konfiguracji... Analiza paczki
  • 8. PACZKA APLIKACJI Archiwum zip zawierające skompilowany kod źródłowy w formie .dex oraz pozostałe zasoby wchodzące w skład aplikacji w formie zakodowanej: • plik AndroidManifest.xml - określa podstawowe charakterystyki aplikacji oraz określa jej komponenty • pozostałe pliki z rozszerzeniem .xml, zawierające m.in. kolekcje danych oraz definicje szablonów • wszelkie pliki graficzne oraz multimedialne potrzebne do prawidłowego działania aplikacji
  • 9. PACZKA APLIKACJI • Jak zdobyć paczkę z aplikacją? • Każdą aplikację można wyciągnąć z urządzenia adb pull /data/app/nazwa-aplikacji.apk (root) • Każdą aplikację dostępną w Google Play można pobrać w formie pliku .apk www.apkpure.com
  • 12. DEKODWANIE APLIKACJI • apktool - http://ibotpeaches.github.io/Apktool/ • # apktool decode aplikacja.apk • Otrzymujemy: • AndroidManifest.xml • Definicje szablonów, stringi, widoki… • Elementy graficzne • pliki smali – coś pomiędzy kodem źródłowym, a kodem maszynowym – odpowiednik Assemblera
  • 13. DEKODOWANIE APLIKACJI • Aplikacja Airbnb, rok 2012 • Plik strings.xml --> /res/values/strings.xml • Tak, to naprawdę tokeny OAUTH do linkedina, microsoftu oraz facebooka !
  • 14. CO MOŻNA ZNALEŹĆ W APLIKACJI? API API API
  • 15. REKOMPILACJA APLIKACJI • Smali invoke-virtual {v0}, Ljava/lang/ref/WeakReference; get()Ljava/lang/Object; move-result-object v0 check-cast v0, Lcompany/appname/d/b; if-eqz v0, :cond_0 invoke-virtual {v0, p1, p2}, • # apktool b aplikacja • # d2j-apk-sign /dist/aplikacja.apk
  • 16. REKOMPILACJA APLIKACJI • Smali invoke-virtual {v0}, Ljava/lang/ref/WeakReference; get()Ljava/lang/Object; move-result-object v0 check-cast v0, Lcompany/appname/d/b; if-eqz v0, :cond_0 --> if-neq v0, :cond_0 ? invoke-virtual {v0, p1, p2}, • # apktool b aplikacja • # d2j-apk-sign /dist/aplikacja.apk
  • 18. REKONSTRUKCJA KODU ŹRÓDŁOWEGO • Dex2jar – https://sourceforge.net/projects/dex2jar/ • Jd-gui - http://jd.benow.ca/ 1. rozpakowujemy plik .apk (bez dekodowania) 2. # d2j-dex2jar classes.dex 3. Rozpakowujemy plik classes-dex2jar.jar 4. Otrzymujemy pliki klas z rozszerzeniem .class 5. Dekompilacja do kodu JAVA (jd-gui)
  • 19. ANALIZA KODU ŹRÓDŁOWEGO • Pozwala na zrozumienie działania aplikacji, co ułatwia dalsze ataki • Identyfikacja błędów w implementacji różnych funkcjonalności • Komentarze pozostawione przez programistów ;) • Hasła, klucze, tokeny… //When I wrote this, only God and I understood what I was doing //Now, God only knows
  • 20. ANALIZA KODU ŹRÓDŁOWEGO • Aplikacja Snapchat, rok 2011 Klucze szyfrujące na stałe zaszyte w kodzie źródłowym
  • 21. ZACIEMNIANIE KODU ŹRÓDŁOWEGO Zaciemnianie kodu polega na jego modyfikacji w celu utrudnienia jego interpretacji. Najczęściej wykorzystywanymi metodami zaciemniania kodu są: • zmiany nazw parametrów oraz metod • zmiany przebiegu kodu (zmiany warunków pętli, dublowanie metod…) • zmiany kodowania, zmiany długości życia zmiennych…
  • 22. ZACIEMNIANIE KODU ŹRÓDŁOWEGO public final class a { 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; (...)
  • 23. ZACIEMNIANIE KODU ŹRÓDŁOWEGO public final class a { 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”
  • 25. ANALIZA DYNAMICZNA • Analiza funkcjonalności dostępnych w aplikacji • Sprawdzenie logów oraz cache zapisywanych przez aplikację • Sprawdzenie jakie aplikacja uruchamia procesy oraz jakie pliki są przez nią zapisywane • Obserwacja ruchu sieciowego generowanego przez aplikację • Analiza IPC (ang. inter-proces communication) • Weryfikacja poprawności konfiguracji SSL • Testy API serwera aplikacji
  • 27. LOGI SYSTEMOWE • Dosyć często zawierają pełne żądania HTTP, a w nich np. dane uwierzytelniające użytkowników INSERT INTO "cfurl_cache_response" VALUES(2,0,1594297610,0,'http://dev/service/auth/createFirstSession?pa ssword=35971831&sessionId=857006 &userId=24384344','1970-01-21 23:03:36');
  • 28. LOGI SYSTEMOWE $ adb logcat 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","error Code":0,"time":1351588394408,"errorDesc":""}
  • 29. LOGI SYSTEMOWE $ adb logcat 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","error Code":0,"time":1351588394408,"errorDesc":""}
  • 30. LOGI SYSTEMOWE - 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? • Czy podatność została wykorzystana w praktyce? • Ale to może nie mieć żadnego znaczenia w obliczu klęski wizerunkowej – np. Starbucks, styczeń 2014
  • 32. DANE OFFLINE • Pewne funkcje aplikacji (np. historia transakcji) działają również offline. Aplikacja musi więc przechowywać lokalnie część danych pobranych z serwera • Aplikacja bankowości mobilnej, do uwierzytelnienia i autoryzacji wymagany jest kod PIN • Po 3-krotnym wprowadzeniu błędnego PIN-u dostęp do aplikacji jest blokowany • Dane te są trzymane w formie zaszyfrowanej, w prywatnym katalogu dostępnym jedynie dla tej aplikacji. Do odszyfrowania konieczne jest podanie PIN-u użytkownika • Nie użyto stałego klucza zaszytego w aplikacji
  • 33. SPOJRZENIE ATAKUJĄCEGO • Aby uzyskać dostęp do danych potrzebuję kodu PIN • Załóżmy, że udało mu się przejąć pełną kontrolę nad urządzeniem mobilnym (np. kradzież, malware...) • Jednak nie może podsłuchać kodu PIN – nie ma możliwości kontroli nad urządzeniem w trakcie gdy użytkownik korzysta z bankowości • Jak może uzyskać PIN?
  • 34. BRUTE-FORCE OFFLINE • Kod PIN jest używany również do odszyfrowania danych trzymanych lokalnie. • Jest to funkcja, która działa bez połączenia do Internetu, więc kod PIN nie może być zweryfikowany po stronie serwera. • Nawet jeśli aplikacja się zablokuje po 3 nieudanych próbach, jest to proces offline. Konto nie zablokuje się na serwerze, a intruz może odtworzyć stan aplikacji sprzed zablokowania i próbować ponownie. • Czyli - intruz może bez ograniczeń łamać kod PIN offline. Prawidłowy kod pozna po tym, iż po rozszyfrowaniu uzyska sensowne dane. • Nawet jeśli kod jest złożony (a w praktyce najczęściej to kilka cyfr), złamanie zajmie mu maksymalnie kilka godzin.
  • 35. JAK TO ZROBIĆ POPRAWNIE? • Wszystkie próby użycia hasła (np. w celu uwierzytelnienia lub autoryzacji) powinny być weryfikowane na serwerze, nie lokalnie na urządzeniu. • Poprawne użycie kryptografii – uwaga na błędy pozwalające na łamanie siłowe offline. • Najlepiej nie przechowywać żadnych danych wrażliwych na urządzeniu, nawet w formie zaszyfrowanej
  • 36. IPC – KOMUNIKACJA MIĘDZYPROCESOWA • Podstawowe komponenty aplikacji Android: • Widoki • Dostawcy treści • Serwisy • Odbiorca komunikatów • Wywołania wewnętrzene oraz zewnętrzne • AndroidManifest.xml !
  • 37. IPC – KOMUNIKACJA MIĘDZYPROCESOWA <activity android:label="@7F050009" android:name=".PWList" android:exported="true" android:finishOnTaskLaunch="true" android:clearTaskOnLaunch="true" android:excludeFromRecents="true"> </activity> • Fragment pliku AndroidManifest.xml definiujący widok PWList (lista zapisanych haseł)
  • 38. IPC – KOMUNIKACJA MIĘDZYPROCESOWA • # adb shell am start –n com.mwr.example.sieve.PWList
  • 39. SSL (ang. secure socket layer) • Protokół zapewniający poufność oraz integralność przesyłanych danych • Kryptografia asymetryczna do wymiany klucza szyfrującego • Zawartość transmisji jest szyfrowana przy użyciu kryptografi symetrycznej
  • 40. SSL (ang. secure socket layer)
  • 42. KONFIGURACJA SSL PO STRONIE SERWERA • www.ssllabs.com • OWASP Testing for TLS-SSL https://www.owasp.org/index.php/Testing_for_SSL- TLS_(OWASP-CM-001)
  • 43. CERTIFICATE PINNING • Walidacja w aplikacji czy serwer przedstawia się swoim certyfikatem
  • 44. PRZECHWYTYWANIE RUCHU HTTP • # emulator –avd emulator_name –http-proxy 127.0.0.1:8080 • Lokalne PROXY • Burp • Fiddler • Charles PROXY
  • 45. PRZECHWYTYWANIE RUCHU HTTP • Pozostaje tylko dodać niezaufany certyfikat do trustsotra na urządzeniu 1. Eksport certyfikatu
  • 46. PRZECHWYTYWANIE RUCHU HTTP 2. Przeniesienie certyfikatu na urządzenie / emulator # adb push burp.cer /storage/sdcard 3. Przeniesienie certyfikatu na urządzenie Dodanie certyfikatu do zaufanych certyfikatów na urządzeniu Ustawienie -> Zabezpieczenia -> Zainstaluj certyfikat z karty SD
  • 49. TESTY API PO STRONIE SERWERA • Błędy kontroli dostępu • Nieprawidłowa obsługa sesji • Błędy uwierzytelnienia i autoryzacji • Błędy logiczne • SQL Injection • i wiele, wiele innych….
  • 50. KONTROLA DOSTĘPU Jedna z aplikacji mobilnych realizujących płatności bezgotówkowych 1. Dostęp do aplikacji jest chroniony kodem PIN 2. W aplikacji można wybrać funkcjonalność „Zapłać kodem” 3. Serwer odsyła specjalny kod 4. Wprowadzenie kodu do terminalu płatniczego potwierdza dokonanie transakcji
  • 51. KONTROLA DOSTĘPU POST pay/generate_token HTTP/1.1 Host: acc X-Client-Time: 1457090926000 (…) {"session_id":"I000080Vz2WS3nPH5gmsYhiwMkyv8","customer_id": „iAjU765cxVDOjauJrO0s7g","imsi":"CE0BC1B4-CC54-464C-A131- 74C25DFDDF5A"}
  • 52. KONTROLA DOSTĘPU POST pay/generate_token HTTP/1.1 Host: acc X-Client-Time: 1457090926000 (…) {"session_id":"","customer_id":„iAjU765cxVDOjauJrO0s7g","imsi":"CE0 BC1B4-CC54-464C-A131-74C25DFDDF5A"} A co się stanie jeśli wyślemy pusty identyfikator sesji?
  • 53. KONTROLA DOSTĘPU HTTP/1.1 200 OK Date: Fri, 04 Mar 2016 11:29:17 GMT (...) {„code": "12807521", „secret": "2e4dee5a-6d26-43d4-bcc2- 958485533a15", "expiration": "2016-03-04 12:30:46.023095"} Serwer zwraca aktywny kod do płatności jedynie w oparciu o parametr customer_id = nie musimy znać PINu do aplikacji, żeby dokonywać płatności
  • 54. OBSŁUGA SESJI 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) Jedna z bankowości mobilnych:
  • 55. BŁĘDY LOGICZNE Jeszcze jedna bankowość mobilna: • Mobilna CAPTCHA • Proces rejestracji konta, potwierdzany CAPTCHA oraz kodem SMS • Należy kliknąć w odpowiedni obrazek (1 z 6)
  • 57. BŁĘDY LOGICZNE • Bardzo wysokie prawdopodobieństwo trafienia „na ślepo” • A w implementacji jeszcze gorzej • Każdy obrazek to plik statyczny, który można zindeksować i zautomatyzować omijanie CAPTCHA