هش NTLM چیست؟ نگاهی به قلب تپنده امنیت قدیمی ویندوز و چرایی ضرورت حذف آن

مقدمه: گذر از یک میراث امنیتی پرخطر
در دنیای پیچیده امنیت سایبری، برخی فناوری‌ها به دلیل کارایی و امنیت بالا، جایگاه خود را برای دهه‌ها حفظ می‌کنند و برخی دیگر، مانند پروتکل NTLM و قلب تپنده آن، یعنی «هش NTLM»، به میراثی خطرناک تبدیل می‌شوند که اگر به درستی مدیریت نشوند، دروازه‌ای به سوی فاجعه می‌گشایند. برای هر کسب‌وکار و به ویژه برای آژانس‌های طراحی سایت که سرورهای میزبانی و زیرساخت‌های backend را مدیریت می‌کنند، درک این مفاهیم امنیتی قدیمی، اگرچه منسوخ شده، حیاتی است. چرا؟ زیرا نادیده گرفتن آن‌ها می‌تواند به قیمت نفوذ به سرورها و سرقت داده‌های حساس مشتریان تمام شود. این مقاله به شکلی جامع به بررسی هش NTLM، مکانیسم عملکرد آن، آسیب‌پذیری‌های ذاتی و راهکارهای جایگزین مدرن می‌پردازد.

فرایند آسیب پذیری NTLM
فرایند آسیب پذیری NTLM

1. هش NTLM در یک نگاه؛ معادل دیجیتال رمز عبور

هش NTLM (مخفف NT LAN Manager) در بنیادی‌ترین تعریف خود، یک رشته ثابت و یکتا است که از گذراندن رمز عبور کاربر از یک فرآیند رمزنگاری یک‌طرفه (تابع هش) به دست می‌آید. این هش، به عنوان نماینده یا «معادل» رمز عبور عمل می‌کند و هدف اصلی آن، جلوگیری از نیاز به ذخیره‌سازی یا انتقال رمز عبور به صورت متن ساده (Plaintext) است.

فیلسوفی پشت این ایده:
ایده اولیه استفاده از هش، ایده‌ای هوشمندانه بود. سیستم‌ها به جای نگهداری رمز عبورهای حساس، تنها این اثر انگشت دیجیتال (هش) را ذخیره می‌کنند. هنگامی که کاربر رمز عبور خود را وارد می‌کند، سیستم مجدداً همان عملیات هش را انجام می‌دهد و نتیجه را با نسخه ذخیره شده مقایسه می‌کند. اگر مطابقت داشت، هویت کاربر تأیید می‌شود. این مکانیسم، پایه بسیاری از سیستم‌های احراز هویت امروزی است. مشکل از جایی آغاز می‌شود که نحوه پیاده‌سازی این ایده در NTLM، دارای نقص‌های بنیادین است.

2. تشریح فرآیند تولد یک هش NTLM: از رمز عبور تا رشته هگزادسیمال

فرآیند ایجاد هش NTLM، اگرچه برای عصر خود پیشرفته بود، اما با استانداردهای امروزی بسیار ساده و آسیب‌پذیر محسوب می‌شود. این فرآیند کاملاً قطعی است؛ یعنی یک رمز عبور مشخص، همیشه و در هر مکانی، تنها به یک هش NTLM ثابت تبدیل می‌شود.

مراحل تولید هش NTLM به ترتیب:

  1. دریافت ورودی: کاربر رمز عبور خود را وارد می‌کند (مثلاً MySecurePassword!123).
  2. تبدیل به یونیکد: رشته رمز عبور، بلافاصله به فرمت UTF-16 Little Endian تبدیل می‌شود. این تبدیل، کاراکترها را به یک representation باینری استاندارد تبدیل می‌کند تا برای پردازش آماده شود.
  3. اعمال تابع هش MD4: این رشته یونیکد شده، وارد تابع هش رمزنگاری MD4 می‌شود. خروجی این تابع، یک مقدار ۱۲۸ بیتی (۱۶ بایتی) منحصر به فرد است.
  4. ذخیره‌سازی: این مقدار ۱۶ بایتی، برای ذخیره‌سازی و نمایش، به یک رشته ۳۲ کاراکتری هگزادسیمال تبدیل می‌شود. به عنوان مثال، هش NTLM برای رمز عبور Password123 برابر است با 8846F7EAEE8FB117AD06BDD830B7586C.

