TEKNOLOJİ : Bellekten Parolaların Elde Edilmesi – 2

Ertuğrul Başaranoğlu, TÜBİTAK BİLGEM
Bir önceki yazıda Windows işletim sisteminde oturum açma sırasında görevli olan prosesler ve bu proseslerin işlevlerinden konumuz dahilinde bahsedilmişti. Ayrıca oturum açma işlemi sırasında kullanıcı bilgilerinin alınacağı arayüzün kullanıcının karşısına çıkarılması, kullancııdan gerekli bilgilerin alınması ve bu bilgilerin LSASS prosesine iletilmesine kadar olan adımlar incelenmişti. Bu yazıda ise asıl amaç olan parolaların açık bir şekilde elde edilmesinin nasıl mümkün olduğu konusuna değinilecektir. Bu yazı iki bölümden oluşacaktır. Öncelikle LSASS prosesinin parola bilgisini nasıl ele aldığı konusu incelenecek, daha sonra da işletim sisteminin oturum açma mimarisini kötüye kullanan iki aracın (WCE ve Mimikatz) nasıl çalıştığı konusuna değinilecektir.

LSASS ve Windows İşletim Sisteminde Oturum Açma İşlemi

Windows işletim sistemi üzerindeki kullanıcı kimlik bilgileri doğrulanma işlemleri için SSPI (Security Support Provider Interface) adı verilen özel bir mimari tasarlanmıştır. Kimlik doğrulaması ile ilgili tüm çağrılar (call) bu mimari temelinde ele alınır. Böylece hem Windows kimlik doğrulama mekanizmasını koruma altına almakta, hem de kendi kimlik doğrulama mekanizmalarını kullanmak isteyen geliştiricilerin Windows’un kullandığı kimlik doğrulama mekanizmalarının derinliklerine dalmasına gerek kalmamaktadır. Bu mimariyi tasarlayanlar, kimlik doğrulama işlemini istemci üzerinde (local) veya uzak bir sunucu ile istemci arasında (remote) güvenilir olarak gerçekleştirilmesini hedeflemişlerdir. Windows 7 ve Windows Server 2008 R2 mimarisindeki (ve sonrasındaki) varsayılan kimlik doğrulama sağlayıcıları (Security Support Provider – SSP), sisteme yüklenen DLL’leri kullanarak kimlik doğrulama işlemlerini gerçekleştirirler.

Kimlik bilgisi sağlayıcılarından (CP) geçen kimlik bilgileri Winlogon prosesine eriştiği konusuna değinilmişti. Winlogon prosesi LSASS prosesinin LsaLookupAuthenticationPackage fonksiyonunu çağırarak, bilgisayarın desteklediği bütün kimlik doğrulama paketlerinin (authentication packages) listesini elde eder. Winlogon prosesi, bu sefer LSASS prosesinin LsaLogonUser fonksiyonunu çağırarak, kimlik bilgisi sağlayıcısı (CP) için gerekli olan pakete kimlik bilgileri gönderir. Örneğin, MSV1_0.dll paketine kullanıcı adı ve şifre bilgisini gönderir.

Yerel bir sistem çağrısı ile gerçekleştirilen oturum açma işlemi temel olarak aşağıdaki gibi gerçekleşmektedir.

Şekil – 1: Yerel Sistem Çağrısı ile Oturum Açma İşlemi

Kullanıcıdan alınan kimlik bilgileri yukarıda belirtildiği şekliyle ilgili SSP (Security Support Provider) tarafından sağlanan DLL’e aktarılır. Windows 7 ve Windows Server 2008 R2 (ve sonrasındaki) sistemlerde varsayılan olarak bulunan güvenlik destek sağlayıcıları (SSP) ve kullandıkları DLL’ler şu şekildedir:

  • Credential Security Support Provider – credssp.dll
  • Digest Security Support Provider – Digest.dll
  • Kerberos Security Support Provider – kerberos.dll
  • Negotiate Security Support Provider – lsasrv.dll
  • Negotiate Extensions Security Support Provider – negoexts.dll
  • NTLM Security Support Provider – msv1_0.dll
  • PKU2U Security Support Provider – pku2u.dll
  • Schannel Security Support Provider – Schannel.dll
  • Live Security Package – LiveSSP.dll

