Kategori OWASP: MASVS-CODE: Kualitas Kode
Ringkasan
Aplikasi Android dapat memanfaatkan kode native yang ditulis dalam bahasa seperti C dan C++ untuk fungsi tertentu. Namun, jika menggunakan Java Native Interface (JNI) untuk berinteraksi dengan kode native ini, aplikasi berpotensi membuka kerentanan seperti buffer overflow dan masalah lain yang mungkin ada dalam implementasi kode native.
Dampak
Meskipun memiliki dampak yang sangat positif seperti obfuscation dan pengoptimalan performa, menggunakan kode native dalam aplikasi Android dapat berdampak negatif pada keamanan. Bahasa kode native seperti C/C++ tidak memiliki fitur keamanan memori Java/Kotlin, sehingga rentan terhadap kerentanan seperti buffer overflow, error use-after-free, dan masalah kerusakan memori lainnya – yang menyebabkan error atau eksekusi kode arbitrer. Selain itu, jika ada kerentanan dalam komponen kode native, kerentanan tersebut berpotensi membahayakan seluruh aplikasi, meskipun bagian lainnya ditulis dengan aman di Java.
Mitigasi
Panduan pengembangan dan coding
- Panduan Coding yang Aman: Untuk project C/C++, patuhi standar coding yang aman yang telah ditetapkan (misalnya, CERT, OWASP) untuk mengurangi kerentanan seperti overflow buffer, overflow bilangan bulat, dan serangan string format. Prioritaskan library seperti Abseil yang dikenal karena kualitas dan keamanannya. Jika memungkinkan, pertimbangkan untuk mengadopsi bahasa yang aman untuk memori seperti Rust, yang menawarkan performa yang sebanding dengan C/C++.
- Validasi Input: Validasi semua data input yang diterima dari sumber eksternal secara ketat, termasuk input pengguna, data jaringan, dan file, untuk mencegah serangan injection dan kerentanan lainnya.
Melakukan hardening pada opsi kompilasi
Library native yang menggunakan format ELF dapat di-harden terhadap berbagai kerentanan dengan mengaktifkan mekanisme perlindungan seperti perlindungan stack (Canary), relokasi hanya baca (RELRO), pencegahan eksekusi data (NX), dan file yang dapat dieksekusi secara independen dari posisi (PIE). Opsi kompilasi Android NDK sudah mengaktifkan semua perlindungan ini secara default.
Untuk memverifikasi penerapan mekanisme keamanan ini dalam biner, Anda
dapat menggunakan alat seperti hardening-check
atau pwntools
.
Bash
$ pwn checksec --file path/to/libnativecode.so
Arch: aarch64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
Memastikan library pihak ketiga tidak rentan
Saat memilih library pihak ketiga, prioritaskan penggunaan library dengan
reputasi yang solid di komunitas pengembangan. Referensi seperti Indeks Google Play SDK dapat membantu Anda mengidentifikasi library yang tepercaya dan dihormati. Pastikan
Anda terus mengupdate library ke versi terbaru dan secara proaktif menelusuri
kerentanan yang diketahui terkait dengan library tersebut menggunakan referensi seperti database
dari Exploit-DB. Penelusuran web yang menggunakan kata kunci seperti
[library_name] vulnerability
atau [library_name] CVE
dapat mengungkapkan
informasi keamanan yang penting.
Referensi
- CWE-111: Penggunaan Langsung JNI yang Tidak Aman
- Database eksploitasi
- Memeriksa biner untuk fitur hardening keamanan
- Memeriksa setelan keamanan biner dengan pwntools
- Hardening keamanan biner Linux
- Memperkuat biner ELF menggunakan Relocation Read-Only (RELRO)
- Mekanisme perlindungan biner OWASP
- Standar Coding CERT SEI
- Panduan Developer OWASP
- Google Play SDK Index
- Android NDK
- Pengantar Android Rust
- Abseil (Library Umum C++)
- PIE diterapkan oleh penaut