کد QR مطلبدریافت لینک صفحه با کد QR

تحلیل نفوذ با استفاده از Windows PowerShell

1 آذر 1396 ساعت 12:59

بسیاری از تحلیلگران می بایست از ویندوز به عنوان پلتفرم اصلی برای تحلیل استفاده کنند، و تنها با PowerShell ، میتوانند.
بسیاری از وظایف روزمره خود را انجام دهند. PowerShell تنها زبانی برای راهبری نیست: می تواند تطبیق الگوی عبارات منظم را انجام دهد، یکپارچگی یا تمامیت نظارت بر شبکه را بررسی کند، رویدادهای امنیتی را تجزیه و تحلیل کند، و تقریباً ابزاری با توانایی نامحدود در سایر کاربردها می باشد. در این مقاله ، تعدادی از این تکنیک ها و قابلیت ها را دقیقتر بررسی می کنیم.



چکیده
شرکت مایکروسافت به طور پیوسته فناوری خود را تکامل داده است و ابزارهایی که برای تحلیل  نفوذ قابل استفاده میباشد ، معرفی کرده است. ابزارهایی مانند فایروال پیشرفته ویندوز و لاگ  رویدادهای مثال هایی از این دست هستند لیکن تمرکز این مقاله بر روی جهشی سریع و روبه جلو است: PowerShell
به گزارش ایتنا، بسیاری از تحلیلگران می بایست از ویندوز به عنوان پلتفرم اصلی برای تحلیل استفاده کنند، و تنها با PowerShell ، میتوانند بسیاری از وظایف روزمره خود را انجام دهند. PowerShell تنها زبانی برای راهبری نیست: میتواند تطبیق الگوی عبارات منظم را انجام دهد، یکپارچگی یا تمامیت نظارت بر شبکه را بررسی کند، رویدادهای امنیتی را تجزیه و تحلیل کند، و تقریباً ابزاری با توانایی نامحدود در سایر کاربردها می باشد. در این مقاله، تعدادی از این تکنیک ها و قابلیت ها را دقیقتر بررسی می کنیم.
 
 گواهینامه طلایی GIAC   پذیرفته شده در 29 may 2014
1- مقدمه
مایکروسافت در اواخر سال  90 در موقعیتی بود که میلنیوم از منظر امنیت مورد توجه نبود.مایکروسافت در سال 2002 تمامی توسعه هایش را بر روی این پلتفرم متوقف نمود، و بیل گیتس طلیعه دوران جدیدی که “محاسبات ایمن و قابل اعتماد”  نامگذاری کرد داد.(کالاهان، 2014)
 
او محاسبات ایمن را اینگونه تعریف نمود: “ محاسباتی دسترس پذیر، قابل اطمینان و امن به همان میزان که سایر خدماتی چون برق ، آب و تلفن می باشند.” این تلاشها مسیری را طی نموده است که مایکروسافت را بزرگترین  سیستم عامل در حال استفاده سمت کاربر بر روی کره زمین ساخته است. به گونه ای که احتمال دارد یک تحلیلگر تشخیص نفوذ از یکی از انواع سیستم های عامل ویندوز استفاده می کند در حالی که سیستم های ویندوز را نیز بررسی می نماید. در گذشته ، ابزارهای مختلفی با تمرکز بر ابزارهای لینوکس برای انجام تحلیل مناسب  دانلود می شدند. مایکروسافت در حال حاضر ابزارهایی مانند      Microsoft Event Viewer  و فایروال ویندوز را فراهم آورده که نیاز به سایر ابزارها را حذف کرده است. از این روست  که تحلیل نفوذ بدون دانلود بسیاری ابزارها امکان پذیر است.
یکی از بهترین ابزارهایی که مایکروسافت ایجاد نموده PowerShell است.  PowerShell زبانی با امکان پشتیبانی از اسکریپت و مملو از ویژگی است که توسط مایکروسافت به عنوان زبان راهبری سیتم بر روی   .NET Frameworkساخته شد.   (تک نت، 2013)
PowerShell قابلیتهای بسیار بیشتری نسبت به پیشینیان خود ارائه می دهد: قابلیت اجرای دستورات   کلاسیک cmd.exe مانند net.exe و netsh.exe و تمام اشیاء درون ساختی کام ، به گونه ای که تمامی اسکریپت های VB به PowerShell ارتقا یابند.
PowerShell به عنوان زبان تحلیل می تواند از قابلیت های راهبری استفاده نماید تا وظایف نظارتی سایر فناوریهای امنیتی مایکروسافت از قبیل فایروال ویندوز مایکروسافت، اکتیو دایرکتوری، و ثبت رویداد ویندوز را اجرایی نماید.
به منظور برخورداری از امتیازات قابلیت نظارت PowerShell ، یک تحلیلگر نیاز به یادگیری اسکریپت نویسی و استفاده از منطق برنامه دارد که در پاورشل  سخت نیست ، اگرچه نکات ظریفی وجود دارد که می تواند پیچیده باشد.
 
