26Aug

Hacker'lar Web Sitelerini SQL Enjeksiyonu ve DDoS ile Nasıl Alıyor?

Anonymous ve LulzSec korsanları gruplarının olaylarını gevşekçe izlediyseniz bile, muhtemelen kötü niyetli Sony saldırıları gibi saldırıya uğramış web siteleri ve hizmetleri hakkında bilgi sahibisiniz. Nasıl yaptıklarını merak ettiniz mi?

Bu grupların kullandığı bir takım araçlar ve teknikler vardır ve siz bunu kendiniz yapmak için bir el kitabı vermeye çalışmamakla birlikte, neler olup bittiğini anlamanız yararlıdır."Dağıtık" Hizmet Reddi "(DDoS) ve" SQL Enjeksiyonları "(SQLI) olmak üzere sürekli duyduğunuz saldırıların ikisi.İşte onlar nasıl çalışıyor.

Resim by xkcd

Hizmet Reddini Saldırı

Nedir?

Bir sistemin( bu durumda bir web sunucusu) bir kerede çok fazla istek aldığında sunucu kaynaklarının aşırı yüklendiğinde "hizmet reddi"( bazen "dağıtılmış hizmet reddi" veya DDoS) saldırısı meydana gelir; sistem sadece kilitlenirup ve kapanır. Başarılı bir DDoS saldırısı hedefi ve sonucu hedef sunucudaki web sitelerine yasal trafik talepleri için erişilemiyor.

Nasıl Çalışır?

DDoS saldırısının lojistiği bir örnekle en iyi şekilde açıklanabilir.

Bir milyon insanın( saldırganların), Şirket X'in işini çağrı merkezi altına alarak engellemeyi hedeflediğini düşünün. Saldırganlar koordinat kurarak, sabah 9.00'da Salı günü şirket X'in telefon numarasını arayacaklar. Büyük ihtimalle, Şirket X'in telefon sistemi bir seferde milyon çağrı yapamaz ve böylece gelen tüm hatlar saldırganlar tarafından bağlanacaktır. Sonuç, meşru müşteri çağrılarının( saldırgan olmayanların) geçememesi, çünkü telefon sistemi saldırganlardan gelen çağrıları bağlar. Esasen, X şirketi meşru isteklerin geçememesi nedeniyle işini kaybediyor.

Bir web sunucusundaki bir DDoS saldırısı tamamen aynı şekilde çalışır. Web sunucusu isteği işleme koyuncaya kadar meşru isteklere karşı saldırı yapanların trafiğinin ne olduğunu öğrenmenin neredeyse hiçbir yolu yoktur, bu tür bir saldırı genellikle çok etkilidir.

Saldırı

Gerçekleştirildi DDoS saldırısının "kaba kuvvet" özelliği nedeniyle, aynı anda saldırmak için koordine edilmiş çok sayıda bilgisayarınızın olması gerekir.Çağrı merkezi örneğimizi gözden geçirirseniz, bu, saldırganların her ikisinin de sabah 9'da araması gerektiğini ve aslında o anda çağrı yapmasını gerektirir. Bu ilke, bir web sunucusuna saldırı söz konusu olduğunda kesinlikle geçerli olmakla birlikte, gerçek insanlı bilgisayarlar yerine zombi bilgisayarların kullanılması daha da kolaylaşıyor.

Muhtemelen bildiğiniz gibi, bir zamanlar sisteminizde uyku halindedir ve bazen talimatlar için "telefonla evde" olan çok sayıda kötü amaçlı yazılım ve trojan bulunmaktadır. Bu yönergelerden biri, örneğin, Şirket X'in web sunucusuna sabah 9'da tekrarlanan istekler göndermek olabilir. Dolayısıyla, ilgili kötü amaçlı yazılımların bulunduğu yerdeki tek bir güncelleme ile tek bir saldırgan, tehlike altındaki bilgisayarların yüzbincesini anında DDoS saldırısı gerçekleştirmek için koordine edebilir.

Zombi bilgisayarları kullanmanın güzelliği yalnızca etkinliği değil, aynı zamanda saldırganın aslında saldırıyı gerçekleştirmek için bilgisayarlarını kullanmak zorunda kalmadığı gizli bir sistem.

SQL Enjeksiyon Saldırısı

Nedir?

"SQL injection"( SQLI) saldırısı, kötü web geliştirme tekniklerinden yararlanan ve genellikle hatalı veritabanı güvenliği ile bir araya getiren bir istismardır. Başarılı bir saldırının sonucu, bir kullanıcı hesabının kimliğine bürünülmeden, ilgili veritabanı veya sunucunun tam bir uzlaşmasına kadar olabilir. DDoS saldırısından farklı olarak, bir web uygulaması uygun bir şekilde programlandıysa, bir SQLI saldırısı tamamen ve kolayca önlenebilir.

