نوید شیرمحمدی
نوید شیرمحمدی
خواندن ۴ دقیقه·۲ سال پیش

هکاتون 1402: چالش Bit

معرفی هکاتون

فروردین امسال (1402) کوئرا یک مسابقه مسابقه فتح پرچم (یا همون CTF) برگزار کرد با نام هکاتون. ثبت‌نام مسابقه تا 23ام اسفندماه 1401 ادامه داشت و شما میتونستید پس از پرداخت هزینه نسبتا سنگین (480)، برای مسابقه و 18 ساعت آموزش (نه چندان با کیفیت) اقدام کنید. در بخش معرفی رویداد این مطالب نوشته شده بود:

رویداد هکاتون امنیت، چهارمین هکاتون برنامه‌نویسی کوئرا است که با موضوع امنیت و در چارچوب طرح شهید بابایی بنیاد ملی نخبگان برگزار می‌شود.
این رویداد شامل یک بخش آموزشی و یک بخش رقابتی است. در ابتدا، موضوعات جذاب و کاربردی حوزه امنیت در ۳ روز و با همراهی اساتید برتر این حوزه برگزار می‌شود و شما مجموعا ۱۸ ساعت آموزش می‌بینید. بعد از آموزش به تیم‌های ۲ الی ۴ نفره تقسیم می‌شوید و در یک مسابقه چالشی به رقابت می‌پردازید. بعد از مسابقه راه‌حل تیم‌ها داوری می‌شود و نفرات برتر مشمول دریافت امتیاز نخبگی بنیاد و همینطور برنده جایزه نقدی مسابقه می‌شوند. علاوه بر این نفرات برتر برای استخدام به شرکت‌های مطرح معرفی خواهند شد. برای مشاهده مراحل و زمان‌بندی رویداد روی این لینک کلیک کنید.
? به تمام شرکت‌کنندگان، گواهی شرکت در رویداد اهدا خواهد شد اما فقط نفرات برتر مسابقه و بعد از داوری راه‌حل‌ها، مشمول دریافت امتیاز نخبگی بنیاد می‌شوند.
⚠️ شرکت در رویداد به صورت فردی است اما پیش از مسابقه، شرکت‌کنندگان به تیم‌های ۲ الی ۴ نفره تقسیم می‌شوند تا به صورت تیمی به رقابت بپردازند. اگر از ابتدا تیم شما مشخص است و دوست دارید با تیم خود در این رویداد شرکت کنید لطفا به صورت جدا جدا ثبت‌نام خود را تکمیل کنید و بعد از ثبت‌نام به ما اطلاع دهید که می‌خواهید در یک تیم باشید.

برای برگزاری رویداد از پلتفرم CTFd استفاده شده بود و تیم کوئرا چند روز قبل از مسابقه، با هدف آشنایی بچه‌ها با پلتفرم یک کوییز آزمایشی (و بدون تاثیر در نتایج مسابقه) قرار داد. سوالات این کوییز از رویداد‌هایی مثل picoctf و uutctf انتخاب شده بودند و به عنوان دست گرمی کمک بزرگی محسوب میشد. در پرانتز این هم بگم که سوالات مسابقه با اختلاف....باااا اختلااااف، سخت‌تر و جذاب‌تر بودند.


و اما چالش Bit

امتیاز: 100

متن سوال: The flag is somewhere in the image.

با توجه به اسم سوال و اینکه یک تصویر با فرمت PNG داریم، اولین حدسم این بود که با پنهان‌نگاری از نوع LSB سروکار دارم. قبل از گفتن راه‌حل یک توضیح کوتاهی درباره پنهان نگاری و LSB باید بگم.

فرض کنید قصد دارید یک داده را برای یک نفر دومی ارسال کنید و یک نفر سومی هم هست که کانال ارتباطی شما و نفر دوم را کنترل می‌کنه. هدف شما اینه که داده مورد نظرتون به نحوی منتقل بشه که نفر سوم متوجه ارسال پیام نشه. دقت کنید اصلا اینکه بفهمه داده شما چی بوده مهم نیست، مساله اینه که متوجه نشه شما داده‌ای ارسال کردید.

پنهان نگاری یا steganography به عملیاتی گفته میشه که سعی میکنه یک داده را در یک پوشه (مثلا یک تصویر، متن یا فایل صوتی) پنهان کنه به شکلی که ناظر خارجی نتونه تشخیص بده داده‌ای در پوشه پنهان شده. یکی از روش‌های پنهان‌نگاری اولیه برای تصویر LSB یا Least Significant Bit نام داره. ایده این روش اینه که در هر پیکسل از تصویر، بیت‌ها کم ارزش (سمت راست) تاثیر کمی در کیفیت تصویر دارند، پس میشه ازشون برای پنهان کردن داده استفاده کرد. مثلا در تصویر PNG که هر پیکسل چهار کانال Red, Blue, Green و Alpha را داره (یا بعضا سه کانال)، اگر مقدار کانال قرمز یکی از پیکسل‌ها 10001001 باشه یا 10001000، کیفیت تصویر از دید انسان فرقی نمیکنه.

نکته مهمی که هست اینه که تصویر با فرمت JPG از این کم اهمیت بودن پیکسل‌ها کم ارزش برای فشرده سازی استفاده میکنه (در کنار تبدیل فوریه و ...) برای همین LSB در تصاویر با فرمت PNG میتونه استفاده بشه.

خلاصه کلام:

در LSB بیت‌ها کم ارزش هر یک از کانال‌های پیکسل‌خای تصویر میتونه برای پنهان‌سازی داده مورد استفاده قرار بگیره.

راه حل

در گام اول بهتره بررسی کنیم که اصلا از LSB استفاده شده یا نه. خوشبختانه به سادگی با ابزار CyberChef میشه این موضوع را بررسی کرد. کافیه تصویر را وارد کنیم و از بلوک View Bit Plane استفاده کنیم (لینک). نتیجه میشه عکس زیر. از الگو سیاه و سفید سمت چپ تصویر خروجی (بخش Output) کاملا واضحه که این بخش از تصویر حاوی اطلاعات مخفیه.

برای استخراج LSB میشه از ابزار CyberChef استفاده کرد. برای تحلیل تصویر کافیه از بلوک‌ها Extract LSB و Strings استفاده کنیم. با این لینک می‌تونید پیکربندی من برای این چالش را بررسی کنید. پرچم در کانال Alpha قرار داره.

پرچم: queraCTF{u$eFu1_bIt_P1aN3}

کمی بیشتر

1. تصویری که در این پست می‌بینید را نمیشه برای پنهان نگاری استفاده کرد چون روی وب تمام تصاویر با فرمت JPG فشرده میشن. تصویر را از این لینک دانلود کنید. اگر هم خواستید میتونید با سرچ image steganography یا LSB Steganography tools ابزارهای این کار را پیدا کنید.

2. ابزار CyberChef را میتونید به صورت رایگان دانلود کنید و روی سیستم خودتون داشته باشید. این ابزار می‌تونه برای حل چالش‌ها کدگذاری (مثل Base64)، رمزنگاری (مثل AES) و کلی کار خفن دیگه مورد استفاده قرار بگیره.

3. همونطور که گفتم LSB یکی از روش‌های پنهان‌نگاری اوله محسوب میشه. برای پیچیده‌تر کردن پنهان‌نگاری میشه با استفاده از کلید، تعدادی از پیکسل‌های خاص را در کل تصویر برای پنهان‌ کردن داده مورد استفاده قرار داد.

ctfهکاتونquera
شاید از این پست‌ها خوشتان بیاید