Security Cheat Sheet
Zasady bezpieczeństwa w aplikacjach mobilnych (OWASP) - Cheat Sheet
| Kategoria | Najważniejsze zasady | Narzędzia / Standardy |
|---|---|---|
| Architektura & Design | Secure by Design, zasada najmniejszych uprawnień, bezpieczne API, kontrola łańcucha dostaw | NIST, IETF, OAuth2, JWT, Vulnerable Dependency CS |
| Auth & Authorization | Serwerowe sprawdzanie auth, brak hardcoded creds, złożone hasła/PIN-y, biometria z fallbackiem, bezpieczne sesje | OWASP Auth CS, Keychain (iOS), Keystore (Android) |
| Data Storage & Privacy | Szyfrowanie danych w spoczynku i transmisji, unikanie wycieków (logi, cache), minimalizacja PII | Secure Enclave, StrongBox, Logging CS |
| Network Communication | Tylko HTTPS, cert pinning, brak ignorowania certyfikatów, silne algorytmy | Pinning CS, TLS/SSL, CA certs |
| UI Security | Maskowanie pól, powiadomienia o logowaniach, walidacja wejścia i wyjścia | Input Validation CS, Output Validation CS |
| Code Quality | Analiza statyczna, code review pod kątem security, aktualne biblioteki | SAST, dependency management |
| Application Integrity | Wyłączenie debug, obfuskacja binarki, runtime anti-tampering, wykrywanie root/jailbreak | ProGuard, runtime checks, signature validation |
| Testing | Pentesty (crypto, auth), testy automatyczne, testy UX zabezpieczeń | OWASP MASVS, OWASP MASTG |
| Post-Deployment | Incident response, szybkie aktualizacje, monitoring i analityka | CI/CD, app store updates, SIEM |
| Android | ProGuard, brak danych w SharedPreferences, Keystore (StrongBox/TEE), Play Integrity API | Android docs, Play Integrity API docs |
| iOS/iPadOS | Shortcuts/Siri zabezpieczenia, bezpieczne Deep Links, maskowanie widgetów, Secure Enclave, App Attest, DeviceCheck | Apple Developer docs (SiriKit, App Attest, ATS) |
| Dodatkowe | ATS (App Transport Security), brak danych w plist, kontrola background refresh, App Groups | ATS, Info.plist security configs |
Rozpisanie najważniejszych punktów:
- Architektura i projektowanie
- Secure by Design — bezpieczeństwo od początku (least privilege, defense in depth, separation of concerns, standardy NIST/IETF).
- Bezpieczne API — uwierzytelnianie (OAuth2, JWT), rotacja kluczy i tokenów.
- Zasada najmniejszych uprawnień — aplikacja żąda tylko niezbędnych uprawnień; bezpieczne ustawienia domyślne.
- Łańcuch dostaw — weryfikacja bibliotek zewnętrznych, podpisywanie aplikacji, kontrola aktualizacji i incydentów w komponentach.
- Uwierzytelnianie i autoryzacja
- Nie ufaj klientowi — wszystkie kontrole serwerowe, szyfrowanie danych lokalnych, unikanie ID urządzeń jako autoryzacji.
- Obsługa poświadczeń — brak hardcodowania, tokeny zamiast haseł, szyfrowanie w transmisji.
- Hasła i PIN-y — złożone hasła, brak krótkich PIN-ów, przechowywanie w Keystore/Keychain.
- Biometria — używać natywnych metod, zawsze z fallbackiem (PIN/hasło).
- Zarządzanie sesją — timeout, remote logout, losowe tokeny, bezpieczne przechowywanie.
- Operacje wrażliwe — ponowne uwierzytelnienie przy zmianie hasła, płatnościach itp.
- Przechowywanie danych i prywatność
- Szyfrowanie — dane w spoczynku i transmisji, korzystanie z API systemowych i Secure Enclave/StrongBox.
- Unikanie wycieków — kontrola logów, cache, snapshotów aplikacji.
- HTTPS — obowiązkowo, brak komunikacji plaintext.
- Dane osobowe (PII) — minimalizacja, anonimizacja, automatyczne usuwanie, zgoda użytkownika.
- Komunikacja sieciowa
- Nie ufaj sieci — zakładaj możliwość przechwycenia danych.
- Protokół — tylko HTTPS, brak ignorowania certyfikatów, silne algorytmy szyfrowania.
- Pinning certyfikatów — rozważyć, w zależności od ryzyka.
- Brak SMS do transmisji danych.
- Interfejs użytkownika
- Maskowanie danych — np. przy polach haseł.
- Powiadomienia — o aktywnościach bezpieczeństwa (np. logowanie z nowego urządzenia).
- Walidacja wejścia/wyjścia — sanizacja danych (ochrona przed XSS/SQLi).
- Jakość kodu
- Analiza statyczna — automatyczne narzędzia SAST.
- Code review — pod kątem bezpieczeństwa.
- Aktualizacja bibliotek — eliminacja znanych podatności.
- Integralność aplikacji
- Wyłączone debugowanie, obfuskacja kodu.
- Kontrole w czasie uruchomienia: wykrywanie hooków, emulatorów, root/jailbreak.
- Walidacja podpisu aplikacji.
- Reakcja na wykryte manipulacje (np. ograniczenie funkcjonalności).
- Testowanie
- Pentesty — sprawdzanie kryptografii, prób logowania bez sesji, analiza backendu.
- Testy automatyczne — ciągłe sprawdzanie mechanizmów bezpieczeństwa.
- Testy użyteczności — zabezpieczenia nie mogą obniżać UX.
- Po wdrożeniu
- Incident response — plan reagowania.
- Aktualizacje — szybkie poprawki, mechanizmy wymuszania update.
- Monitoring — wykrywanie i reagowanie w czasie rzeczywistym.
- Rekomendacje platformowe
Android
- Obfuskacja (ProGuard).
- Brak przechowywania danych w SharedPreferences.
- Wyłączone backupy.
- Keystore ze sprzętowym wsparciem (TEE/StrongBox).
- Play Integrity API (następca SafetyNet).
iOS/iPadOS
- Shortcuts i Siri — zabezpieczenie przed uruchamianiem funkcji na zablokowanym urządzeniu.
- Deep Links — walidacja, zabezpieczenia przed pominięciem logowania.
- WidgetKit — maskowanie danych na lock screenie.
- Secure Enclave — przechowywanie kluczy i operacje kryptograficzne.
- App Attest i DeviceCheck — kontrola integralności aplikacji i urządzenia.
- Dodatkowe zalecenia
- Kontrola background refresh, App Groups, ATS (App Transport Security).
- Brak przechowywania wrażliwych danych w plist.
- Wykorzystanie sprzętowych modułów bezpieczeństwa.