Saldırı

Yürütme Bir web sitesine giriş yaptığınızda kullanıcı adınızı ve parolanızı girdiğinizde kimlik bilgilerinizi sınamak için web uygulaması aşağıdakine benzer bir sorgu çalıştırabilir:

Kullanıcı Kimliklerini Seçin WHERE UserName = 'myuser' ve Parola= 'mypass';

Not: Bir SQL sorgusundaki dize değerleri, tek tırnak işaretleri içine alınmalıdır, bu nedenle kullanıcı girilen değerlerin etrafında görünürler.

Böylece, girilen kullanıcı adı( myuser) ve parola( mypass) kombinasyonu, bir Kullanıcı Kimliği'nin döndürülmesi için Kullanıcılar tablosundaki bir girdiyle eşleşmelidir. Eşleşme yoksa, oturum açma kimlik bilgileri geçersiz olduğundan hiçbir Kullanıcı Kimliği döndürülmez. Belirli bir uygulama farklı olabilir, ancak mekanik oldukça standarttır.

Şimdi, kullanıcıların web formuna girdikleri değerlerin yerine geçebilecek bir şablon kimlik doğrulama sorgusuna göz atalım:

SELECT Kullanıcı Kimliği Kullanıcılardan WHERE Kullanıcı Adı = '[kullanıcı]' VE Parola = '[geçer]'

İlk bakışta bukullanıcıları kolaylıkla doğrulamak için basit ve mantıklı bir adım gibi görünebilir ancak kullanıcının şablonunda basit bir değiştirme girildiğinde bir SQLI saldırısına maruz kalır.

Örneğin, kullanıcı adı alanına "myuser'-" girildiğini ve şifreye "wrongpass" girildiğini varsayalım.Şablon sorgudaki basit ikame kullanarak şu şekilde bir şablon sorgusu elde ederiz:

SELECT Kullanıcı Kimliği Kullanıcılardan WHERE Kullanıcı Adı = 'myuser' - 'VE Parola =' yanlış geçersiz '

Bu ifadenin bir anahtarı iki çizgi( -) içermektedir..Bu, SQL ifadeleri için başlama yorum simgesidir, bu nedenle iki çizgi( her iki çizgi de dahil) sonrasında görünen herhangi bir şey yoksayılacaktır. Aslında, yukarıdaki sorgu veritabanında şu şekilde yürütülür:

SELECT Kullanıcı Kimliği Kullanıcılardan WHERE KullanıcıAdı = 'myuser'

Burada göze çarpan bir eksiklik, şifre kontrolünün olmamasıdır. Kullanıcı alanının bir parçası olarak iki çizgi ekleyerek, şifre kontrol koşulunu tamamen atladık ve ilgili şifreyi bilmeden "myuser" olarak giriş yapabildik.İstenmeyen sonuçların üretilmesi için sorguyu yönlendiren bu hareket bir SQL enjeksiyon saldırısıdır.

Hangi hasar yapılabilir?

Bir SQL enjeksiyon saldırısı, ihmalkar ve sorumsuz uygulama kodlamasından kaynaklanır ve tamamen önlenebilir( bir an karşılayacağız), ancak yapılabilecek hasarın kapsamı, veritabanı kurulumuna bağlıdır. Bir web uygulamasının, arka uç veritabanıyla iletişim kurması için, uygulamanın veritabanına bir giriş sağlamalıdır( not, bu, web sitesinin kendisinden bir kullanıcı girişinden farklıdır).Web uygulamasının hangi izinlere ihtiyacı olduğuna bağlı olarak, bu ilgili veritabanı hesabı varolan tablolardaki okuma / yazma izninden veritabanına tam erişime kadar herhangi bir işlemi gerektirebilir.Şimdilik bu net değilse, birkaç örnek biraz netlik sağlamaya yardımcı olmalı.

Yukarıdaki örneğe dayanarak, örneğin "youruser '-", "admin' -" veya başka herhangi bir kullanıcı adı girerek, parolayı bilmeden o kullanıcı olarak anında siteye giriş yapabileceğimizi görebilirsiniz. Sisteme girdiğimizde biz aslında o kullanıcı olmadığımızı bilmediğimizden ilgili hesaba tam erişime sahibiz. Veritabanı izinleri bunun için bir güvenlik ağı sağlamaz çünkü genellikle bir web sitesinin ilgili veritabanına en azından okuma / yazma erişimi olmalıdır.

Şimdi, web sitesinin kayıtları silmek, tabloları eklemek / kaldırmak, yeni güvenlik hesapları eklemek vb. Özelliklerini veren ilgili veritabanının tam kontrolüne sahip olduğunu varsayalım. Bazı web uygulamalarının bu tür izinlere ihtiyaç duyabileceğini unutmamak önemlidir;Tam denetime izin verilmesi otomatik olarak kötü bir şey değildir.

