چند وقت پیش نوشتاری در ارتباط با Blacklist کردن پسوردها در Active Directory نوشتیم. داخل این پست میخوایم مراحل پیکربندی ابتدایی این سرویس رو با هم چک بکنیم. پیشنهاد میکنیم ابتدا مقاله قبلی رو مطالعه کنید.
اگر بخواهیم شرح کوتاهی در ارتباط با مشکلی که در سرویسهای احرازهویت Active Directory وجود داشت مطرح کنیم، این بود که، حتی اگر از Policy های پیشفرض استفاده و پیکربندی میشد، کاربران سازمان بسیاری از موارد را رعایت نمیکردند. برای مثال از پسوردهایی با آسیبپذیری بالا استفاده میکنند. پس هکرها با استفاده از انواع حملات Brute-force سعی در شناسایی این پسوردها میکنند. این خلاصهای از متن قبلی بود.
در این مقاله اقداماتی به شرح زیر است:
- شرح کلی سرویس Lithnet
- نصب سرویس Lithnet
- پیکربندی ابتدایی سرویس
- اعمال سرویس توسط Policy
- Command های ابتدایی
شرح کلی سرویس Lithnet :
این سرویس در واقع یک Application Extension میباشد که بر روی سرور AD نصب میشود و از یک دیتابیس (به صورت پیشفرض خالی است) و Policy های تعریف شده مخصوص به خودش فرآیند Blacklist کردن پسوردها را انجام میدهد.
سرویس مورد بررسی پسوردهای فعلی موجود را شناسایی نمیکند و فقط با توجه به دادههایی که در دیتابیس آن Import میشود امکان بررسی پسوردهایی که قرار است وارد سیستم شود شناسایی و اقدامات مورد نظر را انجام می دهد.
در این جا دو سوال مطرح میشود:
- آیا دیتابیس این سرویس میتواند منبع خوبی برای حملات باشد؟
جواب این سوال بله است. پیشنهاد ما برای جلوگیری از این اتفاق استفاده از سرویس Bit locker وهمچنین اگر دیتابیس خارج از سرور مورد نظر بود از طریق یک شبکه کاملا محلی که هر نوع ارتباط به جز سرور AD به آن مسدود شده باشد. نوع ارتباط نیز بهتر است Tunnel و رمزنگاری شده باشد.
- اگر بیش از یک سرور Active Directory در سازمان وجود داشته باشد یا به عبارت بهتر Additional در سازمان باشد فرایند پیادهسازی به چه شکل است؟
قبل از هرچیزی باید به این نکته اشاره شود که برای پیادهسازی کامل این سرویس در سازمان، باید بر روی تمام سرویسهای AD که قابلیت Write کردن در آنها وجود دارد پیادهسازی شود. درگام بعد برای پیادهسازی این سرویس برای بیش از یک سرور 2 روش وجود دارد:
- هر سرور از دیتابیس مخصوص به خودش استفاده کند:
- برای سازمانهایی که چند سایت مختلف دارند و جهت جلوگیری از تاثیر مشکلات ارتباطی بر سرویس پیشنهاد میشود.
- Single Point of Failure وجود نداشته باشد.
- نگهداری و Sync آن باید به صورت دستی انجام شود (البته با Script نویسی و استفاده از سرویسهای Sync بین درایوها میتوانیم این فرایند را به صورت خودکار انجام دهیم).
- از یک دیتابیس مرکزی استفاده شود:
- برای سازمانهایی که دارای یک سایت هستند و یا ارتباطات بین سایتهای مختلف آنها دارای Uptime 100% است، پیشنهاد میشود ( منظور از Uptime 100% آن است که دارای لینکهای Backup باشند و قطعی ارتباط بسیار کم است).
- مشکلات Sync داده وجود ندارد.
یکی دیگر از نکات مثبت این سرویس که در مقاله قبلی نیز به آن اشاره شده است لاگ کردن تمامی فرآیندها در Event Viewer است.
بررسیهای تئوری به پایان رسید، اگر نکتهای وجود دارد که نیاز به پاسخگویی بود لطفا در قسمت نظرات مطرح شود.
- نصب سرویس Lithnet :
جهت نصب سرویس مورد نظر میتوانید برنامه نصبی را از GitHub دانلود کنید.
فرایند نصب سرویس بسیار ساده است و پس از اجرا فایل .msi مراحل زیر را طی کنیم.
Next => Accept License Agreement => Next => Custom Setup
در این بخش میتوانید ماژولهای متفاوت را انتخاب و در صورت نیاز فعال کنید.
به منظور فعال کردن سرویس اصلی که” فیلتر کردن پسورد” است باید ماژول زیر نصب شود:
Enable Password Filtering On Computer
به منظور فعال کردن قسمت Command line برای مدیریت استفاده میشود.
Power-Shell module
Policy هایی که باید بر سیستم اعمال شود نصب میکند
Group Policy Templates
(در صورتی که برای اولین بار است که سرویس را نصب میکند تمامی موارد باید نصب شود.)
Next => IN Configure the Store (Database file)
مسیری که میخواهید میتوانید به فایلها بدهید. در این مسیر فایلهای دیتابیس ذخیره میشود. لازم به ذکر است دیتابیس در این سرویس به صورت فایلهای Text است.
Next => Install => Finish
بعد از این مراحل نصب سرویس انجام میشود.
- پیکربندی ابتدایی سرویس :
پس از انجام مراحل نصب، کار زیادی برای پیکربندی نیاز نیست و فقط باید Hash پسوردها و یا پسوردها را به صورت Clear-text وارد دیتابیس شود.
فایلهای پسورد میتواند توسط Script خودتان تولید شود و یا میتوان آن را از اینترنت دانلود کرد یکی از این لینکها جهت دانلود است. (ورژن “NTLM Ordered by hash”)
بعد از دانلود فایل پسوردها باید از حالت Compress شده خارج کنیم (اگر فایل اشاره شده دانلود شود حجم آن 6 الی 7 گیگ در حالت Compress است و بعد از باز شدن فایل حجم حدودا 20 گیگ است) و Power-Shell با دسترسی Administrator اجرا شود.دستورات زیربه ترتیب برای Import دیتاها به سرویس مورد نظر اجرا شود.
Import-Module LithnetPasswordProtection
Open-Store '<DATABASEPATH>'
Import-CompromisedPasswordHashes -Filename <PASSWORD TEXT FILE PATH>
2 نکته در این قسمت باید رعایت شود:
- در قسمت Open-Store باید مسیر دیتابیس که در قسمت نصب مشخص شده است وارد شود( عموما پیشنهاد میشود این مسیر در درایو C نباشد)
- در قسمت Import-CompromisedPasswordHashes باید مسیر فایل پسوردها که از حالت Compress خارج شده است وارد شود
بعد از اجرا دستورات حدودا Import آن 40 دقیقه زمان نیازمند دارد. البته بستگی به CPU سیستم نیز دارد.
- اعمال سرویس توسط Policy :
پس از انجام مراحل بالا مهمترین کار اعمال آن به Client ها میباشد که با Policy قابل انجام است و نیازی به نصب هیچ نوع Agent ندارد. برای انجام این کار باید وارد Group Policy Management شوید وPolicyهای مسیر زیر را در یکی از Policy های موجود یا جدید پیکربندی کنیم.
برای دیدن Policy های Lithnet وارد مسیر زیر شوید:
Computer Configuration\Policy\Administrative Templates\Lithnet\Password Protection for Active Directory\Default Policy
لیست Policyهایی که در مسیر بالا مشاهده میکند تقریبا Policyهای پیشفرض را پوشش میدهد ولی پیشنهاد میشود در صورت استفاده از Policyهای پیشفرض آنها را تغییر ندهید و اجزا لیست مورد نظر را به آن اضافه کنید.
برخی از حالتهای انتخاب Password Policy:
- انتخاب یک Regular Expression جهت تایید Password.
- انتخاب یک Regular Expression جهت رد Password.
- رعایت حداقل موارد سفارشیسازی شده برای Password.
- بررسی Password با دیتابیس.
- عدم امکان ثبت Password که حاوی اسم کاربر باشد (این مورد در پیشفرضها نیز وجود دارد).
- در آخر شاید بهترین قابلیت که وجود دارد نرمال کرده Password میباشد:
منظور از نرمال کردن Password یعنی اگر شما بخواید پسورد V@h@g123 انتخاب کنید کاری که انجام میدهد آن است که @ را به a تبدیل میکند و بعد از آن شروع به بررسی Password میکند. در واقع Password بالا به Vahag123 تبدیل میشود که Vahag جزو نام کاربری من هست و Password تایید نمیشود.
اگر به هرعلتی Password تایید نشود در Event Viewer سه خط لاگ ثبت میشود.که به ترتیب به شرح زیر است:
خط 1= درخواست تغییر پسورد ثبت شد.
خط2=درخواست تغییر پسورد رد شد
خط3=علت رد پسورد
برای شروع پیشنهاد میشود Policy های زیر فعال شود.
Reject passwords found in the compromised store
Reject normalized passwords found in thee compromised password store
Reject passwords that contain the user’s account name
- Command های ابتدایی :
تمامی دستورات زیر باید در Power-Shell اجرا شود:
- برای اضافه کردن یک Password به دیتابیس از دستور زیر استفاده میشود:
Add‐CompromisedPassword
نمونه دستور به صورت زیر است:
Add-CompromisedPassword -Value "password"
- برای تست یک Password برای کاربر و پیدا کرده وضعیت تایید و عدم تایید و علت عدم تایید آن از دستور زیر استفاده می شود:
Get‐PasswordFilterResult
نمونه دستور به صورت زیر است:
Get-PasswordFilterResult -Password "password" -Username "test-user" -Fullname "John Test"
- جهت پاک کردن یک Password از دیتابیس از دستور زیر استفاده میشود:
Remove-CompromisedPassword
نمونه دستور به صورت زیر است:
Remove-CompromisedPassword -Value "password"
- در صورت نیاز به ورود Password های Hash شده از یک فایل خاص از دستور زیر استفاده میشود:
Import-CompromisedPasswordHashes
نمونه دستور به صورت زیر است:
Import-CompromisedPasswordHashes -Filename "D:\password-protection\pwned-passwords-ntlm-ordered-by-hash.txt"
مفهوم دیگری به نام Banned Word وجود دارد که در واقع کلمات مورد نظر شما را به لیست نرمالسازی اضافه میکند. لیستی از دستورات آن به شرح زیر است:
- به منظور اضافه کردن یک Banned Word به دیتابیس:
Add‐BannedWord
نمونه دستور به صورت زیر است:
Add-BannedWord -Value "password"
- تست یک Banned Word با دیتابیس:
Test‐IsBannedWord
نمونه دستور به صورت زیر است:
Test-IsBannedWord -Value password
- جهت Import یک سری Banned Word ها از یک فایل خاص:
Import‐BannedWords
نمونه دستور به صورت زیر است:
Import-BannedWords -Filename "D:\password-protection\english-dictionary.txt"