در این بخش از دوره آموزشی SEC504 به مبحث احراز هویت در ویندوز می پردازیم و در ادامه نیز احراز هویت در لینوکس را بررسی خواهیم کرد.
احراز هویت در ویندوز
قبل از اینکه به توضیح قابلیت ابزار Cain بپردازیم، ابتدا باید تجزیه و تحلیل کنید که ویندوز چگونه رمزهای عبور را رمزنگاری میکند. تمام ماشینهای ویندوز NT / 2000 / XP / 2003، به صورت پیشفرض، دو مدل رمزنگاری را ارائه میدهند که یکی LANMAN Hashبوده و دیگری NT Hash میباشد. حفاظت از رمز عبور در LANMAN بسیار ضعیف تر از حفاظت NT Hash میباشد.
متاسفانه، به طور پیشفرض، ویندوز NT / 2000 / XP / 2003 همه هشهای LANMAN و قدیمیتر را همراه با هشهای NT ذخیره میکند. این به طور قابل توجهی محافظت از کلمات عبور را تضعیف میکند!
البته باید توجه داشت که ویندوزهای ویستا، 7 ، 8 و 2008 به صورت پیشفرض از LANMAN استفاده نمیکنند.
LM یا Lan Manager یکی از روش های احراز هویت در ویندوز و یکی از فرمتهایی است که مایکروسافت برای ذخیره سازی پسوردهایی با طول کمتر از 14 کاراکتر استفاده میکند. زمانی که پسورد با الگوریتم LM رمزنگاری شود، همه حروف به حروف بزرگ تبدیل میشوند. پسورد مورد نظر اگر کمتر از 14 کاراکتر باشد، ادامه آن با کاراکترهای خالی پر میشود تا به 14 برسد. قبل از رمزنگاری، پسورد به دو قسمت 7 کاراکتری تقسیم میگردد و هر قسمت به صورت جداگانه رمزنگاری شده و سپس آن با هم ترکیب میشوند.
123456QWERTY پسورد اصلی
123456Q = 6BF11E04AFAB197F قسمت اول
WERTY_= F1E9FFDCC75575B15 قسمت دوم
123456QWERTY = 6BF11E04AFAB197F F1E9FFDCC75575B15
اگر پسورد کمتر از 7 کاراکتر باشد قسمت دوم آن همیشه به صورت زیر میباشد:
AAD3B435B51404EE
از آنجاییکه بسیاری از کاربران تنها در پایان گذرواژه خود یک کاراکتر خاص را اضافه میکنند، یک استراتژی مفید با ابزار Cain در مقابل هشهای LANMAN این است که یک حمله ترکیبی را برای شکستن قسمت اول رمز عبور انجام دهیم. سپس برای بخش دوم از آن از حمله Brute Force استفاده نماییم.
نکته: اگر یک کاربر با استفاده از کلید میانبر Alt، کاراکترهای خاص را به رمز عبور خود اضافه کند، مقدار زمان لازم برای شکستن کلمه عبور به طور قابل توجهی افزایش مییابد، که در حال حاضر از چند ماه تا چند سال متغیر است. (برای این کار کافی است تا ابتدا کلید ALT را از صفحه کلید نگه داشته و عدد مورد نظر را تایپ نمایید و سپس کلید ALT را رها نمایید تا کاراکتر ایجاد شود.)
برای مطالعه بیشتر در خصوص کاراکترهایی که با ALTایجاد میشوند، میتوانید به لینک زیر مراجعه نمایید:
http://www.tedmontgomery.com/tutorial/altchrc.html
به گفته مایکروسافت اگر یک رمز عبور حاوی برخی از کاراکترهای ALT باشد، سیستم نمیتواند هش LM آن را ایجاد نماید که این موضوع موجب میشود تا بخش LM کلمه عبور از دید نفوذگر پنهان بماند.
ولی علاوه بر این قبل از ذخیره سازی این عبارات به کاراکترهای بزرگ تبدیل میشوند که زیاد هم مناسب به نظر نمیرسد. البته یکی دیگر از راههایی که موجب حذف هش LM میشود، انتخاب پسورد بیش از 14 کاراکتر میباشد.
جهت کسب اطلاعات بیشتر به لینک زیر مراجعه نمایید
https://technet.microsoft.com/en-us/library/dd277300.aspx#ECAA
در لینک بالا فهرستی از توالی ALT قرار داده شده است که میتواند در کلمه عبور بر روی یک دستگاه ویندوز ایجاد شود. با این حال، چنین رویکردی مطمئنا مناسب نیست و بهترین رویکرد عدم ذخیره سازی هش LM بر روی سیستم میباشد.
یکی دیگر از مکانیزمهای ویندوز برای ذخیره هشهای رمز عبور، هش NT یا NTHASH میباشد، البته این نوع هش بهتر از هش LM بوده، اما هنوز هم عالی نیست. این مکانیزم، رمز عبور را با استفاده از روش MD4 به هش تبدیل میکند که طول آن 16 بایت است و در SAM ذخیره میشود.
بر خلاف LANMAN، حروف کوچک و بزرگ در این هش NT حفظ میشوند. اگر کلمه عبور شما بیشتر از 14 کاراکتر باشد، هش LANMAN یا همان LM برای آن ذخیره نمیشود. لازم به ذکر است یک هش NT تنها برای احراز هویت داخلی یا local authentication استفاده میگردد.
اگر چه هش NT به طور قابل توجهی قویتر از LM میباشد اما هنوز مشکلاتی را دارد و یکی از مهمترین موارد عدم پشتیبانی از تکنیک Salt میباشد که این موضوع احتمال به دست آوردن کلمه عبور اصلی را افزایش میدهد.
Salt in Password
در ساختار Salt علاوه بر کلمه عبور، قبل از انجام عملیات هش، یک عبارت دیگر، به انتها یا ابتدای کلمه عبور اضافه شده و سپس ترکیب این دو به هش تبدیل میگردد. به شکل زیر توجه نمایید.
یکی از ویژگیهای Salt امکان ذخیره سازی هش کاربران با کلمات عبور یکسان و هش متفاوت است. در ادامه به مقایسه ذخیره سازی هش در ویندوز و لینوکس میپردازیم.
دو کاربر با یک رمز عبور مشابه،Alice و Bob را در نظر بگیرید. رمز عبور هر دو apple هستند.
در ویندوز، هر دو آنها با هش یکسان در پایگاه داده SAM ذخیره میشوند.
Alice’s NT hash is 5EBE7DFAO74DA8EE8AEFIFAA2BBDE876, so Windows will store
5EBE7DFAO74DA8EE8AEFIFAA2BBDE876
Bob’s NT hash is 5EBE7DFAO74DA8EE8AEFIFAA2BBDE876, so Windows will store
5EBE7DFAO74DA8EE8AEFIFAA2BBDE876
در واقع همان هش در فایل SAM ذخیره میگردد. بنابراین، با مشاهده اینها میتوانیم بگوییم که یک رمز عبور مشابه برای هر کدام انتخاب شده است و با کشف رمز یکی از آنها، به رمز کاربر دیگر نیز دسترسی خواهیم داشت.
اما در لینوکس به این صورت نیست و در آن از ساختار Salt پشتیبانی میگردد.
همان شرایط را که در مثال قبل بود در نظر بگیرید. اما با توجه به اینکه در لینوکس از Salt پشتیبانی میشود، خروجی هش کلمه عبور هر یک از کاربران با دیگری متفاوت خواهد بود.
در این مثال Salt مربوط به کاربر Alice عبارتست از vqQOOmLr و هش کلمه عبور Salt شده آن عبارتست ازJvrqDBUVi7jYU6Ddr7G2v و عبارتی که در فایل Shadow در لینوکس ذخیره میشود عبارتست از :
$1$vqQOOrnLr$JvrqDBUV17jYU6Ddr7G2v
همچنین Salt مربوط به کاربر Bob عبارتست از rfllm9VVa و هش کلمه عبور Salt شده آن عبارتست از ns4kokyZrfIVtdB12kGE و عبارتی که در فایل Shadow در لینوکس ذخیره میشود عبارتست از :
$1$rfHm9VVa$ns4kOkyZrFl VtUBI2kGE
نکته: اطلاعات کاربران و نامهای کاربری در مسیر /etc/passwd قرار داشته و کلمات عبور نیز به صورت هش شده در مسیر /etc/shadow قرار دارند. عبارت مشخص شده در بالا که به مباحث ذخیره هش در لینوکس اشاره داشت در فایل Shadow میباشند.
در این فایلها هر نام کاربری یا کلمه عبور در یک خط مجزا تعریف میشود و در قسمت رمز عبور با استفاده از علامت دلار ($) از یکدیگر جدا شدهاند.
عبارت $1$ در ابتدای هش نشان دهنده این است که عبارت بعد از آن کلمه عبور است که با الگوریتم MD5 هش شده است. این الگوریتم به صورت پیشفرض در نسخههای لینوکس وجود دارد.
لازم به ذکر است ساختار هش بدین صورت است که پس از عبارت $1$، عبارت Salt و پس از آن یک علامت $ دیگر وجود دارد و بعد از آن هش اصطلاحا Salt شده قرار میگیرد. همچنین در برخی از نسخههای لینوکس این عبارت Salt ممکن است 8 بیتی باشد.
مزایای استفاده از Salt
اگر شما یک پسورد قوی داشته باشید که در آن از ساختار Salt استفاده نشده است (مانند ویندوز)، یک نفوذگر میتوانند با ایجاد یک دیکشنری که شامل هشهای از قبل ایجاد شده به همراه مقدار اصلی کلمه عبور میباشد، کلمه عبور اصلی را استخراج کنند.
ساختار ذخیره سازی دیکشنری در این حمله که اصطلاحا Rain bow Table نامیده میشود به صورت زیر است:
test: FF1683A278E32D58A87155570E2D714C
مقدار اصلی کلمه عبور در مثال بالا test بوده و مقدار هش آن FF1683A278E32D58A87155570E2D714C میباشد که به صورت متوالی قرار گرفته اند. در این دیکشنری هر کلمه عبور به همراه هش آن در یک خط قرار میگیرد.
در این روش، هش مورد نظر که به روشهای مختلف به دست آمده است با هشهای داخل Rain bow Table مقایسه میشود و در صورتی که معادل آن، پیدا شد، عبارت ابتدای هش که همان کلمه عبور است نمایش داده شده و اصطلاحا کلمه عبور کرک میشود.
نکته حائز اهمیت، عدم وجود Salt در مثال بالا بود. اگر از Salt در کلمه عبور استفاده شود، شما به یک دیکشنری دیگر به همین صورت برای Salt نیاز خواهید داشت. که سرعت پیدا نمودن کلمه عبور را چندین برابر کاهش خواهد کرد.
با توجه به اینکه در ویندوز از Salt پشتیبانی نمیشود، به راحتی میتوانید از روش Rain bow Table استفاده کنید. در این حالت نفوذگر میتواند، یک ساختار کوتاه از کلمات عبور و هشهای آنها را در مموری(یک، دوگیگابایت یا بیشتر) بارگذاری کند و اقدام به شکستن یا کرک کلمات عبور نماید.
البته با گسترش دیکشنری و حالات مورد ارزیابی در این حمله، نیاز به یکهارد دیسک (500 گیگابایت یا بیشتر) میباشد که با استفاده از دیکشنریهای ذخیره شده بر روی آن بتوان به کلمه عبور اصلی دست یافت.
در این روش چندین پروژه وجود دارند که به ما برای شکستن پسوردها با روش Rain bow Table کمک میکنند. برای مراجعه به این پروژهها میتوانید به لینکهای زیر مراجعه نمایید:
http://project-rainbowcrack.com
http://www.freerainbowtables.com/
http://www.md5crack.com/
لازم به ذکر است ابزار Cain and Able نیز دارای ویژگی شکستن کلمه عبور با Rain bow Table میباشد.