Yani bu durumda yapılabilecek hasarı göstermek için, kullanıcı adı alanına aşağıdakileri girerek yukarıdaki çizgi romanda verilen örneği kullanacağız: "Robert '; DROP TABLE Users; -".Basit ikame işleminden sonra kimlik doğrulama sorgusu şöyle olur:

SELECT Kullanıcı Kimliği Kullanıcılardan WHERE KullanıcıAdı = 'Robert';DROP TABLE Users; - 'VE Parola =' yanlış geç '

Not: noktalı virgül bir SQL sorgusundayken belirli bir deyimin sonunu ve yeni bir deyimin başlangıcını belirtmek için kullanılır.

Hangi veritabanı tarafından idam ediliyor:

SELECT KullanıcıID FROM Users WHERE KullanıcıAdı = 'Robert'

DROP TABLE Users

Dolayısıyla, tüm kullanıcılar tablosunu silmek için bir SQLI saldırısı kullandık.

Elbette, izin verilen SQL izinlerine bağlı olarak saldırgan değerler değiştirebilir, tabloları( veya veritabanının kendisinin tamamı) bir metin dosyasına dökebilir, yeni oturum açma hesapları oluşturabilir veya tüm veritabanı kurulumunu kaçırabilir gibi, daha da kötüsü olabilir.

Bir SQL enjeksiyon saldırısı önleme

Daha önce birkaç kez belirttiğimiz gibi bir SQL enjeksiyon saldırısı kolayca önlenebilir. Web geliştirmenin temel kurallarından biri, yukarıdaki şablon sorgumuzda basit bir değiştirme gerçekleştirdiğimizde yaptığımız gibi hiçbir zaman körü körüne kullanıcı girdisine güvenmemenizdir.

Bir SQLI saldırısı, girdilerinizin sanitize edilmesi( veya kaçması) denilen şey tarafından kolayca engellenir. Sıhhileştirme süreci aslında oldukça önemsizdir, çünkü özünde yaptığı şey herhangi bir satıriçi tek tırnak( ') karakterlerini uygun bir şekilde idare ederek bir SQL deyiminin içindeki bir dizgeyi zamanından önce sonlandırmak için kullanılamayacakları şeklindedir.

Örneğin bir veritabanında "O'neil" 'i aramak isterseniz, O'dan sonra tek tırnak dizesinin erken bitmesine neden olacağı için basit ikame kullanamazsınız. Bunun yerine ilgili veritabanının kaçış karakterini kullanarak sanitize edin. Satır içi tek tırnak için kaçış karakterinin, her bir teklifin bir \ simgesiyle önüne getirildiğini varsayalım. Dolayısıyla "O'neal" "O \ 'neil" olarak sanitize edilecek.

Bu basit sağlık koşulları bir SQLI saldırısını hemen hemen önler.Örnek vermek gerekirse, önceki örneklerimize tekrar göz atalım ve kullanıcı girişi sanitize edildiğinde ortaya çıkan sorguları görelim.

myuser '- / wrongpass :

Kullanıcı Kimden Select WHERE Kullanıcı Adı =' myuser \ '-' AND Parola = 'wrongpass'

Myuser'den sonra tek tırnak çıktığından dolayı( hedefin bir parçası olarak kabul edilir)değeri), veritabanı tam anlamıyla "myuser" - "KullanıcıAdı için arama yapacaktır. Ayrıca, çizgiler SQL deyiminin değil dize değerine dahil edildiğinden, bir SQL yorumu olarak yorumlanmak yerine hedef değerin bir parçası olarak düşünülür.

Robert ';DROP TABLO Kullanıcılar; - / wrongpass :

Kullanıcı Kimliği Kullanıcılardan Seç WHERE UserName = 'Robert \';DROP TABLE Users; - 'VE Parola =' wrongpass '

Robert'ın ardından yalnızca tek tırnaktan çıkmakla birlikte, kullanıcı adı arama dizesinde hem noktalı virgül hem de tire işaretleri bulunur, böylece veritabanı "Robert" arar; DROP TABLE Users;- "yerine tablo silmek yürütme.

Özet

Web saldırıları evrilir hale gelip daha sofistike hale gelir veya farklı bir giriş noktasına odaklanırken, bunları sömürmek için tasarlanmış serbestçe temin edilebilen birkaç "hacker aracı" nın esin kaynağı olan güvenilir ve gerçek saldırılara karşı korumayı unutmayın..

DDoS gibi bazı saldırı türleri kolayca önlenemezken SQLI gibi diğer saldırılar kaçınılmazdır. Bununla birlikte, bu tür saldırıların yapabileceği hasar, alınan önlemlere bağlı olarak bir rahatsızlıktan felakete kadar değişebilir.