Posted on December 30th, 2011

Akıllı telefonlar giderek yayıldıkça mobil güvenliğin önemi de gün geçtikçe artmakta. Yarınlarda güvenlik dünyasında gömülü sistemlerin önem kazanacağını tahmin etmek için kahin olmaya gerek yok. Zaten akıllı telefonları hedef alan zararlı yazılımlar , exploitler ile bunlar konuşulmaya çoktan başladı!

Bir hacker ya da güvenlik araştırmacısı için platformun önemi yoktur. Mobil , gömülü sistem vs. hiç farketmez x86’da yaptığı herşeyi diğer platformlarda da yapmak için çeşitli yollar bulabilir. Örneğin x86’da bug hunting ile uğraşmış bir avcı , bunu mobil’de de yapabilir. Bizim için değişen birşey yoktur, neticede güvenlik uzmanının test edeceği yazılım yine insan elinden çıkmış bir yazılımdır!

Peki Mobil ortamdaki yazılım güvenliği testleri sırasında karşılaştığımız crashleri nasıl analiz ederiz? Bu konu hakkında biraz ipucu vermek istedik. Crash analizi çalıştığınız mobil platforma göre farklılık gösterecektir.

Symbian, Windows Phone 6 (winmob 6) üzerinde çalışıyorsanız işiniz biraz daha kolay diyebiliriz. Buna Androidi de ekleyebiliriz. Çünkü Android SDK’da gdb benzeri adb debuggerı kullanabilirsiniz. Ancak Windows Phone 7 ve Blackberry için kolay diyemeyiz. Örneğin şu an için windows phone 7′yi uygulamalarını debug etmenin bilinen bir yolu yok.

WP 7’de sadece Platform Builder özelliği olan developer phone’larda debug edebilme imkanı bulunmakta. Yani sadece Microsoft ve OEM’ler debug edebiliyor.

Çok sorulan ve kullanılan iPhone da durum nasıl derseniz? Eğer jailbreak yaparsanız iphone üzerinde de rahatlıkla gdb ile debug işlemi gerçekleştirebilirsiniz.

Mobil Debugging Yolları:

1-)IDA Debugger

Windows Mobile 6.1/6.5 , Symbian ve Android (IDA 6.1 ile) telefonlarınızı IDA Debugger ile kolayca remote (usb) debug edebilir ve crash analizini yapabilirsiniz.
Telefonunuzdaki bir uygulamayı debug etmek için, usb bağlantısını sağladıktan sonra IDA’da aşağıdaki adımları takip edebilirsiniz;

Debugger>Attach>Remote WinCE/Symbian/Android Debugger

Daha sonra telefonunuzda çalışan processlerin listesiyle karşılacaksınız, listeden uygulamanızı seçip debug işlemine başlayabilirsiniz.

2-)Windbg

Windows Phone 7′ye kadar olan windows mobile sistemlerde windbg ile de analiz etme olanağımız var crash vb. durumları.
Windows Mobile 6.1 ve 6.5 sürümlerinde crash meydana geldiğinde crash dump dosyası “windows/system/crashdump files” klasöründe “kdmp” uzantılı olarak kaydedilmekte.
Bu crash dump dosyalarını bilgisayarınıza attıktan sonra gerekli analizi Windbg ile yapabilirsiniz.

Örnek bir windows mobile crash dump dosyası ve windbg:

(6bea76da.dee2a1e): Stack buffer overflow – code c0000409 (!!! second chance !!!)
Unable to load image browsui.dll, Win32 error 0n2
*** WARNING: Unable to verify timestamp for browsui.dll
*** ERROR: Module load completed but symbols could not be loaded for browsui.dll
browsui_37ea000+0x3edit:
038edit 0800a0e1 mov r0, r8
8:309:armce> r
r0=00610061 r1=00000002 r2=00000010 r3=00000000 r4=000000b0 r5=00000210
r6=00000000 r7=139afae0 r8=00000001 r9=019420c0 r10=0000010f r11=139afae0
r12=139ae724 sp=139ae828 lr=0381f8a8 pc=031edit. psr=60000010 -ZC– ARM
browsui_37ea000+0x3edited:
038edit. 0800a0e1 mov r0, r8

8:309:armce> dd r12
139ae724 00610061 00000002 00000010 00000000
139ae734 000000b0 00000210 00000000 139afae0
139ae744 00000001 019420c0 0000010f 139afae0
139ae754 139ae724 139ae828 0381f8a8 0381f8a8
139ae764 60000010 00000000 00000000 00000000
139ae774 00000000 00000000 00000000 00000000
139ae784 00000000 00000000 00000000 00000000
139ae794 00000000 00000000 00000000 00000000
8:309:armce> dd sp
139ae828 00000024 00770077 002e0077 00610061
139ae838 00610061 00610061 00610061 00610061
139ae848 00610061 00610061 00610061 00610061
139ae858 00610061 00610061 00610061 00610061
139ae868 00610061 00610061 00610061 00610061
139ae878 00610061 00610061 00610061 00610061
139ae888 00610061 00610061 00610061 00610061
139ae898 00610061 00610061 00610061 00610061

Yukarıdaki Crash , güvenlik testleri yaparken internet explorer mobile’da bulduğumuz açığa ait. Error Code’dan bunun bir stack tabanlı buffer overflow hatası olduğunu anlıyoruz. Windbg’de “r” komutuyla mevcut registerların durumunu görebiliriz. d veya dd ile de herhangi bir registerı inceleyebiliriz. ”k” komutuyla call stack’e bakıp en son hangi fonksiyonların/adreslerin çağırıldığını görüp, disassembly ederek “vulnerable” (~hatalı) fonksiyonu bulabilirsiniz.

8:309:armce> k
Child-SP RetAddr Call Site
139ae828 0382edit browsui_37ea000+0x3edit
139af898 0382edit browsui_37ea000+0x3edit
139af8dc 03f6edit browsui_37ea000+0x3edit
139af8f8 0c027efc coredll_3f4a000+0x1edit
139af900 0c0289f0 gwes_c010000+0x17efc
139af928 0c024544 gwes_c010000+0x189f0
139af9a0 0c0248a4 gwes_c010000+0×14544
139afa00 0c0bb250 gwes_c010000+0x148a4

Windows Phone 7′de debug işlemi dediğim gibi şu an için kısıtlı. Emulator üzerinden çalışıyorsanız emulatorunuzu regedit yardımıyla Console-Enabled yapıp , consoledan emulator processlerini takip edebilirsiniz.

Bir crash meydana geldiğinde analiz edemeseniz de biraz bilgi sahibi olabilirsiniz. Console çıktısı herhangi bir crash meydana geldiğinde şu şekilde olacaktır;

PID:011F0232 TID:0C5900C2 Exception ‘Access Violation’ (0xe): Thread-Id=0c5900c2
(pth=c0587818), Proc-Id=011f0232(pprc=c051f0f8) ‘Iexplore.exe’, VM-active=011f02
32(pprc=c051f0f8) ‘Iexplore.exe’
PID:011F0232 TID:0C5900C2 PC=8341c457(???+0x8341c457) RA=41c89c5d(mshtml.dll+0×0
02a9c5d) SP=0367ec78, BVA=8341c457

Bu yazıda kısaca mobil platformlarda crash analizi nasıl yapılır gördük ve araçlarımızı tanıdık. Yeni yılda herkese mutluluklar ve bol güvenli günler.

Celil Ünüver, SignalSEC

Reply