Основы Тестирования Безопасности Мобильных Приложений
Тестирование безопасности мобильных приложений валидирует защиту данных, безопасную коммуникацию, аутентификацию и устойчивость к обратной разработке.
OWASP Mobile Top 10
- Improper Platform Usage
- Insecure Data Storage
- Insecure Communication
- Insecure Authentication
- Insufficient Cryptography
Тестирование Безопасности iOS
Небезопасное Хранение Данных (iOS)
// НЕБЕЗОПАСНО: UserDefaults (открытый текст)
UserDefaults.standard.set("token", forKey: "auth_token")
// БЕЗОПАСНО: Keychain
func saveToKeychain(key: String, value: String) {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecValueData as String: value.data(using: .utf8)!
]
SecItemAdd(query as CFDictionary, nil)
}
Certificate Pinning (iOS)
func urlSession(
_ session: URLSession,
didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void
) {
let pinnedHash = "sha256_hash"
let serverHash = serverCertificateData.sha256()
if serverHash == pinnedHash {
completionHandler(.useCredential, URLCredential(trust: serverTrust))
}
}
Тестирование Безопасности Android
Небезопасное Хранение (Android)
// НЕБЕЗОПАСНО: SharedPreferences
val prefs = getSharedPreferences("prefs", MODE_PRIVATE)
prefs.edit().putString("token", "sensitive").apply()
// БЕЗОПАСНО: EncryptedSharedPreferences
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val encryptedPrefs = EncryptedSharedPreferences.create(
context, "secure_prefs", masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
Тестирование с Frida
# Установить Frida
pip install frida-tools
# Список приложений
frida-ps -U
# Обход обнаружения root
frida -U -l bypass-root.js -f com.example.app
Статический Анализ
# Декомпиляция APK
apktool d app.apk
# Поиск hardcoded секретов
grep -r "api_key" decompiled/
Заключение
Тестирование безопасности мобильных приложений требует платформо-специфичных знаний и специализированных инструментов. Комбинируя статический анализ, динамическое тестирование и runtime манипуляцию, QA-инженеры могут идентифицировать уязвимости до того, как их эксплуатируют атакующие.