2-1 PowerShell: کار کردن در محیط Shell
اولین چیزی که در مورد یک نرم افزار جدید باید یاد گرفت این است که چطور با آن آشنا شویم. در صورتی که سیستم شما حداقل ویندوز 7 حرفه ای باشد (در زمان نوشتن این مقاله، ویندوز 7 یک سیستم حداقلی است)، برنامه PowerShell به صورت پیش فرض بر روی سیستم نصب شده است و از طریق خط فرمان در محیط cmd با تایپ کردن کلمه PowerShell قابل دسترسی است. این موضوع در شکل 1 نشان داده شده است.

شکل 1: محیط برنامه PowerShell
با زدن دستور فوق، پنجره آبی رنگ برنامه PowerShell (مطابق شکل 1) نمایش داده می شود. این محیط بهبود یافته ای است که میکروسافت برای PowerShell تهیه کرده است.


شکل 2: دستور dir در محیط PowerShell
با وارد کردن دستور dir فهرستی بر روی صفحه نمایش داده می شود که با آنچه در محیط قدیمی cmd.exe نشان داده می شود، متفاوت است (شکل 2).

شکل 3: دستور ls در محیط PowerShell
دستور ls نیز خروجی مشابهی دارد. این دستور در واقع نام مستعاری برای دستور cmdlet در Get-ChildUtem در PowerShell است (شکل های 3 و 4).

شکل 4: دستور Get-Alias ls
2-2 تحلیل log با استفاده از PowerShell
راهنمای برنامه PowerShell همانند راهنمای رسمی برنامه PowerShell از میکروسافت
 (Windows PowerShell First Steps, Windows 2013) یا راهنمای PowerShell deep Drive نشان می‌دهد که دستور get-alias cmdlet می‌تواند یک نام مستعار برای هر cmdlet در محیط PowerShell ایجاد کند.
برنامه PowerShell برای نامگذاری دستورات مبتنی بر .net خودش از اسامی دوتایی با ترکیب اسم-فعل استفاده می‌کند. دستور Get-Command نشان می‌دهد که چه cmdlet هایی قابل دسترسی اند.
دستور Get-Help می‌تواند با انتخاب‌های بیشماری، با دستور cmdlet به کار رود.
پس از مروری بر روی cmdlet ها، دستور Select-String بسیار جالب به نظر می‌رسد، خط اول در بخش Description چنین خوانده می‌شود: دستور Select-String متون و الگوهای متنی را در یک رشته حرفی یا در فایل ها جستجو می‌کند. شما می‌توانید از این دستور همانند دستور Grep در یونیکس و یا دستور Findstr در ویندوز استفاده کنید. برای تست این دستور، آن را بر روی فایل های syslog و یک رشته حرفی مشخص، امتحان کنید. به منظور ارزیابی توانایی های PowerShell در مورد تحلیل log ها می توانید چند مثال از syslog های سیسکو را در نشانی زیر دانلود کنید:
https://www.cisco.com/c/en/us/about/security-center/identify-incidents-via-syslog.html
یکی از نشانی های IP در فایل، 192.168.208.63 است و می توان دستور را به صورت زیر به کار برد:
Select-String 192.168.208.63.\CiscoLogFileExample.txt
با وارد کردن دستور بالا، نتایج زیر نمایش داده می‌شود (شکل 5):

