Mobil təhlükəsizlik tətbiqi, istifadəçi məlumatlarını və server infrastrukturunu hücumlardan və sızmalardan qorumaq üçün tədbirlər kompleksidir. OWASP Mobile Top 10 (2024)-a görə, təhlükəsiz olmayan məlumat saxlanması mobil tətbiqlərdə ən geniş yayılmış zəiflik olaraq qalır. Bu məqalədə əsas təhdidləri, şifrələmə metodlarını, təhlükəsiz saxlanmanı, autentifikasiyanı və kod qorunmasını nəzərdən keçirəcəyik — başlanğıc tərtibatçının bilməsi lazım olan hər şey.
Əsas Məqamlar
OWASP (Open Web Application Security Project) ən təhlükəli mobil təhlükəsizlik zəifliklərinin reytinqini dərc edən qeyri-kommersiya təşkilatıdır. OWASP Mobile Top 10 tərtibatçılara ilk növbədə nəyə diqqət etməli olduqlarını anlamağa kömək edən siyahıdır. 2024 versiyasında təhlükəsiz olmayan saxlama, zəif autentifikasiya və təhlükəsiz olmayan şəbəkə əlaqəsi ilə bağlı problemlər reytinqdə öndədir.
M1: Təhlükəsiz olmayan məlumat saxlanması — ən çox yayılmış problem: parollar, tokenlər və şəxsi məlumatlar şifrələnmədən SharedPreferences, NSUserDefaults və ya yerli fayllarda qalır. M2: Zəif autentifikasiya — server tərəfinin yoxlanmasının olmaması, zəif parollar. M3: Təhlükəsiz olmayan şəbəkə əlaqəsi — HTTPS-nin olmaması və ya yanlış SSL sertifikatı yoxlanması. M4 və M5 kriptoqrafiya və yanlış API istifadəsi ilə bağlıdır.
M6: Təhlükəsiz olmayan icazə — istifadəçi sorğuda ID-ni dəyişdirərək başqa istifadəçinin məlumatlarına daxil ola bilər. M7: Kod inyeksiyası (SQL Injection, XSS). M8: Tətbiq manipulyasiyası — repackaging, kod dəyişdirilməsi. M9 və M10 — üçüncü tərəf kitabxanaları vasitəsilə məlumat sızması və əks mühəndislik. Bu təhdidlərin hər biri üçün sübut olunmuş əks tədbirlər mövcuddur və IT Sectr-də biz 2017-ci ildən bütün layihələrdə onları tətbiq edirik.
MITM hücumu təcavüzkarın tətbiq və server arasında trafiki ələ keçirməsi ilə baş verir. Bu, DNS spoofing, ARP spoofing və ya təhlükəsiz olmayan Wi-Fi şəbəkəsinə qoşulmaqla mümkündür. Qorunma üçün SSL/TLS sertifikatları və Certificate Pinning istifadə olunur.
Certificate Pinning tətbiqin server sertifikatının tətbiq kodunda əvvəlcədən saxlanılmış sertifikata uyğun olub-olmadığını yoxladığı mexanizmdir. Təcavüzkar proksi (məsələn, Burp Suite) vasitəsilə sertifikatı dəyişdirsə belə, tətbiq əlaqəni rədd edəcək. Pinning iki növdür: Public Key Pinning və Certificate Hash Pinning.
AES (Advanced Encryption Standard) simmetrik şifrələmə alqoritmidir, cihazda məlumat təhlükəsizliyinin əsasıdır. AES məlumatları şifrələmək və deşifrələmək üçün eyni açardan istifadə edir. AES 128, 192 və ya 256 bit uzunluğunda açarları dəstəkləyir. Mobil inkişafda AES-256 cihazda məlumatları (fayllar, keş, yerli verilənlər bazasında qeydlər) şifrələmək üçün istifadə olunur.
AES rejimləri: GCM (tövsiyə olunur) — məlumat autentifikasiyasını təmin edir, CBC — blok zəncirləmə ilə əsas rejim, ECB — təhlükəsiz deyil, istifadə etməyin. iOS üçün AES CommonCrypto (CCOptions) vasitəsilə, Android üçün — Java Cryptography Architecture (JCA) daxilində Cipher vasitəsilə mövcuddur. Vacib: şifrələmə açarı heç vaxt tətbiq kodunda saxlanmamalıdır — Keychain/Keystore istifadə edin.
Asimmetrik Şifrələmə: RSA — bir cüt açardan (ictimai və şəxsi) istifadə edir. RSA kiçik həcmli məlumatları şifrələmək üçün istifadə olunur — adətən müştəri və server arasında simmetrik açarın mübadiləsi üçün. Minimum RSA açar uzunluğu 2048 bitdir (4096 tövsiyə olunur). iOS-da RSA Security Framework (SecKeyCreateRandomKey) vasitəsilə, Android-də — Android Keystore daxilində KeyPairGenerator vasitəsilə mövcuddur.
Heşləmə (SHA-256, SHA-3) məlumatların sabit uzunluqlu sətirə geri dönməz çevrilməsidir. Heşlər məlumat bütövlüyünün yoxlanması və parolların saxlanması üçün istifadə olunur. Parollar üçün mütləq bcrypt, scrypt və ya Argon2 istifadə edin — adi SHA-256 göy qurşağı cədvəli hücumlarına qarşı həssasdır. SSL/TLS müştəri və server arasında şəbəkə trafikini şifrələmək üçün protokoldur. Müasir standart Perfect Forward Secrecy (PFS) təmin edən TLS 1.3-dür.
TLS 1.3 sələflərindən daha sürətlidir: əl sıxma iki əvəzinə bir raund tələb edir. Android-də minimum TLS versiyası SSLSocket vasitəsilə konfiqurasiya edilir, iOS-da — standart olaraq TLS 1.2 və ya daha yüksək tələb edən ATS (App Transport Security) vasitəsilə. ATS yalnız müəyyən domenlər üçün əsaslandırma ilə söndürülə bilər.
Keychain (Açar halqası) iOS / macOS-da parollar, şifrələmə açarları, sertifikatlar və tokenlər üçün qorunan anbardır. Keychain-dəki məlumatlar hər cihaz üçün unikal olan aparat açarı ilə şifrələnir. Keychain-ə giriş Security Framework (SecItemAdd, SecItemCopyMatching) vasitəsilə idarə olunur. Keychain cihaz bağlandıqda avtomatik bağlanır və Secure Enclave istifadə edərək şifrələnir.
Android Keystore tətbiqdən təcrid olunmuş kriptoqrafik açarlar üçün sistem anbarıdır. Android 6.0-dan (API 23) başlayaraq, Keystore təhlükəsizlik çipi olan cihazlarda aparat dəstəyindən (TEE — Trusted Execution Environment) istifadə edir. Keystore-dakı açarlar heç vaxt qorunan ərazini tərk etmir — tətbiq yalnız şifrələmə və imzalama əməliyyatları üçün identifikator alır.
| Parametr | iOS Keychain | Android Keystore |
|---|---|---|
| Saxlanılan məlumat növü | Parollar, tokenlər, açarlar, sertifikatlar | Kriptoqrafik açarlar |
| Aparat dəstəyi | Secure Enclave (A7+ olan bütün iPhone) | TEE (Android 6+, çipdən asılıdır) |
| Şifrələmə | AES-256 aparat | Aparat açarı ilə AES/GCM |
| Biometriya | Giriş üçün Face ID / Touch ID | Giriş üçün BiometricPrompt |
| iCloud / ehtiyat nüsxə | iCloud Keychain vasitəsilə sinxronizasiya | Buludla sinxronizasiya olunmur |
| Performans | Daha yavaş (aparat şifrələməsi) | Daha sürətli (TEE) |
SharedPreferences və NSUserDefaults həssas məlumatların saxlanması üçün nəzərdə tutulmayıb — onlar məlumatları açıq mətndə saxlayır. Məlumatların qorunması üçün EncryptedSharedPreferences (Android) istifadə edin və ya UserDefaults-a (iOS) yazmadan əvvəl məlumatları şifrələyin. IT Sectr-də giriş tokenləri və parollar üçün həmişə Keychain və Keystore istifadə edirik.
OAuth 2.0 parol ötürülmədən istifadəçi resurslarına təhlükəsiz girişi təmin edən nümayəndəli icazə protokoludur. Mobil tətbiqlərdə ən çox PKCE (Proof Key for Code Exchange) ilə Authorization Code Flow istifadə olunur. PKCE icazə kodunun ələ keçirilməsinin qarşısını alır — mobil tətbiqlər üçün məcburi tələb.
OpenID Connect (OIDC) istifadəçi autentifikasiyası üçün OAuth 2.0 üzərində genişlənmədir. OIDC istifadəçi məlumatlarını (ad, e-poçt, id) ehtiva edən JWT formatında ID Token əlavə edir. OAuth 2.0 + OIDC axını daxildir: istifadəçinin giriş səhifəsinə yönləndirilməsi, icazə kodunun alınması, kodun tokenlərə (access + refresh + id) dəyişdirilməsi, API sorğuları üçün giriş tokenindən istifadə.
JWT (JSON Web Token) JSON formatında iddialar (claims) ehtiva edən yığcam, URL-təhlükəsiz token formatıdır. JWT üç hissədən ibarətdir: başlıq (növ və imza alqoritmi), yük (məlumat) və imza. Giriş Tokeni API girişi üçün qısaömürlü tokendir (15-60 dəqiqə). Yeniləmə Tokeni təkrar daxil olmadan yeni giriş tokeni əldə etmək üçün uzunömürlü tokendir (günlər/həftələr).
Sessiya Tokeni serverin sessiyanı verilənlər bazasında və ya Redis-də saxladığı və müştərinin təsadüfi identifikator aldığı ənənəvi yanaşmadır. Mobil inkişafda JWT üstünlük təşkil edir: server tərəfində sessiya saxlanmasını tələb etmir, bütün məlumatları özündə ehtiva edir və yoxlanması asandır. Bununla belə, JWT dərhal ləğv edilə bilməz — bu, qısa giriş tokeni ömrü və yeniləmə tokenlərindən istifadə ilə həll olunan kompromisdir.
iOS-da Face ID və Touch ID, Android-də Barmaq izi autentifikasiyası — istifadəçinin unikal fiziki xüsusiyyətlərindən istifadə edən biometrik autentifikasiya üsullarıdır. iOS-da biometriya LocalAuthentication (LAContext) vasitəsilə, Android-də — BiometricPrompt (Android 9+) və ya FingerprintManager (köhnəlmiş) vasitəsilə işləyir. Biometriya tətbiqin kilidini açmaq, ödənişləri təsdiqləmək və qorunan məlumatlara giriş üçün istifadə olunur.
Vacib nüanslar: biometriya rahat istifadəçi təcrübəsidir, lakin server autentifikasiyasını əvəz etmir. Uğurlu biometrik yoxlamadan sonra tətbiq serverdən giriş tokeni almalıdır. Android-də cihazın Class 3 (Güclü) biometriyadan istifadə etdiyini, yalnız kamera əsaslı üz tanımadan (Class 1) istifadə etmədiyini yoxlayın.
ProGuard Android üçün Java bayt kodunun obfuskasiyası, sıxılması və optimallaşdırılması alətidir, əks mühəndisliyə qarşı kod təhlükəsizliyini artırır. R8 onun varisidir, Android Studio 3.4-dən Gradle-a daxil edilmişdir. R8 dörd tapşırığı yerinə yetirir: sıxma (istifadə olunmayan sinifləri və metodları silir), optimallaşdırma (metodları inline edir, kodu sadələşdirir), obfuskasiya (sinifləri və metodları qısa adlarla adlandırır) və ilkin yoxlama (bayt kodunun yoxlanması).
DexGuard genişləndirilmiş qoruma ilə ProGuard-un kommersiya versiyasıdır: sətir şifrələməsi, resurs obfuskasiyası, repackaging-dən qorunma, APK bütövlük nəzarəti. Əksər layihələr üçün R8 kifayətdir, lakin maliyyə və bank tətbiqləri üçün DexGuard əlavə təhlükəsizlik qatı təmin edir. R8 build.gradle vasitəsilə aktivləşdirilir: minifyEnabled = true və proguardFiles.
Root Detection (Android) və Jailbreak Detection (iOS) cihazda superistifadəçi imtiyazlarının əldə edilib-edilmədiyini yoxlayan mexanizmlərdir. Kompromatlaşdırılmış cihazlarda proses yaddaşını oxumaq, trafiki ələ keçirmək və kodu dəyişdirmək mümkündür. Android-də yoxlama üçün SU ikili faylının mövcudluğu, test imza açarları və qeyri-standart build bayraqları istifadə olunur.
RASP (Runtime Application Self-Protection) tətbiqi icra zamanı qoruyan texnologiyadır. RASP debug, repackaging, kod inyeksiyası cəhdlərini aşkarlayır və təhdidlər aşkarlandıqda tətbiqi dayandırır. RASP həllərinə nümunələr: Dexter, Guardsquare, Promon. RASP iş vaxtı işləyir və anomaliyalara reaksiya verir — icradan əvvəl kodu qoruyan statik obfuskasiyadan fərqli olaraq.
Əks Mühəndislik kompilyasiya edilmiş tətbiqdən mənbə kodunun bərpa edilməsi prosesidir. Alətlər: JADX (APK dekompilyatoru), Ghidra, IDA Pro, Hopper. Əks Mühəndisliyə qarşı qorunma obfuskasiya, sətir şifrələməsi, bütövlük yoxlanması və Root Detection-in birləşməsidir. Tam qorunma mövcud deyil — məqsəd təcavüzkar üçün əks mühəndisliyi kifayət qədər bahalı etməkdir.
Tez-tez Verilən Suallar
OWASP Mobile Top 10 ilə başlayın — bu ən çox yayılmış zəifliklərin yol xəritəsidir. Sonra HTTPS və SSL sertifikatlarını öyrənin, Certificate Pinning konfiqurasiya edin və Keychain / Keystore vasitəsilə təhlükəsiz saxlamaya keçin.
AES (simmetrik) — şifrələmə və deşifrələmə üçün bir açar, sürətli, böyük həcmli məlumatlar üçün uyğundur. RSA (asimmetrik) — bir cüt açar (ictimai və şəxsi), daha yavaş, simmetrik açarın mübadiləsi üçün istifadə olunur.
Yalnız məxfi məlumatları şifrələməlisiniz: parollar, tokenlər, şəxsi istifadəçi məlumatları, ödəniş məlumatları. Şəkillər, mətnlər və interfeys parametrləri şifrələmə tələb etmir — bu ölçüsü artıracaq və tətbiqi yavaşladacaq.
Yeniləmə Tokeni parolu təkrar daxil etmədən yeni Giriş Tokeni əldə etməyə imkan verən uzunömürlü tokendir. Bu təhlükəsizliyi artırır — Giriş Tokeni 15-60 dəqiqə yaşayır və sızsa belə, təcavüzkar ondan uzun müddət istifadə edə bilməz.
Bəli, Android release qurmaları üçün R8 aktivləşdirilməlidir. Bu təkcə Əks Mühəndislikdən qorunma deyil, həm də APK ölçüsünün azaldılması və performans optimallaşdırılmasıdır. R8 olmadan kodunuz bir JADX əmri ilə oxuna bilən formada dekompilyasiya edilə bilər.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.