Post on 22-Jun-2015
description
Mateusz OlejarkaMateusz Olejarka
Realia testów bezpieczeństwaRealia testów bezpieczeństwa
22
Kto zacz?
• Starszy specjalista ds. bezpieczeństwa IT, SecuRing
• Ocena bezpieczeństwa aplikacji webowych i mobilnych
• Przegląd kodu źródłowego i konfiguracji
• (były) programista
33
Agenda
• Testy bezpieczeństwa, czyli co?
• Potrzeba, zakres, przygotowania
• Realizacja – narzędzia i przykłady błędów
• Raportowanie, co dalej?
44
Testy bezpieczeństwa
• Co to znaczy bezpieczna aplikacja?!
• Problem z przełożeniem tego na zakres testów
• Wymagania związane z bezpieczeństwem aplikacji
• Funkcjonalne
• Niefunkcjonalne
55
Testy funkcjonalne vs Testy bezpieczeństwa
Symulacja działań użytkownika
Symulacja działań intruza
Scenariusze użyciaCoś co jest w interfejsie
Scenariusze nadużyć (ataku)Coś czego nie ma w interfejsieWymaga analizy zagrożeń
Opisane (lub intuicyjne) wymagania
Z reguły brak zdefiniowanych wymagań (zwłaszcza niefunkcjonalnych)
Pozostawione defekty może znaleźć użytkownik
Pozostawione defekty może znaleźć intruz
Defekt w niszowej funkcjonalności z reguły nie jest bardzo istotny
Defekt w dowolnym miejscu systemu może mieć ogromne skutki
66
Przygotowania
• Biznes aplikacji
• Modelowanie zagrożeń
• Dostępy, konta, kontakty
• Dokumentacja, model uprawnień
• Rekonesans funkcjonalny
77
Realizacja
• Mapa funkcjonalna aplikacji
• Mechanika aplikacji
• Wygenerowane scenariusze ataku
• Checklisty dla standardowych mechanizmów,formularzy, list, usług…
• A może ASVS ?
88
Realizacja
99
Zbrojownia
• Przeglądarki – IE, Chrome, Firefox
• Narzędzia deweloperskie pod klawiszem F12
• Dodatki – Firebug, Web Developer
• HTTP proxy – Burp, Fiddler
• Myśl, myśl, myśl
1010
Zbrojownia
• HTTP proxy
Przeglądarka SerwerProxy
1111
Przykłady błędów
• Elementy zablokowane/ukryte
• Globalny identyfikator
• Zmiana hasła
• Przypomnij hasło
1212
Elementy zablokowane/ukryte
• zablokowane: pole input z atrybutem disabled
• przeglądarka nie wysyła wartości pola przy wykonaniu akcji
1313
Elementy zablokowane/ukryte
• Usuwamy atrybut disabled z kodu html pola input
• przeglądarka wysyła wartość pola przy wykonaniu akcji
1414
Web Developer
1515
Elementy zablokowane/ukryte
• ukryte: pole input typu hidden
• przeglądarka wysyła wartość pola, ale nie widać go na stronie
1616
Web Developer
1717
Elementy zablokowane/ukryte
• Błąd jest dopiero wtedy, gdy
• Zmiana wartości pola zablokowanego/ukrytego jest akceptowana przez serwer bez dodatkowych pytań
• Pozwala na obejście logiki aplikacji
• Podobnie bywa z walidacją danych po stronie kodu JavaScript
1818
Globalny identyfikator
• Nazwa często zawiera id
• Liczba całkowita
• Co będzie jak dodamy 1 ?
1919
Zmiana hasła
2020
Zmiana hasła bob@securing.pl
2121
Zmiana hasła
• Mając adres email użytkownika możemy zmienić mu hasło
• Skutki
• Atak DoS poprzez masową zmianę haseł
• Uszczerbek na wizerunku
2222
Przypomnij hasło
• Wysyłamy adres email użyty w rejestracji
• Dostajemy link w postaci: http://myapp.securing.pl/reminder/{hash}
• Po wejściu na link widzimy:
2323
Przypomnij hasło
• eve1@securing.pl
• 08f08f0900950c00d10c008c09b0ce0c00be0d00cd0c40c90c20890cb0c7
2424
Przypomnij hasło
• eve1@securing.pl
• 08f08f0900950c00d10c008c09b0ce0c00be0d00cd0c40c90c20890cb0c7
• Drugi raz przypominamy:
• 08f08f0910950c00d10c008c09b0ce0c00be0d00cd0c40c90c20890cb0c7
2525
Przypomnij hasło
• eve1@securing.pl
• 08f08f08c0950c00d10c008c09b0ce0c00be0d00cd0c40c90c20890cb0c7
• eve2@securing.pl
• 08f08f08d0950c00d10c008d09b0ce0c00be0d00cd0c40c90c20890cb0c7
2626
Przypomnij hasło
• eve1@securing.pl
• 08f08f08c0950c00d10c008c09b0ce0c00be0d00cd0c40c90c20890cb0c7
• eve2@securing.pl
• 08f08f08d0950c00d10c008d09b0ce0c00be0d00cd0c40c90c20890cb0c7
2727
Przypomnij hasło
• aab@securing.pl
• 08f08f0920950bc0bc0bd09b0ce0c00be0d00cd0c40c90c20890cb0c7
• aba@securing.pl
• 08f08f0930950bc0bd0bc09b0ce0c00be0d00cd0c40c90c20890cb0c7
2828
Przypomnij hasło
• Wygląda na szyfr podstawieniowy
• Na końcu jest zaszyfrowany adres email
• A może to tekst zakodowany szesnastkowo ?
2929
Przypomnij hasło
• hash z linku dla aba@securing.pl:
• 08f08f0940950bc0bd0bc09b0ce0c00be0d00cd c4 c9 c2 89 cb c7
• hex(aba@securing.pl) = 616261407365637572 69 6e 67 2e 70 6c
• różnica: 0x5b (d’91)
3030
Przypomnij hasło
• Szyfr Cezara z kodowaniem szesnastkowym - odwracalny
• Tekst jawny ma postać:
• 449:aba@securing.pl
• Na początku jest licznik rosnący o 1 przy kolejnym resecie hasła
3131
Przypomnij hasło
• mając:
• adres email użytkownika
• ustawiając dobrą wartość licznika
• możemy poznać hasło innego użytkownika
• Skutki ?
3232
Raportowanie
• Ogólny opis problemu
• Sposób odtworzenia
• Ryzyko = f(skutki, warunki wykorzystania)
• Rekomendacje
3333
Raportowanie
• Ogólny opis problemu
• Sposób odtworzenia
• Ryzyko = f(skutki, warunki wykorzystania)
• Rekomendacje
• Opisuj błąd tak, jakby osoba mająca robić retesty była seryjnym mordercą i znała Twój adres
3434
Co dalej ?
• Retesty wewnętrzne
• Weryfikacja podatności z raportu w innych aplikacjach
• Rozbudowa bazy wiedzy
• Rzut oka na OWASP ASVS
3535
???
3636
Materiały
• http://mdsec.net/wahh/
• https://www.owasp.org/index.php/Top_10_2013
• https://www.owasp.org/index.php/Category:OWASP_Application_Security_Verification_Standard_Project
• http://google-gruyere.appspot.com/
• http://threats.pl/bezpieczenstwo-aplikacji-internetowych
3737
Dziękuję za uwagę
http://www.securing.pl e-mail: info@securing.pltel. (12) 4252575fax. (12) 4252593
Mateusz Olejarkamateusz.olejarka@securing.pl