Genel olarak bilgisayar ve ağ güvenliği ile ilgili ama ilgisiz konularda da bir şeyler karalanabilen kişisel bir blog

16 Şubat 2014 Pazar

Sızma Testlerinde Parola Kırma Saldırı Yöntem ve Araçları - I

İlk blog, ilk yazı.

Bu yazıda özellikle sızma testlerinde sıkça kullanılan araçlar ve tekniklerden bahsettim. Uzun bir yazı olduğu için üçe böldüm. Bu ilk bölümde parola ve parola kırma saldırıları hakkında kısa bir bilgi ve hydra, medusa, john the ripper gibi araçların kullanılmasından bahsedilmiştir.
Not: Yazının bir kısmı Huzeyfe Önal tarafından hazırlanmıştır. Slideshare  üzerinden de ulaşılabilir.
 

Parola

Parola çoğu zaman en değerli varlıktır. Eğer katmanlı güvenlik mimarisi kullanılmıyorsa sistemlere giriş için tek anahtar konumuna girer.
Katmanlı güvenlik mimarisinda tek bir parola ile yetinilmez ve parolayı ele geçiren saldırganın aşması gereken başka engeller olur (ip kısıtlaması vs)Parola kırma, yetki yükseltmek ve girilen sistemde daha sonra kullanılmak üzere gerekli olabilir.

Parola mı şifre mi?

Parola ve şifre sık sık birbiri yerine kullanılan ve karıştırılan iki farklı kavramdır.
Parola: Sadece sizin tarafınızdan bilinen ve özel bilgilere erişim için kullanılan gizli
karekterler dizgisidir
Şifre: Herhangi bir bilginin çeşitli algoritmalar kullanılarak anahtarı bilmeyenler tarafından  okunamaycak, çözülemeyecek hale getirilmiş halidir.

Parola ve şifre arasındaki temel farklar:
• Parolalar genellikle anlamlı, okunabilir karekterlerden oluşur
• Şifreler genellikle ikili dosya türünde saklanır
• Şifre sayısal, parola sözel anlam içerir

Dolayısıyla bizim sistemlere girerken kullandığımız anahtarlar parola olmaktadır.

Encryption/Şifreleme: Bir verinin sadece gizli anahtarı bilen yetkili kişilerce okunabilmesi amaçlı gerçekleştirilen format değişikliğidir. Şifrelemenin kodlamadan temel farkı sadece ilgili anahtarı bilen kişiler tarafından orjinaline döndürülebilmesidir. RSA, AES en sık kullanılan şifreleme algoritmalarındandır.

Hash: Hash fonksiyonları doğrulama amaçlı kullanılır ve matematiksel olarak geri döndürülemez özelliğe sahiptirler. Genellikle bir verinin içeriğinin değişmediğinin garantisi olarak kullanılır veya bir parolanın veritabanında açık bir şekilde tutulmasını engellemek ve başkaları tarafından (işin sahibi dahil) bilinmesi istenmediği zaman tercih edilir.
MD5, SHA1 en fazla bilinen hash tipine örnektir. Hash, Encoding(kodlama) ve Encryption(şifreleme) kavramları genellikle birbirleri yerine kullanılsa da üç kavramda özünde farklıdır.

Encoding/Kodlama: Verinin farklı sistem ve ortamlarda dolaşabilmesi için bir formattan başka bir formata dönüştürülmesi işlemidir. Kodlama gizlilik sağlamak için kullanılmaz. En fazla bilinen kodlama örneği Base64 olup aşağıdaki gibi bir formata sahiptir.

Bilgi Guvenligi AKADEMISI    QmlsZ2kgR3V2ZW5saWdpIEFLQURFTUlTSQo=


#echo QmlsZ2kgR3V2ZW5saWdpIEFLQURFTUlTSQo=|base64 -dBilgi Guvenligi AKADEMISI

text tabanlı kodlama çeşitleri ve işlemleri için https://hackvertor.co.uk/public adresi kullanılabilir.

Parolayı ele geçirme amaçlı kullanılan 4 farklı metot vardır:
  • Aktif Çevrimiçi Saldırılar
  • Pasif Çevrimiçi Saldırılar
  • Çevrimdışı Saldırılar
  • Teknik olmayan saldırılar       

Pasif Çevrimiçi Saldırılar


Bu saldırı 2 şekilde olur : Man-in-the-middle ve sniffing.

    Man-in-the-middle tarzı atakta ortam ve hedef bilgisayarlardaki trafik dinlenir ve parola yakalanmaya çalışılır. Bu saldırı türünde sniffing araçlarıda kullanılabilir.

    Sniffing tarzı atak ise aynı ağ üzerinde bağlı olunması ve sistemde hub gibi bir network aracı kullanılması durumunda etkilidir. Çünkü hub bir paketi bütün portlara gönderir bu sayede tüm LAN, paketi görebilir. Switch, bridge gibi araçlar kullanılıyorsa, bu araçlar sadece hedef porta gönderilecek şekilde filtreleme yapar ve sniffing burada etkili olmaz. ARP poisining hedefe, sistemi gateway gibi gösterip araya girilebilir.
    Bu tarz saldırılar için kullanılan araçlar: Cain & Abel(Windows) , ettercap, karma, Dsniff, SSLStrip

[email protected]:~# tcpdump -i eth0 -tn tcp port 21 -X
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
...
       0x0020:  8010 00b7 faa4 0000 0101 080a 0007 dba6  ................
       0x0030:  0001 4a36                                ..J6
