بخشی از پاورپوینت

--- پاورپوینت شامل تصاویر میباشد ----

اسلاید 1 :

بررسی روش های حمله به نرم افزارها

نرم افزارهای کاربردی

مروری بر حملات سرریز بافر

نرم افزارهای تحت وب

مروری بر حملات رایج (SQLi, XSS, Harvesting, …)

بررسی روش های کشف ضعف های امنیتی

 بازبینی کد (Source-code Audit)

Fuzzing & Fault-Injection

Binary Analyzing

بررسی روش های مقابله با حملات

سیستم های محافظتی موجود در سطح سیستم عامل و سخت افزار

سیستم های محافظتی ایجاد شده توسط نرم افزارهای جانبی

اسلاید 2 :

ضعف امنیتی در نرم افزار چیست ؟

منظور از Exploit کردن یک ضعف امنیتی  ؟

اهداف استفاده از ضعف های امنیتی نرم افزار

ایجاد اختلال در روال کار نرم افزار یا سیستم (DoS)

اجرای دستورالعملی خارج از روال معمول اجرای نرم افزار(Controling Software)

بدست گرفتن کنترل کامل نرم افزار یا سیستم عامل(Controling System)

nPayload چیست ؟

اسلاید 3 :

بررسی روال اجرای یک نرم افزار

اختصاص یک محدوده آدرس در حافظه برای بارگذاری دستورالعمل ها و اطلاعات لازم

بارگذاری سگمنت های تعریف شده در نرم افزار

.text  : حاوی دستورالعمل های  اجرایی برنامه

.bss  : حاوی اطلاعات و متغیر های تعریف نشده (uninitialized data)

.data  : حاوی اطلاعات و متغیر های تعریف شده (static initialized data)

اختصاص فضای Stack و Heap

اسلاید 4 :

سرریز بافر زمانی رخ میدهد که حجم اطلاعات کپی شده به بافر ، بیشتر از میزان مشخص شده برای بافر باشد.

 

اسلاید 5 :

#include <iostream.h>

#include <stdio.h>

#include <conio.h>

#include <stdio.h>

int Hijack()

{  cout << "This function should be hijacked!";

  getchar();

  return 0;   }

int Function1()

{  char var1[15];

  cout << "_________1234567890abcd" << endl;

  cout << "Enter Var1:";

  cin >> var1;

  cout << var1 << endl;

  return 0;    }

int main()

{  Function1();

  getchar();

  return 0; }

اسلاید 6 :

با استفاده از روش ذکر شده ، میتوان اقدام به اجرای کد و دستورات دلخواه نمود

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

به دستوراتی که برای اجرا در حافظه درج میشوند اصطلاحآ Payload گفته میشود

رعایت نکردن نکاتی همچون عدم استفاده از کاراکترهای خاص (0x00) باعث بروز مشکل خواهد شد

برای اینکه بتوانیم دستورات دلخواه خود را اجرا کنیم ، میبایست آدرس دقیق آنها را پس از درج در حافظه بدانیم

روال پیاده سازی حملات در واقعیت ، بسیار پیچیده تر و مشکل تر میباشد ~

اسلاید 7 :

از دید پردازنده ، تفاوتی میان دستورالعمل ها و داده ها وجود ندارد . ورودی داده شده درصورتی که دستور زبان ماشین معتبر باشد اجرا خواهد شد.

یکی از روش های تزریق Payload درحافظه ، ارسال آن در قالب پارامترهای ورودی نرم افزار میباشد

سرریز بافر میتواند هم در فضای Stack و هم در فضای Heap رخ دهد

بسته به محل وقوع سرریز (stack / Heap overflow) نحوه تغییر روال اجرای برنامه و پرش به محل Payload متفاوت بوده وتکنیک ها و روش های مختلفی برای هر حالت وجود دارد.

قابلیت بازنویسی EIP الزامی نیست ! در نظر داشته باشید که بازنویسی هر یک از ثبات ها میتواند در نهایت منجر به اجرای Payload گردد

اسلاید 8 :

روال پیاده سازی حملات در واقعیت ، بسیار پیچیده تر و مشکل تر میباشد:

آدرس های بارگذاری توابع و Dll ها بسته به هر نسخه نرم افزار ، سیستم عامل و حتی Service Pack  تغییر میکند

در برخی موارد ، آدرس ها و offset های ثابت که در تمامی نسخ یکسان هستند نیز وجود دارند

نیاز به آگاهی از آدرس دقیق دستورات درج شده (Payload) در حافظه

بر خلاف Linux ، تخمین آدرس دقیق Stack در ویندوز براحتی امکانپذیر نیست

استفاده از تکنیک Return-to-lib/dll

استفاده از NOP Sled

محدودیت در حجم دستوراتی که میتوان در بافر درج کرد

استفاده از بخش های مختلف حافظه که قابلیت تزریق در آنها وجود دارد ، و پرش بین آنها

استفاده از Payload های چند مرحله ایی

محدودیت در استفاده ازکاراکترهایی که در حافظه درج میگردد

شناسایی کاراکترهایی که پس از تزریق در حافظه دستکاری میشوند

Encode کردن Payload برای پرهیز از وجود کاراکترهای خاص

نحوه ارسال دستورات به نرم افزار

اسلاید 9 :

در زبان ماشین ، امکان مقدار دهی به EIP بصورت مستقیم وجود ندارد ( مقادیر سایر ثبات ها توسط دستوراتی چون JMP MOV CALL ... به EIP داده میشوند )

در مثالی که پیش از این ذکر شد ، با فرض اینکه ما امکان بدست آوردن آدرس دقیق Payload برای استفاده دربازنویسی EIP را در نداریم ، میبایست از مقدار بازنویسی شده سایر ثبات ها استفاده کنیم .

EBP بازنویسی شده ، پس باید به دنبال دستورالعملی باشیم که محتوای EBP را در EIP درج کند (JMP EBP)

قدم بعد ، بازنویسی EBP برای اشاره به آدرسی از حافظه است که در آن دستورالعمل JMP EBP وجود داشته باشد

نکته : توابع کتابخانه ایی پویا(DLL) همواره در آدرس های مشخصی از حافظه بارگزاری میشوند . در هر یک از DLL های موجود در حافظه ممکن است بخشی از دستورات ، دستورات مورد نظر ما باشد

ایده : جستجوی محدوده آدرس توابع کتابخانه ایی برای دستورالعمل مورد نظر ما ، و بدست آوردن آدرس (offset) آن دستورالعمل

استفاده از ابزارهایی مانند FindJump

بازنویسی EIP با 0x7c822cac محتویات EBP را در EIP بازنویسی میکند

بدین ترتیب بدون نیاز به درج آدرس Payload

بطور مسقیم در EIP ، آنرا اجرا میکنیم

nنتیجه : پایداری بیشتر در روال حمله

اسلاید 10 :

1EIP با آدرسی که به jmp ebd اشاره دارد بازنویسی میشود

2پردازنده به آدرس مراجعه کرده و دستور اجرا میشود

3محتویات EBP که به محل Nop Sled در حافظه اشاره دارد ، در EIP بازنویسی میشود

4پردازنده با توجه به EIP ، برای ادامه اجرای دستورات به آدرس Nop Sled مراجعه میکند

5پس از پایان Nop پردازنده به دستور پرش به Nop Sled دوم میرسد

6Nop Sled دوم اجرا شده و روال در نهایت به اجرای Payload ختم میگردد.

در متن اصلی پاورپوینت به هم ریختگی وجود ندارد. برای مطالعه بیشتر پاورپوینت آن را خریداری کنید