CEN429 Güvenli Programlama¶
Hafta-5¶
Native C/C++ için RASP Teknikleri¶
İndir
Outline¶
- RASP (Çalışma Zamanı Uygulama Koruması) Nedir?
- Native C/C++ İçin RASP Teknikleri
- Caller APK Hash Doğrulama
- Root Tespiti ve LD Preload Koruması
Hafta-5: RASP (Runtime Application Self-Protection) Native C/C++ Tarafı¶
Runtime Application Self-Protection (RASP), uygulamaların çalışma zamanında kendi güvenliklerini sağlamalarını mümkün kılan bir güvenlik yaklaşımıdır. Native C/C++ uygulamalarında, RASP kullanarak çeşitli güvenlik kontrolleri gerçekleştirilebilir. Bu ders kapsamında RASP teknikleri detaylıca açıklanacak ve uygulama örnekleriyle pekiştirilecektir.
1. Çalışma Zamanında Kod Bloklarının Checksum Doğrulaması (Runtime CodeBlock Checksum Verification)¶
Teorik Açıklama: Çalışma zamanında belirli kod bloklarının hash veya checksum değerleri doğrulanarak, kodun değiştirilip değiştirilmediği tespit edilir. Bu yöntem, kod manipülasyonlarına ve kötü niyetli müdahalelere karşı bir koruma sağlar.
Uygulama Örnekleri:
- Herhangi bir kod bloğunun checksum değerini hesaplama ve çalışma sırasında bu değeri karşılaştırma.
- Değişiklik tespit edildiğinde programın kapanması veya hatalı bir sonuç üretmesi.
- Önemli fonksiyonların ve kritik kod parçalarının checksum doğrulaması ile korunması.
2. Caller APK Hash ve İmza Doğrulaması (Caller APK Hash Verification & Signature Verification)¶
Teorik Açıklama: APK dosyalarının hash ve imza bilgileri doğrulanarak, uygulamanın yalnızca güvenilir ve imzalanmış APK'lar tarafından çağrılması sağlanır. Bu sayede, uygulamanın değiştirilmiş veya sahte APK'lar tarafından çalıştırılması engellenir.
Uygulama Örnekleri:
- APK dosyasının hash değerini çalışma sırasında doğrulama.
- APK'nın imza bilgisini kontrol ederek yalnızca orijinal imzalanmış APK'ların çalışmasına izin verme.
- Hash ve imza değerlerinin saklanması ve dinamik doğrulama işlemleri.
3. Rooted Cihaz Tespiti (Rooted Device Detection)¶
Teorik Açıklama: Root yetkisine sahip cihazlar, güvenlik riskleri oluşturabilir. Rooted cihazların tespit edilmesi, bu cihazlarda uygulamanın çalışmasının engellenmesini sağlar.
Root Tespit Yöntemleri:
- /dev/kmem Dosyası: Sistemde bu dosyanın varlığı kontrol edilir. Varsa, sistemde syscall table hook ediliyor olabilir ve cihaz root yetkisine sahip olabilir.
- /proc/kallsyms Dosyası: sys_call_table ve compat_sys_call_table adreslerinin boş olup olmadığını kontrol etme.
- /default.prop ve /system/build.prop Dosyaları: Bu dosyalar okunabiliyorsa cihaz rootlanmış olabilir.
- Diğer Root Tespit Yöntemleri:
- Superuser.apk dosyasının varlığı.
- 27047 portuna bağlanma testi ile frida server’ın aranması.
Uygulama Örnekleri:
- Belirtilen dosyaların varlığını kontrol ederek root tespiti yapma.
- Frida gibi araçların varlığını test etme ve tespit etme.
- Root edilmiş cihazlarda uygulamanın çalışmasını engelleme.
4. İleri Seviye LD Preload Saldırı Tespiti (Advanced LD Preload Attack Detection)¶
Teorik Açıklama: LD_PRELOAD, dinamik olarak yüklenen kütüphaneleri manipüle etmek için kullanılan bir yöntemdir. Bu teknik, kötü amaçlı yazılımlar tarafından kullanılan bir saldırı vektörüdür. LD_PRELOAD saldırılarının tespit edilmesi, uygulamanın güvenliğini artırır.
Uygulama Örnekleri:
- Çalışma zamanında LD_PRELOAD ortam değişkenlerinin kontrol edilmesi.
- LD_PRELOAD saldırılarının tespiti için özel algoritmaların kullanılması.
- Tespit edilen saldırılara karşı uygulamanın kendini korumaya alması.
5. GDB, Tracers ve Emülatör Tespiti (GDB, Tracers, and Emulator Detection)¶
Teorik Açıklama: GDB gibi hata ayıklama araçlarının, izleyici (tracer) ve emülatörlerin tespit edilmesi, saldırganların uygulamayı analiz etmelerini ve değiştirmelerini engeller.
Uygulama Örnekleri:
- GDB ortamının tespit edilmesi ve uygulamanın bu ortamda çalışmamasını sağlama.
- ltrace, strace gibi izleyicilerin kullanımını algılama ve engelleme.
- Emülatör ortamında çalışırken uygulamanın kapanmasını veya farklı bir davranış sergilemesini sağlama.
6. Debugger Eklentisi Tespiti (Debugger Attachment Check)¶
Teorik Açıklama: Uygulamanın bir hata ayıklayıcıya (debugger) eklenip eklenmediği tespit edilerek, kötü niyetli kişilerin uygulamayı analiz etmesi engellenebilir.
Uygulama Örnekleri:
- Debugger eklentisini algılayan kod parçalarının uygulamaya eklenmesi.
- Debugger tespit edildiğinde uygulamanın çalışmasını durdurma veya farklı bir işlev sergilemesini sağlama.
- Anti-debugging teknikleri ile uygulamanın güvenliğini artırma.
7. Bellek Koruması (Memory Protection)¶
Teorik Açıklama: Bellek koruma teknikleri, bellek erişimlerinin kontrol edilmesini sağlar. Bellek üzerinde yapılan manipülasyonlara karşı koruma sağlar. Clang'ın SafeStack özelliği, bellek erişimlerini izlenebilir hale getirir.
Uygulama Örnekleri:
- SafeStack kullanarak bellek koruma işlemlerinin devreye sokulması.
- Bellek üzerinde yapılan her türlü manipülasyonun tespit edilmesi.
- Bellek koruma mekanizmaları ile uygulamanın güvenliğini artırma.
8. Diğer RASP Teknikleri¶
- LD Preload Custom Envoriment Detection: Özelleştirilmiş LD_PRELOAD ortam değişkenlerinin tespiti.
- Tamper Device Detection: Uygulama cihazının değiştirilip değiştirilmediğinin kontrol edilmesi.
- Control Flow Counter Checking: Kontrol akışını izleyen sayaçlar ile kodun manipüle edilip edilmediğinin tespiti.
- Device Binding: Uygulamanın belirli bir cihaza bağlı olarak çalışmasını sağlama.
- Version Binding: Uygulamanın belirli bir versiyonda çalıştığından emin olma.