IP 10.10.10.100.52706 > 10.10.10.65.21: P 1:12(11) ack 28 win 183 <nop,nop,timestamp 516661 84534>
       0x0000:  4510 003f f3dc 4000 4006 1e14 0a0a 0a64  [email protected]@......d
       0x0010:  0a0a 0a41 cde2 0015 cf04 2841 e464 8321  ...A......(A.d.!
       0x0020:  8018 00b7 28ea 0000 0101 080a 0007 e235  ....(..........5
       0x0030:  0001 4a36 5553 4552 2072 6f6f 740d 0a    ..J6USER.root..
IP 10.10.10.65.21 > 10.10.10.100.52706: P 28:61(33) ack 12 win 65524 <nop,nop,timestamp 84591 516661>
       0x0000:  4500 0055 2878 4000 8006 a972 0a0a 0a41  E..U([email protected]
       0x0010:  0a0a 0a64 0015 cde2 e464 8321 cf04 284c  ...d.....d.!..(L
       0x0020:  8018 fff4 1e1b 0000 0101 080a 0001 4a6f  ..............Jo
       0x0030:  0007 e235 3333 3120 5061 7373 776f 7264  ...5331.Password
       0x0040:  2072 6571 7569 7265 6420 666f            .required.fo
IP 10.10.10.100.52706 > 10.10.10.65.21: . ack 61 win 183 <nop,nop,timestamp 516661 84591>
       0x0000:  4510 0034 f3dd 4000 4006 1e1e 0a0a 0a64  [email protected]@......d
       0x0010:  0a0a 0a41 cde2 0015 cf04 284c e464 8342  ...A......(L.d.B
       0x0020:  8010 00b7 f3b0 0000 0101 080a 0007 e235  ...............5
       0x0030:  0001 4a6f                                ..Jo
IP 10.10.10.100.52706 > 10.10.10.65.21: P 12:29(17) ack 61 win 183 <nop,nop,timestamp 518460 84591>
       0x0000:  4510 0045 f3de 4000 4006 1e0c 0a0a 0a64  [email protected]@......d
       0x0010:  0a0a 0a41 cde2 0015 cf04 284c e464 8342  ...A......(L.d.B
       0x0020:  8018 00b7 28f0 0000 0101 080a 0007 e93c  ....(..........<
       0x0030:  0001 4a6f 5041 5353 2031 245f 3233 3423  ..Jo PASS.1234#
       0x0040:  6b68 300d 0a                             ..
IP 10.10.10.65.21 > 10.10.10.100.52706: P 61:87(26) ack 29 win 65507 <nop,nop,timestamp 84651 518460>
       0x0000:  4500 004e 288f 4000 8006 a962 0a0a 0a41  E..N([email protected]
       0x0010:  0a0a 0a64 0015 cde2 e464 8342 cf04 285d  ...d.....d.B..(]
       0x0020:  8018 ffe3 f6f5 0000 0101 080a 0001 4aab  ..............J.
       0x0030:  0007 e93c 3233 3020 5573 6572 2072 6f6f  ...<230.User.roo
       0x0040:  7420 6c6f 6767 6564 2069 6e2e            t.logged.in.



[email protected]:~# dsniff -n
dsniff: listening on eth0
-----------------
11/23/10 03:26:59 tcp 10.10.10.100.34040 -> 10.10.10.65.21 (ftp)
USER root
PASS 1234#



Aktif Çevirimiçi Saldırılar


Brute-force (kaba kuvvet) ve dictionary (sözlük) bu saldırı tipine girer.
    Brute-force atak basit ama etkili bir yöntemdir. Olası bütün kombinasyonlar denenir. Zayıf ve tahmin edilebilir şifreler bruteforce ile kolayca kırılabilir. Burada önemli olan zamandır. Yeterli zaman dahilinde %100 başarıya ulaşılabilinir.
                  

Hydra

    Brute-force için en iyi araçlardan birisi. Hız ve protokol desteği bakımından Medusa ve ncrack’ten daha iyidir. Test için SSH protokolüyle test adlı kullanıcının şifresine ulaşılmıştır.

    SSH bağlantısı için Hydra ile denemeden önce
useradd test ile yeni bir kullanıcı oluşturulur:”test”
passwd test ile test için bir şifre oluşturulur: “test123”
service ssh start ile ssh hizmeti başlatılır
hydra -V -l test -P /usr/share/john/password.lst -e ns -t 16 127.0.0.1 ssh
-V ile denenen her kullanıcı adı/şifre kombinasyonu ekrana yazılır
-l ile kullanıcı adı biliniyorsa yazılır. Yoksa -L <file> ile bir kullanıcı adı listesi kullanılabilir.
-P ile parola dosyası gösterilir. Burada John the Ripper kullanıldı
-e ns ile, boş parola ve kullanıcıadı/parola bilgisinin aynı olması durumu denendi.
-t ile bağlantı sayısı belirlendi ve sonrada IP adresi ve bağlantı protokolü belirtilip bruteforce başlatıldı.

Örnek Hydra ve Medusa Kullanımı

[email protected]:~# hydra -l  root  -P bga-wordlist22 -s 22 127.0.0.1  ssh2 -v -f
Hydra v5.4 (c) 2006 by van Hauser / THC - use allowed only for legal purposes.
Hydra (http://www.thc.org) starting at 2010-11-23 04:02:49
[DATA] 16 tasks, 1 servers, 438 login tries (l:1/p:438), ~27 tries per task
[DATA] attacking service ssh2 on port 22
[VERBOSE] Resolving addresses ... done
Error: ssh2 protocol error
[VERBOSE] Retrying connection for child 10
[VERBOSE] Retrying connection for child 13
Error: ssh2 protocol error
Error: ssh2 protocol error
[VERBOSE] Reducing maximum tasks for 127.0.0.1 to 12
Error: ssh2 protocol error
[VERBOSE] Reducing maximum tasks for 127.0.0.1 to 11
[22][ssh2] host: 127.0.0.1   login: root   password: toor
[STATUS] attack finished for 127.0.0.1 (valid pair found)
[VERBOSE] disabled child 10
Hydra (http://www.thc.org) finished at 2010-11-23 04:02:53


Medusa

Medusa ile SSH Bruteforce(Parola Denemeleri)

~# medusa -M ssh -m BANNER:SSH-2.0-BGA  -h localhost -u root -P bga-wordlist22 -t 10
Medusa v2.0 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks <[email protected]>
ACCOUNT CHECK: [ssh] Host: localhost (1 of 1, 0 complete) User: root (1 of 1, 0 complete) Password: 0u7124630u5n355 (1 of 416 complete)
ACCOUNT CHECK: [ssh] Host: localhost (1 of 1, 0 complete) User: root (1 of 1, 0 complete) Password: 0u712463p1200f (9 of 416 complete)
ACCOUNT CHECK: [ssh] Host: localhost (1 of 1, 0 complete) User: root (1 of 1, 0 complete) Password: 0u71246in6 (10 of 416 complete)
ACCOUNT CHECK: [ssh] Host: localhost (1 of 1, 0 complete) User: root (1 of 1, 0 complete) Password: toor (11 of 416 complete)
ACCOUNT FOUND: [ssh] Host: localhost User: root Password: toor [SUCCESS]
ACCOUNT CHECK: [ssh] Host: localhost (1 of 1, 0 complete) User: root (1 of 1, 1 complete) Password: 0u7124u6h7 (20 of 416 complete)


Dictionary atakta ise denenen kombinasyonlar daha önce belirlenmiş bir listedir. Brute-force ile asıl fark budur. Daha hedefe yönelik,özelleştirilmiş sözlükler hazırlanması gerekir. Ek olarak paroladaki harfler yerine sayı ve özel karakterler (leetspeak) ile farklı kombinasyonlar denenebilir.
Yanlış parola girimini tespit eden ve engelleyen politikalar ile brute-force engellenebilir.

Çevrimdışı Saldırılar

Bu saldırıda kullanıcı adları ve parolaların sistemde kayıtlı tutulduğu noktalara erişim sağlanmaya çalışılır. Kullanıcı adları ve parolalar text olarak tutulmuş veya şifrelenmiş(encrypted) ve özetlenmiş(hashing) şekilde tutuluyor olabilir.
Yetkilendirme yapılırken parolanın özet değeri alınarak kullanıcının girdiği ve sistemde daha önce kaydedilen parolanın özeti karşılaştırılır . Buna göre kullanıcıya yetki verilir. Özet işlemi için MD5,SHA ,NTLM gibi metotlar vardır.
Bu saldırı türünde de brute-force, dictionary ve rainbow tabloları olmak üzere 3 farklı metot söylenebilir .              

Fgdump

Windows OS (Vista ve sonrası için değil) için fgdump benzeri bir programla kolayca özet değerleri alınabilir.
Bunun için sanal makinede oluşturulan Windows Xp'de (    Fgdump sitesinden indirilebilir) fgdump programı kullanıldı. İndirilen zip dosyasından çıkarılan fgdump.exe direk olarak C:\ dizinine atılabilir.
Windows komut satırında
    fgdump -v
komutu çalıştırılırsa aynı dizinde 127.0.0.1.pwdump diye bir dosya ve yapılan işlemle ilgili metin dosyaları oluşur. (-v komutu daha anlaşılır bir çıktı için kullanıldı. Diğer fgdump opsiyonlarına ulaşmak için fgdump -? komutu kullanılabilir.). Örnek bir satır şu şekilde:
test:1003:01FC5A6BE7BC6929AAD3B435B51404EE:0CB6948805F797BF2A82807973B89537:::


127.0.0.1.pwdump dosyasının içeriği KullanıcıAdı:RID:LMHash:NTHash::: şeklindedir.
Burda bizi ilgilendiren kısım LM Hash ve NTLM Hash kısmıdır.


Önce Windowstaki kullanıcı adlarının ve şifrelerinin saklanması ve hashden (özetinin alınmasından) bahsetmek gerekirse;
Windows bilgisayarlarda kullanıcı adları ve şifreleri LANMAN veya NT ile özetli biçimde SAM dosyasında saklanır. SAM dosyasında erişim sistem açık halde iken mümkün değildir. Buna rağmen administrator yetkisi ve fiziksel erişimle başka bir işletim sistemiyle (Backtrack Live CD gibi ve ya başka başka bir linux dağıtımıda olabilir) SAM dosyasının bir kopyası elde edilebilir. Sızma testlerinde ise buna gerek kalmadan , LSASS.exe gibi bazı uygulamalar sistem çalışır haldeykende gerektiğinde kullanıcıya yetki verebilmek için özetli parolaları bünyesinde barındırır. Fgdump, Cain & Abel ve benzeri uygulamalarda kendisini LSASS.exe uygulaması içine enjekte eder. Böylece sanki LSASS.exe gibi özetli parola ele geçmiş olur.
Özetleme algoritmalarına gelmek gerekirse LANMAN bu konuda tamamıyla savunmasızdır. LANMAN girilen şifreler 15 den küçükse şifreleri 14'e tamamlar. Eğer küçük harf kullanılmışsa büyük yapar . Çıkan 14 karakterli şifreyi 7'şerli 2 kısıma ayırır ve DES anahtarı ile şifrelenir. Bu aslında parolanın kırılmasını kolaylaştırır. 14 karakterli bir paroladnsa 7 karakterli 2 parolayı kırmak daha zahmetsizdir. Yeni Windows sürümlerinde LANMAN varsayılan olarak kapalıdır.
                  
NTLM özetleme ise LANMAN'e göre daha güvenilirdir. Parola uzunluğu olarak 256 karaktere kadar destek verir. Hashleme algoritması olarak MD4 kullanılır. Küçük harfleri büyütmez ve parolayı ikiye bölmez. Ama bilinmesi gereken önemli bir nokta LANMAN ve NT salt (tuz) kullanmaz. Salt her parola için rastgele üretilen ve parolaya eklenen bir veridir.
LanMan ve NTLM(v1 ve v2) parolanın özetlenmesi ile ilgiliydi. Birde kullanıcıya yetki verme işlemi vardır .Kullanıcı adı ve parola bazı yöntemlerle sunucuya gönderilir. Windows ‘ta bu işlem NTLM Challange\Response veya Kerberos ile yapılır.
NTLM Microsoft Windows ortamlarında en sık kullanılan yöntemlerden biridir. Bu yöntemde kullanıcı sisteme girmek istediğinde kullanıcıya kimlik bilgileri sorulur. Bu yöntemde kullanıcı parolası ağ ortamında dolaşmaz, parola bilgisi tersi olmayan bir fonksiyonla özeti alınır ve sunucuya bu gönderilir. Sunucu 16 bitlik bir challenge gönderir.  İstemci tarafında bu challenge, parolanın hashi ile şifrelenip(Response) sunucuya tekrar gönderilir. Sunucuda artık kontrol yapılırken kullanıcı adı, challenge ve response vardır. Sunucuda da SAM’deki kullanıcı adına göre parolanın özetiyle challange tekrar şifrelenir(yani Response oluşur) ve istemciden gelen response ile karşılaştırılır. Responselar aynı ise kullanıcıya yetki verilir.
Artık Windows’un yetkilendirme için ağlar arasında  kullandığı protokol Kerberos’tur. (Apple ve açık kaynak kodlu sistemlerde de kullanılır.) Kerberos sadece 2 taraf tarafından bilinen simetrik bir anahtar (key) kullanılarak bağlantı kurmaya izin veren güvenli bir protokuldür. Ancak Kerberos’un doğru çalışması için güvenilen, stabil bir sunucu olması gerekir. Bazı durumlarda;  sunucu çalışmadığında, istemci  sunucuya IP adresi ile bağlanmak istediğinde, istemci herhangi bir domain ait olmadığında, sunucu ile farklı Active Directory’ye ait olduğu durumlarda ve firewallun Kerberos’un kullandığı 88 portunu engellediğinde yine NTLM kullanılacaktır.


    Brute-force Saldırısı (Windows)


    Cain & Abel

Çevrimiçi brute-force saldırılarına benzer.  Uygulama Cain& Abel üzerinde yapılacak.
    Cain & Abel programı Windows ortamında bir çok hacking aracı barındıran bir uygulamadır. Bu uygulamaya fgdumpdan alınan dosya aktarılıp brute-force atak ile parolayı kırılabilir.
    Cain kurulup açıldığında Cracker sekmesinde soldan LM & NT Hashes seçilir. Boşluğa tıklandığında yukardaki mavi artı işareti (Add to List) seçilebilir hale gelir.


                 
Cain & abel ilk 2 parolayi bir kaç saniyede kırarken 3. parolayı yaklaşık 2 saatte kırdı. Hız konusunda verim alınmak isteniyorsa John the Ripper tercih edilebilir (John the Ripper ).
Windows sisteme John the ripper kurulup fgdump’tan alınan 127.0.0.1.pwdump çıktısı gösterildiğinde yaklaşık 15 dakikada bütün şifreleri kırdı.


Brute-force Saldırısı (Linux)


Linux’ta ise  kullanıcı hesap bilgileri /etc/passwd dosyasında saklanırken kullanıcı adları ve şifrelenmiş parolalar   /etc/shadow dosyasında bulunur. man shadow komutuyla Linux’un shadow hakkındaki detaylı açıklamasına bakılabilir. Root yetkisine sahipken terminalde
cat /etc/shadow ile gözlenebilir. /etc/shadow dosyası
root:$1$Er.GPi0V$7M9NtL.yrh7U1YER2T7/c/.:10063:0:99999:7:::
bu şekildedir. Kısımlar “:” ile ayrılmıştır.
İlk kısım kullanıcı adını
İkinci kısım parolanın özetli halini
Üçüncü kısım parolanın son değiştirilme tarihiyle 1 Ocak 1970 arasındaki gün sayısını
Dördüncü kısım parola değişikliği için gereken minimum gün sayısını
Beşinci kısım kullanıcının parola değişikliği yapması için azami gün sayısını
Altıncı kısım kullanıcının parola değişikliği yapması için kalan gün uyarısı
Yedinci kısım parolanın/hesabın geçersiz olduğu günden beri geçen gün sayısı
Sekizinci kısım parolanın/hesabın geçersiz olduğu gün ile 1 Ocak 1970 arası gün sayısı


Parolanın şifrelendiği kısımda dolar işaretleri ($) arasında bulunan sayı, bize parola için hangi özet alma algoritmasının kullanıldığını belirtir. Bu örnekte $1$ MD5’i ifade eder. Diğer çok rastlanan özet algoritmaları  
$2y$ Blowfish / crypt(3)
$3$ MD4
$5$ SHA 256
$6$ SHA 512        şeklindedir.


Linux bir sisteme karşı yapılan bir sızma testinde terminalde  cat /etc/shadow komutu çalıştırıldığında aşağıdaki  ekran görüntüsüne ulaşıldı.


Bu ekran görüntüsüne göre root ve admin kullanıcılarına ait parolalar MD5 ile şifrelenmiş. Bu özetler kopyalanıp John the Ripper ile kolayca kırılabilir. Şifreler 123456 ve 1 imiş.





   
Dictionary Saldırısı
Çevrimiçi sözlük saldırılarına benzer. Kombinasyonlar doğrusu bulunana kadar denenir. Ancak farklı nokta bulunan parola özetlidir. Bulunan parolanın özeti eğer sözlükteki özet ile eşleşiyorsa parola ele geçirilir.


Efsane Parola Kırma Aracı John The Ripper

John The Ripper UNIX ve Windows işletim sistemlerinde çalışabilen hızlı parola kırma (parola güvenliği test ) aracıdır.
Adının UNIX/Linux ile özdeşleşmesinin sebebi uzun süredir UNIX/Linux parola formatını hızlıca kıracak bir aracın bulunmamasıdır.
**Windows versiyonu için bir GUI Vardır. Adı da Fscrack
Her nek adar GUI kullanımı kolaylaştırsa da arabirim üzerindeki seçenekler ancak John The Ripper’aa aşina olanların kullanacğaı şekilde tasarlandığı için konuya uzak kişilere yardımcı olmayacaktır. Bir de windows sürümü eskidir.
JTR her ne kadar UNIX/Linux parolalarını kırma aracı olarak bilinse de UNIX parolaları haricinde 50'e yakın parola formatını hızlı bir şekilde kırabilmektedir.
Her türlü hash/şifrelenmiş parolayı kıramaz.


JTR Tarafından Desteklenen Şifreleme, Hash Formatları

JTR kullanarak aşağıdaki parola ve hash tipleri çeşitli yöntemlerle kırılabilir.
DES/BSDI/MD5/BF/AFS/LM/NT/XSHA/PO/raw-MD5/MD5-gen/IPB2/raw-sha1/md5a/hmac-md5/phpass-md5/KRB5/bfegg/ nsldap/ ssha /openssha/ oracle/oracle11/MYSQL/ mysql-sha1/mscash/lotus5/DOMINOSEC/NETLM/ NETNTLM/NETLMv2/NETNTLMv2/NETHALFLM/mssql/mssql05/ epi/phps/mysql-fast/pix-md5/sapG/sapB/md5ns/HDAA/DMD5/crypt
Md5 alt tipleri olarak aşağıdaki parola tiplerini destekler.
[email protected]:/pentest/passwords/jtr# ./john --subformat=LIST
Format = md5_gen(0)   type =  md5_gen(0): md5($p)  (raw-md5)
Format = md5_gen(1)   type =  md5_gen(1): md5($p.$s)  (joomla)
Format = md5_gen(2)   type =  md5_gen(2): md5(md5($p))  (e107)
Format = md5_gen(3)   type =  md5_gen(3): md5(md5(md5($p)))
Format = md5_gen(4)   type =  md5_gen(4): md5($s.$p)  (OSC)
Format = md5_gen(5)   type =  md5_gen(5): md5($s.$p.$s)
Format = md5_gen(6)   type =  md5_gen(6): md5(md5($p).$s)
Format = md5_gen(7)   type =  md5_gen(7): md5(md5($p).$s)  (vBulletin)
Format = md5_gen(8)   type =  md5_gen(8): md5(md5($s).$p)
Format = md5_gen(9)   type =  md5_gen(9): md5($s.md5($p))
Format = md5_gen(10)  type =  md5_gen(10): md5($s.md5($s.$p))
Format = md5_gen(11)  type =  md5_gen(11): md5($s.md5($p.$s))
Format = md5_gen(12)  type =  md5_gen(12): md5(md5($s).md5($p))  (IPB)
Format = md5_gen(13)  type =  md5_gen(13): md5(md5($p).md5($s))
Format = md5_gen(14)  type =  md5_gen(14): md5($s.md5($p).$s)
Format = md5_gen(15)  type =  md5_gen(15): md5($u.md5($p).$s)
Format = md5_gen(16)  type =  md5_gen(16): md5(md5(md5($p).$s).$s2)
Format = md5_gen(17)  type =  md5_gen(17): phpass ($P$ or $H$)
UserFormat = md5_gen(1001)  type = md5_gen(1001) md5(md5(md5(md5($p))))
UserFormat = md5_gen(1002)  type = md5_gen(1002) md5(md5(md5(md5(md5($p)))))
UserFormat = md5_gen(1003)  type = md5_gen(1003) md5(md5($p).md5($p))
UserFormat = md5_gen(1004)  type = md5_gen(1004) md5(md5(md5(md5(md5(md5($p))))))
UserFormat = md5_gen(1005)  type = md5_gen(1005) md5(md5(md5(md5(md5(md5(md5($p)))))))
UserFormat = md5_gen(1006)  type = md5_gen(1006) md5(md5(md5(md5(md5(md5(md5(md5($p))))))))
UserFormat = md5_gen(1007)  type = md5_gen(1007) md5(md5($p).$s) [vBulletin]
UserFormat = md5_gen(1008)  type = md5_gen(1008) md5($p.$s) [joomla]

JTP Parola Kırma Yöntemleri

·      Single Crack
·      Wordlist (sözlük)
.     Kurallı sözlük kullanımı
·      Incremental
 
Single Crack Yöntemi Kullanarak Parola Kırma
Single mod da john aracı sadece belirli bilinen sözcükleri deneme yapar. Normal bir atağa başlamadan bu tip bir deneme yapmak her zaman faydalı olacaktır.
#john -single pass.txt
 
JTR ilk çalıştırıldığında ek bir parametre verilmezse password.lst dosyası içerisindeki parolaları denemeye başlayacaktır. Ortalama 4000 civarında parola bulunan bu dosya 2010 yılına kadar olan internetteki topN parola listelerinden elde edilmiştir.
 
JTR her çalıştırıldığında /etc/shadow dosyasındaki kullanıcı adı ve GECOS , Tam ad alanlarına bakarak parola üretmeye başlar. Bu parolalarda ipucu olarak kullanıcı ismi ve GECOS alanında yazılı bilgileri kullanır.
Mesela kullanıcı adı bga olan bir
 
Örnek:
# ./john /etc/shadow
Loaded 2 password hashes with 2 different salts (generic crypt(3) [?/32])
toor             (root)
bga123           (bga)
guesses: 2  time: 0:00:00:47 100.00% (1) (ETA: Tue Nov 23 07:27:23 2010)  c/s: 48.88  trying: Bga9999941 - Bga111


Unsahdow komutu ve işlevi
Burada amaç unshadow komutunu ne işe yaradığını göstermek...
Örnek:
Unshadow komutu kullanarak /etc/passwd ve /etc/shadow dosyaları tek bir dosyada toplanmaktadır. Kısacası /etc/shadow dosyasındaki parola alanı /etc/passwd dosyasındaki parola yerine(normalde /etc/passwd dosyasında parola alanında x yazar) gelmektedir. Bunun yararı da JTR’in çalışma mantığında yatıyor.
Daha önce bahsettiğimiz gibi JTR /etc/passwd dosyasında kullanıcı adı, yorum satırı ve GECOS alanına değerlendirerek özel parolalar üretip bu parolaları kırma çalışmalarında kullanmaktadır.
Örnek:
./unshadow /etc/passwd /etc/shadow >crack1
ahmet:$6$jTfED.qt$b9u7XC4LN98xI7zDef/DFMMQ5.apXc7BhUTCrqfzHiIGzCprBQV96p8FQqqGDsdIdHWfX7sbA7V3mYzEkkkK50:1001:1001:Ahmet Enis,23,,:/home/ahmet:/bin/bash
./john crack1 --user=ahmet
Loaded 1 password hash (generic crypt(3) [?/32])
ahmetenis        (ahmet)
guesses: 1  time: 0:00:00:02 100.00% (1) (ETA: Tue Nov 23 07:45:10 2010)  c/s: 47.29  trying: ahmet – Enisahmetenisahmet
Aynı denemeyi unshadow kullanmadna yaparsak parolayı bulamayacaktır…
 
Unsahdowsuz versiyonu
./john -single /etc/shadow --user=ahmet --pot=newpot
Loaded 1 password hash (generic crypt(3) [?/32])
guesses: 0  time: 0:00:00:55 100.00% (ETA: Wed Nov 24 03:36:32 2010)  c/s: 49.41  trying:
999991910 – 999991900
JTR Çalışma Yapısı
Wordlist Kullanarak Parola Kırma
Klasik wordlist parola kırma araçlarından farklı olarak JTR wordlist içerisindeki sözlüklere özel kurallar uygulayarak deneme yapar.
wordlist modu
john -w:word.dic -rules pass.txt
-w:dosya_ismi
Incremental Mod
Bu modda belirli aralıktaki tüm kombinasyonlar denenir.
[email protected]:/pentest/password/jtr# ./john --incremental --stdout|more
john -i:all pass.txt tüm karekterleri dener
john -i:alpha pass.txt tüm harfleri dener
john -i:digits pass.txt tüm numaraları dener


John the ripper’in komut satırından belirtilmeyen ve belirtilemeyen tüm ayarları için john.conf dosyası kullanılır.
Mesela incremental modda oluşturulacak parola denemelerinin kaç karekter olacağını belirlemek için aşağıdaki ayarlar kullanılır.
# Incremental modes
[Incremental:All]
File = $JOHN/all.chr
MinLen = 5
MaxLen = 8
CharCount = 95
Parola Kırma İşlemini Kolaylaştırıcı Kurallar
JTR'in en önemli özelliklerinden biri de parola kırma işlemine başlamdan çeşitli kurallar belirlenebilmesi. Mesela hedef parolanın 8 karakter uzunluğunda olduğunu biliniyorsa JTR'a parolanın 8 karekterden oluştuğu kuralı verilerek zaman kazanması sağlanabilir.
JTR'a verilebilecek diğer kurallar:
Max  parola uzunluğu
Min. parola uzunluğu
Özel karekterlerin kullanılıup kullanılmayacağı
Hangi özel karekterlerin kullanılacağı($, # gibi)
Alfanümerik değerler kullanılıp kullanılmayacağı
Kurallar john.conf dosyasına yazılmaktadır.
Kural dosyasına birşeyler yazmak çok kolay olmadığı için Matt Weir tarafından yazılan "John the Ripper Config File Generator[http://reusablesec.googlepages.com/ ]" adlı  araç kullanılabilir.
Araç hakkında detay bilgiler
***https://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-weir.pdf adresinden elde
edilebilir.
 
"No hash loaded" Hatası
hatası alınıyorsa bunun temelde iki sebebi olabilir.
1)JTR hash tipini tanımamıştır.
2)Daha önce kırmak için üzerinde uğraştığı ve kırdığı bir hashdir. İkinci seçenekten emin olmak
için john.pot dosyası kontrol edilebilir
joh.npot dosyası silinebilir ya da yeni bir pot dosyasına yazması sağlanmalıdır.
--pot=newpot  gibi.


Performans Arttırımı
John The Ripper kullanırken saniyede denenecek parola sayısını arttırmanın en kolay yolu
kullanılan CPU'a uygun john sürümünün denenmesidir. Kurulumda seçilmektedir.
cd john-1.7.*
make
bir sonraki adımda hangi işlemci tipine göre derleme yapmak istenildiği sorulacaktır.
To build John the Ripper, type: make clean SYSTEM
where SYSTEM can be one of the following:
linux-x86-sse2           Linux, x86 with SSE2 (best)
linux-x86-mmx            Linux, x86 with MMX
linux-x86-any            Linux, x86
linux-x86-64             Linux, AMD x86-64 with SSE2
...
generic                  Any other Unix-like system with gcc
make clean linux-x86-any
make clean linux-x86-sse2
komutları ayrı ayrı verilerek iki farklı jtr elde edilebilir.
 
[email protected]:/pentest/passwords/jtr# ./john-x86-any --test
...
Benchmarking: Traditional DES [24/32 4K]... DONE
Many salts:     316160 c/s real, 316160 c/s virtual
Only one salt:  298835 c/s real, 301824 c/s virtual
 
Benchmarking: Raw MD5 [raw-md5 64x1]... DONE
Raw:    5638K c/s real, 5695K c/s virtual
 
Benchmarking: Raw SHA-1 [raw-sha1]... DONE
Raw:    3541K c/s real, 3506K c/s virtual
....
#####
[email protected]:/pentest/passwords/jtr# ./john-x86-sse2 --test
Benchmarking: Traditional DES [128/128 BS SSE2]... DONE
Many salts:     2342K c/s real, 2366K c/s virtual
Only one salt:  1934K c/s real, 1934K c/s virtual
Benchmarking: Raw MD5 SSE2 [raw-md5 SSE2 16x4]... DONE
Raw:    12684K c/s real, 12684K c/s virtual
Benchmarking: Raw SHA-1 SSE2 [raw-sha1 SSE2]... DONE
Raw:    8152K c/s real, 8152K c/s virtual
######
[email protected]:/pentest/passwords/jtr# ./john-x86-mmx --test
...
Benchmarking: Traditional DES [64/64 BS MMX]... DONE
Many salts:     1166K c/s real, 1178K c/s virtual
Only one salt:  1055K c/s real, 1055K c/s virtual
Benchmarking: Raw MD5 MMX [raw-md5 MMX 32x2]... DONE
Raw:    7350K c/s real, 7350K c/s virtual
Benchmarking: Raw SHA-1 MMX [raw-sha1 MMX]... DONE
Raw:    5051K c/s real, 5051K c/s virtual
 Uygulamalar
SHA1 Hashlenmiş Parola Kırma
/tmp/subat dosyasında bir adet SHA1 bir adet SHA512 hash formatında iki parola vardır.
#cat /tmp/subat
ebfa4e34869feb7eb0ec69a6e436e9e90dbb3ece            //sha1
 
[email protected]:/pentest/passwords/jtr# ./john /tmp/subat -w:/root/bga-wordlist22
Loaded 1 password hash (Raw SHA-1 [raw-sha1 SSE2])
guesses: 0  time: 0:00:00:00 100.00% (ETA: Tue Nov 23 07:10:06 2010)  c/s: 20850  trying: bga
#cat /tmp/mart
8714610fc8ec928ef08059a79ec25d613888127b13fdb634854edf713d8a1f21bb716d35e507213c62a861578defdfb132af793def2a00efca875134d0db86ec            //sha512
SHA512 Hash Formatındaki Parolaların ..
JTR SHA512 desteklemediği için aşağıdaki hatayı verecektir.
# ./john /tmp/mart
No password hashes loaded
 
John The Ripper Kullanarak iPhone Parolalarının Kırılması
iPhone temelinde OS X işletim sistemi yatmaktadır, OS X işletim sistemi de BSD tabanlı olduğu için parola formatı JTR(John The Ripper) tarafından desteklenmektedir. Herhangi ek bir yama/parametre kullanmadan iPhone parolalarına güvenlik denetimi gerçekleştirilebilir.
 
Örnek bir iPhone parola dosyası:/etc/master.passwd
nobody:*:-2:-2::0:0:Unprivileged User:/var/empty:/usr/bin/false
root:/smx7MYTQIi2M:0:0::0:0:System Administrator:/var/root:/bin/sh
mobile:/smx7MYTQIi2M:501:501::0:0:Mobile User:/var/mobile:/bin/sh
daemon:*:1:1::0:0:System Services:/var/root:/usr/bin/false
_wireless:*:25:25::0:0:Wireless Services:/var/wireless:/usr/bin/false
_securityd:*:64:64::0:0:securityd:/var/empty:/usr/bin/false
_mdnsresponder:*:65:65::0:0:mDNSResponder:/var/empty:/usr/bin/false
_sshd:*:75:75::0:0:sshd Privilege separation:/var/empty:/usr/bin/false
_unknown:*:99:99::0:0:Unknown User:/var/empty:/usr/bin/false
iPhone üzerinden elde edilecek master.passwd dosyası JTR’e parametre olarak verilir.  JTR aktif durumda olan kullanıcılara ait parolaları varsayılan sözlük dosyasından okuyarak bulmaya çalışacaktır.
 
#john master.passwd
Loaded 2 password hashes with no different salts (Traditional DES [128/128 BS SSE2-16])
alpine           (mobile)
alpine           (root)
guesses: 2  time: 0:00:00:00 100.00% (2) (ETA: Sun Jan  2 18:27:32 2011)  c/s: 915456  trying: adam - daniel1
Eğer parola kırma işleminde sözlük saldırısı kullanılmak istenirse –w:dozluk_dosyasi parametresi ile istenilen sözlük dosyası kullanılabilir.
 
Linux Parolarını Kırma
JTR 1.7.6’dan önceki sürümler yeni nesil Linux parola tipini desteklemediği için parola kırma denemeleri başlamayacaktır. Bu esnada JTR ““No password hashes loaded”” hatası verecektir.
Linux dağıtımlarında sistemdeki kullanıcıların  parolaları /etc/shadow dosyasında hash+salt şeklinde saklanır. Salt(tuz) her seferinde değişken olarak atanan bir değerdir, bundan dolayı aynı parolayı iki kere girildiğinde hash değerleri farklı çıkacaktır.
Linux sistemlerin parola formatı incelendiğinde ilk iki $ arasındaki değer hangi şifreleme/hash algoritmasının kullanıldığını belirtir.
Örnek bir /etc/shadow satırı
root:$6$Jueah6pD$Cc8EAOiMXrgN8n8F7PCSr7Jm.q8mdJtf9FWD.9xO6kjQ34VEaspVdgHaQmXbwo1Hgkzar/DcWolZJp.j6lsun/:14922:0:99999:7:::
Linux parola güvenliğiyle ilgili detay bilgi için
3-4 sene öncesine kadar çoğu Linux dağıtımında parolaları hashli saklamak için MD5 kullanılırdı. Günümüzdeki Linux dağıtımları ise SHA512 ($6$) tercih etmektedir. MD5 kullanılmış hashli parolaları JohnTheRipper aracıyla kırmak mümkünken SHA512 kullanılarak hashlenmis parolaları son sürüm harici  JTR ile kırmak mümkün değil.
JTR kullanarak Linux parolalarının güvenliği denendiğinde aşağıdakine benzer hata alınacaktır.
“No password hashes loaded”
Aşağıdaki adımlar günümüz Linuz dağıtımlarının parolalarını JTR ile kırmak için yapılması gerekenleri içermektedir:
[email protected]:~/test# wget http://www.openwall.com/john/g/john-1.7.5.tar.gz
[email protected]:~/test# tar zxvf john-1.7.5.tar.gz
[email protected]:~/test# cd john-1.7.5
PATCH dosyası http://www.openwall.com/lists/john-users/2009/09/02/3 adresinden indirilerek yeni sürüme uyarlanmalıdır.
[email protected]:~/test/john-1.7.5# patch -p1 -i patch
patching file src/Makefile
patching file src/crypt_fmt.c
patching file src/john.c
Hunk #2 succeeded at 67 (offset 2 lines).
[email protected]:~/test/john-1.7.5/src# make linux-x86-any
# cd ../run/
[email protected]:~/test/john-1.7.5/run# ls
all.chr  alnum.chr  alpha.chr  digits.chr  john  john.conf  lanman.chr  mailer  password.lst  unafs  unique  unshadow
[email protected]:~/test/john-1.7.5/run# ./john /etc/shadow
Loaded 3 password hashes with 3 different salts (generic crypt(3) [?/32])
toor             (root)
Sadece bir kullanıcıya ait parola güvenliği test edilmek istenirse –user=kullanici_Adi parametresiyle belirtilebilir.
Örnek:
Ahmet kullanıcısına ait parolanın kırılma deneyimi.
[email protected]:/pentest/passwords/jtr# ./john /etc/shadow --user=ahmet
Loaded 1 password hash (generic crypt(3) [?/32])
Cisco Parolalarını Kırma
Cisco Type 5 parolalarını kırma
Cisco ağ cihazlarında iki tip parola vardır. BunlarType 7 ve type 5 parola tipleridir.
enable secret 5 $1$0a4m$jsbSzU.vytsZFISdJtbQI4
           enable password 7 062E0A1B76411F2D5C
Type 7 kolaca “çözülebilir” bir algoritma kullanmaktadır. Internet üzerinden edinilecek çeşitli araçlarla type7 parolaları rahatlıkla çözülebilir.
    username jbash password 7
username jbash password 7 07362E590E1B1C041B1E124C0A2F2E206832752E1A01134D
 
Type 5 md5+salt kullanarak saklamaktadır parolayı. Örnek  olarak FreeBSD parola tipi alınmıştır. Dolayısıyla JTR’in Cisco parolalarını kırması için herhangi bir ek yama gerektirmez.
Örnek Cisco type 5 parolası:  $1$WhZT$YYEI3f0wwWJGAXtAayK/Q.
Bu parolayı cisco_type5 adlı bir dosyaya ekleyerek aşağıdaki komutla kırma işlemi başlatılabilir.
# ./john cisco_type5
Loaded 1 password hash (FreeBSD MD5 [32/32])
test             ?
guesses: 1  time: 0:00:00:02 100.00% (2) (ETA: Thu Nov 25 03:40:51 2010)  c/s: 7116  trying: test
Burada seçilen parola basit olduğu için kolaylıkla kırılmıştır. Parolanın daha zor olduğu durumlarda JTR’in ileri seviye özellikleri kullanılması gerekebilir.
Mesela kırılmak istenen parolanın  JTR’in varsayılan sözlük listesinde olmadığını varsayalım.
Öncelikle Cisco type5 tipinde parola oluşturalım:Parola oluşturmak için openssl kullanılabilir.
[email protected]:/pentest/passwords/jtr# openssl passwd -1 -salt salata deneme
$1$salata$D2pdYRA7H6IjskEj4Qtue1
Bu komutla tuz değeri salata olan ve parolası deneme olan bir hash değeri oluşturuldu.
Şimdi bu parola+hash’in çıktısını JTR ve hazırladığımız 50.000.000 satırlık Türkçe wordlistimizi kullanarak kırmaya çalışalım.
# ./john -w:son_wordlist_turkce cisco_type5_test
Loaded 1 password hash (FreeBSD MD5 [32/32])
guesses: 0  time: 0:00:00:04 3.48% (ETA: Thu Nov 25 03:53:43 2010)  c/s: 7353  trying: ow8
deneme           (bga)
Çıktıdan görüleceği gibi JTR’in md5+salt değeri kullanılan parola formatlarına karşı hızı çok yüksek değil(saniyede ~7500 deneme). Bunun temel nedeni sözlük listesindeki her bir satırı alıp öncelikle hash oluşturup sonra varolan hash değeriyle karşılaştırmasıdır.
Oysa burada rainbowtable kullanabilseydik işimiz birkaç saniye sürecekti. Fakat rainbowtable’ı kendimiz oluşturmamız gerekiyor. Neden? Zira internet üzerinde bizim parolamız için kullanılan tuz değerinin aynısının kullanıldığı rainbowtable bulmak pratik olarak imkansızdır.
Netscreen Güvenlik Cihazları Parola Güvenlik Denetimi(Kırma)
ND MD5 (ya da md5ns) olarak geçmektedir. Netscreen tipi parola oluşturmak için JTR ile birlikte gelen netscreen.py adlı python scripti kullanılabilir.
# python netscreen.py admin netscreen
admin:admin$nKv3LvrdAVtOcE5EcsGIpYBtniNbUn
# ./john ns_pass
Loaded 1 password hash (Netscreen MD5 [NS MD5])
netscreen        (admin)
guesses: 1  time: 0:00:00:00 100.00% (2) (ETA: Thu Nov 25 05:23:06 2010)  c/s: 43666  trying: netscreen
 
iPhone Parolalarını Kırma (BGA Blog'danda ulaşılabilir.)
iPhone temelinde OS X işletim sistemi yatmaktadır, OS X işletim sistemi de BSD tabanlı olduğu için parola formatı JTR(John The Ripper) tarafından desteklenmektedir.

Herhangi ek bir yama/parametre kullanmadan iPhone parolalarına güvenlik denetimi gerçekleştirilebilir.


Örnek bir iPhone parola dosyası: /etc/master.passwd
nobody:*:-2:-2::0:0:Unprivileged User:/var/empty:/usr/bin/false
root:/smx7MYTQIi2M:0:0::0:0:System Administrator:/var/root:/bin/sh
mobile:/smx7MYTQIi2M:501:501::0:0:Mobile User:/var/mobile:/bin/sh
daemon:*:1:1::0:0:System Services:/var/root:/usr/bin/false
_wireless:*:25:25::0:0:Wireless Services:/var/wireless:/usr/bin/false
_securityd:*:64:64::0:0:securityd:/var/empty:/usr/bin/false
_mdnsresponder:*:65:65::0:0:mDNSResponder:/var/empty:/usr/bin/false
_sshd:*:75:75::0:0:sshd Privilege separation:/var/empty:/usr/bin/false
_unknown:*:99:99::0:0:Unknown User:/var/empty:/usr/bin/false

iPhone üzerinden elde edilecek master.passwd dosyası JTR’e parametre olarak verilir. JTR aktif durumda olan kullanıcılara ait parolaları varsayılan sözlük dosyasından okuyarak bulmaya çalışacaktır.
#john master.passwd

Loaded 2 password hashes with no different salts (Traditional DES [128/128 BS SSE2-16])
alpine (mobile)
alpine (root)
guesses: 2 time: 0:00:00:00 100.00% (2) (ETA: Sun Jan 2 18:27:32 2011) c/s: 915456 trying: adam - daniel1

Eğer parola kırma işleminde sözlük saldırısı kullanılmak istenirse –w:dozluk_dosyasi parametresi ile istenilen sözlük dosyası kullanılabilir.


0 yorum:

Yorum Gönder