Programlama

SQL Injection Nedir? Nasıl Tespit Edilir? Nasıl Engellenir?

SQL injections ya da SQL enjeksiyonları, en yaygın ve temel siber saldırı türleri arasındadır. Ne yazık ki, bir SQL enjeksiyonu aynı zamanda bir uygulamanın karşılaşabileceği en yıkıcı tehditlerden biridir. Bu saldırılar düzenli olarak veri kayıplarına yol açar ve özellikle paylaşılan veri tabanlarına sahip altyapılar için tehlikelidir.

SQL enjeksiyonunun tanımı kısaca bu şekilde…

Şimdi SQL Injection ile ilgili detaylara geçebiliriz. Fakat öncesinde SQL tam olarak nedir, bu konuya değinelim.

SQL Nedir?

SQL (Structured Query Language) yani Yapılandırılmış Sorgu Dili, kullanıcıların veri tabanlarıyla etkileşim kurmasını sağlayan bir sorgu dilidir. Örneğin, oturum açma alanları ve formları genellikle bir SQL veri tabanına bağlanır. Kullanıcılar, adlarını ve şifrelerini girerek bir web sitesinin korumalı bir bölümünde oturum açabilir. SQL, daha sonra kullanıcılar için içeriği alırken oturum açma kimlik bilgilerini işler.

SQL Injection Türleri

Bir tür saldırı vektörü olan SQL injection, saldırganların back-end verilerine erişmek için kullandıkları yöntemlere göre sınıflandırılır. 

Aşağıda, bir işletmenin karşılaşabileceği en yaygın yedi SQL enjeksiyonu türünü bulabilirsiniz:

In-Band SQLi (Klasik SQLi)

Bir bilgisayar korsanı saldırıyı başlatmak ve sonuçları toplamak için aynı iletişim kanalını kullandığında In-Band SQLi oluşur.

Error-Based SQLi

Hata tabanlı SQLi, hata mesajlarına dayanan bir in-band enjeksiyon tekniğidir. Bilgisayar korsanları, veri tabanı yapısı hakkında bilgi toplamak için uygulamayı sürekli olarak hatalar için araştırır.

Hata tabanlı SQL enjeksiyonları, bir saldırganın tablo adları ve içerik gibi verileri görünür hatalardan almasına olanak tanır. Bazı durumlarda, bir bilgisayar korsanının tüm veri tabanını numaralandırması için hata tabanlı SQL enjeksiyonu yeterlidir.

Union-Based SQLi

Union tabanlı SQLi, UNION SQL operatörünün güvenlik açıklarından yararlanan bir in-band enjeksiyondur.

UNION komutu, bir veya daha fazla ek SELECT sorgusu yürütür ve sonucu orijinal sorguya ekler. Saldırgan, veri tabanındaki diğer tablolardan veri almak için genişletilmiş sonuçlardan yararlanabilir.

Union tabanlı SQLi, yalnızca orijinal ve yeni sorgular aynı sayıda ve veri türünde sütunlara sahipse çalışır.

Inferential SQLi

Çıkarımsal bir SQLi’da, web uygulaması verileri doğrudan çıktı yoluyla aktarmaz. Bunun yerine, bir saldırgan, yükleri göndererek ve aşağıdakileri gözlemleyerek bilgi toplar:

  • Web uygulamasının yanıtı
  • Veri tabanı sunucusunun davranışı
  • Web sayfasındaki farklılıklar

Content-Based Blind SQLi

İçerik tabanlı SQLi’da, saldırganın, sorgunun DOĞRU veya YANLIŞ sonuç döndürmesine bağlı olarak veri tabanını farklı sonuçlar için döndürmeye zorladığı çıkarımsal bir tekniktir. İçerik tabanlı SQLi saldırıları, özellikle büyük veri tabanlarında yavaştır. Saldırgan, veri tabanını karakter karakter numaralandırmalıdır.

Time-Based Blind SQLi

Zamana dayalı SQLi’da, saldırgan, yanıt vermeden önce veri tabanını belirli bir süre beklemeye (uykuya) zorlayan sorgular gönderir.

Örneğin, bir bilgisayar korsanı, admin hesabının ilk harfinin A ile başlayıp başlamadığını veri tabanına sorabilir. İlk harf A ise, bilgisayar korsanı veri tabanına 10 saniye uyuması talimatını verir. 

Out-of-Band SQLi

Out-of-Band SQLi, genellikle bir bilgisayar korsanı doğrudan bir sorgu-yanıt saldırısı başlatamadığında gerçekleşen daha az yaygın olan bir Injection türüdür. 

Out-of-Band SQLi’da, bir bilgisayar korsanı, saldırganın kontrolü altındaki harici bir sunucuya bağlantı oluşturmak için veri tabanını tetikleyen SQL ifadeleri oluşturur.

Veri tabanı sunucusunun, bir saldırgana veri teslim etmek için DNS veya HTTP istekleri yapabilme becerisine sahip olması gerekir. Aksi takdirde, out-of-band SQLi çalışmaz.

Saldırganlar, sunucu yanıtları kararsız olduğunda, zamana dayalı tekniklere alternatif olarak genellikle bant dışı bir yaklaşım seçer.

SQL Injection Saldırıları Nasıl Gerçekleştirilir?

Bir SQL injection saldırısı gerçekleştirmek için saldırganın bir web uygulamasında veya web sayfasında güvenlik açığı bulunan bir giriş bulması gerekir. Bir uygulama veya web sayfası bir SQL Injection güvenlik açığı içerdiğinde, doğrudan bir SQL sorgusu biçiminde kullanıcı girdisini kullanır. Bilgisayar korsanı, özel olarak hazırlanmış bir SQL komutunu kötü niyetli bir siber saldırı olarak çalıştırabilir. Ardından, kötü amaçlı koddan yararlanan bilgisayar korsanı, veri tabanı yapısı hakkında net bir fikir sağlayan ve böylece veri tabanındaki tüm bilgilere erişim sağlayan bir yanıt elde edebilir.

SQL, veri tabanına iletişim yolu olarak hizmet eder. SQL ifadeleri, veri tabanındaki verileri almak ve güncellemek için kullanılır. Saldırganlar giriş kutusunda kötü niyetli SQL ifadeleri kullanır ve buna karşılık olarak veri tabanı hassas bilgiler sunar. Bu güvenlik açığı, bir web sitesinin veya uygulamanın yetkisiz verilerine erişmeyi amaçlar. Birkaç web sitesi ve web uygulaması, verileri SQL veri tabanlarında depolar. Bu uygulamalardan herhangi biri için, SQL enjeksiyonunu yürütmek için hiçbir boşluk olmadığından emin olmak için güvenlik açığı testi yapmanız gerekir.

SQL Injection Güvenlik Açıkları Nasıl Tespit Edilir?

SQL injection girişimleri genellikle standart veri tabanı hataları olarak görünür, bu nedenle enjeksiyonları araçlar olmadan tespit etmek zordur. Ancak, güvenlik ekibiniz SQL enjeksiyonlarının belirtilerini izleyebilir.

Her SQL injection deneme yanılma içerir. Bilgisayar korsanları genellikle bir web sitesini kusurlar için tekrar tekrar araştırmak için bir solucan veya bot kurar. Bu yüzden başarısız oturum açmaları ve hatalı sözdizimi hatalarını izlemek için tarama araçlarınızı ayarladığınızdan emin olun. 

SQL enjeksiyonlarını algılamanın diğer yolları ise aşağıdaki şekildedir:

  • Tek hatalar için error_reported olayını inceleyin. http-equiv=”refresh” veya iframe gibi yaygın HTML etiketleri için veri tabanında arama yapın.
  • Davranıştaki şüpheli değişiklikler, özellikle izinler ve şifrelerdeki değişiklikler için trafiği izleyin.
  • Veri tabanı sunucusuna yapılan bağlantıları izlemek için ağ tabanlı bir saldırı tespit sistemi (IDS) kurun.
  • Web sunucusu günlüklerini izlemek için ana bilgisayar tabanlı bir IDS kurun.
  • Uygulamanızın SQLi ve benzeri siber saldırılara karşı güvende olduğundan emin olmak için güvenlik açığı değerlendirme araçlarını kullanın.

SQL Injection Nasıl Önlenir?

Kullanıcıların SQL injection saldırılarını önlemek için yapabilecekleri bir dizi önlem vardır. Bu önlemler aşağıdakileri içerir:

Doğrulama

Kullanıcı girişlerini kontrol etme ve filtreleme uygulamasıdır. Bu teknik, uygulamanın yasal olmayan kullanıcı girdilerini ve tehlikeli yürütülebilir dosyaları tanımlayabilmesini sağlar.

Parametreli SQL kodu

Parametreli sorgular, geliştiricilerin önce tüm SQL kodunu tanımlamasını ve her parametreyi daha sonra sorguya geçirmesini gerektirir. Bu kodlama stili, veri tabanının kod ve veri arasında ayrım yapmasını sağlar; bu, dinamik SQL sorgularıyla mümkün olmayan bir özelliktir.

Parametreli SQL kodu, saldırganların komut ekleseler bile sorgunun amacını değiştirmesini engeller

Kullanıcı izinlerini sınırlayın

Zero Trust güvenliği kullanın ve kullanıcıları rollerini yerine getirmek için ihtiyaç duydukları minimum izinlerle sınırlayın. 

Saklı prosedürler

