gdb i̇le tersine mühendisliğe giriş

7

Click here to load reader

Upload: ahmet-han

Post on 07-Jul-2015

97 views

Category:

Technology


2 download

DESCRIPTION

Reverse Enginneering With Gdb

TRANSCRIPT

Page 1: Gdb i̇le tersine mühendisliğe giriş

GDB İle Tersine Mühendisliğe Giriş

Bu yazımız linux sistemlerde tersine mühendisliğe giriş niteliğinde olup; temel olarak basit bir C programı ile debugging yöntemleri üzerine olacaktır. Ön bilgi olarak temel C programlama dili syntax’ı, linux komut satırı ve gcc, gdb araçları ile ilgili araştırma yapmanız gerekmektedir. Koyu renkli linklemelere tıklayarak konu ile ilgili referans gösterilen kaynaklara ulaşabilirsiniz.

Bilgisayarda bir uygulama veya donanım için hataları tespit etmek, kodları incelemek ve binary

düzeyde gerçekleştirdiği sistem çağrılarını izlemek güvenli yazılım geliştirme açısından önemlidir.

Reverse enginneering’e giriş için öncelikle PE(Portable Executable) yada ELF gibi dosya formatları

bilinmelidir. Örnek verecek olursak Windows’ta bir uygulamayı(exe) çalıştırdığımız zaman; bir

süreç(process) oluşturulur ve bu süreçlere bir sanal hafıza (virtual memory) tahsis edilir. Sürecin

hafıza blokları kullanılarak uygulama çalışır. Process hafızası üç ana bileşenden oluşur. Bunlar Code

Segment, Data Segment ve Stack segment katmanlarıdır. Code segment(.txt) insanların yazdığı

kodların bulunduğu kısım; Data segment(.data) global ve statik değişkenleri içeren,sanal adres

alanının bir bölümü, Stack segment geçici değerlerin bulunduğu hafıza kısmıdır.

Page 2: Gdb i̇le tersine mühendisliğe giriş

Temel dosya işleyiş yapısı bilgisini verdikten sonra önce [ctrl + alt + T] komutunu kullanarak linux

terminalimizi açalım. Daha sonra ise root(linux sistemlerde en yetkili kullanıcı) değilsek; [sudo su

­root] komutunu kullanarak root kullacı olalım. Daha sonra nano editörünü basit bir C uygulaması

oluşturalım. Bunun için [nano ornek.c] komutunu kullanabilirsiniz. Açılan nano editörü ekranında

resimdeki gibi bir küçük C uygulaması hazırlayalım. Ardından ctrl+r(dosyayı oku) ve ctrl+o(dosyaya

yaz) komutlarını kullandıktan sonra ctrl+x(cıkıs) komutu ile nano editöründen cıkalım.

Page 3: Gdb i̇le tersine mühendisliğe giriş

Yazdığımız basit C programının nano editöründen kaynak görüntüsü aşağıdaki gibidir. Basit bir

isaretçi tipinde çağrı yapılan bir fonksiyon ve main fonksiyonundan oluşmaktadır.

Şimdi yazdıklarımızı [gcc ­o yeni yeni.c] komutu ile derleyelim. Herhangi bir hata yoksa ve derleme

işlemi başarılı ise yukarıdaki yeşil renkli executable(çalıştırılabilir) dosyayı görebilirsiniz. [file yeni]

komutu ile yeni çalıştırılabilir dosyası ile ilgili bilgilere bakabilirsiniz.

Page 4: Gdb i̇le tersine mühendisliğe giriş

Daha sonra dosyamızı [./yeni] komutunu vererek çalıştıralım. Programın cıktısı resimdeki gibi

olucaktır. Uygulamamızın calıstığını ekran cıktısı ile görebilirsiniz. Şimdi ise [gdb yeni] komutunu

vererek çalıştıralım. Daha sonra (gdb) run olacak olacak şekilde yeniden deneyelim ve çalıştığını

görebilirsiniz.

Assembly kodlarını görmek için gdb içersine iken [layout asm] komutunu verelim. Daha sonra [printf

"%s\n", 0x80484f8] komutunu verelim ve Merhaba Dünya yazısındaki M yi görebilirsiniz.

Page 5: Gdb i̇le tersine mühendisliğe giriş

Tersine mühendislik ile ilgili bir çok hex editör, komut satırı aracı ve değişik tool bulunmaktadır.

Burada önemli olan gerekli toolları reversing yaparken gerektiği zamanda kullanmaktır. [readelf ­h

yeni] komutunu verdiğiniz zaman elf dosya formatı objelerine ulaşabilirsiniz.

Page 6: Gdb i̇le tersine mühendisliğe giriş

Debugging, Reverse enginneering’ te çok kullanılan bir araçta hexdump aracıdır. Örnekte

belirttiğimiz dosyamıza [hexdump ­C ­n 100 yeni ] komutunu vererek dosya ile ilgili hexadecimal

olarakta görüntüleyebilirsiniz.

Tersine mühendislik kavramı stuxnet kavramından sonra daha da önem kazandı. İran’da bulunan

Siemens Scada sistemlerinin belirli modülülünün belirli bir ürününde ortaya çıkan stuxnet

vakasında, APT(Advanced Persistent Threat), hedef odaklı gelişmiş ileri düzey bir tehdit olduğu için

Page 7: Gdb i̇le tersine mühendisliğe giriş

sadece bilgisayar bilimlerinde değil; elektronik, mekatronik, makina bir çok sistemin farklı şekillerde

istismarının düşünüldüğü söylenmektedir. Tersine mühedislik kavramı sadece scada sistemler,

bilgisayar, yazılım tarafında düşünülmemelidir. Buradan stuxnet ile ilgili videoya ulaşabilirsiniz.