Bunların yannda Wdigest.dll, Kdcsvc.dll, Ntdsa.dll, Ntdsapi.dll vs gibi LSA bileşenleri de kimlik doğrulama işlemlerinde görev alır.

Not: Bu DLL’lerin işlevleri hakkında ayrıntılı bilgi sonraki yazıda incelenecektir.

İşletim sisteminde kimlik doğrulama paketleri mevcut olduğu halde LSA (Local Security Authority) tarafından belleğe yükleme işleminin gerçekleşmezse bu DLL’ler kullanılamaz. Bu sebeple LSA tarafından bu paketler belleğe yüklenmelidir. LSA, hangi DLL dosyalarını yükleyeceğini kayıt defterindeki “HKLMSYSTEMCurrentControlSetControlLsaSecurity Packages” kaydından alır. Bu kayıtta bulunmayan paketler belleğe yüklenmeyecek ve bu sebeple tercih edilen modda kimlik doğrulamasu gerçekleşmeyecektir.

Şekil – 2: Güvenlik Paketleri

SSP ve kimlik doğrulama paketleri ile ilgili ayrıntılı bilgi için bakınız:

http://technet.microsoft.com/en-us/library/dn169026(v=ws.10).aspx
http://technet.microsoft.com/en-us/library/dn169016(v=ws.10).aspx
http://msdn.microsoft.com/en-us/library/aa374733(v=vs.85).aspx

Sonuç olarak belleğe yüklenen DLL, kendisine açık olarak gelen kimlik bilgilerini alır ve işler. Yerel bilgisayarda yerel bir hesap için kimlik doğrulama işleminde MSV1_0.dll, etki alanındaki bir bilgisayarda etki alanı hesabı için kimlik doğrulama işleminde ise Kerberos.dll kütüphaneleri çağırılabildiği gibi, bir oturum kullanılarak başka sistemlerde de oturum açılması (Single Sign-on) belleğe yüklenen bu kütüphaneler kullanılarak gerçekleştirilir.

Kimlik doğrulama paketleri (authentication packages), bazı fonksiyonları kullanarak, parolayı (veya parolanın özetini) geri döndürülebilir olacak şekilde şifreli olarak saklamaktadır. Örneğin, standart Win32 fonksiyonlarından olan LsaProtectMemory fonksiyonunu kullanarak belirli bir adresten (Buffer) başlayarak belirli uzunluktaki (Buffer Size) bir bellek adres uzayını (memory address space) şifrelerken, LsaUnProtectMemory fonksiyonu ise aldığı parametrelere göre şifre çözme işlemini gerçekleştirir. Şifreleme işleminde kullanılan anahtarlar, bilgisayar ilk olarak başlatıldığında LSASS prosesi içerisindeki fonksiyonlar tarafından üretilir. LsalnitializeProtectedMemory fonksiyonu bu anahtarı üreterek LsaEncryptMemory fonksiyonunun kullanımına sunar. Şifrelenen veri, DLL’e göre, parola olabildiği gibi parolanın özeti de olabilir. Örneğin, MSV1_0.dll parolanın LM ve NTLM özet halinin şifresini saklamaktayken, wdigest.dll veya kerbeos.dll ise parolanın kendisinin şifreli halini saklamaktadır. Böylece gerekli durumlarda (SSO gerektiren işlemler gibi) bu bilgiler, LSASS tarafından üretilen anahtar yardımı ile açık olarak elde edilebilmekte (parola veya parola özeti olarak) ve kimlik doğrulama işlemlerinde kullanılmaktadır.

