مهندسی معکوس اپلیکیشنهای ویندوزی و پیدا کردن آسیبپذیریها
مقدمات تحلیل آسیبپذیریها در برنامههای ویندوزی
قبل از هرچیزی اینا باید براتون جا افتاده باشه:
درک ساختار حافظه در ویندوز (استک، هیپ، رجیسترها)
مفاهیم باگهایی مثل Buffer Overflow، Use After Free، Integer Overflow
نحوه عملکرد Exception Handling در ویندوز
مقدمات تحلیل آسیبپذیریها در برنامههای ویندوزی
قبل از هرچیزی اینا باید براتون جا افتاده باشه:
درک ساختار حافظه در ویندوز (استک، هیپ، رجیسترها)
مفاهیم باگهایی مثل Buffer Overflow، Use After Free، Integer Overflow
نحوه عملکرد Exception Handling در ویندوز
👍17👏1
ReverseEngineering pinned «Roadmap Reverse Engineering بخش اول – پیشنیازها 1 برنامهنویسی سطح پایین C/C++ یاد بگیرید چون اکثر برنامههای باینری با این زبانها نوشته میشن مفاهیم مثل: pointer، stack، heap، buffer، function call. منابع: Learn-C.org کتاب: C Programming Language…»
برخی از رایجترین تکنیکهای Binary Exploitation شامل:
1 Buffer Overflow: در این حمله، به مقدار بیش از ظرفیت بافر (حافظه موقت) داده وارد میشود تا باعث تغییر دادههای حافظه یا اجرای کد دلخواه شود این تکنیک اغلب برای اجرای کد دلخواه یا تزریق کد به برنامههای آسیبپذیر استفاده میشود
2 Format String Vulnerability: این نوع آسیبپذیری زمانی اتفاق میافتد که ورودی کاربر بهطور مستقیم در یک دستور printf یا مشابه آن قرار گیرد. حملهگر میتواند از این طریق به بخشهای مختلف حافظه دسترسی پیدا کرده یا دادههای حساس را استخراج کند
3 Use-after-free: این آسیبپذیری زمانی رخ میدهد که یک برنامه پس از آزادسازی حافظه (free) به آن دسترسی پیدا کند. مهاجم میتواند حافظه آزادشده را بازنویسی کرده و از آن برای اجرای کد دلخواه استفاده کند
4 Heap Spraying: مهاجم بهطور مصنوعی حافظه heap را با دادههای خاص پر میکند، به طوری که اجرای کد دلخواه ممکن است به دنبال این دادهها اتفاق بیافتد
5 Return-Oriented Programming (ROP): در این حمله، مهاجم از قطعات کد موجود در برنامه به نام "gadgets" برای ساختن یک رشته دستورات دلخواه استفاده میکند، بدون اینکه نیاز به تزریق کد جدید باشد
6 Stack Smashing: مشابه با buffer overflow است، اما معمولاً در زمینه حملات به پشته (stack) انجام میشود تا آدرس بازگشتی (return address) تابع را تغییر داده و جریان کنترل برنامه را به محل دلخواه هدایت کند
چطور به کار میاد؟
مهاجم معمولاً با استفاده از ابزارهای مهندسی معکوس (مثل گادمپ، OllyDbg، IDA Pro، Ghidra) باینریها رو آنالیز میکنه تا آسیبپذیریها رو پیدا کنه
پس از شناسایی آسیبپذیری مهاجم میتونه یک exploit بنویسه که به سیستم اجازه بده کد دلخواه اجرا کنه یا اطلاعات حساس رو استخراج کنه
#binary_exploitation
#binary
1 Buffer Overflow: در این حمله، به مقدار بیش از ظرفیت بافر (حافظه موقت) داده وارد میشود تا باعث تغییر دادههای حافظه یا اجرای کد دلخواه شود این تکنیک اغلب برای اجرای کد دلخواه یا تزریق کد به برنامههای آسیبپذیر استفاده میشود
2 Format String Vulnerability: این نوع آسیبپذیری زمانی اتفاق میافتد که ورودی کاربر بهطور مستقیم در یک دستور printf یا مشابه آن قرار گیرد. حملهگر میتواند از این طریق به بخشهای مختلف حافظه دسترسی پیدا کرده یا دادههای حساس را استخراج کند
3 Use-after-free: این آسیبپذیری زمانی رخ میدهد که یک برنامه پس از آزادسازی حافظه (free) به آن دسترسی پیدا کند. مهاجم میتواند حافظه آزادشده را بازنویسی کرده و از آن برای اجرای کد دلخواه استفاده کند
4 Heap Spraying: مهاجم بهطور مصنوعی حافظه heap را با دادههای خاص پر میکند، به طوری که اجرای کد دلخواه ممکن است به دنبال این دادهها اتفاق بیافتد
5 Return-Oriented Programming (ROP): در این حمله، مهاجم از قطعات کد موجود در برنامه به نام "gadgets" برای ساختن یک رشته دستورات دلخواه استفاده میکند، بدون اینکه نیاز به تزریق کد جدید باشد
6 Stack Smashing: مشابه با buffer overflow است، اما معمولاً در زمینه حملات به پشته (stack) انجام میشود تا آدرس بازگشتی (return address) تابع را تغییر داده و جریان کنترل برنامه را به محل دلخواه هدایت کند
چطور به کار میاد؟
مهاجم معمولاً با استفاده از ابزارهای مهندسی معکوس (مثل گادمپ، OllyDbg، IDA Pro، Ghidra) باینریها رو آنالیز میکنه تا آسیبپذیریها رو پیدا کنه
پس از شناسایی آسیبپذیری مهاجم میتونه یک exploit بنویسه که به سیستم اجازه بده کد دلخواه اجرا کنه یا اطلاعات حساس رو استخراج کنه
#binary_exploitation
#binary
❤7🔥1👏1
ReverseEngineering
برخی از رایجترین تکنیکهای Binary Exploitation شامل: 1 Buffer Overflow: در این حمله، به مقدار بیش از ظرفیت بافر (حافظه موقت) داده وارد میشود تا باعث تغییر دادههای حافظه یا اجرای کد دلخواه شود این تکنیک اغلب برای اجرای کد دلخواه یا تزریق کد به برنامههای…
چطور میتونیم از Binary Exploitation جلوگیری کنیم؟
1 Safe coding practices: استفاده از روشهای برنامهنویسی امن
2 ASLR (Address Space Layout Randomization): با این تکنیک، آدرسهای حافظه به طور تصادفی تغییر میکنن و حملهگر نمیدونه دقیقا کجا باید حمله کنه
3 Stack Canary: یه نوع محافظت از پشته هست که وقتی تغییرات مشکوکی رو شناسایی کرد جلوی اجرای برنامه رو میگیره
4 DEP (Data Execution Prevention): این تکنیک جلوی اجرای کد در بخشهایی از حافظه که نباید کد اجرا بشه رو میگیره
#binary
#binary_exploitation
1 Safe coding practices: استفاده از روشهای برنامهنویسی امن
2 ASLR (Address Space Layout Randomization): با این تکنیک، آدرسهای حافظه به طور تصادفی تغییر میکنن و حملهگر نمیدونه دقیقا کجا باید حمله کنه
3 Stack Canary: یه نوع محافظت از پشته هست که وقتی تغییرات مشکوکی رو شناسایی کرد جلوی اجرای برنامه رو میگیره
4 DEP (Data Execution Prevention): این تکنیک جلوی اجرای کد در بخشهایی از حافظه که نباید کد اجرا بشه رو میگیره
#binary
#binary_exploitation
👍6❤3
چه ابزارهایی برای Binary Exploitation استفاده میکنیم؟
برای شروع با Binary Exploitation باید چند تا ابزار مهم رو بشناسیم که توی این حملات کمک میکنن این ابزارها میتونن به ما کمک کنن تا آسیبپذیریها رو پیدا کنیم و ازشون بهرهبرداری کنیم
1 Ghidra: یک ابزار تحلیل باینری متنباز از NSA هست. با این ابزار میتونیم برنامههای باینری رو تحلیل کنیم و بفهمیم که کدهای داخلش چطور کار میکنن
2 IDA Pro: یکی از قدرتمندترین ابزارها برای مهندسی معکوس و تحلیل باینریها. البته کمی گرونه
3 gdb (GNU Debugger): ابزار دیباگ کردن برنامههای C و C++ هست خیلی از زمانها به ما کمک میکنه تا رفتار برنامه رو بررسی کنیم و ببینیم چه اتفاقاتی توی حافظه میفته
4 Radare2: ابزار دیگهای برای مهندسی معکوس و تحلیل باینریها که در مقایسه با IDA رایگانتر و متنبازه
#binary
#binary_exploitation
برای شروع با Binary Exploitation باید چند تا ابزار مهم رو بشناسیم که توی این حملات کمک میکنن این ابزارها میتونن به ما کمک کنن تا آسیبپذیریها رو پیدا کنیم و ازشون بهرهبرداری کنیم
1 Ghidra: یک ابزار تحلیل باینری متنباز از NSA هست. با این ابزار میتونیم برنامههای باینری رو تحلیل کنیم و بفهمیم که کدهای داخلش چطور کار میکنن
2 IDA Pro: یکی از قدرتمندترین ابزارها برای مهندسی معکوس و تحلیل باینریها. البته کمی گرونه
3 gdb (GNU Debugger): ابزار دیباگ کردن برنامههای C و C++ هست خیلی از زمانها به ما کمک میکنه تا رفتار برنامه رو بررسی کنیم و ببینیم چه اتفاقاتی توی حافظه میفته
4 Radare2: ابزار دیگهای برای مهندسی معکوس و تحلیل باینریها که در مقایسه با IDA رایگانتر و متنبازه
#binary
#binary_exploitation
❤10👏1
Hacking- The Art of Exploitation (2nd ed. 2008) - Erickson.pdf
4.4 MB
کتاب "Hacking: The Art of Exploitation" نوشته Jon Erickson
یه منبع عالی برای شروع یادگیری هک و امنیته این کتاب بیشتر روی باینری اکسپلویتیشن تمرکز داره و بهتون یاد میده چطور با بهرهبرداری از مشکلات نرمافزاری مثل بافر اورفلو به سیستمها نفوذ کنید و چطور مشکلات امنیتی نرمافزارها رو پیدا کنید و ازشون استفاده کنید مخصوصا برای نفوذ به سیستمهای آسیبپذیر
#book
یه منبع عالی برای شروع یادگیری هک و امنیته این کتاب بیشتر روی باینری اکسپلویتیشن تمرکز داره و بهتون یاد میده چطور با بهرهبرداری از مشکلات نرمافزاری مثل بافر اورفلو به سیستمها نفوذ کنید و چطور مشکلات امنیتی نرمافزارها رو پیدا کنید و ازشون استفاده کنید مخصوصا برای نفوذ به سیستمهای آسیبپذیر
#book
❤13🔥2👏1
بازیابی متادیتا از باینری های NET Native AOT
https://blog.washi.dev/posts/recovering-nativeaot-metadata/
Source: @PfkSecurity
https://blog.washi.dev/posts/recovering-nativeaot-metadata/
Source: @PfkSecurity
Washi
Recovering Metadata from .NET Native AOT Binaries
Ever seen a binary that looks like a .NET binary based on its strings, but .NET decompilers are not able to open them?
❤8👍1🔥1👏1
مراحل پیدا کردن باگ در اپلیکیشنها
1 جمعآوری اطلاعات:
بررسی ساختار برنامه dependencyها dllهای بارگذاریشده
2 رفتارشناسی دینامیک:
اجرای برنامه با ابزارهایی مثل x64dbg ، Procmon، Process Hacker
3 تحلیل استاتیک:
استفاده از IDA یا Ghidra برای بررسی کدها رشتهها
4 فاز کردن ورودیها (Fuzzing):
بررسی واکنش برنامه به ورودیهای ناسالم یا دستکاریشده
5 انالیز کرش و Debug:
دنبال کردن کرشها با WinDbg یا x64dbg برای بررسی مسیر باگ
6 ساخت POC یا اکسپلویت:
اگر باگی پیدا شد، یه کد برای اثباتش بساز
1 جمعآوری اطلاعات:
بررسی ساختار برنامه dependencyها dllهای بارگذاریشده
2 رفتارشناسی دینامیک:
اجرای برنامه با ابزارهایی مثل x64dbg ، Procmon، Process Hacker
3 تحلیل استاتیک:
استفاده از IDA یا Ghidra برای بررسی کدها رشتهها
4 فاز کردن ورودیها (Fuzzing):
بررسی واکنش برنامه به ورودیهای ناسالم یا دستکاریشده
5 انالیز کرش و Debug:
دنبال کردن کرشها با WinDbg یا x64dbg برای بررسی مسیر باگ
6 ساخت POC یا اکسپلویت:
اگر باگی پیدا شد، یه کد برای اثباتش بساز
❤10👏1🤣1
مثال عملی ساده
مثلا برنامهای داری که ورودی یوزر رو میگیره:
اینجا احتمال Buffer Overflow هست با یه فایل ساده حاوی رشتهی بلند برنامه کرش میکنه بعدش با x64dbg مسیر بازنویسی EIP رو دنبال میکنی و یه shellcode کوچیک تزریق میکنی
مثلا برنامهای داری که ورودی یوزر رو میگیره:
char buffer[100];
gets(buffer);
اینجا احتمال Buffer Overflow هست با یه فایل ساده حاوی رشتهی بلند برنامه کرش میکنه بعدش با x64dbg مسیر بازنویسی EIP رو دنبال میکنی و یه shellcode کوچیک تزریق میکنی
🔥3🥰1🤣1
Binary Exploitation معمولا توی سطح خیلی پایین سیستم اتفاق میافته یعنی باید با چیزایی مثل:
اسمبلی (Assembly)
ساختار حافظه مثل Stack و Heap
نحوهی کارکرد تابعها و برگشت از اونها
سیستمعاملها (مخصوصا لینوکس)
چندتا کاربرد مهم Binary Exploitation :
1 نوشتن اکسپلویت برای برنامههای آسیبپذیر
مثلا یه برنامه C داری که توش بافر اورفلو داره با ساختن یه ورودی خاص میتونید کاری کنید که اون برنامه به جای اجرای کد خودش کدی که شما نوشتی رو اجرا کنه
2 Capture the Flag (CTF)
توی مسابقات امنیتی چالشهای زیادی هست که با باینری اکسپلویت حل میشن این چالشها خیلی برای تمرین خوبن
3 تحلیل بدافزارها
گاهی بدافزارها با روشهایی مثل ROP یا تزریق کد سیستم رو الوده میکنن اگه Binary Exploitation بلد باشید بهتر میتونید عملکردشون رو بفهمید
اسمبلی (Assembly)
ساختار حافظه مثل Stack و Heap
نحوهی کارکرد تابعها و برگشت از اونها
سیستمعاملها (مخصوصا لینوکس)
چندتا کاربرد مهم Binary Exploitation :
1 نوشتن اکسپلویت برای برنامههای آسیبپذیر
مثلا یه برنامه C داری که توش بافر اورفلو داره با ساختن یه ورودی خاص میتونید کاری کنید که اون برنامه به جای اجرای کد خودش کدی که شما نوشتی رو اجرا کنه
2 Capture the Flag (CTF)
توی مسابقات امنیتی چالشهای زیادی هست که با باینری اکسپلویت حل میشن این چالشها خیلی برای تمرین خوبن
3 تحلیل بدافزارها
گاهی بدافزارها با روشهایی مثل ROP یا تزریق کد سیستم رو الوده میکنن اگه Binary Exploitation بلد باشید بهتر میتونید عملکردشون رو بفهمید
🔥7👍2❤1👏1🤣1
خیلیا در مورد buffer overflow سوال میپرسن و یا نمیدونن چیه خیلی ساده میگم که قشنگ درک کنید و بفهمید وقتی که ما بیشتر از ظرفیت buffer مینویسیم buffer overflow رخ میده که میتونه منجر به باگ یا حتی در مواقعی منجر به هک سیستم بشه
⚡10👏1
چند باگ که تو دنیای واقعی زیاد دیده میشه
Local buffer overflow باعث کرش برنامه یا اجرای کد میشه
Heap overflow منجر به خرابی ساختار هیپ و اجرای کد دلخواه میشه
ممکنه باعث کرش یا افشای اطلاعات Null pointer dereference
Format string bug گاهی باعث نوشتن روی حافظه حساس میشه
🔥4👍2🥰1
سناریوی عملی
فرض کن یه فایل اجرایی داری که ورودی رو میخونه و بعد باهاش کاری میکنه حالا تو این مسیر یه overflow داریم
مراحل کار:
1 پیدا کردن تابع آسیبپذیر با دیباگر (مثلا تابع strcpy)
2 بررسی محل کرش EIP / RIP بازنویسی شده؟
3 پیدا کردن فاصله از اول ورودی تا محل کنترل EIP
4 ساخت payload:
پر کردن فاصله با junk
اضافه کردن آدرس اجرای shellcode
تزریق یک shellcode ساده (مثلا اجرای Calculator)
فرض کن یه فایل اجرایی داری که ورودی رو میخونه و بعد باهاش کاری میکنه حالا تو این مسیر یه overflow داریم
مراحل کار:
1 پیدا کردن تابع آسیبپذیر با دیباگر (مثلا تابع strcpy)
2 بررسی محل کرش EIP / RIP بازنویسی شده؟
3 پیدا کردن فاصله از اول ورودی تا محل کنترل EIP
4 ساخت payload:
پر کردن فاصله با junk
اضافه کردن آدرس اجرای shellcode
تزریق یک shellcode ساده (مثلا اجرای Calculator)
👍5👏1
ابزارهایی که خیلی به دردمون میخورن
pattern_create.rb و pattern_offset.rb (از metasploit): برای پیدا کردن دقیق آفست EIP
mona.py توی Immunity Debugger: برای ساخت و آنالیز exploit
msfvenom: برای ساخت shellcode آماده
pattern_create.rb و pattern_offset.rb (از metasploit): برای پیدا کردن دقیق آفست EIP
mona.py توی Immunity Debugger: برای ساخت و آنالیز exploit
msfvenom: برای ساخت shellcode آماده
👍2🥰1