Android’de Kanca Atmak
If you are looking for an English version of this article, please visit here.
Konumuz Android dünyası olsa da kanca atma denilince nedense aklıma ilk olarak enerji nakil hattına kanca atılarak hanelere çekilen kaçak elektrik gelir. Android dünyasında da aslında uygulamaları dinamik olarak analiz etmek veya müdahale etmek istediğimizde de benzer bir yöntem izleriz. Peki buna neden ihtiyaç duyarız ? Kimi zaman Android uygulamaları ile ilgili bir güvenlik araştırması yapmak istediğimizde veya sızma testi esnasında güvenlik zafiyeti bulmak için hedef Android uygulamasını analiz etme ihtiyacı duyarız. Bunun için genellikle ilk olarak hedef Android uygulamasını kaynak koduna çevirip statik kod analizi yapmakla işe başlarız. Fakat günümüzde çoğu Android uygulamasında kodlar gizlenerek (obfuscation) anlaşılması güçleştirildiği için uygulamayı Genymotion gibi öykünücüler (emulator) üzerinde dinamik olarak analiz etmeye çalışırız. Çalışırız dememin bir sebebi ise yine günümüzde Snapchat gibi mobil uygulamaların statik analizin yanı sıra dinamik analizi de engelleme adına çok sayıda yönteme başvurduğu görülebilmektedir.
2019 yılının Aralık ayında gerçekleştirdiğim Stockholm seyahatim esnasında şehri gezerken etrafımdan şık şıkırdım insanların vızır vızır elektrikli scooterlar ile geçip gittiğini gördüm. Avrupa’da kullanımının son derece yaygın olması sebebiyle elektrikli scooter uygulamalarının zaman içinde güvenlik araştırmacılarının radarına girmesi ile bazılarında güvenlik zafiyetlerinin tespit edildiğini hatırladım. Ülkemizde de yaygınlaşmaya başlayan elektrikli scooterları ve uygulamalarını kullanmaya başlamadan önce Android uygulamalarından bir tanesinin haberleşmesini, merakımı gidermek amacıyla güvenlik araştırmacısı gözüyle incelemeye karar verdim. Tabii ki her zaman olduğu gibi evdeki hesap çarşıya uymadı ve karşıma çıkan engeller sayesinde ortaya bu blog yazısı çıkmış oldu. :)
Zamanı kısıtlı bir güvenlik araştırmacısı olarak statik kod analizi ile vakit kaybetmek istemediğim için APK dosyasını APK Downloader web uygulaması ile indirip Geny Motion öykünücüsüne yükledim. Uygulamayı çalıştırdıktan sonra karşıma APK dosyasının Google Play üzerinden indirilmemesi sebebiyle sürpriz bir uyarı mesajı çıktı. :)
Bunun üzerine gözü kapalı statik kaynak kodu analizine girmeden önce komut satırında sistem mesajlarını görüntülemek için adb logcat komutunu çalıştırıp ardından da uygulamayı tekrar çalıştırdım. Mesajlar arasından ekrana gelen uyarı mesajı ile ilişkili olduğunu düşündüğüm fonksiyonu bulmak için jadx aracı ile APK dosyasını kaynak koduna çevirdikten sonra activities.splash.Splash dosyasını incelemeye başladım. Dosyanın sonunda yer alan verifyInstallerId fonksiyonu hemen dikkatimi çekti. Bu fonksiyon adını Google arama motorunda arattığımda benzer bir fonksiyonun tam da bu amaçla kullanıldığını gördüm. Bu fonksiyon ile Android’in getInstallerPackageName fonksiyonundan faydalanarak uygulamayı Android’e yükleyen uygulamanın Google Play olup olmadığı kontrol ediliyordu. Şayet uygulama Google Play tarafından işletim sistemine yüklendiyse installerPackagename değişkeni sıfırdan farklı bir değer oluyordu.
Bu fonksiyona kaynak kodu seviyesinde müdahale edip, installerPackagename değişkenini sıfırdan farklı bir değer yapıp ardından derleyip Android işletim sistemi üzerinde çalıştırabilirdim fakat Bill Gates’in bir röportajında dediği gibi “Her zaman en tembel insanları işe alırım çünkü tembeller çok karışık işleri bile en kısa yoldan yaparlar” ben de tembellik yapıp kısa bir yol aramaya karar verdim. :)
Eminim bu gibi bir durumla karşılaşan güvenlik araştırmacılarının çoğu Frida araç kiti ile ilerlemeyi tercih ederler fakat hayatın Frida’dan ibaret olmaması gerektiğine inanarak Frida’ya alternatif bir araç, farklı bir yol aramaya karar verdim. Google arama motorunda kısa bir araştırma yaptıktan sonra daha önce sızma testlerinde özellikle SSL Pinning‘i atlatmak için kullandığım ve 1400’den fazla eklentiye sahip olan Xposed Framework aklıma geldi.
Geny Motion üzerinde bulunan Android Oreo işletim sistemine Xposed Framework’u kurduktan sonra eklentilerine göz atmaya başladım. Eklentiler arasında XPrivaclyLua isimli eklenti hemen dikkatimi çekti. Adından da anlaşılabileceği üzere bu eklenti, Android üzerinde yüklü olan uygulamaları sahte bilgilerle (sahte konum bilgisi gibi) besleyerek mahremiyetinizi korumaya yardımcı olmaktadır. Çalışma yöntemi olarak kabaca bu bilgileri toplamaya çalışan fonksiyonlara kanca atarak gerçek bilgiler yerine sahte bilgiler vermektedir. Eklentiyi ihtiyaçlarınız doğrultusunda şekillendirmek için ise Pro sürümünü yükleyerek Lua programlama dili ile betikler oluşturmanız gerekmektedir.
Lua ile installerPackagename değişkenini değiştiren ufak bir betik hazırlayıp aktif hale getirdikten sonra uygulamayı çalıştırdığımda uygulamanın artık daha önceki uyarı mesajını çıkarmadığını ve Charles Proxy ile web trafiğini görüntüleyebildiğimi görerek mutlu sona ulaşmış oldum.
Bu yazının güvenlik araştırmalarında Frida’ya alternatif araç ve yöntem arayanlara ışık tutacağınu ümit ederek bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.