App hardening: root detection, Play Integrity, R8, FLAG_SECURE
Hardening — tətbiqin düşmən mühitdə (root, emulator, hook framework-ləri) işləməsinə qarşı qatlı müdafiə:
- Play Integrity API — Google-un attestasiya servisi: cihazın bütövlüyü (
MEETS_DEVICE_INTEGRITY), tətbiqin orijinallığı (rəsmi APK-dır, Play-dən quraşdırılıb), lisenziya vəziyyəti barədə server tərəfdə yoxlanılan verdict. Lokal root yoxlamalarından fərqi: cavab Google serverindən imzalı gəlir, tətbiq daxilində saxtalaşdırmaq çətindir. - Root/tamper detection — lokal yoxlamalar (su binary, Magisk izləri, debuggable flag, emulator əlamətləri): tez keçilə bilir, amma hücum xərcini artırır. Nəticə siyasəti bankdan asılıdır: tam blok / məhdud rejim / server-ə signal.
- R8/ProGuard — minification + obfuscation: kod kiçilir, adlar mənasızlaşır — reverse engineering çətinləşir (amma qeyri-mümkün olmur).
mapping.txtcrash deobfuscation üçün saxlanmalıdır. - FLAG_SECURE — ekran görüntüsü və screen recording qadağası; recents ekranında məzmun gizlədilir. Bank ekranlarında standart.
- Debug qorumaları —
android:debuggablerelease-də false (default), debugger-attach yoxlamaları.
// Həssas ekranlarda screenshot/recording qadağası
class TransactionActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
}
}
// build.gradle.kts — release hardening
android {
buildTypes {
release {
isMinifyEnabled = true // R8: kod kiçilir + obfuscate
isShrinkResources = true // istifadə olunmayan resurslar silinir
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}FLAG_SECURE və R8 konfiqurasiyası
Balans sualı gəlir: "Root olunmuş cihazda tətbiqi tam bloklamaq düzgündür?" Yaxşı cavab trade-off göstərir: tam blok → təhlükəsizlik auditləri üçün sadə, amma legitim power-user-lər itir və detection bypass-ları yarış yaradır; risk-əsaslı yanaşma → root aşkarlananda görüntüləmə işləyir, pul əməliyyatları məhdudlaşır/step-up tələb edir, server risk skoruna signal gedir. Qərar texniki yox, risk komitəsi qərarıdır — bunu demək fintech kontekstini anladığını göstərir.
🛠 Tapşırıq
Release build-i sərtləşdir və nəticəsini yoxla:
isMinifyEnabled = trueilə release APK yığ,mapping.txt-in yarandığını təsdiqlə; APK-nı decompile alətində açıb adların dəyişdiyini gör.- Həssas ekrana
FLAG_SECUREəlavə et və screenshot çəkməyə çalış. - Recents ekranında məzmunun necə göründüyünü yoxla.
- Bir reflection əsaslı DTO-nu keep qaydası olmadan release-də test et — "debug işləyir, release sınır" halını canlandır.
Bitdi sayılır: öz tətbiqin üçün qatlı müdafiə cədvəlini doldurmusansa.
📚 Mənbələr və sənədlər
- Play Integrity APIrəsmideveloper.android.com
- Kodun kiçildilməsi və obfuscation (R8)rəsmideveloper.android.com
- OWASP MASVSrəsmimas.owasp.org
Mobil tətbiq təhlükəsizliyinin sənaye standartı — bank auditləri buna istinad edir.