مهندسی معکوس، یادگیری گیدرا و ساختار اون (عملی-تئوری)
هدف این بخش آشنایی شما با گیدرا و تاریخچهٔ اون، ساختار پروژهٔ گیدرا، توسعه ی افزونه ها و اسکریپت های اون و مشارکت به عنوان یک نرمافزار متن بازه.
چه چیزهایی رو توی این بخش قراره یاد بگیریم؟
- تاریخچه و مقایسه
- اتوماسیون مهندسی معکوس با گیدرا
- دیباگ کردن با گیدرا
- افزونه های گیدرا
بسیار خوب. بریم که قسمت اول رو شروع کنیم …
در قسمت قبل، منابع و ابزار های مهم در رابطه با این آموزش ها معرفی شد. اگر اولین بار است که این مقاله را می بینید، بهتر است از قسمت صفر شروع کنید!
فصل 1 – آشنایی با گیدرا
توی این فصل هدفمون صرفاً آشناییه، قبل اینکه شروع به استفاده از گیدرا کنیم با تاریخچهٔ مختصرش آشنا میشیم و نصبش میکنیم. احتمالاً برای همهٔ شمایی که این مطلب رو میخونید نصب یه نسخهٔ عرضهشدهٔ نرمافزار اصلاً پیچیده نباشه ولی گفتیم شاید بخواید بیشتر با گیدرا آشنا بشید و ارتباطتون رو باهاش عمیقتر کنید. البته میتونید خودتون گیدرا رو از سورسش دانلود کنید و کامپایل کنید.
از اونجایی که سورس کد گیدرا در دسترسه و قابل بهبود و توسعست، احتمالاً دوست دارید بدونید که ساختارش چطوریه و هر بخش کد چیکار میکنه و … . خیلی عالیه که میشه کشف کرد که چه کارای زیاد و عجیبوغریبی میشه با گیدرا انجام داد.
ضمناً اینکه بتونیم کاربردهای اصلی گیدرا رو از دید یه مهندس معکوس ببینیم هم خیلی جالبه. ویژگیهای گیدرا انقدر جالب و زیادن که وقتی بشناسینشون و یادشون بگیرید عاشق گیدرا میشید.
توی این فصل موارد زیر رو پوشش میدیم:
- صندوق 7 ویکیلیکس
- گیدرا در مقابل رقبا
- مرور گیدرا
منابع تکنیکال مورد نیاز
توی این فصل مثال عملی نداریم ولی میتونید این ویدیو رو توی یوتیوب ببینید و بد نیست اگر سعی کنید تکرارش کنید (البته بهتره ادامهٔ این پست رو اول بخونید و بعد ببینیدش و سعی کنید تکرارش کنید).
صندوق 7 ویکیلیکس
در تاریخ 7 مارچ 2017، ویکیلیکس شروع به نشر صندوق 7 (Vault 7) کرد؛ این نشر اطلاعات تبدیل به بزرگترین افشای اسناد محرمانهٔ سازمان اطلاعات مرکزی (CIA) آمریکا شد. این افشای اسناد شامل اسرار سلاحهای سایبری و تکنیکهای جاسوسی بود که در 24 قسمت با نامهای زیر قرار داشتند:
Year Zero, Dark Matter
, Marble, Grasshopper, HIVE, Weeping Angel,
Scribbles, Archimedes, AfterMidnight and Assassin,
Athena, Pandemic, Cherry Blossom, Brutal Kangaroo,
Elsa, OutlawCountry, BothanSpy, Highrise,
UCL/Raytheon, Imperial, Dumbo, CouchPotato,
ExpressLane, Angelfire, and Protego.
یک چیزی که خیلی آزار دهندست این وسط اینه که Year Zero شامل معرفی ابزار و اکسپلویت های Zero-Day بود و این نشون میده اون برهه CIA چقدر ابزار مختلفی برای حملات روز صفر داشته و چقدر از حفرههای امنیتی روز صفر آگاه بوده!
حملهٔ صفر روزه یا حملهٔ روز صفر (به انگلیسی: Zero-day attack) یک حمله یا تهدید رایانهای است که از یک آسیبپذیری در یک نرمافزار کاربردی که تا پیش از آن ناشناخته بودهاست بهرهجویی میکند.
این بدان معناست که توسعهدهندگان برای رفع آسیبپذیری صفر روز فرصت داشتهاند.
پیش از آنکه توسعهدهندهٔ نرمافزار هدف از آسیبپذیری آگاهی یابد، اکسپلویت صفرروزه (نرمافزاری که از یک حفرهٔ امنیتی برای اعمال یک حمله استفاده میکند) توسط حملهکنندگان استفاده یا به اشتراک گذاشته میشود.
در همین حال مایکل وینسنت هایدن که مدیر CIA در سالهای 2006 تا 2009 و مدیر NSA در سالهای 1999 تا 2005 بود، بهعنوان سخنگوی سازمانهای امنیت اطلاعات، نه اعتبار این افشای بزرگ را تأیید و نه رد کرد، این اطلاعات توسط مقامات ارشد NSA بهصورت ناشناس افشا شده بود.
وجود گیدرا در بخش اول صندوق 7: سال صفر افشا شد. این بخش اول شامل افشای بزرگی از داکیومنتها و فایلهای دزدیده شده از مرکز اطلاعات سایبری CIA در لنگلی – ویرجینیا بود. محتوای افشا شده در این بخش دربارهٔ راهحل بدافزاری CIA بود که هدف آنها توسعه و استفاده از حملات zero-day بود و اینکه چطور آیفونهای اپل، سیسام عامل اندروید و ویندوز و حتی تلویزیونهای سامسونگ، چگونه پنهانی به میکروفن تبدیل میشوند.
در این بخش 3 بار نام گیدرا وجود داشت (لینکش) که چیزای مختلفی رو نشون میداد؛ مثلاً چطوری نصبش کنید، راهنمای استفادهٔ مرحلهبهمرحله (با اسکرین شات ها) اینکه چطور میشه کش یه کرنل 64-بیتی رو به صورت دستی آنالیز کرد و آخرین نسخه ی گیدرا اون موقع سخهٔ 7.0.2 بود!
انتشار توسط NSA
در کنفرانس RSA در سال 2019 در سانفرانسیسکو، راب جویس، مشاور ارشد امنیت سایبری NSA، در بخش “مدرک رایگان ابزار مهندسی معکوس NSA رو بگیر“، ویژگیهای منحصر بفرد و تواناییهای گیدرا رو توضیح داد و همچنین برنامهٔ گیدرا منتشر شد.
در این جلسه (Get your free NSA reverse engineering)، یک سری از ویژگیها توضیح داده شدند:
- همکاری تیمی روی یک پروژه
- توانایی توسعه و گسترش استفاده از گیدرا
- مدل پردازنده ی عمومی(به نام SLEIGH)
- دو مد کاری: تعاملی و بدون رابط کاربری
- ابزار قدرتمند آنالیز ویژگی گیدرا
نهایتا در 4 آپریل 2019، NSA سورس کد گیدرا رو روی گیت هاب منتشر کرد. همینطور وبسایت گیدرا هم راه افتاد و میتونید از اونجا هم نسخهٔ منتشر شدهٔ گیدرا که آمادهٔ استفادست رو هم دریافت کنید. اولین ورژن منتشر شدهٔ گیدرا روی وبسایت ورژن 9.0 بود. ممکنه نیاز به فیلترشکن برای دانلود گیدرا از وبسایت داشته باشید.
متأسفانه بعد از انتشار نسخهٔ عمومی گیدرا، چند ساعت بعد، اولین حفرهٔ امنیتی گیدرا توسط Matthew Hickey منتشر شد. ایشون این رو توییت کرد:
Ghidra opens up JDWP in debug mode listening on
port 18001, you can use it to execute code remotely
(Man facepalming). to fix change line 150 of
support/launch.sh from * to 127.0.0.1
https://github.com/hackerhouseopensource/
exploits/blob/master/jdwp-exploit.txt.
بعدازاین اتفاق همه به NSA و گیدرا مشکوک شدن؛ البته بعد از یادآوری تجربهٔ صندوق 7 و توانایی NSA برای خرابکاریهای سایبری همه متوجه شدن که NSA واقعاً به نرمافزار خودش (گیدرا) برای هک کردن کاربراش بهاضافه کردن در پشتی (backdoor) نیاز نداره. شما میتونید با خیال راحت از گیدرا استفاده کنید و احتمالاً NSA فقط این حفره رو ایجاد کرد که آمادگی همکاریش در یک پروژهٔ متنباز و قدرت زیادش رو به همه یادآوری کنه، بهخصوص که افشای اطلاعاتی ویکیلیکس و ادوارد اسنودن حسابی به اعتبارش خدشه وارد کرده بود.
گیدرا در مقابل دیگر رقبا و IDA
حتی اگر استاد ابزار دیگه ی مهندسی معکوس هستید (مثل IDA،Binary Ninja یا اونی که موردعلاقهٔ ماست Radare2) دلایل زیادی هست که بهتره گیدرا رو یاد بگیرید. هیچ کدوم از ابزار مهندسی معکوس بهترین گزینه نیستن و هرکدوم یه نقاط ضعف و قوتی دارن. گاهاً حتی این ابزار باهم قابلمقایسه نیستن ولی میبینیم که توسعهدهنده هاشون از همدیگه یاد میگیرن و ویژگیهای مختلفی به برنامهٔ خودشون اضافه میکنن. مثلاً گیدرا از اولین نسخهٔ عمومیش undo داشت و واقعاً کارآمد بود، رقیب گیدرا هم که IDA Pro بود توی نسخهٔ 7.3 خودش این ویژگی رو اضافه کرد. توی اسکرینشات پایین میبینیم که حساب رسمی گیدرا چطوری با این ویژگی IDA Pro شوخی میکنه.
همونطور که گفتیم بهخاطر رقابت و کارکرد مختلفشون، این ابزار باهم قابلمقایسه نیستن. پس فقط یک سری از نقاط قوت گیدرا رو باهم بررسی میکنیم:
- متنباز و رایگانه (همینطور دیکامپایلرش)
- خیلی از معماری ها رو پشتیبانی میکنه(یعنی ممکنه بعضی از فریمورک ها پشتیبانی نشن)
- میتونه باینری های زیادی رو هم زمان توی یک پروژه بارگذاری کنه. این ویژگی باعث میشه که بتونه عملیات رو بین فایل ها ی باینری مختلف و کتاب خونه هاشون ببینه.
- امکان مهندسی معکوس تیمی رو فراهم میکنه.
- میتونه بدون مشکل ایمیج های بزرگ فریمور رو بخونه.
- کلی اطلاعات و مثال و دوره های کامل و عالی داره.
- کنترل نسخه ی مشابه گیت داره و میتونه تغییرات رو توی باینری ها رصد کنه.
اگر بخوایم نتیجه بگیریم، وقتی که بهعنوان نفوذگر یا مهندس معکوس فعالیت دارید باید هرچی میتونید رو یاد بگیرید و از مزایای همهٔ فریمورکها بهرهمند بشید. به همین علت گیدرا بهعنوان یک فریمورک خیلی خوب و قوی ارزش یادگیری زیادی داره.
مرور گیدرا
در این بخش در مورد نصب گیدرا صحبت میکنیم و توانایی هاش رو نشونتون میدیم. در ادامه متوجه میشیم که چرا گیدرا انقدر قدرتمنده و فقط یه فریمورک سادهٔ متنباز مهندسی معکوس دیگه نیست.
در زمان نوشتار این بخش آخرین ورژن عرضهشدهٔ گیدرا ورژن 10.0.4 است. برای دانلود گیدرا به وبسایت گیدرا بروید و از لینک مربوطه آخرین نسخهٔ گیدرا را دانلود کنید.
نصب گیدرا
در مورد گیدرا همیشه توصیه میشه که آخرین نسخه رو دانلود کنید، به سایت گیدرا برید و روی دانلود از گیتهاب کلیک کنید و فایل های مربوط به آخرین نسخه رو دانلود کنید.
بعد از دانلود نسخه ی zip و خارج کردنش از حالت فشرده شما ساختار زیر رو میبینید:
برای اینکه با گیدرا آشنا بشیم باید بدونیم هرکدوم از این فایل ها و فولدرها چه چیزی رو شامل میشن(منبع):
- docs: داکیومنتیشن ها و منابع خیلی خیلی کاربردی گیدرا، مثلا دوره هایی آموزشی کامل برای هر سطحی از آشنایی که با گیدرا دارید و راهنمای نصب مرحله به مرحله.
- Extensions: افزونه های انتخابی گیدرا که به شما اجازه میدهند تا کارکرد گیدرا را به نفع خود بهبود دهید و ابزار جدیدی به آن اضافه کنید.
- Ghidra: خود برنامه ی گیدرا
- GPL: فایل هایی که کمک میکنند گیدرا از GPL پشتیبانی کند.
- licenses: لایسنس هایی که گیدرا از آنها استفاده کرده.
- server: شامل فایل های مربوط به نصب گیدرا روی سرور و مدیریت آن
- support: به شما اجازه میدهد تا گیدرا را در حالت پیشرفته اجرا کنید و حداکثر بهره را از آن ببرید.
- ghidraRun: اسکریپت اجرای گیدرا روی لینوکس و IOS
- ghidraRun.bat: اسکریپت بچ برای اجرای گیدرا روی ویندوز
- LICENCE: فابل لایسنس گیدرا
علاوه بر اینکه بدون دردسر میشه نسخهٔ منتشر شدهٔ گیدرا رو تقریباً بدون دردسر اجرا کرد میتونید خودتونم سورس کد رو دانلود کنید و build کنید.
کمی فراتر – خودتان گیدار را کامپایل کنید!
ابتدا سورس گیدرا را دانلود کنید و گرادل (Gradle) را روی سیستم خود فعال کنید.
سپس دستور زیر را اجرا کنید:
1 2 3 4 5 6 7 8 9 10 11 | gradle --init-script gradle/support/fetchDep endencies.gradle init gradle buildGhidra gradle eclipse gradle buildNatives_win64 gradle buildNatives_linux64 gradle buildNatives_osx64 gradle sleighCompile gradle eclipse -PeclipsePDE gradle prepDev |
بعدازاین کار شما یک فایل zip دارید که گیدرای کامپایل شده در آن قرار دارد.
قبل از اجرای گیدرا از موارد زیر اطمینان حاصل کنید:
- داشتن حداقل 4 گیگابایت رم
- داشتن 1 گیگابایت فضای خالی(برای نصب باینری های گیدرا)
- داشتن بیش از یک مانیتور اکیدا توصیه می شود
ضمناً ازآنجاییکه گیدرا به جاوا نوشته شده، برای اجرای آن نیاز به دو ابزار Java runtime و JDK را دارید و باید حداقل نسخه ی 64-بیتی و ورژن 11 به بعد را نصب داشته باشید.
اگر JR روی سیستم شما نصب نباشد با این پیغام مواجه می شوید:”Java runtime not found”
و اگر JDK توسط سیستم پیدا نشود با پیغام زیر:(در این مورد باید آدرس دایرکتوری JDK را به برنامه بدهید)
رفع مشکلات نصب شناخته شده
در این مواقع می توانید به 3 جا سر بزنید:
- فولدر docs فایل InstallationGuide.html
- سایت گیدرا در بخش راهنمای نصب
- ریپازیتوری گیتهاب گیدرا در بخش مشکلات شناخته شده
بعد از نصب اگر روی Mac یا Linux هستید ghidraRun رو اجرا کنید و اگر هم توی ویندوز هستید فایل bat.
مرور ویژگی های گیدرا
در بخش آخر این پست هم نگاهی میندازیم به یک سری ویژگی های پایه ای گیدرا و سعی میکنیم عملکرد گیدرا رو ببینیم. نقطه ی شروع دقیقا همین جاست. بریم شروع کنیم.
ایجاد پروژه ی جدید در گیدرا
برخلاف باقی ابزار مهندسی معکوس، گیدرا مستقیما با فایل ها سر و کار نداره، بلکه با پروژه ها کار میکنه. بیاید یه پروژه ی جدید ایجاد کنیم. از منوی File روی گزینه ی New Project کلیک کنید.(Ctrl+N)
پروژه ها میتونن غیر اشتراک گذاری شده باشن یا اشتراک گذاری شده. از اونجایی که ما میخوایم یه برنامه ی hello world ساده رو آنالیز کنیم و هیچ کس دیگه هم قرار نیست روی پروژه باهامون کار کنه گزینه ی Non-Shared Project رو انتخاب کنید و بعد روی Next کلیک کنید. بعدش برنامه ازمون میخواد جایی که پروژه قرار میگیره و اسم پروژه رو مشخص کنیم. اسمش رو بگذارید “hello world“:
بعدش پروژه ایجاد میشه. این پروژه شامل 2 قسمت اصلی میشه: hello world.gpr و hello world.rep:
با توجه به اینکه پروژه ای که ایجاد شده( فایل .gpr) قابل اشتراک گذاری نیست، تنها یک کاربر اجازه ی دسترسی به آنرا دارد. اگر تلاش کنید که فایل باز شده را دوباره باز کنید، قفل هم زمانی تعبیه شده با استفاده از فایل های .lock و .lock~ جلوی دسترسی مجدد شما را به پروژه میگیرد و با پیغامی مبنی بر قفل بودن پروژه مواجه می شوید:
در بخش بعدی در این مورد صحبت میکنیم که چطور میشود فایلهای باینری را به پروژهٔ خود اضافه کنیم.
اضافه کردن فایل ها به پروژه ی گیدرا
برای آنالیز فایلهای مختلف، ابتدا باید آنها را به پروژهٔ گیدرای خود اضافه کنیم. برای شروع برنامهٔ hello world را کامپایل میکنیم. برنامهای به اسم”hello_world.c” به زبان C مینویسیم:
1 2 3 4 | #include <stdio.h> int main(){ printf("Hello world."); } |
و با استفاده از دستورات زیر فایل را کامپایل میکنیم:
1 2 3 | C:\Users\kayoosh\Desktop\hello_world> gcc.exe hello_world.c C:\Users\kayoosh\>\ |
توجه کنید که برنامه در کامپیوتر ما در دسکتاپ قرار دارد و آدرس دسترسی شما به برنامهٔ شما متفاوت است.
بعدازاین اتفاق یک فایل قابلاجرای پرتابل مایکروسافت ویندوز (همون exe خودمون) ایجاد میشه به اسم: hello_world.exe
بریم که آنالیزش کنیم. اول باید این فایل رو به پروژمون اضافه کنیم. برای این کار از زبانه ی File به بخش Import file برید و فایلتون رو به برنامه اضافه کنید:
گیدرا به صورت اتوماتیک نوع فایل و ویژگی هاش رو تشخیص میده و وقتی که دیدید تشخیصش درسته، روی OK کلیک کنید تا صفحه ی خلاصه باز بشه:
حالا با دوبار کلیک روی hello_wolrd.exe یا با انتخابش و بعد کلیک روی علامت اژدها برنامه باز و توسط گیدرا بارگذاری میشه:
بعد از اضافه کردن فایلها به پروژتون، میتونید مهندسی معکوسشون رو شروع کنید. این ویژگی گیدرا باعث میشه که بتونید بیشتر از یک فایل رو توی یک پروژه وارد کنید و بررسیشون کنید. همینطور میتونید روی فایل هایی که اضافه کردید کارای مختلف انجام بدید
توی قسمت بعدی میبینیم که چطوری میتونیم فایل هامون رو با گیدرا آنالیز کنیم.
تنظیم و انجام آنالیز با گیدرا
در ادامهٔ بخش قبل و بعد از بارگذاری فایل توی پروژه، گیدرا ازتون میپرسه که آیا میخواین آنالیز فایل رو شروع کنید. اینجا معمولاً همه میگن بله … ولی این آنالیز دقیقاً شامل چی میشه؟ شامل شناخت توابع، پارامترها و رشتهها و … میشه. معمولاً شما به گیدرا اجازه میدید که خودش این اطلاعات رو براتون استخراج کنه. کلی گزینهٔ مختلف هم برای تنظیمات آنالیزتون دارید. میتونید توضیحات هرکدوم از این تنظیمات رو با کلیک کردن روشون مشاهده کنید. این توضیحات توی بخش بالایی و سمت راست قابل رویت هستن:
بعد از انتخاب ابزار آنالیزتون، روی Analyze کلیک کنید و بگذارید آنالیز فایل شروع بشه.
در ادامه کد browser گیدرا که توی قسمت بعدی کامل در موردش صحبت میکنیم رو میبینید. اگر چیزی رو آنالیز نکردید هم نگران نباشید، دوباره میتونید آنالیزش کنید.
خلاصه
در این فصل تاریخ مختصر و هیجانانگیز گیدرا رو باهم مرور کردیم. بعدش دیدیم که چطوری دانلود، نصب و از سورس کد کامپایلش کنیم. همچنین یاد گرفتیم که چطوری مشکلات نصب رو حل کنیم و مشکلات جدید رو به پروژهٔ متنباز گیدرا گزارش بدیم.
نهایتاً ساختار گیدرا و کارکردهای اصلیش رو یاد گرفتیم (هنوز کل کارکردها رو نگفتیم البته). حالا توی موقعیتی هستید که میتونید بهتنهایی گیدرا رو بررسی و آزمایش کنید.
این فصل کمکتون کرد که بتونید تصویر بزرگتر پشت گیدرا رو ببینید و در ادامه برای استفاده از گیدرا آماده باشید.
در فصل بعدی اول یکم دیگه نرمافزار رو بررسی میکنیم. در مرحلهٔ بعدی این موضوع رو بررسی میکنیم که چطوری میشه کارای مهندسی معکوس رو به طور خودکار با گیدرا انجام داد و از پلاگینهای گیدرا استفاده میکنیم، بهبودشون میدیم و یاد میگیریم چطوری خودمون پلاگین توسعه بدیم.
سؤالها
همیشه سعی کنید جواب سوالا رو یک جا یادداشت کنید و با جوابی که اول قسمت بعدی میگذاریم مقایسش کنید تا بتونید ارزیابی بهتری از کیفیت یادگیری خودتون داشته باشید.
- کدوم فریمورک مهندسی معکوس از همه ی ابزار دیگه بهتره؟
- گیدرا چه مشکلاتی رو بهتر از بقیه ی رقباش رفع میکنه؟
- نقاط ضعف و قدرت گیدرا چین؟
بعد از ایمپورت کردن فایل، درون برنامه گیدرا و کلیک روی لوگوی اژدها مستقیم وارد بروزر گیدرا میشه و مینویسه No Program ..
یا فایل ساپورت نمیشه که توی 4 جلسه ی آینده اگر دنبال کنید بررسی میکنیم.
یا خودتون گیدرا رو کامپایل کردید و مشکلی پیش اومده.
آخ جانمی جاااان، شروع شد ? ایول، عالی بود. کاش وب فارسی پر از وبلاگا و وبسایتایِ مثل شما بشه تا ازین وضعِ کپی پِیستی و بیکیفیتیش در بیاد
ادامه:
فکر کنم بد نباشه اون فایلی که باید نوشته بشه و بعد تبدیل به exe بشه رو برای دانلود بذارید. من GCC نداشتم و میدونم خیلیای دیگه هم ندارن و اینجا هم آموزش داده نشده. جدای از اون، این پست راجع به برنامهنویسی سی یا کمپایل کردن و ایناش نیست، بهتره خواننده روی گیدرا متمرکز باشه تا اینکه حالا بره ببینه GCC چیه و چجوری باید نصبش کنه و اینا.
یا مثلا بد نیست به JDK یا Runtime هم لینک بدید..
منابع خوب فارسی زیادی توی 10 سال اخیر اومدن و رفتن ولی فقط سیسوگ موندگار شده و اونم به خاطر تیم بی نظیرشه.
همین مقاله هم واقعا نسخه ی نهایی که بچه های سیسوگ ادیت کردن خیلی تمیز تر و کامل تر از چیزی شد که ما آماده کرده بودیم و واقعا دمشون گرمه.
دست شما درد نکنه بابت اموزشی که ایجاد کردید و خواهید کرد