You are on page 1of 27

‫امنیت نرم افزار‬

‫راهنمای کد نویسی امن‬

‫مهرداد یزدی زاده‬

‫مرداد ‪1396‬‬
‫مقدمه‬

‫هدف از تهیه این مستند ارائه راهکارهایی جهت تولید نرم افزار امن میباشد‪ ،‬در این مستند به بررسی انواع آسیب پذیری ها و حمالت مطرح‬
‫نرم افزاری و همچنین راه کار های مقابله با آنها میپردازیم‪ .‬در ابتدا به موضوعاتی مانند امنیت در سطح ‪ ، memory‬دفاع در برابر حمالت سطح‬
‫پایین‪ ،‬امنیت در وب‪ ،‬طراحی و ساخت نرم افزار امن‪ ،‬و در بخش های پایانی به آنالیز استاتیک‪ ,‬و آزمون نفوذ سنجی ‪ pen test‬میپردازیم‪.‬‬

‫مفهوم امنیت نرمافزار شامل حفاظت از سیستمهای عامل و برنامههای کاربردی سازمان از دستیابی غیرمجاز میباشد‪ .‬منظور از دستیابی غیر‬
‫مجاز هرگونه سوء استفاده‪ ،‬تغییرات و حذف عمدی یا غیرعمدی است‪ .‬چنانچه در برنامهها یا نرم افزارها به اندازه کافی به مسائل امنیتی توجه شده‬
‫باشد‪ ،‬رایانهها چه از جنبههای سختافزاری و چه از جنبههای نرمافزاری قابلیت محافظت از خود را دارند‪ .‬رایانهها با اجرای چنین نرمافزارهای امنی از‬
‫خود و اطالعات ذخیره شده محافظت خواهند نمود و این امر نقش مهمی دراعمال شیوههای امنیتی مراکزی دارد که دارای سیستمهای رایانهای هستند‪.‬‬
‫هرچه برنامهها و سیستمها‪ ،‬پیچیدهتر و بزرگتر باشند نیاز به اعمال شیوههای کنترل دسترسی و ایمنسازی نرمافزارها بیشتر احساس میشود‪.‬‬
‫گسترش روزافزون استفاده از رایانههای شخصی و دسترسی آسان به شبکههای رایانهای نیز‪ ،‬بر ضرورت تهیه و اجرای برنامه­هایی که به نکات ایمنی‬
‫توجه الزم و کافی را مبذول داشته باشند‪ ،‬میافزاید‪ .‬معیارهای سنجش میزان ایمنی سیستم بایستی به گونهای طراحی شوند که اجزای سختافزاری‬
‫ونرمافزاری هر یک بطور جداگانه قابل بررسی باشند‪ .‬طراحی صحیح نرمافزار در کنترل انواع اطالعاتی که کاربر مجاز است به آن دسترسی داشته‬
‫باشد‪ ،‬نقش مهمی ایفا میکند‪.‬‬
‫فهرست مطالب‬
‫صفحه‬ ‫عنوان‬

7 ................... ................................ ................................ ................................ MEMORY ‫حمالت مربوط به‬ 1-


7 ................................................................................................................................................................. nop sleds 1-1
7 ......................................................................................................Return Oriented Programming - ROP 1-2
8 .................................................................................................................................................... Buffer Overflow 3-1
8 .....................................................................................................................................................On the stack 1-3-1
9 .....................................................................................................................................................On the heap 1-3-2
9 ..............................................................................................................................................Integer overflow 1-3-3
10...................................................................................................................Format String Vulnerabilities 1-3-4
11...........................................................................................................................................Dangling pointer 1-3-5
12 ......... ................................ ................................ ................................ MEMORY ‫دفاع در برابر حمالت‬ -2
12.................................................................................................................Data execution prevention 2-1
12.......................................................................................................................(No-eXecute bit) N/X-bit 2-2
12......................................................................................................................................... Stack Canaries 3-2
13.........................................................................ASLR (Address space layout randomization) 4-2
13...........................................................................................................................Control Flow Integrity 2-5
14...........................................................................................................Memory ‫یافتن آسیب پذیری های‬ 6-2
14..................................................................................safe programming patterns and libraries 7-2
15 ........................ ................................ ................................ ................................ SECURE CODING -3
15.................. ‫تمرکز بر مرور ساز و کارهای مقابله با سؤاستفاده از آسیب پذیری های حافظه در زمان اجرا‬ 3-1
16 ........................................................................................................................................................‫لینک های مفید‬ 2-3
16 ..............................................................................................................................‫نکات امنیتی مربوط به کلید ها‬ 3-3

17 ...................................... ................................ ................................ ................................ WEB ‫امنیت در‬ 4-


18.......................................................................................................................................................SQL Injection 4-1
19.....................................................................................................................................................Sanitization 4-1-1
19..................................................................................................................................Prepared statements 2-4
19.....................................................................................................................................................Taint checking 4-3
20..................................................................................................................................................................... cookie 4-4
20............................................................................................................................................. Session Hijacking 5-4
21........................................................................................................Cross-site Request Forgery - CSRF 4-6
21............................................................................................................................XSS: Cross site scripting 7-4
22............................................................................................................................................................Javascript 8-4
23.......................................................................................................................................................Fuzz Testing 9-4
23............................................................................................................................................................Metasploit 10-4
25 ....................... ................................ ................................ ................................ ‫ابزار های آنالیز استاتیک‬ -5
25....................................................................................................................................... Symbolic execution 5-1
25.........................................................................................................................................Symbolic variables 2-5
26 ..................................................................................................................................Symbolic expressions 3-5
27 .............. ................................ ................................ ................................ ................................ ‫جمع بندی‬ -6
Memory ‫ حمالت مربوط به‬-1
.‫) میشود‬RAM( ‫امنیت حافظه یک نگرانی در توسعه نرمافزار است که باعث آسیب پذیریهای امنیتی مربوط به دسترسی حافظه‬
:‫ شامل‬Memory ‫انواع حمالت مربوط به‬
 nop sleds
 Buffer Overflow
 Format string attack
 Return-oriented Programming (ROP)

nop sleds 1-1

.‫ به مقصد مورد نظر خود هدایت میکنند‬Padding ‫ را با استفاده از‬CPU ‫در‬%eip ، »‫دستورالعمل هایی که به منظور «اجرای اسکریپت مخرب‬
1 3

Return Oriented Programming - ROP 2-1

‫ به این‬.‫یک شیوهی سوء استفاده از امنیت رایانه است که به مهاجم اجازه میدهد در حضور راهحلهای دفاعی مانند امضای کد به اجرای کد مخرب بپردازد‬
.‫ترتیب که مهاجم کنترل فراخوانی پشته را به دست میگیرد و جریان کنترل برنامهها را میرباید و سپس دستورات ماشین مورد نظر خود را به اجرا درمیآورد‬

‫راه های جلوگیری‬ ‫حمالت‬

Make stack/heap nonexecutable to prevent injection of Jump/return to libc


code

Hide the address of desired libc code or return address Brute force search (for 32-bit systems) or information
using ASLR leak (format string vulnerability)

Avoid using libc code entirely and use code in the Construct needed functionality using return oriented
program text instead programming (ROP)

Randomizing the location of the code (by compiling for Blind ROP
position independence) on a 64-bit machine makes 1.Read the stack to leak canaries and a return address
attacks very difficult 2.Find gadgets (at run-time) to effect call to write!
3.Dump binary to find gadgets for shellcode
‫‪Buffer Overflow 3-1‬‬
‫سرریز بافر‪ ،‬هنگامی که برنامه در حال نوشتن دادهها به بافر است‪ ،‬از مرز بافر تخطی میکند و باعث رونویسی حافظه مجاور میشود‪.‬‬
‫مراحل سر ریزی بافر به صورت کلی به شکل زیر میباشد‪:‬‬
‫‪ ‬قرار دادن کد مخرب در حافظه(بدون مقدار صفر)‬
‫‪ ‬پیدا کردن ‪ %eip‬و هدایت کردن آن به نحوی که کد مخرب اجرا شود‬
‫‪ ‬پیدا کردن آدرس بازگشت (حدس از طریق آدرس خام)‬

‫انواع ‪ Buffer Overflow‬شامل‪:‬‬


‫‪) Stack-based Buffer Overflow ( 1‬سرریز بافر در پشته(‬
‫‪) Heap-based Buffer Overflow ( 2‬سرریز بافر در هیپ(‬
‫‪) Dangling Pointer Reference ( 3‬اشاره گرهای معلق(‬
‫‪) Format String Vulnerabilities ( 4‬رشته های قالب بندی(‬
‫‪) Integer Overflow ( 5‬سرریز مقدار عددی(‬

‫حمالت‪:‬‬
‫‪ (Code Corruption ( 1‬تخریب کد(‬
‫‪ (Control-flow Hijack ( 2‬ربایش جریان کنترل(‬
‫‪ (Data-only Attack ( 3‬حمالت داده ای(‬
‫‪ (Information Leak ( 4‬نشت اطالعات(‬
‫‪ (Denial of Service / Availability ( 5‬منع خدمات(‬

‫‪On the stack 1-3-1‬‬

‫در مبحث نرمافزار‪ ،‬سرریز بافر پشته وقتی اتفاق میافتد که یک برنامه‪ ،‬اطالعاتی را در آدرسی خارج از ساختمان داده مورد نظرش (معموالً بافری با اندازه‬
‫ثابت) که در پشته فراخوانی برنامه قرار دارد‪ ،‬مینویسد‪ .‬ظرفیت بافرهای با اندازه ثابت‪ ،‬از قبل و در زمان کامپایل تعیین شده است و در صورتی که اطالعاتی‬
‫بیشتری در آنها نوشته شود‪ ،‬سرریز خواهند شد و اینگونه باگها را بوجود خواهند آورد‪ .‬اگر این بافر در پشته برنامه قرار داشته باشد‪ ،‬ممکن است باعث بوجود‬
‫آمدن حمالت سرریز بافر پشته شود‪ .‬نتیجه این عمل خراب شدن و آسیب دیدن اطالعات مجاور آن بافر در پشته است و در صورتی که این سرریز به طور‬
‫ناخواسته و بر اساس یک اشتباه بوجود آمده باشد‪ ،‬اغلب یا باعث میشود که برنامه کرش کند یا اینکه به صورت نادرست رفتار کند‪ .‬این نوع سرریز‪ ،‬بخشی از‬
‫دسته بزرگتری از باگهای برنامهنویسی به نام سرریز بافر است‪.‬‬

‫اگر برنامهای که دچار سرریز بافر پشته شده‪ ،‬با امتیازها و دسترسیهای باالیی اجرا شده باشد‪ ،‬یا اگر برنامه اطالعاتی را از میزبانهای شبکه غیر قابل اطمینان‬
‫دریافت کند (همانند یک وب سرور)‪ ،‬این باگ میتواند یک آسیبپذیری امنیتی بالقوه محسوب شود‪ .‬اگر بافر موجود در پشته با اطالعاتی از طرف یک کاربر‬
‫غیر قابل اطمینان پر شود‪ ،‬آن کاربر میتواند کدهایی با قابلیت اجرا شدن را در پشته برنامه تزریق کرده و سپس کنترل برنامه را در دست بگیرد‪ .‬این نوع‬
‫حمله‪ ،‬یکی از قدیمیترین و قابل اتکاترین حمالتی است که مهاجمین و خرابکاران از آن برای بدست آوردن دسترسی غیر مجاز به رایانه استفاده میکنند‪.‬‬
‫روشهایی برای مقابله با این نوع حمالت وجود دارد که از جمله آنها‪ ،‬استفاده نکردن از توابعی همچون ‪ strcpy‬و ‪ gets‬است‪ .‬این توابع حدود بافر را بررسی‬
‫نمیکنند و امکان دارد در آدرسی خارج از محدوده بافر‪ ،‬اطالعات را بنویسند‪.‬‬
‫‪STRCPY ⟹ STRLCPY‬‬
‫‪STRNCAT ⟹ STRLCAT‬‬
‫‪STRNCPY ⟹ STRLCPY‬‬ ‫راه های جلوگیری‬
‫‪SPRINTF ⟹ SNPRINTF‬‬
‫‪VSPRINTF ⟹ VSNPRINTF‬‬
‫‪GETS ⟹ FGETS‬‬
‫‪Stack canaries‬‬ ‫‪‬‬
‫‪MICROSOFT VERSIONS DIFFERENT‬‬ ‫‪Nonexecutable stack‬‬ ‫‪‬‬
‫‪STRCPY_S, STRCAT_S‬‬
‫‪STRCAT ⟹ STRLCAT‬‬
‫‪Randomization‬‬ ‫‪‬‬
‫استفاده از توابع امن به جای توابع خطرناک‬ ‫‪‬‬
‫‪On the heap 1-3-2‬‬

‫سرریز هیپ یک نوع سرریز بافر میباشد که در ناحیه دادههای هیپ (‪ )heap‬رخ میدهد‪ .‬سرریز هیپ به شیوههای متفاوت بنابر سرریزهای مبتنی بر استک‬
‫بهره برداری (استخراج) میشود‪ .‬حافظه در هیپ به صورت پویا در زمان اجرا توسط برنامه تخصیص داده میشود و به طور کلی شامل دادههای برنامه میباشد‪.‬‬
‫استثمار با تخریب کردن دادهها در روشهای خاص برای ایجاد برنامههای کاربردی به منظور بازنویسی ساختارهای داخلی مثل اشاره گر لیست پیوندی انجام‬
‫میشود‪ .‬تکنیک سرریز هیپ استاندارد‪ ،‬بر روی حافظه پویایی که به صورت پیوندی اختصاص داده میشود (مانند دادههای متا) رونویسی میشود و با استفاده‬
‫از نتایج معاوضه اشاره گر‪ ،‬یک اشاره گر تابع برنامه را بازنویسی میکند‪.‬‬

‫یک مثال نمونه بر روی لینوکس این است که دو بافردر کنار یکدیگر بر روی هیپ اختصاص داده میشود‪ .‬نوشتن فراتر از مرز اولین بافر اجازه میدهد که‬
‫دادههای متا را در بافر دوم بازنویسی کنیم‪ .‬بیت مورد استفاده از بافر دوم را به صفر تنظیم میکنیم و طول را نیز به یک مقدار منفی که اجازه میدهد بایتهای‬
‫تهی (‪ )null‬کپی شوند‪ ،‬تنظیم میکنیم‪ .‬وقتی که برنامه تابع ‪ )(free‬را بر روی بافر اول اجرا میکند‪ ،‬آن تالش خواهد کرد که دو بافر را در یک بافر ادغام کند‪.‬‬
‫هنگامی که این اتفاق میافتد‪ ،‬بافری که آزاد فرض میشود‪ ،‬انتظار میرود که دو اشاره گر ‪ FD‬و ‪ BK‬را در هشت بایت اول بافری که قبالً اختصاص داده شده‬
‫است نگه دارد‪ .‬اشاره گر ‪ BK‬به روی ‪ FD‬مینویسد و میتواند برای بازنویسی یک اشاره گر استفاده شود‪ .‬به هر حال به دالیل مختلف این دیگر امکان پذیر‬
‫نیست‪.‬‬

‫حمالت‪:‬‬
‫‪Overflow into the C++ object vtable‬‬
‫‪Overflow into adjacent objects‬‬
‫‪Overflow heap metadata‬‬

‫راه های جلوگیری‪:‬‬


‫‪ ‬جلوگیری از اجرای ‪ payload‬با جدا کردن کد و دادهها‪ ،‬به طور معمول با ویژگیهای سخت افزاری مانند ‪ NX-bit‬در سیستمهای مدرن‪.‬‬
‫‪ ‬معرفی تصادفی به طوری که هیپ در یک آفست ثابت ایجاد نشود‪ASLR (Address Space Layout Randomization) .‬‬
‫‪ Sanity Check ‬در مدیریت هیپ‪.‬‬
‫)‪Data Execution Prevention (DEP‬‬ ‫‪‬‬

‫‪Integer overflow‬‬ ‫‪1-3-3‬‬

‫در برنامهنویسی‪ ،‬سرریز عدد صحیح هنگامی رخ میدهد که نتیجه یک عمل محاسباتی مقدار عددی بزرگی است که از محدوده مجاز قابل پردازش فراتر است‪.‬‬
‫مثالً افزودن عدد ‪ 1‬به بزرگترین عدد قابل نمایش سبب این نوع سرریز میشود‪ ،‬و معمولترین نتیجهای که سیستم بروز میدهد کوچکترین عدد قابل نمایش‬
‫است (در انگلیسی به این رخداد اصطالحاً ‪ wraparound‬میگویند)‪ .‬در برخی پردازشگرها مثل واحد پردازشگر گرافیکی و پردازشگر سیگنال دیجیتال نتیجه‬
‫به اشباع رسانده میشود‪ ،‬یعنی وقتی به بزرگترین عدد برسیم‪ ،‬نتیجه تالش برای بزرگتر کردن آن‪ ،‬برگردانده شدن همان بزرگترین عدد قابل نمایش است‪.‬‬
‫طبق استاندارد ایزو سی‪ 99‬سرریز عدد صحیح سبب «رفتار تعریفنشده» میشود‪ ،‬این یعنی کامپایلرها میتوانند کامالً آن را نادیده بگیرند یا حتی برنامه را‬
‫متوقف کنند‪ .‬اغلب کامپایلرها از این مشکل چشمپوشی میکنند‪ ،‬و نتیجهای غیرمنتظره یا غلط برمیگردانند‪ .‬سرریز عدد صحیح میتواند در حاالتی به سرریز‬
‫بافر منجر شود‪.‬‬

‫حمالت‪:‬‬
‫‪ (Width\Type mismatch overflow ( 1‬عدم تطبیق اندازه ‪ /‬نوع)‬
‫‪ (Arithmetic overflow ( 2‬سرریز محاسباتی)‬
‫‪ (Signedness Bugs ( 3‬عدم تطبیق عالمت)‬
‫‪Format String Vulnerabilities 1-3-4‬‬
‫در برنامه نویسی سی برای چاپ یک استرینگ ‪ ،‬عدد یا یک کاراکتر از یک سری پترن های خاص استفاده می کنیم ‪.‬‬
‫این پترن ها شامل استرینگ ‪ ، s%‬عدد صحیح ‪ d%‬و ‪ ...‬میباشد ‪ ،‬به عنوان مثال ‪ Printf‬از جمله توابعی است که از محدوده استک تجاوز میکند و میتواند‬
‫باعث آشکار شدن اطالعات حساس گردد‪.‬‬
‫در صورتی که هنگام گرفتن خروجی پترن آنرا به ترتیبی که ذکر شد ‪ ،‬وارد نکنیم ‪ ،‬به ازای هر ورودی مقادیری از حافظه بصورت تصادفی بر میگرداند که‬
‫باعث نشد اطالعات حساس و کلید های رمز نگاری و ‪ ...‬میشود‪.‬‬
‫توابع آسیب پذیر عبارتند از ‪vsnprintf ،vsprintf ،vprintf ،vfprintf ،snprintf ، sprintf ، printf ،fprint :‬‬

‫راه های جلوگیری‬


‫پنهان سازی آدرس کد کتابخانه ایی یا آدرس برگشت با استفاده از ‪ASLR‬‬ ‫‪‬‬
‫‪FLOW ANALYSIS‬‬ ‫‪‬‬

‫مثال در صورتی که مهاجم در قطعه کد زیر مقدار ”‪ NAME = “%S%S%S‬قرار دهد برنامه ‪ CRASH‬میکند‪.‬‬
‫مثال در صورتی که مهاجم در قطعه کد زیر مقدار ”…‪ NAME = “…%N‬قرار دهد میتواند در ‪ MEMORY‬درج انجام دهد که منجر به ‪EXPLOIT‬‬
‫میشود‪.‬‬
‫!;)‪char *name = fgets(…, network_fd‬‬
‫‪printf(name);! // Oops‬‬
‫‪Dangling pointer‬‬ ‫‪1-3-5‬‬

‫اشارهگر های معلق در زبانهای برنامه نویسسی اشاره گرهایی که به یک شی مشخص اشاره نمیکنند‪ .‬شرایط مختلفی به وجود میاید که سالمت کد را به خطر‬
‫میندازد‪ .‬اشارهگر معلق زمانی به وجود میآید که یک شی حذف یا آزادسازی میشود‪ ،‬بدون اینکه مقدار یک اشارهگر تغییر داده شده باشد‪ .‬در نتیجه آن‬
‫اشارهگر به مکانی اشاره میکند که دیگر وجود ندارد‪ .‬حتی ممکن است سیستم مکان قبلی حافظه که ازاد شده بود را به فرایند دیگری داده باشد‪ ،‬در این‬
‫صورت ان اشارهگر به دادهای متفاوت اشاره میکند‪ .‬بیشتر زمانی این اتفاق میفتدکه برنامه سعی میکند دادههایی روی حافظه بنویسد‪ .‬در این صورت ممکن‬
‫است برنامه اطالعاتی را تغییر میدهد و باعث بروز باگهایی در خود ان برنامه یا برنامه های دیگر شود که تشخیص ان کار سادهای نیست‪.‬‬
‫اشارهگر های معلق زمانی به وجود میایند که یک اشارهگر قبل از مقداردهی اولیه یک متغیر به وجود میاید‪ .‬ممکن است در یک زبان برنامه نویسی این اتفاق‬
‫میفتد در این صورت احتمال خطایابی و رفع ان بیشتر میشود‪.‬‬

‫راه های جلوگیری‬


‫استفاده از یک تابع جایگزین برای ‪ FREE‬یا استفاده از تابع ‪ DELETE‬در زمان مناسب است‪.‬‬ ‫‪‬‬
‫در صورتی که سیستم عامل اشارهگر آزاد کرد آنرا را برابر ‪ NULL‬قرار دهد‪.‬‬ ‫‪‬‬
‫قبل از استفاده از )(‪ MALLOC‬اشارهگر بررسی شود و در صورت معلق بودن ‪ 0‬مقداردهی شود‪.‬‬ ‫‪‬‬
‫استفاده از اشارهگر هوشمند است‪.‬‬ ‫‪‬‬
‫استفاده از تکنیک‪GARBAGE COLLECTION‬‬ ‫‪‬‬
‫‪ -2‬دفاع در برابر حمالت ‪Memory‬‬
‫)‪• Non-executable data (aka W+X or DEP‬‬
‫‪• Stack canaries‬‬
‫)‪• Address space layout randomization (ASLR‬‬
‫)‪• Memory-safety enforcement (e.g., SoftBound‬‬
‫)‪• Control-flow Integrity (CFI‬‬
‫‪• Safe programming patterns and libraries‬‬

‫‪Data execution prevention 1-2‬‬


‫این فناوری از اجراشدن کد از قسمتهایی از حافظه که غیر اجرایی میباشند‪ ،‬جلوگیری میکند‪ .‬با استفاده از این قابلیت میتوان از برخی سوء استفادههایی که‬
‫در اثر سرریز شدن بافر ایجاد میشود جلوگیری کرد‪ .‬این قابلیت به دو صورت ممکن است پیادهسازی شده باشد‪ .‬در نوع اول سختافزار پردازنده مربوطه از این‬
‫قابلیت پشتیبانی میکند و میتواند نواحی غیر اجرایی حافظه را عالمت گذاری کند‪ .‬نوع دوم پیاده سازی نرمافزاری این فناوری میباشد که در نرمافزار سعی‬
‫میشود که این محدودیتها اعمال شود‪ .‬الزم به ذکر است که روش سختافزاری از روش نرمافزاری کارآمد تر است و محدودیتهای کمتری دارد‪.‬‬

‫‪(No-eXecute bit) N/X-bit 2-2‬‬


‫غیرقابل اجرا نمودن داده ها با اضافه کردن یک بیت اجرا به صفحات حافظه‬
‫مقابله با حمالت تزریق کد از طریق بی استفاده شدن کد تزریق شده در حافظه‬
‫پیاده سازی در ‪ Microsoft Windows‬با نام‪ DEP‬و در ‪ OpenBSD‬با نام‪W^X‬‬
‫پشتیبانی سخت افزاری در کلیه پردازنده های با معماری ‪ AMD64‬و ‪ x86‬امروزی‬

‫‪Stack Canaries‬‬ ‫‪3-2‬‬


‫این روش با قرار دادن یک عدد صحیح کوچک ( که ارزش آن به صورت تصادفی در زمان شروع برنامه تعیین میشود) در حافظه درست قبل از نشانگر بازگشت‬
‫پشته کار می کند باعث جلوگیری از سرریزی‪ ،‬به نحوی که به هنگام بازگشت هر تابع‪ ،‬مقدار قناری با مقدار تصادفی اولیه مقایسه شده و در صورت اختالف‪،‬‬
‫اجرای برنامه متوقف میگردد‪.‬‬

‫راه های جلوگیری‬ ‫حمالت‬


‫‪Make this detectable with canaries‬‬ ‫)‪Putting attacker code into the memory (no zeroes‬‬

‫‪Make stack (and heap) non-executable‬‬ ‫‪Getting %eip to point to (and run) attacker code‬‬
‫‪Use Address Space Layout Randomization‬‬

‫‪Use Address-space Layout Randomization‬‬ ‫)‪Finding the return address (guess the raw addr‬‬
ASLR (Address space layout randomization) 4-2
‫یکی از روش های امنیت رایانه که شامل تنظیم تصادفی موقعیت مناطق اطالعات کلیدی است؛ مناطق کلیدی به مکان ذخیرهسازی کتابخانهها و پشتهها در‬
.‫فضای آدرس پردازش اطالق میگردد‬

Control Flow Integrity 5-2


Control-Flow Graph ‫خط مشی امنیتی است که اجرای برنامه را ملزم میکند تا صرفا یکی از مسیر ها (پیش از اجرا مشخص شده) گراف جریان کنترل‬
Modular ، Classic ‫ وجود دارد‬CFI ‫ به طور کلی دو نوع‬.‫( برنامه را دنبال کند‬CFG)
.‫ شدن جریان کنترل برنامه نقش موثری دارد‬Hijack ‫ در جلوگیری از‬CFI ‫همچنین‬

‫راه های جلوگیری‬


Define “expected behavior”: Control flow graph (CFG)
Detect deviations from expectation efficiently: In-line reference monitor (IRM)
Avoid compromise of the detector: Sufficient randomness, immutability
Compute the call/return CFG in advance
Monitor the control flow of the program and ensure that it only follows paths allowed by the CFG
Observation: Direct calls need not be monitored (Therefore: monitor only indirect calls : jmp, call, ret via registers)

IN-LINE REFERENCE MONITOR IRM


Implement the monitor in-line, as a program transformation
Insert a label just before the target address
Insert code to check the label of the target
Labels are determined by the CFG

‫راه های جلوگیری‬ ‫حمالت‬

non-executable data Inject code that has a legal label


code is immutable Modify code labels
adversary cannot change registers Modify stack during a check (No time-of-check, time-of-
use bug (TOCTOU)
control flow-modifying attacks Remote code injection, ROP/return-to-libc,

‫ در خیلی از برنامهها ابتدا یک شرط بررسی میشود و سپس از نتیجه‬.‫ نام یک دسته از باگهای نرمافزاری است‬: ‫ زمان بررسی تا زمان استفاده‬TOCTOU
‫ یک حفره‬،‫ این عمل اتمی و تجزیهناپذیر نیست و بین زمان بررسی کردن یک شرط و زمان استفاده از نتایج آن‬.‫آن شرط در جای دیگری استفاده میشود‬
،‫ در نتیجه‬،‫ نتایج آن توسط یک رویداد خارجی تغییر کند‬،‫ این حفره زمانی این امکان را ایجاد میکند که پس از بررسی کردن اولیه شرط‬.‫زمانی وجود دارد‬
.‫ نوعی شرایط رقابتی است‬،‫ این باگ‬.‫ چرا که تغییر یافتهاند‬،‫ آن نتایج دیگر معتبر نخواهند بود‬،‫وقتی که برنامه قصد استفاده از نتایج را دارد‬
Memory ‫ یافتن آسیب پذیری های‬6-2
)‫ (ابزار دسترسی به آرایه ها برای بررسی سرریزها و خطاهای استفاده پس از آزاد شدن است‬Address Sanitizer (ASAN) ‫ کامپایل با‬
.‫ به کار میرود‬debugging, memory leak, profiling ‫ ابزار برنامه نویسی که برای شناسایی‬Valgrind 

safe programming patterns and libraries 7-2


(Libraries, Smart pointers, Networking )‫استفاده از توابع و پترین های امن‬

Smart pointers
Pointers with only safe operations 
Lifetimes managed appropriately 
First in the Boost library, now a C++11 standard 

Networking
For dealing with network-transmitted data 
Ensures input validation, parsing, etc 
Efficient 
‫‪Secure Coding -3‬‬
‫امن سازی کد‪ ،‬سبب توسعه نرم افزارهای کامپیوتری به گونه ای است که در مقابل آسیب پذیری های امنیتی ایمن باشد‪ .‬نقص ها‪ ،‬اشکاالت و خطاهای منطقی‬
‫به طور مداوم باعث آسیب پذیری های نرم افزاری می شوند‪ .‬از طریق تجزیه و تحلیل هزاران آسیب پذیری گزارش شده‪ ،‬متخصصان امنیتی متوجه شده اند‬
‫که بیشتر آسیب پذیری ها به دلیل تعداد کمی از خطاهای برنامه نویسی رایج میباشند‪ .‬با شناسایی شیوه های برنامه نویسی ناامن که منجر به خطا می شوند‬
‫و آموزش توسعه دهندگان در مورد جایگزین های امن‪ ،‬سازمان ها می توانند اقدامات پیشگیرانه ای را برای کاهش آسیب پذیری های نرم افزاری قبل از استقرار‬
‫یا حذف آنها انجام دهند‪ .‬در ادامه بصورت موردی با برخی از این نکات آشنا میشویم‪:‬‬

‫‪vi , emacs‬دارای قابلیت اجرا کد از طریق ‪ shell‬میباشند ‪ ،‬به همین خاطر توصیه میشود از ادیتور هایی با سطح دسترسی پایین تر مانند ‪pico‬‬ ‫‪‬‬
‫استفاده نماییم‪.‬‬
‫‪ ‬در صورتی که فایل حساسی بر روی سایت وجود دارد‪ ،‬بجای دانلود ‪ ،‬فقط بر روی مرورگر سیستم کاربر نمایش داده شود‪.‬‬
‫‪ ‬ایزوله نمودن اجزای سیستم به عنوان مثال استفاده از ‪ Seccomp‬در سیستم عامل لینوکس در صورتی که میخواهیم کد غیر قابل اطمینانی را باز کنیم‪.‬‬
‫‪ Seccomp‬بصورت فقط از توابع فراخوانی ‪ read, write, exit, sigreturn‬استفاده میکند در صورتی که بخواهیم این توابع را بصورت‬
‫سفارشی نماییم از ‪ seccomp-bpf‬استفاده نماییم‪.‬‬
‫استفاده از کد های امن شده (‪ )hardened code‬مانند ‪crypto libraries‬‬ ‫‪‬‬
‫(‬ ‫)(‪i >= 0 && i < a.length) ? a[i] : exit‬‬ ‫‪ Halting‬در صورتی که محدوده آرایه بیش از حد مجاز بود ‪ ،‬متوقف شود)‬ ‫‪‬‬
‫‪ ‬هر ‪ tab‬مرورگر را در یک ‪ process‬جداگانه اجرا کنید‪ ،‬بنابراین ‪ exploitation‬یک ‪ tab‬از دسترسی به داده های ‪ tab‬دیگر امکان پذیر نمی‬
‫باشد‪.‬‬
‫‪ ‬اعتبارسنجی ورودی‬
‫به توابعی که دامنه پارامترهای آن محدود باشد اعتماد کنید (به عنوان مثال‪ ،‬در محدوده یک بافر باشد)‬ ‫‪o‬‬
‫در صورت عدم وجود تگ <‪( >script‬و دیگر رشته های قابل تفسیر کد)‪ ،‬به فرم فیلد کالینت اعتماد کنید‬ ‫‪o‬‬
‫به یک رشته کدگذاری توسط ‪( YAML‬اگر حاوی کد نبود) اعتماد کنید‬ ‫‪o‬‬
‫‪ ‬لیست سفید ‪ objects‬های معتبر‪ ،‬به جای لیست سیاه نامعتبر ‪ ،‬به عنوان مثال‪ ،‬تصاویر را از منابع ناشناخته وارد نکنید‬
‫‪ ‬برای هر یک از ماژول ها ‪ ،‬پیش شرط های پیش بینی شده بصورت بدبینانه چک شود‪.‬‬
‫‪ o‬حتی اگر شما "می دانید" کالینت یک اشاره گر ‪ NULL‬ارسال نمی کنند‪ ،‬بهتر است یک استثنا (یا حتی خروج) را اجرا کنید تا اینکه‬
‫کد مخرب اجرا شود‪.‬‬
‫‪Enforce input compliance‬‬ ‫‪‬‬
‫‪Use safe string functions‬‬ ‫‪‬‬
‫‪Don’t forget NUL terminator‬‬ ‫‪‬‬
‫‪Understand pointer arithmetic‬‬ ‫‪‬‬
‫‪Use NULL after free‬‬ ‫‪‬‬
‫‪Use goto chains to avoid duplicated or missed code‬‬ ‫‪‬‬
‫)‪Use safe string library (• Safety first, despite some performance loss) - Example: Very Secure FTP (vsftp‬‬ ‫‪‬‬
‫‪string library‬‬
‫‪Use a safe allocator (Windows Fault-Tolerant Heap (FTH): monitoring application crashes and autonomously‬‬ ‫‪‬‬
‫‪applying mitigations to prevent future crashes on a per application basis , DieHard: Probabilistic Memory‬‬
‫)‪Safety for Unsafe Languages‬‬

‫‪ 3-1‬تمرکز بر مرور ساز و کارهای مقابله با سؤاستفاده از آسیب پذیری های حافظه در زمان اجرا‬
‫‪Safe languages‬‬ ‫‪‬‬
‫‪Bounds checkers‬‬ ‫‪‬‬
‫‪Probabilistic countermeasures‬‬ ‫‪‬‬
‫‪Separators & Replicators of information‬‬ ‫‪‬‬
‫‪VMM-based countermeasures‬‬ ‫‪‬‬
‫‪Execution Monitors‬‬ ‫‪‬‬
Hardened libraries 
Runtime taint checkers 

‫ لینک های مفید‬2-3


‫ منتشر شده است که میتوانید از طریق لینک های‬... ‫ و‬CERT,SANS ‫ منابع مفیدی از موسساتی مانند‬، ‫جهت کسب اطالعات بیشتر برای امن نمودن کد‬
.‫زیر به آنها مراجعه نمایید‬

• Secure coding (SANS)


https://www.sans.org/reading-room/whitepapers/application/application-development-technology-tools-
vulnerabilities-threat-management-secure-programming-practices-defense-in-depth-approach-1283

• Secure coding in C (CERT)


CERT C Coding Standard
https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard

• Secure coding in Java


http://www.dwheeler.com/secureprograms/Secure-Programs-HOWTO/internals.html
http://nob.cs.ucdavis.edu/bishop/secprog/robust.html

• regulations/standards (HIPAA, SOX, etc.)


https://www.hhs.gov/hipaa/for-professionals/privacy/laws-regulations/index.html

http://web.mit.edu/Saltzer/www/publications/protection/Basic.html
• NIST for standards
• OWASP, CERT, Bugtraq for vulnerability reports
• SANS Newsbites for latest top threats
• Academic and industry conferences and journals for longer term trends, technology, and risks

‫ نکات امنیتی مربوط به کلید ها‬3-3

‫برخی از تنظیمات و گزینه های قابل استفاده که بر امنیت سیستم تأثیر می گذارد‬

‫طول کلید های رمزنگاری‬ 


‫انتخاب یک رمز عبور‬ 
‫چه ورودی هایی معتبر است‬ 
‫از کلیدهای تولید شده با اندازه کافی استفاده کنید‬ 
)‫ و یا در نسخه های باینری منتشر نکنید‬hard-code ‫ محافظت از کلید در برابر لو رفتن ( آنها را‬

‫انتخاب پیش فرض باید یک انتخاب امن باشد‬

)‫ بیتی‬RSA 2048 ‫ کلید های‬،‫• طول کلید پیش فرض امن است (به عنوان مثال‬
‫ نمی تواند سیستم را بدون انتخاب یک رمز استفاده کرد‬:‫• عدم استفاده از رمز عبور پیش فرض‬
WEB ‫ امنیت در‬-4
.‫ از سایت ما داشته باشد به روش های مختلفی آنرا تغییر میدهد و تست میکند تا آسیب پذیری را پیدا کند‬URL ‫ مهاجم در صورتی که‬

‫حمالت‬
SQL injection 
Cross-site scripting (XSS) 
Cross-site request forgery (CSRF) 
Session hijacking 
default passwords 
Directory brute forcing 
hidden files and directories 
Authentication problems 
Insecure web services 
Configuration page gives away your root password 
TCP SYN to port 443, TCP SYN/ACK to port 80 (Looking for running HTTPS or HTTP servers) 
Nmap (sending raw IP packets into the network and observing the effects) 
hosts o
services (application name and version) o
operating systems o
packet filters/firewalls are in use o

‫راه های جلوگیری‬


Validate input 
Reduce the possible damage, make exploitation harder 
‫استفاده از متد ها و توابع کتابخانه ایی امن‬ 
magic_quotes_gpc = On 
)(mysql_real_escape_string 
)‫ یا جداول که کاربر می تواند به آنها دسترسی داشته باشد محدود باشد‬/ ‫ دسترسی ها محدود شود (دستورات و‬
‫ رمزگذاری اطالعات حساس ذخیره شده در پایگاه داده‬
OWASP Zed ‫ (با مشاهده پکت ها و تغییر دادن آن به وسیله ابزار‬vulnerability,exploitation ‫ برای شناسایی‬Web proxies ‫ استفاده از‬
)Attack Proxy (Zap)
SQL Injection 1-4
‫ عملیاتی را (متفاوت‬،‫ به این صورت که نفوذگر با یک سری دستورهای اسکیوال‬.‫نوعی فن تزریق کد است که نقص امنیتی نرمافزار وبسایت را اکسپلویت میکند‬
‫با عملیات عادی موردنظر طراح وبسایت) در پایگاه داده وبسایت آسیبپذیر انجام میدهد‬

SQL ‫حمالت‬
Tautologies 
Illegal/Logically Incorrect Queries 
Union Query 
Piggy- Backed Queries 
Stored Procedures 
Inference 
Alternate Encodings 

‫راه های جلوگیری‬


Prepared statement 
Stored Procedure 
Escaping All User Supplied Input 
Least Privilege 
White List Input Validation 
OWASP Zed Attack Proxy (Zap) ‫اسکن با استفاده از ابزار‬ 
validate untrusted input 
sanitize input 

.‫ سبب پدیدار شدن آسیب پذیری میشود‬، ‫هنگامی که مرز مشخصی بین کد و دیتا وجود نداشته باشد‬

‫راه های جلوگیری‬


validate untrusted input 

Checking .1
)‫ با رنج صحیح‬integer ‫ چک کردن اینکه آیا ورودی های کاربر معتبر است (مثال‬: Whitelisting 

Sanitization .2
Blacklisting 
Escaping 
Decouple the code and the data 

Limit privileges 
Encrypt sensitive data 
‫‪Sanitization 4-1-1‬‬
‫‪ : Blacklisting ‬کاراکترهایی را که نمیخواهید را حذف کنید‪ .‬مانند '؛ ‪-‬‬
‫‪ : Escaping ‬کارکترهای مشکل ساز را با نمونه های ایمن جایگزین کنید‬
‫کارکترهای مشکل ساز‬ ‫کارکترهای ایمن‬
‫’‬ ‫\’‬
‫;‬ ‫\;‬
‫‪-‬‬ ‫\‪-‬‬
‫\‬ ‫\\‬

‫‪Prepared statements 2-4‬‬


‫جدا سازی کد از دیتا و در مرحله آخر ‪ Bind‬نمودن متغییرها‬

‫‪Taint checking 3-4‬‬


‫‪ Taint checking‬قابلیتی است در برخی از زبان های برنامه نویسی کامپیوتری‪ ،‬مانند ‪ Perl‬و ‪ Ruby‬که برای افزایش امنیت به واسطه جلوگیری استفاده از‬
‫برنامه های مخرب در هنگام اجرای دستورات بر روی کامپیوتر میزبان طراحی شده است‪ Taint checking .‬عمدتا خطرات امنیتی که مربوط به وب سایت‬
‫هایی است که با استفاده از تکنیک هایی مانند ‪ SQL Injection‬یا ‪ Buffer Overflow‬مورد حمله قرار می گیرند به کار گرفته میشود‪.‬‬

‫آنالیز و تجزیه و تحلیل ‪Taint‬‬


‫تجزیه و تحلیل اشاره گر ها‬ ‫‪‬‬
‫تجزیه و تحلیل جریان داده ها‬ ‫‪‬‬
‫تفسیر انتزاعی‬ ‫‪‬‬
‫‪cookie 4-4‬‬
‫حمالت مربوط به کوکی ها‪:‬‬
‫تغییر ‪)>”input type=“hidden” name=“price” value=“5.50<( URL‬‬ ‫‪‬‬
‫سرقت کوکی ( اقداماتی که به نظر می رسد توسط کاربر انجام میشود‪ ،‬سرقت یا تخریب اطالعات حساس)‬ ‫‪‬‬
‫اسنیف شبکه‬ ‫‪‬‬
‫استراق سمع(‪)Session sidejacking‬‬ ‫‪‬‬
‫تثبیت نشست (‪)session fixation‬‬ ‫‪‬‬
‫حدس زدن کلید‬ ‫‪‬‬
‫‪) DNS cache poisoning‬فریب کاربر طوری که تصورکند مهاجم وب سایت فیس بوک است‪ ،‬کاربر کوکی خود را برای مهاجم ارسال می کند)‬ ‫‪‬‬
‫ترکیب کد (مرورگر ها قابلیت پارس کردن کد های ترکیب شده یا کد هایی که در خطوط جداگانه میباشند مانند قطعه کد زیر را دارند)‬ ‫‪‬‬

‫را ه های جلوگیری‪:‬‬


‫استفاده از پروتکل امن(‪ )HTTPS‬میتواند به جلوگیری از این روش کمک کند‬ ‫‪‬‬
‫امنیت شخصی است و اعتماد نداشتن به لینکهایی که فرستاده میشود‬ ‫‪‬‬
‫تصادفی انتخاب شده باشد (غیر قابل حدس باشد)‬ ‫‪‬‬
‫محدود کردن کلید سشن به یک ‪ IP‬خاص‬ ‫‪‬‬
‫طول کلید به اندازه کافی طوالنی باشد‬ ‫‪‬‬
‫ست کردن ‪ Time out‬برای سشن ها و بعد از پایان سشن ‪ cookie‬آنها را حذف کنید‬ ‫‪‬‬
‫‪ ‬همبستگی اطالعات وجود داشته باشد (‪)correlating information‬‬
‫‪White list‬‬ ‫‪‬‬
‫• ‪HEADERS‬‬
‫• ‪COOKIES‬‬
‫• ‪QUERY STRINGS‬‬
‫• ‪FORM FIELDS‬‬
‫• )‪HIDDEN FIELDS (I.E., ALL PARAMETERS‬‬
‫• )‪USE A SIMPLE, RESTRICTED SUBSET (E.G MARKDOWN‬‬

‫‪Session Hijacking 5-4‬‬


‫استراق نشستها یا (‪ )Session Hijacking‬به طور کلی به حملهای گفته میشود که در آن ‪(session‬یا در اصل ‪ )session key‬جعل میشود‪.‬‬
‫را ه های جلوگیری‪:‬‬
‫ست کردن ‪ Time out‬برای سشن ها و بعد از پایان سشن آنها را حذف کنید‬
‫‪Cross-site Request Forgery - CSRF 6-4‬‬
‫سیاس آر اف برای جعل درخواست میان وبسایت‪ ،‬نوعی از حمالت اینترنتی از خانواده تزریق اسکریپت از طریق وب سایت است‪ .‬در این نوع از حمالت کاربری‬
‫که در یک نرمافزار کاربردی وب ثبت ورود کرده است را مجبور به فرستادن یک درخواست به آن نرمافزار تحت وب آسیبپذیر میکنند تا عملی که میخواهند‬
‫را انجام دهد‪ .‬برای نمونه اگر کاربری همزمان در حساب ایمیل خود و حساب بانکیاش ورود کرده باشد‪ ،‬حملهکننده برای کاربر ایمیلی ارسال میکند که بیان‬
‫میکند اطالعات بانکی او نیازمند بهروزرسانی از طریق یک لینک دارد‪ ،‬با کلیک کردن روی لینک‪ ،‬بدون اینکه کاربر خودش آگاه باشد و به صورت خودکار‬
‫درخواستی برای انتقال وجه از یک حساب به حساب دیگر به نرمافزار بانک فرستاده میشود و در اینجا اگر نرمافزار بانک بدون اعتبارسنجی درخواست را‬
‫پردازش کند متوجه جعلیبودن درخواست نخواهد شد‪.‬‬
‫را ه های جلوگیری‪:‬‬
‫‪ ‬رمز کردن لینک ها‪ ،‬لینک ها گاها شامل اطالعات حیاتی هستند که با این روش رمز میشوند ‪ Secretized Links‬و دارای ویژگی های زیر هستند‬
‫‪ o‬نباید قابل حدس زدن باشد‬
‫‪Can use a hidden form field, custom HTTP header, or encode it directly in the URL‬‬ ‫‪o‬‬
‫‪Can be same as session id sent in cookie‬‬ ‫‪o‬‬
‫برخی از ‪ Frameworks‬ها مانند ‪ Ruby on Rails‬بصورت خودکار لینک ها را بصورت رمز در می آورند‬ ‫‪o‬‬
‫مثال ‪http://website.com/doStuff.html?sid=81asf98as8eak‬‬

‫‪ ‬همبستگی اطالعات وجود داشته باشد (‪)correlating information‬‬

‫‪XSS: Cross site scripting‬‬ ‫‪7-4‬‬


‫تزریق اسکریپت از طریق وبسایت از روشهای نفوذ و گرفتن دسترسی غیر مجاز از یک وبسایت است که توسط هکر به کار میرود‪ .‬در ‪ XSS‬تالش میشود‬
‫تا یک (جاواسکریپت) یا کد ‪ HTML‬مخرب از الیههای امنیتی احتمالی یک وبسایت داده شود و همراه با کد ‪ HTML‬و کد مخرب اجرایی وبسایت دوباره‬
‫به سمت کاربر بازگردانده شود‪ .‬در نتیجه مرورگر این کد جدید را با این فرض که متعلق به وبسایت است اجرا کرده و تغییراتی در ظاهر و کارکرد وبسایت‬
‫حاصل میشود‪ .‬انواع ‪ XSS‬شامل ‪ Stored :‬و ‪Reflected‬‬

‫حمالت مربوط به ‪:XSS‬‬


‫طراح سایت‪ ،‬خود کد مخرب را در صفحه قرار داده باشد‪.‬‬ ‫‪‬‬
‫حفره سایت ممکن است در سطح سیستمعامل یا شبکه ایجاد شده باشد‪.‬‬ ‫‪‬‬
‫یک حفره دائمی در یکی از مکانهای عمومی وبسایت قرار گرفته باشد‪.‬‬ ‫‪‬‬
‫قربانی بر روی یک لینک حاوی ‪ XSS‬مدل ‪ non-persistent‬یا ‪ DOM-based‬کلیک کند‪.‬‬ ‫‪‬‬
‫فریب دادن مرورگر کاربر که بر این باور است که اصل اسکریپت متعلق به سایت (‪ )bank.com‬است‬ ‫‪‬‬
‫با سطح دسترسی (‪ )bank.com‬دستورات را اجرا می کند‬ ‫‪‬‬
‫سرور (‪ )bank.com‬را مجبور میکند تا اسکریپت مهاجم را به مرورگر کاربر ارسال کند‬ ‫‪‬‬

‫را ه های جلوگیری‪:‬‬


‫‪( Sanitizing‬پاکسازی بخش هایی که قابلیت اجرایی دارند مانند(<‪))>script> ... </script> or <javascript> ... </javascript‬‬ ‫‪‬‬
‫فیلتر کردن (فیلتر ورودی ‪ ،‬فیلتر خروجی)‬ ‫‪‬‬
‫استفاده از مرورگر مناسب‪.‬‬ ‫‪‬‬
‫استفاده از ابزارهای محدودکننده اجرای کد مانند ‪NoScript‬‬ ‫‪‬‬
‫آموزش کاربران (کلیک نکردن بر روی لینک و آدرسهای ناشناس)‬ ‫‪‬‬
‫‪Safely validating untrusted HTML input‬‬ ‫‪‬‬
‫‪Cookie security‬‬ ‫‪‬‬
‫‪Disabling scripts‬‬ ‫‪‬‬
‫استفاده از تکنولوژی های (‪)Content Security Policy, Javascript sandbox tools, auto-escaping templates‬‬ ‫‪‬‬
‫همیشه اول تأیید کنید‪ ،‬سپس اعتماد کنید‬ ‫‪‬‬
‫‪ Whitelisting‬را به ‪ blacklisting‬ترجیح دهید ‪ -‬بصورت پیش فرض امن است‬ ‫‪‬‬
‫‪ Checking‬را به ‪ sanitization‬ترجیح دهید ‪ -‬کمتر اعتماد کنید‬ ‫‪‬‬
‫اسکن با استفاده از ابزار )‪OWASP Zed Attack Proxy (Zap‬‬ ‫‪‬‬
‫‪ HttpOnly‬کردن ‪ session‬ها و کوکیها از جمله راههای جلوگیری از حمالت ‪ XSS‬میباشد‪.‬‬ ‫‪‬‬

‫مقایسه ‪XSS vs. CSRF‬‬


‫در حمله ‪ XSS‬مهاجم تالش می کند تا آنچه را که وب سایت می فرستد کنترل کند و به مرورگر سرویس گیرنده ارسال کند‬ ‫‪‬‬
‫در حمالت ‪ CSRF‬مهاجم تالش می کند کنترل مرورگر سرویس دهنده را به وب سایت مخرب منتقل کند‬ ‫‪‬‬

‫‪Javascript 8-4‬‬
‫حمالت مربوط به ‪Javascript‬‬
‫)‪Alter page contents (DOM objects‬‬ ‫‪‬‬
‫)‪Track events (mouse clicks, motion, keystrokes‬‬ ‫‪‬‬
‫‪Issue web requests & read replies‬‬ ‫‪‬‬
‫)‪Maintain persistent connections (AJAX‬‬ ‫‪‬‬
‫‪Read and set cookies‬‬ ‫‪‬‬

‫را ه های جلوگیری‪:‬‬


‫ایزوله نمودن مرورگر در برابر جاوا اسکریپت ها )‪Same Origin Policy (SOP‬‬ ‫‪‬‬
‫)‪ Same Origin Policy (SOP‬به شما اجازه می دهد به صفحات موجود در یک سایت‪/‬دامنه درخواست دهید‪ ،‬اما مانع از این می‬ ‫•‬
‫شود که به صفحات مستقر بر روی دیگر دامنه ها‪ ،‬زیردامنه (‪ )subdomain‬یا از طریق یک پروتکل دیگر‪ ،‬درخواست ارسال کنید (و‬
‫داده در صفحه ی جاری بارگذاری نمایید)‪.‬‬

‫ابزار های تست نفوذ‬


‫‪http://sectools.org‬‬ ‫‪‬‬
‫‪Nmap for network scanning‬‬ ‫‪‬‬
‫‪Zap web proxy for probing, exploitation‬‬ ‫‪‬‬
‫‪Metasploit for general-purpose exploitation‬‬ ‫‪‬‬
Fuzz Testing 9-4
‫ سیستم های عامل یا شبکه هایی با ورودی‬،‫ و حفره های امنیتی در نرم افزار‬coding ‫ تکنیک تست نرم افزار است که برای پیدا کردن خطاهای‬، Fuzzing
‫ معروف است با هدف اختالل در سیستم نرم افزار در نتیجه اجرای آن صورت‬Fuzz ‫ این فرایند که به‬.‫عظیمی از داده های تصادفی مورد استفاده قرار میگیرد‬
.‫) علل بالقوه این آسیب پذیری را نشان میدهد‬Fuzzer ‫ ( یا‬Fuzz Tester ‫ ابزاری به نام‬،‫ اگر آسیب پذیری ای پیدا شد‬.‫میپذیرد‬
:‫حمالت مربوطه‬
Buffer overflow 
Cross-site scripting 
Denial of Service 
Structural Bugs 
SQL Injection 

:‫را ه های جلوگیری‬


Sulley ،CERT Basic Fuzzing Framework (BFF) ،Burp Intruder ، OWASP Zed Attack Proxy (Zap) ‫استفاده از ابزارهای‬ 
A fuzzer can be generation-based or mutation-based depending on whether inputs are generated from 
,scratch or by modifying existing inputs
A fuzzer can be dumb or smart depending on whether it is aware of input structure 
A fuzzer can be white-( American Fuzzy Lop), grey-( Blab) , or black-box(Radamsa), depending on whether 
.it is aware of program structure
Use SPIKE fuzzers for network-based protocols 

Metasploit 10-4
.‫ این نرمافزار امکان دسترسی به شل قربانی را به راحتی فراهم میکند‬.‫نرمافزار متا اسپلویت نرمافزار قوی برای نفوذ به سیستمها است‬

‫سایر حمالت اسکریپتی‬


Creating a Phishing Attack 
Metasploit Remote Attack 
Pass the Hash Attack 
SSH Key Attack 
Password Attack 
Passive Network Discovery 
Vulnerability Validation Attack 
Probe remote site looking for vulnerable services 
Construct payload based on versions, other features 
Encode payload to avoid detection 
Inject payload 
Wait for shellcode to connect back; command prompt 
Exploits against particular vulnerabilities 
Password sniffing 
Privilege escalation 
Keylogging and backdoors 
John the Ripper for password cracking 
Valgrind for dynamic binary analysis 
Reaver for Wifi password cracking 
peepdf for scanning PDF files for attack vectors 
‫‪ -5‬ابزار های آنالیز استاتیک‬

‫‪Symbolic execution 1-5‬‬


‫ابزار تحلیل برنامه است تا تعیین کند که کدام ورودی ها باعث ایجاد هر بخش برنامه می شوند‪ .‬یک مفسر از برنامه پیروی می کند‪ ،‬در حالی که ارزش های نمادین‬
‫برای ورودی ها را در نظر می گیرد تا ورودی های واقعی را به عنوان اجرای عادی برنامه‪،‬در نتیجه یک تفسیر انتزاعی بدست می آورد‪ .‬بدین ترتیب‪ ،‬این نمادها‬
‫برای عباراتها و متغیرها در برنامه‪ ،‬و محدودیت ها از نظر این نمادها برای پیامدهای احتمالی هر شاخه شرطی‪ ،‬بیان می شود‪.‬‬

‫‪Symbolic variables 2-5‬‬


‫متغیرهای نمادین در هنگام خواندن ورودی معرفی می شوند مانند ‪.mmap, read, write, fgets,‬‬
‫بنابراین اگر باگی یافت شود می توانیم ورودی که در هنگام اجرای برنامه که باعث ایجاد باگ شده است را بازیابی کنیم و این شرایط را مجددا برای برنامه پیاده‬
‫سازی کنیم‪.‬‬
Symbolic expressions 3-5

:‫) در کد ها میتوانیم از ابزار های زیر استفاده نماییم‬Symbolic execution( ‫برای پیدا کردن اشکاالت امنیتی مهم‬
SAGE at Microsoft •
Mergepoint for Linux •
‫‪ -6‬جمع بندی‪:‬‬
‫در این مستند ساختار برنامه نویسی امن ‪ ،‬بررسی تهدیدات و شیوه نوشتن کد امن را معرفی و در نهایت با راهکار های مقابله با این تهدیدات پرداختیم‪.‬‬
‫بصورت کلی ‪ 10‬موردی که میبایست در طول فرآیند تولید نرم افزار آنها را رعایت کنیم به شرح زیر میباشد‪:‬‬

‫‪-1‬اعتبارسنجی تمامی ورودیها (تمامی ورودیها از مبداهای نامطمئن رو بررسی کنید)‬

‫‪-2‬به هشدارهای کامپایلی توجه ویژه داشته باشید (حتما از ابزارهای تحلیل ثابت و پویا ( ‪STATIC AND DYNAMIC ANALYSIS‬‬
‫‪ )TOOLS‬برای کشف نواقص امنیتی بیشتر استفاده کنید‪).‬‬

‫‪-3‬معماری و طراحی را براساس خطمشیهای امنیتی انجام دهید ‪ ،‬سیستم را برپایه معماری امن‪ ،‬پیادهسازی کنید ‪ ،‬که مجوزهای مختلف در‬
‫زمانهای مختلف کار کند‪ ،‬ساختاری تفکیکی را برای ایجاد زیرسیستمهای مشخص و مجزا با سطوح دسترسی خاص اعمال کنید‪( .‬استفاده از اصول‬
‫و استاندارد ها که در فصل ‪ 3‬به آنها اشاره شده است )‬

‫‪-4‬ساده نگه دارید (پیچیدگی سبب به وجود آمدن آسیب پذیری می شود)‬

‫‪-5‬به صورت پیشفرض رد کنید‪ ،‬به تمامی منابع داده ای خارجی (حتی در برخی موارد داخلی)‪ ،‬مشکوک باشید ( پیشفرض «‪ »DENY‬کنید و‬
‫در صورت نیاز به مجوز خاصی فقط آن دسترسی مورد نیاز را بدهید)‪.‬‬

‫‪-6‬پایبند به اصل حداقل مجوز باشید (هرگونه اعطای مجوزی باید در حداقل ممکن واگذار بشه)‬

‫‪-7‬محافظت و پاکسازی دادههای ارسالی به سایر سیستمها‬

‫‪-9‬از روشهای تضمین کیفیت کارا استفاده کنید (آزمونهای فازی‪ ،‬آزمون نفوذ‪ ،‬بازبینی امنیتی کد)‬

‫‪-10‬از استانداردهای برنامهنویسی امن پیروی کنید (استفاده از اصول و استاندارد ها که در فصل ‪ 3‬به آنها اشاره شده است )‬

You might also like