نقطه ضعف فاجعه‌بار: عدم وجود Salt
مهم‌ترین و خطرناک‌ترین ضعف در این فرآیند، عدم استفاده از Salt است. Salt یک داده تصادفی و منحصر به فرد است که قبل از هش کردن، به رمز عبور هر کاربر اضافه می‌شود. نقش Salt این است که اطمینان حاصل کند حتی اگر دو کاربر رمز عبور یکسانی داشته باشند، هش‌های نهایی آن‌ها کاملاً متفاوت خواهد بود. نبود Salt در NTLM به این معنی است که:

  • تمام کاربرانی که رمز عبور Password123 دارند، هش یکسانی خواهند داشت.
  • مهاجم می‌تواند یک بار رمز عبور را کرک کند و بلافاصله تمام حساب‌های کاربری با آن رمز عبور را شناسایی کند.
  • حمله با استفاده از پیش‌محاسبه (Precomputation) و جداول رنگین‌کمانی (Rainbow Tables) به شدت تسهیل می‌شود.

3. هش NTLM کجا زندگی می‌کند؟ نگاهی به SAM و Syskey

هش‌های NTLM در سیستم‌عامل ویندوز، در یک پایگاه داده امن به نام SAM (Security Account Manager) ذخیره می‌شوند. این فایل که معمولاً در مسیر %SystemRoot%\system32\config\SAM قرار دارد، حاوی نام کاربری، شناسه‌های منحصر به فرد و هش‌های رمز عبور تمام حساب‌های کاربری محلی سیستم است.

حفاظت اولیه: قفل فایل SAM
هنگامی که ویندوز در حال اجراست، فایل SAM به طور کامل قفل است و هیچ فرایند کاربری نمی‌تواند مستقیماً به آن دسترسی خواندن/نوشتن داشته باشد. این یک لایه حفاظتی اولیه در برابر بدافزارهای ساده است.

حفاظت ثانویه: رمزگذاری با Syskey
ویندوز برای افزایش امنیت، هش‌های درون فایل SAM را با استفاده از یک کلید سیستم ۱۲۸ بیتی به نام Syskey رمزگذاری می‌کند. این کلید معمولاً در رجیستری سیستم یا روی یک دیسک فلش خارجی ذخیره می‌شود. بنابراین، آنچه روی دیسک ذخیره می‌شود، نسخه رمزگذاری شده هش‌هاست.

اما مشکل اصلی: هش‌ها در حافظه (RAM) زندگی می‌کنند!
سیستم عامل برای انجام عملیات احراز هویت، نیاز دارد که هش‌ها به شکل اصلی و رمزگشایی‌شده خود (نه رمزگذاری شده با Syskey) در دسترس باشند. این هش‌های اصلی در حافظه رم (در فضای kernel) بارگذاری می‌شوند. اینجاست که ابزارهای پیشرفته هک مانند Mimikatz وارد عمل می‌شوند. Mimikatz می‌تواند با دستیابی به دسترسی سطح administrator/System، حافظه رم را dump کند و هش‌های NTLN اصلی را مستقیماً از آن استخراج نماید. این حمله که به Dumping LSASS Memory معروف است، یکی از متداول‌ترین راه‌های کسب هش‌ها توسط مهاجمان است.

5. هش NTLM چگونه برای احراز هویت استفاده می‌شود؟ رقص چالش و پاسخ

پروتکل NTLM از یک مکانیسم چالش-پاسخ (Challenge-Response) برای احراز هویت استفاده می‌کند. این مکانیسم طوری طراحی شده که از ارسال خود هش روی شبکه جلوگیری کند.

سناریو: یک کلاینت (کاربر) می‌خواهد به یک سرور (مثلاً یک سرور فایل) متصل شود.

۱. مرحله Negotiate (مذاکره):

  • کلاینت به سرور یک درخواست احراز هویت NTLM ارسال می‌کند.

۲. مرحله Challenge (چالش):

  • سرور یک عدد تصادفی ۱۶ بایتی بسیار قوی به نام Nonce یا Challenge تولید می‌کند.
  • این چالش را برای کلاینت می‌فرستد. این عدد هر بار کاملاً تصادفی و متفاوت است.

۳. مرحله Response (پاسخ):

  • این مرحله کلیدی است. کلاینت، چالش دریافتی از سرور را با استفاده از هش NTLM کاربر به عنوان کلید رمزنگاری، رمزگذاری می‌کند.
  • نتیجه این رمزگذاری، که پاسخ (Response) نامیده می‌شود، برای سرور ارسال می‌شود. توجه کنید که خود هش هرگز شبکه را ترک نمی‌کند.

۴. مرحله Verification (تأیید):

  • سرور، پاسخ کلاینت را دریافت می‌کند.
  • سرور نیز یک کپی از هش NTLM کاربر را (از دامنه یا SAM محلی) در اختیار دارد. حالا همان عملیات کلاینت را انجام می‌دهد: چالش اصلی را با هش ذخیره شده، رمزگذاری می‌کند.
  • سرور نتیجه محاسبه خود را با پاسخی که از کلاینت دریافت کرده مقایسه می‌کند.

۵. تصمیم نهایی:

  • اگر هر دو پاسخ دقیقاً یکسان بودند، اثبات کردن کلاینت هش NTLM correct را در اختیار داشته (چون فقط با داشتن آن می‌توانست چالش را به درستی رمزگذاری کند) و احراز هویت موفقیت‌آمیز است.
  • در غیر این صورت، دسترسی رد می‌شود.

6. چرا هش NTLM یک کابوس برای متخصصان امنیت است؟

اگرچه مکانیسم چالش-پاسخ ایده بدی به نظر نمی‌رسد، اما طراحی NTLM آنقدر آسیب‌پذیر است که آن را به یک تهدید جدی تبدیل کرده است.

۱. آسیب‌پذیری ذاتی الگوریتم MD4:
تابع هش MD4 که در سال ۱۹۹۰ طراحی شد، کاملاً منسوخ و شکسته شده است. محاسبه برخورد (یافتن دو ورودی با هش یکسان) در MD4 به قدری سریع و آسان است که از نظر رمزنگاری، غیرقابل اعتماد محسوب می‌شود. سرعت بالا در محاسبه هش MD4 نیز انجام حملات Brute-Force ( آزمون تمام حالت‌های ممکن) و Dictionary (آزمون لیستی از کلمات رایج) را بسیار تسهیل می‌کند.

۲. حملۀ کُشنده Pass-the-Hash (PtH):
این مهم‌ترین و خطرناک‌ترین آسیب‌پذیری مرتبط با NTLM است. در این حمله، مهاجم اصلاً نیازی به کرک کردن هش و پیدا کردن رمز عبور Plaintext ندارد.

  • سناریو: مهاجم از طریق یک آسیب‌پذیری یا مهندسی اجتماعی، به هش NTLM یک کاربر دسترسی پیدا می‌کند (مثلاً با استفاده از Mimikatz از حافظه dump می‌کند).
  • اقدام مهاجم: مهاجم می‌تواند این هش را مستقیماً به ابزارها یا اسکریپت‌های خود (مانند PsExec) تزریق کند و در یک session NTLM جدید، از آن برای احراز هویت بر روی سیستم‌های دیگر در شبکه استفاده کند.
  • نتیجه: سیستم مقصد، این هش را به عنوان proof of identity می‌پذیرد و به مهاجم دسترسی می‌دهد، گویی که رمز عبور واقعی را دارد. این حمله به گسترش Lateral Movement مهاجم در شبکه کمک شایانی می‌کند.

۳. حملات Relay (NTLM Relay):
در این حمله، مهاجم خود را بین کلاینت و سرور قرار می‌دهد (حملۀ Man-in-the-Middle).

  • مهاجم درخواست احراز هویت کلاینت را قطع کرده و آن را به سرور دیگری در شبکه relay می‌کند.
  • اگر کاربر مورد نظر روی سرور دوم دارای دسترسی باشد، مهاجم می‌تواند به آن سرور دسترسی پیدا کند.
  • نسخه‌ی پیشرفته‌تر NTLM (یعنی NTLMv2) تا حدی این حمله را کاهش داده، اما آن را به طور کامل برطرف نکرده است.

۴. عدم وجود Integrity و Confidentiality برای پروتکل:
پروتکل NTLM به خودی خود، مکانیسمی برای محرمانگی ( encryption) یا صحت ( signing) کل session ارتباطی پس از احراز هویت ارائه نمی‌دهد. این باعث می‌شود sessionهای NTLM در معرض استراق سمع و دستکاری قرار بگیرند.

7. روشن کردن ابهامات: هش NTLM در مقابل Net-NTLMv2

این یک نقطه اشتباه رایج است. این دو کاملاً متفاوت هستند:

ویژگیهش NTLM (NTLM Hash)هش Net-NTLMv2 (NTLMv2 Response)
ماهیتیک secret ثابت و همیشگی. معادل رمز عبور.یک response پویا و موقت. حاصل یک محاسبه بر اساس چالش.
نحوه ایجادحاصل هش مستقیم رمز عبور با MD4.حاصل یک محاسبه HMAC-MD5 پیچیده بر روی چالش سرور، چالش کلاینت، timestamp و سایر داده‌ها، با استفاده از هش NTLM به عنوان کلید.
آسیب‌پذیریبسیار آسیب‌پذیر در برابر Pass-the-Hash.در برابر PtH مصون است (چون یک response موقت است). اما در برابر کرک آفلاین آسیب‌پذیر است تا هش NTLM اصلی استخراج شود.
ارتباطاین همان “کلید اصلی” است.این “قفلی” است که با کلید اصلی ساخته شده و فقط برای یک چالش خاص معتبر است.

