Bazı zafiyetler can sıkar, bazıları sistemi yavaşlatır; ancak Remote Code Execution (RCE), bilgisayarınızı saldırgana teslim eder. Bir saldırganın, fiziksel olarak erişimi olmayan bir sistemde, sanki klavyenin başındaymış gibi kod çalıştırabilmesini sağlar.

Bu yazıda, en tehlikeli açıklarından biri olan RCE'nin (Uzaktan Kod Çalıştırma) anatomisini, nasıl gerçekleştiğini, gerçek hayat senaryolarını ve korunma yöntemlerini teknik detaylarıyla inceleyeceğiz.

En basit tanımıyla RCE, bir saldırganın hedef sistem veya ağ üzerinde uzaktan kötü amaçlı kod çalıştırmasına olanak tanıyan bir güvenlik açığıdır. Bu zafiyet, saldırganın coğrafi konumundan bağımsız olarak, internet üzerinden hedef sunucuya komut göndermesini ve sunucunun bu komutları kendi koduymuş gibi işlemesini sağlar.

RCE, genellikle Arbitrary Code Execution (ACE) sınıfının en şiddetli türü olarak kabul edilir. Çünkü saldırganın sisteme önceden bir erişimi olması gerekmez; zafiyetin kendisi, ilk giriş kapısıdır.

None

RCE Nasıl Çalışır?

RCE saldırıları genellikle web uygulamalarındaki veya ağ altyapısındaki "girdi doğrulama" (input validation) eksikliklerinden kaynaklanır. Modern uygulamalar kullanıcıdan sürekli veri alır; formlar, URL parametreleri, dosya yüklemeleri vb. Eğer uygulama, kullanıcının girdiği veriyi çalıştırmadan önce temizlemez (sanitize etmez) ve doğrudan bir yorumlayıcıya (interpreter) gönderirse, felaket senaryosu başlar.

Temel olarak iki tür Code Evaluation (Kod Değerleme) yöntemi vardır:

1. Remote Code Evaluation (Dinamik Kod Çalıştırma)

Bu senaryoda, uygulama içinde kullanıcının girdiği veriyi işleyen eval() gibi tehlikeli fonksiyonlar bulunur.

Örnek Senaryo (PHP): Bir geliştiricinin kullanıcı kayıt tarihlerini değişkenlere atamak için şöyle güvensiz bir kod yazdığını düşünelim:

// Güvensiz kod örneği
eval("\$$user = '$regdate';");

Normalde $user değişkeni sadece bir kullanıcı adını temsil etmelidir. Ancak saldırgan, kullanıcı adı (input) olarak aşağıdaki değeri gönderirse:

px = 'y';phpinfo();//

PHP yorumlayıcısı, eval fonksiyonu içinde kodu şu şekilde birleştirir ve çalıştırır:

$x = 'y';phpinfo();// = '2016';

Sonuç? Saldırgan phpinfo() fonksiyonunu çalıştırarak sunucu konfigürasyonlarını döktürür. Buraya system('rm -rf /') yazdığını düşünün, bu durumda tüm sunucu silinir.

2. Stored Code Evaluation (Depolanmış Kod Çalıştırma)

Bu yöntem, anlık bir fonksiyon çağırmaktan ziyade, sunucunun yapılandırma dosyalarına (config files) kod enjekte etmeye dayanır.

Örnek Senaryo: Bir web uygulamasının dil ayarlarını bir dosyada sakladığını varsayalım. Beklenen URL isteği şöyledir: ?language=de Bu istek sunucudaki dosyaya $lan = 'de'; olarak yazılır.

Ancak saldırgan girdiyi şu şekilde manipüle ederse: de';system('cat /etc/passwd');//

Dosyaya yazılan kod şu hale gelir:

$lan = 'de';system('cat /etc/passwd');//';

Uygulama bu ayar dosyasını her çağırdığında (include ettiğinde), saldırganın komutu çalışır ve sistemin parola dosyası ifşa olur.

Yaygın RCE Vektörleri

RCE tek bir yöntemle yapılmaz, bir sonuçtur. Bu sonuca götüren yollar şunlardır:

  • Enjeksiyon Zafiyetleri (Injection Flaws): SQL Injection veya Command Injection gibi açıklar, veritabanı veya işletim sistemi komutlarının çalıştırılmasına yol açabilir.
  • Güvensiz Deserialization: Verilerin transfer için serileştirilmesi (serialization) ve tekrar açılması (deserialization) sırasında, veri yapısının manipüle edilerek kötü amaçlı nesnelerin oluşturulmasıdır. Özellikle Java uygulamalarında (Bkz: Log4j) sık görülür.
  • Out-of-Bounds Write (Buffer Overflow): Bellek yönetiminin hatalı olduğu dillerde (C/C++), saldırganın ayrılan bellek alanının dışına veri yazarak programın akışını değiştirmesi ve kendi kodunu (shellcode) çalıştırmasıdır.
  • Dosya Yönetim Hataları: Saldırganın sunucuya .php, .jsp veya .asp uzantılı zararlı bir dosya (web shell) yükleyip, tarayıcı üzerinden bu dosyayı çağırmasıdır.

Gerçek Dünyadan RCE Örnekleri: Tarihe Geçen Saldırılar

Teoriyi bir kenara bırakıp, bu açığın dünyayı nasıl etkilediğine bakalım.

WannaCry ve EternalBlue

2017 yılında WannaCry fidye yazılımı, 150.000'den fazla bilgisayarı kilitledi. Bu saldırının kalbinde bir RCE zafiyeti vardı. Saldırganlar, Windows'un SMB protokolündeki bir açığı (EternalBlue) kullanarak, kullanıcıların hiçbir şeye tıklamasına gerek kalmadan sistemlere sızdı ve kodu uzaktan çalıştırdı.

Log4Shell (CVE-2021–44228)

Yakın tarihin en büyük felaketlerinden biri. Java tabanlı loglama kütüphanesi Log4j'deki bir RCE zafiyetiydi. Saldırganlar sadece bir log dosyasına (örneğin bir Minecraft sohbet kutusuna veya bir login ekranındaki kullanıcı adı kısmına) özel bir string göndererek (${jndi:ldap://...}) sunucuyu kendi kontrol ettikleri bir adrese yönlendirip kod çalıştırabiliyorlardı.

None

Bir Saldırgan RCE ile Neler Yapabilir?

RCE elde eden bir saldırgan için limit, genellikle sadece hayal gücüdür:

  • Tam Sistem Kontrolü: Sunucuda yönetici (root/admin) hakları elde edebilir.
  • Veri Hırsızlığı: Veritabanlarını, müşteri bilgilerini ve ticari sırları çalabilir.
  • Ransomware (Fidye Yazılımı): Tüm dosyaları şifreleyip fidye isteyebilir.
  • Kripto Madenciliği (Cryptojacking): Sunucunun kaynaklarını kullanarak kripto para kazabilir.
  • Pivotlama (Lateral Movement): Ele geçirdiği sunucuyu bir sıçrama tahtası olarak kullanarak iç ağdaki diğer güvenli sistemlere saldırabilir.

RCE Saldırılarından Nasıl Korunulur?

RCE'yi engellemek, tek bir tuşa basarak çözülecek bir iş değildir; katmanlı bir güvenlik mimarisi gerektirir.

  • Girdi Doğrulama (Input Sanitization): Asla kullanıcı verisine güvenmeyin. Tüm girdileri (whitelist yöntemiyle) doğrulayın ve özel karakterlerden arındırın.
  • Tehlikeli Fonksiyonlardan Kaçınma: eval(), system(), exec() gibi fonksiyonları kodunuzda kullanmaktan kaçının. Eğer mecbursanız, girdileri çok sıkı filtreleyin.
  • Yama Yönetimi (Patching): İşletim sistemlerini, web sunucularını ve üçüncü parti kütüphaneleri (dependency) güncel tutun. Log4Shell gibi zafiyetler, güncel olmayan kütüphaneler yüzünden yayılır.
  • WAF (Web Application Firewall): Ağ trafiğini izleyen ve bilinen RCE saldırı kalıplarını (imzalarını) bloklayan bir WAF kullanın.
  • En Az Ayrıcalık İlkesi (Least Privilege): Web uygulamanızın çalıştığı servise asla "root" veya "administrator" yetkisi vermeyin. Uygulama hacklense bile saldırganın sistemdeki yetkileri kısıtlı kalmalıdır.

Sonuç

Remote Code Execution, bir web uygulamasının karşılaşabileceği en yıkıcı senaryodur. Geliştiriciler olarak kod yazdığımız her satırda, o verinin nereden geldiğini ve nasıl yorumlandığını düşünmek zorundayız. Siber güvenlikte zincir, en zayıf halkası kadar güçlüdür; RCE ise o zinciri tamamen koparır.

None