شکل 5: دستور Select-String
در شکل 5، خروجی دستور فوق، مشابه خروجی دستور grep در یونیکس است؛ البته با اطلاعات بیشتر. این داده ها در برخی موارد جالب هستند، اما برای یافتن دقیق داده در خط مورد نظر، خروجی فوق باید به دستوری برای یافتن خط مورد نظر هدایت شود (شکل 6).

شکل 6: انتخاب خط توسط دستور Select-String
این دستور نشان می‌دهد که خط شناسایی شده در Select-String Cmdlet با خط مورد نظر برای جستجو مطابقت می‌نماید. برای اینکه ببینیم چطور با تحلیل یک host تعداد زیادی اتصالات ایجاد می شوند، خروجی یک دستور می‌تواند به دستور دیگری مثل Measure-Object هدایت شود (شکل 7).

شکل 7: دستور Select-String برای بررسی line
این دستور می‌تواند شماره داده ها و نیز میانگین، تعداد، حداکثر، حداقل و دیگر مشخصات را به دست آورد. دستور زیر (شکل 8) از دستور خط فرمان Kung-Fu گرفته شده است (ویلیامز 2011). این دستور کلیه آدرس های IP که مشخصاتشان مطابقت دارد را یافته، مقدار آنها را انتخاب کرده، مقادیر منحصر به فرد را یافته و به خروجی می‌فرستد.

شکل 8: دستور Select-String خروجی را sort کرده و تعداد اقلام را می‌دهد.
حذف Measure-object موجب می‌شود کلیه IP  ها به جای نمایش تعداد آنها، نمایش داده شوند (شکل 9). دستور Measure-object باعث می‌شود تعداد IP ها نمایش شمرده شود.
 به جای تعیین اینکه کدام آدرس IP بیشترین ارتباط را داشته، آخرین دستور انتقال یافته به مقدار نظیر شکل 9 تعیین می شود. سپس گروه دستور بر روی یک ریدف به گروهی از همه آدرسهای IP خارج شده مرتب می شود و این اشیاء با استفاده از آرایه ها مرتب می شوند.

شکل9- انتخاب آرایه مرتب سازی واحد
این مرتب سازی آدرسهای IP در یک الگوی نزولی از نظر تعداد به shell ارسال می شود. (شکل 10)
شکل 10- انتخاب آرایه شماره IP ها
با این نوع از تجزیه و تحلیل در یک فایل گزارش، top talkers مشخص می شود. در این قسمت دستور مورد نیاز جهت سهولت دسترسی آورده شده است.

 
 2-3 آنالیز دیواره آتش با PowerShell
یک مخرب برای تحلیل سیستم های ویندوز به سختی گزارش های دیوار آتش ویندوز را درون یک  مخزن مرکزی متمرکز می کند.
برای دیواره آتش پیشرفته یک محل ذخیره سازی گزارش مرکزی می تواند توسط دستور فرمان .net.exe  ، که دستور منطقی PowerShell است، بخشی در .Net و بخشی در مدیریت ویندوز ، تنظیم گردد. اولین گام برای این هدف یافتن محل ذخیره شدن گزارش ها در سیستم ویندوز است.

این دستور می تواند تنظیمات گزارش ها در دیواره آتش ویندوز که در قسمت سیاست گذاری GPO باید فعال شود را جهت تجزیه و تحلیل دریافت نماید.
این دستور نشان می دهد که گزارش دیواره آتش در مسیر %systemroot%\system32\LogFiles\Firewall\pfirewall.log قرار دارد و جهت بازکردن فایل PowerShell نیازمند داشتن سطح دسترسی مدیریتی خواهد بود. اولین گام دریافت دستور فوق درون یک متغییر با استفاده از منطق Script است. خوشبختانه PowerShell یک محیط Script نویسی یکپارچه به نام PowerShell.ise در خود دارد.

