Security Expert Network Editor Login | Register Ekle

root > Kriptografi
Binary Modification (Açıklıkları Yamama) - Kriptografi - root \ Cyber-Security
FatihYILDIZ
(Relased 23.01.2011 15:34:25)


Binary Modification (Açıklıkları Yamama)
Güvenlik dünyasında uygulama güvenliğinin önemi tartışılamaz. Bugtraq, Full-disc vb. e-postal listelerini takip ediyorsanız, birçok zero-day güvenlik açığının yayınlandığını görebilirsiniz.

Bu yazıda “disassembler” yardımıyla güvenlik zaafiyeti bulunan programların nasıl yamalanacağı temel düzeyde gösterilecektir. Patching ?

Bu makalede anlatılacaklar literatürde “hotpatching” veya “runtime patching” olarak da bilinmektedir. Disassembler vb. yardımıyla bir programın “binary” kodlarının belli bir amaç için değiştirilmesine “patching” denilebilir.

Tersine mühendislerin (reverse engineers) bir çok işlemde kullandığı bir teknik. (API Hooking, Cracking , Code injection vb.) Ancak bu makalede “patching” tekniği uygulama açıklarının yamalanması açısından ele alınacaktır.

Alet Çantası
Her tersine mühendisin kullandığı bilinen programlar (debuggers, disassemblers, hex editor) bu makalede anlatılacak tekniği uygulamada yardımcı olabilirler.

Ancak IDA Pro, Ollydbg gibi “inline assembler” ve “binary edit” özelliği olan debugger/disassembler yazılımları yapılacak işi kolaylaştıracaktır. Tabi bu “inline assemble” ve binary edit özelliklerinin “x86” çalıştırılabilir dosyaları için geçerli olduğu unutulmamalıdır.

Örneğin bir ARM Executable(çalıştırılabilir) dosyası üzerinde patch işlemi yapılacaksa, IDA sadece disassemble kısmında yardımcı olacak, “patching” için işlemci kaynak kitaplarındaki Opcode (instruction encoding) gibi konulara göz atmanın faydası olacaktır.

Uygulama
Aşağıdaki hafıza taşması zaafiyeti barındıran program üzerinde patching işlemi yapılacaktır. Önce programı derleyin ve artık kaynak kodunu unutun çünkü bu bizim kapalı kaynak kodlu yazılımımız.

#include
int main()
{
char buf[16];
printf("\\nString giriniz:");
scanf("%s", &buf);
return 0;
}

Şekil - 1 Hafıza Taşması Zaafiyeti Barındıran Program

*Hafıza taşması nedir, nasıl oluşur, etkileri vb. konularının bilindiği varsayılarak bu konulara değinilmiyecektir.


Resim - 1 Hafıza Taşması Zaafiyeti Barındıran Program Kaynak Kodu

Disassembler çıktısında ve öncesinde kaynak kodda da görüldüğü gibi “scanf” fonksiyonu girilen string’in uzunluğunu kontrol etmiyor. (%s) Bildiğiniz gibi scanf, sprintf gibi fonksiyonlarda format karakterinin önüne eklenecek sayı ile uzunluk kontrolü yapılabilir. (%15s veya %.15s gibi)

Şimdi adım adım bu hatayı düzeltmeye çalışalım. Bu düzeltme işlemi için alet olarak patching işlemlerinde daha kolay bir ortam sunduğu için Ollydbg tercih edilmiştir. IDA Pro ise analiz işlemlerinde tercih edilecektir.

Ollydbg ile vulnerable(savunmasız) programı açalım;



Disassembler’da görüldüğü gibi program string’i hafızaya taş

ımak için “00403011” adresini çağırıyor.

Ollydbg’da CTRL+G yapıp 00403011 adresine gidelim;



Resim - 3 Hafıza Taşması Zaafiyeti Barındıran Programda Patching Uygulaması

AND EAX, 694D0073 satırına sağ tıklayıp Assemble seçeneğine tıklayalım. %s ’i %15s olarak değiştirip fonksiyonun “buf” değişkenine kopyalanacak stringin uzunluğunu kontrol etmesi sağlanacak.

“AND EAX, 694D0073” kodunu “AND EAX, 733531” ile değiştiriyoruz. (313573 ün ascii karşılığını ve neden tersten girildiğini biliyorsunuz (lifo))

Evet bütün işlem bu, programın vulnerable kısmı kolayca yamalandı. Programı bu haliyle kaydetmek için değiştirilen satıra sağ tıklanıp “Copy to executable> Selection” seçeneğine tıklanır. Açılan yeni pencereyi kapatırken programın orjinalinden farklı olduğunu bu haliyle kaydetmek isteyip istenilmediği sorulacaktır. Programı kaydettikten sonra IDA ile son haline bir göz atarsak ;



Resim - 4 Patching Sonrası Program Kaynak Kodu

Bu yazıda “disassembler” yardımıyla güvenlik zaafiyeti bulunan programların nasıl yamalanacağı hususu temel düzeyde ele alınmıştır.


Derecelendir
Kaynak http://www.phreedom.org/presentations/hotpatching-and-third-party-patches/hotpatching-and-third-party-patches.pdf http://www.securityarchitect.org/binary-english.pdf
İçerik İhbarı
Bağlantılar Bg.org.tr

CS - Security Expert Network AUP&TOS