articelbaner

به راحتی اکتیو دایرکتوری را مدیریت کنید.

دموی آنلاین دانلود

جلوگیری از خطرات امنیتی روزافزون ناشی از پاورشل

این مورد را ارزیابی کنید
(0 رای‌ها)

خواه شما یک ادمین IT باشید یا یک کاربر خانگی ویندوز، شما باید محیط ویندوز خود را قبل از آنکه دیر شود ایمن کنید. در این مقاله، با چگونگی فعال‌سازی لاگ‌گیری پاورشل و برخی ویژگی‌های جدید آن آشنا خواهید شد.

File 107 not found (getFileFromId)

 

مقدمه

همان‌طور که شما ممکن است از وجود دستورات، ویژگی‌های ساختاری و زبانی جدید پاورشل (PowerShell) به وجد بیایید، یک هکر نیز ممکن است به همان اندازه هیجان‌زده شود. هر چه پاورشل قدرت بیشتری را برای شما فراهم کند، در اصل قدرت بیشتری نیز به هکر داده است (در صورتی که هکر کنترل دسترسی پاورشل را به عهده بگیرد). در سال 2015، شرکت امنیتی Carbon Black به همراه شرکت‌های همکارش گزارشی را منتشر کردند که طبق آن 38% از حملات سایبری به وسیله‌ی پاورشل انجام شده بود. سال گذشته، آقای اد اسکودیس (Ed Skoudisمدرس در SANS، هشدار داد که چهارچوب مدیریتی پاورشل به طور کامل مصلح شده است، بدین معنی که گرفتن کنترل آن به معنای گرفتن کنترل تمام سیستم است. در حقیقت، چند سال پیش پروژه‌ای تحت عنوان PowerShell Empire آغاز به کار کرد که قصد آن این بود که نشان دهد که یک هکر چه حملاتی می‌تواند با پاورشل انجام دهد که پس از چند سال معلوم شد که یک هکر تقریبا همه کار با پاورشل می‌تواند انجام دهد! همچنین، در گزارشی دیگر از سیمانتک نشان داده شد که 95% اسکریپت‌های پاورشل موجود مخرب هستند.

 

Borna AD manager

 

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

 

نسخه‌ی کنونی پاورشل

اگر شما یک ادمین شبکه یا یک شبکه کار نباشید، به احتمال زیاد نسخه‌ی کنونی پاورشل ویندوز خود را نمی‌دانید. در این مقاله، سعی شده است تا بگونه‌ای مطالب نوشته شوند که کاربر خانگی و غیرمتخصص نیز بتواند موارد ذکر شده را دنبال کند (برای آشنایی بیشتر با دستورات کاربردی پاورشل به مقاله‌ی هفت دستور ضروری پاورشل که هر مدیر شبکه باید بداند رجوع کنید). برای مشاهده‌ی نسخه‌ی پاورشل، ابتدا پاورشل را باز کنید (در منوی start، عبارت PowerShell را تایپ نمایید). سپس یکی از دستورات get-host یا PSVersionTableرا اجرا نمایید (مانند شکل زیر). همان‌طور که در شکل زیر مشاده می‌کنید در خط دوم از خروجی نسخه یا همان version پاورشل نشان داده شده است.

 

get host

 

نصب پاورشل 5

پاورشل نسخه‌ی 5 علاوه بر دستورات بیشتر، از امکانات امنیتی بیشتری نیز برخواردار است که در صورت پیکربندی مناسب، افزایش امنیت را موجب خواهد شد. برای نصب این نسخه بر روی ویندوز 7 یا Server 2008 R2 شما ابتدا باید موارد زیر را نصب کنید:

.NET Framework 4.5 or higher

Windows Management Framework (WMF) 4.0

برای نصب پاورشل 5 در ویندوز 8 یا سرور 2012، تنها کافی است که مورد اول را نصب کنید. پس از نصب این موارد، شما باید Windows Management Framework (WMF) 5.0 را نصب نمایید. از آنجا که مراحل نصب بسیار ساده می‌باشند و تنها شما باید با جستجوی آنچه می‌خواهید، فایل مورد نظر را از سایت مایکروسافت دانلود کنید و آن را اجرا کنید، از توضیح آن در این مقاله صرف نظر می‌کنم. توجه داشته باشید که پس از نصب هر نسخه از WMF باید سیستم خود را یکبار ریست کنید تا مراحل نصب نهایی شود. اگر در هنگام نصب با خطای"The Service cannot be started, either because it is disabled or because it has no enabled device associate with it" مواجه شدید، دلیل آن به احتمال زیاد آن است که سرویس Windows Update شما غیر فعال است. با فعال کردن آن در قسمت Services احتمالا مشکل شما حل خواهد شد. همچنین توجه داشته باشید که یوزری که با آن نصب را انجام می‌دهید باید دسترسی administrator داشته باشد.

 

ویژگی Module Logging

یکی از موارد امنیتی که خصوصاً به ادمین‌های شبکه کمک می‌کند تا حملات احتمالی را شناسایی و دفع کنند لاگ‌گیری می‌باشد. ویژگی Module Logging در پاورشل که از نسخه 3 به بعد پیاده‌سازی شده است این امکان را فراهم می‌کند تا از جزئیات دستورات اجرا شده در پاورشل مانند مقداردهی اولیه‌ی متغیرها و اجرای دستورات cmdlet لاگ‌گیری کنیم. برای فعال‌سازی این ویژگی ابتدا Group Policy Editor را باز نمایید (در ویندوزهای کلاینتی کافیست در منوی start، عبارت gpedit.msc را تایپ کنید). سپس به Administrative Templates و به ترتیب به Windows Components و Windows PowerShell بروید. در نهایت روی Turn on Module Logging دوبار کلید کنید.

 

اگر شما از ویندوز 7 یا ویندوز Server 2008 R2 استفاده می‌کنید، به احتمال زیاد پوشه‌ی Windows PowerShell را در Group Policy Editor نخواهید یافت. دلیل آن هم این است که در نسخه‌های قدیمی ویندوز چنین Policy وجود خارجی نداشت. برای فعال‌سازی این Policy، فایل Administrative templates for Windows 10 را دانلود و در محل دلخواه خود نصب کنید. سپس فایل powershellexecutionpolicy.admx را از پوشه‌ی نصب شده به پوشه‌ی C:\Windows\PolicyDefinitions انتقال داده و سپس فایل powershellexecutionpolicy.adml را از پوشه‌ی en-US در محل نصب به پوشه‌ی \C:\Windows\PolicyDefinitions\en-US انتقال دهید.

 

حال در Policy مربوط به Turn on Module Logging، گزینه‌ی Enabled را انتخاب نمایید. به منظور آنکه از تمام دستورات وارد شده در پاورشل لاگ بردارید روی دکمه‌ی Show کلیک کرده و عبارت * را به لیست اضافه کنید. شما در اینجا می‌توانید نام چندین دستور cmdlet را وارد کنید تا تنها لاگ از آن دستورات برداشته شود.

 

GPO Settings PowerShell Turn On Module Logging

 

پس از ریست کردن سیستم، از تمامی دستورات پاورشل لاگ برداشته خواهد شد و این لاگ‌ها در Event Viewer قابل مشاهده خواهند بود. در این قسمت، اغلب دستوراتی که به این روش لاگ شده‌اند دارای Event ID با شماره 4103 می‌باشند. برای مشاهده‌ی این لاگ‌ها، در Event Viewer به قسمت Applications و سپس Service Logs و بعد به Microsoft و به ترتیب به Windows و PowerShell و در نهایت Operational بروید.

 

PowerShell Event Log

 

ویژگی Script Block Logging

این ویژگی از تمامی بلاک‌های کد پاورشل که اجرا می‌شود لاگ برمی‌دارد. بنابراین تمامی محتوای کدی که یک هکر اجرا کرده است را خواهید دید. این ویژگی از اکثر کدهایی که در جریان اجرا de-obfuscate می‌شوند نیز لاگ برمی‌دارد. این کدها شامل کدهایی است که توسط XOR، Base64، encryption، ROT13 و غیره obfuscate شده باشد. این ویژگی اما خروجی‌های ناشی از اجرای دستورات را لاگ برداری نمی‌کند و در مجموع از Module Logging مقدار حجم کمتری لاگ تولید می‌کند. در Event Viewer، این لاگ‌ها با ID به شماره 4104 مشخص می‌شوند. همچنین در صورت فعال‌سازی، لاگ‌هایی با شماره 4105 و 4106 نیز ایجاد خواهند شد که به ترتیب آغاز و پایان اجرای یک بلاک از دستورات پاورشل را نشان می‌دهند.

 

Borna AD manager

 

این ویژگی نیز به سادگی در Group Policy Editor قابل پیکربندی می‌باشد. بدین منظور در Group Policy Editor به Administrative Templates و سپس به Windows Components و Windows PowerShell رفته و روی Turn on PowerShell Script Block Logging دوبار کلیک نمایید.

 

GPO Settings PowerShell Turn On PowerShell Script Block Logging

 

توجه داشته باشید که این ویژگی مختص پاورشل 5 است و در نسخه‌های قبلی وجود ندارد. در Event Viewer، logging level لاگ‌های تولید شده توسط این ویژگی، اغلب از نوع information و verbose می‌باشند. با این وجود، لاگ‌هایی که دارای دستورات مشکوک هستند توسط خود سیستم از نوع warning لاگ برداری می‌شوند که شما می‌توانید با فیلتر کردن آنها از وقوع حملات احتمالی مطلع شوید.

 

ویژگی System-wide transcript

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

 

به منظور فعال‌سازی transcript logging، ابتدا Group Policy Editor را باز کرده، به Administrative Templates رفته و سپس به Windows Components و Windows PowerShell رفته و روی Turn on PowerShell Transcription دوبار کلیک نمایید. حال روی Enabled کلیک نموده و محل ذخیره‌سازی فایل‌های transcript را وارد نمایید. توجه داشته باشید که در این روش لاگ درون Event Viewer ذخیره نمی‌شود و در محلی که شما در این قسمت مشخص می‌کنید ذخیره می‌شود. توصیه می‌شود که از یک پوشه‌ی share به عنوان مسیر استفاده کنید تا در صورتی که هکر کنترل سیستم را به دست گرفت نتواند فایل‌های transcript را پاک کند. اگر مسیر ذخیره‌سازی را خالی بگذارید، فایل‌های transcript به طور پیش‌فرض در پوشه‌ی document کاربر ذخیره می‌شود.

 

به طور کلی، همان‌طور که دیدید هر یک از این روش‌های محدودیت‌هایی در لاگ‌گیری دارند. به همین دلیل، برای آنکه هیچ فعالیتی بدون لاگ‌گیری انجام نشود، توصیه می‌شود که تمام این ویژگی‌ها فعال شوند.

 

ویژگی Constrained PowerShell

مرحله‌ی بعدی در جلوگیری از حملات هکرها به وسیله‌ی پاورشل، محدود کردن دستوراتی است که می‌توان در پاورشل اجرا کرد. پاورشل چندین مد دارد که به آنها language mode می‌گویند (برای آشنایی با این مدها اینجا را بخوانید). به طور پیش‌فرض، مقدار language mode برابر با Full Language است که بر اساس آن شما می‌توانید تمام دستورات PowerShell را اجرا نمایید. برای مشاهده‌ی مقدار فعلی language mode دستور زیر را در پاورشل اجرا نمایید:

$executionContext.SessionState.LanguageMode

معمولاً توصیه می‌شود که language mode را برابر با Constrained Language قرار دهید تا تنها امکان اجرای دستورات پایه‌ای در PowerShell وجود داشته باشد. این مد امکان اجرای بسیاری از ویژگی‌های پیشرفته پاورشل را به کاربر نخواهد داد (مانند Add-Type cmdlet، دسترسی مستقیم به متدها و اشیاء Net.، اجرای APIهای WIN32 و غیره) که اغلب در کدهای مخرب مورد استفاده قرار می‌گیرد. توجه داشته باشید که بسیاری از دستورات PowerShell کماکان قابل اجرا هستند و بیشتر محدودیت‌ها شامل دستوراتی می‌شود که اغلب فعالیت هکرها را محدود می‌کند.

 

ساده‌ترین روش برای تنظیم Language mode آن است که یک environmental variable به نام PSLockdownPolicy__ ایجاد کرده و مقدار آن را برابر با 4 بگذارید (اگر با نحوه‌ی انجام این کار آشنایی ندارید اینجا کلیک کنید). اما این بهترین روش نیست خصوصاً اگر محیط دامینی دارید. از پاورشل 5 به بعد امکان تنظیم language mode به وسیله‌ی Group Policy و با استفاده از AppLocker وجود دارد. ایمن‌ترین روش تنظیم AppLocker در حالت Allow است. تنها ایراد این روش در آن است که "ادمین" می‌تواند با غیرفعال کردن سرویس APPIDSvc و یا تغییر مجدد Language mode تاثیر آن را خنثی کند. برای آشنایی با نحوه‌ی انجام این کار به این مقاله سر بزنید.

 

ویژگی Antimalware Scan Interface

در ویندوز 10، ویژگی جدیدی اضافه شده است که به آن Antimalware Scan Interface یا AMSI می‌گویند و به راهکارهای ضدبدافزار (antimalware) این امکان را می‌دهد تا در صورت پشتیبانی از AMSI بتوانند به صورت پویا محتوای فایل‌های اسکریپت در حال اجرا یا دستورات وارد شده در پاورشل را بررسی کنند. همچنین، AMSI امکان بررسی کدهایی که دانلود شده و در حافظه قرار داده شده‌اند تا اجرا شوند را نیز در اختیار ضد بدافزار قرار می‌دهد تا آنها را بررسی کند. در صورتی که راهکار ضدبدافزار، مورد مشکوکی را یافت نکرد یک سیگنال OK بازگشت داده می‌شود تا اجرای دستورات ادامه پیدا کند. در غیر این صورت ادامه‌ی اجرای کدها متوقف خواهد شد. ابزار Windows Defender در ویندوز 10 از AMSI پشتیبانی می‌کند. بنابراین، ارتقاء سیستم عامل به ویندوز 10 می‌تواند از لحاظ امنیتی بسیار موثر باشد. یکی از برترین ویژگی‌های AMSI این است که حتی کدهایی که به شدت obfuscate شده‌اند نیز نمی‌توانند از راهکار ضدبدافزار پنهان بمانند به این دلیل که به هر حال این کدها برای اجرا نیاز به این دارند که از حالت obfuscate خارج شوند و به دلیل نوع تعامل AMSI با راهکار ضدبدافزار، تمام این کدها نهایتا توسط ضدبدافزار چک خواهند شد.

 

غیرفعال کردن PowerShell

با توجه به اینکه پاورشل یک نقطه‌ی ورودی برای آغاز حمله‌ی هکرها فراهم می‌کند، شما شاید از خود بپرسید که چرا نباید آن را به طور کامل غیرفعال کرد. این مسئله خصوصاً برای کاربران عادی ویندوز که بر خلاف ادمین‌های شبکه از PowerShell استفاده نمی‌کنند جدی‌تر است. به طور کلی، از نظر امنیتی همواره توصیه می‌شود که cmd، vbscript، پاورشل و به طور کلی زبان‌های برنامه‌نویسی یا اسکریپت‌نویسی برای کاربران غیر ادمین غیرفعال شود. برای آنکه درک کنید که چقدر راحت می‌توان حمله‌ای را از پاورشل بر روی سیستم ایمن نشده آغاز کرد، کافی است عبارت "PowerShell Shellcode Injection" را در گوگل سرچ کنید. اما، به هر حال غیرفعال کردن کامل این ابزارها برای ادمین‌ها و مدیران IT بسیار دست و پا گیر است.

 

Borna AD manager

 

یکی از دلایلی که از پاورشل در سازمان‌ها استفاده می‌شود، قدرت آن در گزارش‌گیری از اکتیو دایرکتوری است. برای مثال، در بسیاری از سازمان‌ها، به برخی مدیران که دانش کامل در رابطه با PowerShell ندارند، اسکریپت‌های پاورشلی داده می‌شود تا گزارشاتی از اکتیو دایرکتوری بگیرند (برای مثال به مقاله‌ی چگونه کاربران اکتیو دایرکتوری را اکسپورت کنیم مراجعه کنید). این معضل تنها محدود به کاربردهای مرتبط با اکتیودایرکتوری نیست، بلکه اکتیو دایرکتوری به عنوان یک نمونه‌ی خاص برای مدیران و ادمین‌های شبکه بسیار ملموس‌تر است. سوال این جاست که چگونه می‌توان پارادوکس بین غیرفعال‌سازی کامل پاورشل و در عین حال فراهم کردن اسکریپت پاورشل برای مدیران را حل کرد؟ اگر شما ادمین شبکه هستید، باید با احتیاط و دقت کامل تنظیمات Group Policy را به گونه‌ای انجام دهید که پاورشل برای تمام کاربران غیرفعال باشد و تنها دسترسی محدود به آنهایی که نیاز به اجرای اسکریپت دارند بدهید. اگر شما تخصص کامل برای امن‌سازی و تعیین دقیق دسترسی‌های پاورشل را ندارید، می‌توانید پاورشل را به طور کامل غیرفعال کنید و به جای اجرای اسکریپت از یک راهکار جانبی مانند نرم‌افزار مدیریت اکتیودایرکتوری برنا استفاده نمایید که این نرم‌افزارها قابلیت به مراتب بیشتری به شما خواهند داد، از جمله: پورتال کاربران، اتوماسیون فرایندها، گردش‌کار در اکتیودایرکتوری و غیره.

خواندن 1733 دفعه