آموزش رایگان دوره CEH همگام با سرفصل‌های بین‌المللی – 21
آموزش CEH (هکر کلاه سفید): گذرواژه‌ها چگونه شکسته می‌شوند؟
اگر مهاجمی بتواند به عنوان یک کاربر با دسترسی استاندارد به یک سیستم ویندوزی دسترسی پیدا کند، در مرحله بعد به دنبال ترفیع امتیازها خواهد بود، زیرا یک حساب کاربر استاندارد محدودیت‌های زیادی دارد و هکرها به دنبال یک دسترسی کامل مدیریتی هستند تا بتوانند اعمال خرابکارانه خود را پیاده‌سازی کنند. به‌دست آوردن یک دسترسی کامل مدیریتی کار ساده‌ای نیست، زیرا ابزارهای ترفیع امتیاز باید روی سیستم قربانی اجرا شوند. قربانیان چگونه به هکرها کمک می‌کنند از آسیب‌پذیری درون سامانه‌های آن‌ها استفاده کنند؟

برای مطالعه قسمت قبل آموزش رایگان  دوره CEH اینجا کلیک کنید.

ترفیع امتیاز و بهره‌برداری از آسیب‌پذیری‌ها (Privilege Escalation and Exploiting Vulnerabilities)

اگر مهاجمی بتواند به عنوان یک کاربر با دسترسی استاندارد به یک سیستم ویندوزی دسترسی پیدا کند، در مرحله بعد به دنبال ترفیع امتیازها خواهد بود، زیرا یک حساب کاربر استاندارد محدودیت‌های زیادی دارد و هکرها به دنبال یک دسترسی کامل مدیریتی هستند تا بتوانند اعمال خرابکارانه خود را پیاده‌سازی کنند. به‌دست آوردن یک دسترسی کامل مدیریتی کار ساده‌ای نیست، زیرا ابزارهای ترفیع امتیاز باید روی سیستم قربانی اجرا شوند. قربانیان چگونه به هکرها کمک می‌کنند از آسیب‌پذیری درون سامانه‌های آن‌ها استفاده کنند؟ از جمله تکنیک‌های رایجی که هکرها از آن‌ها استفاده می‌کنند به موارد زیر می‌توان اشاره کرد:

■ بهره‌برداری از سیستم‌عامل یا یک برنامه کاربردی

■ فریب کاربر در اجرای برنامه

■ کپی کردن ابزارهای ترفیع امتیاز در سیستم هدفمند و زمان‌بندی آن‌ها برای اجرا در یک زمان از پیش تعیین شده

■ به‌دست آوردن یک دسترسی تعاملی به سیستم همچون به‌کارگیری Web Services Terminal، Microsoft Remote Desktop، Bomgar  یا در صورت لزوم تزریق کتابخانه پویا

بیشتر برنامه‌های ویندوزی هنگام بارگیری یک فایل DLL خارجی از یک مسیر کاملاً واجد شرایط استفاده نمی‌کنند، به همین دلیل هکرها می‌توانند یک کد مخرب را درون سامانه قربانی وارد کنند.

سوء استفاده از یک برنامه کاربردی

برخی اوقات هکر می‌تواند خوش شانس باشد و از یک برنامه داخلی استفاده کند. به عنوان مثال، هنگامی که کلید Shift را پنج بار یا بیشتر فشار می‌دهید، ویندوز گزینه‌های StickyKeys را برای شما باز می‌کند. کادر محاوره‌ای که به نظر می‌رسد یک رابط برای فعال کردن استفاده از StickyKeys است در حقیقت یک قابلیت کاربردی است که ویندوز برای کمک به کاربران معلول در نظر گرفته است. مشکلی در استفاده از این ویژگی وجود ندارد. تنها مشکل نحوه اجرای آن است. اگر مهاجمی بتواند به سیستمی دسترسی پیدا کند، می‌تواند برنامه sethc.exe با cmd.exe جایگزین کند. پس از تعویض برنامه، قادر است از دستور explorer.exe یا دستوراتی که دسترسی کامل به یک سیستم را فراهم می‌کنند اجرا کند. دلیل این‌که حمله فوق به خوبی پیاده‌سازی می‌شود این است که هکر می‌تواند با استفاده از این روش از سد تمامی مکانیزم‌های امنیتی ویندوز  عبور کند. ویندوز ابتدا بررسی می‌کند که آیا .exe به صورت دیجیتالی امضا شده یا خیر که طبیعی است cmd.exe یک امضای دیجیتالی معتبر دارد. در مرحله بعد، بررسی می‌کند که فایل اجرایی در مسیر (%systemroot%\system32) قرار دارد یا خیر، اگر پاسخ مثبت باشد، نشان می‌دهد که برنامه معتبر بوده و مجوزهای مدیر را دارد. ویندوز سپس فهرست داخلی خود را بررسی می‌کند تا اطمینان حاصل کند فایل فوق  بخشی از سیستم‌عامل ویندوز است که طبیعی است cmd.exe یک فایل معتبر خواهد بود. بنابراین، ویندوز فکر می‌کند که باید ویژگی StickyKeys را راه‌اندازی کند، در حالی shellcode هکر را بارگذاری خواهد کرد که به عنوان LocalSystem اجرا می‌شود.

بازنشانی گذرواژه با استفاده از StickyKeys

بسیاری از اکسپلیوت‌ها می‌توانند بارها و بارها در جهت مخرب استفاده شوند. به عنوان نمونه، در صورت نیاز به تنظیم مجدد گذرواژه ویندوز، می‌توانید از StickyKeys به شکل دیگری استفاده کنید. روش کار به این شکل است که یک سامانه را از روی یک دیسک یا حافظه فلش با قابلیت بوت که سیستم‌عامل کالی لینوکس روی آن نصب شده راه‌اندازی کنید. در مرحله بعد، به هارد دیسک سیستم وارد شده و به پوشه پوشه Windows / System32 بروید. فایل sethc.exe را پیدا کنید و آن‌را به sethc_1.exe تغییر نام دهید و سپس یک کپی از cmd.exe ایجاد کرده و نام آن‌را به sethc.exe تغییر دهید. اکنون کامپیوتر را بدون Kali راه‌اندازی مجدد کنید. هنگامی که سیستم بوت شد و به صفحه لاگین به سیستم وارد شدید، پنج مرتبه کلید Shift را فشار دهید تا پنجره خط فرمان را مشاهده کنید. در حال حاضر سطح دسترسی شما به عنوان مدیر سیستم محلی تعیین شده است. در این مرحله می‌توانید گذرواژه سیستم را از طریق خط فرمان بازنشانی کنید یا یک کاربر با مجوزهای مدیریتی اضافه کنید.

بهره‌برداری از خطای سرریز بافر

سرریز بافر چیست؟ در ساده‌ترین تعریف، لیوانی را تصور کنید که حجم مشخصی از مایعات را قبول می‌کند، زمانی که مایعی را بیش از ظرفیت به لیوان وارد کنید از آن لبریز شده و سر می‌رود. در دنیای کامپیوترها بافرها حکم لیوان را دارند. بافرها فضای محدودی برای انجام کارها ارائه می‌کنند. به عنوان مثال، اگر یک بافر ظرفیت پذیرش 24 کاراکتر را داشته باشد و سپس سعی کنید 32 کاراکتر را در آن وارد کنید با یک مشکل بزرگ روبرو می‌شوید. بافر یک ناحیه ذخیره‌سازی موقت داده‌ها است که طول آن در برنامه‌ای که آن را ایجاد می‌کند یا توسط سیستم‌عامل تعریف می‌شود. در حالت ایده‌آل برنامه‌ها باید به گونه‌ای نوشته شوند که این موضوع را بررسی کنند که هر زمان کاراکترهایی فراتر از ظرفیت بافر به آن وارد شد، برنامه این موضوع را تشخیص داده و مانع انجام این‌کار شود. با این حال‌، این نوع بررسی خطا همیشه در برنامه‌ها انجام نمی‌شود. بررسی خطا چیزی نیست جز بررسی این موضوع که بافرها نوع مشخص و مقدار درستی از اطلاعات را دریافت کنند. به دلایل مختلف‌، برنامه‌ها در برابر سرریز بافر آسیب‌پذیر هستند که اصلی‌ترین علت بروز این مشکل بررسی ضعیف خطاها است. ساده‌ترین راه برای جلوگیری از بروز مشکل سرریز بافر متوقف کردن پذیرش داده‌ها هنگام پر شدن بافر است. این کار با اضافه کردن یک مکانیزم محافظتی قابل انجام است. برنامه‌های نوشته شده به زبان C عمدتا در معرض حملات سرریز بافر قرار دارند، زیرا C دارای توابع بسیاری است که به درستی مرزها را بررسی نمی‌کنند. اگر با زبان C آشنایی دارید، احتمالاً برنامه زیر برای شما ناآشنا نیست:

#include <stdio.h>

int main( void )

{

printf("%s", "Hello, World!");

return 0;

}

قطعه کد بالا یک برنامه Hello World ساده است. این برنامه ممکن است آسیب‌پذیر نباشد، اما اگر دستورات دیگری به آن اضافه شود، راهکاری برای پیشگیری از بروز مشکل سرریز بافر ندارد. از مهم‌ترین توابع زبان سی که در برابر سرریزبافر آسیب‌پذیر هستند به موارد زیر می‌توان اشاره کرد:

Strcpy: محتوای اشاره شده با src را به dest کپی می‌کند و زمانی که به کاراکتر پایان‌دهنده رسید فرآیند کپی را متوقف می‌کند.

Strncpy: به تعداد N بایت از یک رشته به دیگری کپی می‌کند. البته ممکن است مشکل سرریز بافر در dest رخ دهد.

Gets: خطی را از یک استریم استاندارد ورودی stdin خواهند و آن‌را درون یک بافر ذخیره می‌کند.

Strcat: رشته src را به رشته dest اضافه می‌کند.

Memmove: یک بافر را به بافر دیگری انتقال می‌دهد.

Scanf: داده‌ها را از یک ورودی استاندارد (stdin) خوانده ودرون مکان دیگری که توسط آرگومان‌ها مشخص شده ذخیره می‌کند.

Memcpy: num بایت را از بافر src به حافظه تعیین شده در مقصد کپی می‌کند.

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

یک مثال خوب در این زمینه اکسپلیوت Aurora است که برای دستیابی به سیستم‌های آسیب‌پذیر ویندوزی که اینترنت اکسپلورر 6 را اجرا می‌کنند استفاده شد. این سوء استفاده باعث خرابی حافظه در مرورگر اینترنت اکسپلورر می‌شد. این نقص یکی از عوامل پیاده‌سازی حملات Operation Aurora بود که مرورگر کروم و سایر مرورگرها را هدف قرار می‌داد. این حمله با انتشار حجم زیادی از داده‌ها روی حافظه heap انجام می‌شد. در این حالت حجم زیادی از داده‌ها توسط shellcode در heap تزریق می‌شد. هدف از قرار دادن تمام این داده‌ها روی heap پیاده‌سازی یک شرایط ایده‌آل در حافظه بود تا shellcode‌ها اجرا شوند. جاوا نمونه دیگری است که در برخی موارد رد برابر حملات اکسپلیوت آسیب‌پذیر است. یک نمونه در این زمینه حملات watering-hole بود که در سال 2013 میلادی رخ داد. سرریز بافر مبتنی بر پشته در زیرساخت‌های Java Stored Procedure این امکان را به کاربران می‌داد تا کدهای دلخواه را با اتکا بر مجوزهای EXETURE و CONNECT اجرا کنند.

نکته:  برای محافظت در برابر چنین حملاتی بهتر است سیستم‌ها و برنامه‌های کاربردی را به‌روز نگه داشته و وصله‌های ارائه شده برای برنامه‌ها و سیستم‌عامل‌ها را نصب کنید.

جعبه اختصاصی

یكی از اولین فعالیت‌هایی كه یك مهاجم در نظر دارد روی سیستم کاربر اعمال کند به‌دست آوردن سطح دسترسی بالا است. یکی از راه‌های انجام این‌کار حمله به سایر حساب‌های کاربری است. دسترسی به SAM به مهاجمان امکان دسترسی به همه رمزهای عبور را می‌دهد. SAM شامل گذرواژه‌های حساب کاربری است که در فرم هش ذخیره شده‌اند. SYSKEY لایه دوم رمزگذاری 128 بیتی را اضافه می‌کند. پس از فعال شدن این کلید هر بار که سیستم راه‌اندازی می‌شود توسط آن استفاده می‌شود تا داده‌های رمز عبور برای انجام فعالیت‌ها احراز هویت در دسترس قرار گیرند.

مهاجمان می‌توانند SAM را از طریق دسترسی فیزیکی یا منطقی به سرقت برسانند. در صورت دسترسی فیزیکی، SAM را می‌توان از NT ERD سرنام Emergency Repair Disk در مسیر C: \ winnt \ Repair \ sam به‌دست آورد. نگارش‌های جدیدتر ویندوز یک نسخه پشتیبان را در مسیر C: \ winnt \ Repair \ regback \ sam قرار می‌دهند، البته در این زمینهSYSKEY مانع از آن می‌شود تا اطلاعات به راحتی شکسته شوند. اگر دسترسی فیزیکی به سامانه‌ای دارید، می‌توانید به سادگی از ابزارهایی مانند LINNT و NTFSDOS استفاده کنید تا دسترسی در اختیارتان قرار گیرد. NTFSDOS می‌تواند هر پارتیشن NTFS را به عنوان یک درایو منطقی در دسترس قرار دهد. NTFSDOS یک درایور سیستم فایلی شبکه فقط خواندنی برای DOS / Windows است. اگر روی درایو سی‌دی یا حافظه فلش قرار گیرد به یک ابزار دستیابی قدرتمند تبدیل می‌شود. روش دیگر دسترسی به شیوه منطقی است. بانک اطلاعاتی ویندوز SAM یک فرمت باینری است، بنابراین بررسی مستقیم کار ساده‌ای نیست. به همین دلیل هکرها از ابزارهایی مانند PWdump و LCP برای استخراج و شکستن SAM استفاده می‌کنند. قبل از بررسی این برنامه‌ها ، اجازه دهید به بررسی این موضوع بپردازیم که ویندوز چگونه گذرواژه‌ها را رمزگذاری کرده و کاربران را تأیید می‌کند.

انواع تأیید اعتبار در سیستم‌عامل ویندوز

ویندوز از بیشتر پروتکل‌های تأیید هویت پشتیبانی می‌کند از جمله این پروتکل‌ها می‌توان به احراز هویت شبکه، تأیید شماره‌گیری و تأیید اعتبار اینترنت استفاده می‌کند. برای تأیید اعتبار شبکه و کاربران محلی ویندوز از Windows NT Challenge / Response پشتیبانی می‌کند که به‌نام NTLM معروف است. الگوریتم‌های تأیید اعتبار ویندوز با گذشت زمان بهبود یافته‌اند. احراز هویت اصلی LAN Manager (LM) توسط NTLMv2 جایگزین شده است. پروتکل‌های تأیید اعتبار ویندوز شامل موارد زیر است:

■ LM authentication: توسط 95/98 / Me استفاده می‌شود و مبتنی بر DES است.

■ NTLM authentication: توسط NT  سرویس پک 3 استفاده می‌شد و مبتنی بر DES و MD4 است.

■ NTLM v2 authentication: توسط post-NT Service سرویس پک 3 استفاده می‌شد و مبتنی بر MD4 و MD5 است

■ Kerberos: ابتدا در ویندوز 2000 پیاده‌سازی شد و در ادامه توسط سایر سیستم‌عامل‌های ویندوز همچون سرور 2012 و ویندوز 10 به کار گرفته شد. به دلیل سازگاری با نسل‌های قبل، LM ممکن است هنوز هم در برخی شرایط استفاده شود. گذرواژه‌های رمزگذاری شده با LM به راحتی قابل رمزگشایی هستند، زیرا کلمات عبور در حالت بزرگ قرار دارند و در مجموع متشکل از 14 کاراکتر هستند که به دو قسمت 7 کاراکتری تقسیم می‌شوند. فرض کنید الگوریتم LM گذرواژه‌ای را به Dilbert!: رمزگذاری شده است.

1. زمانی‌که این گذرواژه با الگوریتم LM رمزگذاری می‌شود، تمامی حروف این گذرواژه به DILBERT! بزرگ می‌شوند.

2. سپس رمز عبور با کاراکترهای خالی پر شده است تا طول آن 14 نویسه شود: DILBERT!_ _ _ _ _ _

3. قبل از رمزگذاری این گذرواژه، رشته 14 کاراکتر به دو قطعه 7 کاراکتری تقسیم می‌شود: DILBERT و! _ _ _ _ _ _ _

4- هر رشته به‌صورت جداگانه رمزگذاری می‌شود و نتایج با هم جمع می‌شوند.

با آگاهی از نحوه ایجاد رمزهای عبور LM کافی است دو موجودیت رمز عبور زیر را از SAM و PWdump7 استخراج کنید.

Bart: 1001:

B79135112A43EC2AAD3B431404EE:

DEAC47322ABERTE67D9C08A7958A:

Homer: 1002:

B83A4FB0461F70A3B435B51404EE:

GFAWERTB7FFE33E43A2402D8DA37:

دقت کنید که چگونه هر ورودی از دو فیلد کاراکتری جداگانه استخراج شده‌اند. همان‌گونه که مشاهده می‌کنید، نیمه اول از هر بخش به هشی با مقدار 1404EE خاتمه پیدا کرده است. برنامه‌های کرک رمز عبور بر مبنای همین اطلاعات و آگاهی از طول رمزهای عبور اقدام به شکست گذرواژه‌های LM می‌کنند. تنها کاراکتر Dilbert! را در نظر بگیرید. در صورت استخراج، یک بخش هفت کاراکتری واژه Dilbert را نگه می‌دارد، در حالی که دیگری فقط کاراکتر (!) را نگه‌داری می‌کند. کرک کردن 1 کاراکتر یا حتی 7 ساده‌تر از کرک کردن 14 کارکتر است. خوشبختانه، ویندوز به الگوریتم‌های رمز عبور ایمن‌تری سوییچ کرده است. همان‌گونه که در ادامه مشاهده می‌کنید، ویندوز اکنون می‌تواند از شش سطح تأیید اعتبار استفاده کند. استفاده از رمزهای عبور طولانی‌تر بیشتر از 14 کاراکتر و الگوریتم‌های قوی یکی از بهترین دفاع‌ها در برابر نرم‌افزارهای قفل‌شکن گذرواژه‌ها است.

Attribute                 LM          NTLM     NTLMv2

Password              Yes         No           No

Hash                      DES        MD4       MD5

Algorithm              DES        DES        HMAC

نکته: تأیید هویت Kerberos کار خود را با سیستم‌عامل ویندوز 2000 آغاز کرد و به عنوان مکانیزم تایید اعتبار پیش‌فرض برای تمامی سیستم‌عامل‌های ویندوز شناخته می‌شود. کربروس یک شکل قوی از احراز هویت به شمار می‌رود.

در شماره آینده مبحث فوق را ادامه می‌دهیم.

برای مطالعه رایگان تمام بخش‌های دوره CEH  روی لینک زیر کلیک کنید:

آموزش رایگان دوره CEH

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

کتاب الکترونیک +Network راهنمای شبکه‌ها

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

کتاب الکترونیک دوره مقدماتی آموزش پایتون

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