8. راهکارهای مدرن و بهترین Practices برای یک آژانس طراحی سایت

به عنوان یک آژانس که سرورهای مشتریان را مدیریت می‌کند یا توصیه‌های امنیتی ارائه می‌دهد، وظیفه شما است که این محیط‌ها را امن کنید.

۱. غیرفعال کردن کامل NTLM (اولویت اول):
این تنها راه حل قطعی است. با استفاده از Group Policy در ویندوز سرور، می‌توانید احراز هویت NTLM را در کل شبکه غیرفعال کنید.

  • مسیر Policy: Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options -> Network security: Restrict NTLM: ...
  • قبل از غیرفعال کردن، با استفاده از audit policies لاگ‌های خود را بررسی کنید تا ببینید کدام دستگاه‌ها و برنامه‌ها هنوز از NTLM استفاده می‌کنند.

۲. مهاجرت به پروتکل Kerberos:
پروتکل Kerberos که از ویندوز ۲۰۰۰ به بعد به عنوان پروتکل پیش‌فرض معرفی شد، جایگزین امن و مدرن NTLM است.

  • از بلیت‌های رمزنگاری شده و دارای اعتبار زمانی محدود استفاده می‌کند.
  • در برابر حملات Relay و Pass-the-Hash مصونیت دارد.
  • احراز هویت متقابل (Mutual Authentication) را ارائه می‌دهد.
  • اطمینان حاصل کنید که تمام سیستم‌های شما به دامنه متصل هستند و سرویس‌های شما برای پشتیبانی از Kerberos پیکربندی شده‌اند.

۳. فعال‌سازی Windows Defender Credential Guard:
در سیستم‌های مدرن (Windows 10/11, Server 2016+)، این قابلیت یک game-changer است.

  • Credential Guard از قابلیت‌های Virtualization-Based Security (VBS) برای ایزوله کردن و محافظت از هش‌های NTLM، داده‌های Kerberos و سایر secrets حساس در یک محیط امن استفاده می‌کند.
  • این کار دسترسی toolsی مانند Mimikatz را به این secrets به طور کامل مسدود می‌سازد و حملات Pass-the-Hash را به شدت دشوار می‌کند.

۴. اعمال سیاست‌های رمز عبور قوی و چندعاملی (MFA):
از آنجایی که هدف نهایی مهاجم often often به دست آوردن هش است، با قوی کردن اولین خط دفاعی، شانس او را کاهش دهید.

  • اجرای سیاست‌های رمز عبور پیچیده (طول، complexity).
  • فعال‌سازی احراز هویت چندعاملی (MFA) تا حتی در صورت دزدیده شدن هش، مهاجم نتواند از آن استفاده کند.

۵. نظارت و ممیزی مستمر:
همیشه شبکه خود را برای هرگونه فعالیت احراز هویت NTLM زیر نظر داشته باشید. استفاده از SIEM ها و سیستم های نظارت برای تشخیص هرگونه تلاش برای حملات Pass-the-Hash یا Relay ضروری است.

نتیجه‌گیری: زمان خداحافظی با یک غول قدیمی فرارسیده است

هش NTLM و پروتکل مرتبط با آن، نمونه‌ای کلاسیک از یک فناوری هستند که زمانه از آن عبور کرده است. در حالی که در گذشته یک استاندارد قابل قبول بود، امروزه به یک نقطه ضعف بحرانی در زیرساخت‌های ویندوز تبدیل شده است. برای آژانس‌های طراحی سایت و متخصصان فناوری اطلاعات، درک این آسیب‌پذیری‌ها تنها نیمی از نبرد است. نیمی دیگر، اقدام قاطعانه برای حذف این پروتکل از شبکه و جایگزینی آن با فناوری‌های امن و مدرن مانند Kerberos است. امنیت یک سفر است، نه یک مقصد. و کنار گذاشتن میراث‌های خطرناکی مانند NTLM، یک گام ضروری در این سفر طولانی است. با انجام این کار، نه تنها از سرورهای خود، بلکه از اعتماد مشتریانی که داده‌هایشان را به شما سپرده‌اند، محافظت می‌کنید.

سبد خرید
پیمایش به بالا