Ram-BufferOverFlow

AideSuke

Üye
14 Mar 2022
63
17
Selamlarr ben AideSuke bugün sizlere ram nedir nasıl çalışır ve ram zafiyeti olan BufferOverFlow olayı nasıl gerçekleşir onu anlatacağım hadi konumuza geçelim

Ram Nedir ?

Türkçesi "rastgele erişimli hafıza" olan Ram geçici depolama alanıdır bu donanım diğerlerinden farklı bir bellektir bilgisayarlar genellikle o an üzerinde çalıştıkları bilgileri Ram kısmında saklarlar bu şekilde depolanan verilere hızlıca ulaşılır bilgisayar kapatılırsa tüm bu geçici veriler silinir

Ram Nasıl Çalışır ?

ramin içince 0 ve 1 (Binary Sistemi) vardır işlemci talimatı gönderir ram üzerindeki adreslerde ilgili bilgi bulunur ve adres ram kontrolcüsüne verilip belirli adreslere yollanır ve gönderilen verileri okurlar

Şimdi gelelim yazılım kısmına


Ram Bölümleri

Ram kendi içerisinde önemli yapılar barındırır bu yapılar

1-text (Code) : Bu kısım programa ait makine kodunu yani programın CPU’ya göndereceği komutları tutar

2-Data (Static-Global) : Bu alanda static ve global değişkenler tutulur önceden değer almamış değişkenler ise Data içinde "BSS" adı verilen yerde bulunur Programın çalışma sırasında değişkenlerin değerleri değişebileceğinden, bu bellek segmenti okuma-yazma iznine sahiptir

3-Stack : işlemci tarafından verilerin geçici olarak saklandığı veya uygulamanın kullandığı değişkenlerin tutulduğu ve büyüklüğü işletim sistemine göre değişen bellek bölgesidir
Yığının büyüklüğü yönetimi, programcının değil uygulamanın sorumluluğundadır stack bellek alanı program çalışmaya başladığı anda belirlenir ve daha sonra bu alanın boyutu değiştirilemez

Stack için ram belleğiniz kaç gb olursa olsun programlar tarafından verilen belli bellek sınırları vardır bu şekilde stack bu bellek alanını aşamayacaktır ancak bu hafıza yönetimini yapan programcılar bazen yanlış yapılandırma yapabilirler eğer hafıza yönetimi yanlış yapılmış olursa "StackOverFlow" olayı gerçekleşir Bu durumdan faydalanmak isteyen bir hacker sisteme bir exploit kodlayarak sisteme sızabilir

4-Heap : Stack bölgesinde olduğu gibi heap alanlarıda RAM da bulunan hafıza alanlarıdır Genellikle ne kadar yer kaplayacağı belli olmayan değişkenlerin (nesnelerin) veya büyük verilerin geçici olarak saklanması için kullanılır Heap alanı, program, bellek üzerinde açık olduğu sürece yaşamaya devam eder Bu yüzden genel (global) ve statik (static) değişkenler bu alan içinde tutulur


Stack Ve Heap farkları

1-Stack bellekten statik olarak yer tahsisi için kullanırken Heap dinamik olarak yer tahsis eder
2-Stack Erişimi hızlı iken Heap erişimi yavaştır
3-Stack verileri hemen silerken Heap çöp toplama mekanizmasına bağlıdır
4-Stack genişletilemezken Heap işletim sisteminden kendine yer ayırtabilir
5-Stack'de değer tipleri pointer ve adresde saklanırken Heap kısmında ise referans değerleri saklanır.

kullanacağınız yerin boyutunu tam olarak biliyorsanız Stack ihtiyacınız olan boyutu tam olarak bilmiyorsanız Heap kullanımı daha mantıklı bir tercih olacaktır

http://www.abdullahfurkankoc.com/wp-content/uploads/2019/12/bellekler.jpg bu resim size Stack Ve Heap konusunu az çok anlatacaktır

şimdi size bir tane kod paylaşacağım tüm bu bölümleri içeren bir kod çıktısı



#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int g_uninit; /* İlk değer atanmamış global değişken BSS bölgesinde yer alır. */
int g_init = 7; /* İlk değer atanmış global değişken DS bölgesinde yer alır. */

int main(void)
{
static int id_uninit; /* İlk değer atanmamış static değişken BSS bölgesinde yer alır. */
static int id_init = 21; /* İlk değer atanmış static değişken DS bölgesinde yer alır. */
char *pdizi = malloc (sizeof(char) * 14); /* Dinamik olarak tahsis edilmiş Heap bölgesinde yer alır. */
int id=35; /* Stack bölgesine yüklenen yerel değişken */

strcpy(pdizi, "Bellek düzeni");

printf("g_uninit: %d g_init: %d id_uninit: %d id_init: %d pdizi: %s id: %d\n", g_uninit, g_init, id_uninit, id_init, pdizi, id);
printf("g_uninit: %p g_init: %p id_uninit: %p id_init: %p pdizi: %p id: %p", &g_uninit, &g_init, &id_uninit, &id_init, pdizi, &id);

free(pdizi);

return 0;
}

Kod C dilinden alıntıdır anlayıp anlamamınız önemli değil Kodların nerelerde depolandığını anlamanız yeterli olucaktır

Şimdi gelelim BufferOverFlow kısmına

BufferOverFlow nedir ?

herhangi bir uygulama; internet veya özel bir ağ ile iletişim kurarken bazı veriler almalıdır. Bu veriler geçici olarak, bellekte tampon adı verilen bir alanda saklanır. Uygulamayı yazan programcı dikkatli olmadığı takdirde, bu durum bir zafiyete neden olabilir. Ancak dikkatli olunduğunda arabellek sınırını aşan bilgiler kesilebilir ve reddedilerek güvenlik sağlanabilir

kısaca bir program çalışırken bilgisayar hafızasında o ana ayrılmış alandan daha fazla veri yazdırabildiğiniz zaman bilgisayar sapıtıyor bu sapıtmadan yararlanarak zararlı kod enjeksiyonu mümkündür


Daha önce hafıza yönetimden bahsetmiştim eğer hafıza yönetimi düzgün yapılmazsa stack tarafından taşma (aşırı yüklenim) gerçekleşebilir bu durumu daha detaylı anlamak için stack bölümlerine bakalım

1-Extended Stack Pointer
2-Buffer: Hafizada ard arda dizili turden veri tipi (int, char)gibi depolayan hafiza blogudur
3-Extended Base Pointer
4-Extended Instruction Pointer : programımıza emir verdiğimiz kısımdır dosya açmak vb

1 ve 3 detay kısımları onlara girmeyeceğim

Normalde Stack içerisinde bulunan bir değişkene herhangi bir değer atadığımızda bu değer buffer alanı içerisinde kalır Eğer kötü hafıza yönetiminden oluşabilecek bir açık söz konusu ise bu açığın bulunduğu yere Uzun bir karakter dizisi yazacak olursak Buffer'dan taşan veriler "Extended Instruction Pointer" yapısına kadar gelebilir ve hatta bu yapının içine girerek o yapıya enjekte edecek shell kodu çalıştırılabilir

Kafanız karıştıysa birde şunu okuyun


Hedef sistemde çalıştırılabilecek uygulama sayısı ve her uygulamadaki arabellek sayısı göz önüne alındığında, düzgün yazılmamış veya denetlenmemiş kodlar sayesinde en az bir arabellek bulundurma olasılığı her zaman vardır. Orta derecede programlama becerisine sahip olan bir kişi, ara belleğe tutabileceğinden daha fazla veri yüklemesi yapabilir. Örneğin, arabellek 1024 bayt veri tutabilir ve bunu 2048 bayt ile doldurmaya çalışırsanız, fazladan 1024 bayt ek belleğe yüklenir

Ekstra veri aslında kötü amaçlı bir programsa, yeni ayrılan belleğe yüklenir ve ilgili sistemde çalışabilir. Elbette ki o anda bellekte çalışan öğenin üzerine yazması ve uygulamanın çökmesine neden olması da mümkündür. İlgili zafiyet işletim sisteminde bulunduysa, işletim sisteminin de hata vererek çökmesi sağlanabilir. Her iki durumda da, arabellek taşması çok ciddi sonuçlar doğuracaktır

Hacker BufferOverFlow olayını nasıl saptar ?

Hacker bahsettiğimiz yapıya yani "Extended Instruction Pointer" kısmına gelinceye kadar karakter yazar ve bu bölüme geldiğinde bir komut enjekte edebilir bu komut bahsedilen bölğmde çalıştırılınca hacker amacına ulaşır ve kendi bilgisayarı ile hedef bilgisayar arasında bir backdoor oluşur bunu yapabilmek için ilk olarak açığın varlığını tespit etme ve daha sonra programın kaçıncı karakterden sonra çöküceğini saptaması gerekir

sizlere harika bir BufferOverFlow videosu bırakıyorum




Biliyorum konu birazcık karışık oldu ama mantığını kavradıysanız yeterli olucaktır diye düşünüyorum bilerek görsellik eklemedim bunları kafanızda canlandırmasını size bırakıyorum

Sağlıcakla Kalın Hoşcakalınn
 

ERSSE

Katılımcı Üye
6 Kas 2019
465
138
Street
Selamlarr ben AideSuke bugün sizlere ram nedir nasıl çalışır ve ram zafiyeti olan BufferOverFlow olayı nasıl gerçekleşir onu anlatacağım hadi konumuza geçelim

Ram Nedir ?

Türkçesi "rastgele erişimli hafıza" olan Ram geçici depolama alanıdır bu donanım diğerlerinden farklı bir bellektir bilgisayarlar genellikle o an üzerinde çalıştıkları bilgileri Ram kısmında saklarlar bu şekilde depolanan verilere hızlıca ulaşılır bilgisayar kapatılırsa tüm bu geçici veriler silinir

Ram Nasıl Çalışır ?

ramin içince 0 ve 1 (Binary Sistemi) vardır işlemci talimatı gönderir ram üzerindeki adreslerde ilgili bilgi bulunur ve adres ram kontrolcüsüne verilip belirli adreslere yollanır ve gönderilen verileri okurlar

Şimdi gelelim yazılım kısmına


Ram Bölümleri

Ram kendi içerisinde önemli yapılar barındırır bu yapılar

1-text (Code) : Bu kısım programa ait makine kodunu yani programın CPU’ya göndereceği komutları tutar

2-Data (Static-Global) : Bu alanda static ve global değişkenler tutulur önceden değer almamış değişkenler ise Data içinde "BSS" adı verilen yerde bulunur Programın çalışma sırasında değişkenlerin değerleri değişebileceğinden, bu bellek segmenti okuma-yazma iznine sahiptir

3-Stack : işlemci tarafından verilerin geçici olarak saklandığı veya uygulamanın kullandığı değişkenlerin tutulduğu ve büyüklüğü işletim sistemine göre değişen bellek bölgesidir
Yığının büyüklüğü yönetimi, programcının değil uygulamanın sorumluluğundadır stack bellek alanı program çalışmaya başladığı anda belirlenir ve daha sonra bu alanın boyutu değiştirilemez

Stack için ram belleğiniz kaç gb olursa olsun programlar tarafından verilen belli bellek sınırları vardır bu şekilde stack bu bellek alanını aşamayacaktır ancak bu hafıza yönetimini yapan programcılar bazen yanlış yapılandırma yapabilirler eğer hafıza yönetimi yanlış yapılmış olursa "StackOverFlow" olayı gerçekleşir Bu durumdan faydalanmak isteyen bir hacker sisteme bir exploit kodlayarak sisteme sızabilir

4-Heap : Stack bölgesinde olduğu gibi heap alanlarıda RAM da bulunan hafıza alanlarıdır Genellikle ne kadar yer kaplayacağı belli olmayan değişkenlerin (nesnelerin) veya büyük verilerin geçici olarak saklanması için kullanılır Heap alanı, program, bellek üzerinde açık olduğu sürece yaşamaya devam eder Bu yüzden genel (global) ve statik (static) değişkenler bu alan içinde tutulur


Stack Ve Heap farkları

1-Stack bellekten statik olarak yer tahsisi için kullanırken Heap dinamik olarak yer tahsis eder
2-Stack Erişimi hızlı iken Heap erişimi yavaştır
3-Stack verileri hemen silerken Heap çöp toplama mekanizmasına bağlıdır
4-Stack genişletilemezken Heap işletim sisteminden kendine yer ayırtabilir
5-Stack'de değer tipleri pointer ve adresde saklanırken Heap kısmında ise referans değerleri saklanır.

kullanacağınız yerin boyutunu tam olarak biliyorsanız Stack ihtiyacınız olan boyutu tam olarak bilmiyorsanız Heap kullanımı daha mantıklı bir tercih olacaktır

http://www.abdullahfurkankoc.com/wp-content/uploads/2019/12/bellekler.jpg bu resim size Stack Ve Heap konusunu az çok anlatacaktır

şimdi size bir tane kod paylaşacağım tüm bu bölümleri içeren bir kod çıktısı



#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int g_uninit; /* İlk değer atanmamış global değişken BSS bölgesinde yer alır. */
int g_init = 7; /* İlk değer atanmış global değişken DS bölgesinde yer alır. */

int main(void)
{
static int id_uninit; /* İlk değer atanmamış static değişken BSS bölgesinde yer alır. */
static int id_init = 21; /* İlk değer atanmış static değişken DS bölgesinde yer alır. */
char *pdizi = malloc (sizeof(char) * 14); /* Dinamik olarak tahsis edilmiş Heap bölgesinde yer alır. */
int id=35; /* Stack bölgesine yüklenen yerel değişken */

strcpy(pdizi, "Bellek düzeni");

printf("g_uninit: %d g_init: %d id_uninit: %d id_init: %d pdizi: %s id: %d\n", g_uninit, g_init, id_uninit, id_init, pdizi, id);
printf("g_uninit: %p g_init: %p id_uninit: %p id_init: %p pdizi: %p id: %p", &g_uninit, &g_init, &id_uninit, &id_init, pdizi, &id);

free(pdizi);

return 0;
}

Kod C dilinden alıntıdır anlayıp anlamamınız önemli değil Kodların nerelerde depolandığını anlamanız yeterli olucaktır

Şimdi gelelim BufferOverFlow kısmına

BufferOverFlow nedir ?

herhangi bir uygulama; internet veya özel bir ağ ile iletişim kurarken bazı veriler almalıdır. Bu veriler geçici olarak, bellekte tampon adı verilen bir alanda saklanır. Uygulamayı yazan programcı dikkatli olmadığı takdirde, bu durum bir zafiyete neden olabilir. Ancak dikkatli olunduğunda arabellek sınırını aşan bilgiler kesilebilir ve reddedilerek güvenlik sağlanabilir

kısaca bir program çalışırken bilgisayar hafızasında o ana ayrılmış alandan daha fazla veri yazdırabildiğiniz zaman bilgisayar sapıtıyor bu sapıtmadan yararlanarak zararlı kod enjeksiyonu mümkündür


Daha önce hafıza yönetimden bahsetmiştim eğer hafıza yönetimi düzgün yapılmazsa stack tarafından taşma (aşırı yüklenim) gerçekleşebilir bu durumu daha detaylı anlamak için stack bölümlerine bakalım

1-Extended Stack Pointer
2-Buffer: Hafizada ard arda dizili turden veri tipi (int, char)gibi depolayan hafiza blogudur
3-Extended Base Pointer
4-Extended Instruction Pointer : programımıza emir verdiğimiz kısımdır dosya açmak vb

1 ve 3 detay kısımları onlara girmeyeceğim

Normalde Stack içerisinde bulunan bir değişkene herhangi bir değer atadığımızda bu değer buffer alanı içerisinde kalır Eğer kötü hafıza yönetiminden oluşabilecek bir açık söz konusu ise bu açığın bulunduğu yere Uzun bir karakter dizisi yazacak olursak Buffer'dan taşan veriler "Extended Instruction Pointer" yapısına kadar gelebilir ve hatta bu yapının içine girerek o yapıya enjekte edecek shell kodu çalıştırılabilir

Kafanız karıştıysa birde şunu okuyun


Hedef sistemde çalıştırılabilecek uygulama sayısı ve her uygulamadaki arabellek sayısı göz önüne alındığında, düzgün yazılmamış veya denetlenmemiş kodlar sayesinde en az bir arabellek bulundurma olasılığı her zaman vardır. Orta derecede programlama becerisine sahip olan bir kişi, ara belleğe tutabileceğinden daha fazla veri yüklemesi yapabilir. Örneğin, arabellek 1024 bayt veri tutabilir ve bunu 2048 bayt ile doldurmaya çalışırsanız, fazladan 1024 bayt ek belleğe yüklenir

Ekstra veri aslında kötü amaçlı bir programsa, yeni ayrılan belleğe yüklenir ve ilgili sistemde çalışabilir. Elbette ki o anda bellekte çalışan öğenin üzerine yazması ve uygulamanın çökmesine neden olması da mümkündür. İlgili zafiyet işletim sisteminde bulunduysa, işletim sisteminin de hata vererek çökmesi sağlanabilir. Her iki durumda da, arabellek taşması çok ciddi sonuçlar doğuracaktır

Hacker BufferOverFlow olayını nasıl saptar ?

Hacker bahsettiğimiz yapıya yani "Extended Instruction Pointer" kısmına gelinceye kadar karakter yazar ve bu bölüme geldiğinde bir komut enjekte edebilir bu komut bahsedilen bölğmde çalıştırılınca hacker amacına ulaşır ve kendi bilgisayarı ile hedef bilgisayar arasında bir backdoor oluşur bunu yapabilmek için ilk olarak açığın varlığını tespit etme ve daha sonra programın kaçıncı karakterden sonra çöküceğini saptaması gerekir

sizlere harika bir BufferOverFlow videosu bırakıyorum




Biliyorum konu birazcık karışık oldu ama mantığını kavradıysanız yeterli olucaktır diye düşünüyorum bilerek görsellik eklemedim bunları kafanızda canlandırmasını size bırakıyorum

Sağlıcakla Kalın Hoşcakalınn
Ellerinize sağlık güzel bir konu olmuş
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.