LİNUX PAROLA HASHLERİ NASIL KIRILIR? | JOHN THE RİPPER VE HASHCAT
Merhabalar, bu yazımda John the Ripper ve Hashcat araçları ile Linux hashleri nasıl kırılır, hangi yollar izlenir, /etc/shadow ve /etc/passwd dosyaları nedir, bize ne tür bilgileri verir gibi konuları anlatmaya çalışacağım.
Konumuza başlamadan önce "hash" nedir ilk olarak ondan bahsedeyim. Hash kavramı, bir metni veya bir değeri alıp bazı algoritma teknikleri kullanılarak şifrelenmiş hale getirmeye denir. Birden fazla hashleme algoritmaları vardır. Bunlardan bazıları “MD5, SHA256, SHA512” algoritmaları gibi. Linux tabanlı işletim sistemimizde ise şifrelerimiz, hashlenmiş bir şekilde tutulur. Bu arada hash algoritmalarına örnek vermişken hashlerin ilk değerine göre hangi algoritmaya ait olduğunu anlayabiliriz. Aşağıda bazı algoritmaların, ilk değerlerinden hangisine ait olduğunu anlamamız için örnekler verdim.
$1$ --> MD5
$5$ --> SHA-256
$6$ --> SHA-512
Linux tabanlı sistemlerde kullanıcıların şifreleri “/etc/shadow” dosyasına kaydedilir. Bu dosyayı okumak için genelde root yetkisine sahip olmamız lazım. Zafiyetli makine çözümü yaparken veya gerçek bir pentest işleminde bulduğumuz zafiyetten bu dosyamızı okuyabilirsek eğer, hedef sistemdeki kullanıcıların hashlenmiş şifrelerini bulmuş oluruz. Daha sonrasında ise bu yazımızda da göreceğimiz “John the Ripper ve Hashcat” araçları ile bu hashlenmiş şifreleri kırmaya çalışabiliriz. Ben bu örneği yaparken “metasploitable2” makinesini hedef makine olarak kullanacağım. Artık uygulamamıza başlayalım.
GÖSTERİM1: Hedef sistemimizde ki hashleri kırma işleminde kullanacağımız, bizim için önemli iki adet dosya bulunuyor. Birincisi bahsettiğimiz /etc/shadow dosyası. Hedef sistemimizdeki terminale “cat /etc/shadow” yazarak kullanıcıların hashlerini alıyoruz.
Şifreler hashlenmiş bir şekilde tutulduğu için böyle karışık gözüküyor. Bu dosyamızda ki tüm bilgileri kendi makinemize “shadow.txt” diye kaydedebiliriz. Çünkü daha sonra bu dosyalardaki bilgileri kullanarak işlemler yapacağız.
GÖSTERİM2: Şimdi ise ikinci önemli dosyamız olan “/etc/passwd” dosyamızı okumamız lazım. /etc/passwd dosyamız ise sistemdeki kullanıcı bilgilerini (kullanıcı adı, kullanıcı kimliği, grup kimliği) gibi bilgilerin kaydedildiği yerdir.
Fakat /etc/passwd dosyasını herkesin okuma izni olduğu için kullanıcı şifresi “x” olarak tutulur.
Hash kırma işlemlerimizi yapabilmemiz için passwd dosyasının bilgilerinide kendi makinemize “passwd.txt” şeklinde kaydedebiliriz. Başlarda söylediğim gibi hashi kırmak için iki adet dosya bilgisine ihtiyacımız vardı “/etc/shadow ve /etc/passwd” ve bu dosyalarımızı kendi makinemize kaydettik. Şimdi ise diğer işlemlerimize geçelim.
GÖSTERİM3: Şifre kırma araçlarımız hashleri kırabilmesi için vereceğimiz dosyada onların okuyabileceği formatta olması lazım. Yani biz hedef sistemden aldığımız shadow ve passwd dosyalarını, terminalimizde “unshadow” yazdıktan sonra passwd ve shadow dosyalarımızı verirsek eğer, bizim için bu iki dosyayı şifre kırma araçlarımızın okuyabileceği formata getirmiş oluyor. Shadow zaten gölge anlamına geliyor, unshadow ise de gölgeyi kaldırma işlemi görüyor diyebiliriz. Terminalimize “unshadow passwd.txt shadow.txt > unshadow.txt” şeklinde yazarsak bu düzenlenmiş formatı bizim için “unshadow.txt” adlı bir dosya oluşturup içerisine kaydetme işlemini yapıyoruz.
GÖSTERİM4: Artık şifreyi kırmak için hazırız. Şimdi ise John the Ripper aracımıza hashleri kırmada deneyeceği bir wordlist dosyasını ve unshadow formatında düzenlenen hash dosyamızı vermemiz lazım. Hash kırma işlemimizi başlatmamız için terminalimize “john --wordlist= (burada kullanmak istediğiniz wordlist’in yolunu vermeniz lazım) unshadow.txt (bu kısımda ise unshadow dosyamızı veriyoruz)” yazıp kırma işlemimizi başlatıyoruz.
Bu işlemler verdiğiniz wordlistin boyutuna göre biraz zaman alabilir. Ben sizlere göstermek için çok büyük boyutlu bir wordlist seçmediğim için kısa sürdü.
GÖSTERİM5: Şifre kırma işlemlerimiz tamamlandı. Kırılan hashi görmemiz için “john --show unshadow.txt (aynı dosyamızı tekrar belirtiyoruz)” yazıyoruz.
Yukarıda ki görselimizde de gözüktüğü gibi “msfadmin” adlı sistem kullanıcısının şifresini bulduk. Kullanıcımızın ismi “msfadmin” şifresinin de yine “msfadmin” olduğunu görüyoruz (altı çizili olarak belirttiğim yer şifreli metindir).
Şimdi ise bu işlemlerimizi Hashcat aracı ile nasıl yapabiliriz onu göstereceğim. Bu sefer ise hedef sistemimizde ki tüm kullanıcıların hashlerini değil de john aracı ile kırdığımız “msfadmin” adlı kullanıcının hashini verelim aracımıza.
Hashcat aracımız ile işlemlerimiz john aracımıza göre biraz farklı olacak. Bu farklılık ise bu sefer aracımıza kırma işleminde kullanacağımız modülü belirtmemiz lazım. Yani kıracağımız hashin hangi algoritma ile kırmaya çalışacağını söyleyeceğiz. Yazıma başlarken belirttiğim algoritma örneklerinde, hashlerin ilk ifadelerine bakılarak hangi algoritma kullanıldığını tespit edebiliyorduk. Hashimizin başında belirtilen $1$ ifadesinin “MD5” algoritmasını kullandığını böylelikle öğrenebilirdik. Fakat diyelim ki unuttuk veya sadece bu örnek için de değil, herhangi bir hash değeri buldunuz ve hangi algoritma ile şifrelendiğini öğrenmek istiyorsunuz. O zaman ise terminalimizde bulunan “hash-identifier” isimli aracımızı kullanıyoruz. Terminale "hash-identifier" yazıktan sonra elimizdeki hash değerini giriyoruz.
Kullanıcı hashini verirken, unshadow halinin aynısı verirsek eğer bize görselde de gözüktüğü gibi herhangi bir sonuç bulmayacaktır. Hashimizin, altını çizdiğim kısmını kopyalayıp bu şekilde verirsek eğer bize bir sonuç verecektir. Bizim hash algoritmamızın “MD5(Unix)” olduğunu söylemiş oldu. Normal zamanda da hash ile ilgili bir kısım karşınıza çıkarsa, algoritmasını öğrenmek için bu şekilde kullanım uygulayabilirsiniz.
GÖSTERİM6: Hashcat ile şifre kırma kısmına geçebiliriz. Hashcat ile şifremizi kırarken algoritmasını belirtmemiz lazım demiştik. Bu algoritmamızı hastcat’in yardım kısmından, modül numarası olarak bulmamız lazım. Daha sonra yazacağımız parametrelerde algoritmamızı belirtmek için bu modül numarasını gireceğiz. Şimdi terminalimize “hashcat --help |grep MD5” yazıyoruz. Burda ki “grep” komutumuz getir anlamına geliyor. Yani yazdığımız komutta; hashcat yardım menüsünden MD5 olan satıları bize getir diyoruz.
Bizim kullanacağımız algoritma modül numarasının “500” olduğunu görüyoruz (MD5 Unix’ın olduğu satır numarasını alıyoruz). Şimdi ise şifre kırma işlemlerini başlatmak için gerekli komutu yazalım.
GÖSTERİM 7: Terminalimize “hashcat –m 500 –a 0 (atak türü anlamına gelir. Wordlist’den bir deneme gerçekleştireceğimiz için 0 diyoruz) newhash.txt (sadece msfadmin adlı kullanıcı hashinin bulunduğu yeni dosya adımız) wordlist_yolumuz”. Şifre kırma denememizi başlatıyoruz.
Yine bu şifre kırma denemizde, belirteceğiniz wordlistin boyutuna göre bulması uzun sürebilir. Bu wordlistleri internetten indirebilir veya bazı wordlist oluşturma araçlarını kullanarak kendinizde hazırlayabilirsiniz.
Şifre kırma saldırımız bitti. Hashimizin sonunda bize kırdığı şifreyi “msfadmin” olarak belirtti. Hashcat ile şifre kırma işlemleri de bu şekilde gerçekleşiyor.
Bu yazımda John the Ripper ve Hashcat aracı ile Linux hashlerimizi nasıl kırarız, “/etc/shadow” ve “/etc/passwd” dosyalarının kısa tanımını, bu işlemlerdeki önemini ve temel hash konusuna değindim. Umarım faydalı olabilmişimdir. Bir sonraki yazımda görüşmek üzere :)