14 KiB
دربارهی چالشهای CTF
تعریف کلی: CTF (Capture The Flag) (به فارسی: پرچم را تصاحب کن) یک نوع مسابقه امنیت سایبری است که در آن شرکتکنندگان (تیمها یا افراد) مهارتهای خود را در یافتن و بهرهبرداری از آسیبپذیریها، تحلیل سیستمها، رمزگشایی و حل مسائل پیچیده امنیت اطلاعات به چالش میکشند. 💻🕵️♀️
هدف اصلی:
هدف اصلی در CTF پیدا کردن "فلگ" (Flag) است. فلگ معمولاً یک رشته متنی خاص (مانند flag{this_is_your_flag}
) است که در یک مکان پنهان (مثلاً در یک فایل، دیتابیس، یا خروجی یک برنامه آسیبپذیر) قرار دارد. با یافتن و وارد کردن این فلگ در سیستم مسابقه، تیم امتیاز کسب میکند.
دو نوع رایج CTF:
- رایجترین نوع: Jeopardy (ژئوپاردی)
- چالشها به صورت مستقل و در دستهبندیهای مختلف (مانند مهندسی معکوس، رمزنگاری، وب، فارنزیک) با امتیازات متفاوت ارائه میشوند.
- شرکتکنندگان هر چالشی را که میخواهند انتخاب کرده و فلگ آن را پیدا میکنند.
- پیچیدهتر و دینامیکتر: Attack-Defense (حمله-دفاع)
- هر تیم یک سرور (یا مجموعهای از سرویسها) را در اختیار دارد که باید از آن در برابر حملات تیمهای دیگر دفاع کند و همزمان به سرورهای حریف حمله کرده و فلگهای آنها را به دست آورد.
- این نوع CTF مهارتهای دفاعی و تهاجمی را همزمان میسنجد.
چرا CTF؟
- یادگیری و تمرین مهارتهای امنیت سایبری در محیطی عملی و کنترلشده.
- شناسایی و جذب استعدادها در حوزه امنیت.
- افزایش آگاهی نسبت به آسیبپذیریهای رایج و تکنیکهای نفوذ. به طور خلاصه، CTF یک ورزش ذهنی هیجانانگیز در دنیای سایبری است که به شما کمک میکند مهارتهای عملی خود را در امنیت اطلاعات بهبود ببخشید. 🧠🛡️
دستهبندیهای رایج چالشها در CTF (سبک Jeopardy):
در مسابقات CTF با فرمت Jeopardy، چالشها معمولاً به دستهبندیهای مختلفی تقسیم میشوند تا تیمها بتوانند بر اساس تخصص خود، چالشها را انتخاب کنند. این دستهبندیها میتوانند کمی متفاوت باشند، اما رایجترین آنها عبارتند از:
-
مهندسی معکوس (Reversing):
- بررسی و تحلیل کدهای کامپایلشده (مانند فایلهای اجرایی EXE، ELF) برای درک عملکرد آنها، کشف آسیبپذیریها یا استخراج اطلاعات پنهان (مثل رمزها یا فلگها).
- ابزارهای مورد استفاده: دیاسامبلرها (مثل IDA Pro، Ghidra، Radare2)، دیباگرها (مثل GDB, x64dbg).
-
رمزنگاری (Cryptography):
- شکستن الگوریتمهای رمزنگاری، تحلیل پروتکلهای رمزنگاری، یا پیدا کردن ضعفها در پیادهسازی آنها برای رمزگشایی دادهها و یافتن فلگ.
- شامل تحلیل الگوهای رمز، کلیدهای ضعیف، یا اشکالات منطقی در سیستمهای رمزنگاری.
-
وب (Web Exploitation):
- پیدا کردن و بهرهبرداری از آسیبپذیریهای موجود در برنامههای تحت وب (مانند SQL Injection, Cross-Site Scripting (XSS), File Inclusion, Authentication Bypass) برای دسترسی به اطلاعات یا اجرای کد.
-
فارنزیک (Forensics):
- تحلیل شواهد دیجیتال (مثل تصاویر دیسک، فایلهای حافظه، ترافیک شبکه، فایلهای سیستمی) برای بازسازی وقایع، شناسایی فعالیتهای مخرب یا استخراج اطلاعات پنهان.
-
باینری اکسپلویت یا PWN (Binary Exploitation / Pwning):
- پیدا کردن و بهرهبرداری از آسیبپذیریها در برنامههای بومی (native binaries) مانند سرریز بافر (Buffer Overflow)، فرمت استرینگ (Format String) یا use-after-free برای کنترل جریان اجرای برنامه و دستیابی به Shell یا اجرای کد دلخواه.
-
استگانوگرافی (Steganography):
- پیدا کردن اطلاعات پنهانشده در فایلهای رسانهای (تصاویر، صدا، ویدئو) یا سایر فرمتهای فایل، جایی که دادهها به گونهای مخفی شدهاند که حضور آنها آشکار نباشد.
-
عمومی یا متفرقه (General Skills / Misc):
- شامل طیف گستردهای از چالشهاست که در دستهبندیهای دیگر قرار نمیگیرند، مانند چالشهای مربوط به لینوکس، اسکریپتنویسی، اوزینت (OSINT)، یا حل معماهای منطقی.
-
شبکه (Networking):
- تحلیل ترافیک شبکه (بستههای کپچر شده با Wireshark)، پروتکلهای شبکه، و پیدا کردن آسیبپذیریها یا اطلاعات پنهان در ارتباطات شبکه.
-
سیستم عاملها/کانفینگ (OS/Config):
- چالشهای مربوط به پیکربندیهای سیستم عامل، دسترسی به فایلها، مجوزها، یا بهرهبرداری از تنظیمات نادرست در سیستمها.
توضیحات چالش: Bamboo Fox: Better Than Assembly
این چالش 500 امتیاز داشت و در دستهبندی مهندسی معکوس (Reversing) در سبک CTF از نوع Jeopardy قرار میگرفت. نکته: منظور از Jeopardy در مسابقات CTF (Capture The Flag)، یک قالب (format) خاص برای ارائه و حل چالشهاست. یا به طور خلاصه، وقتی میگوییم یک چالش در سبک CTF از نوع Jeopardy است، یعنی شما با یک سوال یا مسئله مستقل روبرو هستید که باید آن را حل کنید تا فلگ مربوطه را پیدا کرده و امتیاز کسب کنید.
مسیر حل چالش
قدم اول: اسکن کردن فایل
ابزار ClamAV (Clam AntiVirus) یک موتور آنتیویروس متنباز و رایگان است که به طور گسترده برای شناسایی تروجانها، ویروسها، بدافزارها و سایر تهدیدات مخرب استفاده میشود. این نرمافزار به ویژه در سرورهای ایمیل برای اسکن فایلهای ضمیمه و جلوگیری از ورود بدافزارها از طریق ایمیل محبوبیت دارد، اما میتوان از آن برای اسکن فایلها و دایرکتوریها در سیستمهای لینوکس، یونیکس و ویندوز نیز بهره برد. ابزار خط فرمان اصلی برای اسکن فایلها با ClamAV، دستور clamscan
است که به کاربران اجازه میدهد مسیرهای مشخصی را برای یافتن امضاهای بدافزار (که از پایگاه داده ویروس ClamAV بهروزرسانی میشوند) اسکن کنند. این ابزار به دلیل ماهیت متنباز بودن و قابلیت سفارشیسازی بالا، گزینهای قدرتمند و انعطافپذیر برای افزودن قابلیتهای اسکن آنتیویروس به اسکریپتها و سیستمهای خودکار است.
URL: مستندات ClamAV URL: بیشتر
sudo clamscan --infected --recursive
sudo apt install clamav clamav-daemon clamav-freshclam
sudo freshclam
قدم دوم: شناسایی نوع و ماهیت فایلها
دستور ExifTool
دستور ExifTool یک ابزار خط فرمان رایگان و متنباز و یک کتابخانه پِرل (Perl library) قدرتمند است که برای خواندن، نوشتن و ویرایش فراداده (metadata) در طیف وسیعی از فرمتهای فایل، از جمله تصاویر (EXIF, IPTC, XMP)، ویدئوها، فایلهای صوتی و اسناد PDF، استفاده میشود. این ابزار قادر است تقریباً تمام تگهای فراداده استاندارد و سفارشی را استخراج و دستکاری کند، که آن را برای عکاسان، محققان پزشکی قانونی دیجیتال، توسعهدهندگان و هر کسی که نیاز به مدیریت دقیق اطلاعات جاسازی شده در فایلها دارد، بیاندازه ارزشمند میسازد. ExifTool به دلیل پشتیبانی گستردهاش از انواع تگها و فرمتها، قابلیتهای ویرایش دستهای، و توانایی حفظ یکپارچگی دادهها حتی پس از تغییر فراداده، به عنوان یک استاندارد صنعتی شناخته میشود. ExifTool
sudo apt install libimage-exiftool-perl
دستور File
دستور file
یک ابزار استاندارد و قدرتمند در سیستمعاملهای شبهیونیکس (مانند لینوکس و macOS) است که برای شناسایی نوع محتوای یک فایل به کار میرود. برخلاف بسیاری از دستورات که نوع فایل را صرفاً بر اساس پسوند آن حدس میزنند، file
با بررسی جادویی (magic numbers) موجود در ابتدای فایلها، ساختار داخلی و محتوای واقعی آنها را تحلیل میکند. این قابلیت به آن اجازه میدهد تا حتی فایلهایی را که پسوند اشتباه دارند یا اصلاً پسوندی ندارند، به درستی تشخیص دهد؛ مثلاً میتواند یک فایل متنی ساده، یک فایل اجرایی باینری (مانند ELF، Mach-O یا PE)، یک تصویر (JPEG، PNG)، یک آرشیو فشرده (ZIP، GZ)، یا حتی یک سند Word را شناسایی کند. این دستور برای مهندسی معکوس، بررسی امنیتی فایلها، یا صرفاً برای درک اینکه یک فایل ناشناخته واقعاً چیست، بسیار مفید است.
file task.ll
sudo apt install file
وبسایت FileInfo.com
وبسایت FileInfo.com یک دایرکتوری آنلاین بزرگ از پسوندهای فایل است که به شما امکان میدهد با وارد کردن پسوند یک فایل، اطلاعات جامعی درباره آن کسب کنید. این وبسایت توضیحات مربوط به نوع فایل، دستهبندی آن (مانند فایل ویدئویی یا سند)، برنامههای نرمافزاری مرتبط که میتوانند آن را باز کنند و اطلاعاتی درباره توسعهدهنده فرمت را ارائه میدهد، که آن را به ابزاری مفید برای شناسایی فایلهای ناشناخته تبدیل میکند.
قدم سوم: کامپایل و اجرای فایل
نکته: پسوند فایل .ll عمدتاً به دو منظور استفاده میشود: رایجترین آن، فایلهای پیشنمایش تولید شده توسط نرمافزار Combit List & Label است که برای گزارشگیری کاربرد دارد. اما در حوزه کامپایلرها، بهویژه در پروژه LLVM، این پسوند به فایلهای سورس نمایش میانی (Intermediate Representation - IR) اشاره دارد که یک فرمت کد سطح پایین و قابل خواندن توسط انسان است و نقش واسطهای بین کد منبع و کد ماشین را ایفا میکند تا بهینهسازی و تولید کد برای معماریهای مختلف را تسهیل کند. بهندرت نیز ممکن است به فایلهای کد منبع Lex اشاره داشته باشد. LLVM Bitcode مانند یک زبان مشترک جهانی برای کامپایلرها است
کامپایل: (کلنگ) Clang یک کامپایلر فرانتاند (frontend) برای زبانهای برنامهنویسی C، C++، Objective-C و Objective-C++ است. این کامپایلر بخشی از پروژه بزرگتر LLVM (Low Level Virtual Machine) است و به دلیل سرعت بالا، پیامهای خطای خوانا، و پشتیبانی قوی از استانداردهای جدید زبانها، بسیار محبوب شده است. URL: llvm
sudo apt install clang
clang task.ll -mllvm -W -g -W1,-pie -o task.out
اجرا:
$ ./task.out
Only the chosen one will know what the flag is!
Are you the chosen one?
flag: