در این بخش از دوره SEC504 از موسسه SANS شما با ساختار ذخیره سازی حسابها و کلمات عبور در یونیکس و همچنین ابزار John the Ripper آشنا خواهید شد.
ابراز John the Ripper
ابزار Cain یک ابزار آسان و نسبتا سریع است که توضیحات لازم در بخش پیشین بیانگر این موضوع بود. در ادامه یکی از سریعترین ابزارهای متن باز به منظور شکستن کلمات عبور را به شما معرفی مینماییم. که این ابزار John the ripper میباشد.
یکی از قابلیتهای مهم ابزار John the ripper، پشتیبانی از پلتفرمهای مختلفی است که شما میتوانید آن را هم بر روی سیستمعاملهای ویندوز و هم لینوکس و یونیکس با معماریهای مختلف اجرا نمایید. این قابلیت نفوذگر را قادر میسازد تا John را بر روی چندین سیستم اجرا نموده و برای شکستن کلمات عبور از منابع این سیستمها استفاده نماید.
برای استفاده از John شما باید فایل مربوط به کلمات عبور را به عنوان ورودی به این ابزار بدهید. اگر سیستم یونیکس بوده و بدون فایل Shadow میباشد تنها به فایل /etc/passwd نیاز میباشد و اگر کلمات عبور در یک فایل دیگر ذخیره میشود شما نیاز به دسترسی root داشته و باید هر دو فایل را یعنی هم /etc/passwd و هم /etc/shadow را به صورت ترکیب شده به John بدهید.
برای ترکیب این دو شما میتوانید از دستور زیر استفاده نمایید.
unshadow /etc/passwd /etc/shadow > combined
در صورتی که قصد شکستن کلمات عبور ویندوز را داشته باشید، کافی است تا خروجی ابزارهایی مانند pwdump یا fgdump را در قالب یک فایل متنی ذخیره نموده و آن را در اختیار ابزار john قرار دهید.
ساختار ذخیره سازی حسابها و کلمات عبور در یونیکس
بر روی ماشینهای یونیکسی، اطلاعات حسابها در فایل /etc/passwd ذخیره میشود که اطلاعات هر کاربر در یک خط مجزا ذخیره میگردد. هر خط شامل 7 بخش مجزا میباشد که در ادامه به آنها اشاره میکنیم. در زیر مثالی از یک خط مربوط به این فایل را مشاهده مینمایید:
smith:*:100:100:Fred Q. Smith:/home/smith:/usr/bin/sh
ساختار بخشهای مربوط به این خط به شکل زیر است:
login name:encrypted password:UID Number:Default GID:GECOS Info:Home Dir:Login shell
login name: در این بخش نام کاربری قرار میگیرد.
encrypted password: در این بخش کلمه عبور به صورت رمز شده قرار میگیرد. البته اگر کلمه عبور در فایل /etc/shadow قرار داشته باشد در این قسمت شما با علاماتی مانند * یا x یا !! مواجه میشوید. لازم به ذکر است عبارت x به معنی ذخیره کلمه عبور در فایل Shadow و عبارت * نشان دهنده غیرفعال بودن حساب کاربری است.
UID Number: در این بخش شناسه کاربری نمایش داده میشود و مشخص میکند که کاربر به چه بخشهایی از فایل سیستم دسترسی دارد.
Default GID: شناسه گروه پیشفرض مربوط به کاربر است.
GECOS Info: این بخش جهت ذخیره مشخصات فردی کاربران مانند نام کامل، شماره تماس، شماره اتاق و غیره میباشد که مخفف General Electric Comprehensive Operating Supervisor میباشد.
Home Dir: در این بخش، پوشه اصلی کاربر که هنگام ورود در آن قرار دارد را مشخص مینماید.
Login shell: در این بخش برنامهای که بعد از ورود کاربر اجرا میشود مشخص میشود و معمولا /bin/sh میباشد. البته اگر قصد اجازه ورود کاربر به سیستم را نداشته باشیم میتوانیم از /sbin/nologin استفاده کنیم.
برخی از سیستمهای یونیکسی یا لینوکسی که فایل Shadow را پشتیبانی مینمایند، کلمات عبور را در این فایل قرار میدهند. فایل /etc/shadow تنها برای کاربر با UID صفر یا همان کاربر root قابل دسترس میباشد. قالب فایل Shadow در لینوکس به صورت زیر بوده که بخشهای آن را در ادامه توضیح خواهیم داد:
login name:encrypted password:Date of last pw change:Min pw age in days:Max password age in days:Advance days to warn user of pw change:Days after pw expires to disable account:Account expiration date : Reserved
login name: این بخش حاوی نام کاربری است.
encrypted password: در این بخش هش کلمه عبور ذخیره میشود.
Date of last pw change: آخرین زمانی که کلمه عبور تغییر نموده است را نمایش میدهد.
Min pw age in days: کمترین زمانی که برای تغییر کلمه عبور لازم است را نشان میدهد.
Max password age in days: بیشترین زمانی که یک کلمه عبور تنظیم شده و بعد از آن باید تغییر نماید.
Advance days to warn user of pw change: تعداد روزهایی که سیستم به کاربر هشدار میدهد مبنی بر اینکه زمان تغییر کلمه عبور فرارسیده است.
Days after pw expires to disable account: این فیلد به سیستم میگوید که چند روز بعد از انقضای زمان تغییر کلمه عبور، حساب باید غیر فعال شود.
Account expiration date: در این بخش تعداد روزهایی که از اول ژانویه سال 1970 سپری شده تا اکانت غیر فعال شود، (سال 1970 مبدا تاریخی لینوکس برای محاسبه زمان است.) مشخص میگردد.
Reserved: این بخش برای مصارف آینده رزرو شده است.
مدهای کارکرد ابزار john
ابزاز John در چهار حالت مختلف کار میکند و اقدام به شکستن کلمات عبور مینماید که هر کدام از آنها با روش مختلفی این کار را انجام میدهند. John با اولین حالت شروع نموده و بعد به حالت دوم و به همین ترتیب پیش میرود تا زمانی که تمامیکلمات عبور هش شده را پیدا نماید.
این چهار حالت شامل Single Crack Mode، Wordlist Mode، Incremental Mode و External Mode میباشند.
در حالت Single Crack Mode، ابزار John با استفاده از فیلدهای نام حساب و اطلاعات GECOS، شروع به حدس رمز عبور میکند و سپس ترکیبات مختلفی از آن را به منظور حدس رمز عبور ایجاد میکند.
در حالت Wordlist Mode، ابزار John به یک دیکشنری از کلمات عبور متکی میباشد. سپس از تکنیکهای ترکیبی برای تغییر عبارتهای موجود در دیکشنری استفاده میکند تا بتواند کلمه عبور را کشف کند.
در مرحله بعدی ابزار John به حالت Incremental یا افزایشی میرود تا تمام ترکیبات کاراکترهای ممکن را برای پیدا کردن کلمه عبور حدس بزند. در واقع این بخش همان حمله Brute Force را انجام میدهد. البته همانطور که در مباحث پیشین خدمتتان عرض کردیم، حمله Brute Force موفقیت آمیز خواهد بود ولی زمانی بسیار زیادی باید صرف شود تا کلمه عبور پیدا شود.
حالت آخر که External Mode میباشد، اختیاری است. در این حالت ابزار John از فرمولها و توابع خود برای حدس کلمه عبور استفاده نکرده و به جای آن از برنامه جداگانه دیگری استفاده میکند. ابزار John این قابلیت را دارد که به صورت ماژولار کار کند و اگر شما میتوانید یک ابزار بهتری نسبت به John برای شکستن کلمات عبور ایجاد کنید، این امکان برای شما با استفاده از حالت External Mode امکان پذیر میباشد.
در هنگام شکستن کلمه عبور، شما باید نوع رمزنگاری مربوط به آن کلمه عبور را مشخص نمایید که در غیر اینصورت، شکستن آن امکان پذیر نخواهد بود. برای این مشکل، ویژگی autosense به شما کمک خواهد کرد. ابزار John این ویژگی را پشتیبانی مینماید. همچنین ابزار John از فرمتهای زیر پشتیبانی مینماید:
Standard and double-length DES
BSDI’s extended DES
Free3SD’s MD5
OpenBSDs Blowfish
Windows LANMAN
البته با نصب وصلههای مربوط به John نوع NT و NTLM نیز پشتیبانی میشود.
نکته: پس از اینکه با استفاده ابزار John عملیات شکستن کلمه عبور را انجام دادید، کلمات عبور شکسته شده در صفحه نمایش داده شده و در یک فایل با نام John.pot ذخیره میگردند. اگر از ابزار John برای شکستن کلمات عبور استفاده میکنید باید پس از اتمام کار فایل john.pot را از روی سیستم حذف نمایید، در غیر این صورت، کلمات عبور شکسته شده میتواند در معرض خطر و افشا باشند.
نکته: هر بار که یک تست نفوذ انجام میدهید، حتما به دنبال فایل john.pot باشید، چراکه امکان دارد یک بازرس امنیتی یا یک تست نفوذگر یا حتی هکر، این فایل را بر جای گذاشته باشد. این اطلاعات میتواند بسیار مفید واقع شود.
روشهای مقابله با شکستن کلمات عبور در یونیکس
نکاتی که در مورد مقابله با شکستن کلمات عبور در ویندوز به آن اشاره شد، در این جا نیز صادق است که برخی از آنها عبارتند از:
• ایجاد یک سیاست برای کلمات عبور
• محافظت فیزیکی از تجهیزات و عدم دسترسی فیزیکی به دستگاههای یونیکسی
• اطمینان از قوی بودن کلمات عبور
• استفاده از فایل Shadow برای کلمات عبور
• استفاده از روشهای مختلف احراز هویت مانند توکن و ….
• استفاده از روش PAM یا Pluggable authentication module برای احراز هویت
روش PAM
Pluggable Authentication Modules در لینوکس، BSD، Solaris و HP-UX برای احراز هویت سیستم مورد استفاده قرار میگیرد. با استفاده از آن میتوان احراز هویت دستگاه را به یک سرور RADIUS، Kerberos و یا احراز هویت بیومتریک پیوند داد.
در واقع PAM فرایند Authorization پویایی را برای برنامههای کاربردی و سرویسها در لینوکس فراهم میکند. در توزیعهای لینوکسی یک کتابخانه مرکزی به نام PAM برای استفاده برنامههای کاربردی و سرویس به منظور مجاز شناسی و احراز هویت به کار میرود.
به طور مثال سرویس SSH میتواند از PAM به منظور احراز هویت استفاده کند و در صورتی که بیش از 3 بار ورود ناموفق داشته باشیم، دیگر اجازه دسترسی داده نشود. با PAM مدیران سیستم قادر به استفاده و اعمال سیاستهای احراز هویت به صورت متمرکز برای کلیه برنامههای کاربردی و سرویسها هستند.
فارغ از این موارد شما میتوانید با استفاده از PAM کاربران را مجبور به استفاده از کلمات عبور پیچیده نمایید. همچنین Solar Designer که ابزار John the Ripper را وی ایجاد نموده است، یک ماژول PAM را برای سیستمعاملهای لینوکس، Solaris و FreeBSD طراحی نموده است که از انتخاب کلمات عبور قابل حدس برای کاربران جلوگیری مینماید.
این ابزار با نام passwdqc از طریق لینک زیر قابل دسترسی میباشد: