پاورپوینت مروری بر مشکلات امنیتی نرم افزارها (pptx) 57 اسلاید
دسته بندی : پاورپوینت
نوع فایل : PowerPoint (.pptx) ( قابل ویرایش و آماده پرینت )
تعداد اسلاید: 57 اسلاید
قسمتی از متن PowerPoint (.pptx) :
مروری بر مشکلات امنیتی نرم افزارها
2
مواردی که به آنها خواهیم پرداخت
بررسی روش های حمله به نرم افزارها
نرم افزارهای کاربردی
مروری بر حملات سرریز بافر
نرم افزارهای تحت وب
مروری بر حملات رایج (
SQLi, XSS, Harvesting, …
)
بررسی روش های کشف ضعف های امنیتی
بازبینی کد (
Source-code Audit
)
Fuzzing & Fault-Injection
Binary Analyzing
بررسی روش های مقابله با حملات
سیستم های محافظتی موجود در سطح سیستم عامل و سخت افزار
سیستم های محافظتی ایجاد شده توسط نرم افزارهای جانبی
3
حمله به نرم افزار – نرم افزارهای کاربردی
ضعف امنیتی در نرم افزار چیست ؟
منظور از
Exploit
کردن یک ضعف امنیتی ؟
اهداف استفاده از ضعف های امنیتی نرم افزار
ایجاد اختلال در روال کار نرم افزار یا سیستم (
DoS
)
اجرای دستورالعملی خارج از روال معمول اجرای نرم افزار(
Controling Software
)
بدست گرفتن کنترل کامل نرم افزار یا سیستم عامل(
Controling System
)
Payload
چیست ؟
4
نرم افزارهای کاربردی – حملات سرریز بافر
بررسی روال اجرای یک نرم افزار
اختصاص یک محدوده آدرس در حافظه برای بارگذاری دستورالعمل ها و اطلاعات لازم
بارگذاری سگمنت های تعریف شده در نرم افزار
.text
: حاوی دستورالعمل های اجرایی برنامه
.bss
: حاوی اطلاعات و متغیر های تعریف نشده
(
uninitialized data
)
.data
: حاوی اطلاعات و متغیر های تعریف شده
(
static initialized data
)
اختصاص فضای
Stack
و
Heap
5
نرم افزارهای کاربردی – حملات سرریز بافر
سرریز بافر زمانی رخ میدهد که حجم اطلاعات کپی شده به بافر ، بیشتر از میزان مشخص شده برای بافر باشد.
#include
Int main (int arge , char **argv)
{
char
target[
5
]
=
“
AAAA”
strcpy(target, “
AAAAA
BBBBCCCC
”);
Printf(“%\n”,target”);
Return 0;
}
6
نرم افزارهای کاربردی – حملات سرریز بافر
بررسی یک کد آسیب پذیر به
Stack Overflow
#include
#include
#include
#include
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; }
EIP
Main()
Hijack()
1 2 3 4 5 . . .
. . . . A B C D
7
نرم افزارهای کاربردی – حملات سرریز بافر
اتفاقی که پس از سرریز بافر رخ میدهد
:
تخریب روال اجرا
EIP (
BCDE
)
Main()
Hijack()
1 2 3 4 5 . . .
. . . . . 0 1 2 3 4 5 6
EBP (
AAAA
)
8
نرم افزارهای کاربردی – حملات سرریز بافر
استفاده از قابلیت تغییر
EIP
برای کنترل نرم افزار وفراخوانی توابعی که در روال اجرای معمولی برنامه , فراخوانی نمیشوند
EIP (
00401050
)
Main()
Hijack()
1 2 3 4 5 . . .
. . . . . 0 1 2 3 4 5 6
EBP (
AAAA
)
9
نرم افزارهای کاربردی – حملات سرریز بافر
با استفاده از روش ذکر شده ، میتوان اقدام به اجرای کد و دستورات دلخواه نمود
با توجه به اینکه داده های ارسالی ما مستقیمآ در حافظه درج میشوند ، دستورات می بایست به زبان ماشین باشد.
به دستوراتی که برای اجرا در حافظه درج میشوند اصطلاحآ
Payload
گفته میشود
رعایت نکردن نکاتی همچون عدم استفاده از کاراکترهای خاص (
0x00
) باعث بروز مشکل خواهد شد
برای اینکه بتوانیم دستورات دلخواه خود را اجرا کنیم ، میبایست آدرس دقیق آنها را پس از درج در حافظه بدانیم
روال پیاده سازی حملات در واقعیت ، بسیار پیچیده تر و مشکل تر میباشد
~
10
نرم افزارهای کاربردی – حملات سرریز بافر
از دید پردازنده ، تفاوتی میان دستورالعمل ها و داده ها وجود ندارد . ورودی داده شده درصورتی که دستور زبان ماشین معتبر باشد اجرا خواهد شد.
یکی از روش های تزریق
Payload
درحافظه ، ارسال آن در قالب پارامترهای ورودی نرم افزار میباشد
سرریز بافر میتواند هم در فضای
Stack
و هم در فضای
Heap
رخ دهد
بسته به محل وقوع سرریز (
stack / Heap overflow
) نحوه تغییر روال اجرای برنامه و پرش به محل
Payload
متفاوت بوده وتکنیک ها و روش های مختلفی برای هر حالت وجود دارد.
قابلیت بازنویسی
EIP
الزامی نیست ! در نظر داشته باشید که بازنویسی هر یک از ثبات ها میتواند در نهایت منجر به اجرای
Payload
گردد
EIP (
0x{Payload Offset}
)
Main()
Hijack()
1 2 3 4 5 . . .
[Injected Payload]
. . . . . 0 1 2 3 4 5 6
EBP (
AAAA
)
0x00