تاریخ امروزپنج شنبه , ۲۱ آذر ۱۳۹۸

مسابقه فتح پرچم FLARE On مرحله اول Memecat Battlestation

مسابقه فتح پرچم FLARE On یک CTF مهندسی معکوس است که توسط شرکت FireEye برگزار می‌شود. این شرکت همانند همانند سال‌های قبل نمونه‌های حرفه‌ای را برای بررسی توان امنیت کاران طراحی کرده بود. این CTFها اغلب شبیه بدافزار هستند و برای کسانی طراحی می‌شوند که علاقه مند به تحلیل بدافزار هستند. مرحله اول این مسابقه Memecat Battlestation نام دارد که در این نوشته تحلیل خواهد شد. برای دریافت فایل‌های این CTF در سال جاری می‌توان به وبسایت FLARE On مراجعه کرد. افرادی که علاقه مند به دریافت فایل‌های سال‌های قبل نیز هستند، می‌توانند از این لینک Github اقدام نمایند.

برسی و شناخت اولیه فایل

اولین گام در بررسی یک فایل اجرایی این است که تشخیص داده شود برای چه سیستم‌عاملی و در چه پلتفرمی طراحی شده است. فایلی که در این قسمت با آن روبه‌رو هستیم یک فایل EXE است که به احتمال زیاد یک فایل اجرایی در Windows است. ولی اینکه تحت چه زبانی نوشته شده مشخص نیست. برای تشخیص این مورد یکی از ابزارهای کارآمد rabin2 از مجموعه نرم‌افزاری Radare2 استفاده می‌شود.

آنچه که از نتایج بدست آمدهrabin2 مهم است، این است که مشخص می‌کند این فایل یک برنامه تحت dotnet 4 برای Windows است که دارای GUI نیز هست.

مهندسی معکوس فایل

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

مهندسی معکوس روند کلی نرم‌افزار

برای اینکه روند کلی نرم‌افزار عیان شود، باید ابتدا اجرا شود. در حین اجرا، اتفاقاتی که در نرم‌افزار می‌افتد به شرح زیر است.

  1. یک صفحه ابتدایی به مدت چند ثانیه نمایش داده می‌شود.
  2. صفحه دوم نرم‌افزار نمایان می‌شود که از کاربر یک کد (Weapon Code) درخواست می‌کند.

برای اینکه این منطق نرم‌افزار دقیق‌تر نمایان شود، باید به کد کلاس Program در نرم‌افزار dnSpy نگاهی انداخت.

آنچه گفته شده بود را می‌توان در کلاس Program مشاهده نمود. کما اینکه دو فرم دیگر نیز بعد از این دو مورد گفته شده موجود است که تا به حال دیده نشده است. تحلیل کلی کلاس Program به این شرح است:

  1. فرم LogoForm را نشان می‌دهد
  2. فرم Stage1Form را نشان می‌دهد
  3. فرم Stage2Form را نشان می‌دهد
  4. خروجی دو فرم قبلی را وارد فرم VictoryForm کرده و آن را نشان می‌دهد.

به زبان ساده‌تر Stage1Form و Stage2Form دو مرحله هستند که خروجی آنها در فرم نهایی یعنی VictoryForm اتاثز گذار است و به نظر می‌رسد پرچم در فرم نهایی باشد. برای دست یابی به Flag باید هر سه فرم تحلیل شود.

فرم دوم: Stage1Form

ببد از دیکامپایل و مهندسی معکوس این فرم به نظر می‌رسد که راه حل این بخش بسیار آسان است. متد FireButton_Click در واقع یک متد Event است که بعد از کلیل بر روی دکمه Fire اجرا می‌شود و بررسی می‌کند که آیا رشته ورودی RAINBOW است یا خیر. در صورت درستی این شرط عملیات شلیک انجام می‌یابد. این بدان معنی است که کلمه RAINBOW کلید این مرحله از CTF است.

اگر در اجرای نرم‌افزار، در فرم دوم کلمه RAINBOW وارد شود عمل شلیک انجام شده و نرم‌افزار به فرم سوم یعنی Stage2Form انتقال می‌یابد.

فرم سوم: Stage2Form

فرم سوم همانند فرم دوم عمل می‌کند، با این تفاوت که در این مورد FireButton_Click یک تابع دیگر به اسم isValidWeaponCode را برای بررسی درستی رشته ورودی فراخوانی می‌کند.

مشخص است که تابع مذکور رشته ورودی را با یک رشته دیگر مقایسه نمی‌کند، بلکه از یک الگوریتم برای بررسی صحت رشته استفاده می‌کند. این الگوریتم روندی به شکل زیر دارد:

  1. رشته ورودی را به آرایه‌ای از کاراکترها تبدیل می‌کند.
  2. عمل XOR بین هرکدام از کاراکترها و کاراکتر A انجام می‌شود.
  3. آرایه حاصل با یک آرایه فرضی مقایسه می‌شود. در صورت برابر بودن TRUE برگردانده می‌شود.

برای شکستن این الگوریتم باید رشته‌ای را بیابیم که بعد از XOR با A آرایه نهایی مورد نظر حاصل می‌شود. یکی از راه‌های موجود Brute Force است. ولی این روش زمان‌بر و غیر فنی است. با مطالعه در مورد XOR این مورد بدست می‌آید که عمل XOR معکوس پذیر است و نکته جالب‌تر این که معکوس عمل XOR همان عمل XOR است. به عبارتی دیگر:

  1. فرض کنید M XOR 'A' = N باشد.
  2. در اینصورت با انجام عمل معکوس ورودی اولیه حاصل می‌شود N XOR 'A' = M.

خلاصه مطلب این‌که، اگر عمل XOR بین آراهی فرضی نهایی و کاراکتر 'A' انجام شود رشته ورودی که باید وارد شود بدست می‌آید. برای اینکار یک کد کوتاه لازم است تا عملیات را ساده‌تر کند.

بعد از اجرای کد نتیجه حاصله عبارت Bagel_Cannon است. بعد از وارد کردن این عبارت در ورودی فرم Stage2Form برنامه به فرم نهایی VictoryForm هدایت می‌شود.

فرم نهایی: VictoryForm

ایمیل نوشته شده در پایین فرم همان پرچم قسمت اول FLARE On است. این عبارت درحین بارگذاری فرم توسط متد VictoryForm_Load در فرم VictoryForm تولید می‌شود.

اشتراک‌گذاری

محقق امنیت مهندسی معکوس برنامه‌نویس

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *