Android’de Sistem Mimarisi ve Penetrasyon

Android ilk olarak Google ınc tarafından geliştirilen ve daha sonra Open Handset Alliance (OHA) tarafından desteklenen ve halen geliştirilen bir mobil işletim sistemi olarak karşımızdadır.Günümüzde kullandığımız mobil cihazlarda, tabletlerde, kameralarda vb ürünler üzerinde Android işletim sistemi kullanılmaktadır.

Teknolojinin hızla yayılmasıyla beraber kullandığımız cihazlarda hızla değişmektedir.Ve bu süre zarfında hackerlarında hedefleri bilgisayar odaklanmasından mobil odaklanmaya doğru kaymıştır. Özellikle Android’in yapısı ve market dışı 3.part uygulamaların kolayca yüklenmesinden dolayı zamanla birçok kullanıcıyı tehdit eden virüsler ve uygulamalar ortaya çıktı.Ve anti-virüs şirketlerinin yayınladığı raporlarda, Android üzerindeki kötü amaçlı yazılımlarda artış meydana geldiği gözlemlenmiştir. Makalede ilk olarak Android Sistem mimarisine ve sonrasında temel olarak penetrasyon testini inceleyeceğiz.

Android Sistem Mimarisine Bakış

Android sistem mimarisine baktıgımızda uygulama katmanı,uygulama çatısı,kütüphaneler,Android runtime ve linux çekirdeğinden oluşuyor.

1.) Uygulamalar

Kullanıcı tarafına en yakın bölümdür.Çünkü uygulamaların içinde rehber,takvim,tarayıcı,sms programı,mail istemicisi gibi temel uygulamalar ve daha sonra uygulama marketi üzerinden yüklediğimiz 3.parti uygulamalar yer alır.

2.) Uygulama Katmanı

Android geliştiricilere oldukça zengin bir platform sunar.Geliştiriciler yazılımlarında lokasyon bilgisi,donanım bilgisi gibi birçok bilgiye kısıtlama olmadan erişebilir.

3.) Kütüphaneler

Android kütüphaneleri kullanıcılar tarafından alınan cihazlara otomatik olarak gelir.Ve bu kütüphaneler C/C++ programlama dilleriyle yazılmıştır.Bazılarını sıralamak gerekirse :

SQLite : Kullandıgımız uygulamalar olsun yazdgımız uygulamaların olsun verilerini saklamak için kullanılan güçlü bir ilişkisel veritabanı motorudur.

WebKit : Bu web sayfalarını aramayı sağlayan bir tarayıcı motorudur.

Surface Manager : Bu ise ekranlardaki grafiklerden sorumludur.

OpenGL : Ekrana 2D yada 3D grafik işlemek için kullanılır.

4.)Android RunTime

Android RunTime kütüphaneler ile aynı katmanda yer almaktadır.Ve bu yapıda çekirdek Java kütüphanesi ve Dalvik sanal makinesi yer alır.Düşük batarya,bellek ve işlemciyle pratik olarak uygulamalarımızı gerçek cihazda çalışıyor gibi test edebiliyoruz.Aşağıda bununla ilgili bir örnek şema yer almaktadır.Ve görüldüğü üzere her uygulama ayrı bir sanal altında çalışır ve her uygulamanın kendisine atanmış ayrı kimlikleri bulunmakta.

5.) Linux Çekirdeği

Android sistem mimarisinin en alt katmanını Linux çekirdeği oluşturmaktadır.Aygıt sürücüleri,güç yönetimi,süreç yönetimi ve networking temel hizmetleri linux katmanına bağlı olarak çalışır.Android’de Linux’un 2.6 çekirdeği kullanılmıştır ve zamanla geliştirilerek Android’e uyumlu hale getirilmiştir.

Android’in linux çekirdeği üzerine kuruldugunu biliyoruz fakat tam manasıyla Android Linux değildir. Çünkü Android Linux’un glibc kütüphanesinden, doğal pencerelemden destek almaz.Yani tam manasıyla tüm linux hizmetlerini gerçekleştirmez.

Android Uygulamalarında Penetrasyon Testi

Android sistem mimarisini anladıktan sonra uygulamalarda penetrasyon testlerine bakacağız.Öncelikle Android uygulamalarını başlıca iki kategori üzerinde sınıfllandırabiliriz :

1-) Tarayıcı tabanlı Android uygulamaları 2-)Android tabanlı(Native) uygulamalar

1-) Tarayıcı Tabanlı Android Uygulamaları

Tarayıcı tabanlı web uygulamaların güvenlikleri birçoğumuzun bildiği yada öğrenmekte oldugu yöntemler ile test edilmektedir.Aynı yöntemleri tarayıcı tabanlı uygulamalarda da takip edebiliriz :

  1. SQL Enjeksiyon 2.Cross Site Script(XSS) saldırıları 3.Kimlik doğrulama kontrolleri 4.Parametre kurcalama 5.Yetki Kontrolleri 6.Taşıma katmanı güvenliği

(Web tabanlı açıklar hakkında daha fazlasını site içerisinden Owasp’ın sitesinde bulabilirsiniz)

2.) Android Tabanlı Uygulamalarda Penetrasyon Testleri

Tarayıcı tabanlı uygulamalar ile karşılaştırıldıgında yapı olarak daha karışıktır.Çünkü android tabanlı uygulamalar hem yerelde hemde sunucu tarafında işleme dahil olabilirler.

Android tabanlı uygulamalar HTTP/HTTPS trafiği içerebilir ve yerel depolama ve işlem yapabilir.Web tabanlı uygulamalar yukarıda sıralandıgı gibi güvenlik testlerinden geçebilir.Fakat yerel depolama ve işlem için aşağıdaki teknikleri uygulayagız

Androidle programlama yapanlar Eclipse indirirken ayrıca AVD managerıda beraberinde yüklemişlerdir.Yani kullandıgımız emulatörün ana kaynağıdır.Ve inceleceğimiz .apk dosyasını ilk olarak emulatörümüze yükleyeceğiz ve sonrasında detaylara bakacağız.

İlk olarak seçtiğimiz apk dosyasını Program Files içinde bulunan Android Sdk->Platform Tools içine kopyalıyoruz daha sonra ise konsol üzerinden çağırıyoruz.Burada dikkat etmemiz gereken ise bunları yaparken emulatörün açık olması gerekiyor.

Yerel Depolama Analizi

Kullandığımız android uygulamalarında girdiğimiz şifreler, konuştuklarımız yani önemli bilgilerimiz yerel depolama üzerine kayıt olur.Ve günümüzde mobil cihazlar bir masaüstlerinden yada sunuculardan daha tehlikeli bir konumda yer alıyor.Fakat bizler yinede önemli uygulamaları kullanırken yerele hiçbirşey kaydetmediğinden emin olmalıyız.Bunlara binaen bizlerde şimdi android uygulamalarında penetrasyon yaparken kullanacağımız Android debug bridge (ADB) in çeşitli özelliklerinden bahsedeceğiz.

ADB Kabuk

ADB emulatörü çeşitli kodları çalıştırabilmek için birçok imkan sunmuş.O yüzden android uygulamalarını burada güvenlik testlerinden geçirebiliriz.

İlk olarak kabuga erişim sağlamamız için ADB shell komutunu kullanıyoruz.Kabuga erişim sağladıktan sonra linux komutları kullanarak iç dizinlere gidebiliriz.

Belirli bir uygulamaya gitmek için ilk önce ls data daha sonra ise ls data/data komutlarını kullanıyoruz ve karşımıza paketler çıkıyor.

Gördüğümüz uygulama paketleri verilere erişmemizi sağlıyor.Bunlar önbellek,veritabanı,dosya,lib,shared_prefs klasörleridir.Fakat deneyeceğimiz apkların bazılarında tüm klasörlere bazende tek klasöre ulaşabilirsiniz.Tamamıyla uygulamayı geliştirenlerle ilgilidir.

Önbellek

Bu klasörde uygulamalar tarafından önbelleğe alınmış dosyaları içerir.Burada genellikle webkit kullanan tarayıcılar yada uygulamaların dosyaları yer alır.

Veritabanı

Android cihazlarında açıkkaynak kodlu SQLite veritabanı oluşur.Ve bu SQL işlemler ve hazırlanmış tablolar gibi standart ilişkisel veritabanı özelliklerini destekler.Androidde SQLite veritabanı kullanarak herhangi bir veritabanı kurulumu yada yönetimi gerektirmez.Sadece veritabanı oluşturulurken SQL ifadeleri tanımlanır.Daha sonra kurulan veritabanı Android tarafından bizim için yönetilir.Ve uygulamalar bu veritabanlarına hassas bilgileri kaydeder.png

Dosyalar

Bu dosya dizininde Android uygulamaların verileri saklanır.Ve bu dosyalar kontrol edilmelidir çünkü saklanılan dosyalar hassas veriler ve bilgiler içerebilir.

Shared_prefs

Shared_prefs android uygulamalarında temel veri türlerinin anahtar-değer çiftlerini almayı ve saklamayı sağlayan bir yapıdır.Ve bu veri,uygulama kapalı olsa bile devam edecek.Bu yapı XML dosyalarını içerdiği için hassas değerleri kontrol edilmelidir.png

  1. Kaynak Kodlara Ulaşma

Kaynak kodlara ulaşıp incelemek için Agnito aracını yada Dex2jar-Jd-gui araçlarını kullanarak apk dosyasını decompile ediyoruz.Ve decompile dan sonra elde ettiğimiz dosyaları güvenlik analizlerine sokabiliriz.

2.Sistem Günlüğünü Denetleme

Android sistem günlüğü sağladıgı hata ayıklama çıkışı sayesinde logcat komutuyla uygulamaların günlükleri incelenebilir ve filtrelemelerle yararlı sonuçlara ulaşabiliriz

Referanslar

1.Google Android Development Tool Kit – http://developer.android.com 2.Infosecinstitute-http://resources.infosecinstitute.com/ 3.Muharrem Taç-http://www.muharremtac.com/