Windows işletim sistemi özelinde konuşacak olursak Microsoft, NT zamanından beri kullanıcı kimliğini doğrulamak için (authentication) çeşitli protokoller kullanıyor. Bu protokollerin en güveniliri Windows 2000 ile kullanılmaya başlanan Kerberos olsa da, Kerberos desteği olmayan uygulamaların,protokollerin ve 2000 öncesi işletim sistemlerin sorunsuz çalışabilmesi için NTLM,Digest gibi eski kimlik doğrulama protokolleri de bir yandan kullanılmaya devam ediyor. Microsoft'un SSP (Security Support Provider) de dediği bu doğrulama protokolleri de biz tembel ve nazik parmaklı kullanıcıları daha çok memnun edebilmek, her erişmek istediğimiz kaynak için kullanıcı adı/parola yazdırmamak adına credential dediğimiz kullanıcı adı ve parolalarımızı kimi zaman bilgisayarın registry kayıtlarında,kimi zaman SAM veritabanında,kimi zaman da LSASS (Local Security Authority SubSystem) process'inde olduğu gibi işletim sistemi hafızasında (memory) saklıyor ve kimlik doğrulama gerektiğinde ya da token yenileme zamanı geldiğinde kayıtlı credentialları arka planda bize çaktırmadan gerekli servislere iletiyor. Çeşitli algoritmalarla hashlanan,şifrelenen parolaların saklandığı yerler de sır değil. Lokal kullanıcı hesapları için kayıtlı parolalar "%systemroot%\system32\config" altındaki SAM dosyasında ve "HKLM\SAM\SAM\Domains\Account\Users" registry yığınında (Resim 1) saklanırken, domaine dahil bilgisayarlarda interaktif oturum açan kullanıcı hesabı bilgileri "HKLM\SECURITY\Cache" registry yığını (hive)'nda (Resim 2) tutuluyor. "İnteraktif oturum" terimini aklınızda tutun çünkü yazının devamında ele geçirilen işletim sistemine nasıl erişmek gerektiğini anlatırken bol bol kullanacağım. SAM registry kayıtlarına yönetici yetkisiyle erişmekte pek sorun yok.Normal şartlar altında görünmeyen alt dizinler, SAM dizininde hesabınıza yetki verdikten sonra listeleniyor. Ama SAM dosyasına erişim bu kadar kolay değil. Lsas procesine dll enjekte etme gibi yöntemlerle işletim sistemi açıkken de bu dosyaya erişebiliyorsunuz ama genellikle tercih edilen yöntem bootable bir linux işletim sistemiyle bilgisayarı açtıktan sonra bu dosyayı kopyalamak ve bu offline kopya üzerinde tırmalamak.
Resim 1
Resim 2
Resim 3
Resim 4
Resim 5
Resim 2'de gösterilen ve bilgisayarda interaktif oturum açmış domain kullanıcı hesaplarına ait,tuzlanmış ( salted ) ve 2 kere MD4 algoritmasıyla hash'lenmiş parola'nın "password verifier" denen bilgisinin tutulmasını ise Güvenlik Politikası ile ya da "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" yığını altındaki "CachedLogonsCount" anahtarının değerini düzenleyerek kontrol edebilirsiniz. Yine Windows 2000 ile gelen bu özellik, domain'e dahil bilgisayarın bir DC ile irtibat kuramaması halinde daha önce kaydettiği ( cached domain credentials ) kullanıcı hesaplarına, oturum açma hakkı tanır. Her ne kadar "password verifier" denen bu bilgi sadece kayıtlı olduğu işletim sistemi üzerinde kullanılabilse de bu tip bir ihtiyacınız yoksa bu sayıyı 0 ya da 1 yapın.
Diskte ve registry'de saklanan hash değerlerini kısıtlayarak ya da azaltarak sadece riski azalttık,yazının başında belirttiğim gibi bu riski ortadan kaldırmanın uygulanabilir bir yolu yöntemi yok ne yazık ki.Bunun nedeni de parola hash bilgilerinin ve bazen şifrelenmiş parolaların yine bazı kimlik doğrulama protokollerince ve kimlik doğrulama mekanizması bileşenlerince işletim sistemi hafızasında da tutulması. Hedef işletim sisteminde interaktif oturum açmış aktif kullanıcı hesabına ait parola mimikatz,wce gibi araçlar yönetici yetkisi ile kullanıldıklarında kolaylıkla öğrenilebiliyor. (bakınız Windows Credential Editor ile Hash Passing - Nass oluyor da oluyor? ) Özellikle Digest Authentication tarafından saklanan parola bilgisi deşifre edilerek açık haliyle görüntülenebiliyor. WCE'yi yazan firmanın önerdiği -fakat tavsiye edilmeyen- yöntemlerden biri olan Digest Authentication paketini işletim sisteminin kullanabileceği güvenlik paketleri listesinden çıkararak en azından Digest Authentication ile saklanan parolanın deşifre edilmesini engelleyebilirsiniz ama bu bile diğer kimlik doğrulama paketlerince ( SSP ) NTLM hashlerin hafızada tutulmasını engellemiyor.
Anahtar kelime "interaktif oturum açma" (interactive logon) ,yani fiziksel olarak bilgisayarın başına geçerek ya da RDP ve benzeri uzak terminal yönetim protokol ve yazılımlarıyla işletim sisteminde oturum açmak ya da "Run As" yöntemi kullanarak hedef bilgisayarda farklı kullanıcı hesap bilgileri kullanarak komut/uygulama çalıştırmak. Uzak bilgisayardan açılan oturumlara da "uzak interaktif oturum" (remoteinteractive), kimlik doğrulama için lokalde kayıtlı hash bilgileri kullanılıyorsa "CachedInteractive", kimlik doğrulama için lokalde kayıtlı hash bilgileri kullanılıyorsa ama oturum uzaktan açılıyorsa "RemoteCachedInteractive" gibi 12-13 adet oturum açma tipi var (Resim 6) özellikle yeni işletim sistemlerinde.Ama anahtar kelime "Interaktif", açtığınız oturum tipi interaktifse -ki bunu da Güvenlik olay kayıtlarından (Security Event Log) rahatlıkla anlayabilirsiniz - parolanızın ya da en kötü ihtimalle parolanızın hash'inin ele geçirilmesi an meselesi olabilir. Resim 7, DC'ye erişimi kopmuş domaindeki bir sunucuya RDP protokolü ve domain kullanıcı hesabı ile oturum açıldığında oluşturulan güvenlik olay kaydını gösteriyor. Oturum açma tipi "Logon Type" satırından anlaşılıyor. Interaktif oturum ile hafızaya alınan hash bilgileri oturum süresince saklanmaya devam ediyor.Bu nedenle özellikle RDP oturumlarını "Disconnect" ile değil de "Logoff" ile sonlandırmak önemli.
Resim 6
Resim 7
Windows işletim sisteminin yapısı gereği bu saldırı yöntemini tamamen engellemenin mümkün olmadığını aklımızdan çıkarmayarak,yazı boyunca yeri geldiğinde değindiğim önlemleri Microsoft'un önerdiği yöntemlerle birlikte toparlayacak olursak;
- İstemci ve sunucu işletim sistemlerine fiziksel erişimi kısıtlayın. İstemci bilgisayarların CD-ROM,USB gibi arayüzlerden boot edilmesini engelleyecek önlemler alın. Bu arayüzleri fiziksel olarak kapatamıyor ya da kaldıramıyorsanız BIOS'a erişimi de kısıtlamayı ihmal etmeyin.
- Kullanıcılarınıza yönetici yetkisinde hesaplar kullandırmayın
- Servis hesaplarınıza ve planlanmış işleri ( scheduled tasks) çalıştırmak için kullandığınız hesaplara gereğinden fazla yetki vermeyin.
- Active Directory'de geniş yetkili kullanıcı hesapları için "Account is sensitive and cannot be delegated" seçeneğini işaretleyin.Bu özellik parola hash'leri gibi çalınabilen Kerberos token'larının başka bilgisayarlara erişim için kullanılmasını engeller.
- Sunucu ve istemci bilgisayarların lokal yönetici hesaplarına farklı parolalar vermeyi alışkanlık edinin.
- Risk altındaki sunucularınızda domain administrator gibi geniş yetkili kullanıcı hesaplarının oturum açmasını engelleyin
- Sunucularınızda interaktif oturumlar için timeout süreleri kullanın,bu sürelerin sonunda oturumların sonlandırılmasını zorlayın.
- Sunucularınızda ve istemci bilgisayarlarınızda LM hashlerin saklanmasını engelleyin, cache'lenen domain kullanıcı hesapları sayısını azaltın.
- Proxy sunucularınızda ya da firewall'larınızda yetkili hesapların internete erişimini engelleyin.
- Windows firewall'larınızda inbound trafiği engelleyin.
- Domain yöneticisi yetkisine sahip hesaplarınızda bir seferlik parolalar kullanın.
- Kritik sunucularınıza yönetim amaçlı erişimler için izole ve ayrı bilgisayarlar (jump servers) kullanın ve yönetim için network tipi oturumlar (network logon) kullanmaya özen gösterin. Aklınızın bir köşesinde her zaman "mı acaba?" sorusu olsun :) (Bakınız Mitigating Pass The Hash Attacks and Other Credential Theft Techniques sf 41-Tablo 7)
- Ve en önemlisi, işletim sistemi ve kurulu uygulamaların güvenlik güncellemelerini aksatmayın.
Hash'inizi sevin,koruyun çünkü saldırganlar seviyor :)
İlgili Yazılarım
Windows Credential Editor ile Hash Passing - Nass oluyor da oluyor?
Hiç yorum yok:
Yorum Gönder