Kimlik bilgilerinin bu şekilde (açık veya MSV1_0.dll için özet haline geri döndürülebilir olarak RAM üzerinde şifreli şekilde) saklandığı durumlardan bazıları aşağıdaki gibidir:

  • Bilgisayar başında konsoldayken oturum açıldığında,
  • RDP ile uzak masaüstü bağlantısı yapıldığında,
  • RunAs komutu kullanarak bir işlem gerçekleştirildiğinde,
  • Belirli bir kullanıcı hakkı ile servis çalıştırıldığında,
  • Kimlik doğrulaması için tasarlanan mimarideki bazı API’leri kullanan uygulamalarla işlemler gerçekleştirildiğinde, vs.

Bu noktadan sonraki konular yazının kapsamı dışında olduğu için değinilmeyecektir. Aşağıdaki resim kimlik doğrulamanın sonraki aşamalar için fikir vermektedir.

Şekil – 3: Oturum Açma İşlemi Mekanizması

Oturum açma işlemini bu yazı için tek bir cümleyle şu şekilde özetleyebiliriz: Oturum açmak için yazdığımız kullancı adı ve parola gibi bilgiler, belleğe (RAM) yüklenen ve kimlik doğrulama işleminde görev alan bazı kütüphane dosyalarında şifreli olarak saklanmakta ve bu bilgiler kimlik doğrulama işlemleri sırasında işlenmektedir. Aşağıdaki resim oturum açma işlemini özetlemektedir:

Şekil – 4: Oturum Açma İşlemininin Özetlenmesi

WCE ve Mimikatz Araçlarının Kullanımı

WCE ve Mimikatz araçları temel olarak RAM’de bulunan kimlik doğrulama paketlerindeki (authentication packages) kimlik bilgilerini (şifreli parola ve parola özetlerini, kulalnıcı adı gibi) okur, parolayı (ve MSV1_0.dll için parola özetini) şifreleyen şifreleme anahtarını elde eder ve şifreli parola (ve parola özetini) elde eder.

Bu araçları aşağıdaki bağlantıları kullanarak indirebilirsiniz:

  • WCE

http://www.ampliasecurity.com/research/wcefaq.html#curversion

  • Mimikatz

http://blog.gentilkiwi.com/mimikatz

Bu araçları kullanarak oturumlardaki parolaları elde etmek şu şekilde gerçekleşir:

  • WCE

wce.exe -w

  • Mimikatz

mimikatz.exe
privilege::debug
sekurlsa::logonPasswords full

Bu araçların kullanılması ile ilgili bir senorya şu şekildedir: SIRKET etki alanındaki bir bilgisayarda, “Kurban” adlı bir etki alanı kullanıcısı ve “Yerel Yonetici” adlı yerel kullanıcı oturum açık durumdadır. Bu senaryoda, RAM üzerinde bu iki kullanıcının oturum açma işlemi sırasında kullanılan kimlik doğrulama paketlerinden (authentication packages) parola bilgilerinin şifresi çözülerek alınabilir. Bu işlemlere ait ekran görüntüsü aşağıdaki gibidir.

WCE aracı için:

Şekil – 5: WCE Aracının Kullanımı

Not: Bir bilgisayarın da parolası gibi davranan belirteci bulunmaktadır. Ancak bu yazının kapsamı dışında olduğu için bu konuya girilmeyecektir.

Mimikatz aracı için:

Şekil – 6: Mimikatz Aracının Kullanılması

Yukarıdaki ekran görüntüsünde de görüldüğü gibi iki işlem gerçekleştirilir. Öncelikle yetkilendirme yapılır sonra da DLL enjeksiyonu ile istenen bilgiler elde edilir. Normalde bir kullanıcı sadece yetkisi olduğu bir proses üzerinde geniş yetkiye sahip olur, başka bir hesap (kullanıcı hasabı, servis hesabı ve SYSTEM hesabı dahil) tarafından oluşturulan bir proses üzerinde çok kısıtlı hakları bulunmaktadır. Eğer, SYSTEM kullanıcısının bir prosesine (LSASS.exe gibi)DLL enjeksiyonu gibi kritik bir işlem gerçekleştirilecekse, bu proses üzerinde SeDebugPrivilege yetkisine sahip olunmalıdır. Bu yetkiye sahip olunduktan sonra, sekurlsa.dll kütüphanesi LSASS.exe prosesine enjekte edilerek, yasal fonksiyonları (LsaUnProtectMemory, LsaEncryptMemory vs) kullanır ve kimlik doğrulama paketlerindeki parola bilgileri elde edilir.

Not: Windows 7 sistemlerde varsayılan olarak disk üzerinde (SAM dosyasında) LM özetler tutulmamaktadır. Ancak RAM üzerinde bu bilgi bulunmaktadır. Yukarıdaki ekran görüntüsünde “Yerel Yonetici” adlı kullanıcının parolasının LM ve NTLM özetlerinin elde edildiği görülmektedir. WCE aracı kullanılarak da bu bilgi elde edilebilir:

Şekil – 7: Disk Üzerinde Tutulmayan Parola LM Özetlerinin RAM Üzerinde Tutulması

Bir önceki başlıkta LSASS prosesinin adres uzayında kullanıcı parolasını (ve parolasının özetini) şifrelemek için kullanılan anahtar da bulunmakta olduğu belirtilmişti. Bu sebeple LSASS prosesinin dump’ı alınarak aynı mimaride farklı bir bilgisayara aktarılırsa, RAM üzerindeki bilgiler aktarılan makineden de alınabilir. Konu ile ilgili bağlantıdaki yazı incelenebilir. Bunun yanında parolaların açık olarak elde edilebilmesi için sadece RAM’deki bilgilerin alınması yeterli olamayabilmektedir. Bu durumun sebebi tam olarak bilinmese de Windows işletim sisteminin önbellek (cache) mekanizmasından kaynaklandığı tahmin edilmektedir. Şöyle ki, canlı bir bilgisayarda bir prosesin (LSASS gibi) minidump’ı alınırken RAM ve pagefile içerisindeki bilgiler beraber elde ediliyorken, sadece RAM üzerinde ise bu prosese ait tüm bilgiler elde edilemeyebilmektedir. Bu önbellek mekanizmasından dolayı, adli analizlerde (forensics) kullanılan raw halindeki RAM dump içerisinden parola bilgisinin elde edilemediği düşünülmektedir.

Not: Bazı sistemler kimlik doğrulama işlemi gerçekleştirirken kimlik doğrulama paketlerinde kimlik bilgilerini saklarlar. Bu sistemlerden birisi de Microsoft Exchange sunucularıdır. Bu sebeple, sızma testlerinde mimikatz uygulaması Exchange sunucularda çalıştırılırsa, tüm kullanıcıların parola bilgileri açık halde elde edilebilmektedir.

Bu araçların RAM üzerindeki parolaların açık halde elde edebilmeleri haricinde daha bir çok kabiliyeti bulunmaktadır. Ancak diğer kabiliyetler bu yazının kapsamı dışında olduğu için değinilmemektedir.

Sonraki yazıda RAM üzerinden parola bilgilerinin elde edilmesine engel olmak (zorlaştırmak) için alınması gereken önlemlerden, parolaların işletim sisteminde güvenilir olarak saklanma metodlarından ve saldırı yüzeyinin azaltılması için gerçekleştirilmesi tavsiye edilen adımlardan bahsedilecektir.

Reklamlar

Etiketlendi:, ,

Bir Yanıt Bırakın

Please log in using one of these methods to post your comment:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

YÜKSEK STRATEJİ

strateji, istihbarat, güvenlik, politika, jeo-politik, mizah, terör, araştırma, teknoloji

%d blogcu bunu beğendi: