Аудит безпеки мобільної програми (OWASP Mobile Top 10)
OWASP Mobile Top 10 — структурований список найбільш критичних класів вразливостей мобільних програм. Аудит за цим стандартом не означає формальної перевірки чек-листу — кожен пункт вимагає активного тестування, адаптованого до конкретної архітектури програми.
M1: Improper Credential Usage
Шукайте жорстко закодовані облікові дані: API-ключі в коді, паролі в конфіг-файлах, токени в git-історії. Інструменти: jadx + grep, truffleHog для репозиторія, аналіз AndroidManifest.xml та Info.plist.
Перевіряйте зберігання: облікові дані в SharedPreferences/UserDefaults — вразливість. Повинна бути в Android Keystore / iOS Keychain. На jailbroken пристрої читайте Keychain через objection keychain dump — дивіться, що там зберігається та з якими атрибутами доступу.
M2: Inadequate Supply Chain Security
Залежності третіх сторін — часто найслабша ланка. Перевіряйте: версії бібліотек на відомі CVE (OWASP Dependency-Check, gradle dependencyInsight, pod-outdated), використання бібліотек з ненадійних джерел, дозволи, які запитують SDK аналітики та реклами.
Окремо — CI/CD конвеєр: secret scanning в репозиторії, підписання артефактів, перевірка цілісності залежностей через hash verification.
M3: Insecure Authentication/Authorization
Тестуйте: обхід екрана авторизації через deep links (передаючи параметри в URL, які повинні бути доступні тільки авторизованим користувачам), горизонтальне підвищення привілеїв (авторизований користувач A звертається до даних користувача B, змінюючи user_id у запиті), відсутність переваліації сесії при критичних операціях.
На практиці часто знаходимо: deep link myapp://reset-password?token=XXX обробляється без перевірки джерела intent'а — будь-яка програма може відправити такий intent і ініціювати скидання пароля. Або: зміна email у профілі не вимагає підтвердження поточного пароля.
M4: Insufficient Input/Output Validation
На мобільному клієнті особливо актуальні: SQL-ін'єкції через параметри deep links або WebView URL, XSS у WebView з setJavaScriptEnabled(true), path traversal при роботі з файлами (URL типу ../../etc/passwd у параметрах завантаження файлу), небезпечна десеріалізація в Intent extras.
// вразливий код — приймає Intent extras без валідації
String fileName = getIntent().getStringExtra("file_name");
File file = new File(getExternalFilesDir(null), fileName);
// fileName = "../../../../../../data/data/com.other.app/secret.db"
M5: Insecure Communication
Перевіряйте через Burp Suite proxy:
- HTTPS для всіх endpoint'ів
- Certificate Pinning (обхід через Frida
ssl-unpinning.js) - Дані в GET-параметрах URL (логуються серверами, проксі, CDN)
- Небезпечні WebSocket з'єднання
- Витік чутливих даних у заголовках запитів
network_security_config.xml на Android — перевіряйте cleartextTrafficPermitted, наявність користувацьких CA в trust-anchors. Якщо debug-overrides дозволяє cleartext — переконайтеся, що це тільки debug builds.
M6: Inadequate Privacy Controls
Дозволи: програма запитує ACCESS_FINE_LOCATION постійно, хоча геолокація потрібна тільки в конкретному сценарії? Або READ_CONTACTS без видимої функції роботи з контактами? Аналізуйте відповідність запитуваних дозволів декларованій функціональності.
Логи: adb logcat часто виводить PII у production build. Перевіряйте наявність чутливих даних у logcat, Crashlytics/Sentry повідомленнях (stack trace може містити user data), аналітичних подіях.
M7: Insufficient Binary Protections
Декомпілюйте APK через jadx, IPA через Ghidra. Оцініть:
- Читаність бізнес-логіки після декомпіляції
- Наявність/якість обфускації (R8/ProGuard/DexGuard)
- Строкові константи у plaintext
- Debug-флаги у production build (
BuildConfig.DEBUG,debuggableу маніфесті) - Наявність anti-tampering перевірок
M8: Security Misconfiguration
Android: android:debuggable="true" у production маніфесті відкриває debug-доступ. android:allowBackup="true" дозволяє adb backup на Android < 12 — з бекапу читаються SharedPreferences та бази даних. exported="true" у компонентів без перевірки intent.
iOS: ATS (App Transport Security) відключен через NSAllowsArbitraryLoads. Entitlements: надмірні capabilities (наприклад, com.apple.developer.icloud-container-identifiers у програмі, яка не використовує iCloud).
M9: Insecure Data Storage
Повна ревізія хранилищ даних на пристрої:
| Хранилище | Що шукати | Інструмент |
|---|---|---|
| SQLite БД | чутливі дані, відсутність шифрування | objection, sqlite3 |
| SharedPreferences / UserDefaults | паролі, токени, ключі | objection data storage |
| Keychain (iOS) | атрибути доступу, що зберігається | objection keychain dump |
| Файлова система | незашифровані документи, кеш API | objection files ls |
| Буфер обміну | автокопіювання чутливих даних | ручне тестування |
Буфер обміну — часто упускана вразливість: програма копіює номер карти або пароль у clipboard, інша програма його читає. На iOS 14+ потрібен явний UI для доступу до clipboard, але перевіряйте все одно.
M10: Insufficient Cryptography
Слабкі алгоритми: DES, 3DES, RC4, MD5 для паролів, ECB mode для блочних шифрів, передбачуваний seed у java.util.Random замість SecureRandom, нульовий або фіксований IV, відсутність MAC (використання AES-CBC без HMAC).
Реалізації кастомної криптографії замість стандартних бібліотек — червоний прапор. "Своя крипта" майже завжди сломана.
Звіт та пріоритизація
По кожній з 10 категорій зафіксуйте: знайдено/не знайдено, конкретні екземпляри вразливостей з CVSS оцінками, кроки для відтворення, рекомендації з прикладами коду. Пріоритети: Critical (експлуатується без рута/jailbreak, прямий доступ до даних) → High → Medium → Low (інформаційні знахідки).
Аудит типової програми середнього масштабу за OWASP Top 10 — 3–5 робочих днів. Включає статичний аналіз, динамічне тестування на рутованому Android та jailbroken iOS, аналіз трафіку. Обсяг документації — згідно вимог клієнта.







