Top Banner
(NIE)BEZPIECZEŃSTWO APLIKACJI MOBILNYCH Najciekawsze przypadki Sławomir Jasek SecuRing KrakDroid, 7.12.2013
44

(Nie)bezpieczenstwo aplikacji mobilnych

Jan 17, 2017

Download

Mobile

Slawomir Jasek
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: (Nie)bezpieczenstwo aplikacji mobilnych

(NIE)BEZPIECZEŃSTWO APLIKACJI MOBILNYCH

Najciekawsze przypadki

Sławomir JasekSecuRing

KrakDroid, 7.12.2013

Page 2: (Nie)bezpieczenstwo aplikacji mobilnych

Abstrakt

● Whoami● Kto i po co zaatakuje naszą aplikację● Analiza ryzyka – podejście racjonalne● Najciekawsze podatności w aplikacjach

mobilnych - przykłady● Najważniejsze zasady bezpieczeństwa

Page 3: (Nie)bezpieczenstwo aplikacji mobilnych

# whoami

Konsultant bezpieczeństwa (~ 10 lat), setki projektów, głównie różnego typu aplikacje

SecuRing (od 2003)Testowanie i doradztwo dotyczące bezpieczeństwa aplikacji i systemów IT

Jeśli to możliwe w ramach„white-box” (przegląd konfiguracji, kodu, konsultacje), a także już na etapie definiowania architektury

Wynikiem testu jest dokładny raport opisujący szczegółowo znalezione podatności (oraz wykonane testy), wraz z rekomendacjami/sposobami naprawy

Page 4: (Nie)bezpieczenstwo aplikacji mobilnych

Kto i po co zaatakuje naszą aplikację?

„grubszy cwaniak”

„script-kiddie”

Krzysztof Jarzyna ze Szczecina

Ma motywację, zasoby oraz możliwości przeprowadzenia ataku nakierowanego

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.

Page 5: (Nie)bezpieczenstwo aplikacji mobilnych

Analiza ryzyka – podejście racjonalne

Profil ryzyka zależy od aplikacji – jej funkcji biznesowych, potencjalnych strat, zysków dla intruza.

Page 6: (Nie)bezpieczenstwo aplikacji mobilnych

Przykład 1

● Aplikacja mobilna dla kibiców

● M.in. typowanie wyników meczu, wśród prawidłowych losowanie biletów

● Po wysłaniu typowania w aplikacji znika ta opcja, można jedynie podglądnąć swój typ

Jak zaatakuje ten proces intruz?

Page 7: (Nie)bezpieczenstwo aplikacji mobilnych

Lokalne proxy – pozwala m.in. na edycję oraz powtarzanie zleceń HTTP

Page 8: (Nie)bezpieczenstwo aplikacji mobilnych

Jak to zrobić poprawnie?

● Pamiętaj, że ruch pomiędzy aplikacją a serwerem może być przechwycony i zmodyfikowany

● SSL nie chroni przed lokalnym tamperingiem● Walidacja musi być również po stronie

serwera!● Nie ufaj mechanizmom bezpieczeństwa po

stronie klienta

Page 9: (Nie)bezpieczenstwo aplikacji mobilnych

Ryzyko?

Page 10: (Nie)bezpieczenstwo aplikacji mobilnych

Przykład 2

Aplikacja bankowości mobilnej, do uwierzytelnienia i autoryzacji wymagany jest kod PIN.

Po 3-krotnym wprowadzeniu błędnego PIN-u konto blokuje się na serwerze.

Pewne funkcje aplikacji (np. historia transakcji) działają również offline. Aplikacja musi więc przechowywać lokalnie część danych pobranych z serwera.

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.

Page 11: (Nie)bezpieczenstwo aplikacji mobilnych

Spojrzenie intruza

● Aby ukraść pieniądze potrzebuje kod 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?

Page 12: (Nie)bezpieczenstwo aplikacji mobilnych

Przykład 2 – proces 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.

Page 13: (Nie)bezpieczenstwo aplikacji mobilnych

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

● Uwaga na logi systemowe itp.

Warto poczytać:

http://wampir.mroczna-zaloga.org/archives/1147-jak-zepsuc-uwierzytelnienie-w-aplikacji-mobilnej.html

Page 14: (Nie)bezpieczenstwo aplikacji mobilnych

Ryzyko?

Page 15: (Nie)bezpieczenstwo aplikacji mobilnych

Przykład 3

Aplikacja mobilna do wyświetlania w czasie rzeczywistym oraz natychmiastowego zlecania różnych operacji.

W tym celu opracowano specjalny protokół, komunikujący się przez SSL z serwerem.

Page 16: (Nie)bezpieczenstwo aplikacji mobilnych

Protokół - architektura

Page 17: (Nie)bezpieczenstwo aplikacji mobilnych

Protokół - pakiety

Page 18: (Nie)bezpieczenstwo aplikacji mobilnych

Protokół

Page 19: (Nie)bezpieczenstwo aplikacji mobilnych

Protokół – wywołanie WS

