Revealed content
Çoğumuz SQL ( Yapılandırılmış Sorgu Dili enjeksiyonu ) terimine aşinayız , ancak tek bildiğimiz bu terimi önemsiz örneklerden duymaktan veya deneyimlemekten kaynaklanmaktadır. SQL enjeksiyonu, bir şirkete veya işletmeye saldırmaya yönelik en yıkıcı güvenlik açıklarından biridir ve bu, kullanıcıların adları, şifreler, adlar, adresler, telefon numaraları gibi yararlı bilgiler dahil olmak üzere bir uygulama veritabanında depolanan hassas verilerin açığa çıkmasına neden olabilir. ve kredi kartı bilgileri.
SQL enjeksiyonu, girdileri işleyerek sonlu SQL ifadelerini değiştirmek için kodu kullanan bir saldırı tekniğidir .
SQL enjeksiyonu, esas olarak web uygulamalarını etkileyen bir güvenlik açığı değildir, güvenilmez kaynaklardan gelen giriş verilerini kabul eden ve daha sonra bu verileri dinamik SQL formülasyonları oluşturmak için kullanan herhangi bir kod bir zayıflık olabilir.
Başka bir deyişle, SQL enjeksiyonunun web siteleri için bir saldırı vektörü (kötü amaçlı yazılım) olarak bilindiğini ancak her tür SQL veritabanına saldırmak için kullanılabileceğini söyleyebiliriz.
Bazı SQL ifadeleri SQL saldırılarına karşı daha korumalı olsa da, SQL enjeksiyonuna karşı% 100 güvenli olduğumuzu asla söyleyemeyiz, ancak bir veritabanına bağlanan her üçüncü web sitesinin zayıf noktaları (açı, savunmasız) olduğunu söyleyebiliriz . .
giriş
Şunu söylemekten başlayarak bir konuyu tartışıyoruz: Microsoft, Yahoo, LinkedIn, CIA vb . Ortak noktalar nelerdir?
Bahsi geçen tüm bu kuruluşların web siteleri, SQL enjeksiyon tekniği denilen güçlü hacker silahlarından yararlanarak başarılı bir şekilde ihlal edilmiştir . Modern web geliştirmede, bu veritabanları genellikle uygulama arka uç ve içerik yönetim sistemlerinde kullanılır, bu da birçok web sitesinin içeriğinin ve davranışının verilerden ve veritabanı sunucusundan oluşturulduğu anlamına gelir. Bir hacker'ın yaptığı başarılı saldırı
hassas bilgileri elde etmek için tahrif olarak adlandırılan web sitesinin içeriğini değiştirme yeteneği verir .
TEMİZLENMEMİŞ GİRİŞ TEHLİKESİ
Genel anlamda , SQL enjeksiyonu, verileri yetkisiz kanallardan "koklamak" için veritabanına kötü amaçlı komutlar gönderir.
Bu nasıl çalışıyor?
Sisteme bağlantı için panele sahip bir web formu düşünmekteyiz. Web formunun zayıflığı, veriler temizlenmedikten sonra başlar , oturum açma panelindeki bilgisayar korsanı kullanıcı verilerini 'model' ( eng. Dummy ) koyar .(tek tırnak içinde). Web sitesi yalnızca kullanıcı adını girerek bir SQL hatası döndürürse, bilgisayar korsanı sitenin kötü kodlaması nedeniyle bir güvenlik açığı bulmuştur. Bu verilere eriştikten sonra içeriklerini bile değiştirebilir.
Diğer bir yaygın saldırı yöntemi, kullanıcı adının gerekli olduğu alanı aşağıdaki komutla doldurmaktır:
Kod:
kullanıcı 'veya' 1 '=' 1
Bu, rolün atanmış olduğu ve kullanıcıların bir role sahip olmasını gerektiren kullanıcıları doğrular, eğer herhangi bir kullanıcı bulunamazsa, eşittir işaretinden sonraki 1 rakamı hedefe ulaşılana kadar 1'e yükselir ( açılı artış ).
veya
Yani bu 'VEYA 1 = 1; - eksi işaretleri, 1 numarasından sonraki dizede bulunanların dikkate alınmadığını gösterir.İyi
kodlanmış bir web sitesi bu tek tırnakları kaldırır ve alanlardaki gereksiz alanları kabul etmez. veri girişi için, örneğin hiçbir sayısal alan, SQL bildirimi başlamadan önce sayılar dışında herhangi bir simge göndermez.
SQL karmaşık bir dildir ve bir veritabanının güvenliğini başarıyla aşmak için kod oluşturmak ve onu sorguya eklemek kolay bir görev değildir , bu nedenle Havij gibi saldırı amaçları için çeşitli araçlar kullanılır .
Havij - GEREKLİ SQL PROFESYONEL BİLGİSİ YOK
HavijSQL enjeksiyon saldırıları yapmak için kullanılan ve SQL ifadeleri hakkında profesyonel bilgi gerektirmeyen bir yardımcı araçtır. Bu yüzden normal bir uygulama gibi çalışıyor ve " İranlı Güvenlik Uzmanları" grubu tarafından oluşturuldu . Bu aracın nasıl çalıştığı ve neye benzediği aşağıdaki şekillerde görülebilir:
![]()
![]()
Havij ayrıca ne tür bir SQL veritabanı ile oluşturulduğunu bulmak için web sitesini tarar. Bu özelliği kullanmak , yalnızca uzmanlar tarafından oluşturulabilen çeşitli sorgular oluşturur ve bunlar artık temel özellikleri denemek için saldırıyı denemek için motive olan "n00b" adındaki acemi bir bilgisayar korsanı tarafından gönderilebilir . Xavi'nin SQL enjeksiyonuna karşı iyi korunan sitelerde başarılı olmadığı unutulmamalıdır . SQL ENJEKSİYON SALDIRILARINA KARŞI KORUMA
İyi haber şu ki, çoğu web yöneticisi kendilerini SQL enjeksiyon saldırılarına karşı nasıl koruyacakları konusunda bilgi sahibidir. Ancak ağ güvenliğinde bu saldırılara karşı hiçbir zaman% 100 koruma süresi yoktur.
Bazı güvenlik önlemleri vardır, ancak en önemlilerinden dördünden bahsediyoruz:
· Genel veri temizleme,
· Web uygulama güvenlik duvarını kullanma,
· Veritabanı ayrıcalıklarını bağlama göre sınırlama
· Kullanıcı tarafından SQL sorguları oluşturmaktan kaçınma.
- Verilerin genel temizliği -web siteleri, kullanıcının bağlama koyduğu tüm giriş verilerini filtrelemelidir. Örneğin, sayılar için giriş verileri, sayılar dışındaki karakterleri kabul etmemelidir, e-posta , uygun biçimde doldurulması için normal ifade kullanan bir e-postaya sahip olması beklenenler dışındaki karakterleri kabul etmemelidir ve neden bir verilen alan.
- Web uygulaması güvenlik duvarının kullanılması - en popüler örnek ücretsiz ModSecurity modülüdür , artık ModSecurity 2.7.7 sürümü mevcuttur ve aşağıdaki bağlantıdan indirilebilir:
Kod:
![]()
SpiderLabs/ModSecurity
ModSecurity is an open source, cross platform web application firewall (WAF) engine for Apache, IIS and Nginx that is developed by Trustwave's SpiderLabs. It has a robust event-based programmin...
www.modsecurity.org![]()
ve bu öncelikle SQL Server ile ilgili olduğundan, aşağıdaki bağlantı ayrıca bir Microsoft IIS Sunucusuna bir güvenlik duvarının nasıl kurulacağını da açıklamaktadır .
Kod:
https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#wiki-Installation_for_Microsoft_IIS
Güvenlik duvarı şu şekilde belirtilmelidir:
Kod:
<@modules>
<ad kaldır = "ModSecurityIIS" />
</modules>
Kodun aşağıdaki bölümü de web.config dosyasına eklenmelidir:
Kod:
<? xml version = "1.0" encoding = "UTF-8"?>
<yapılandırma>
<system.webServer>
<ModSecurity etkin = "true" configFile = "c: \ inetpub \ wwwroot \ xss.conf" />
</system.webserver>
</configuration>
- Bağlam içinde veritabanı ayrıcalıklarının sınırlandırılması - alanı kullanmak için minimum ayrıcalıklara sahip çeşitli veritabanı kullanıcıları oluşturmak, ör. oturum açma panelinin arkasındaki kod, kullanıcıyı yalnızca veri okuma / yazma hakkına sahip olduğu sayfalara göndermeli, böylece veritabanını tehlikeye atamaz veya her kullanıcının belirli haklarla doğrulanması gerekir.
- Kullanıcı tarafından SQL sorguları oluşturmaktan kaçının - verileri temizlemek kusurlu olsa bile, Değişken ifadeleri Saklanan Prosedürler ve İşlemler aracılığıyla SQL bağlantıları hazırlamaktam sorguları bildirmekten çok daha güvenlidir .
Yukarıda bahsedilen bu dört koruma tekniğinin her birinin uygulanması, SQL ile enjekte edilme olasılığında önemli bir azalma olacaktır. Tüm bu tekniklerin birlikte uygulanması çok yüksek derecede güvenlik sağlayacaktır. Bu nedenle, web sitenizin yaygın kullanımı, bir SQL enjeksiyonunun gelecekteki kurbanı olmamalıdır.
Önceden yapılmış bildirimler aracılığıyla C # .NET'te SQL enjeksiyonuna karşı koruma sağlamak için kullanılabilecek komut dosyalarından biri şudur:
Kod:
Dize sorgusu =
"SEÇİN Balance_account kullanıcı WHERE user_name =?";
Deneyin {
OleDbCommand cmd = new OleDbCommand (sorgu, bağl);
cmd.Parameters.Add (yeni OleDbParameter ("Tüketici Adı", Tüketici Adı.Text));
OleDbDataReader okuyucu = cmd.ExecuteReader ();
//…
} catch (OleDbException se)}
// Hata yönetimi
}
Eğitim amaçlı bir araştırmadan sonra, insanların bu tür konular hakkında konuşmak istemediğini düşünüyorum çünkü SQL enjeksiyonu gibi bir teknik kötü niyetli bir tekniktir ve insanlar bu tür araştırmaların kötü niyetli ve eğitim dışı amaçlarla yapıldığı konusunda önyargılıdırlar.
Bu içeriği görmek için giriş yapın.