نگاره‌هایی پیرامون امنیت، شبکه و رمزنگاری

31 مارس 2020

ماه گذشته خبر کشف یک آسیب‌پذیری حیاتی (با شناسه‌ی CVE-2020-0688) در سرور Microsoft Exchange  در بسیاری از رسانه‌های مرتبط با فناوری منتشر شد. این آسیب‌پذیری که به نظر می‌رسد توسط یک محقق ناشناس کشف و اعلام شده، به مهاجم قابلیت اجرای کد از راه دور (RCE) را بر روی سرور Exchange می‌دهد.

در ابتدا شرکت مایکروسافت اعلام کرد که این باگ به دلیل آسیب‌پذیری memory corruption به وجود آمده و می‌تواند با استفاده از ارسال یک ایمیل دستکاری شده به سرور Exchange آسیب‌پذیر، Exploit شود. اما کمی بعد بیانیه‌ی خود را اصلاح کرد و مشخص شد این آسیب‌پذیری به دلیل عدم پیاده‌سازی صحیح ایجاد کلید رمزنگاری منحصر به فرد در زمان نصب سرور Exchange رخ داده است.

این آسیب‌پذیری در کامپوننت ECP (Exchange Control Panel) پیدا شده و ماهیت آن بسیار ساده است. در واقع به‌جای تولید تصادفی کلید در زمان نصب هر سرور، تمام سرورهای Exchange نصب شده از یک مقدار مشابه برای validationKey و decryptionKey در فایل web.config استفاده می‌کنند. این کلیدها برای تامین امنیت ViewState به کار برده می‌شوند. در واقع ViewState یک سری از داده‌های سمت سرور است که برنامه‌های تحت وب ASP.NET آن را با فرمت سریال در سمت کاربر ذخیره می‌کنند. کاربر هم این داده‌ها را با استفاده از پارامتر __VIEWSTATE به سرور ارایه می‌دهد. این موارد را در شکل زیر می‌توانید مشاهده کنید.

یک نکته‌ی قابل توجه این‌ است که برای بهره‌گیری از این آسیب‌پذیری، مهاجم باید احراز هویت شده باشد. به عبارت دیگر مهاجم برای اجرای حمله‌ی خود به اطلاعات احراز هویت حداقل یک کاربر از سازمان قربانی نیاز خواهد داشت. به‌این ترتیب مهاجم احراز هویت شده می‌تواند سرور را به Deserialize کردن داده‌های مخرب موجود در ViewState وادار کند. بنابراین مهاجم با کمک ابزارهای عمومی مانند YSoSerial.net یا ابزاری که در پایان این مقاله لینک دانلود آن ارایه شده است، می‌تواند کدهای .Net دلخواه خود را در سمت سرور به عنوان نرم‌افزار ECP اجرا نماید. در نتیجه این کد مخرب با سطح دسترسی سیستم در سرور اجرا خواهد شد.

به منظور سو استفاده از این آسیب‌پذیری، ابتدا باید مقادیر ViewStateUserKey و VIEWSTATEGENERATOR__ را از یک Session احراز هویت شده استخراج کنیم. مقدار ViewStateUserKey را می‌توان از کوکی ASP.Net_SessionID و از یک فیلد Hidden‌ به دست آورد. همه‌ی این موارد را می‌توان با ابزار استاندارد Developer در Browserها انجام داد.

برای شروع به صفحه‌ی /ecp/default.aspx در سرور مورد نظر رفته و به آن لاگین کنید. حساب کاربری مورد استفاده، نیاز به هیچ دسترسی یا مجوز خاصی ندارد.

برای ادامه، نیاز داریم تا اطلاعات اولیه را جمع‌آوری کنیم. تا این مرحله داده‌های زیر را به دست آورده‌ایم:

validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
validationalg = SHA1

یک روش ساده برای استخراج مقادیر ViewStateUserKey و VIEWSTATEGENERATOR__ این است که تب Network از بخش Dev Tools را باز کنید (با فشردن F12) و یک درخواست مجدد را با فشردن F5 به سرور ارسال کنید. مطابق شکل زیر تنها به یک پاسخ به ‌صورت raw‌ در خصوص درخواست صادر شده به /ecp/default.aspx نیاز خواهیم داشت(مادامی‌که login هستیم).

همان‌گونه که در شکل مشاهده می‌کنید مقدار VIEWSTATEGENERATOR__ برابر است با B97B4E27. این مقدار را با ابزاری که در انتهای این مقاله در اختیار شما قرار داده شده است نیز می‌توانید تولید کنید:

