Patator Aracı İle Parolası Tespit Edilen Java KeyStore Dosyası İçerisindeki Özel Anahtara Erişim Çalışmaları

0
235
views
Sızma testleri sırasında elde edilen bir anahtar deposu içerisinden özel anahtar elde edilebilir. Bu yazıda, Breach: 1 sanal makinesinde bulunan bir Java anahtar deposunun (Java KeyStore) parolası Patator aracı ile tespit edilerek özel anahtara erişim sağlanacaktır.

Yazıda kullanılan Breach: 1 sanal makinesi Vulnhub sitesinden indirilebilir.

https://www.vulnhub.com/entry/breach-1,152/

 

Not: Varsayılan durumda mevcut sanal ethernet kartına statik IP adresi (192.168.110.140) atanmıştır.

TCP/80 portunda Impress CMS hizmet vermektedir.

192.168.110.140/impresscms/user.php

 

Bu uygulamaya aşağıdaki kimlik bilgileri ile erişim sağlanabilmektedir.

Kullanıcı Adı: pgibbons
Parola:damnitfeel$goodtobeagang$ta

 

Mailler içerisinde anahtar deposunun bağlantı linki bulunabilir.

http://192.168.110.140/impresscms/readpmsg.php?start=0&total_messages=3

 

Bu dosyanın Java Keystore tipinde olduğu görülmektedir.

wget 192.168.110.140/.keystore
file .keystore
md5sum .keystore

 

A) Temel Kavramlar

Sertifikalar farklı formatlarda hazırlanabilir. Farklı formatlar farklı uygulamalar veya ortamlar için kullanılabilir. Veya bir formattaki başka bir formata dönüştürülebilir. En sık kullanılan formatlar aşağıdaki gibidir:

  • PEM: SSL sertifikası, alt sertifikaları veya özel anahtarları içerebilirler. Base64 ile kodlanmıştır. “—–BEGIN CERTIFICATE—–” ile başlayıp “—–END CERTIFICATE—–” ile sonlanırlar. “pem”, “crt”, “cer” veya “key” uzantılı olabilmektedir.
  • DER: SSL sertifikası, alt sertifikaları veya özel anahtarları içerebilirler. Binary (DER encoded) formattadır. Genellikle java tabanlı uygulamalarda kullanılır. “cer” veya “crt” uzantılı olabilmektedir.
  • PKCS#7/P7B: SSL sertifikası ve alt sertifikaları içerebilir; özel anahtar içeremezler. Base64 ASCII ile kodlanmıştır. “—–BEGIN PKCS7—–” ile başlayıp “—–END PKCS7—–” ile sonlanırlar.  “p7b” veya “p7c” uzantılı olabilmektedir.
  • PKCS#12/PFX: SSL sertifikası, alt sertifikaları veya özel anahtarları içerebilirler. Binary formattadır. Genellikle Windows tabanlı uygulamalarda kullanılır. .pkcs12, .pfx veya .p12 uzantılı olabilmektedir.

Java tabanlı uygulamalarda, uygulama kodunda kullanılacak sayısal sertifikalar ve gizli anahtarlar, JKS (Java KeyStore) formatındaki anahtar depolarında saklanır. Anahtar deposunda bir çok nesne (SSL sertifika veya gizli anahtar) bulunabilir. Parola korumalı anahtar deposunu açabilmek için parolanın tespit edilmesi gerekmektedir. Parola ile depo açıldıktan sonra, bu anahtar deposundaki nesnelere erişim için “alias” adı verilen parametre/bilgi kullanılabilir.

Not: Özel/açık anahtar, CSR, sertifika, imzalama gibi kavramların detayları için kaynaklardaki SiberPortal yazıları okunabilir.

 

B) Patator ile Anahtar Deposunun Parolasının Keşfi ve Anahtar Deposunun İçeriğinin İncelenmesi

Deponun içeriğine erişim sağlamak için “keytool” aracı kullanılabilir. Ancak deponun parola korumalı olduğu görülmektedir.

keytool -list -keystore .keystore
Hata Mesajı: keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect

 

Anahtar deposunun parolasını elde etmek için patator adlı araç ile kaba kuvvet saldırısı gerçekleştirilebilir.

cat Parolalar
patator keystore_pass keystore=/root/.keystore password=FILE0 0=/root/Parolalar -x ignore:fgrep=’keytool error’

 

Böylece tespit edilen anahtar deposu parolası (“tomcat”) ile JKS formatındaki depo içeriğine erişilebilmektedir.

keytool -list -keystore .keystore

 

Depo formatının JKS tipinde olduğu, içerisinde de bir adet varlık olduğu ve bu varlığın da özel anahtar olduğu görülmektedir. Daha detaylı inceleme için “-v” parametresi kullanılabilir.

keytool -list -v -keystore .keystore

 

Dosya içerisinde de görüldüğü gibi, içerisindeki varlığın (özel anahtarın) alias değeri “tomcat” olarak verilmiştir.

 

C) Örnek Bir Anahtar Deposunun Oluşturulması

Sanal makinedekine benzer bir anahtar deposu oluşturmak için “keytool” aracı da kullanılabilir. Parolası “Anahtar123” bu anahtar deposunun içerisine alias değeri “Banka”, parolası “GizliParola123” olan özel anahtar içeren bir sertifika oluşturulmuştur.

