04 Ocak 2015

Web Uygulama Denetimi - Bölüm-7: Yorumlanan Dillere Yönelik Enjeksiyon Saldırıları

Yorumlanan web betik dillerine (ve SMTP gibi arka sistemlere, işletim sistemine gönderilen komutlara) ilişkin çok detaylı bir çalışma yapılabilir. Ancak temel prensipler her dil için hemen hemen aynıdır. Farklı durumlara ilişkin yapılması gereken çalışma dilin sentaksına ve arkadaki servisin davranışlarına yönelik olmalıdır.

Yorumlanan dillerle yazılmış kodlar (derlenen dillerden farklı olarak) bir sanal makine üzerinde çalışır ve çalışma anında yorumlanarak makine komutlarına dönüştürülür. Derlenen kodlarsa derlenme anında üzerinde çalışmaları öngörülen işlemciye uygun makine kodlarına dönüştürüldüğünden doğrudan işlemci üzerinde çalıştırılır. Her dili teorik olarak yorumlamak veya derlenmiş halde çalıştırmak mümkün olmakla birlikte uygulama dilleri genellikle belli bir şekilde çalışmak üzere geliştirilmiştir.

Uygulamalar (sistem veya insan) kullanıcılardan aldıkları girdileri işlerler ve çıktılar üretirler. Yorumlanan dillerde yorumlayıcı uygulamanın aldığı girdinin içinde yorumlayıcı açısından özel karakterler içeriyorsa veri bağlamının dışına çıkarak girdiyi de yorumlayabilir. İşte kod enjeksiyon açıklıklarının temel nedeni budur. Derlenen dillerde ise (saldırı yöntemi teknik olarak yorumlanan dillere nazaran çok farklı olmakla birlikte) enjekte edilen kod işlemci üzerinde çalışmak zorunda olduğundan makine dilindedir.

Yorumlanan dillere enjeksiyon saldırısı yaparken izlenecek genel yaklaşım aşağıdaki gibidir. Her adımda özel olarak yapılması gerekenler söz konusu dile özeldir:

  • Söz konusu yorumlanan dil bağlamında probleme yol açabilecek beklenmeyen sentaksta veri girilir.
  • Uygulamanın davranışında bir kod enjeksiyonu olabileceğine dair değişiklikler gözlenir.
  • Eğer uygulama bir hata mesajı üretiyorsa bu mesaj problemin içeriğine ilişkin bilgi toplamak için incelenir.
  • Gerekiyorsa sistematik olarak farklı girdiler denenerek tahmin edilen açıklığın varlığı ya da yokluğu ispat edilmeye çalışılır.
  • Zararsız komutlar içeren bir test geliştirilerek açıklığın varlığı kanıtlanır.
  • İsteniyorsa hedef dilin ve sistemin fonksiyonalitesinden faydalanılarak ulaşılmak istenen hedeflere ulaşmak için açıklık kullanılır.

<<Önceki Bölüm                                                                                                      Sonraki Bölüm>>