به این نکته توجه داشته باشید که مقدار VIEWSTATEGENERATOR__به اسم فایلی که درخواست ما را در سمت سرور دریافت می‌کند، بستگی دارد. به عنوان مثال اگر نام این فایل default.aspx‌ باشد، مقدار آن همانی است که در بالا ذکر شد (B97B4E27). البته همان‌گونه که در ویدیو مشاهده خواهید کرد، اسم این فایل در طی فرآیند Exploit مشخص خواهد شد. در گام بعد تب Headers‌ را باز کرده و کوکی ASP.NET_SessionId را در هدرهای درخواست پیدا کنید.

در این مثال مقدار آن برابر است با 05ae4b41-51e1-4c3a-9241-6b87b169d663. حال ما تمام اطلاعات اولیه مورد نیاز برای اجرای حمله را در اختیار داریم:

--validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
--validationalg = SHA1
--generator = B97B4E27
--viewstateuserkey = 05ae4b41-51e1-4c3a-9241-6b87b169d663

نکته: در اغلب مقالات خارجی گفته شده که برای Exploit این آسیب‌پذیری نیاز است تا مقدار ViewStateUserKey یا همان  ASP.Net_SessionID را به دست آورده و در Payload قرار دهیم. اما همان‌طور که در ویدیو نیز مشاهده خواهید کرد، ما مقدار ASP.Net_SessionID را خالی خواهیم گذاشت.

تا این‌جا با مقدمات این آسیب‌پذیری آشنا شدیم و زمان آن رسیده است تا آن را به صورت عملی Exploit‌کنیم. بنابراین می‌تونید ادامه‌ی این مطلب را در ویدیوی زیر مشاهده کنید

بسیاری از محققین امنیت در داخل یا خارج از کشور علیرغم آشنایی با اصول این آسیب‌پذیری، برای ارزیابی آسیب‌پذیر بودن سرور Exchange و اجرای موفقیت‌آمیز Exploit‌ خود با چالش‌هایی مواجه هستند. از مهم‌ترین آن‌ها می‌توان به موارد زیر اشاره کرد:

  • عدم دسترسی سرور Exchange‌ به اینترنت
  • اطلاع از آدرس محل نصب Exchange‌در سیستم‌عامل
  • شیوه‌ی بارگذاری فایل‌های حجیم بر روی سرور
  • و برخی چالش‌های دیگر

در این ویدیو از روش منحصر به فردی برای Exploit این آسیب‌پذیری استفاده شده است که تمام چالش‌های ذکر شده را برطرف خواهد کرد. همچنین می‌توانید اسکریپت PowerShell ارزیابی این آسیب‌پذیری که در ویدیو از آن استفاده شده است را می‌توانید از آدرس زیر دریافت کنید:

https://github.com/ravinacademy/CVE-2020-0688

نکته‌ی آخر این‌که همان‌طور که در ویدیو مشاهده خواهید کرد، Exploit این آسیب‌پذیری با استفاده از ابزار Burp Suite انجام شده است. اگر علاقه‌مند به یادگیری تخصصی و عملی این ابزار  (به همراه اجرای عملی تعداد زیادی از حملات وب) هستید، تا هفته‌ی آینده می‌توانید در دوره زیر ثبت نام کنید. همچنین تا ساعت ۲۳ جمعه شب (مورخ ۱۵/۱/۹۹) می‌توانید از ۱۰٪ تخفیف بهره‌مند شوید :

https://bit.ly/3a9pNPn

کد تخفیف: RavinAcademy-10

1 پست نوشته شده
تخصص و تجربم بیشتر در زمینه‌ی تست نفوذ و تیم قرمز بوده و ابزارهای مورد نیازم رو اغلب خودم با Python یا PowerShell‌ می‌نویسم. بنا به پروژه‌هایی که در این سال‌ها کار کردم، تا حدی با زبان‌های دیگه مثل C++، C#، Perl و PHP هم آشنا هستم. علاوه‌بر مواردی که ذکر شد، به Exploit‌نویسی و Fuzzing هم علاقه‌ی زیادی دارم. در حال حاضر در آکادمی راوین به عنوان هم‌بنیان‌گذار و مدرس مشغول فعالیت هستم.
  • به اشتراک بگذارید:
  1. darksector گفت:

    سلام ببخشید بعد از اپلود شل با این ارور موجه شدم بعد از اینکه مشخصات رو وارد کردم:
    You don’t have permission to access /Autodiscover/aaa.aspx on this server.
    چیکار باید کنم؟
    تشکر از اموزش خوبتون