شکل 11- گزارش گیر دیواره آتش
سپس دستور بالا را مطابق شکل شماره 11 اجرا نمائید و شماره ارتباط را بدست آورید. اطلاعات زیر مطابق شکل شماره 12 نمایش داده خواهد شد.

شکل 12- تجزیه و تحلیل دیواره آتش
از طریق این اطلاعات، سطح ارتباطها، default gateway و همه ارتباطهای داخلی و خارجی سیستم استخراج می گردد. اکنون برای حل مسئله گزارش­گیری مرکزی لازم است محل ارسال داده بر روی شبکه تشخیص داده شود.
با فرض اینکه او آدرس \\secureshare\logs\ را برگزیده است، تغییر این دستور کار ساده ای می باشد.
جهت ارسال log های این سیستم به share drive  با فرمت زیر : (Data)- (Hostname)-FWLogs.log، شناسه ی log – name یکسانی اجرا می شود.

شکل13- گرفتن log های فایروال

شکل14- ارسال به log file مرکزی
با log file پاک شده (شکل14) انتخاب دیگری از آنچه که می خواستیم و به log file فرستادیم به آسانی صورت می گیرد. یا یک جدول کاری در میان حوزه GPO (دستور cmdlet خواسته شده ) استفاده شده یا جدول کاری بر روی سیستم های بحرانی اجرا شود.
2-4- ماژول های power shell
PowerShell از لحاظ عملکردی بسیار کاراست، اما زمانی که قابلیت اضافه ای لازم باشد ماژول PowerShell و توسعه های عمومی power shell وجود دارند.این ماژول ها نوشته شده اند که قابلیتی را به power shell اضافه کنند و یکQuest  اکتیو دایرکتوری cmdlet توسط نرم افزار Quest(Dell) یک ماژول خیلی مفید است. Cmdlet می تواند در http://www.quest.com/powershell/activeroles-server.aspx دانلود شود. بعد از نصب، Quest اکتیو دایرکتوری shell می تواند از منوی start شروع شود و یا از طریق کد زیر اجرا شود: Add-PSSnapin quest.activeroles.admanagement. این PowerShell snapin اجرا خواهد شد اگر قبلا اضافه نشده باشد(اگر این را دارا باشد، کنسول فقط خروجی یک خطا را دارد)، این بویژه برای یک scripting خوب می باشد. Scriptهای استفاده شده ی این ماژول بسیار خوب میباشند برای مانیتورینگ گروه های امنیتی بحرانی مانند "مدیر ادمین". برای مانیتورینگ یک گروه امنیتی کد زیر را (شکل 15) در بالای script بعد از نصب Quest اکتیو دایرکتوری cmdlets اضافه کنید.


شکل 15- ماژول import
نظارت بر حساب های کاربری "ادمین‌های دامنه" اکنون باید ساده شده باشد. با ساخت متغیرهایی برای هر دو فایل و پایپ کردن دستور Get-QADGroupMember در متغیر $current از طریق فایل خروجی cmdlets برای نیل به حالت عضویت در گروه در مورد حساب کاربری تحت نظارت (شکل 16).

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

شکل 17 – اخطار برای تغییرات ادمین
مرحله بعد تبدیل این اقدام به حالت بازگشتی است. راه‌های زیادی برای این کار وجود دارد، از جمله ساخت برنامه زمان بندی برای وظایف در ویندوز و کد کردن آن در قالب اسکریپت. این کار را میتوان در یک حلقه دنباله دار که یک حلقه while دارد انجام داد (شکل 18). دستور Sleep در پایان می‌گوید 100 ثانیه صبر کن و البته می‌توان بیش از این نیز در فرآیند دخالت نمود (شکل 18).
 

شکل 18 – افزودن دستور sleep
 
اگر گروه‌های بیشتری نیاز به تحلیل داشتند، اسکریپت باید بدان منظور پارامتربندی و کاربردی شود.
 
 
2.4.1 نظارت بر دیگر گروه‌های امنیت
از راه کاربردی کردن دستورات، کد اسکریپت نظارت می‌تواند به شکل‌های مختلفی بکار گرفته شود (شکل 19)
 

شکل 19 – نظارت گروههای امنیت
 
حالا این کد را در خط فرمان اجرا کنید (شکل 19) و با توجه به نیاز , نظارت را شروع کنید
 

 
اسکریپت به صورت سرویس اجرا می شود و نظارت بر روی چندین مورد را ممکن می سازد. چارچوب موجود همچنین با استفاده از سوییچ get-qaduser –locked می تواند برای بررسی اکانتهای قفل شده (Lock Accounts) اجرا شود. با اضافه شدن یک اسکریپت دیگر به دستورات Startup یک برنامه سرویس دهنده  هم کنشی با تمام قابلیت ها ساخته می شود که می تواند برای نظارت استفاده شود.
 
4.2.4 استفاده از PowerShell به عنوان سرویس دهنده ثبت وقایع
 
دانستن اینکه یک دسترسی بسته شده باشد به اندازه ای که چرا این دسترسی بسته شده است مهم نیست. این امر فقط به واسطه بررسی رخدادهای امنیتی میسر می شود و بهترین کد PowerShell برای یررسی این رخدادها از محل مرکزی توسط Rober Sheldon ارائه شده است ( Windows IT Pro Article, 2008). اسکریپت به راستی آنچنان خوب طراحی شده است که به غیر از تغییر اطلاعات SMTP برای ارسال ایمیل نیاز به تغییر دیگری نمی باشد (کد ضمیمه می باشد).
محتوای فایلهای مرجع .txt و .csv برای اینکه چه سیستمهایی نیاز است بر روی آنها نظارت انجام شود و اینکه چه رخدادهای امنیتی از سیستم مورد نیاز است باید تغییر کنند.
اگر مسیر به صورت صحیح در “logmonitor” داده شود و ایمیل صحیحی وارد شود هر بار که یک دسترسی بسته شود ایمیلی که شامل اظلاعات سیستمی و دلیل بسته شدن دسترسی می باشد ارسال می شود.
 
2.4.3  نظارت بر اکتیو دایرکتوری
اکنون این توانایی وجود دارد که بفهمیم چه زمانی گروههای امنیتی تغییر می کنند و چرا حسابهای امنیتی قفل شده اند .لاگهای مربوط به اتصال شبکه را در سراسر دامین بدست آورید و آنها را بوسیله چند فرایند پرداش کنید ، از جمله تطبیق الگوی عبارت های منظم امکان پذیر است .نظارت بر حسابهای کاربری در یک دامین مهم است ولی مهمتر از آن نظارت بر حسابهای لوکال ادمین میتواند بیشتر در معرض تهاجم قرار بگیرد  و این عمل یکی از کارهایی است که یک مهاجم بعد از اینکه از ماشین سوء استفاده کرد انجام می دهد. تکنیک های مشابه در مثال های قبلی می تواند برای شناسایی این فعالیت استفاده شود.
باید یک لیست به روز ا ز سیستمهایی که نیاز دارد تهیه کند که این کار را میتواند بوسیله ابزار the quest active directory cmdlets   در پاورشل ویندوز انجام دهد .که لیستی از سرویسها را در دامین ایجاد میکند و همچنین هشدارها را تنظیم می نماید . (شکل 20)

شکل 20 – کسب سرورها
 
 
این یک سیستم لیست در یک دامنه ایجاد می کند و نیز هشدار را تنظیم می کند

شکل 21 – مانیتور کردن سیستمهای حدف و اضافه AD
 
 
 2.5 نظارت بر گروههای امنیتی محلی
