Keamanan seluler adalah serangkaian tindakan untuk melindungi aplikasi, data pengguna, dan infrastruktur server dari serangan dan kebocoran. Menurut OWASP Mobile Top 10 (2024), penyimpanan data yang tidak aman tetap menjadi kerentanan paling umum dalam aplikasi seluler. Dalam artikel ini kita akan membahas ancaman utama, metode enkripsi, penyimpanan aman, otentikasi, dan perlindungan kode — semua yang perlu diketahui oleh pengembang pemula.
Poin-Poin Penting
OWASP (Open Web Application Security Project) adalah organisasi nirlaba yang menerbitkan peringkat kerentanan keamanan seluler paling berbahaya. OWASP Mobile Top 10 adalah daftar yang membantu pengembang memahami apa yang harus difokuskan terlebih dahulu. Dalam versi 2024, masalah terkait penyimpanan tidak aman, otentikasi lemah, dan komunikasi jaringan tidak aman memimpin peringkat.
M1: Penyimpanan Data Tidak Aman — masalah paling umum: kata sandi, token, dan data pribadi tetap ada di SharedPreferences, NSUserDefaults, atau file lokal tanpa enkripsi. M2: Otentikasi Lemah — kurangnya verifikasi sisi server, kata sandi lemah. M3: Komunikasi Jaringan Tidak Aman — kurangnya HTTPS atau verifikasi sertifikat SSL yang salah. M4 dan M5 terkait dengan kriptografi dan penggunaan API yang salah.
M6: Otorisasi Tidak Aman — pengguna dapat mengakses data pengguna lain dengan mengganti ID dalam permintaan. M7: Injeksi Kode (SQL Injection, XSS). M8: Manipulasi Aplikasi — repackaging, penggantian kode. M9 dan M10 — kebocoran data melalui pustaka pihak ketiga dan rekayasa balik. Untuk masing-masing ancaman ini ada penanggulangan yang terbukti, dan di IT Sectr kami menerapkannya di semua proyek sejak 2017.
Serangan MITM terjadi ketika penyerang menyadap lalu lintas antara aplikasi dan server. Ini dimungkinkan melalui pemalsuan DNS, ARP spoofing, atau koneksi ke jaringan Wi-Fi yang tidak aman. Sertifikat SSL/TLS dan Certificate Pinning digunakan untuk perlindungan.
Certificate Pinning adalah mekanisme di mana aplikasi memverifikasi bahwa sertifikat server cocok dengan yang telah disimpan sebelumnya dalam kode aplikasi. Bahkan jika penyerang mengganti sertifikat melalui proxy (misalnya Burp Suite), aplikasi akan menolak koneksi. Pinning terdiri dari dua jenis: Public Key Pinning dan Certificate Hash Pinning.
AES (Advanced Encryption Standard) adalah algoritma enkripsi simetris, fondasi keamanan data di perangkat. AES menggunakan kunci yang sama untuk mengenkripsi dan mendekripsi data. AES mendukung kunci sepanjang 128, 192, atau 256 bit. Dalam pengembangan seluler, AES-256 digunakan untuk mengenkripsi data di perangkat: file, cache, catatan di basis data lokal.
Mode AES: GCM (direkomendasikan) — menyediakan otentikasi data, CBC — mode dasar dengan rantai blok, ECB — tidak aman, jangan gunakan. Untuk iOS, AES tersedia melalui CommonCrypto (CCOptions), untuk Android — melalui Cipher di Java Cryptography Architecture (JCA). Penting: kunci enkripsi tidak boleh disimpan dalam kode aplikasi — gunakan Keychain/Keystore.
Enkripsi Asimetris: RSA — menggunakan pasangan kunci (publik dan privat). RSA digunakan untuk mengenkripsi data dalam jumlah kecil — biasanya untuk bertukar kunci simetris antara klien dan server. Panjang kunci RSA minimum adalah 2048 bit (4096 direkomendasikan). Di iOS, RSA tersedia melalui Security Framework (SecKeyCreateRandomKey), di Android — melalui KeyPairGenerator di Android Keystore.
Hashing (SHA-256, SHA-3) adalah transformasi data yang tidak dapat dibalikkan menjadi string dengan panjang tetap. Hash digunakan untuk verifikasi integritas data dan penyimpanan kata sandi. Untuk kata sandi, pastikan menggunakan bcrypt, scrypt, atau Argon2 — SHA-256 biasa rentan terhadap serangan tabel pelangi. SSL/TLS adalah protokol untuk mengenkripsi lalu lintas jaringan antara klien dan server. Standar modern adalah TLS 1.3, yang menyediakan Perfect Forward Secrecy (PFS).
TLS 1.3 lebih cepat dari pendahulunya: jabat tangan (handshake) hanya membutuhkan satu putaran, bukan dua. Di Android, versi TLS minimum dikonfigurasi melalui SSLSocket, di iOS — melalui ATS (App Transport Security), yang secara default memerlukan TLS 1.2 atau lebih tinggi. ATS hanya dapat dinonaktifkan untuk domain tertentu dengan alasan yang jelas.
Keychain (Gantungan Kunci) adalah penyimpanan aman di iOS / macOS untuk kata sandi, kunci enkripsi, sertifikat, dan token. Data di Keychain dienkripsi dengan kunci perangkat keras yang unik untuk setiap perangkat. Akses ke Keychain dikendalikan melalui Security Framework (SecItemAdd, SecItemCopyMatching). Keychain secara otomatis terkunci saat perangkat dikunci dan dienkripsi menggunakan Secure Enclave.
Android Keystore adalah penyimpanan sistem untuk kunci kriptografi, terisolasi dari aplikasi. Mulai Android 6.0 (API 23), Keystore menggunakan dukungan perangkat keras (TEE — Trusted Execution Environment) pada perangkat dengan chip keamanan. Kunci di Keystore tidak pernah meninggalkan area aman — aplikasi hanya menerima handle untuk operasi enkripsi dan penandatanganan.
| Parameter | iOS Keychain | Android Keystore |
|---|---|---|
| Jenis data yang disimpan | Kata sandi, token, kunci, sertifikat | Kunci kriptografi |
| Dukungan perangkat keras | Secure Enclave (semua iPhone dengan A7+) | TEE (Android 6+, tergantung chip) |
| Enkripsi | AES-256 perangkat keras | AES/GCM dengan kunci perangkat keras |
| Biometrik | Face ID / Touch ID untuk akses | BiometricPrompt untuk akses |
| iCloud / cadangan | Sinkronisasi melalui iCloud Keychain | Tidak sinkron dengan cloud |
| Kinerja | Lebih lambat (enkripsi perangkat keras) | Lebih cepat (TEE) |
SharedPreferences dan NSUserDefaults tidak dirancang untuk menyimpan data sensitif — mereka menyimpan informasi dalam teks biasa. Untuk perlindungan data, gunakan EncryptedSharedPreferences (Android) atau enkripsi data sebelum menyimpannya di UserDefaults (iOS). Di IT Sectr, kami selalu menggunakan Keychain dan Keystore untuk token akses dan kata sandi.
OAuth 2.0 adalah protokol otorisasi yang didelegasikan yang menyediakan akses aman ke sumber daya pengguna tanpa mengirimkan kata sandi. Dalam aplikasi seluler, yang paling sering digunakan adalah Authorization Code Flow dengan PKCE (Proof Key for Code Exchange). PKCE mencegah penyadapan kode otorisasi — persyaratan wajib untuk aplikasi seluler.
OpenID Connect (OIDC) adalah ekstensi di atas OAuth 2.0 untuk otentikasi pengguna. OIDC menambahkan ID Token dalam format JWT yang berisi informasi pengguna (nama, email, id). Alur OAuth 2.0 + OIDC meliputi: mengarahkan pengguna ke halaman login, mendapatkan kode otorisasi, menukar kode dengan token (access + refresh + id), menggunakan token akses untuk permintaan API.
JWT (JSON Web Token) adalah format token yang ringkas dan aman untuk URL yang berisi klaim dalam format JSON. JWT terdiri dari tiga bagian: header (tipe dan algoritma tanda tangan), payload (data), dan tanda tangan. Token Akses adalah token berumur pendek (15–60 menit) untuk akses API. Token Refresh adalah token berumur panjang (hari/minggu) untuk mendapatkan token akses baru tanpa login ulang.
Token Sesi adalah pendekatan tradisional di mana server menyimpan sesi di basis data atau Redis, dan klien menerima pengidentifikasi acak. Dalam pengembangan seluler, JWT lebih disukai: tidak memerlukan penyimpanan sesi sisi server, berisi semua informasi di dalamnya, dan mudah diverifikasi. Namun, JWT tidak dapat dicabut secara instan — ini adalah kompromi yang diselesaikan dengan masa hidup token akses yang pendek dan penggunaan token refresh.
Face ID dan Touch ID di iOS, Otentikasi Sidik Jari di Android — metode otentikasi biometrik yang menggunakan karakteristik fisik unik pengguna. Di iOS, biometrik bekerja melalui LocalAuthentication (LAContext), di Android — melalui BiometricPrompt (Android 9+) atau FingerprintManager (usang). Biometrik digunakan untuk membuka kunci aplikasi, mengonfirmasi pembayaran, dan mengakses data yang dilindungi.
Nuansa penting: biometrik adalah UX yang nyaman, tetapi bukan pengganti otentikasi server. Setelah verifikasi biometrik berhasil, aplikasi harus mendapatkan token akses dari server. Di Android, pastikan untuk memeriksa bahwa perangkat menggunakan biometrik Kelas 3 (Kuat), bukan hanya pengenalan wajah berbasis kamera (Kelas 1).
ProGuard adalah alat obfuskasi, kompresi, dan optimasi bytecode Java untuk Android, yang meningkatkan keamanan kode terhadap rekayasa balik. R8 adalah penerusnya, terintegrasi dalam Gradle sejak Android Studio 3.4. R8 melakukan empat tugas: kompresi (menghapus kelas dan metode yang tidak digunakan), optimasi (inline metode, menyederhanakan kode), obfuskasi (mengganti nama kelas dan metode menjadi nama pendek), dan pra-verifikasi (pemeriksaan bytecode).
DexGuard adalah versi komersial ProGuard dengan perlindungan yang ditingkatkan: enkripsi string, obfuskasi sumber daya, perlindungan terhadap repackaging, kontrol integritas APK. Untuk sebagian besar proyek, R8 sudah cukup, tetapi untuk aplikasi keuangan dan perbankan, DexGuard memberikan lapisan keamanan tambahan. R8 diaktifkan melalui build.gradle: minifyEnabled = true dan proguardFiles.
Root Detection (Android) dan Jailbreak Detection (iOS) adalah mekanisme yang memeriksa apakah hak istimewa superuser telah diperoleh di perangkat. Pada perangkat yang disusupi, dimungkinkan untuk membaca memori proses, menyadap lalu lintas, dan mengganti kode. Untuk pemeriksaan di Android, digunakan keberadaan file biner SU, kunci tanda tangan uji, dan flag build yang tidak standar.
RASP (Runtime Application Self-Protection) adalah teknologi yang melindungi aplikasi selama eksekusi. RASP mendeteksi upaya debugging, repackaging, injeksi kode, dan menghentikan aplikasi saat ancaman terdeteksi. Contoh solusi RASP: Dexter, Guardsquare, Promon. RASP bekerja saat runtime dan bereaksi terhadap anomali — tidak seperti obfuskasi statis, yang melindungi kode sebelum eksekusi.
Rekayasa Balik adalah proses pemulihan kode sumber dari aplikasi yang telah dikompilasi. Alat: JADX (dekompiler APK), Ghidra, IDA Pro, Hopper. Perlindungan terhadap Rekayasa Balik adalah kombinasi obfuskasi, enkripsi string, pemeriksaan integritas, dan Root Detection. Perlindungan lengkap tidak ada — tujuannya adalah membuat rekayasa balik cukup mahal bagi penyerang.
Pertanyaan yang Sering Diajukan
Mulailah dengan OWASP Mobile Top 10 — ini adalah peta jalan kerentanan yang paling umum. Kemudian pelajari HTTPS dan sertifikat SSL, konfigurasikan Certificate Pinning, dan lanjutkan ke penyimpanan aman melalui Keychain / Keystore.
AES (simetris) — satu kunci untuk enkripsi dan dekripsi, cepat, cocok untuk volume data besar. RSA (asimetris) — pasangan kunci (publik dan privat), lebih lambat, digunakan untuk bertukar kunci simetris.
Anda harus mengenkripsi hanya data rahasia: kata sandi, token, data pribadi pengguna, informasi pembayaran. Gambar, teks, dan pengaturan antarmuka tidak memerlukan enkripsi — ini akan meningkatkan ukuran dan memperlambat aplikasi.
Token Refresh adalah token berumur panjang yang memungkinkan mendapatkan Token Akses baru tanpa memasukkan kata sandi lagi. Ini meningkatkan keamanan — Token Akses hidup selama 15–60 menit, dan bahkan jika bocor, penyerang tidak dapat menggunakannya lama.
Ya, R8 harus diaktifkan untuk build rilis Android. Ini tidak hanya perlindungan terhadap Rekayasa Balik, tetapi juga pengurangan ukuran APK dan optimasi kinerja. Tanpa R8, kode Anda dapat didekompilasi menjadi bentuk yang dapat dibaca dengan satu perintah JADX.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.