Основы Тестирования Безопасности Мобильных Приложений

Тестирование безопасности мобильных приложений валидирует защиту данных, безопасную коммуникацию, аутентификацию и устойчивость к обратной разработке.

OWASP Mobile Top 10

  1. Improper Platform Usage
  2. Insecure Data Storage
  3. Insecure Communication
  4. Insecure Authentication
  5. 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-инженеры могут идентифицировать уязвимости до того, как их эксплуатируют атакующие.