Android’de Veri Güvenliği ve Tersine Mühendislik

Bekircan DAL
Appcent
Published in
4 min readJul 1, 2024

Android işletim sistemi, dünya genelinde milyarlarca cihazda kullanılmaktadır. Bu yaygınlık, Android’in mobil cihaz pazarında dominant bir konumda olmasını sağlamaktadır. Ancak, bu durum aynı zamanda veri güvenliği açısından büyük bir sorumluluğu da beraberinde getirmektedir. Mobil cihazlar, kullanıcıların kişisel, finansal ve profesyonel bilgilerini sakladıkları kritik araçlardır. Bu nedenle, bu bilgilerin korunması hayati öneme sahiptir. Bu makalede, Android işletim sisteminde veri güvenliğinin nasıl sağlanabileceği ve tersine mühendislik risklerinin nasıl yönetilebileceği incelenecektir.

Android’de Veri Güvenliği

Android Güvenlik Mimarisi

Android’in güvenlik mimarisi, cihazın donanımından başlayarak uygulama katmanına kadar çok katmanlı bir yapı sunar. Bu yapı, cihazın her seviyesinde güvenlik önlemlerinin uygulanmasını sağlar. Güvenliğin sağlanma konusunu donanım ve yazılım tabanı olarak 2 başlıkta inceleyebiliriz:

Donanım Tabanlı Güvenlik

Donanım tabanlı güvenlik özellikleri, cihazın en alt katmanında başlar. Güvenilir Yürütme Ortamı (TEE, Trusted Execution Environment, ARM Trusted Firmware) ve Güvenli Başlatma (Secure Boot, Verified Boot) gibi özellikler, cihazın güvenli bir şekilde çalışmasını sağlar. TEE, hassas işlemlerin işlemcinin izole bir ortamda gerçekleştirilmesini sağlarken, Secure Boot, cihazın yalnızca yetkilendirilmiş yazılımlarla başlatılmasını garanti eder.

İşletim Sistemi Güvenliği

Android işletim sistemi, çeşitli güvenlik mekanizmaları ile donatılmıştır. SELinux, kullanıcı ve uygulama izinleri, ve sanal alan (sandboxing) gibi özellikler, cihazın güvenliğini artırır. SELinux, zorunlu erişim kontrolü sağlar ve uygulamaların yetkisiz işlemler yapmasını engeller. Kullanıcı ve uygulama izinleri, her uygulamanın yalnızca gerekli olan kaynaklara erişebilmesini sağlar. Sanal alan, uygulamaların izole bir ortamda çalışmasını sağlar, böylece bir uygulamanın diğer uygulamalara erişmesi ve zarar vermesi önlenir.

Uygulama Güvenliği (Google Play Store)

Google Play Protect, uygulama izinleri ve güvenlik kontrolleri, Android uygulama güvenliğinin temel taşlarını oluşturur. Google Play Protect, zararlı yazılımları tespit eder ve kullanıcıları uyarır. Uygulama izinleri, her uygulamanın yalnızca gerekli olan verilere erişebilmesini sağlar. Güvenlik kontrolleri ise, uygulamaların güvenlik açıklarını minimize eder.

Veri Şifreleme

Cihaz Düzeyinde Şifreleme

Android cihazlar, tam disk şifreleme (Samsung Knox vb.) ve dosya bazlı şifreleme özellikleri ile donatılmıştır. Tam disk şifreleme, cihazın tüm verilerini şifreler ve yalnızca yetkili kullanıcıların bu verilere erişmesini sağlar. Dosya bazlı şifreleme ise, her dosyanın ayrı ayrı şifrelenmesini sağlar, bu da güvenlik seviyesini artırır.

Uygulama İçi Şifreleme

Uygulama geliştiriciler, veri güvenliğini artırmak için çeşitli şifreleme yöntemleri kullanabilirler. AES (Advanced Encryption Standard) ve RSA (Rivest-Shamir-Adleman) gibi şifreleme yöntemleri, verilerin güvenli bir şekilde saklanmasını ve iletilmesini sağlar.

Android Uygulamalarında Tersine Mühendislik

Tersine Mühendislik Nedir?

