Ana içeriğe atla

Remote Code Evaluation Zafiyeti

Remote Code Evaluation Nedir?

Remote Code Evaluation (RCE), kullanıcı girdisinin bir string ya da bir dosyaya enjekte edilmesi ve bu girdinin kullanılan programlama diline ait parser (ayrıştırıcı) tarafından uygulanmasıyla ortaya çıkan bir açık türüdür. Bu durum, genelde, web geliştiricilerinin beklediği bir şey değildir. Bir Remote Code Evaluation zafiyeti suistimale açık web uygulaması ya da web sunucusunun tümü üzerinde bir risk meydana getirebilir. RCE ile ilgili önemli bir nokta şu ki neredeyse tüm programlama dillerinde açığın temelini oluşturan söz konusu evaluation (değerleme) fonksiyonları mevcuttur.

RCE’yi Bir Örnekle Açıklayalım

Kullanıcı girdilerinin, kodun evaluate edilmesini sağlayan fonksiyonlara enjekte edilmesine izin verdiğiniz takdirde bir code evaluation (kod değerleme) meydana gelebilir. Kasti olarak, örneğin, bir hesap makinesi programı yazmak amacıyla matematik fonksiyonlarına erişirken; veya tesadüfen bu olay meydana gelebilir. Tesadüfi denmesinin sebebi şu ki kullanıcı tarafından kontrol edilen bir girdinin söz konusu fonksiyonlara enjekte edilmesi geliştiricilerin istediği bir şey değildir. Zaten, genelde, böyle bir uygulamaya başvurulması önerilmez. Çünkü bu tarz bir uygulama, code evaluation’ın kullanımı açısından kötü bir pratik olacaktır.

Code Evaluation İstismarına Bir Örnek

Her kullanıcı için dinamik olarak değişken isimlerinin oluşturulmasını isteyebilir ve kullanıcılara ait kayıt tarihlerini depoluyor olabilirsiniz. PHP’de bunu aşağıdaki kodla yapmak mümkün:

eval("\$$user = '$regdate');

Kullanıcı adı, genel olarak kullanıcılar tarafından kontrol edilen bir girdi olduğundan, saldırgan aşağıdaki gibi yeni bir isim üretebilir:

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

Sonuç olarak PHP kodu şu hali alır:

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

Görüldüğü üzere değişken x olarak çağırıldı ve y değerini aldı. Saldırgan bu değeri değişkene atayabildikten sonra noktalı virgül (;) kullanarak yeni bir komut başlatabilir hale geldi. Böylelikle string’in geri kalanını derleme dışında bırakabilir ve bunun sonucunda herhangi bir söz dizimi hatası da almaz. Kodu çalıştırdığındaysa sayfada phpinfo çıktısı gösterilir. Bunun sadece PHP’de değil girdiyi evaluate eden fonksiyonların bulunduğu tüm dillerde meydana gelebileceğini unutmamak gerekir.

Stored RCE’yi Bir Örnekle Açıklayalım

Bu metot, yukarıdaki örnekten farklı olarak spesifik bir fonksiyona dayanmamaktadır. Dil yorumlayıcısı tarafından parse edilen belli dosyalar üzerinde meydana gelmektedir. Bir web uygulamasına eklenen konfigürasyon dosyası buna örnek olabilir. İstenmeyen bir durumun meydana gelmemesi için yorumlayıcı tarafından yürütülen dosyalarda kullanıcı girdilerini kullanmaktan kaçınmak gerekir. Bu istismar tekniği çoğu kez, dosya türü ve uzantısı üzerinde gerekli kontrolleri yapmayan bir upload (yükleme) fonksiyonu ile beraber görünür.

Stored Code Evaluation İstismarına Bir Örnek

Her kullanıcı için bir kontrol paneli sunan bir web uygulaması geliştirdiğinizi varsayalım. Kontrol paneli, bir parametreye bağlı olarak belirlenen ve sonrasında bir konfigürasyon dosyasında saklanan bazı kullanıcı ayarlarına (dil değişkeni gibi) sahip. Beklenen girdi şöyle olurdu:

?language=de

Yukarıdaki girdi daha sonra konfigürasyon dosyasına $lan = ‘de’; şeklinde yansıtılır. Bir saldırgan dil parametresini şu şekilde değiştirirse:

de';phpinfo()//

Yukarıdaki kod dosyada şu hali alır:

$lan = 'de';phpinfo()//';

Son olarak konfigürasyon dosyası web uygulamasına eklendiğinde yukarıdaki kod yürütülecektir. Bu da saldırganlara istedikleri komutu çalıştırma imkanı sunar.

RCE Zafiyetinin Etkileri

Bir flaw’ı çalıştırabilen saldırgan bunu genellikle sunucunun ya da programlama dilinin getirdiği ayrıcalıklarla yapabilmektedir. Dillerin çoğunda sistem komutu verilebilir, dosyalarda ya da bağlantılı veritabanlarında yazma, okuma ve silme işlemleri gerçekleştirilebilir.

RCE’yi Engellemenin Yolları

Genel bir tavsiye vermek gerekirse evaluate edilmiş kodun içinde kullanıcı girdilerini kullanmaktan kaçınmak iyi bir tercih olabilir. En iyi seçenek eval gibi fonksiyonları hiçbir zaman kullanmamak olurdu. Ayrıca ilgili dil tarafından ayrıştırılabilen dosya içeriklerinin kullanıcılar tarafından düzenlenmesine engel olmak gerekir. Buna kullanıcıların, web uygulamasında yükleyebileceği ya da oluşturabileceği dosyaların uzantılarına ve isimlerine karar verememeleri de dahildir.

RCE’yi Engellemek için Neler Yapmamalısınız

  • Kullanıcı girdisini sanitize etmek… Kısıtlamalar için yapılan bypass işlemleri ihtimalinden dolayı çoğu zaman mümkün olmamaktadır.
  • Sunucudaki dosyaların içeriğini ya da uzantısını değiştirme kararını ve güvenli dosya yükleme yolları için tercihi kullanıcılara bırakmak.
  • Herhangi bir kullanıcı kontrollü girdiyi callback veya evaluation fonksiyonlarına göndermek.
  • Özel karakterleri ya da fonksiyon isimlerini blacklist’e almak… Bu yöntemle güvenli bir implementasyonu sağlamak neredeyse imkansızdır.

Yorumlar

Bu blogdaki popüler yayınlar

Sniffing Nedir Ve Nasıl Korunuruz ?

Sniffing Nedir ? Sniffing temel olarak verinin yolunu kesmek olarak tabir edilebilir. Sniffing ile networkdeki paketler yakalanabilir içeriği okunabilir. Sniffingin amacı ; Şifreleri (email, web, SMB , ftp, telnet,SQL) ,Email text’ini Transfer edilen dosyaları (e-mail,ftp, SMB ) yakalamaktır. Sniffing metodu ikiye ayrılır ; Pasif Sniffing ve Aktif Sniffing. Pasif Sniffing Hub olan sistemler için geçerlidir,Hub olan networklerde paketler tüm bilgisayarlara iletilir. Networkteki veri lan üzerinden tüm bilgisayarlara gönderildiği için sniff etmek kolaydır. Aktif Sniffing Switch olan sistemler için geçerlidir. Switch MAC adreslerine bakar ve veriyi sadece alması gerekenkişiye gönderir. Saldırgan switchi zehirlemeye çalışır , binlerce mac adresi gönderip swichin bir hub gibi davranmasına neden olur ve verinin tüm portlardan çıkmasını sağlar. Sniffingle yapılacak farklı saldırı şekilleri vardır. ARP Poisoning Arp veri göndermek için IP adresinin mac adresini çözümlemeye yarayan protokoldür. ...

Sosyal Mühendislik Ve Phising Saldırıları

Sosyal Mühendislik , bir bilgisayar sisteminin kullanıcılarını, bir bilgisayar sistemine yetkisi olmadan erişim elde etmek için gizli bilgileri açığa çıkarma sanatıdır. Bilgisayar korsanları yani Hackerlar kimliğini kullanan kullanıcıları hayati oturum açma bilgilerini serbest bırakmaları için kullandığı hileleri bilmek, bilgisayar sistemlerini korumak açısından temel bir gerekliliktir. Başta bu kavramı duyunca gerçekten böyle bir meslek var mı diye araştırmıştım. Sonra araştırınca anladım ki bu kavram Aldatma ve insanları kandırmanın ta kendisiymiş. Ünlü Hacker  Kevin D. Mitnick ’ın yazmış olduğu  Aldatma Sanatı  adlı kitabı okumanızı öneririm. Ünlü Hacker : Fujitsu, Motorola, Nokia, Sun Microsystems gibi büyük şirketlere izin ağlarına girerek birçok ceza ve bilgisayardan uzaklaştırma almıştır.  Sosyal Mühendislikte Püf Noktalar Sosyal Mühendislikte genelde amaç para değil; teknik olarak ulaşılması mümkün olmayan durumlarda hacklenecek sisteme teknik olmayan bir diz...