keytool -genkey -keystore YeniAnahtarDeposu.jks -alias Banka -storepass Anahtar123 -keypass GizliParola123 -keyalg RSA -keysize 2048 -dname “CN=kisisel.wxyztbank.com, O=Wxyzt, OU=WXYZT Bankasi, C=Turkey”
file YeniAnahtarDeposu.jks
md5sum YeniAnahtarDeposu.jks
strings YeniAnahtarDeposu.jks | head -10
strings YeniAnahtarDeposu.jks | tail -15

 

Bu anahtar deposunun içeriğine “Anahtar123” ile erişilebildiği görülmektedir.

keytool -list -v -keystore YeniAnahtarDeposu.jks -storepass Anahtar123

 

D) Anahtar Deposunu JKS Formatından PKCS#12 Formatına Çevirme

Breach: 1 sanal makinesinde bulunan JKS tipindeki anahtar deposu PKCS#12 formatına çevrilmesi gerekebilir. Bu çevirim için yine keytool aracı kullanılabilir. PKCS#12 formatındaki dosyaya “Gg123456” gibi bir parola da verilebilir.

keytool -importkeystore -srckeystore .keystore -destkeystore GizliAnahtarDeposu.p12 -deststoretype PKCS12 -srcalias tomcat -deststorepass Gg123456 -destkeypass Gg123456
file GizliAnahtarDeposu.p12
md5sum GizliAnahtarDeposu.p12
strings GizliAnahtarDeposu.p12

 

E) PKCS#12 Formatından Der Formatına Çevirme

Breach: 1 sanal makinesinde bulunan JKS tipindeki anahtar deposu DER formatına çevrilmesi gerekebilir. Bu çevirim için yine keytool aracı kullanılabilir.

keytool -exportcert -alias tomcat -file GizliAnahtarDeposu-EskiFormatli.der -keystore .keystore
file GizliAnahtarDeposu-EskiFormatli.der
md5sum GizliAnahtarDeposu-EskiFormatli.der
strings GizliAnahtarDeposu-EskiFormatli.der

 

F) PKCS#12 Formatından PEM Formatına Çevirme

Breach: 1 sanal makinesinde bulunan JKS tipindeki anahtar deposunun PEM formatına çevrilmesi gerekebilir. JKS formatından doğrudan PEM formatına çevrilemediği için öncelikle PKCS#12 formatına çevrilmelidir. PKCS#12 formatından PEM formatına çevrim için openssl aracı kullanılabilir.

Özel anahtarı parolalı PEM dosyası formatında dışarı çıkarılması aşağıdaki gibidir.

openssl pkcs12 -in GizliAnahtarDeposu.p12 -out GizliAnahtar-Sertifikali-Parolali.pem
file GizliAnahtar-Sertifikali-Parolali.pem
md5sum GizliAnahtar-Sertifikali-Parolali.pem
strings GizliAnahtar-Sertifikali-Parolali.pem

 

Devamı;

 

Eğer sadece özel anahtar çıkartılmak istenirse (-nodes: Özel anahtar şifrelenmeden ve -nocerts: Sertifika çıkarılmadan) aşağıdaki komut kullanılabilir.

openssl pkcs12 -in GizliAnahtarDeposu.p12 -out GizliAnahtar-Sertifikasiz-Parolasiz.pem -nodes -nocerts
file GizliAnahtar-Sertifikasiz-Parolasiz.pem
md5sum GizliAnahtar-Sertifikasiz-Parolasiz.pem
strings GizliAnahtar-Sertifikasiz-Parolasiz.pem

 

İçerisinde sertifika olan PEM dosyasındaki özel anahtarı dışarı çıkarmak için aşağıdaki komut kullanılabilir.

openssl rsa -in GizliAnahtar-Sertifikali-Parolali.pem -out GizliAnahtar-Sertifikasiz-Parolasiz-RSA.pem
file GizliAnahtar-Sertifikasiz-Parolasiz-RSA.pem
md5sum GizliAnahtar-Sertifikasiz-Parolasiz-RSA.pem
strings GizliAnahtar-Sertifikasiz-Parolasiz-RSA.pem

 

Parola korumalı PKCS#12 formatındaki anahtar deposundan parola korumalı olacak şekilde özel anahtarı PEM formatında dışarı aktarmak için aşağıdaki komut kullanılabilir.

openssl pkcs12 -in GizliAnahtarDeposu.p12 -out GizliAnahtar-Sertifikasiz-Parolali.pem -nocerts
file GizliAnahtar-Sertifikasiz-Parolali.pem
strings GizliAnahtar-Sertifikasiz-Parolali.pem | head -10
strings GizliAnahtar-Sertifikasiz-Parolali.pem | tail -10

 

 

Kaynaklar:

http://www.siberportal.org/blue-team/cryptography/generating-public-and-private-key-pairs-for-asymmetric-encryption-data-signing-and-verifying-by-using-openssl-software/

OpenSSL Aracı ile CSR Dosyası Oluşturulması ve CSR Dosyasının İmzalanarak Sertifikanın Hazırlanması


http://www.cozumpark.com/blogs/gvenlik/archive/2012/10/07/java-uygulamalar-nda-ssl-sertifika-y-netimi.aspx
https://tr.godaddy.com/help/java-kodu-imzalama-csr-olusturma-4780
http://camelinc.info/blog/2017/03/Vulnhub—Breach-1-boot2root-CTF-walkthrough/
https://www.gknsb.com/2016/08/breach-1-writeup.html

 

 

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz