Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Security
Code

Mengamankan Komunikasi di Android

by
Difficulty:BeginnerLength:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Hasannudin Amin (you can also view the original English article)

Dengan semua pelanggaran data baru-baru ini, privasi telah menjadi topik yang penting. Hampir setiap aplikasi berkomunikasi melalui jaringan, jadi penting untuk mempertimbangkan keamanan informasi pengguna. Dalam posting ini, Anda akan mempelajari praktik terbaik saat ini untuk mengamankan komunikasi aplikasi Android Anda.

Gunakan HTTPS

Ketika Anda mengembangkan aplikasi Anda, praktik terbaik untuk membatasi permintaan jaringan Anda dengan yang penting. Untuk yang penting, pastikan bahwa mereka dibuat melalui HTTPS bukan HTTP. HTTPS adalah protokol yang mengenkripsi lalu lintas sehingga tidak dapat dengan mudah disadap oleh penyadap. Hal yang baik tentang Android adalah bermigrasi sama mudahnya dengan mengubah URL dari http ke https.

Bahkan, Android N dan versi yang lebih tinggi dapat menerapkan HTTPS menggunakan Konfigurasi Keamanan Jaringan Android.

Di Android Studio, pilih direktori app/res/xml untuk proyek Anda. Buat direktori xml jika belum ada. Pilih dan klik File > New File. Sebut saja network_security_config.xml. Format untuk file adalah sebagai berikut:

Untuk memberi tahu Android untuk menggunakan file ini, tambahkan nama file ke tag aplikasi di file AndroidManifest.xml:

Perbarui Penyedia Crypto

Protokol HTTPS telah dieksploitasi beberapa kali selama bertahun-tahun. Ketika peneliti keamanan melaporkan kerentanan, cacat sering ditambal. Menerapkan tambalan memastikan bahwa koneksi jaringan aplikasi Anda menggunakan protokol standar industri terbaru. Versi terbaru dari protokol mengandung lebih sedikit kelemahan daripada yang sebelumnya.

Untuk memperbarui crypto provider, Anda harus menyertakan Layanan Google Play. Di file modul build.gradle Anda, tambahkan baris berikut ke bagian dependensi:

API layanan SafetyNet memiliki lebih banyak fitur, termasuk API Safe Browsing yang memeriksa URL untuk melihat apakah mereka telah ditandai sebagai ancaman yang dikenal, dan API reCAPTCHA untuk melindungi aplikasi Anda dari spammer dan lalu lintas jahat lainnya.

Setelah Anda menyelaraskan Gradle, Anda bisa memanggil metode installIfNeededAsync ProviderInstaller:

Metode onProviderInstalled() dipanggil ketika penyedia berhasil diperbarui, atau sudah diperbarui. Jika tidak, onProviderInstallFailed(int errorCode, Intent recoveryIntent) dipanggil.

Sertifikat dan Penandaan Kunci Publik

Ketika Anda membuat koneksi HTTPS ke server, sertifikat digital disajikan oleh server dan divalidasi oleh Android untuk memastikan koneksi aman. Sertifikat dapat ditandatangani dengan sertifikat dari otoritas sertifikat menengah. Sertifikat ini digunakan oleh otoritas perantara pada gilirannya dapat ditandatangani oleh otoritas perantara lain, dan seterusnya, yang dapat dipercaya selama sertifikat terakhir ditandatangani oleh otoritas sertifikat root yang sudah dipercaya oleh OS Android.

Jika ada sertifikat dalam rantai kepercayaan tidak valid, maka koneksi tidak aman. Meskipun ini adalah sistem yang bagus, itu tidak mudah. Ada kemungkinan bagi penyerang untuk memerintahkan OS Android untuk menerima sertifikat khusus. Proxy intersepsi dapat memiliki sertifikat yang dipercaya, dan jika perangkat dikontrol oleh perusahaan, perusahaan mungkin telah mengonfigurasi perangkat untuk menerima sertifikatnya sendiri. Skenario ini memungkinkan serangan "man in the middle", memungkinkan lalu lintas HTTPS didekripsi dan dibaca.

Penandaan sertifikat datang untuk menyelamatkan dengan memeriksa sertifikat server yang disajikan terhadap salinan sertifikat yang diharapkan. Ini mencegah koneksi dibuat ketika sertifikat berbeda dari yang diharapkan.

Untuk menerapkan pin pada Android N dan lebih tinggi, Anda perlu menambahkan hash (disebut pin) dari sertifikat ke file network_security_config.xml. Berikut ini contoh penerapannya:

Untuk menemukan pin untuk situs tertentu, Anda dapat pergi ke SSL Labs, masuk ke situs, dan klik Submit. Atau, jika Anda mengembangkan aplikasi untuk perusahaan, Anda dapat meminta perusahaan untuk itu.

Catatan: Jika Anda perlu mendukung perangkat yang menjalankan versi OS lebih lama dari Android N, Anda dapat menggunakan pustaka TrustKit. Ini menggunakan file Konfigurasi Keamanan Jaringan dengan cara yang persis sama.

Sanitasi dan Validasi

Dengan semua perlindungan sejauh ini, koneksi Anda harus cukup aman. Meski begitu, jangan lupa tentang validasi pemrograman reguler. Data yang diterima secara membabi buta dari jaringan tidak aman. Praktik pemrograman yang baik adalah "desain berdasarkan kontrak", di mana input dan output dari metode Anda memenuhi kontrak yang mendefinisikan harapan antarmuka khusus.

Misalnya, jika server Anda mengharapkan string 48 karakter atau kurang, pastikan bahwa antarmuka hanya akan kembali hingga dan termasuk 48 karakter.

Jika Anda hanya mengharapkan angka dari server, input Anda harus memeriksa ini. Meskipun ini membantu untuk mencegah kesalahan yang tidak bersalah, itu juga mengurangi kemungkinan injeksi dan serangan korupsi memori. Ini terutama berlaku ketika data tersebut diteruskan ke NDK atau JNI — kode asli C dan C ++.

Hal yang sama berlaku untuk mengirim data ke server. Jangan mengirimkan data secara membabi buta, terutama jika itu dibuat oleh pengguna. Sebagai contoh, itu praktik yang baik untuk membatasi panjang input pengguna, terutama jika itu akan dijalankan oleh server SQL atau teknologi apa pun yang akan menjalankan kode.

Saat mengamankan server terhadap serangan berada di luar cakupan artikel ini, sebagai pengembang seluler, Anda dapat melakukan bagian Anda dengan menghapus karakter untuk bahasa yang digunakan server. Dengan begitu, input tidak rentan terhadap serangan injeksi. Beberapa contoh adalah kutipan pengupasan, titik koma, dan garis miring ketika tidak penting untuk input pengguna:

Jika Anda tahu persis format yang diharapkan, Anda harus memeriksa ini. Contoh yang bagus adalah validasi email:

File dapat diperiksa juga. Jika Anda mengirim foto ke server, Anda dapat memeriksanya sebagai foto yang valid. Dua byte pertama dan dua byte terakhir selalu FF D8 dan FF D9 untuk format JPEG.

Hati-hati saat menampilkan peringatan kesalahan yang secara langsung menunjukkan pesan dari server. Pesan kesalahan dapat mengungkapkan informasi pribadi atau informasi terkait keamanan. Solusinya adalah meminta server mengirim kode kesalahan yang dicari klien untuk menunjukkan pesan yang telah ditentukan.

Komunikasi Dengan Aplikasi Lain

Saat Anda melindungi komunikasi ke dan dari perangkat, penting untuk melindungi IPC juga. Ada kasus di mana pengembang telah meninggalkan file bersama atau telah menerapkan soket untuk bertukar informasi sensitif. Ini tidak aman. Lebih baik menggunakan Intents. Anda dapat mengirim data menggunakan Intent dengan memberikan nama paket seperti ini:

Untuk menyiarkan data ke lebih dari satu aplikasi, Anda harus memastikan bahwa hanya aplikasi yang ditandatangani dengan kunci penandatanganan Anda yang akan mendapatkan datanya. Jika tidak, informasi yang Anda kirim dapat dibaca oleh aplikasi apa pun yang mendaftar untuk menerima siaran tersebut. Demikian juga, aplikasi berbahaya dapat mengirim siaran ke aplikasi Anda jika Anda telah mendaftar untuk menerima siaran tersebut. Anda dapat menggunakan izin ketika mengirim dan menerima siaran di mana signature digunakan sebagai protectionLevel. Anda dapat menentukan izin khusus dalam file manifes seperti ini:

Maka Anda dapat memberikan izin seperti ini:

Kedua aplikasi harus memiliki izin dalam file manifes agar berfungsi. Untuk mengirim siaran:

Alternatifnya, Anda dapat menggunakan setPackage(String) saat mengirim siaran untuk membatasinya ke sekumpulan aplikasi yang cocok dengan paket yang ditentukan. Pengaturan android:exported ke false dalam file manifest akan mengecualikan siaran yang diterima dari luar aplikasi Anda.

Enkripsi End-to-End

Penting untuk memahami batasan HTTPS untuk melindungi komunikasi jaringan. Di sebagian besar implementasi HTTPS, enkripsi diakhiri di server. Sebagai contoh, koneksi Anda ke server perusahaan mungkin lebih dari HTTPS, tetapi begitu lalu lintas itu menyerang server, itu tidak terenkripsi. Ini kemudian dapat diteruskan ke server lain, baik dengan membentuk sesi HTTPS lain atau dengan mengirimnya tidak terenkripsi. Korporasi dapat melihat informasi yang telah dikirim, dan dalam banyak kasus itu adalah persyaratan untuk operasi bisnis. Namun, itu juga berarti bahwa perusahaan dapat menyampaikan informasi kepada pihak ketiga yang tidak terenkripsi.

Ada tren baru-baru ini yang disebut "enkripsi end-to-end" di mana hanya dua perangkat yang berkomunikasi akhir yang dapat membaca lalu lintas. Contoh yang baik adalah aplikasi obrolan terenkripsi di mana dua perangkat seluler berkomunikasi satu sama lain melalui server; hanya pengirim dan penerima yang dapat membaca pesan satu sama lain.

Sebuah analogi untuk membantu Anda memahami enkripsi end-to-end adalah membayangkan bahwa Anda ingin seseorang mengirimi Anda pesan yang hanya dapat Anda baca. Untuk melakukan ini, Anda memberi mereka sebuah kotak dengan gembok terbuka di atasnya (kunci publik) saat Anda menyimpan kunci gembok (kunci pribadi). Pengguna menulis pesan, memasukkannya ke dalam kotak, mengunci gembok, dan mengirimkannya kembali kepada Anda. Hanya Anda yang dapat membaca pesan karena Anda satu-satunya dengan kunci untuk membuka kunci gembok.

Dengan enkripsi end-to-end, kedua pengguna saling mengirim kunci mereka. Server hanya menyediakan layanan untuk komunikasi, tetapi tidak dapat membaca konten komunikasi. Meskipun rincian penerapan berada di luar cakupan artikel ini, ini adalah teknologi yang sangat kuat. Jika Anda ingin mempelajari lebih lanjut tentang pendekatan ini, tempat yang bagus untuk memulai adalah repo GitHub untuk proyek Signal sumber terbuka.

Kesimpulan

Dengan semua undang-undang privasi baru seperti GDPR, keamanan menjadi lebih penting. Ini sering merupakan aspek pengabaian pengembangan aplikasi seluler yang terabaikan.

Dalam tutorial ini, Anda telah membahas praktik terbaik keamanan, termasuk menggunakan HTTPS, penyematan sertifikat, sanitasi data, dan enkripsi end-to-end. Praktik terbaik ini harus berfungsi sebagai landasan keamanan saat mengembangkan aplikasi seluler Anda. Jika Anda memiliki pertanyaan, jangan ragu untuk meninggalkannya di bawah ini, dan ketika Anda berada di sini, periksa beberapa tutorial saya yang lain tentang keamanan aplikasi Android!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.