Penggunaan kode native
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
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
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-07-26 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-07-26 UTC."],[],[],null,["# Use of native code\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\nAndroid applications can take advantage of native code written in languages like\nC and C++ for specific functionalities. However, when an application utilizes\nthe Java Native Interface (JNI) to interact with this native code, it\npotentially exposes itself to vulnerabilities like buffer overflows and other\nissues that may be present in the native code implementation.\n\nImpact\n------\n\nDespite very positive impacts such as performance optimization and obfuscation,\nutilizing native code in Android applications can have negative security\nimpacts. Native code languages like C/C++ lack the memory safety features of\nJava/Kotlin, making them susceptible to vulnerabilities like buffer overflows,\nuse-after-free errors, and other memory corruption issues -- leading to crashes\nor arbitrary code execution. Additionally, if a vulnerability exists in the\nnative code component, it can potentially compromise the entire application,\neven if the rest is written securely in Java.\n\nMitigations\n-----------\n\n### Development and coding guidance\n\n- **Secure Coding Guidelines**: For C/C++ projects, adhere to established secure coding standards (e.g., CERT, OWASP) to mitigate vulnerabilities like buffer overflows, integer overflows, and format string attacks. Prioritize libraries like Abseil known for quality and security. Whenever possible, consider adopting memory-safe languages like Rust, which offer performance comparable to C/C++.\n- **Input Validation**: Rigorously validate all input data received from external sources, including user input, network data, and files, to prevent injection attacks and other vulnerabilities.\n\n### Harden the compilation options\n\nNative libraries utilizing the ELF format can be hardened against a range of\nvulnerabilities by activating protective mechanisms like stack protection\n(Canary), relocation read-only (RELRO), data execution prevention (NX), and\nposition-independent executables (PIE). Conveniently, the Android NDK\ncompilation options already enable all these protections by default.\n\nTo verify the implementation of these security mechanisms within a binary, you\ncan employ tools like `hardening-check` or `pwntools`. \n\n### Bash\n\n $ pwn checksec --file path/to/libnativecode.so\n Arch: aarch64-64-little\n RELRO: Full RELRO\n Stack: Canary found\n NX: NX enabled\n PIE: PIE enabled\n\n### Verify third-party libraries are not vulnerable\n\nWhen choosing third-party libraries, prioritize using those with a solid\nreputation in the development community. Resources like the [Google Play SDK\nIndex](https://play.google.com/sdks) can help you identify well-regarded and trustworthy libraries. Ensure\nyou keep the libraries updated to the latest versions and proactively search for\nany known vulnerabilities related to them using resources like the databases\nfrom [Exploit-DB](https://www.exploit-db.com/). A web search using keywords like\n`[library_name] vulnerability` or `[library_name] CVE` can reveal critical\nsecurity information.\n\nResources\n---------\n\n- [CWE-111: Direct Use of Unsafe JNI](https://cwe.mitre.org/data/definitions/111.html)\n- [Exploit database](https://www.exploit-db.com/)\n- [Check binaries for security hardening features](https://www.systutorials.com/docs/linux/man/1-hardening-check/)\n- [Check binary security settings with pwntools](https://docs.pwntools.com/en/stable/commandline.html#pwn-checksec)\n- [Linux binary security hardening](https://medium.com/@n80fr1n60/linux-binary-security-hardening-1434e89a2525)\n- [Hardening ELF binaries using Relocation Read-Only (RELRO)](https://www.redhat.com/fr/blog/hardening-elf-binaries-using-relocation-read-only-relro)\n- [OWASP binary protection mechanisms](https://mas.owasp.org/MASTG/Android/0x05i-Testing-Code-Quality-and-Build-Settings/#binary-protection-mechanisms)\n- [SEI CERT Coding Standards](https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards)\n- [OWASP Developer Guide](https://owasp.org/www-project-developer-guide/release/)\n- [Google Play SDK Index](https://play.google.com/sdks)\n- [Android NDK](/ndk)\n- [Android Rust introduction](https://source.android.com/docs/setup/build/rust/building-rust-modules/overview)\n- [Abseil (C++ Common Libraries)](https://github.com/abseil/abseil-cpp)\n- [PIE is enforced by the linker](https://cs.android.com/android/platform/superproject/main/+/main:bionic/linker/linker_main.cpp;l=425?q=linker_main&ss=android%2Fplatform%2Fsuperproject%2Fmain)"]]