- 21 Eki 2015
- 477
- 1
Android Malware Analizi - DroidDream
Tüm malware ile alakalı analizlerim blogumda bulunmaktadır. Ancak malware Windows işletim sistemi ile sınırlı değildir. MacOS, Linux, IoT ile ilgili işletim sistemlerinde malware bulunur. Bu makalede, 2011 yılında meşhur olan Android malware DroidDream hakkında konuşacağım. Android versiyonu 2.3 (Gingerbread) den eski olan telefonları etkiledi.
Android uygulamalar Java üzeriden yazıldı. .class bit kodu (derlendikten sonraki Java kaynak kodu) sonrasında .dex bit koduna dönüştürülüyor (DEX derleyicisi kullanılarak). .dex bit kodu Linux üzerinde HAL (Donanım Soyutlama Katmanı) üstünde bulunan Android RunTime tarafından tüketildi (ya da Androidin eski versiyonu olan Android Dalvik Sanal Makinesi).
Hybrid Analysisden DroidDreams APK dosya örneğini elde edebildim. APK zip dosyası, incelemek için .jar dosyasına dönüştüreceğimiz .dex dosyasını içermektedir. Dex jar dönüşümü dosyada kayba yol açıyor, bu yüzden bir çok anlamı olmayan ve garip yerlere gitmiş break ve return ifadelerini bulabilirsiniz. Ayrıca, bu örnek için dinamik analizini es geçtim çünkü benim amacım kaynak kodu analizi üstünde durmak.
Hadi başlayalım!
Temel Statik Analizi
Dosya İmzası
50 4B 03 04 APK dosyasının imzasıdır ve offset 0da bulunur.
Hashler
MD5: ecad34c72d2388aafec0a1352bff2dd9
SHA256: 83e813b09918219649863cc7140d715d6df6e5fc77a208f6be6be48ec5a4a475
AndroidManifest.xml
AndroidManifest.xml dosyası şunları içermektedir:
Hedef Android SDK,
Uygulamanın giriş noktasını,
Uygulama Aktivitelerini,
Oluşturulan Hizmetleri ve
Uygulama tarafından gereken izinleri.
Ayrıca DroidDreamin kodu ana uygulamanın bir parçasıdır, bu durumda Süper Gitar Solo oluyor. Bu yüzden hedef Android SDK ana uygulama ile alakalı olabilir ve malware olmayabilir. Ancak, malware hedef SDK sürümünden önceki sürümlerde çalışacağından emin olabilirsiniz. Bu durumda, DroidDream Android Gingerbreadden önceki Android sürümlerinde başarılı bir şekilde çalışmıştır.
com.android.root.main paketi uygulamanın giriş noktasıdır. Bu varyantta sadece com.android.root.Setting hizmeti malware tarafından başlatılmıştır. İnternet ve telefon araması ile alakalı çoklu izinleride kullanıyor.
Gelişmiş Statik Analizi
com.android.root.main.class dosyasında tek önemli kod parçası com.android.root.Setting servisi başlatan kod. Geri kalan kodlar ana uygulamaya ait.
İlgilendiğimiz ilk madde, sabit kodlanmış bir anahtar kullanarak sabit kodlanmış bir şifreli URLnin şifresini çözmektir. adbRoot.class içindeki adbRoot.crypt() fonksiyonu, tek anahtarlı bir XOR işlemi kullanarak argümanını çözer. Şifresi çözülmüş URL http://184.105.245.17:8080/GMServer/GMServlet.
Daha sonra cihaz bilgilerini belirlemek için birkaç işlev çağırır, aynı sabit kodlanmış anahtarı kullanarak şifreler ve yukarıdaki XML formatındaki URLye gönderir.
Cihaz bilgilerini gönderdikten sonra, DroidDream, exploid exploitini yürütmeye devam eder.
Exploid exploiti APK dosyasının assets/exploid dosyasının içinde bulunur. Önce exploit yapar sonra ayrıcalıkları yükseltmeye başlar.
Exploit başarılı olursa, örnekteki WiFi durumunu değiştirmeye çalışır. Buradaki kaynak kodu baya kafa karıştırıcı, bu yüzden mantığımın doğru olup olmadığından emin değilim. Koda göre, WiFi durumu değişmiş gözüküyor ancak, bunu yapmasındaki sebebi anlamadım.WiFi başlangıçta kapalı ise açmak mantıklıdır.
Örnek, su binary dosyasını /system/bin/ dizinine yerleştirmeye devam eder. Su binary dosyası root erişimi kazanabilmesi için bir uygulama tarafından çağrılmalıdır. Bu örnekte, su binary profil olarak adlandırıldı. ELF dosyası, assets/profile dizininden /system/bin/profile dizinine kopyalandı, SUID biti üzerine kuruldu ve çalıştırıldı.
su binary başarılı olarak yerleştirildikten sonra, örnek, WiFi ayarını eski haline getiriyor.
Örnek bunlardan sonra exploid dosyasını cihazdan siliyor.
Şimdi örnek, kendisine root erişimi verecek olan başka bir exploiti çalıştırmaya hazırlanıyor, RageAgainstTheCage. Bu exploit APK da assets/rageagainstthecage dosyasında bulunuyor.
Bu noktada, exploit başarılı olursa malware root erişimine sahip olacak; exploit aşaması burada biter. Exploit sonrası aşama başlar.
Örnek com.android.providers.downloadsmanager paketinin kurulup kurulmadığını kontrol eder. Kurulmadıysa, assets/sqlite.db dosyasını /system/app/DownloadProvidersManager.apk yerine kopyalar.
DownloadProvidersManager.apk, Java bayt kodu formatında olan kod bloğunda root erişimi ile yüklenir. Ne yazık ki, örneği gönderen kişi onu değiştirmiş ve tüm RootCommand() fonksiyonlarını devre dışı bırakmış.
Bayt kodunun neden kapsam dışı olduğunu açıklarken, APKları yüklemek için bir fonksiyon çağırır (bu makalede gösterildiği gibi) runRootCommand() bayt koduna çok benzeyen bir çağırma fonksiyonudur.
DownloadProvidersManager.apkyı kurduktan sonra, com.android.root.Setting servisi çıkar.
Not: Bu noktadan sonra yaptığım analiz sadece DownloadProvidersManager.apk dosyasını ilgilendirmektedir.
Temel Statik Analizi
Hashler
MD5: a891aa9095fd2f21cedb41d882916b09
SHA256: 94ea44688feb558e2786e52fbfa46d90984e40c0980e28035fd2311d5f17f8e3
AndroidManifest.xml
DownloadProvidersMnager.apk yayın alıcısı olarak kuruldu (Root ayrıcalığı sayesinde). Bu apk, DownloadManageService adında bir kaç izin isteyen bir servis çalıştırır.
Gelişmiş Statik Analizi
Kullanıcı arama ile alakalı işlem yaptığında (aramaya cevap verdiğinde, aramayı reddettiğinde) ya da telefonu yeniden başlattığında DownloadManageService servisi başlatılacaktır.
Bir görev, 2 dakika sonra her 2 saatte bir çalışacak şekilde planlanmıştır.
Ana kodun görevi çalıştırma zamanı 23:00 ile 08:00 arasındadır. Bu aynı zamanda çoğu insanın uyuduğu zamandır.
İndirilen uygulamaları sorgular.
URLyi daha önce olduğu gibi aynı anahtarla şifresini çözer.
Cihaz ve indirilen uygulamalar hakkındaki bilgiyi içeren bir XML payload oluşturur.
Örnek, XML payloadu daha önce şifresini çözdüğü URLye gömer.
Daha sonra C&C ile bağlanır ve kullanıcının cihaz bilgilerini gönderir. Bundan sorumlu kod, Java bayt kodudur.
Örnek, daha sonra C&C sunucusuna bağlanmak için bir sonraki zamanı belirler ve bu değeri depolar. Örnek bu değeri nereden elde ediyor emin değilim ancak C&C serverı ile olan iletişimine inanıyorum. İçinde NextConnectTime adlı bir öğeye sahip bir XML payload alır.
Cihaz ve indirilen uygulamaların bilgilerini uygulama veritabanında sakladıktan sonra, zamanlanmış görev tamamlanır.
Özet
DroidDream, başka bir meşru uygulamanın içine yerleştirilmiş Android tabanlı bir malwaredir. WiFi, çoklu izinler kullanır, arka plan hizmetini başlatır ve gömülü bir APK dosyayı yükler. Uygulamanın sanal alanından çıkmak için iki Linux yerel ayrıcalıklı exploit yürütür ve cihazda root erişimi kazanır. Root erişimini kazandıktan sonra, hemen hemen her şeyi yapabilir. Ancak, benim incelediğim varyantta sadece cihaz ve indirilen uygulamaların bilgilerini C&C sunucusuna gönderip bıraktı.
Okuduğunuz için teşekkürler!
Bu makalemde, Android Zararlısı DroidDream için analizimi açıkladım. Bu Android malwarein kapasitesini anladıktan sonra, mobil cihazların masaüstü bilgisayarlardan veya sunuculardan daha az korunduğunun farkına varmak oldukça korkutucu ancak malware aynı derecede yıkıcı olabilir.
Tüm malware ile alakalı analizlerim blogumda bulunmaktadır. Ancak malware Windows işletim sistemi ile sınırlı değildir. MacOS, Linux, IoT ile ilgili işletim sistemlerinde malware bulunur. Bu makalede, 2011 yılında meşhur olan Android malware DroidDream hakkında konuşacağım. Android versiyonu 2.3 (Gingerbread) den eski olan telefonları etkiledi.
Android uygulamalar Java üzeriden yazıldı. .class bit kodu (derlendikten sonraki Java kaynak kodu) sonrasında .dex bit koduna dönüştürülüyor (DEX derleyicisi kullanılarak). .dex bit kodu Linux üzerinde HAL (Donanım Soyutlama Katmanı) üstünde bulunan Android RunTime tarafından tüketildi (ya da Androidin eski versiyonu olan Android Dalvik Sanal Makinesi).
Hybrid Analysisden DroidDreams APK dosya örneğini elde edebildim. APK zip dosyası, incelemek için .jar dosyasına dönüştüreceğimiz .dex dosyasını içermektedir. Dex jar dönüşümü dosyada kayba yol açıyor, bu yüzden bir çok anlamı olmayan ve garip yerlere gitmiş break ve return ifadelerini bulabilirsiniz. Ayrıca, bu örnek için dinamik analizini es geçtim çünkü benim amacım kaynak kodu analizi üstünde durmak.
Hadi başlayalım!
Temel Statik Analizi
Dosya İmzası
50 4B 03 04 APK dosyasının imzasıdır ve offset 0da bulunur.
Hashler
MD5: ecad34c72d2388aafec0a1352bff2dd9
SHA256: 83e813b09918219649863cc7140d715d6df6e5fc77a208f6be6be48ec5a4a475
AndroidManifest.xml
AndroidManifest.xml dosyası şunları içermektedir:
Hedef Android SDK,
Uygulamanın giriş noktasını,
Uygulama Aktivitelerini,
Oluşturulan Hizmetleri ve
Uygulama tarafından gereken izinleri.
Ayrıca DroidDreamin kodu ana uygulamanın bir parçasıdır, bu durumda Süper Gitar Solo oluyor. Bu yüzden hedef Android SDK ana uygulama ile alakalı olabilir ve malware olmayabilir. Ancak, malware hedef SDK sürümünden önceki sürümlerde çalışacağından emin olabilirsiniz. Bu durumda, DroidDream Android Gingerbreadden önceki Android sürümlerinde başarılı bir şekilde çalışmıştır.
com.android.root.main paketi uygulamanın giriş noktasıdır. Bu varyantta sadece com.android.root.Setting hizmeti malware tarafından başlatılmıştır. İnternet ve telefon araması ile alakalı çoklu izinleride kullanıyor.
Gelişmiş Statik Analizi
com.android.root.main.class dosyasında tek önemli kod parçası com.android.root.Setting servisi başlatan kod. Geri kalan kodlar ana uygulamaya ait.
İlgilendiğimiz ilk madde, sabit kodlanmış bir anahtar kullanarak sabit kodlanmış bir şifreli URLnin şifresini çözmektir. adbRoot.class içindeki adbRoot.crypt() fonksiyonu, tek anahtarlı bir XOR işlemi kullanarak argümanını çözer. Şifresi çözülmüş URL http://184.105.245.17:8080/GMServer/GMServlet.
Daha sonra cihaz bilgilerini belirlemek için birkaç işlev çağırır, aynı sabit kodlanmış anahtarı kullanarak şifreler ve yukarıdaki XML formatındaki URLye gönderir.
Cihaz bilgilerini gönderdikten sonra, DroidDream, exploid exploitini yürütmeye devam eder.
Exploid exploiti APK dosyasının assets/exploid dosyasının içinde bulunur. Önce exploit yapar sonra ayrıcalıkları yükseltmeye başlar.
Exploit başarılı olursa, örnekteki WiFi durumunu değiştirmeye çalışır. Buradaki kaynak kodu baya kafa karıştırıcı, bu yüzden mantığımın doğru olup olmadığından emin değilim. Koda göre, WiFi durumu değişmiş gözüküyor ancak, bunu yapmasındaki sebebi anlamadım.WiFi başlangıçta kapalı ise açmak mantıklıdır.
Örnek, su binary dosyasını /system/bin/ dizinine yerleştirmeye devam eder. Su binary dosyası root erişimi kazanabilmesi için bir uygulama tarafından çağrılmalıdır. Bu örnekte, su binary profil olarak adlandırıldı. ELF dosyası, assets/profile dizininden /system/bin/profile dizinine kopyalandı, SUID biti üzerine kuruldu ve çalıştırıldı.
su binary başarılı olarak yerleştirildikten sonra, örnek, WiFi ayarını eski haline getiriyor.
Örnek bunlardan sonra exploid dosyasını cihazdan siliyor.
Şimdi örnek, kendisine root erişimi verecek olan başka bir exploiti çalıştırmaya hazırlanıyor, RageAgainstTheCage. Bu exploit APK da assets/rageagainstthecage dosyasında bulunuyor.
Bu noktada, exploit başarılı olursa malware root erişimine sahip olacak; exploit aşaması burada biter. Exploit sonrası aşama başlar.
Örnek com.android.providers.downloadsmanager paketinin kurulup kurulmadığını kontrol eder. Kurulmadıysa, assets/sqlite.db dosyasını /system/app/DownloadProvidersManager.apk yerine kopyalar.
DownloadProvidersManager.apk, Java bayt kodu formatında olan kod bloğunda root erişimi ile yüklenir. Ne yazık ki, örneği gönderen kişi onu değiştirmiş ve tüm RootCommand() fonksiyonlarını devre dışı bırakmış.
Bayt kodunun neden kapsam dışı olduğunu açıklarken, APKları yüklemek için bir fonksiyon çağırır (bu makalede gösterildiği gibi) runRootCommand() bayt koduna çok benzeyen bir çağırma fonksiyonudur.
DownloadProvidersManager.apkyı kurduktan sonra, com.android.root.Setting servisi çıkar.
Not: Bu noktadan sonra yaptığım analiz sadece DownloadProvidersManager.apk dosyasını ilgilendirmektedir.
Temel Statik Analizi
Hashler
MD5: a891aa9095fd2f21cedb41d882916b09
SHA256: 94ea44688feb558e2786e52fbfa46d90984e40c0980e28035fd2311d5f17f8e3
AndroidManifest.xml
DownloadProvidersMnager.apk yayın alıcısı olarak kuruldu (Root ayrıcalığı sayesinde). Bu apk, DownloadManageService adında bir kaç izin isteyen bir servis çalıştırır.
Gelişmiş Statik Analizi
Kullanıcı arama ile alakalı işlem yaptığında (aramaya cevap verdiğinde, aramayı reddettiğinde) ya da telefonu yeniden başlattığında DownloadManageService servisi başlatılacaktır.
Bir görev, 2 dakika sonra her 2 saatte bir çalışacak şekilde planlanmıştır.
Ana kodun görevi çalıştırma zamanı 23:00 ile 08:00 arasındadır. Bu aynı zamanda çoğu insanın uyuduğu zamandır.
İndirilen uygulamaları sorgular.
URLyi daha önce olduğu gibi aynı anahtarla şifresini çözer.
Cihaz ve indirilen uygulamalar hakkındaki bilgiyi içeren bir XML payload oluşturur.
Örnek, XML payloadu daha önce şifresini çözdüğü URLye gömer.
Daha sonra C&C ile bağlanır ve kullanıcının cihaz bilgilerini gönderir. Bundan sorumlu kod, Java bayt kodudur.
Örnek, daha sonra C&C sunucusuna bağlanmak için bir sonraki zamanı belirler ve bu değeri depolar. Örnek bu değeri nereden elde ediyor emin değilim ancak C&C serverı ile olan iletişimine inanıyorum. İçinde NextConnectTime adlı bir öğeye sahip bir XML payload alır.
Cihaz ve indirilen uygulamaların bilgilerini uygulama veritabanında sakladıktan sonra, zamanlanmış görev tamamlanır.
Özet
DroidDream, başka bir meşru uygulamanın içine yerleştirilmiş Android tabanlı bir malwaredir. WiFi, çoklu izinler kullanır, arka plan hizmetini başlatır ve gömülü bir APK dosyayı yükler. Uygulamanın sanal alanından çıkmak için iki Linux yerel ayrıcalıklı exploit yürütür ve cihazda root erişimi kazanır. Root erişimini kazandıktan sonra, hemen hemen her şeyi yapabilir. Ancak, benim incelediğim varyantta sadece cihaz ve indirilen uygulamaların bilgilerini C&C sunucusuna gönderip bıraktı.
Okuduğunuz için teşekkürler!
Bu makalemde, Android Zararlısı DroidDream için analizimi açıkladım. Bu Android malwarein kapasitesini anladıktan sonra, mobil cihazların masaüstü bilgisayarlardan veya sunuculardan daha az korunduğunun farkına varmak oldukça korkutucu ancak malware aynı derecede yıkıcı olabilir.
Son düzenleme: