Kategori OWASP: MASVS-NETWORK: Komunikasi Jaringan
Ringkasan
Mengizinkan komunikasi jaringan cleartext di aplikasi Android berarti siapa saja yang memantau traffic jaringan dapat melihat dan memanipulasi data yang dikirim. Hal ini dapat menjadi kerentanan jika data yang dikirim mencakup informasi sensitif seperti sandi, nomor kartu kredit, atau informasi pribadi lainnya.
Terlepas dari apakah Anda mengirim informasi sensitif atau tidak, penggunaan cleartext masih dapat menjadi kerentanan karena traffic cleartext juga dapat dimanipulasi melalui serangan jaringan seperti ARP atau DNS poisoning, sehingga berpotensi memungkinkan penyerang memengaruhi perilaku aplikasi.
Dampak
Saat aplikasi Android mengirim atau menerima data dalam cleartext melalui jaringan, siapa saja yang memantau jaringan dapat menangkap dan membaca data tersebut. Jika data ini berisi informasi sensitif seperti sandi, nomor kartu kredit, atau pesan pribadi, hal ini dapat menyebabkan pencurian identitas, penipuan keuangan, dan masalah serius lainnya.
Misalnya, aplikasi yang mengirimkan sandi dalam cleartext dapat mengekspos kredensial ini ke pelaku kejahatan yang menyadap traffic. Data ini kemudian dapat digunakan untuk mendapatkan akses tidak sah ke akun pengguna.
Risiko: Saluran komunikasi tidak terenkripsi
Mengirim data melalui saluran komunikasi yang tidak dienkripsi akan mengekspos data yang dibagikan antara perangkat dan endpoint aplikasi. Data tersebut dapat dicegat dan berpotensi diubah oleh penyerang.
Mitigasi
Data harus dikirim melalui saluran komunikasi terenkripsi. Protokol aman harus digunakan sebagai alternatif untuk protokol yang tidak menawarkan kemampuan enkripsi.
Risiko Spesifik
Bagian ini mengumpulkan risiko yang memerlukan strategi mitigasi non-standar atau dimitigasi di tingkat SDK tertentu dan dilakukan untuk menyelesaikan.
Risiko: HTTP
Panduan dalam bagian ini hanya berlaku untuk aplikasi yang menargetkan Android 8.1 (level API 27) atau yang lebih lama. Mulai dari Android 9 (API level 28), Klien HTTP seperti URLConnection, Cronet, dan OkHttp menerapkan penggunaan HTTPS, sehingga dukungan cleartext dinonaktifkan secara default. Namun, perlu diperhatikan bahwa library HTTP Client lainnya seperti Ktor kemungkinan tidak akan menerapkan pembatasan ini pada cleartext dan harus digunakan dengan hati-hati.
Mitigasi
Gunakan fitur NetworkSecurityConfig.xml untuk memilih tidak menggunakan traffic cleartext dan menerapkan HTTPS untuk aplikasi Anda, dengan pengecualian hanya untuk domain tertentu yang diperlukan (biasanya untuk tujuan proses debug):
Xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false">
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">debug.domain.com</domain>
</domain-config>
</network-security-config>
Opsi ini akan membantu mencegah regresi tidak disengaja dalam aplikasi karena perubahan dalam URL yang disediakan oleh sumber eksternal seperti server backend.
Risiko: FTP
Menggunakan protokol FTP untuk bertukar file antarperangkat menimbulkan beberapa risiko, yang paling signifikan adalah kurangnya enkripsi melalui saluran komunikasi. Sebagai gantinya, gunakan alternatif yang lebih aman seperti SFTP atau HTTPS.
Mitigasi
Saat menerapkan mekanisme pertukaran data melalui internet di aplikasi, Anda harus menggunakan protokol aman seperti HTTPS. Android menyediakan serangkaian API yang memungkinkan developer membuat logika klien-server. Hal ini dapat diamankan menggunakan Transport Layer Security (TLS), yang memastikan pertukaran data antara dua endpoint dienkripsi, sehingga mencegah pengguna berbahaya menyadap komunikasi dan mengambil data sensitif.
Umumnya, arsitektur klien-server mengandalkan API milik developer. Jika aplikasi Anda bergantung pada kumpulan endpoint API, pastikan keamanan menyeluruh dengan mengikuti praktik terbaik keamanan berikut untuk melindungi komunikasi HTTPS:
- Autentikasi – Pengguna harus mengautentikasi diri mereka sendiri menggunakan mekanisme yang aman seperti OAuth 2.0. Autentikasi dasar umumnya tidak direkomendasikan karena tidak menyediakan mekanisme pengelolaan sesi dan, jika kredensial disimpan dengan tidak benar, dapat didekode dari Base64.
- Otorisasi – Pengguna harus dibatasi agar hanya mengakses resource yang dimaksudkan dengan mengikuti prinsip hak istimewa terendah. Hal ini dapat diimplementasikan dengan mengadopsi solusi kontrol akses yang cermat untuk aset aplikasi.
- Pastikan cipher suite yang cermat dan terbaru digunakan, dengan mengikuti praktik terbaik keamanan. Misalnya, pertimbangkan untuk mendukung protokol TLSv1.3 dengan kompatibilitas mundur, jika diperlukan, untuk komunikasi HTTPS.
Risiko: Protokol Komunikasi Kustom
Menerapkan protokol komunikasi kustom, atau mencoba menerapkan protokol yang sudah dikenal secara manual, dapat berbahaya.
Meskipun protokol kustom memungkinkan developer menyesuaikan solusi unik yang beradaptasi dengan kebutuhan yang dimaksud, error apa pun selama proses pengembangan berpotensi menyebabkan kerentanan keamanan. Misalnya, error dalam mengembangkan mekanisme penanganan sesi berpotensi menyebabkan penyerang dapat menguping komunikasi, dan mengambil informasi sensitif dengan cepat.
Di sisi lain, menerapkan protokol yang dikenal seperti HTTPS tanpa menggunakan OS atau library pihak ketiga yang dikelola dengan baik, akan meningkatkan kemungkinan terjadinya error coding yang dapat mempersulit, atau bahkan tidak mungkin, untuk mengupdate protokol yang Anda terapkan saat diperlukan. Selain itu, hal ini dapat menyebabkan jenis kerentanan keamanan yang sama seperti menggunakan protokol kustom.
Mitigasi
Menggunakan library yang dikelola untuk menerapkan protokol komunikasi yang terkenal
Untuk menerapkan protokol terkenal seperti HTTPS dalam aplikasi Anda, library OS atau library pihak ketiga yang dikelola harus digunakan.
Hal ini memberi developer keamanan untuk memilih solusi yang telah diuji secara menyeluruh, ditingkatkan dari waktu ke waktu, dan terus menerima update keamanan untuk memperbaiki kerentanan umum.
Selain itu, dengan memilih protokol yang sudah dikenal, developer akan mendapatkan manfaat dari kompatibilitas yang luas di berbagai sistem, platform, dan IDE, sehingga mengurangi kemungkinan kesalahan manusia selama proses pengembangan.
Menggunakan SFTP
Protokol ini mengenkripsi data dalam pengiriman. Langkah-langkah tambahan harus dipertimbangkan saat menggunakan jenis protokol pertukaran file ini:
- SFTP mendukung berbagai jenis autentikasi. Sebagai ganti autentikasi berbasis sandi, metode autentikasi kunci publik harus digunakan. Kunci tersebut harus dibuat dan disimpan dengan aman, Android Keystore direkomendasikan untuk tujuan ini.
- Pastikan cipher yang didukung mengikuti praktik terbaik keamanan.
Referensi
- Ktor
- Menjalankan operasi jaringan menggunakan Cronet
- OkHttp
- Memilih Tidak Menggunakan Traffic Cleartext untuk Konfigurasi Keamanan Jaringan
- Menghubungkan ke jaringan
- Keamanan dengan protokol jaringan
- OAuth 2.0 untuk Aplikasi Seluler & Desktop
- RFC HTTP Over TLS
- Skema Autentikasi HTTP
- Rekomendasi keamanan web Mozilla
- Generator konfigurasi yang direkomendasikan SSL Mozilla
- Rekomendasi TLS Sisi Server Mozilla
- Halaman manual utama OpenSSH
- RFC SSH, yang menjelaskan konfigurasi dan skema yang dapat digunakan untuk protokol ini
- Rekomendasi keamanan OpenSSH Mozilla
- Sistem Android Keystore