11 Nisan 2016

Parola Kırma Saldırıları

Parolalar kimlik ve yetki denetimi için birçok alanda kullanılmaktadırlar. Genellikle  açık metin halinde saklanmak yerine şifrelenerek hash olarak saklanır. Hash oluşturulurken değişken uzunluktaki metinler sabit uzunluğa çevrilir ve bu çevrim yapılırken tek yönlü matematiksel bir fonksiyon kullanılması sonucu karışık sayı ve rakamlardan oluşan eşsiz metinler üretilir. Örneğin veritabanında saklanan kullanıcı bilgileri veya işletim sistemlerinde tutulan kullanıcı bilgileri direk açık metin halinde saklanmaz. Birinin o bilgileri okuyabilme ihtimali göz önünde bulundurularak hash halinde tutulur. Bu saldırganların işini biraz daha zorlaştırmaktadır çünkü hash'ler orjinal metin ile tek yönlü matematiksel bir bağa sahiptir. Hash'ine ulaşılan bir metni orjinal haline çevirmek genellikle zor bir iştir. 

Hash'ler tek yönlü matematiksel fonksiyonlar olduğu için orjinal metni bulmak için yapılması gereken iş bir kelime listesinden deneme yapmaktır, metni hash'e çevirip kıyaslama yaparak doğru hash uyumu sağlanana kadar denemektir. Yani parola kelime listemiz içinde varsa bu deneme sonucunda parola bulunabilir.

Ayrıca hash'ler oluşturulurken metindeki küçük bir değişiklik Hash'in tamamen yapısını değiştirir. Örneğin “Btrisk” metnini md5 algoritması ile şifrelersek 488c15f6a3de88d9ea0d5dad271dc270 hash'ine ulaşırız, ancak “btrisk” : 1b5a1cb6143a369908a8c1a8225cac85 hashine sahiptir. Arada bir bağlantı olmadığı açıktır. Dolayısıyla hash'in çözülmeye yaklaşıldığını anlamak mümkün değildir.  Parola tahminimiz md5 algoritması ile şifrelenir, hash ile karşılaştırılır, uyum sağlanmış ise doğru parola bulundu demektir, aksi halde bulamamıştır.

Salt eklenmesi


Lookup table ve Rainbow table bir şifreleme metodu için bütün parolalar aynı şekilde üretilmişse kullanışlıdır. İki farklı kullanıcı aynı parolaya sahipse hash'leri aynı olur. Parola içerisine salt ismi verilen, her defasında random olarak üretilen stringleri ekleyerek birbirinden farklı şekillerde oluşmuş hash'ler üretebiliriz. Yukarıda da görüldüğü gibi aynı parola için her defasında farklı hash üretilmiştir. Parolanın doğruluğunu kontrol etmek için salt'e ihtiyaç vardır dolayısıyla veritabanında veya hash'in kendisi içerisinde bir yerde tutulmalıdır. Bu sayede Rainbow table, Lookup table etkisiz olur.

Örneğin Linux kullanıcı parolaları hash olarak SAM isimli dosyada tutulur. Linux'de /etc/shadow dosyasında saklanır. Bu dosyalara admin yetkisi olmadan erişim sağlanamaz. Windows hash hesaplanırken salt eklentisi kullanılmaz. 

Atak Türleri


Dictionary Attack: Sözlük şeklinde oluşturulmuş kelime listesini deneyerek şifre bulmaya çalışılır.
Rainbow Table : Bir çok sistem parolaları hash şeklinde sakladığı için bu verilere ulaşılsa dahi eşleştirme yapılarak veri tespit edilmesi gerekir. Bunun bir yolu elimizdeki bir wordlist ile kelimeleri hash haline getirip kıyaslama yaparak bulabiliriz. Bir diğer hızlı yolu ise her kelime için karşılığında hash'i hazır bulunan ve direk karlılaştırma yapmak için hazırlanmış tablolar olan rainbow table kullanmaktır.
Brute Force : En verimsiz ve uzun süren yoldur. Tüm ihtimallerin denenmesi mantığına dayanır. İsteğe göre harfler, rakamlar, özel sembollerin belirlenen uzunluktaki oluşabilecek tüm kombinasyonları denenir. Teoride yeterli zaman ve kaynak (CPU) olduğu sürece bütün parolaların brute force ile kırılması mümkündür. Burada yeterli süreden kasıt onlarca yıl bile sürebileceğidir.
Hybrid : Sözlük kelimeleri ile özel karakterler sayıların kombine edilerek elde edilen şifrelerin denenmesidir.

Kullanılabilecek Araçlar


Ophcrack : Rainbow table mantığı ile çalışan ücretsiz bir uygulamadır. Windows password hash kırmak için kullanılabilir.
Cain Abel:  Windows için geliştirilmiş en popular şifre kırma araçlarındandır, NTLM, NTLMv2, MD5, wireless, Oracle, MySQL, SQL Server, SHA1, SHA2, Cisco, VoIP gibi bir çok hash kırabilmektedir.
Brutus: Sadece windows için geliştirilmiş HTTP, POP3, FTP, SMB, TELNET, IMAP, NNTP gibi birçok yetkilendirme türünü desteklemektedir.
John The Ripper : C dili ile geliştirmiş popüler bir şifre kırma aracıdır.
CUPP : Özgün wordlistler oluşturmak için kullanılan güçlü bir araçtır. Hedef kullanıcı hakkında sorular sorarak daha alakalı kelimeler çıkarmaya çalışır.
Hydra : 50'den fazla protocol için remote saldırı yapabilen bir şifre kırma aracıdır. Linux terminali aracılığıyla çalıştırılabildiği gibi user interface'de sunmaktadır.
Cewl : Wordlist oluşturma aracıdır. Verilen web sayfasını inceleyerek kelimelerin alaka düzeyini artırmayı amaçlar.
Hydra : Dictionary attack mantığıyla çalışan online şifre kırma aracıdır. Sadece web servislerindeki formlarla sınırlı olmayıp MAP, SMB, HTTP, VNC, MS-SQL MySQL, SMTP, SSH, gibi bir çok servise saldırı yapabilmektedir.
Medusa : Paralel tarama yapabileceğimiz hızlı ve syntax’ı çok kolay olan bir parola kırma aracıdır. HTTP, HTTP Form, IMAP, MS-SQL, MySQL, NCP, Oracle, POP3, AFP, CVS gibi servisleri test etmek için imkan sağlamaktadır.

Saldırı için kullanılan wordlistin içerisindeki kelimelerin dili, alaka düzeyi ve en çok kullanılan şifreleri içermesi önemlidir. Tanıdığınız bir kişinin kullanacağı şifreleri tahmin etme olasılığımız daha yüksektir. Çoğu kişi kolay hatırlanması açısından ya en sık kullanılan güvensiz şifreleri seçiyor, yada hayvan ismi, doğum tarihi, telefon numarası gibi bilgilerden şifre oluşturuyor. Dolayısıyla kişiye yönelik wordlist oluşturmak daha mantıklıdır. Bunun için kişi hakkında sorular soran Cupp isimli araç ve web sitelerinde inceleme yaparak kelime çıkaran cewl aracı kullanılabilir.


Sorduğu soruların hepsi cevaplanmak zorunda değildir. En sonunda eklenmek istenen sayı ve özel karakterler eklenebilir. Ayrıca mevcut bir wordlisti geliştirme seçeneğide vardır. Sonuda size bir text dosyası oluşturarak wordlist'i sunar ;



Cewl aracı ise kurbana ait bir web safyası taratılarak kişinin ilgilendiği alanlar daraltılmaya çalışılır.  






Brute Force Saldırı Senaryoları


MySQL Brute Force:



-h : host
-u:username
-U:username keyword listesi
-p:password
-P:password keyword listesi
-M: Moduller



SSH Brute Force:



FTP Brute Force: 



Web formları üzerinde brute force atakları:
Web üzerinde bir form için atak yapılmadan önce form hakkında yeterince bilgi sahibi olunmalıdır. 
Gerekli bilgiler:

  • Hostname , IP adresi ve URL
  • http yada https servislerinden hangisi olduğu
  • Get yada Post methodu olması 
  • Parametreler
  • Başarılı login veya hatalı giriş durumlarında gelen cevaplar
  • Herhangi bir session cookie’si atanıp atanmadığı
Bu bilgiler toplandıktan sonra gerekli parametreler ile hydra çalıştırılır.
Örneğin hatalı kullanıcı adı ve parola verdiğimizde “Login failed” hatası veren sitemiz için :



Sonuç: 


Ele Geçirilen Hash'lerin Kırılması ile İlgili Senaryolar


Windows Password Crack Araçları:
Öncelikle windows’ta SAM dosyasına ulaşılması gerekir daha sonra elde edilen hash kırılır.

SAM dosyasının elde edilme yöntemleri:

  • Bilgisayara fiziksel erişim şansımız varsa en etkili yol bir başka işletim sistemi ile boot etmektir. Linux live CD oluşturarak windows disklerini mount edilir SAM dosyası harici bir diske kopyalanır. Fiziksel erişim sansımız varken kullanabileceğimiz bir diğer yöntem Cain&Abel aracı ile hashleri yakalamak olacaktır
  • Linux kullanımınında zorluk yaşıyorsak “Offline NT Password Editor” isimli aracı kullanılabilir.
  • Bu araç bir Bootable linux dağıtımıdır. Unutulan parolaları sıfırlamak için kullanılır. Basitce SAM dosyasındaki hashleri de alabiliriz. http://pogostick.net/~pnh/ntpasswd/ 
  • Bilgisayarın konsoluna uzaktan erişim şansı varsa “fgdump” aracı konsoldan indirilip kurulduktan sonra hash çekilebilir. http://foofus.net/goons/fizzgig/fgdump/ 
  • Benzer mantıkla çalışan Pwdump6 aracı kullanılarak NTLM ve LM Hash'leri çekilebilir.
  • Son olarak Ortak erişimi varsa hash Cain&Abel ile sniff edilerek(hedef kullanıcı yetkili girişi yapmışsa) çekilebilir. 
Aşağıda Cain&Abel kullanılarak örnek bir saldırı gerçekleştirilmiştir.








Linux Password Crack Araçları:
Linux kullanıcı bilgileri “etc/passwd”  ve  “etc/shadow” dosyalarının içerisinde saklanır. Parolalar hash halinde shadow dosyasında tutulur. Erişim sağlayabilmek için root yetkisine sahip olunması gereklidir.     

Bu dosyalara erişim sağlayıp okuyabildiğimiz takdirde elde edilen hash’ler John the ripper aracı yardımıyla kırılabilir. Hash’leri john aracında test etmeden once “unshadow” komutu ile passwd ve shadow dosyaları bağlanır.




Diğer Password Crack Araçları:
Elde edilen hash'in türü bilinmiyorsa hash-identifier aracı kullanılarak hangi algoritma ile şifrelendiği tespit edilebilir.



Hashler şifrelenme türüne göre john the ripper aracıyla kırılabilir. İstenilirse wordlist verilebileceği gibi John kendi wordlistinide kullanmaktadır.

john --format:BF  file_to_crack.txt
john --format:AFS file_to_crack.txt 
john --format:LM  file_to_crack.txt
john --format:MD5 file_to_crack.txt


JTR dışında kullanılabilecek araçlardan olan Hashcat çok gelişmiş bir şifre kırma aracıdır. Yeni versiyonunda işlemci yerine ekran kartı kullanarak daha hızlı saldırılar yapmayı hedefleyen ctlhashcat aracı mevcuttur.



Hash-type ve attack-mode parametreleri olarak verilebilecekler aşağıdaki görüldüğü gibi help komutu ile kontrol edilebilmektedir.



Örneğin bir mysql server'ını ele geçirdikten sonra yönetici hesabının şifresini kırarak tüm yetkilere erişme şansımız olur. select*from mysql.user; komutu ile kullanıcı bilgilerini listelediğimizde kullanıcı şifreleri hash halinde tutulmakta olduğunu görürüz. Bu hashleri alıp hashes.txt dosyasına kaydederiz. Kullanıcılardan birinin şifresi “admin” Yönetici şifremiz ise “admin123” olsun. Saldırıyı deneyeceğimiz wordlistte admin ve 123 kelimeleri ayrı ayrı mevcut, Hashcat aracı ile kombinayson seçeneğini seçerek testi başlatalım ;



Bir diğer seçenek olarak brute force saldırısında regular expression kullanarak 5 tane harf 3 tane sayıdan oluşan şifre denemesi yapmasını söyleyebiliriz. (?d › decimal number , ?l › letter )

Yaklaşık 18 dk sonar 11.881.376.000 seçenek (yaklaşık 12 milyar) denenmiş ve admin123 şifresi bulunmuştur. 


Alınabilecek Tedbirler 


Sık kullanılan , yeterli uzunlukta olmayan , tahmin edilmesi kolay , sadece harf veya sadece rakamlardan oluşan şifrelerin kırılması incelediğimiz örneklerde görüldüğü gibi çok kolaydır.
  • Uzunluk arttıkça şifrelerin kırılması dahada zorlaşır.
  • Harf, sayı ve özel karakterlerin herbirinin kullanılması gereklidir.
  • Tüm uygulamalarda aynı şifreyi kullanmak yanlıştır.
  • Yaratıcılıktan uzak ve çok sık kullanılan şifreler seçilmemelidir.
  • Tahmin edilmesi kolay şehir adı, doğum tarihi, hayvan ismi gibi veriler şifrelerde bulunmamalıdır.
  • Hatırlanabilir ancak yaygın olmayan şifre oluşturmak için bir öneri:
“Ali ile girdiğim 5 oyundan 3 tanesi O kazandı 2 tanesini ben kazandım! ”
“Aig5o3tOk2tbk!”
Cümledeki kelimelerin baş harflerinden oluşmuş bir şifre daha kolay akılda tutulabilir.
  • Güvenlik araçları ile şifrenin güvenilirliğini kötü amaçlı kullanıcılardan önce  test etmek bizim için bir avantaj oluşturur.
Bu makale İstanbul Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü öğrencisi stajyerimiz Cemal Türkoğlu tarafından geliştirilmiştir.