iOS Tabanlı Mobil Uygulama Güvenlik Testleri – I

iOS tabanlı mobil cihazlar kendisi tarafından imzalanan uygulamaların kurulmasına izin verir. Pentest esnasında kullandığığımız araçların çoğu mobil cihaz tarafından onaylanmayan uygulamalardır. Bundan dolayı gerekli uygulamaların ilgili kısıtlamalara takılmamadan kurulabilmesi için bu tür kode imzalama kısıtlamalarının(code signing restrictions) bypass edilmesi için cihaz Jailbreaking işlemine  tabi tutulur.

Bu işleme cihaz rootlama da denilebilir. Jailbreaking bize Iphonce cihaza root haklarla tam olarak erişebilmeyi ve Iphone iOS tarafından onaylanmayan uygulamalarında kurulabilmesine izin vermektedir. Cihaza jailbreaking işleminden sonra IPhone tarafından imzalanmayan uygulamaların temini için Cydia isimli app store(imzasız uygulama veritabanı) kullanılmalıdır. Jailbreaking işleminden sonra cihaza her türlü imzasız uygulamaların kurulabiliyor olması iphone cihazı güvenlik açısından büyük bir risk alanına almaktadır.

Jailbreakinge tabi tutulmayan bir cihaz üzerinde de uygulama test edilebiliri; fakat bu bizim bakış açımızı daraltmaya sebep olabilir. Özetle cihaz jailbreak edilerek karşılaşılabilecek tüm kısıtlamalar atlatılır rahat çalışma imkanı sağlar ve uygulama daha detaylı ve eksiksiz test edilebilir. Iphone/Ipad jailbreak etmek için pwnage,readsn0v,greenposi0n gibi uygulamalar kullanılabilir.

iOS mobil uygulamalarda güvenlik testleri gerçekleştirmek için Cydia dan aşağıdaki uygulamalar kurulabilir.

•    OpenSSH: SSH üzerinden cihaza bağlantı kurmamıza izin verir.
•    Adv-cmds : ps, kill, finger gibi bir takım komutlar ile gelir
•    Sqlite3 : Sqlite veritabanı clientıdır. Sqlite veritabanlarına bağlanmak için kullanılır.
•    GNU Debugger: Reverse engineering ve run time analiz imkanı sağlar
•    Syslogd : Iphone loglarını görüntülememizi sağlar
•    Veency: veency clientı yardımı ile workstation üzerindeki iphone görüntülememizi sağlar
•    Tcpdump: Telefon üzerindeki network trafiğinin capture edilmesinde kullanılır.
•    com.ericasadun.utlities: plutil to view property list files (cydia üzerinde erica utilities diye geçiyor.)
•    Grep: arama için
•    Odcctools: otool – object file görüntüleme aracı (cydia da bigboss recommended tool olarak geçior)
•    Crackulous:  iPhone apps decrypte etmek için
•    Hackulous: decrypte edilen apps(uygulamaların) kurulması için

Iphone bize sistem ve dosya dizin yapısını görüntülememiz için bir terminal vermiyor. Bunun için iphone jailbreak edilir ve cihaz üzerine OpenSSH kurulur daha sonra iphone üzerindeki bu openssh servera herhangi bir ssh client (putty, cyberduck,) kullanılarak bağlantı kurulur ve komut satırından cihaza erişilir.

Iphone cihazlar ön tanımlı 2 kullanıcı ile birlikte gelirler; bunlar mobile ve root kullanıcılarıdır. Iphone üzerindeki kurulu tüm uygulamalar mobile kullanıcı hakları ile çalışırlar. Fakat SSH ile biz cihaza root kullanıcısı ile bağlanabiliriz ve cihaz üzerinde tüm kontrolü root olarak elde edebiliriz.
Ön tanımlı olarak tüm iphone cihazlarda root ve mobile kullanıcı parolaları alpine olarak gelir. Eğer iphone cihazımız wi-fi ağına bağlı ise doğrudan wi-fi üzerinden aldığı IP adresine SSH ile bağlantı kurulabilir.

Eğer Iphone cihazımız wifi bağlı değil ise USB kablosu üzerinden de cihaza SSH bağlantısı yapılabilir. Bunun için Iphone tünel yazılımı kullanılabilir. http://code.google.com/p/iphonetunnel-usbmuxconnectbyport/ adresindeki uygulama indirilerek kurulabilir.

SSH bağlantısı birinci aşaması:
MACBOOK:iphonetunnel root# ./itnl –lport 5555
[INFO] Waiting for new TCP connection on port 5555
[INFO] Waiting for device…
[INFO] Device connected: 9eda09e1f101cf07b6e3b1569c80b36a86198d44

Ardından ilgili port üzerinden cihaza bağlanılır:
n003-000-000-000:~ root# ssh -p 5555 root@127.0.0.1
root@127.0.0.1’s password:
iPad:~ root$
iPad:~ root$

Yukarıda yapılan local 5555 portumuzun mobil cihazın SSH servisine bind edilmesidir.
Bundan sonra local sistemimizin ilgili portuna ssh uygulaması ile bağlantı kurularak cihaza erişilebilir. Bir kere SSH bağlantısı kurulduktan sonra cihaz üzerinden doğrudan komutlar çalıştırılabilir.IOS yazılımı MAC OS yazılımının kırpılmış bir sürümü olduğu için MAC komutlarının çoğur doğrudan SSH üzerinden iphone cihaz üzerinde de çalışacaktır.

iOS uygulamalarda araya girerek trafik analizi yapma:
IOS uygulamalara yönelik sızma testleri, client – server etkileşimli olarak networkte belli protokolleri kullanarak çalışan uygulamalar ile aynı mantıkta çalıştığından dolayı diğer uygulamalardan çok farklı değildir. Iphone uygulama testleri network pentest ve web pentestlerinin her ikisini de içerir. Trafik analizinin temel amacı, açıklık bulunması amacıyla trafiğin capture edilip incelenmesidir.
Iphone uygulamaları aşağıdaki veri iletim türlerinden biri ile veri iletimi sağlar;

•    Cleartext şifresiz iletim – http
•    Şifreli (encrypted channel) – https
•    Özel protokoller veya low level stream

Yıl 2013 ve hala bir çok mobile uygulama http üzerinden şifresiz veri iletimi yöntemini kullanmaktadır. Çoğu kimse mobile cihazları wifi üzerinden kullandığından dolayı mobile uygulamalar MITM saldırılarına çok daha fazla maruz kalma ihtimali vardır. Bir saldırgan mobil kullanıcı ile aynı wifi ağına bağlandığında Fireship benzeri bir uygulama çalıştırabilir ve kullanıcı oturumlarını çalabilir. Http gibi şifresiz veri iletim protokolleri MITM saldırılarına karşı savunmasızdır, bu sebeple mobil uygulamalar http yerine https veri iletim protokolünü kullanarak hassas verilerin encrypte(şifreli) iletilmesi sağlanmalıdır.

Bundan dolayı pentest sürecinde mobile uygulamanın veri iletiminin bir şifreli kanal üzerinden iletilip iletilmediği mutlaka kontrol edilmelidir. Uygulama trafiği mobile cihaz üzerinde proxy ayarları yapılarak yakalanabilir. Mobil cihaz üzerinde proxy ayarı girildikten sonra mobil cihaz üzerindeki trafiği proxy olan sunucuya route edecektir. Biz de ilgili proxy sunucu üzerinden trafiği durdurma değiştirme gibi müdahalelerde bulunabiliriz.

Mevcut web uygulama http trafiği veya mobile uygulamanın ürettigi http trafiği proxy sunucu üzerindeki burpsuite veya zap gibi araçlarla kontrol edebiliriz. Iphone https trafiği içinde aynı yöntem kullanılır, fakat iphone cihazlar üzerinde https trafği yakalamak biraz zordur. Browser tabanlı https trafiklerde araya girdiğimizde klasik sahte sertfika görüntülenir ve onaylanması kullanıcıdan beklenir, fakat ios uygulamalarda sunucu taraflı sertfika uygulama içerisinde kontrol edilir. Bu işlemler için developarlar tarafından gerçekleştirilen kodlama hataları uygulamanın üretilen tüm sertfikaları kabul etmesine yol açabilir. Bu kodlama hatasından dolayı uygulama server sertfika onaylamasında başarısız olursa saldırganlar MITM saldırıları gerçekleştirebilirler.

IOS cihazlar için uygulama geliştirilirken en sık karşılaşılan hata developerların allowanyhttpscertificateforhost (NSURLRequest) veya continueWithoutCredentialForAuthenticationChallenge (NSURLConnection) fonksiyonlarının kullanılmasından kaynaklanır. Uygulama bu durumda orjinal server tarafından üretilmeyen sertfikalarada güvenecektir. Uygulama kullanıcıları herhangi bir sertfika uyarısıda almayacaklardır. Pentest esnasında uygulamanın sertfikaları düzgün bir şekilde doğrulayıp doğrulamadığı kontrol edilmelidir. Eğer uygulama server-side sertfikaları düzgünce doğrularsa o zaman bir sertfika hata mesajı görüntüleyecektir veya sayfaya hiç ulaşılamayacağız. Bu şekilde kullanıcının uygulamayı kullanmasına izin verilmeyecektir.

Pentest esnasında bu tür durumlar ile karşılaşıldığında bu uygulamaların ssl trafiğini yakalamak için araya girip ürettiğimiz sahte server CA sertfikamızı mobil cihazımızın trusted CA sertikalar listesine eklememiz gerekir. Daha sonra bizim proxy tarafından üretilen sahte sertfikayı alan IOS uygulaması herhangi bir hata vermeyecektir çünkü biz Iphone cihaza bu sertfikamıza güvenmesini söylemiştik. Bu bize şifreli olan https trafiğini capture etmemizi sağlayacaktır. Aynı teknik sertfika ile çalışan diğer protokoller içinde geçerlidir.

Proxy tarafından üretilen sahte sertfika .crt uzantısı ile kaydedilir. Ve bu bir web sucunu altına atılır. Bu websunucuya iphone üzerinden safari ile erişilip bu uygulama seçildiğinde install bölümü gelecektir ve sertfikaya güvenilip kurulması istenilir. Bundan sonra artık ilgili CA sertfika iphone cihazının trusted CA sertfikalarına eklenmiş olur. Ve böylece bizim ürettiğimiz sahte sertfika uygulama tarafından kabul görecektir. Mobile kullanıcının https üzerinden gönderdiği tüm datalar bizim üzerimizde sonlanacak ve biz içeriği görebileceğiz.

Iphone/Ipad uygulamaları http ve https protokollerinden ayrı olarak özel protokoller veya low level socket haberleşme API’lerini(NSStreams, CFStreams) kullanabilirler. Yukarıda bahsedilen yöntemler ile bu tür methodlar ile çalışan iphone uygulamalarının trafiğini yakalamak zordur. Bu low level trafiklerin capture edebilmek için iphone üzerindeki cydia’dan tcpdump indirilmeli ve kullanılmalıdır. Tcpdump indirilip kurulduktan sonra SSH üzerinden cihaza bağlanılıp tcpdum çalıştırılır. Tcpdump ile paket kaydı yapıldıktan sonra iphone cihaza Cyberduck gibi bir GUI SSH uygulaması ile bağlanılıp dosya dizinler görüntülenebilir. Oluşturulan .pcap dosyası buradan bilgisayarımıza kopyalanır daha sonra wireshark gibi bir paket analiz aracı ile diğer protokoller incelenebilir. Aynı method proxy ayarları ile uğraşmaya gerek duyulmadan uygulama trafiğinin analizinde de kullanılabilir. Bu aşamada DNS spoofing kullanılarak MITM saldırılarıda gerçekleştirilebilir.

Araya girilip bir kez trafik yakalandıktan sonra tipik web açıklıkları; başta sql injection,xss, kimlik doğrulama, yetkilendirme , oturum yönetimi, şifreleme zayıflıkları gibi çeşitli testler gerçekleştirilebilir. Bir sonraki makalede client tarafı testlerinden local veritabanı, cache, xml dosyaları incelenecektir. Privacy issues ve local data storage üzerinde durulacaktır.

Celal ERDİK < celal.erdik@bga.com.tr>