Page 20: (Nie)bezpieczenstwo aplikacji mobilnych

Protokół – inne metody WS

Page 21: (Nie)bezpieczenstwo aplikacji mobilnych

Metoda RegisterUser

Odpowiedź serwera:

<soapenv:Body>

<registerUserResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<registerUserReturn xsi:type="xsd:string">

&lt;error code=&quot;266&quot; &gt;Incorrect login&lt;/error&gt;

</registerUserReturn>

</registerUserResponse>

</soapenv:Body>

Page 22: (Nie)bezpieczenstwo aplikacji mobilnych

RegisterUser – drążymy dalej

Po dodaniu kolejnych brakujących parametrów:

● Incorrect first name

● Group with name null doesn't exist

● Group with name admin doesn't exist

● Group with name Administrator doesn't exist

● A grupa „Root” ?

Page 23: (Nie)bezpieczenstwo aplikacji mobilnych

Protokół – Game Over<soapenv:Body>

<registerUserResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<registerUserReturn xsi:type="xsd:string">

User was registered sucessfully with id=5392745</registerUserReturn>

</registerUserResponse>

</soapenv:Body>

Tak zarejestrowany użytkownik po zalogowaniu mógł zarządzać zasobami WSZYSTKICH INNYCH UŻYTKOWNIKÓW SYSTEMU

Page 24: (Nie)bezpieczenstwo aplikacji mobilnych

Walidacja, separacja przywilejów,wiele poziomów zabezpieczeń...

Page 25: (Nie)bezpieczenstwo aplikacji mobilnych

Inicjalizacja mobilnego kanału bankowości

Bankowość internetowa, logowanie za pomocą hasła, autoryzacja operacji za pomocą kodów SMS.

Aplikacja bankowości mobilnej, zabezpieczona za pomocą PIN-u (uwierzytelnienie, autoryzacja transakcji).

Solidna kryptografia w procesie dodawania nowego urządzenia do konta, oraz w trakcie korzystania z bankowości.

Proces przemyślany, aby użytkownik nie zrobił sobie krzywdy.

Page 26: (Nie)bezpieczenstwo aplikacji mobilnych

Inicjalizacja mobilnego kanału - proces

● Po zalogowaniu w serwisie www, użytkownik wybiera opcję dodania nowego urządzenia mobilnego. Wprowadza w formularzu nowy kod PIN. Wyświetla się kod QR („seed” kryptograficzny) do zeskanowania w urządzeniu.

● Użytkownik skanuje kod QR w telefonie. Podaje na urządzeniu ten sam kod PIN.

● Aplikacja mobilna przesyła do serwera zaszyfrowany PIN-em „seed”

● Serwer porównuje, czy dane się zgadzają

● W aplikacji www należy następnie potwierdzić dodanie nowego urządzenia, klikając przycisk „Akceptuj”.

Page 27: (Nie)bezpieczenstwo aplikacji mobilnych

Jak patrzy na to intruz?

● Wyobraźmy sobie, że intruz przejął kontrolę nad komputerem użytkownika (np. malware)

● Poznał login i hasło do bankowości internetowej. Nie może jednak ukraść pieniędzy, ponieważ nie ma dostępu do kodów sms

● Ale – przecież autoryzacja transakcji możliwa jest również za pomocą aplikacji mobilnej

● Jak przejąć aplikację mobilną?

Page 28: (Nie)bezpieczenstwo aplikacji mobilnych

Inicjalizacja mobilnego kanału - problem

Brak autoryzacji procesu dodawania nowego urządzenia mobilnego!

Malware działający na stacji użytkownika może dopisać sobie - bez jego wiedzy - nowe urządzenie mobilne, uzyskując w ten sposób możliwość autoryzacji transakcji.

ragecomic.fr

Page 29: (Nie)bezpieczenstwo aplikacji mobilnych

BankDroid

● Aplikacja służy do informowania online o saldach oraz zmianach na kontach różnych skandynawskich banków

● Działa w tle, odpytując o status co chwilę

● Łączy się automatycznie z bankami również gdy telefon jest podłączony do niezaufanych sieci

● 100 000 – 500 000 instalacji

https://play.google.com/store/apps/details?id=com.liato.bankdroid

Page 30: (Nie)bezpieczenstwo aplikacji mobilnych

BankDroid – kod źródłowy (GPL)

CELOWO wyłączono weryfikację certyfikatów SSL banków:

public Urllib(boolean acceptInvalidCertificates) {

this(acceptInvalidCertificates, false);

}

public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)

throws java.security.cert.CertificateException {

// TODO Auto-generated method stub

}

https://github.com/liato/android-bankdroid

Page 31: (Nie)bezpieczenstwo aplikacji mobilnych

BankDroid – i tak 21 razy ;)

src/com/liato/bankdroid/banking/banks $ grep "Urllib(true)" *AbsIkanoPartner.java

Bioklubben.java

DanskeBank.java

DinersClub.java

EasyCard.java

Eurocard.java

Everydaycard.java

FirstCard.java

