Merhaba dostlarım, bu makalemde sizlere önce "Brute Force nedir?" konusunda bilgi vereceğim.
Detaylı bilgilere yer verdikten sonra makaleye Python3 ile yazdığım basit bir "ZİP Cracker" örneği bırakacağım.
Kodları inceleyeceğiz ve saldırının mantığını kavrayacağız.
Foruma katkısı ve bu alanda çalışacak arkadaşlara faydalı olması dileğiyle diyerek başlamak istiyorum.
İyi okumalar.
|
|
v
Brute-Force nedir?
"Brute Force" kelime anlamı ile "Kaba kuvvet" olarak dilimize çevrilmiştir. Kaba kuvvet saldırıları; bilgisayar korsanlarının oturum açma kimlik bilgilerini, şifreleme anahtarlarını ve parolaları kırmak için başvurdukları "Deneme yanılma" mantığına dayanan bir saldırı türüdür.
"Kaba Kuvvet" kavramı aslen, kullanıcıların hesaplarını ele geçirmek adına korsanların çok fazla ve yoğun girişimlerde bulunmalarından gelmektedir.
Bilindiği üzere bu saldırı türü eski bir yöntemdir ancak günümüzde hala etkili ve popüler olduğu da inkar edilmeyecektir. Parolaların uzunluğu ve karmaşıklığı işleri büyük ölçüde zorlasada bilgisayar korsanları, çeşitli yöntemler ile kurbanlarının hakkında bilgiler toplar ve kişiye özel "wordlist" oluşturarak bu karmaşıklığı çözmeye çalışır. Mantıklı çerçevesinde, günümüzde birçok insanın sosyal medya platformlarından kendi bilgilerini paylaştığı göz önüne alındığında bu yöntem hiç de fena sayılmaz öyle değil mi?
Kaba kuvvet saldırılarının yoğunlaştığı alanlar; parolalar, primary keys, API ve SSH olarak belirtebiliriz.
Bu saldırıları diğer saldırılardan ayıran en büyük durum ise bu saldırıların bir "entelektüel strateji"ye sahip olmamalarıdır.
Bilgisayar korsanları "Kaba-Kuvvet" saldırılarından neler kazanabilir?
Peki, bu korsanları ne motive ediyor?
Bu işlerden ne gibi kazançları var?
Bu sorulara birkaç maddede açıklık getirebiliriz;
Bir web sitesine itibari bir zarar vermek,
Çıkarlar için sistemleri ele geçirmek,
Uygulamalarda kesintilere sebep olarak maddi zarar vermek,
Kişisel verileri çalmak,
Çalınan verileri reklam şirketlerine satmak vb...
İsterseniz bu başlıkları birer cümle ile açıklayayım.
Bir web sitesine itibari bir zarar vermek; korsanların sitenizde "pornografik, şiddet içeren, ırkçı, toplumun huzuruna bozacak" içerikler enjekte etmesi bu başlığa bir örnektir.
Çıkarlar için sistemleri ele geçirmek; korsanların genellikle maddi bir çıkar uğruna botnet ağları kullanarak şirketlere saldırmaları, şirket çalışanlarının kişisel cihazlarına sızmaları ve karşılığında maddi bir beklenti içine girmeleri bu başlığa örnentir.
Uygulamalarda kesintilere sebep olarak maddi zarar vermek; korsanların web sitelerinin trafiklerini şişirerek sunucularında aksamaya sebep vermeleri bu başlığa örnektir.
Kişisel verileri çalmak; korsanların çevrimiçi kimlik bilgilerinizi çeşitli yöntemler ile ele geçirmesi ve bu bilgiler aracılığı ile banka hesaplarına yönelmeleri bu başlığa örnektir.
Çalınan verileri reklam şirketlerine satmak; yukarıdaki maddede olduğu gibi bazen korsanlar bu bilgileri 3. kişilere satarak gelir elde etmeyi amaçlamaları bu başlığa örnektir.
Brute-Force saldırı tipleri nelerdir?
Kaba kuvvet saldırıları sabit bir stratejiye sahip değildir. Ancak her saldırının temel dayanağı aynıdır.
Hadi bunları aşağıda sıralayalım ve birkaç cümle ile açıklayalım.
Saldırı tipleri;
Simple Brute-Force Attack,
Dictionary Attack,
Credential Stuffing,
Hybrid Brute Force Attack,
Reverse Brute Force Attack.
Simple Brute-Force Attack (basit kaba-kuvet); bu teknik, bilgisayar korsanının herhangi bir yazılım kullanmadan manuel işlemler ile kullanıcı bilgilerini tahmin etmesi olayıdır. Genel olarak parola kombinasyonları ve PIN modelleri ile kullanılır. Bu teknik gerçekten basit olabilmektedir. Sebebi ise, günümüzde hala zayıf parola kullanan, aynı parolayı her uygulamada kullanan, tuttuğu takımı, oturduğu şehirin plakasını vb. parolasında kullanan birçok insanın olmasıdır. Bu olaylar maalesef korsanların ekmeğine yağ sürmektedir.Dictionary Attack (sözlük); bu teknik, bilgisayar korsanının kendine bir kurban seçmesi ve bu kurbanın parolasını ele geçirmek için olası parola demetlerini test etmesi olayıdır. Bu teknik diğer tenkinlere göre zaman almaktadır ve başarı şansı daha düşüktür.
Credential Stuffing (kimlik bilgisi doldurmak); bu teknik, bilgisayar korsanının daha önce ele geçirdiği kimlik bilgilerini kullanarak farklı platformlarda yeni kurbanlar bulmaları olayıdır. Eğer çaldıkları bilgiler ile aynı bilgileri kullanan kullanıcılar var ise onları bu bilgiler sayesinde ağlarına eklerler. Bu teknik, çeşitli platformlarda aynı bilgileri kullanan kullanıcılar için gerçekten bir sorun olacaktır.
Hybrid Brute Force Attack (hibrit kaba-kuvvet); bu teknik, bilgisayar korsanının "basit kaba-kuvvet" ile "sözlük" tekniklerini birleştirdiği olaydır. Korsan kurbanın kullanıcı adını bilir ve parolasını elde etmek için ilk önce olası parolaları daha sonra ise parola kombinasyonlarını dener. Basit bir örnek vermek gerekirse; kullanıcı adı "wisdom" olan birine parola olarak "123wisdom, wisdom2022, 1905wisdom" gibi kombinasyonları deneyeceklerdir.
Reverse Brute Force Attack (ters kaba-kuvvet); bu teknik, bilgisayar korsanının bir ihlal sonucu ele geçirilmiş ve sızdırılmış parola verilerinin kullanıldığı olaylardır. Korsan önce bu bilinen parolalardan seçer daha sonra milyonlarca kullanıcı adı taşıyan listelere bu parolayı uygulamaya çalışır.
Nasıl önlem almalıyız?
Bu konuyu iki başlıkta inceleyeceğiz, kullanıcılar için ve geliştiriciler için.
Kullanıcılar için alınacak önlemler;
Uzun parolalar: Parolalar, daha uzun karakterler içermelidir. İçerisinde rakam, sembol, büyük küçük harf içermelidir ve en az 10 karakter uzunluğunda olmalıdır. Bu, parolanızın oralama 5 yıl gibi uzun bir sürede ancak kırılabileceği anlamına gelebilir. Ancak "süper bilgisayar" kullanılırsa işlem çok daha kısa sürecektir bununda farkına varalım.
Ayrıntılı parolalar: Bilindiği üzere her site bu kadar uzun parola kullanmayı maalesef desteklememektedir. O halde parola içeriği tek kelime olmamalıdır. Karmaşık kelimeler bütünü kullanılabilir. Bir kelimeyi özelleştirmek yerine birden fazla kelime kullanılabilir.
Kural: Parolanızı oluştururken sadece sizin anlayabileceğiniz bir kural yada kurallar koyabilirsiniz. Örneğin, "kırmızı" kelimesi yerine onu hatırlayacağınız "kan" gibi bir kelime kullanabilirsiniz. Bir başka örnek olara, yine sadece sizin anlayacağınız kısaltmalar da kullanabilirsiniz.
Sıklıktan kaçın: Araştırma yaparak sık kullanılan parolalardaki ortak özellikleri bulabilir ve parola oluştururken bunlardan uzak durabilirsiniz.
Farklı parolalar: Hesabınızın olduğu her platformun kendine özgü parolası olmalıdır. Birden fazla site için aynı parolayı kullanmak tehlikeli olabilir.
Parola yöneticileri: Bir parola yöneticisi kullanabilirsiniz. Bu sayede parolalarınız hem tek bir yerden kontrol edebilirsiniz hemde ziyaret ettiğiniz sitelerde bulunan izlemelere şifrelenmiş bilgiler gösterirsiniz.
---------------------------------------------------
Geliştiriciler için alınacak önlemler;
Yüksek şifreleme oranı kulanmak: Bir sistem yöneticisi, sistemi kaba kuvvet saldırılarına karşı korumak için bit oranı yüksek olan 256 bit şifreleme gibi şifrelemeler ile sistemi savunmalıdır.
Karıştır: Yönetici, parolaya tamamen rastgele oluşturulmuş bir harv ve sayı dizisi ekleyerek işleri karmaşık hale getirmelidir. Bu dizi farklı bir veritabanında tutulmalıdır.
2FA: Yönetici, iki adımlı kimlik doğrulamayı etkin hale getirmeli ve bu sisteme izinsiz girişler için bir tespit düzeneği kurmalıdır. Bu SMS veya Email olabilir.
Deneme sayısı: Geliştirici, oturum açmak için gerekli yeniden deneme işlemine bir sınır koymalıdır. Böylece bilgisayar korsanının vakit kayetmesine hatta hedef değiştirmesine sebep olunacaktır.
Hesap kilitlemek: Fazla hatalı giriş denemesinde hesabın kitlenmesi sağlanabilir. Bu işlem kullanıcı açısından biraz yorucu olabilir ancak güvenlik için gereklidir.
Captcha: Geliştirici, giriş kontrolü esnasında robotları(otomasyon) engellemek için Captcha doğrulama hizmetini etkinleştirmelidir.
IP listesi: Yönetici, ifşa olmuş saldırgan IP'lerini bir liste halinde hazırlayıp bunları kara listeye ekleyebilir. Ancak bu bilgiler sürekli takip edilip güncellenmelidir.
Python3 ile ZIP Cracker
Evet dostlar, "Brute-Force nedir?" konusunda bilinçlendik.
Şimdi ise sizlere basit bir ZIP uzantılı dosyalara bir wordlist yardımı ile kaba kuvvet saldırısı yapan Python kod dosyası bırakacağım.
Sizlerde şifreli bir zip dosyası oluşturup kırmayı deneyin.
Öncelikle bu araçta bize yardım edecek modül olan "pyzipper" modülünü indirmemiz gerekiyor.
Ayrıca isteğe bağlı olarak bize progress_bar hazırlayan "tqdm" modülünü de indirebilirsiniz.
Kodları tek tek açıkladıktan sonra toplu olarak vereceğim.
pip install pyzipperpip install tqdm
Öncelikle modülümüzü (pyzipper) projemize ekliyoruz. Burada bulunan diğer kütüphaneler ise; "sys = çıkış kontrolü, sleep = bekleme süresi, tqdm = progress bar" için kullanıldı haberiniz olsun.
Ardından kullanıcıdan, hem şifreli dosya hemde parola dosyasını almak için bir girdi işlemi yapacağız.
"String" formatında girdimizi aldık. Ancak burada kullanıcı gerçek dosyayı yazmak yerine saçma bir kelime de girebilir. O yüzden basit bir kontrol yazacağız. Bu işlem gerçekten basit bir işlem ve bozulabilmekte. Tam kontrol için sizin biraz araştırma yapmanızı istiyorum. Kolay gelsin
Burada yazdığımız kontrol, sonu ".zip & .txt" ile biten string bir ifadeyi kabul etmektedir. Bu kontrolden geçtiği zaman işlem, devam ederek bir "fileObject" değişkeni oluşturur ve bu değişkene "pyzipper" modülünün "AESZipFile" fonksiyonunu atar ve parametre olarak ise bizim kullanıcıdan aldığımız şifreli dosyayı yollar.
Daha sonra parola dosyasında kaç adet parola olduğu bir sayaç yardımı ile denetlenir.
Şimdi ise bizim bu parola dosyasını okumamız ve içerisindeki parolaları tek tek denememiz gerekiyor. Hadi yapalım.
İlk işlem olarak parola dosyamızı "rb" modunda okuduk. Ardından bir "for" döngüsü oluşturduk ve "tqdm" ile bir "progress_bar" atadık.
Burada bir "try/except" bloğu açarak dosya çıkartma işlemi olan "fileObject.extractall" işlemini yazdık. İşlem başarılı olursa dosyalar çıkarılacak ancak başarısız olursa devam edilecek ve bir sonraki parolaya geçilecek.
"Try" içerisindeki fonksiyon "True" değer alana kadar bu işlem döngüde kalacak.
Parola bulunursa "sys.exit" işlemi ile programdan çıkılacak. Eğer bulunamazsa "No pass match" yazısını alacağız.
En alttaki "else" bloğu ise baştaki "if" kontrolünde yanlış uzantılı dosya girildiğinde çalışacak ve mesajı verip programı sonlandıracak. Siz burada programdan çıkmak istemeyebilirsiniz. Bunun için işlemi bir döngüye alabilir ve bir komut verilene kadar çalışmasını sağlayabilirsiniz.
Evet arkadaşlar, Brute-Force'un mantığı deneme, deneme ve tekrar denemedir. Bizde basit birkaç python komutu ile tekrar tekrar deneyerek doğru parolayı bulmaya çalıştık.
Şimdi programın birkaç görselini ve kodlarını bırakacağım.
Python:
#w1sd0m
import pyzipper
import sys
from time import sleep
from tqdm import tqdm
banner="""
bbbbbbbb
WWWWWWWW WWWWWWWWiiii b::::::b tttt
W::::::W W::::::i::::i b::::::b ttt:::t
W::::::W W::::::Wiiii b::::::b t:::::t
W::::::W W::::::W b:::::b t:::::t
W:::::W WWWWW W:::::iiiiiiizzzzzzzzzzzzzzzzb:::::bbbbbbbbb rrrrr rrrrrrrrr uuuuuu uuuuuttttttt:::::ttttttt eeeeeeeeeeee
W:::::W W:::::W W:::::Wi:::::iz:::::::::::::::b::::::::::::::bb r::::rrr:::::::::r u::::u u::::t:::::::::::::::::t ee::::::::::::ee
W:::::W W:::::::W W:::::W i::::iz::::::::::::::zb::::::::::::::::br:::::::::::::::::ru::::u u::::t:::::::::::::::::t e::::::eeeee:::::ee
W:::::W W:::::::::W W:::::W i::::izzzzzzzz::::::z b:::::bbbbb:::::::rr::::::rrrrr::::::u::::u u::::tttttt:::::::tttttt e::::::e e:::::e
W:::::W W:::::W:::::W W:::::W i::::i z::::::z b:::::b b::::::br:::::r r:::::u::::u u::::u t:::::t e:::::::eeeee::::::e
W:::::W W:::::W W:::::W W:::::W i::::i z::::::z b:::::b b:::::br:::::r rrrrrru::::u u::::u t:::::t e:::::::::::::::::e
W:::::W:::::W W:::::W:::::W i::::i z::::::z b:::::b b:::::br:::::r u::::u u::::u t:::::t e::::::eeeeeeeeeee
W:::::::::W W:::::::::W i::::i z::::::z b:::::b b:::::br:::::r u:::::uuuu:::::u t:::::t ttttte:::::::e
W:::::::W W:::::::W i::::::i z::::::zzzzzzzb:::::bbbbbb::::::br:::::r u:::::::::::::::uu t::::::tttt:::::e::::::::e
W:::::W W:::::W i::::::iz::::::::::::::b::::::::::::::::b r:::::r u:::::::::::::::u tt::::::::::::::te::::::::eeeeeeee
W:::W W:::W i::::::z:::::::::::::::b:::::::::::::::b r:::::r uu::::::::uu:::u tt:::::::::::tt ee:::::::::::::e
WWW WWW iiiiiiizzzzzzzzzzzzzzzzbbbbbbbbbbbbbbbb rrrrrrr uuuuuuuu uuuu ttttttttttt eeeeeeeeeeeeee
"""
def zipbruter():
print(banner.center(150,'-'))
print("\n")
print("Hello, welcome to 'Wizbrute' tool.".center(150,'-'))
print("\n")
print("This tool helps you to crack encrypted zip files".center(150,'-'))
print("\n")
# input almak
#file = input(str("Enter your ZIP file: "))
#wordlist= input(str("Enter your passwords file: "))
# uğraşmak istemeyenler bu isimlerde dosyalar oluşturup direkt çalıştırabilir.
file="secret.zip"
wordlist="wordlist.txt"
# alınan inputun kontrolü sağlanır.
#if file[4:] == ".zip" and wordlist[4:] == ".txt":
print("SALDIRI BAŞLATILIYOR")
print("Lütfen bekleyiniz.")
sleep(2)
# dosya pyzipper modülüne aktarılır.
fileObject=pyzipper.AESZipFile(file)
# parola dosyasındaki kelime sayısı için bir sayaç ayarlanır.
count = len(list(open(wordlist,"rb")))
print("Total passwords to try: ", count)
with open(wordlist, "rb") as wordlist:
for word in tqdm(wordlist, total=count, unit="word"):
try:
# dosya çıkarılmaya çalışılır.
fileObject.pwd=word.strip()
fileObject.extractall()
except:
print("Trying password ", word.decode().strip())
continue
else:
print("<-- PASSWORD FOUND --> ".center(20,' '))
print("\n")
print(word.decode().strip())
sys.exit(0)
print("No password match!")
#else:
print("Hatalı dosya/dosyalar girdiniz.")
print("ÇIKIŞ YAPILIYOR...")
sleep(1)
sys.exit(1)
# fonksiyon çağrılır.
zipbruter()
^
|
|
Son olarak kendi kullandığım ve yazdığım zip dosyaları için parola kırıcıdan iki adet görsel bırakıyorum.
Aramızda kendi araçlarını yazmak isteyen arkadaşlara da motive olur.
^
|
|
|
|
Değerli dostlarım, güzel kardeşlerim;
Bu makalemde kısaca "Brute-Force nedir?" sorusuna cevap bulduk.
Ardından "Python3 ile Brute-Force Aracı nasıl yazılır?" konusunda bir örnek yaptık.
Kendi hack araçlarını yazmak isteyenlere de yardımcı olurum, hatta gerek duyarsam yazdığım araçları geliştirip detaylı bir şekilde paylaşabilirim.
Sağlıcakla kalın.
Son düzenleme:



