Yerel kod kullanımı
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
OWASP kategorisi: MASVS-CODE: Kod Kalitesi
Genel Bakış
Android uygulamaları, belirli işlevler için C ve C++ gibi dillerde yazılmış yerel koddan yararlanabilir. Bununla birlikte, bir uygulama bu yerel kodla etkileşim kurmak için Java Yerel Arayüzü'nü (JNI) kullandığında, arabellek taşması gibi güvenlik açıklarına ve yerel kod uygulamasında olabilecek diğer sorunlara maruz kalır.
Etki
Android uygulamalarında yerel kod kullanılması, performans optimizasyonu ve kod karartma gibi çok olumlu etkilere sahip olsa da güvenlik açısından olumsuz etkileri olabilir. C/C++ gibi yerel kod dilleri, Java/Kotlin'in bellek güvenliği özelliklerine sahip değildir. Bu nedenle, arabellek taşması, boşaltıldıktan sonra kullanım hataları ve diğer bellek bozulması sorunlarına karşı hassastır. Bu da kilitlenmelere veya rastgele kodların yürütülmesine neden olur. Ayrıca, yerel kod bileşeninde bir güvenlik açığı varsa gerisi Java'da güvenli bir şekilde yazılmış olsa bile uygulamanın tamamının güvenliğini ihlal edebilir.
Çözümler
Geliştirme ve kodlama kılavuzu
- Güvenli Kodlama Yönergeleri: C/C++ projeleri için belirlenmiş güvenli kodlama standartlarına (ör. CERT, OWASP) kullanarak arabellek taşmaları, tam sayı taşmaları ve biçim dizesi saldırıları gibi güvenlik açıklarını azaltın. Kalite ve güvenlikle bilinen Abseil gibi kitaplıklara öncelik verin. Mümkün olduğunda, C/C++ ile karşılaştırılabilir bir performans sunan Rust gibi bellek açısından güvenli dilleri kullanmayı düşünün.
- Giriş Doğrulaması: Şifre saldırılarını ve diğer güvenlik açıklarını önlemek için kullanıcı girişi, ağ verileri ve dosyalar dahil olmak üzere harici kaynaklardan alınan tüm giriş verilerini titizlikle doğrulayın.
Derleme seçeneklerini güçlendirme
ELF biçimini kullanan yerel kitaplıklar, yığın koruması (Canary), salt okunur yer değiştirme (RELRO), veri yürütme önleme (NX) ve konumdan bağımsız yürütülebilir dosyalar (PIE) gibi koruyucu mekanizmalar etkinleştirilerek çeşitli güvenlik açıklarına karşı güçlendirilebilir. Android NDK derleme seçenekleri de bu korumaların tümünü varsayılan olarak sağlamaktadır.
Bu güvenlik mekanizmalarının bir ikili programda uygulanıp uygulanmadığını doğrulamak için hardening-check
veya pwntools
gibi araçları kullanabilirsiniz.
Bash
$ pwn checksec --file path/to/libnativecode.so
Arch: aarch64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
Üçüncü taraf kitaplıklarının güvenlik açığı olmadığını doğrulama
Üçüncü taraf kitaplıkları seçerken geliştirme topluluğunda sağlam bir üne sahip olanları kullanmaya öncelik verin. Google Play SDK Dizini gibi kaynaklar, saygın ve güvenilir kitaplıkları belirlemenize yardımcı olabilir. Kitaplıkları en son sürümlere güncel tuttuğunuzdan emin olun ve Exploit-DB'deki veritabanları gibi kaynakları kullanarak bunlarla ilgili bilinen güvenlik açıklarını proaktif olarak arayın. [library_name] vulnerability
veya [library_name] CVE
gibi anahtar kelimelerin kullanıldığı bir web araması, kritik güvenlik bilgilerini açığa çıkarabilir.
Kaynaklar
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-26 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 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)"]]