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 poisoning ARP atau DNS, yang 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 terenkripsi

Mengirimkan data melalui saluran komunikasi yang tidak terenkripsi 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 versi yang lebih lama. Mulai Android 9 (level API 28), Klien HTTP seperti URL Connection, Cronet, dan OkHttp menerapkan penggunaan HTTPS, sehingga dukungan cleartext dinonaktifkan secara default. Namun, perlu diketahui bahwa library Klien HTTP lainnya seperti Ktor kemungkinan tidak akan menerapkan batasan 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

Penggunaan protokol FTP untuk bertukar file antarperangkat menimbulkan beberapa risiko, yang paling signifikan adalah kurangnya enkripsi melalui saluran komunikasi. Sebagai gantinya, alternatif yang lebih aman seperti SFTP atau HTTPS harus digunakan.

Mitigasi

Saat menerapkan mekanisme pertukaran data melalui internet di aplikasi Anda, Anda harus menggunakan protokol yang 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 serangkaian endpoint API, pastikan keamanan mendalam dengan mengikuti praktik terbaik keamanan ini untuk melindungi komunikasi HTTPS:

  • Autentikasi – Pengguna harus mengautentikasi diri mereka menggunakan mekanisme yang aman seperti OAuth 2.0. Autentikasi dasar umumnya tidak disarankan, karena tidak menyediakan mekanisme pengelolaan sesi dan, jika kredensial disimpan dengan tidak benar, dapat didekode dari Base64.
  • Otorisasi – Pengguna harus dibatasi untuk mengakses hanya resource yang dimaksud sesuai dengan prinsip hak istimewa terendah. Hal ini dapat diterapkan dengan mengadopsi solusi kontrol akses yang cermat untuk aset aplikasi.
  • Pastikan rangkaian sandi 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 dikenal secara manual, dapat berbahaya.

Meskipun protokol kustom memungkinkan developer menyesuaikan solusi unik yang beradaptasi dengan kebutuhan yang dimaksud, setiap error selama proses pengembangan berpotensi menyebabkan kerentanan keamanan. Misalnya, error dalam mengembangkan mekanisme penanganan sesi berpotensi menyebabkan penyerang dapat menyadap komunikasi, dan mengambil informasi sensitif dengan cepat.

Di sisi lain, penerapan 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, jika tidak mustahil, untuk mengupdate protokol yang Anda terapkan saat diperlukan. Selain itu, hal ini dapat menimbulkan jenis kerentanan keamanan yang sama seperti penggunaan protokol kustom.

Mitigasi

Menggunakan library yang dikelola untuk menerapkan protokol komunikasi yang dikenal

Untuk menerapkan protokol yang dikenal seperti HTTPS di 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 dikenal, developer mendapatkan manfaat dari kompatibilitas luas di berbagai sistem, platform, dan IDE, sehingga mengurangi kemungkinan terjadinya kesalahan manusia selama proses pengembangan.

Menggunakan SFTP

Protokol ini mengenkripsi data dalam pengiriman. Tindakan tambahan harus dipertimbangkan saat menggunakan jenis protokol pertukaran file ini:

  • SFTP mendukung berbagai jenis autentikasi. Metode autentikasi kunci publik harus digunakan, bukan autentikasi berbasis sandi. Kunci tersebut harus dibuat dan disimpan dengan aman, Android Keystore direkomendasikan untuk tujuan ini.
  • Pastikan sandi yang didukung mengikuti praktik terbaik keamanan.

Resource