تمرین سری سوم امنیت شبکه های کامپیوتری-دانشگاه شهید بهشتی-ترم دوم ۹۳-۹۴

به نام خدا

تمرینات ‌Advanced Buffer Overflow & SandBoxing & Software Fault Isolation

استاد: دکتر مقصود عباسپور

کمک تدریس: جواد زندی

 

لطفا در ارسال تمرینات خود به نکات‌ مهم زیر توجه داشته باشید:

1- مهلت این سری تمرینات تا ۸اردیبهشت قبل از کلاس استاد درس می‌باشد.

2- نحوه تحویل تمرینات شما به دو صورت می‌تواند باشد:

الف) تمریناتی که به صورت سوالات تحلیلی و تعریفی و مسله ای است به صورت خوانا دستی روی کاغذ بنویسید و برگه خود را تحویل اینجانب دهید. در مورد برگه‌های تمرین خود دقت داشته باشید که حتما نام و شماره دانشجویی را بالای برگه‌ی خود بنویسید.

3- همه‌ی دوستان دقت داشته باشند که تصمیم‌گیری در مورد تمرینات یکسان برعهده استاد درس خواهد بود و حل‌تمرین موظف به نوشتن گزارش تخلف و ارایه آن به استاد درس می‌باشد.

4- از آنجایی که پاسخ‌های شما بادقت صحیح‌می‌شود، ایده‌های‌خلاقانه و پاسخ‌های هوشمندانه در حل‌سوالات طبیعتا نمره‌ای فراتر از تمرین دارد.

5- در مورد تمرینات این سری تحویل‌ها با کمی جزیات همراه می‌باشد. لطفا در ارایه تمرینات خود به آنها توجه نمایید. این جزیات در خود سوال حتما قید خواهد شد.

برای مشاهده سوالات به ادامه مطلب بروید.

سوالات مفهومی:

1- ابتدا تکنیک SandBox را در یک خط شرح دهید و سپس بگویید منظور از قابلیت sandbox در آنتی ویروس‌های رایجی مثل Kaspersky، Avast  و… چیست؟ به عبارت دیگر، این قابلیت چه امکانی به این آنتی ویروس‌ها می‌دهد؟

2- در ابتدا توضیح دهید که یک SandBox چگونه طراحی و پیاده‌سازی می‌شود(کلیات را قید کنید). حال که ساختار SandBox را می‌شناسید به عنوان مهندس امنیت اطلاعات به پرسش زیر پاسخ دهید:

توسط SandBox مشاهده شده که برنامه رفتار خوبی از خود نشان‌ داده است، آیا می‌توان نتیجه گرفت که برنامه مورد آزمایش مخرب نیست؟          -اگر پاسخ شما خیر است باید توضیح دهید: ۱-چطور امکان‌پذیر است؟ ۲-پس علت استفاده از SandBox چیست؟

-اگر بلی است باید توضیح دهید چرا چنین اعتمادی درست است؟

3- در کلاس حل‌تمرین به تفصیل در مورد روش‌های آنالیز static و dynamic صحبت کردیم، اکنون بگویید که:

i. چه زمانی یک تحلیل‌گر روش static  در کار خود(static analysis) ناکام مانده و به سراغ روش dynamic می‌رود؟

ii. به‌نظر شما چرا تحلیل‌گر روش static برای تحلیل dynamic از SandBox استفاده می‌کند؟ آیا گزینه‌های بهتری وجود دارد؟

4- ابزار‌های زیر همگی برای محدود کردن خطاهای نرم‌افزارها(Software Fault Isolation) استفاده می‌شود:

i. Chroot

ii. jail

iii. Ptrace

iv. Systrace

v. Strace

vi. Sandbox

برای هرکدام توضیح دهید آنها چه دسته از خطاها را مهار کرده و ایراد هرکدام در چه چیزی می‌باشد؟

5- در مورد تکنیک روش canary در کلاس درس آشنا شدید. تکنیک canary اصولا به چند دسته تقسیم می‌شود؟ هرکدام را شرح دهید. همچنین بگویید:

i. آیا حملاتی وجود دارد که بتواند تکنیک canary را دور بزند؟ اگر وجود دارد راه‌های دفاع در برابر آنها را ذکر کنید.

ii. آیا حملاتی وجود دارد که تکنیک canary نتواند جلوی آنها را بگیرد؟

 

 

 

سوالات عملی:

توجه: برای سریعتر انجام‌شدن تمرینات عملی بهتر است به نکات زیر توجه داشته باشید:

o در مورد تمرین ASLR حتما باید ابتدا دستور زیر را اجرا کرده تا ASLR سیستم شما فعال گردد:

echo 1 > /proc/sys/kernel/randomize_va_space

در صورتی که تسلط کافی برروی این روش ندارید می‌توانید ویدیوی زیر را که از سایت یوتیوب انتخاب‌شده است مشاهده بفرمایید تا مشکل شما حل شود.

o در مورد تمرینات SandBox باید به نکات زیر توجه کنید:

دسته‌ای از SandBox ها تجاری هستند(Node32, Kaspersky, …) و شما برای استفاده از آنها مجبور نیستید یک نسخه از آنها را نصب نمایید. می‌توانید با مراجعه به سایت تحلیل ویروس جامع مراجعه فرمایید.

دسته‌ای از SandBox ها متن‌باز و رایگان است. شما می‌توانید یک نسخه‌ از آنها را (مثلا cuckoo) با استفاده از راهنمای آن برروی سیستم خودتان نصب بفرمایید(که این مورد توصیه می‌شود.) یا اینکه از نسخه‌های آنلاین آنها استفاده نمایید.

o برنامه‌های قابل اجرای موجود در پیوست را اکیدا توصیه می‌کنم روی سیستم خودتان اجرا ننماید. آنها به شدت خطرناک هستند. در صورتی که این تذکر را نادیده بگیرید، عواقب آن به عهده خودتان خواهد بود.

 

1- در این سوال حتما ابتدا ASLR را با مقدار 1 فعال کرده و سپس به سوال زیر پاسخ دهید:

#include <time.h>

#include <stdlib.h>

void stringMirorring();

void runOnExploit();

int main () {

                stringMirorring ();

                return 0;

}

void FeedMeInput() {

char buffer[8];

gets(buffer);

puts(buffer);

}

void runOnExploit () {

printf(“You have exploit me successfully!\n”);

}

I. (بدون دستکاری کد برنامه) برای برنامه‌ی فوق ورودی طراحی نمایید که تابع runOnExploit اجرا شود.

II. برای تابع فوق ورودی طراحی نمایید که تابع exit اجرا شود.

III. آیا می‌توانید ورودی طراحی نمایید که اول تابع runOnExploit اجرا شود و سپس تابع اصلی exit اجرا شود؟

2- حال که نوشتن shellcode را آموخته‌اید، اکنون shellcode ای بنویسید که برنامه‌ی موجود در مسیر /bin/sh را اجرا نماید(بنابراین باید از فراخوانی execve استفاده نمایید). بعد از اینکه shellcode را نوشتید ASLR سیستم‌تان را با مقدار 1 مقداردهی کرده و سپس برنامه‌ی زیر را توسط shellcode خودتان exploit کنید.

int main (int argc, char *argv[]) {

        char buffer [10];

        if (argc>1)

strcpy (buffer, argv[1]);

                return 0;

}

3- برنامه‌ی شماره‌ی سه را از سیستم درس‌افزار از قسمت پیام‌های شخصی خودتان دانلود کنید. این برنامه را درون SandBox اجرا کنید و سپس اطلاعات زیر را استخراج نماید.

o برنامه مخرب است یا نه؟

o با چه فایل‌هایی سروکار دارد؟ (لیست فایل‌های بازشده توسط برنامه)

o کدام رجیسترها را در رجیستری ویندوز (می‌توانید تغییرات را با regedit ببینید) تغییر می‌دهد؟

o از چه کتابخانه‌هایی(.dll) استفاده می‌کند؟

o آیا فعالیت شبکه دارد؟ اگر دارد به چه domain(یا ip) اطلاعات می‌فرستد؟ اگر مدعی هستید اطلاعتی ارسال می‌کند آنها را ضبط کنید و در پیوست پاسخ تمرین قرار دهید.

o برنامه‌ی فوق درواقع چه کاری انجام می‌دهد؟

4- برنامه‌ی چهار سه را از سیستم درس‌افزار از قسمت پیام‌های شخصی خودتان دانلود کنید. این برنامه را درون SandBox اجرا کنید و سپس اطلاعات زیر را استخراج نماید.

o برنامه مخرب است یا نه؟

o با چه فایل‌هایی سروکار دارد؟ (لیست فایل‌های بازشده توسط برنامه)

o کدام رجیسترها را در رجیستری ویندوز (می‌توانید تغییرات را با regedit ببینید) تغییر می‌دهد؟

o از چه کتابخانه‌هایی(.dll) استفاده می‌کند؟

o آیا فعالیت شبکه دارد؟ اگر دارد به چه domain(یا ip) اطلاعات می‌فرستد؟ اگر مدعی هستید اطلاعتی ارسال می‌کند آنها را ضبط کنید و در پیوست پاسخ تمرین قرار دهید.

o برنامه‌ی فوق درواقع چه کاری انجام می‌دهد؟

   

Trackback from your site.

Leave a comment