Mobil Platformlarda Debugging ve Crash Analizi

Gömülü sistemler gün geçtikçe hayatımızda önem kazanmakta ve akıllı telefonlar giderek yayılmakta. 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ı!

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 istedim. 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 bir yolu yok.

Şu an için sadece Platform Builder özelliği olan developer phone’larda debug edebilme imkanı bulunmakta. Yani sadece Microsoft ve OEM’ler debug edebiliyor.

Bu durum şu an için geçerli diyebiliriz.

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 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 , internet explorer mobile’da güvenlik testleri yaparken meydana geldi. 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 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+0x14544
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 edemesenizde 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+0x0
02a9c5d) SP=0367ec78, BVA=8341c457
 
Celil ÜNÜVER