ICA.java

IkanoBank.java

IkanoPartnerBase.java

Jojo.java

OKQ8.java

PayPal.java

Payson.java

PlusGirot.java

SEB.java

SEBKortBase.java

Steam.java

Vasttrafik.java

Volvofinans.java

Page 32: (Nie)bezpieczenstwo aplikacji mobilnych

MITM na SSL? Ale kto by to potrafił?!!To przecież takie trudne!

Czyżby?

Page 33: (Nie)bezpieczenstwo aplikacji mobilnych

dSploit – dzieciak sąsiadów już maBardzo prosty interfejs, do obsługi przez laika.

WiFi Scanning & Common Router Key CrackingDeep InspectionVulnerability SearchMulti Protocol Login CrackerPacket Forging with Wake On Lan Support HTTPS/SSL Support (SSL Stripping + HTTPS -> Redirection)MITM Realtime Network StatsMITM Multi Protocol Password SniffingMITM HTTP/HTTPS Session HijackingMITM HTTP/HTTPS Hijacked Session File PersistanceMITM HTTP/HTTPS Realtime Manipulation

GPL, do pobrania z http://dsploit.net

Page 34: (Nie)bezpieczenstwo aplikacji mobilnych

Przejęcie konta PayPal

Page 35: (Nie)bezpieczenstwo aplikacji mobilnych

Mały eksperyment Kraków, 7.12.2013, ~13.30. MITM – podmiana obrazków (dSploit).

Page 36: (Nie)bezpieczenstwo aplikacji mobilnych

MITM na SSL – prawidłowa (?) reakcja

Page 37: (Nie)bezpieczenstwo aplikacji mobilnych

Nie wymagaj od użytkowników zbyt wiele!

Test na użytkownikach aplikacji Android – okienko udające instalację nowego CA w telefonie.

Po zainstalowaniu kontrolowanego przez intruza CA, może on przeprowadzić atak MITM na dowolne połączenie SSL w sposób niezauważalny dla ofiary!

Page 38: (Nie)bezpieczenstwo aplikacji mobilnych

Mam nowy certyfikat – hurra!

● 73% osób zaakceptowało nowe CA – przez co stali się podatni na atak MITM

- 77% z nich było przekonanych, iż w ten sposób zwiększyli swoje bezpieczeństwo

- tylko 2% podejrzewało, iż instalacja nowego CA mogła mieć negatywny wpływ na ich prywatnośćźródło: https://www.owasp.org/images/7/77/Hunting_Down_Broken_SSL_in_Android_Apps_-_Sascha_Fahl%2BMarian_Harbach%2BMathew_Smith.pdf

Wnioski

● Nie zadawaj trudnych pytań!

● Rozwiązanie: certificate pinning.

picardfacepalm.com

Page 39: (Nie)bezpieczenstwo aplikacji mobilnych

Podejście racjonalne

● Kto i po co chciałby zaatakować naszą aplikację? Jakich zasobów do tego potrzebuje?

● Koszt zabezpieczenia nie może być większy niż wartość chronionych zasobów

● Negatywny wpływ na używalność czy dostępność

● Przyzwyczajenia użytkowników

● Uwaga na fałszywe poczucie bezpieczeństwa i odpowiedzialność

Andrzej Tobis - Kierownicawww.otwartazacheta.pl

Page 40: (Nie)bezpieczenstwo aplikacji mobilnych

Mniejsze ryzyko

● Przechowywanie danych wrażliwych w pamięci operacyjnej urządzenia w trakcie pracy aplikacji.

● Użycie klawiatury systemowej - niektóre implementacje zostawiały w systemie informacje o wciskanych klawiszach.

● Brak możliwości przeniesienia na kartę SD

● ...

Nawet jeśli ryzyko nie jest wysokie (trudność w wykorzystaniu), zabezpieczenie może być wdrożone z powodów wizerunkowych.

Page 41: (Nie)bezpieczenstwo aplikacji mobilnych

Mniejsze ryzyko

Pomimo istotnych skutków, warunki wykorzystania podatności są bardzo trudne do spełnienia

Page 42: (Nie)bezpieczenstwo aplikacji mobilnych

Pamiętaj!

Myśl o bezpieczeństwie – już na etapie projektowania!

Bezpieczeństwo transmisji.

Lokalnie przechowywane dane.

Środowisko po stronie serwera.

Wiele warstw zabezpieczeń, zasada najmniejszych przywilejów.

Nie wymagaj od użytkownika zbyt wiele.

Andrzej Tobis - Dodawaniewww.otwartazacheta.pl

Page 43: (Nie)bezpieczenstwo aplikacji mobilnych

Merry Hacking X-Mas!

www.securing.pl/konkurs/

● I miejsce - Płatny, miesięczny staż w naszej firmie.

● II miejsce - Bilet wstępu na konferencję Confidence 2014.

● III miejsce - Książka "The Web Application Hacker's Handbook".

Page 44: (Nie)bezpieczenstwo aplikacji mobilnych

Dziękuję!

[email protected]