CodeKitHub
Kodlama Araçları

NTLM Hash Oluşturucu

Son güncelleme:

Bir NTLM hash'i, girdinizin UTF-16LE (karakter başına 2 bayt, little-endian) olarak kodlanıp ardından MD4 mesaj özeti algoritmasından geçirilmesiyle hesaplanır — bu tek geçişli, tuzsuz (salt'sız) işlem, Microsoft Windows'un NT 4.0'dan bu yana parola doğrulayıcılarını saklamak için kullandığı NTLM hash şemasının tamamıdır. Bu araç, bu hesaplamayı tamamen tarayıcınızda, doğrudan JavaScript ile yerel olarak çalıştırır; böylece yazdığınız hiçbir şey bir sunucuya gönderilmez. Meşru güvenlik çalışmaları için vardır — Active Directory hash dışa aktarımlarını doğrulamak, hashcat veya Mimikatz çıktı biçimlerini kontrol etmek ya da CTF ve sızma testi laboratuvarı zorluklarını çözmek için — sahibi olmadığınız veya test etme yetkiniz olmayan hesaplara saldırmak için değil.

NTLM Hash

Bu Araç Nedir?

NTLM (NT LAN Manager), Microsoft'un eski meydan okuma-yanıt (challenge-response) kimlik doğrulama protokolüdür ve bugün hâlâ yerel Windows hesap girişleri için ve birçok Active Directory ortamında yedek yöntem olarak kullanılmaktadır. Yaygın olarak "NTLM hash" olarak anılan parola doğrulayıcısı, Microsoft'un kendi MS-NLMP protokol spesifikasyonunda `MD4(UTF-16-LE(parola))` olarak tanımlanır: parola önce UTF-16 little-endian olarak kodlanır (böylece her karakter, UTF-8'in aksine 2 bayt olur) ve bu bayt dizisi ardından RFC 1320'deki MD4 algoritmasıyla bir kez hash'lenir.

UTF-16LE adımı, NTLM'i sıfırdan yeniden uygularken insanların en çok hata yaptığı ayrıntıdır: bir metnin UTF-16LE baytları yerine UTF-8 baytlarını hash'lemek, görünen metin aynı görünse bile tamamen farklı ve yanlış bir özet üretir. Bu araç doğru şekilde kodlar, dolayısıyla çıktısı Windows'un kendisinin sakladığı değerle ve hashcat (mod 1000) ile Mimikatz gibi araçların beklediği değerle eşleşir.

NTLM, modern parola hash'leme tasarımından önce geldiği için, sonradan özellikle kırma işlemini yavaşlatmak amacıyla eklenen korumaların hiçbirine sahip değildir: kullanıcı başına tuz yoktur, ayarlanabilir bir iş faktörü yoktur ve kasıtlı bir yineleme yoktur. Tek bir MD4 geçişidir, bu da onu hesaplamayı son derece hızlı yapar — eski sistemlerle uyumluluk için elverişli ama kaba kuvvet ve sözlük saldırılarına direnç açısından felaket bir özelliktir.

Neden Kullanmalısınız?

  • Dahili bir denetim aracı için MD4(UTF-16LE(parola)) uygulaması yapması gereken bir Python fonksiyonu yazdın ama döndürdüğü değer beklenenle eşleşmiyor — aynı parolayı buraya yapıştırıp referans değeri karşılaştırıyorsun ve otuz saniyede hatanın UTF-16LE kodlamasında mı yoksa MD4 uygulamasında mı olduğunu anlıyorsun.
  • Yetkilendirilmiş bir sızma testi sırasında bir NTDS.dit dökümünden bir hash çıkardın ve tüm bir kelime listesiyle hashcat çalıştırmadan önce belirli bir aday parolanın tam olarak bu hash'i üretip üretmediğini hızlıca kontrol etmek istiyorsun.
  • Bir güvenlik kursu için NTLM hakkında eğitim materyali hazırlıyorsun ve aynı metnin MD4'ten önce UTF-8 veya UTF-16LE olarak kodlanmasına bağlı olarak nasıl tamamen farklı hash'ler ürettiğini öğrencilere canlı göstermek istiyorsun.
  • Bir meslektaşın, birlikte çözdüğünüz bir CTF laboratuvarında bilinen bir parolaya karşı kontrol etmen için sana bir NTLM hash'i gönderdi — aday parolanın hash'ini burada üretip aldığın hash'le karakter karakter karşılaştırıyorsun.
  • Bir güvenlik denetim raporunda eski bir Active Directory alanının neden savunmasız olduğunu belgelemen gerekiyor — raporundaki kilit noktayı, tuzsuzluğu görsel olarak göstermek için farklı hesaplarda aynı parolanın NTLM hash'ini iki kez üretiyorsun.
  • Hashcat'i mod 1000'de ilk kez kuruyorsun ve gerçek bir saldırı başlatmadan önce güvenilir bir referans değerine ihtiyacın var — hashcat yapılandırmanın bu araçla aynı çıktıyı verdiğini doğrulamak için bilinen "password" test vektörünü kullanıyorsun.

Nasıl Kullanılır

  1. Hash'lemek istediğiniz parola veya metni giriş kutusuna yazın.
  2. "NTLM Hash Oluştur" düğmesine tıklayın.
  3. 32 karakterlik onaltılık NTLM hash'ini okuyun (Windows'un ve çoğu kırma aracının gösterdiği şekilde varsayılan olarak büyük harf çıktı açıktır — küçük harf için kutunun işaretini kaldırın).
  4. Hash'i panonuza kopyalamak için "Kopyala" düğmesine tıklayın.