وظیفه بعدی این است که از طریق یک سیستم از راه دور لیستی از مدیران شبکه ها محلی گرفته شود . روش های متعددی وجود دارد، اما یک تکنیک مفید با استفاده از ماژول Active Directory Service Inquiry Object که در سال 2008 در  Microsoft Blog Scripting Guys معرفی شد .تابع زیر با استفاده از Active Directory Service Inquiry Object لیست عضوهایی که در گروه های امنیتی محلی قرار دارند نشان میدهد .
 

شکل 22: بدست آوردن مشخصات کاربران محلی ADSI ( Local User)
با اجرای دستور زیر:
لیستی از کاربران ادمین (Admin) محلی به صورت از راه دور قابل جمع آوری می باشد. بدین ترتیب مشابه منطق قبلی با استفاده از مقایسه خروجی فایل های قدیم و جدید تغییرات حاصل قابل کشف خواهد بود. (شکل23(

شکل23: دستورات(Script)  دریافت و مقایسه شناسه های کاربری ادمین (admin) محلی
زمانی که گروه کاربران ادمین (admin) محلی بر روی سیستمی تحت دامین تغییر می کند, لیست کامل دستورات به شکل ضمیمه شده به Appendix A در قالب نامه مشخص اطلاع رسانی می گردد.  ضمنا سرویس های آغازگر می توانند باعث ایجاد برنامه هایی قابل اجرا در هنگام لود سیستم عامل و یا برنامه های آماده اجرا جهت حفظ وضعیت اجرایی دستورات مانیتورینگ گردد. این قابلیت اطمینان لازم در خصوص اطلاع رسانی اعمال تغییرات بر روی تنظیمات امنیتی گروه ادمین را حاصل نموده و امکان رهگیری زمان و علت اعمال این تغییرات را میسر می سازد.
3.نتیجه گیری
پیش تر از این محیط ویندوز به دلیل نداشتن دستورات و ابزارهای زبانی جامع از دنیای اتوماسیون عقب مانده بود. اما اکنون با ظهور Power Shell این عقب ماندگی تا حدی جبران شده است. PowerShell به عنوان یک زبان مدیریتی دارای قابلیت های فوق العاده به منظور مانیتورینگ و امنیت دستورات اجرایی طراحی شده است. تنها محدودیت موجود در آن دید تحلیلی می باشد.
در این مقاله، نشان داده شده است که چگونه می توان از دستورات پوسته PowerShellبرای تجزیه و تحلیل log ها و سیستم های ویندوز با استفاده از چند cmdlets استفاده کرد و همچنین نحوه ایجاد برخی از monitoring ها که به طور سنتی سیستم های ویندوز فاقد آن هستند بیان گردید. ماژول ها برای گسترش توانایی خود مانند Quest Active Directory cmdlets و برخی از تکنیک های دیگر برای مقایسه تغییرات از یک لحظه به لحظه دیگر نشان داده شد. مانیتورینگ وظیفه بحرانی از میان مانیتورینگ حساب های کاربری domain  امکان پذیر بود. روش متمرکز سازی لاگ های دامنه از فایروال ویندوز به منظور دریافت لاگ های مرتبط  در یک محل جهت تجزیه و تحلیل ارتباطات شبکه می باشد. این جفت شدن با مانیتورینگ سایر لاگ های برای تجزیه و تحلیل و تشخیص حیاتی است. از لحاظ تاریخی، تحلیلگران نفوذ وابسته به ابزارهای شناسایی و تفسیر این نوع اطلاعات هستند، و ابزارهای بسیاری وجود دارد که این نوع مانیتورینگ / تجزیه و تحلیل را انجام دهد. همه آنها گران هستند و برای یک فروشگاه کوچک و متوسط که نیاز به مانیتورینگ این اطلاعات دارد، مایکروسافت ابزارهایی را برای نظارت و استخراج این نوع اطلاعات فراهم کرده است. تنها کار اضافی، تعهد و اراده برای انجام این کار است.

منبع :‌شرکت کاریار ارقام


کد مطلب: 51031

آدرس مطلب: https://www.itna.ir/article/51031/تحلیل-نفوذ-استفاده-windows-powershell

ايتنا
  https://www.itna.ir