Doğru kullanıldığında, saklı prosedürlerin kullanımı SQL enjeksiyonlarının olasılığını azaltabilir. Bu, Java, .NET, PHP ve diğerleri dahil olmak üzere programlama dilleriyle gerçekleştirilebilir.

Güvenli kodlama

Web uygulama güvenliğini artırmak için şirketlerin güvenli kodlama uygulamalarına başvurmaları zorunludur.

Düzenli güncelleme ve yama

Web uygulamalarındaki ve veri tabanlarındaki güvenlik açıkları saldırganların SQL enjeksiyonlarını kullanarak yararlanabileceği bir şeydir. Bu yüzden uygulamalar ve veri tabanları için yamalar ve güncellemeler yayınlandıkça, kullanıcılar mümkün olan en kısa sürede güncellemeleri yapmalıdır.

Güvenlik Duvarı

Web Uygulaması Güvenlik Duvarları (WAF), web uygulamaları ile internet arasındaki trafiği filtreleyerek ve izleyerek web uygulamalarının korunmasına yardımcı olur. WAF’ler, SQL enjeksiyonları dahil olmak üzere saldırılara karşı bir savunma sağlayabilir. Bir SQL Injection güvenlik açığı açık kaynak kodunda olabilir ve bu durumda bir WAF’ye sahip olmak geçici olarak korumaya yardımcı olabilir. Ek olarak WAF, yamalar geliştirilirken yeni güvenlik açıklarına karşı koruma da sağlayabilir.

Eğer teknik bilginiz yoksa, alan adınızı Cloudflare üzerinden çalıştırarak burada bulunan ücretsiz WAF ve SQL injection saldırılarını, temel düzeyde önleyecek önlemleri de aktif edebilirsiniz.

WordPress Sitenizi SQL Injection Saldırılarından Nasıl Korursunuz?

Güncel WordPress dosyalarını kullanıyorsanız, herhangi bir SQL Injection güvenlik açığından korunursunuz. Ancak üçüncü taraf tema ve eklentileri kullandığınızda tüm uygulamanız risk altındadır.

WordPress temanızda veya eklentinizde SQL injection’ın güvenlik açığını azaltmak için izlemeniz gereken tek kural, veri tabanıyla etkileşim kurarken her zaman mevcut WordPress işlevlerini kullanmaktır.

Bu işlevler, WordPress geliştirme süreci sırasında SQL Injection güvenlik açıkları için kapsamlı bir şekilde test edilir. Örneğin, bir gönderiye yorum eklemek istiyorsanız, verileri doğrudan wp_comments tablosuna eklemek yerine wp_insert_comment() işlevini kullanabilirsiniz.

İşlevler genişletilebilir olsa da, bazen karmaşık bir sorgu çalıştırmanız gerekebilir. Böyle bir durumda, $wp_db işlev grubunu kullandığınızdan emin olun. Sorguyu oluşturmadan önce kullanıcı girişinden kaçmak için $wpdb->prepare() kullanabilirsiniz.

Ayrıca ThreatPass ve WPScan Vulnerability Database gibi bir çevrimiçi tarama aracı da kullanabilirsiniz. Geliştirmelerinin durup durmadığını görmek için eklentilerinizi de denetleyebilirsiniz.

Hala bunları kesinlikle kullanmanız gerekiyorsa, güvenlik açıkları için kod ve işlevlerini kapsamlı bir şekilde test ettiğinizden emin olun. Bunun dışında, aşağıdaki kontrolleri de uyguladığınızdan emin olun:

  • PHP, WordPress çekirdeği ve MySQL’i güncelleyin.
  • Üçüncü taraf eklentileri ve temaları güncelleyin.
  • SQL veri tabanını bağlamak için kök kullanıcıyı kullanmaktan kaçının.
  • SQL kullanıcısının erişimlerini hassas dizinlerle sınırlayın.
  • Sunucunuzu kullanarak SQL anahtar kelimelerini engelleyin.
  • Geri dönüşü olmayan hasar durumunda sitenizin yedeklerini site dışında tutun.

Siteniz için kullanabileceğiniz WordPress güvenlik eklentileri

1. Wordfence

3 milyondan fazla aktif kurulum ile Wordfence, siteler için en popüler güvenlik araçları arasında yer alır. Araç, web uygulaması güvenlik duvarları, kötü amaçlı yazılım imzası algılama, gerçek zamanlı IP kara listeye alma ve sunucu tabanlı kötü amaçlı yazılım taraması gibi özelliklerle doludur.

Fakat, Wordfence web sunucunuzu aşırı yükleyebilir, böylece web sitenizi yavaşlatabilir. 

Özellikler

  • En yeni kötü amaçlı yazılım imzaları ve hatalı IP adresleriyle web sitenizi güvende tutan bir tehdit savunması akışı
  • Şüpheli IP adreslerinden gelen tüm istekleri engelleyebilen gerçek zamanlı IP kara listeye alma özelliği
  • Başarısız oturum açma kısıtlamaları yoluyla saldırılarına karşı koruma
  • Eklentiler ve temalar, SEO spam’leri ve kod enjeksiyonları için kötü amaçlı yazılım taraması

2. All in One WP Security & Firewall

Dünya çapında 900.000’den fazla aktif kurulum ile All in One WP Security, bugün piyasadaki en kapsamlı güvenlik araçları arasındadır. Kurulumu ve kullanımı kolay güvenlik çözümü, temel, orta ve ileri düzey WordPress kullanıcıları için tasarlanmıştır. Araç, yerleşik bir güvenlik duvarı ile birlikte sitenizdeki yaygın güvenlik açıklarını kontrol eder ve önerilen güvenlik uygulamalarını uygular.

Özellikler

  • Genel web sitenizin güvenliğini derecelendiren güvenlik derecelendirme sistemi
  • Saldırılarından korunmak için giriş kilitleme özelliği
  • Otomatik yedeklemeler ve e-posta tabanlı bildirimler aracılığıyla veri tabanı güvenliği
  • wp-config.php ve .htaccess  backend dosyalarının yedeklenmesi

SQL Injection Kod Örnekleri

1. Sistemin her zaman True olarak değerlendirdiği 1=1’e dayalı SQL enjeksiyonu

Burada hacker, bir koşul doğru olarak değerlendirilse bile bir veya ifadesinin doğru olarak değerlendirildiği gerçeğini kullanır. Bu nedenle bilgisayar korsanı, her zaman doğru olarak değerlendiren “1=1” gibi akıllı bir girdi kullanır.

Örneğin, eğer bir emp_id sütunumuz varsa ve bilgisayar korsanı veri tabanını görüntülemek istiyorsa “ emp_id = 112 veya 1=1” gibi bir girdi kullanabilir, bu SQL sorgusunu aşağıdaki gibi değerlendirecektir:

Query (Sorgu):

2. Sistemin her zaman True olarak değerlendirdiği “=” temelli SQL Injection

Bu durumda, bilgisayar korsanı, = ifadesinin her iki tarafındaki ifadenin doğru olarak değerlendirilirse veri tabanında depolanan tüm sonuçları döndüreceği gerçeğini ortaya koyacaktır.

Örneğin, bir emp_id alanımız varsa ve bilgisayar korsanı “” veya “”=” girerse, bu ifade doğru olarak değerlendirilir ve böylece tüm veri tabanı verilerini bilgisayar korsanına döndürür.

emp_id = “” veya “”=”” koyarsak, backend’de otomatik olarak çalışan SQL sorgusu aşağıdaki gibidir:

Query (Sorgu):

3. Toplu SQL ifadelerine dayalı SQL Injection

Bilgisayar korsanı giriş alanında bazı SQL ifadelerini geçerse, bu, geçerli bir SQL ifadesi olarak kabul edilir ve veri tabanınızda yürütülür.

Örneğin, hacker, emp_id kullanıcı alanına aşağıdakileri girerse, bu durumda, veri tabanınızın konum tablosunda saklanan tüm verileri kaybedersiniz.

“118”; TRUNCATE location

Bu durumda ortaya çıkan sorgu aşağıdaki gibi olacaktır:

Query (Sorgu):

Sibel Hoş

Recent Posts

.TR Domain Ön Siparişleri için Aktivasyon Kodunun Önemi

.TR öncelikli kayıtlar için son gün, 7 Ağustos 2024 olarak güncellenmiştir. Bunun akabinde süreçle ilgili…

11 ay ago

Online Mağazanızı Geliştirmek için En İyi WooCommerce Eklentileri

WooCommerce, WordPress üzerine kurulu güçlü ve açık kaynaklı bir e-ticaret platformudur. Doğru WooCommerce eklentileriyle çevrimiçi…

1 sene ago

En İyi WordPress Yedekleme Eklentileri

Yedekleme, WordPress web sitenizi siber saldırılardan ve kritik hatalardan korumanın önemli bir parçasıdır. Bu yüzden…

1 sene ago

WordPress Giriş URL’i Nasıl Değiştirilir?

Her WordPress web sitesi aşağıdaki giriş URL'lerine sahiptir: websiteniz.com/wp-admin websiteniz.com/wp-login Giriş yolları tüm web siteleri…

1 sene ago

ERR_SSL_PROTOCOL_ERROR Nedir? Nasıl Çözülür?

İnternette gezinirken büyük çoğunuz, "this site can’t provide a secure connection (bu site güvenli bağlantı…

1 sene ago

Pazarlama ve İş Dünyası için En İyi Yapay Zeka Araçları

ChatGPT'nin Kasım 2022'de piyasaya sürülmesinden bu yana teknoloji gündeminde en çok konuşulan şey yapay zeka…

1 sene ago