Örnek

Giriş

password

Çıkış

8846F7EAEE8FB117AD06BDD830B7586C

Bu, iyi bilinen ve bağımsız olarak doğrulanabilir bir test vektörüdür: "password" metninin harfiyen NTLM hash'i her zaman 8846F7EAEE8FB117AD06BDD830B7586C'dir. Bu aracın çıktısını başka herhangi bir doğru NTLM uygulamasıyla karşılaştırabilirsiniz.

NTLM ile modern parola hash'leme karşılaştırması

Aşağıdaki tablo, eski Windows ve Active Directory altyapısına gömülü kalmaya devam etmesine rağmen NTLM'nin yeni sistemleri korumak için neden geçersiz sayıldığını ortaya koyuyor.

ÖzellikNTLMbcrypt / scrypt / Argon2
Alttaki ilkel işlemTek MD4 geçişiAyarlanabilir maliyetle özel olarak tasarlanmış yavaş hash
TuzlamaYok — aynı parolalar her zaman aynı şekilde hash'lenirParola başına benzersiz rastgele tuz
Yineleme / genişletmeYokZamanla artırılabilen, ayarlanabilir iş faktörü
Kaba kuvvete dirençÇok zayıf — modern GPU'larda saniyede milyarlarca tahminHer tahmin için kasıtlı olarak pahalı
Hâlâ nerede bulunurEski Windows kimlik doğrulaması, Active Directory yedeğiYeni uygulamalar, güncel en iyi uygulama

İlgili araçlar

NTLM'e özgü MD4(UTF-16LE) yapısı yerine genel amaçlı bir kriptografik hash'e ihtiyacınız varsa, bu araçlar daha uygun olabilir.

Çoklu Algoritma Hash Oluşturucu · MD5 Oluşturucu · Parola Oluşturucu

NTLM'yi sıfırdan yeniden uygularken yapılan yaygın hatalar

NTLM hash'leri hesaplamak için kendi kodunu yazıyorsan (bir denetim aracı, birim testi için veya protokolü daha iyi anlamak için), neredeyse herkesin düştüğü en yaygın tuzaklar bunlar.

  • MD4 uygulamadan önce parolayı UTF-16LE yerine UTF-8 olarak kodlamak — en yaygın tek hata, çünkü çoğu programlama dili varsayılan dize kodlaması olarak UTF-8 kullanır.
  • UTF-16 kodlaması sırasında yanlış bayt sırası kullanmak (little-endian yerine big-endian) — "A" karakteri 0x00 0x41 değil, 0x41 0x00 olmalıdır.
  • NTLM'i NTLMv2 veya ağ kimlik doğrulamasında kullanılan challenge-response yanıtıyla karıştırmak: bu araç yalnızca parolanın statik NT hash'ini hesaplar, çok aşamalı kimlik doğrulama alışverişinin tamamını değil.
  • Diğer yinelemeli hash şemalarından gelen alışkanlıkla, tek geçiş yerine birden fazla MD4 geçişi uygulamak — NTLM açıkça tek bir geçiş belirtir, yineleme yoktur.

Sıkça Sorulan Sorular

NTLM hash tam olarak nedir?

Windows'un NT LAN Manager kimlik doğrulaması için hesapladığı ve sakladığı parola doğrulayıcısıdır; Microsoft'un MS-NLMP spesifikasyonunda MD4(UTF-16LE(parola)) olarak tanımlanır — parolanın UTF-16 little-endian bayt kodlaması üzerinden tek bir MD4 geçişidir. Her zaman 128 bittir, 32 hex karakter olarak gösterilir.

Neden özellikle UTF-16LE, UTF-8 veya ASCII değil?

Windows, NT tasarlandığından beri metni dahili olarak UTF-16LE olarak saklamaktadır, dolayısıyla parolalar da hash'lenmeden önce bu şekilde kodlanır. 'a' gibi düz ASCII karakterler dahil her karakter 2 bayt olur (little-endian bayt sırası) — sade 0x61 yerine 0x61 0x00 olur. Aynı metnin UTF-8 baytlarını hash'lemek tamamen farklı, yanlış bir sonuç üretir — bu, sıfırdan yazılan NTLM uygulamalarındaki en yaygın hatadır.

NTLM bugün kullanmak için güvenli mi?

