Penggunaan kode native

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