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, saat aplikasi menggunakan Java Native Interface (JNI) untuk berinteraksi dengan kode native ini, aplikasi berpotensi terekspos ke kerentanan seperti buffer overflow dan masalah lainnya yang mungkin ada dalam implementasi kode native.
Dampak
Meskipun memiliki dampak yang sangat positif seperti pengoptimalan performa dan pengaburan, penggunaan 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 penggunaan setelah pembebasan, dan masalah kerusakan memori lainnya – yang menyebabkan error atau eksekusi kode arbitrer. Selain itu, jika kerentanan ada di komponen kode native, kerentanan tersebut berpotensi membahayakan seluruh aplikasi, meskipun bagian lainnya ditulis dengan aman di Java.
Mitigasi
Panduan pengembangan dan coding
- Panduan Coding Aman: Untuk project C/C++, patuhi standar coding aman yang telah ditetapkan (misalnya, CERT, OWASP) untuk memitigasi kerentanan seperti buffer overflow, integer overflow, dan serangan string format. Prioritaskan library seperti Abseil yang dikenal karena kualitas dan keamanannya. Jika memungkinkan, pertimbangkan untuk menggunakan 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 injeksi dan kerentanan lainnya.
Perkuat opsi kompilasi
Library native yang menggunakan format ELF dapat diperkuat terhadap berbagai kerentanan dengan mengaktifkan mekanisme perlindungan seperti perlindungan stack (Canary), relocation read-only (RELRO), pencegahan eksekusi data (NX), dan executable yang independen dari posisi (PIE). Untungnya, 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 baik di komunitas developer. Referensi seperti Indeks SDK Google Play dapat membantu Anda mengidentifikasi library yang tepercaya dan memiliki reputasi baik. Pastikan
Anda terus mengupdate library ke versi terbaru dan secara proaktif mencari
kerentanan yang diketahui terkait dengannya menggunakan referensi seperti database
dari Exploit-DB. Penelusuran web menggunakan kata kunci seperti
[library_name] vulnerability atau [library_name] CVE dapat mengungkapkan informasi keamanan penting.
Resource
- CWE-111: Penggunaan JNI yang Tidak Aman secara Langsung
- Database eksploitasi
- Memeriksa biner untuk mengetahui fitur penguatan keamanan
- Memeriksa setelan keamanan biner dengan pwntools
- Hardening keamanan biner Linux
- Memperkuat biner ELF menggunakan Relocation Read-Only (RELRO)
- Mekanisme perlindungan biner OWASP
- SEI CERT Coding Standards
- Panduan Developer OWASP
- Google Play SDK Index
- Android NDK
- Pengantar Android Rust
- Abseil (C++ Common Libraries)
- PIE diterapkan oleh linker