0Pricing
Cyber Security Academy · Ders

Tersine Mühendislik ve Pwn Temelleri

Tersine mühendisliğe ve ikili dosya istismarına giriş.

Tersine Mühendislik ve Pwn Temelleri, CoddyKit'te ücretsiz bir Cyber Security Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cyber Security Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cyber Security Academy kursu toplamda 4 dersten oluşur.

Tersine Mühendislik ve İkili İstismara Genel Bakış

Birbiriyle yakından ilişkili iki CTF kategorisi derlenmiş programlarla ilgilenir:

  • Tersine mühendislik (rev) — bir ikili dosyayı analiz ederek ne yaptığını anlamaya çalışırsınız; çoğu zaman amaç, parolayı denetleyen kısmı veya bayrağı yazdıran gizli mantığı bulmaktır.
  • İkili istismar — çalışan bir ikili dosyada bellek güvenliği açığı bulur ve yürütmeyi ele geçirmek için bundan yararlanırsınız; bunun amacı çoğunlukla bayrağı barındıran uzak bir hizmette kabuk başlatmaktır.

Tersine mühendislik anlamaya, ikili istismar ise bozmaya odaklanır. Her ikisi de düşük düzey kavramlara hâkim olmayı gerektirir.

Bir İkili Dosyaya İlk Bakış

Bir ikili dosyayı ayrıştırıcıda hazırlıksız biçimde açmayın. Önce hızlı komut satırı araçlarıyla ön inceleme yaparak türünü, mimarisini ve göze çarpan dizeleri öğrenin.

# Identify file type and architecture
file ./challenge

# Pull human-readable strings (flags are sometimes left in plaintext)
strings ./challenge

# Check which security mitigations are enabled
checksec --file=./challenge

Statik ve Dinamik Analiz

İkili dosyaları birbirini tamamlayan iki yolla analiz edersiniz:

  • Statik analiz — Ghidra gibi bir ayrıştırıcı veya kaynak koda dönüştürücü kullanarak kodu çalıştırmadan okuyun. Denetim akışının tamamını görürsünüz, ancak çalışma zamanı değerlerini çıkarım yoluyla belirlemeniz gerekir.
  • Dinamik analiz — GDB gibi bir hata ayıklayıcı altında programı çalıştırın ve yazmaçlardaki ve bellekteki gerçek değerleri izleyin. Tam olarak ne olduğunu görürsünüz, ancak yalnızca çalıştırdığınız yol boyunca.

Deneyimli oyuncular bu iki yöntem arasında geçiş yapar: bir kuram oluşturmak için statik olarak okur, adım adım ilerleyerek dinamik biçimde doğrularlar.

Ayrıştırılmış Kodu Okuma

Tersine mühendislik için makine kodunu okursunuz. Bu kodu akıcı biçimde yazmanız gerekmez, ancak şu örüntüleri tanımanız gerekir:

  • cmp / test yönergesinin ardından gelen bir atlama (je, jne) bir karşılaştırma ve dallanmadır; çoğu zaman parola denetimi burada yapılır.
  • call bir işlev çağırır; bağımsız değişkenler hemen öncesinde yazmaçlara veya yığına yerleştirilmiştir.
  • mov verileri yazmaçlar, bellek ve sabitler arasında taşır.

Girdinizle yapılan bir cmp işleminin ardından başarı iletisine dallanıldığını bulduğunuzda denetimi de bulmuş olursunuz. Şimdi beklenen değeri geri elde edin veya denetimi atlatın.

Kaynak Koda Dönüştürücüler İşinizi Hızlandırır

Modern kaynak koda dönüştürücüler, makine kodunu yaklaşık C koduna dönüştürür; bu kodu okumak ham yönergeleri okumaktan çok daha hızlıdır. Kaynak koda dönüştürülmüş bir parola denetimi şöyle görünebilir:

// Decompiler output (approximate)
if (strcmp(user_input, "s3cr3t_p4ss") == 0) {
    puts("Correct! Here is your flag:");
    print_flag();
} else {
    puts("Wrong.");
}

Bellek Bozulması Nasıl Başlar

İkili istismar görevleri, uzunluğunu denetlemeden girdiyi sabit boyutlu bir arabelleğe okuyan programlardan yararlanır. Yığın, yerel değişkenleri ve bir işlev tamamlandığında CPU'nun nereye devam edeceğini söyleyen kaydedilmiş dönüş adresini saklar.

Girdi yerel bir arabelleği taşırsa kaydedilmiş dönüş adresinin üzerine yazabilir. Dönüş adresini kontrol eden taraf, yürütmenin bundan sonra nereye gideceğini de kontrol eder.

// Vulnerable: no bound on how much is read into buf
void vuln() {
    char buf[64];
    gets(buf);   // reads until newline, ignores buf size
}

Klasik Yığın Arabelleği Taşması

En basit ikili istismar yöntemi, dönüş adresinin üzerine programın çağırmayı hiç amaçlamadığı bir işlevin adresini yazarak — bayrağı yazdıran gizli bir win() işlevine — atlamaktır.

Adımlar:

  • Arabelleğin başlangıcı ile dönüş adresi arasındaki tam konum farkını bulun (döngüsel desen aracı bunu hızlıca verir).
  • Hedef işlevin adresini bulun.
  • Konum farkına kadar dolgu gönderin, ardından dönüş adresinin üzerine hedef adresi yazın.
# Build the input with a Python exploit library
from pwn import *

p = process('./challenge')
offset = 72                 # bytes to reach the return address
win_addr = 0x401176        # address of the win() function
p.sendline(b'A' * offset + p64(win_addr))
p.interactive()

Modern Korunma Önlemleri

Gerçek ikili dosyalar, basit taşmaları engelleyen savunmaları etkinleştirir. Bunları checksec ile tanımanız gerekir:

  • Yığın kanaryaları — dönüş adresinin önüne yerleştirilen gizli bir değer; değer değişirse program sonlandırılır. Önce bu değeri sızdırmanız gerekir.
  • NX (eXecute yok) — yığın yürütülemez durumdadır; bu nedenle oraya yerleştirdiğiniz kabuk kodunu çalıştıramazsınız.
  • ASLR / PIE — adresler her çalıştırmada rastgeleleştirilir; hedef belirleyebilmeniz için önce bir adres sızıntısına ihtiyacınız vardır.
  • RELRO — genel konum tablosunun üzerine yazılmasını engeller.

Her önlem sizi daha ileri tekniklere yöneltir.

Dönüş Odaklı Programlama (ROP)

NX kendi kodunuzu çalıştırmanızı engellediğinde Dönüş Odaklı Programlama, ikili dosyada zaten bulunan kodu yeniden kullanır.

Her biri ret ile biten ve kısa kod parçaları olarak adlandırılan yönerge dizilerini birleştirerek işlemleri parça parça gerçekleştirirsiniz — örneğin bir yazmacı yükleyip kabuk başlatmak için bir kitaplık işlevini çağırırsınız. Zinciri yığın üzerinde kurarsınız; böylece her ret bir sonraki kod parçasına atlar.

ROP, başlangıç düzeyindeki taşmalardan, saldırgan kodunun nadiren doğrudan çalıştırılabildiği gerçek dünya istismarlarına geçişi sağlar.

Biçim Dizesi Hataları

Bir diğer klasik ikili istismar ilkesi, kullanıcı girdisinin bir yazdırma işlevine biçim bağımsız değişkeni olarak doğrudan geçirildiği biçim dizesi güvenlik açığıdır.

// Vulnerable: user controls the format string
printf(user_input);          // dangerous

// Safe: user input is data, not format
printf("%s", user_input);    // correct

Savunmacılar Bunu Neden Öğrenir

Bellek hatalarından yararlanmayı, onları önleyebilmek için kesin biçimde öğrenirsiniz. Savunma açısından çıkarımlar somuttur:

  • gets veya strcpy gibi sınırlandırılmamış girdi işlevlerini asla kullanmayın; uzunluk denetimli eşdeğerlerini kullanın.
  • Korunma önlemlerini açık tutun: varsayılan olarak kanaryalar, NX, tam ASLR/PIE ve tam RELRO kullanın.
  • Tehdit modeli izin verdiğinde bellek açısından güvenli dilleri tercih edin.
  • Biçim dizesine veya arabellek kopyalama işlemine ulaşan, kullanıcı tarafından denetlenen her değeri kod incelemesinde ciddi bir bulgu olarak ele alın.

Hızlı Kontrol

Tersine mühendisliğin ve ikili istismarın temellerini ne kadar anladığınızı sınayın.

Özet

Artık tersine mühendislik ve ikili istismar için bir yol haritanız var:

  • Her ikili dosyada derinlemesine analizden önce file, strings ve checksec ile ön inceleme yapın.
  • Mantığı anlamak için statik (ayrıştırıcı/kaynak koda dönüştürücü) ve dinamik (hata ayıklayıcı) analizi birleştirin.
  • İkili istismar, dönüş adresinin üzerine yazan yığın arabelleği taşmasıyla başlar; korunma önlemleri (kanaryalar, NX, ASLR/PIE, RELRO) çıtayı yükseltir.
  • ROP, mevcut kod parçalarını yeniden kullanarak NX'i aşar; biçim dizesi hataları güvenilmeyen biçim bağımsız değişkenlerinden kaynaklanır.
  • Her teknik, daha güvenli kod yazma ve inceleme konusunda bir savunma dersine de dönüşür.

Sırada bir araç seti oluşturacak ve çözümlerinizi yazmayı öğreneceksiniz.

Sıkça Sorulan Sorular

“Tersine Mühendislik ve Pwn Temelleri” dersi ücretsiz mi?

Evet — “Tersine Mühendislik ve Pwn Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cyber Security Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cyber Security Academy kursu toplamda 4 dersten oluşur.

“Tersine Mühendislik ve Pwn Temelleri” dersinde ne öğreneceğim?

Tersine mühendisliğe ve ikili dosya istismarına giriş. Cyber Security Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Cyber Security Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Cyber Security Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Tersine Mühendislik ve Pwn Temelleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Cyber Security Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Cyber Security Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. CTF Kategorileri ve Zihniyet
  2. Web ve Kripto Zorlukları
  3. Tersine Mühendislik ve Pwn Temelleri
  4. Araçlar ve Çözüm Yazıları
← Cyber Security Academy Sayfasına Dön