[Beyaz Tahribat] Tampon Bellek Taşması
-
Beyaz tahribat projesi için zumsuk tarafından yazılmıştır alıntı yaparken belirtiniz.
Biliyorum biraz uzun oldu ama bir çok dökümanı birleştirip yorum katmak biraz zor oldu yazarken kollarım kptu ama emeğime deyecek umarım.Lütfen okuyunuz gerçekten değerli bilgidir.
Yazılım firmaları geliştirdikleri ürünü ilan edeilen tarihe yetiştirmek içn uğraşırlar.Bu yüzden çok çalışırlar.Biraz daha özellik ve gösterişli yaparken bazı şeyler gözden kaçar.Bunların başında hata kontrolünün uygulanamaması vardır.Hata kontrolu programın verilen herhangi bir girişe karşılık vediği sonuçları görmek için kullanılır.
Örneğin string olarak girilmesi gereken girişe string olmayan bir değer girildiğinde sonuca bakılır.Normalde uyarı vermesi gerekir ancak uyarı vermeden çalışmaya devam ederse sorun var demektir.Tampon belleğinin taşması (buffer overflow) olayı bu temele dayanır.Aceleyle yada zayıf bir kodla yazılmış uygulamalarda güvenlik açığı bulunur.
Mesela programda 5 karakter girilmesi gerekir ancak 10 karakter girilince program bunu yürütemez ve kendi belleği üzeirne yazmaya başlar.Küçük bir koliye büyük miktarda yük koymak gibidir.Öcelikle bir kaç temel konulara bakalım
YIGIN
Yığın çalışan bir bilgisayardaki işlemler için öncemli bilgiler tutan bir veri parçasıdır.Sistem kendisi için önemli olan küçük bilgileri yazar ve bunları belleğin özel bir alanı olan yığında saklar.Bir programdaki fonksiyon çağrıları ile ilgili bilgiler yığınlarda bulunur.
Bu işlemi üst üste konulan jenga oyunu gibi düşünün ama tek sıra tekr teker koyuyoruz.En üstteki parça son koyduğumuzdur.En alttaki ise ilk koyduğumuz.Yığından parça almak için en son koyduğumuzdan başlayarak alta doğru ineriz.
Bu olay modern işlemcili bilgisayarlarında son giren ilk çıkar diye bilinen lastin first out yani lifo yontemidir.Bilgisayar yığına bişeyler ekleyip çıkarırken lifo yu kullanır.Yığının üst limiti arttıkça yığın alanı büyür.İşlemci psuh komutuyla yığına veri koyar pop komutuyla yığından veri alır.
TAMPON BELLEK
tampon belleğin ne demek olduğunu en iyi programcıla rbilecektir.Mesela c programlama dilinden array lar tompan belleklerde saklanır.Tampon bellek genel olarak arka arkaya gelen veri tiplerini(dize yani array) saklamak için kullanılan bellek parçasıdır.Dizinleri dinamik değişkenleri programın çalışması esnasında (run time) yığında oluşturulur ve yine burada yok dilir.Statik değişkenler ise programı yükleme zamanında (load time) data segmenti olarak bilinen kısımlara yerleştirir.Bir program yüklerken ileri ileri dediğiniz zamandan önce bir şeyler kurulur.Bunlar data segmentine yerleştirlir.
PROSESLER
Bir proses 3 segmentte çalışmaya başlar
*kod
*data
*yığın
kod segmenti programın kodlarını yani programın talimatlar dizesini içerir salt okunur durumdadır ve programdaki tüm prosesler tarafından paylaşılır.Sonraki segment olan data segmentinde tanımlanmış veya tanımlanmamaış veriler bulnur.Yığın segmentinde ise dinamik değişkenler, fonksiyon çağrılarının geri dönüş adresleri saklanır.
PRgoramlar çalışırken kendilerine verilen cpu talimatlarını sırasıyla yerine getirirler.Cpular bu amaçla eip diye bilinen çalıştırılacak kodun adresini gösteren yazmaçlar kullanır.Eip programın çalışmasını kontrol eder ve onda çaışmakta olan programın hangi adreste olduğnu komutun başlangc noktasından itibaren belirtir.Bir fonksiyon çağrıldığında o noktaya sıçrar.Önemli olan diğer ESP be EBP denilen 2 cpu yazmacısı daha vardır.esp o andaki yığın pozisyonunu gösterir ve push pop komutlarını kullanır.EBP ise fonksiyon çalıştığı müddetçe sabit kalır referans gibidir.
Bir örnek;
void ornek(void){
char buffer1[8];
return;
}
main(){
ornek();
}
Bu c programlama dili aslında birşy yapmıyor ancak nasıl çalıştığı önemli.Burda örnek isminde bir fonksiyon oluşturuluyor ve daha sonra bu fonksiyon ana fonksiyon olan main tarafından çağrılıyor.Şimdi programın nasıl çalıştığına bakalım.Programın çalışmaya başladığında ilk olaran main çalışıyor main fonksiyonu ornek fonksiyonunu çağırıyor.Bu aşamada prgoramn tarafından yapılan tüm işlemler main fonksiyonundan ornek fonksiyonuna geçiyor.Ancak ornek fonk. çalışması bittikten sonra programın kaldığı yerde bitmesi gerekir.Çünkü programın akışına devam edilebilmesi içn main fonksiyonuna tekrar donulmelidir.
İşte bu noktada eğer fonksiyonda argüman kullanuışmışsa ilk olarak bunlar yığına konur.Eip işlemcinin hangi talimatı çalıştıracağını belirtir bir fonksiyon çağrıldığında ilgili değere sıçrama yapar.Ancak fonk. çağrısı yapılınca sistmein main fonksiyonundaki eip değerini unutmamak için bunu kaydetmesi gerekir.İşte bu değer yığına geri dönüş adresi olarak kopyalanır.
Hacker olarak bu olaya bakarsak geri dönüş adresini bilebilirsek bunu değiştirebilirsek kendi kodları yerine bizim belirttiğimiz kodları çalıştımasını sağlaroz.Bu nedenle geri dönüş noktası tampon bellek taşmasında önemli bir yere sahip.Ayrıca crack mantığıda budur.
Programın nasıl çalıştığına geri dönelim.Geri dönüş adresi kopyalandıktan sonra fonksiyondan çıkıldığında tekrar yerine konulabilmesi için ebp değeri kaydedilive esp ebpye kopyalanır.Böylece ebpnin yığınının üstünü görmesi sağlanır.Bu işlemin amacı her fonksiyonun kendi yığınını kullanmasını sağlamaktır.Son olarak da fonksiyonun tuttuğu lokal değişkenler yığında bir yer ayırır.
TAMPON BELLEK TAŞMASI NASIL GERÇEKLEŞİR
Smashing the stack for fun and profit adlı makale ile bu tekniğin popülerleşmesini sağlayan aleph1 konu;
void ornek(char*str){
char buffer[16];
strcpy(buffer,str);
}
void main(){
char large_string[256];
int i;
for( i = 0;i < 255;i++
large_string = 'A';
ornek(large_string);
}
Burda görüldüğü gibi ana fonksiyon main içinde large_string değişkeni için 256 karakter ayrılmış.Daha sonra large_String değişkenine 255 kere A harfi veriliyor ve daha sonra da ornek isimli fonksiyona atanıyor.Oysa ornek fonksiyonunda sadece 16 karakterlik yer ayrılmış.Buna ramen strvpy ile *str nin içeriği stringde boş bir karakter görene kadar buffer []'a kopyalanıyor.Aslında yapılan küçük bir alana büyük miktarda veri sığdırmaya çalışmaktı.Bu durumda kpylanamak istenen A lar küçük bir alana sığmayacağından geri dönüş adreside bu A lar ile dolacaktır.Program çalışmayı bitirdiğinde sıradaki çalıştırılacak talimat için geri dönüş adresine bakacak.Ancak burda a ların binary karşılığını görecektir.Dolayısıyla işlem yürütemeyecek segmentation faul hatasını verecektir.
PEKİ AHCKERLAR NASIL KULLANIR?
Geri dönüş adreesini alar ile doldurarak programın çökmesini sağlamak hacker için yeterli olmayacaktır.Bunun yerine geri dönüş adresini kendi kodlarını çalıştıracak şekilde değiştirse bu durumda daha büyük bir fırsat yakalamış oalcaklardır.Bu amaçla lowlebel olarak bilinen makina dili komutlarından oluşan ve yeni bir geri dçnüş adresini programa enjekte ederler.Bu yeni adres sayesinde programa yerleştirdikleir kodların adreslerini göstererek onların çalıştırılmasını sağlarlar.Mesela unix e yapılacak en iyi iş bir kabuk çalıştırmakdır bu sayede her istediği komutu yazabilir.Widnws ta ise bu iş dll dosyaları üzerinden yapılır.
Tampon belleğini taşırma olayı adım adım yapılmayacak kadar zor,zahmetli ve uzun iştir.İnternette bu iş için çok sayıda program vardır.Üstelik hackerın yada bunu kullanan kişinin yukarda anlatılan karmaşık olayları bilmesine gerek yoktur.Ancak esas hacker bunları bilir lamer olanlar ise sadece programları kullanır bu yüzden diyorum sistemi bilmeden sızamassınd iye sızarsanda işine pek yaramaz gelişemessin.
Programları kullanıp bilmeyenler genelde lamerlerdir.PRogramdaki güvenlik açığı uzun ve sabırlı bir çalışmanın ardından ortaya çıkarılmıştır.Lamerlerin yağtığı sadece ilgili güvenlik açığı ile ilgili bir kodu internetten bulup hedefe saldırmak.
Bir çok lamer günümüzde bu olayı farklı yolla yapıyor exploitler ile binlerce site hackleniyor ama ne bir açık bulabiliyorlar nede kendileri exploit yapabiliyor.
-
kaynak için saol zumsuk
forever beyaz tbt kampanyası:P:P -
estafurulla devamı gelecek ne cevher dokumanlar var ama oturupta içlenrinden seçip karıştırıp bişeyler eklemem lazım birazcık ellerim ağrıyor yavaş yavaş olacak forumsörce beyaz tahrbiat yazacaksın abow bi bakacan mayax dökümanlar :) yakında...
-
süper döküman olmuş hocam advanced seviye hackingin giriş seviyesi bu dökümandır
-
saolasın ir2 yavaş yavaş hem sistem hemde hacking türüne yoğunlaştım bu tür dökümanlar eklemeye çalışıcam.Biraz kısa gibi ama inanır mısın tam 1 saatimi aldı.
Çok yararlı güzel bişey çıktığına inanıyorum ancak oturup okyacak adam sayısı kaçtır merak ediyorum.Umarım bir çok kişi okur ve bir çok olay hakkında bilgisi az biraz olur.Çünkü içinde işlemci, prgoramlama, crack bir dolu şeyin basit temel açıklaması var.
-
Helal Olsun Klavye Tuşlarına Saqlık..
-
clake dökümanları okuyan olduktan sonra ben var gücümle yazarım.Bilgi güçtür paylaştıkça güçlenirsin :)Yani beyaz tahribat projesi sürdüğü halde dökümanlar daha hızlı birşekilde gelecektir.
http://beyaztahribat.sitemynet.com/index.htm
Beyaz tahribatın amacı ne vs.. yazdım kısaca merak edenler en kısa şekli. -
duygulandim BOFE :=) aleph :D:D anlayan anliyor :P
-
bir programı çalıştırdığınız da programın nerede biteceğini bilemezsiniz. dolayısıyle bitiş noktası başlangıç adresindan sonrasına yazılır. program bittiğinde bu adrese yönlendirilir ve kapanma süreci başlar. dediğin gibi burda 3 karakterlik yere 5 karakterlik sonuc yazman taşmaya sebep olur. ama memory de hangi adrese gideceği önemli. eğer memory de farklı bir adrese taşma yapabilirsen bu işletim sistemini dağıtabilmek anlamına gelir. çünkü memoryden en son yönlendirilen adres kapanış rutini sanıldığından ordaki kod her halükarda çalıştırılmak zorundadır. işte oraya virüsünüzün yada exploitinizin kodunu döşeyebilirseniz. meydan size kalmıştır.
minimum taşma maximum koruma için www.openbsd.org -
güzel paylaşım ellerine sağlıkk :)
-
bir programı çalıştırdığınız da programın nerede biteceğini bilemezsiniz. dolayısıyle bitiş noktası başlangıç adresindan sonrasına yazılır. program bittiğinde bu adrese yönlendirilir ve kapanma süreci başlar.
---------------------------------------------
Hoca programın bitiş noktası derken neyi kasdettin :S Program akışı giriş noktasıyla başlıyor.Bitirilmesi gereken noktalarda -bunların yeri belli- exitprocess e zıplanıyor.
Toplam Hit: 15424 Toplam Mesaj: 19