Tersine mühendislik, bir yazılımın veya donanımın işleyişini anlamak için yapılan analiz sürecidir. Android uygulamalarında tersine mühendislik, uygulama kodlarının deşifre edilmesi ve analiz edilmesi ile gerçekleştirilir. Bu süreç, uygulama zafiyetlerini tespit etmek ve güvenlik açıklarını kapatmak için kullanılabilir.

Yöntemler ve Araçlar

Tersine mühendislik için çeşitli araçlar kullanılmaktadır. Smali, JEB Decompiler, JADX gibi araçlar, Android uygulama kodlarını analiz etmek için yaygın olarak kullanılmaktadır. Bu araçlar, derlenmiş .apk veya .dex dosyalarından uygulama kodlarının analizini yaparak geliştiriciler tarafından okunabilir hale getirilmesini sağlar(derlenmiş bytecode geri java class’ larına çevrilir) ve güvenlik açıklarının tespit edilmesine yardımcı olur.

Tersine Mühendisliğin Riskleri

Tersine mühendislik, uygulama zafiyetlerinin bulunmasını ve kötü niyetli kişilerin bu zafiyetleri kullanmasını sağlayabilir. Bu nedenle, tersine mühendisliğe karşı önlemler almak önemlidir. Aksi takdirde, kullanıcı verileri tehlikeye girebilir ve uygulama güvenliği ciddi şekilde zayıflayabilir.

Tersine Mühendisliğe Karşı Koruma Yöntemleri

Kod Bulanıklaştırma (Obfuscation)

Kod bulanıklaştırma, uygulama kodlarının okunabilirliğini azaltarak tersine mühendisliği zorlaştırmanın yollarından biridir. Kod bulanıklaştırma teknikleri, uygulama kodlarının anlaşılmasını ve analiz edilmesini zorlaştırır. Android’ de obfuscation için ProGuard ve R8 engine kullanılır. (bkz. https://developer.android.com/build/shrink-code)

Kodu Karıştırma (Code Integrity)

Kodu karıştırma teknikleri, uygulama kodlarının bütünlüğünü korur ve uygulama manipülasyonunu önler. Bu teknikler, uygulamanın orijinal kodlarının değiştirilmesini zorlaştırır ve güvenliği artırır.

Anti-Tamper Mekanizmaları

Anti-tamper mekanizmaları, uygulamaların manipüle edilmesini önlemek için kullanılır. Bu mekanizmalar, uygulama kodlarının değiştirilmesini tespit eder ve buna karşı önlemler alır. Anti-tamper mekanizmaları, uygulama güvenliğini artırarak kullanıcı verilerini korur.

Sonuç

Veri güvenliği ve tersine mühendislik, Android ekosisteminde kritik öneme sahiptir. Kullanıcı verilerinin korunması ve uygulamaların güvenliğinin sağlanması, hem kullanıcılar hem de geliştiriciler için hayati öneme sahiptir. Bu makalede ele alınan yöntemler ve en iyi uygulamalar, Android’de veri güvenliğini artırmak ve tersine mühendislik risklerini minimize etmek için kullanılabilir. Gelecekte, Android ekosisteminde veri güvenliğini daha da artırmak için yeni teknolojiler ve yöntemler geliştirilecektir.

Son Bir şey Daha ❕

Hepimiz yazdığımız kodlara hard-coded değerler koymamız gerektiğini biliyoruz. Peki hard-coded değerlerin uygulama kodunu obfuscate ve minify etsek bile hex editörler hatta metin görüntüleyici gibi daha basit bir uygulama ile kolayca fark edilebileceğini biliyor muydunuz?

Yukarı görüldüğü gibi kod içinde sabit değer verilerek bir sunucuya veri gönderimi sağlayan bir fonksiyon bulunuyor. Uygulamamızı release modda signed şekilde derlediğimizde oluşan .apk dosyasını VS Code kullanarak açıp password diye arama yaptığımızda karşımıza hard-coded eklenen değeri rahatlıkla görebiliyoruz.

Linux veya Mac kullanıcıları strings komutunu kullanarak binary dosyalar içerisinde bulunan ve alfabetik olarak yazdırılabilir karakter dizilerini yazdırabilirler. Uygulama string’lerine bakmak binary exploit ilk adımlarından sayılır. (bkz. https://linux.die.net/man/1/strings)

Kaynakça

--

--