Mobil Güvenlik Ve Sızma Teknikleri
OWASP Top 10
Improper Platform Usage
Yanlış ya da doğru olmayan platform kullanımıdır. minSdkVersion değerine dikkat et bu değer önceki sürümlerdeki güvenlik açığını da beraberinde getirir. Exported=”true” değeri veya izinlerin toplu alınması gibi güvenlik açıklarına dikkat edilmesi gerekmektedir.
Insecure Data Storage
Güvenli olmayan veri tutulması güvenlik açığı olarak görülmektedir. Her uygulamanın kendi klasörü vardır. Kişisel verilerin bu klasörlere yazılması veri ihlaline yol açmaktadır.
Insecure Communication
Tamamen “http” olarak giden “https” olmayan bağlantıları kapsamaktadır. Uygulama içerisinde http açılmaması ve açıldığı durumda kontrollü gidilmesi ve kontrol edilmesi gerekmektedir.
Insecure Authentication
Güvensiz kimlik doğrulama işlemleri güvenlik açığı olarak listelenmektedir. Kullanıcının verilerinin arka tarafta sunucuya giderken ortaya çıkan güvenlik problemidir. Web ve mobil ortak olduğunda kimlik doğrulaması gerektiren ve gerektirmeyen işlemler ortak olmalıdır. Aynı işlemler kimlik gerekliliği açısından da aynı olması gerekmektedir.
Insufficient Cryptography
Yetersiz kriptografik algoritmalar olarak karşımıza çıkmaktadır. Statik olarak tutulan anahtar değerleri veya zayıf olarak kurulan algoritmaları kapsamaktadır. Projenin içinde anahtarların tutulması bu kapsamda incelenen bir açıktır.
Insecure Authorization
Mobil uygulamada kimlik doğrulandığında yapılan aksiyonlar web üzerinde yönetici düzeyinde açılabilmektedir. Bu durum web ve mobil servislerinin ayrı olması ancak kimlik doğrulamasının doğru yapılmasından ziyade yetkilendirmelerdeki farklılıklardır. İstekler manipüle edilebilmektedir. Yetkilendirme konusunda güvenlik açıkları bu kapsamda incelenmektedir.
Client Code Quality
Kullanıcı adı, parola, key değerleri projeye gömüldüğünde son kullanıcıya gönderilen “apk” ve “ipa” dosyalarının içinin açılıp bakılarak görülebildiğini bilmemiz gerekmektedir.
Code Tampering
Kodların baypass ederek içerisindeki “reklam özelliği”, “puan” gibi özelliklerin değiştirilmesi kullanılması ve yeniden imzalanması ile birlikte imzalanmış yeni bir apk üretilebilmektedir. Bu şekilde güvenlik önlemlerinin alınması gerekmektedir. Spotify, reklamların kapatılmasının saldırganlar tarafından kapatılması ile savaşmaktadır.
Reverse Engineering
Tersine mühendislik bir ürünün nasıl çalıştığını inceleme pratiğidir. Kaynak kodları, ipa dosyalarını inceleyerek çalışma mantığına bakılmaktadır. Yeterli zaman ve kaynağı olan kişiler tersien mühendislik ile her uygulamanın çalışma mantığını ve yapısını anlayabilmektedir. Uygulamanın korunması için “perdeleme” denilen yöntem kullanılabilmektedir. Bu yöntem değişken isimlerinin “aaa” “bbcc” gibi anlaşılmayacak ve tersine mühendislik yapan kişinin zorlanacağı yöntemleri içermektedir.
Extraneous Functionality
Fonksiyonellik en düşük güvenlik açığı olarak listelede karşımıza çıkmaktadır. Kod içerisinde kritik verilerin loglanması, fonksiyonların unutulması veya kapatılması gibi durumlar güvenlik açığına yol açmaktadır.
Analiz Araçları
apktool: Dex derlenmiş ve daha sonra imzalanmış apk dosyalarının içine erişimi sağlamaktadır.
dex2jar: Dex kodunu java’ya jar olarak geri döndürmektedir.
cfr — procyon — jd-gui — jadx: Jar ile Java’ya döndürülmüş halini elde etmemizi sağlamaktadır.
Burp: Bu araç ile arkaplanda sunucu manipülasyonları gerçekleştirilebilmektedir.
x86 Sanal Telefon: Günümüzde ARM olmasına rağmen cihazların daha hızlı olması için x86 olarak tercih edilmektedir. Google API yazmayan.
MobSF: Statik ve dinamik olarak güvenlik testleri gerçekleştirmektedir. Docker ile çalışması daha iyidir.
Android Debug Bridge (ADB): Telefon içindeki işlemlerin yönetmemizi sağlayan araçtır.
Uygulama
Geliştirici Analizi: Geliştirici tarafından kütüphanelerin yenilenmemesi, zaafiyeti olan sürümlerin kullanılması gibi durumlar aslında konfor alanından çıkmamasından kaynaklı durumlar güvenlik açığı meydana getirmektedir.
Statik Analiz (apktool-dex2jar-cfr)
- Hedefim Ne Hedefi belirlemek amaçtan sapmamak için çok önemlidir. Sızma testi, Tersine Mühendislik gibi hangi konuda çalışacaksa yapılacak adımlar ve adım değişmektedir.
- API Çağrılarını Tespit Etmek Hedefe yönelik yapılan incelemeler genellikle ilginç API çağrılarının tespit edilmesine ve takibine döner. Network bağlantıları, kullanılan veritabanı ile API denilen Android özelinde kullanılan araçlara yapılan çağrıları kapsamaktadır.
- Uygulamanın Giriş Noktalarını Bulmak Tersine mühendislikle bizi ilgilendiren kodlar çalışan ve işlevi olan kodlardır. Uygulamanın giriş noktalarını tespit etmek kod akışını çıkarmanın ilk adımı olmalıdır. Uygulama açıldığında noluyor, ne çağrılıyor, bileşenleri nedir?
- Kodu Anlamlandırmak Obfuscation ya da decryption rutinlerini anlamlandırmak, kodları anlamlandırmak için gerekebilir. Örneğin perdeleme yönteminde verilen veri tipleri veya isimleri kağıt-kalem ile çözülmeye, ilişki kurulmaya çalışılmalıdır.
Dinamik Analiz
Statik analiz yapıldığında alınan notları canlı görmek ve mümkünse istismar etmek için kullanılan yöntemdir.
Burp, x86 Sanal Telefon, Android Debug Bridge (ADB) ile dinamik analiz gerçekleştirilmektedir.
İBRAHİM CAN ERDOĞAN