Komunikasi cleartext

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 yang tidak dienkripsi

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 Khusus

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 bahwa 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 dapat mengakses resource yang diinginkan 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 diinginkan, error apa pun selama proses pengembangan berpotensi menghasilkan 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 terkenal seperti HTTPS tanpa menggunakan OS atau library pihak ketiga yang dikelola dengan baik, akan meningkatkan kemungkinan munculnya error coding yang dapat mempersulit, jika tidak mustahil, untuk memperbarui 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 error yang disebabkan manusia selama proses pengembangan.

Menggunakan SFTP

Protokol ini mengenkripsi data saat 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