Hayır, ve Microsoft'un kendisi mümkün olduğunda Kerberos'a geçilmesini önerir. NTLM'de tuz (salt) yoktur, dolayısıyla aynı parolalar her kullanıcıda ve her sistemde her zaman aynı hash'i üretir; bu da önceden hesaplanmış rainbow-table aramalarını mümkün kılar. Ayrıca yineleme veya iş faktörü de yoktur — tek, tuzsuz bir MD4 geçişidir — bu yüzden modern GPU'lar ele geçirilmiş bir hash'e karşı saniyede milyarlarca tahmin deneyebilir. Esas olarak eski Windows sistemleri ve uygulamalarıyla uyumluluk için hayatta kalmaktadır.

NTLM, bcrypt, scrypt veya Argon2 gibi modern parola hash'lemeden nasıl farklıdır?

Modern parola hash'leyicileri kasıtlı olarak yavaş ve tuzludur: bcrypt, scrypt ve Argon2'nin her biri parola başına benzersiz bir rastgele tuz ve donanım hızlandıkça zamanla artırılabilen ayarlanabilir bir maliyet faktörü ekler; bunun amacı, büyük ölçekte bile kaba kuvvet saldırısını pahalı hale getirmektir. NTLM hiçbirini yapmaz — çevrimdışı kaba kuvvetin pratik bir tehdit modeli olmadığı bir dönemde tasarlanmıştır ve bu belliydi. Tam da bu yüzden NTLM bugün tasarlanan hiçbir şeyi korumak için kullanılmamalıdır; bu aracın gerçek kullanım alanları mevcut Windows altyapısıyla uyumluluk ve yetkilendirilmiş güvenlik testleridir, yeni sistemler kurmak değil.

Bir NTLM hash oluşturucunun meşru kullanımları nelerdir?

Yetkilendirilmiş bir sızma testi veya kimlik bilgisi denetimi sırasında bir SAM veritabanından veya NTDS.dit'ten çekilen hash'leri doğrulamak; kendi araçlarınızın veya betiklerinizin MS-NLMP'yi doğru uyguladığını kontrol etmek; kontrolünüzdeki bir laboratuvarda hashcat (mod 1000) veya Mimikatz biçimi uyumluluk kontrolleri için test hash'leri oluşturmak; ve açıkça NTLM içeren CTF veya eğitim egzersizlerini çözmek. Bu aracı, sahibi olmadığınız veya yazılı test yetkiniz olmayan hesaplara veya sistemlere saldırmak için kullanmak meşru bir kullanım değildir.

Parolam veya girdim bir sunucuya gönderiliyor mu?

Hayır. MD4 hesaplaması tamamen tarayıcınızda JavaScript ile çalışır — MD4 için yerleşik bir tarayıcı API'si olmadığından, bu sayfanın istemci tarafı kodunda doğrudan uygulanmıştır ve yazdığınız hiçbir şey hiçbir yere iletilmez.

MD4(UTF-8(parola)) kullanan kodum neden bu araçla aynı hash'i üretmiyor?

Bu, NTLM'nin en yaygın uygulama hatasıdır: parolayı MD4'e geçirmeden önce UTF-16LE yerine UTF-8 olarak kodlarsan, görüntülenen metin aynı olsa bile tamamen farklı bir özet elde edersin. Kodlama fonksiyonunun MD4'e geçirilmeden önce karakter başına little-endian sırayla 2 bayt ürettiğini doğrula.

NTLM hash'i neden parola uzunluğundan bağımsız olarak her zaman tam 32 onaltılık karakter uzunluğunda?

Çünkü MD4, girdi 3 karakterlik bir parola olsun ya da binlerce karakterlik bir dize olsun, her zaman sabit 128 bitlik bir özet üretir; bu, 32 onaltılık basamak olarak gösterilir (16 bayt × bayt başına 2 basamak). Bu, sadece MD4'ün değil, tüm kriptografik hash fonksiyonlarının bir özelliğidir.

Boş bir dizenin NTLM hash'i de geçerli bir değer midir?

Evet — UTF-16LE olarak kodlanan boş bir dize bile (sıfır bayt üretir) yine de MD4'ten geçirilir ve geçerli 32 karakterlik bir hash üretir. Bu belirli değer, boş parolalı bir hesabın NTLM hash'ine karşılık gelir; güvenlik denetimlerinde sıkça anılan bir ayrıntıdır.

Bu aracı, bilinen bir paroladan hash üretmek yerine elimdeki bir NTLM hash'ini kırmak için kullanabilir miyim?

Hayır, bu araç yalnızca tek yönde çalışır: paroladan hash'e, tersi değil. NTLM kriptografik bir hash'tir ve matematiksel olarak tersine çevrilemez — gerçek kırma işlemi, milyonlarca aday paroladan hash üretip (hashcat gibi araçlarla) hedef hash ile karşılaştırmakla çalışır, fonksiyonu tersine çevirmekle değil.

İlgili Araçlar