Hackerlar SQL Injection ve DDoS ile Web Sitelerini Nasıl Devraldı?
Anonim ve LulzSec hacker gruplarının olaylarını yalnızca gevşek bir şekilde izleseniz bile, muhtemelen rezil Sony hackleri gibi web sitelerinin ve hizmetlerin hacklendiğini duymuşsunuzdur. Hiç nasıl yaptıklarını merak ettiniz mi??
Bu grupların kullandığı çok sayıda araç ve teknik var ve bunu kendiniz yapmak için bir el kitabı vermeyelim de, neler olduğunu anlamakta fayda var. Kullanarak sürekli duydukları saldırıların ikisi “(Dağıtılmış) Hizmet Reddi” (DDoS) ve “SQL Enjeksiyonları” (SQLI). İşte nasıl çalışıyorlar?.
Tarafından görüntü xkcd
Hizmeti engelleme saldırısı
Bu ne?
Bir sistem, bu durumda bir web sunucusu, bir kerede sunucu kaynaklarının aşırı yüklenmesi için bir kerede çok fazla istek aldığında “hizmet reddi” (bazen “hizmet reddi” olarak da adlandırılır) saldırısı gerçekleşir. ve kapanıyor. Başarılı bir DDoS saldırısının amacı ve sonucu, hedef sunucudaki web sitelerinin yasal trafik istekleri için kullanılamadığıdır..
O nasıl çalışır?
Bir DDoS saldırısının lojistiği en iyi örneklerle açıklanabilir.
Bir milyon insanın (saldırganların) çağrı merkezlerini alarak Şirket X'in işini zorlaştırmak amacıyla bir araya geldiğini hayal edin. Saldırganlar koordine ediyor, böylece Salı günü saat 9'da, hepsi Şirket X'in telefon numarasını arayacaklar. Büyük olasılıkla, Şirket X'in telefon sistemi bir milyon çağrıyı aynı anda yapamayacağından, gelen tüm hatlar saldırganlar tarafından bağlanacaktır. Sonuç, meşru müşteri çağrılarının (yani, saldırgan olmayanlar) gerçekleşmemesidir, çünkü telefon sistemi saldırganların çağrılarını idare etmeye bağlı olduğu için. Bu yüzden özünde Şirket X, meşru taleplerin yerine getirememesi nedeniyle potansiyel olarak işlerini kaybediyor.
Bir web sunucusuna DDoS saldırısı tam olarak aynı şekilde çalışır. Meşru istekler ve saldırganlardan hangi trafiğin kaynaklandığını bilmenin neredeyse hiçbir yolu olmadığından, web sunucusu isteği işleyene kadar, bu tür bir saldırı genellikle çok etkilidir.
Saldırıyı yürütmek
Bir DDoS saldırısının “kaba kuvveti” doğası gereği, aynı anda saldırmak için koordine edilmiş çok sayıda bilgisayara sahip olmanız gerekir. Çağrı merkezi örneğimize tekrar bakarsak, bu, tüm saldırganların hem sabah 9’da aramayı hem de o zaman aramayı bilmesini gerektiriyor. Bir web sunucusuna saldırmak söz konusu olduğunda bu prensip kesinlikle işe yarayacak olsa da, gerçek insanlı bilgisayarlar yerine zombi bilgisayarlar kullanıldığında önemli ölçüde kolaylaşıyor..
Muhtemelen bildiğiniz gibi, sisteminizde bir kez uykuda ve bazen talimatlar için "telefon ev" olarak adlandırılan birçok kötü amaçlı yazılım ve truva atı çeşidi vardır. Bu talimatlardan biri, örneğin, saat 9'da Şirket X'in web sunucusuna tekrarlanan istekleri göndermek olabilir. Böylece, ilgili kötü amaçlı yazılımın bulunduğu yerdeki tek bir güncellemeyle, tek bir saldırgan büyük bir DDoS saldırısı gerçekleştirmek için yüzbinlerce tehlikeye giren bilgisayarı anında koordine edebilir.
Zombi bilgisayarları kullanmanın güzelliği sadece etkinliğinin yanı sıra, saldırganın saldırıyı gerçekleştirmek için bilgisayarlarını hiç kullanması gerekmediği için anonimliğini de kapsıyor..
SQL Enjeksiyon Saldırısı
Bu ne?
Bir “SQL Injection” (SQLI) saldırısı, zayıf web geliştirme tekniklerinden ve tipik olarak hatalı veritabanı güvenliğinden faydalanan bir istismardır. Başarılı bir saldırının sonucu, bir kullanıcı hesabını taklit etmekten ilgili veritabanının veya sunucunun tamamen uzlaşmasına kadar değişebilir. Bir DDoS saldırısından farklı olarak, bir web uygulaması uygun şekilde programlanmışsa, bir SQLI saldırısı tamamen ve kolayca önlenebilir.
Saldırıyı yürütmek
Bir web sitesine giriş yaptığınızda ve kullanıcı adınızı ve şifrenizi girdiğinizde, kimlik bilgilerinizi test etmek için web uygulaması aşağıdaki gibi bir sorgu çalıştırabilir:
SELECT UserID FROM Kullanıcılarından NEREDE UserName = "myuser" AND Password = "mypass";
Not: SQL sorgusunda dize değerleri tek tırnak işaretleri içine alınmalıdır, bu yüzden kullanıcı tarafından girilen değerler etrafında görünmelidir..
Dolayısıyla, girilen kullanıcı adı (myuser) ve şifrenin (mypass) birleşimi, bir Kullanıcı Kimliği'nin geri döndürülebilmesi için Kullanıcılar tablosundaki bir girişle eşleşmelidir. Eşleşme yoksa, Kullanıcı Kimliği döndürülmez, bu nedenle giriş kimlik bilgileri geçersizdir. Belirli bir uygulama farklı olabilir, ancak mekanik oldukça standart.
Şimdi, kullanıcının web formuna girdiği değerleri değiştirebileceğimiz bir şablon kimlik doğrulama sorgusuna bakalım:
SELECT UserID FROM Kullanıcılarından NEREDE UserName = "[user]" AND Şifre = "[pass]"
İlk bakışta bu, kullanıcıları kolayca doğrulamak için basit ve mantıklı bir adım gibi görünebilir, ancak kullanıcı tarafından girilen değerlerin basit bir şekilde değiştirilmesi bu şablonda gerçekleştirilirse, bir SQLI saldırısına karşı hassastır.
Örneğin, kullanıcı adı alanına "myuser'-" girildiğini ve şifreye "yanlış geçiş" yapıldığını varsayalım. Şablon sorgumuzda basit bir değiştirmeyi kullanarak şunu elde ederiz:
SELECT UserID FROM Kullanıcılarından NEREDE UserName = "myuser" - 'AND Password = "wrongpass"
Bu ifadenin anahtarı, iki çizginin dahil edilmesidir. (-)
. Bu, SQL ifadeleri için başlangıç yorum belirtecidir, bu nedenle iki çizgi (dahil) sonrasında görünen her şey göz ardı edilir. Temel olarak, yukarıdaki sorgu veritabanı tarafından şu şekilde yürütülür:
SELECT UserID FROM Kullanıcılarından NEREDE UserName = "myuser"
Buradaki göz ardı ihmali şifre kontrolünün eksikliğidir. İki çizgiyi kullanıcı alanının bir parçası olarak dahil ederek, şifre kontrol koşulunu tamamen atladık ve ilgili şifreyi bilmeden “myuser” olarak giriş yaptık. İstenmeyen sonuçlar üretmek için sorguyu manipüle etmenin bu eylemi bir SQL enjeksiyon saldırısıdır.
Ne hasar yapılabilir?
SQL enjeksiyon saldırısı, ihmal ve sorumsuz uygulama kodlamasından kaynaklanır ve tamamen önlenebilirdir (bir an içinde ele alacağı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 veri tabanına bir giriş yapması gerekir (not, bu, web sitesinin kendisine giriş yapan bir kullanıcıdan farklıdır). Web uygulamasının hangi izinleri gerektirdiğine bağlı olarak, bu ilgili veritabanı hesabı, mevcut tablolardaki okuma / yazma izninden yalnızca tam veritabanı erişimine kadar her şeyi gerektirebilir. Bu şimdi net değilse, birkaç örnek biraz netlik sağlamaya yardımcı olmalıdır.
Yukarıdaki örneğe göre, örneğin girerek bunu görebilirsiniz., "kullanıcı" - "," yönetici "-"
veya başka bir kullanıcı adıyla, şifreyi bilmeden siteye o kullanıcı olarak hemen giriş yapabiliriz. Bir kez sisteme girdiğimizde, aslında o kullanıcı olmadığımızı bilmediğimiz için ilgili hesaba tam erişimimiz olur. Veritabanı izinleri bunun için bir güvenlik ağı sağlamayacaktır, çünkü tipik olarak bir web sitesinin ilgili veritabanına en azından okuma / yazma erişimi olmalıdır..
Şimdi web sitesinin, kayıtları silme, tablo ekleme / kaldırma, yeni güvenlik hesapları ekleme vb. Özelliklerine sahip olan kendi veritabanı üzerinde tam denetime sahip olduğunu varsayalım. Bazı web uygulamalarının bu tür izinlere ihtiyacı olabileceğini unutmayın. otomatik olarak tam kontrol sağlandığı kötü bir şey değildir.
Bu durumda yapılabilecek hasarı göstermek için, yukarıdaki çizgi romanda verilen örneği aşağıdakileri kullanıcı adı alanına girerek kullanacağız: "Robert '; DROP TABLO Kullanıcıları; -".
Basit bir değiştirmeden sonra, kimlik doğrulama sorgusu şöyle olur:
SELECT UserID FROM Kullanıcılarından NEREDE UserName = "Robert"; DROP TABLE Users; - 'AND Password = "yanlış geçiş"
Not: noktalı virgül bir SQL sorgusunda bulunur, belirli bir ifadenin sonunu ve yeni bir ifadenin başlangıcını belirtmek için kullanılır.
Hangi veritabanı tarafından yürütülür:
SELECT UserID FROM Kullanıcılarından NEREDE UserName = "Robert"
DROP TABLE Kullanıcıları
Bu yüzden, aynen 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ğerleri değiştirebilir, tabloları (veya veritabanının tamamını) bir metin dosyasına değiştirebilir, yeni giriş hesapları oluşturabilir, hatta tüm veritabanı kurulumunu ele geçirebilir..
SQL enjeksiyon saldırısını önleme
Daha önce birkaç kez bahsettiğ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 işlemi yaptığımızda yaptığımız gibi, kullanıcı girişine asla kör olmamanızdır..
Bir SQLI saldırısı, girdilerinizi sterilize etmek (veya kaçmak) olarak adlandırılan şeyle kolayca engellenir. Dezenfekte etme işlemi aslında oldukça önemsizdir, çünkü esasen yaptığı tüm satır içi tek bir alıntı (') karakterlerini uygun bir şekilde ele almak, böylece bir SQL deyiminin içindeki bir dizgeyi zamanından önce sonlandırmak için kullanılamaz..
Örneğin, bir veritabanında “O'neil” araması yapmak istiyorsanız, basit bir ikame kullanamazsınız, çünkü O'dan sonraki tek alıntı dizgenin zamanından önce bitmesine neden olur. Bunun yerine, ilgili veritabanının kaçış karakterini kullanarak onu temizleyin. Satır içi tek bir alıntı için kaçış karakterinin her bir alıntıyı \ sembolüyle önyüklemediğini varsayalım. Böylece “O'neal” “O \ 'neil” olarak sterilize edilebilir..
Bu basit temizlik eylemi, bir SQLI saldırısını büyük ölçüde engelliyor. Örnek olarak, önceki örneklerimizi tekrar gözden geçirelim ve kullanıcı girişi sterilize edildiğinde ortaya çıkan sorguları görelim..
myuser'--
/ wrongpass:
SELECT UserID FROM Kullanıcılarından NEREDE UserName = "myuser \" - 'AND Password = "wrongpass"
Kullanıcımdan sonraki tek alıntı kaçtığından (hedef değerin bir parçası olarak kabul edilir), veritabanı tam anlamıyla KullanıcıAdı için arama yapar. "Myuser '-".
Ek olarak, kısa çizgiler SQL ifadesinin kendisine değil de dizge değerine dahil edildiklerinden, bir SQL yorumu olarak yorumlanmak yerine hedef değerin bir parçası olarak kabul edilirler..
Robert '; DROP TABLE Kullanıcıları;--
/ wrongpass:
SELECT UserID FROM Kullanıcılarından NEREDE UserName = "Robert \"; DROP TABLE Users; - 'AND Password = "yanlış geçiş"
Robert’den sonra gelen tek bir alıntıdan kaçmak suretiyle, hem noktalı virgül hem de kısa çizgiler KullanıcıAdı arama dizesinde bulunur, böylece veritabanı tam anlamıyla arama yapar "Robert '; DROP TABLO Kullanıcıları; -"
tabloyu silmek yerine silmek.
Özetle
Web saldırıları geliştikçe ve daha sofistike olurken veya farklı bir giriş noktasına odaklanırken, istismar etmek için tasarlanan ve serbestçe kullanılabilen birkaç "hacker aracı" nın ilham kaynağı olan denenmiş ve gerçek saldırılara karşı korumayı unutmamak önemlidir..
DDoS gibi bazı saldırı türlerinden SQLI gibi bazı saldırılar kolayca önlenemez. Bununla birlikte, bu tür saldırıların yapabileceği hasar, alınan önlemlere bağlı olarak, rahatsızlıktan felakete kadar herhangi bir yerde değişebilir..