Transcript مثال

‫جلسه دوم‬
‫مبانی امنیت (‪)3‬‬
‫ارائه دهنده‪:‬‬
‫حسین محمدحسن زاده‬
‫‪ 15‬اسفند ‪1391‬‬
‫‪1‬‬
‫‪H.M.Hassanzade, [email protected]‬‬
‫برنامه های امن‬
‫زمانی که می گوییم یک برنامه «امن» است‪ ،‬به چه معنی می باشد؟‬
‫افراد مختلف با توجه به تعریف متفاوتشان از یک برنامه امن‪ ،‬می توانند نظر مختلفی در مورد‬
‫خصوصیات یک برنامه امن داشته باشند‪.‬‬
‫اکثر افراد آشنا به نرم افزار‪ ،‬تعداد و نوع نقص های موجود در نرم افزار را به عنوان نشانه‬
‫ای برای سنجش میزان کیفیت آن می دانند‪.‬‬
‫‪2‬‬
‫برنامه های امن‬
‫از بین بردن نقص ها‬
‫یک رویکرد در قضاوت در مورد کیفیت امنیت‪ ،‬از بین بردن نقص ها بوده است‪.‬‬
‫نرم افزاری که ‪ 100‬نقص داشته و برطرف شده بهتر است یا نرم افزاری که ‪ 20‬خطا داشته و‬
‫شناسایی و برطرف شده اند؟؟‬
‫• ممکن است کسی بگوید نرم افزاری که ‪ 100‬خطا داشته است‪ ،‬بیشتر مورد تحلیل قرار گرفته است؛ اما ممکن‬
‫است نظر دیگری این باشد که نرم افزاری که در آن ‪ 100‬خطا شناسایی شده‪ 100 ،‬خطای دیگر دارد که باید‬
‫منتظر شناسایی شدن هستند!!‬
‫‪3‬‬
‫برنامه های امن‬
‫از بین بردن نقص ها‪-‬ادامه‬
‫اولین برنامه های امنیت کامپیوتر بر مبنای مفهوم «نفوذ و اصالح» بودند که با توجه به آن تحلیل‬
‫گران در پی یافتن و رفع نواقص بودند‪.‬‬
‫معموال تیمی با عنوان‬
‫‪Tiger Team‬‬
‫برای آزمون امنیت سیستم‪ ،‬سعی در انجام کارهایی داشت که‬
‫باعث نقص سیستم شود‪.‬‬
‫اگر سیستم در مقابل عمل ها گروه مقاومت نشان می داد‪ ،‬به معنی امن بودن آن بود‪.‬‬
‫متأسفانه‪ ،‬با این روش بسیاری از نقص ها ناشناخته باقی می ماندند‪.‬‬
‫در این حین حتی روش های اصالح سیستم‪ ،‬نه تنها باعث امن تر شدن سیستم نمی شدند‪ ،‬بلکه بدلیل‬
‫یافتن نقص های جدید‪ ،‬آن را نا امن تر می کردند ‪.‬‬
‫‪4‬‬
‫برنامه های امن‬
‫از بین بردن نقص ها ‪ -‬ادامه‬
‫‪ 4‬دلیل برای مورد قبل وجود دارد‪:‬‬
‫• فشارهایی که برای رفع یک نقص به سیستم وارد می شد تنها به خود نقص و نه به زمینه آن توجه می کرد‪ .‬به‬
‫عبارتی تحلیل گران تنها ظاهر نقض را دیده و سعی در رفع آن داشتند و به نقص های واقعی موجود در طراحی و‬
‫ابزار توجهی نداشتند‪.‬‬
‫• نقص موجود عموما تأثیرات غیرواضح دیگری در قسمت های دیگری غیر از محیط اطراف خود داشت‪.‬‬
‫• درست کردن یک مشکل باعث شکست هایی در قسمت های دیگر شده و یا روند های اصالح مشکل یک قسمت را‬
‫حل می گردندف نه همه قسمت ها را‪.‬‬
‫• ایرادات و نقص های یک سیستم به طور کامل قابل رفع کردن نیستند‪ ،‬زیرا عملکرد سیستم در نتیجه آن پایین می‬
‫آید‪.‬‬
‫‪5‬‬
‫برنامه های امن‬
‫رفتارهای غیرمنتظره‬
‫نامناسب و ناکافی بودن برنامه های یافتن و رفع نقص باعث شد تحلیل گران به دنبال راه بهتری‬
‫باشند‪.‬‬
‫یک راه مقایسه بین عمل واقعی یک برنامه و آنچه مورد نیاز است‪ ،‬می باشد‪.‬‬
‫نقض در اجرای برنامه بر خالف انتظار‪ ،‬نقص در امنیت برنامه نامیده می شود‪.‬‬
‫نقص در امنیت برنامه رفتاری نادرست است که در اثر یک آسیب پذیری در برنامه ایجاد میشود‪.‬‬
‫‪6‬‬
‫برنامه های امن‬
‫رفتارهای غیرمنتظره ‪ -‬ادامه‬
‫اصطالحات آسیب پذیری (‪ )vulnerability‬و نقص (‪ )flaw‬به طور کامل با مفاهیم خطا (‪ )fault‬و‬
‫شکست (‪ )failure‬همپوشانی ندارند‪.‬‬
‫یک نقص (‪ )flaw‬می تواند یک خطا (‪ )fault‬یا شکست (‪ )failure‬باشد و یک آسیب پذیری‬
‫(‪ )vulnerability‬مجموعه ای از نقص (‪ )flaw‬ها‪ ،‬مانند سرریز بافر‪ ،‬را شرح می دهد‪.‬‬
‫آسیب پذیری (‪ )vulnerability‬و نقص (‪ )flaw‬باید از دو جنبه مد نظر قرا گیرند‪ :‬علت و معلول‬
‫بنابراین می بینیم که خطا باعث چه مسائل و شکست هایی می شود که برای کاربر مشخص و واضح‬
‫است‪.‬‬
‫‪7‬‬
‫برنامه های امن‬
‫رفتارهای غیرمنتظره ‪ -‬ادامه‬
‫نقص های امنیت برنامه از هر نوع شکست در آن می تواند ناشی شود‪.‬‬
‫یک نقص می تواند ناشی از مشکلی در یک قطعه برنامه یا شکستی در ارتباط چند برنامه با‬
‫یکدیگر باشد‪.‬‬
‫نقص های امنیتی می توانند کدهایی که از ابتدا به عنوان کد مخرب نوشته شده و یا به صورت درهم‬
‫بر هم و خراب هستند را شناسایی و نمایان کنند‪.‬‬
‫بنابراین نقص های امنیتی می توانند ناشی از دو حالت باشند‪:‬‬
‫• اشتباهات غیرعمدی انسانها‬
‫• کدهای ذاتا مخرب‬
‫‪8‬‬
‫برنامه های امن‬
‫رفتارهای غیرمنتظره ‪ -‬ادامه‬
‫تفاوت بین اشتباهات غیرعمد انسانی و برنامه های ذاتا مخرب چندان مهم نیست و هر دو می‬
‫توانند به یک اندازه به سیستم و برنامه آسیب برسانند‪.‬‬
‫بر خالف آنچه تصور می شود‪ ،‬خرابی های ناشی از اشتباهات غیرعمد انسانی بسیار بیشتر و‬
‫بدتر از دیگری است‪.‬‬
‫‪9‬‬
‫برنامه های امن‬
‫رفتارهای غیرمنتظره ‪ -‬ادامه‬
‫متأسفانه تکنیکی برای برطرف نمودن همه نقص های امنیتی وجود ندارد‪ .‬این مشکل به دو‬
‫دلیل است‪:‬‬
‫• کنترل های امنیتی اصول ا به سطحی از برنامه و برنامه ریزهای فردی اعمال می شوند‪ .‬در هر‬
‫سیستم مجموعه ای از «عمل هایی که باید انجام شود» وجود دارد که کنترل سیستم «عمل هایی که‬
‫نباید انجام شود» است‪ .‬چون این دو برای سیستم متفاوت استف مجموعه ای که همه این ها را شامل‬
‫شود وجود ندارد‪.‬‬
‫• تکنیک ها و برنامه های کامپیوتری پیشرفتی بسیار سریع تر از کنترل های امنیتی دارند‪.‬‬
‫‪10‬‬
‫برنامه های امن‬
‫انواع نقص ها‬
‫نقص های امنیتی به دو دسته ذاتی و غیر عمد نقسیم می شوند‪.‬‬
‫نقص های ذاتی‪:‬‬
‫• مخرب‬
‫• غبر مخرب‬
‫نقص های غیر عمد‪:‬‬
‫• خطاهای ارزیابی ‪ :‬کنترل ها‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫خطای دامنه‪ :‬دسترسی های کنترل شده به داده‬
‫سلایر سازی ‪ :‬چریان های برنامه‬
‫معرفی و احراز هویت نامناسب‬
‫نقض شرایط مرزی‬
‫خطاهای منطقی موجود‬
‫‪11‬‬
‫خطاهای برنامه‬
‫توسعه دهندگان و برنامه نویسان برنامه های کامپیوتری همواره با خطاهایی (‪ )error‬مواجه‬
‫بوده اند که ذاتی و مخرب نیستند‪ ،‬اما باعث اختالل در عملکرد برنامه می شوند‪.‬‬
‫این خطاها به سه دسته تقسیم می شوند‪:‬‬
‫• سرریز شدن بافر‬
‫(‪)buffer overflow‬‬
‫• واسطه گری ناقص‬
‫(‪)incomplete mediation‬‬
‫• خطاهای زمان بررسی تا زمان استفاده‬
‫(‪)time-of-check to time-of-use errors‬‬
‫‪12‬‬
‫خطاهای برنامه ‪ -‬سرریز شدن بافر‬
‫این خطا را می توان با جادادن ‪ 2‬لیتر آب در ظرفی ‪1‬لیتری معادل دانست که در اثر این کار‬
‫مقداری آب همواره هدر می رود‪.‬‬
‫تعریف‪:‬‬
‫یک بافر فضایی برای ذخیره داده است‪ ،‬که در حافظه قرار گرفته است‪.‬‬
‫از آنجا که ظرفیت حافظه محدود است‪ ،‬ظرفیت بافر نیز محدود می باشد‪.‬‬
‫معموال در برنامه نویسی ها‪ ،‬در ابتدا ظرفیت بافر مشخص می شودکه این خطا ایجاد نشود‪.‬‬
‫‪13‬‬
‫خطاهای برنامه ‪ -‬سرریز شدن بافر‬
‫مثال‪:‬‬
‫]‪Char sample [10‬‬
‫با این دستور در حافظه آرایه ای با ‪ 10‬عنصر در نظر گرفته شده که از ]‪ sample [0‬تا‬
‫]‪ sample [9‬می باشد‪.‬‬
‫دستور زیر باعث بروز خطا در برنامه می شود؛ زیرا ]‪ sample [10‬در محدوده آرایه قرار ندارد‪.‬‬
‫’‪Sample [10] = ‘B‬‬
‫‪14‬‬
‫خطاهای برنامه ‪ -‬سرریز شدن بافر‬
‫قطعه کد زیر را در نظر بگیرید‪:‬‬
‫)‪For (i=0; i<=9 ; i++‬‬
‫;’‪sample [i] = ‘A‬‬
‫’‪Sample [10] = ‘B‬‬
‫در این حالت مانند مثال قبل به دلیل سرریز شدن بافر‪ ،‬خطا رخ می دهد‪.‬‬
‫شکل زیر مکان هایی که یک بافر ممکن است در آنها سرریز کند را نشان می دهد‪:‬‬
‫‪15‬‬
‫خطاهای برنامه ‪ -‬سرریز شدن بافر‬
‫‪16‬‬
‫خطای برنامه ‪ -‬سرریز شدن بافر‬
‫نکات امنیتی‪:‬‬
‫یک فرد حمله کننده می تواند از خطاهای غیرمخرب مانند سرریز شدن بافر‪ ،‬برای آسیب زدن و‬
‫ایجاد نقص استفاده کند‪.‬‬
‫یک حمله کننده می تواند از دو حالت آخر در شکل های قبل برای قرار دادن داده های خود و‬
‫بر هم زدن روند کار سیستم استفاده نماید‪.‬‬
‫دو حمله رایج که معموال در اثر سرریز شدن بافر اتفاق می افتد به صورت زیر است‪:‬‬
‫‪17‬‬
‫خطای برنامه ‪ -‬سرریز شدن بافر‬
‫حالت اول‪:‬‬
‫یک حمله کننده می تواند کدهای خود در محدوده فضای سیستم قرار دهد‪.‬‬
‫از آنجا که سیستم عامل نسبت به برنامه های عادی دارای اولویت باالتری است‪ ،‬یک حمله‬
‫کننده می تواند با تغییر هویت خود به سیستم عامل‪ ،‬هربرنامه ای را با یک نقش پررنگ اجرا‬
‫نماید‪.‬‬
‫بنابراین با قرار دادن کدهایی در فضای سیستم و با اجرای آنها توسط سیستم عامل که کنترل آن‬
‫در دست حمله کننده است‪ ،‬برنامه های وی اجرا می شود‪.‬‬
‫‪18‬‬
‫خطای برنامه ‪ -‬سرریز شدن بافر‬
‫حالت دوم‪:‬‬
‫یک حمله کننده می تواند از اشاره گر پشته (‪ )stack pointer‬استفاده نماید‪.‬‬
‫اجرای زیرفرایند ها معموال با استفاده از پشته صورت می گیرد‪.‬‬
‫در این حالت‪ ،‬داد ها و آدرس مربوط به هر زیر فرایند در باالی پشته قرار گرفته و اشاره گر‬
‫پشته به آن اشاره می کند‪.‬‬
‫یک حمله کننده می تواند با قرار دادن برنامه های خود در پشته و ایجاد حالت سرریز‪ ،‬و نیز‬
‫تغییر در اشاره گر آن‪ ،‬باعث اختالل در سیستم شود‪.‬‬
‫‪19‬‬
‫خطای برنامه ‪ -‬سرریز شدن بافر‬
‫نوع دیگری از سرریز شدن بافر زمانی است که مقدارهایی به عنوان پارامتر به یک روتین‪ ،‬بخصوص‬
‫یک صفحه وب ارسال می شوند‪.‬‬
‫‪http://www.somesite.com/subpage/userinput.asp?parm1=(808)555-1212 &parm2=2009Jan17‬‬
‫در مثال باال‪ ،‬عدد ‪ 1212-555‬به عنوان پارامتر‪ 1‬به صفحه وب ارسال می شود‪.‬‬
‫در اینجا عددی با طول بزرگ تر را به عنوان پارامتر ارسال نمود که این باعث خطا در سیستم می شود‪.‬‬
‫در بسیاری از برنامه ها برای طول ورودی ها معموال محدودیت هایی قرا می دهند‪.‬‬
‫ارسال داده های با طول بیش از حد مجاز نوعی از سرریز شدن بافر است‪ ،‬که تأثیری بیشتر از حالت های‬
‫قبل ندارد‪.‬‬
‫‪20‬‬
‫خطای برنامه – واسطه گری ناقص‬
‫تعریف‪:‬‬
‫در مثال اسالید قبل‪ ،‬پارامتر‪ 2‬به نوعی بیانگر تاریخ است که دارای فرمت مشخصی می باشد‪.‬‬
‫برای جلوگیری از وارد کردن مقادیر غیر مجاز یا خارج از محدوده‪ ،‬می توان شرطی تعیین نموده و یا از‬
‫منوهای بازشونده استفاده نمود‪ .‬مثال جلوگیری از وارد نمودن ‪ 2048Min32‬به جای تاریخ صحیح‪.‬‬
‫اگر برنامه نویس این تمهیدات را برای جلوگیری از خطا در سمت مشتری بکار برده و آدرس صحیحی‬
‫شبیه مثال اسالید قبل تولید شود‪ ،‬اما در هنگام ارسال به سرویس دهنده مقادیر به صورت دستی توسط‬
‫مخربی تغییر داده شوند‪ ،‬سرویس دهنده متوجه نمی شود که این مقدار در سمت مشتری این گونه وارد‬
‫شده یا در بین راه تغییر کرده است!!‬
‫به مشکل بیان شده واسطه گری ناقص می گویند‪.‬‬
‫‪21‬‬
‫خطای برنامه – واسطه گری ناقص‬
‫نکات امنیتی‪:‬‬
‫واسطه گری ناقص راه آسانی برای سوء استفاده کردن است‪.‬‬
‫گرچه این روش کمتر از سرریز شدن بافر مورد توجه است‪ ،‬اما داده های استباه می توانند به راحتی‬
‫تهدیدهای جدی ایجاد کنند‪.‬‬
‫یک مورد که در این زمینه به در دنیای واقعی اتفاق افتاد‪ ،‬در مورد وب سایت ‪ Things‬بود‪ .‬این سایت که‬
‫به منظور خرید آنالین و سفارش بکار گرفته می شد‪ ،‬با این روش مورد دزدی واقع شد‪ URL .‬زیر‬
‫اطالعات خرید یک مشتری است‪.‬‬
‫‪http://www.things.com/order.asp?custID=101&part=555A&qy=20&price=10&ship=boat&shipcost=5&total=205‬‬
‫در این عبارت می توان با تغییر ‪ 205‬به ‪ 25‬همان مقدار کاال را با قیمتی بسیار پایین تر خریداری نمود‪.‬‬
‫‪22‬‬
‫خطای برنامه – خطای زمان بررسی تا زمان استفاده‬
‫تعریف‪:‬‬
‫کنترل دسترسی‪ ،‬قسمتی مهم و اساسی در امنیت کامپیوتر است‪.‬‬
‫در کنترل دسترسی‪ ،‬هر نوع دسترسی به برنامه ها باید توسط عاملی به صورت سراسری کنترل شود‪.‬‬
‫خطای زمان بررسی تا زمان استفاده‪ ،‬زمانی رخ می دهد که کنترل دسترسی به صورت دائم انجام نشده و‬
‫در بین زمان های کنترل‪ ،‬خطاهایی ایجاد شود‪.‬‬
‫این خطا مانند زمانی است که خریداری پولی را به فروشنده داده و فروشنده پس از چک کردن آن قصد‬
‫دادن رسید به وی را دارد؛ در این زمان خریدار فرصت برداشتن مقداری از پول بدون توجه فروشنده را‬
‫دارد‪.‬‬
‫‪23‬‬
‫خطای برنامه – خطای زمان بررسی تا زمان استفاده‬
‫این خطا برای دسترسی به یک فایل نیز می تواند رخ دهد‪.‬‬
‫در مثال زیر که یک ساختار داده ای است‪ ،‬فردی از سیستم تقاضای دسترسی به فایلی با نام ‪ my-file‬و‬
‫انجام عمل ’‪ change byte 4 to ‘A‬را می نماید‪.‬‬
‫زمانی که سیستم در حال بررسی نام فایل و چک کردن دسترسی های امکان پذیر به آن است‪،‬‬
‫یک حمله کننده می تواند نام فایل را به ‪ your-file‬تغییر دهد‪.‬‬
‫‪24‬‬
‫خطای برنامه– خطای زمان بررسی تا زمان استفاده‬
‫نکات امنیتی‪:‬‬
‫مثالی از کنترل دسترسی ناقص‪ ،‬چک کردن یک عمل و انجام عملی دیگر است‪.‬‬
‫همواره باید از عدم تغییر نتایج در بین بازه های زمانی اطمینان داشت‪ .‬راه هایی برای این کار‬
‫وجود دارد که شامل موارد زیر است‪:‬‬
‫• اطمینان از عدم نمایاندن و دسترسی به داده ها در زمان کنترل کردن نوع دسترسی‬
‫• عدم وقفه در زمان کنترل‬
‫• مقایسه داده های کاربر با داده های اولیه از طریق کپی کردن داده های اولیه و مقایسه جمع تطبیقی‬
‫آنها در انتها‬
‫‪25‬‬
‫خطای برنامه ‪ -‬ترکیب این خطاها‬
‫خطاهای ذکر شده در قسمت های قبل می توانند در ترکیب با یکدیگر نیز بکار روند‪.‬‬
‫مثال‪:‬‬
‫یک مهاجم می تواند با خطای سرریز بافر باعث ایجاد وقفه در کار سیستم شود‪ .‬در همین‬
‫زمان‪ ،‬وی با استفاده از خطای زمان کنترل تا زمان استفاده‪ ،‬شناسه ی جدیدی برای خود ایجاد‬
‫کرده و با استفاده از خطای واسه گری ناقص‪ ،‬می تواند امتیازهایی بدست آورد‪.‬‬
‫‪26‬‬
‫ویروس ها و برنامه های مخرب دیگر‬
‫برنامه ها به خودی خود‪ ،‬به ندرت ممکن است باعث ایجاد تهدید در سیستم شوند‪.‬‬
‫از آنجا که داده ها و عملیاتی که روی آنها انجام می شود قابل مشاهده برای افراد نیست‪ ،‬افراد‬
‫خرابکار با ایجاد برنامه هایی به آنها ایجاد دسترسی کرده و تهدید هایی را ایجاد می نمایند‪.‬‬
‫‪27‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬نگرانی در مورد کدهای مخرب‬
‫هیچ کس عملی غیرمنتظره را در اجرای برنامه های خود نمی پسندد‪.‬‬
‫کدهای مخرب با توجه به قصد افراد مخرب‪ ،‬به صورت غیرمنتظره در سیستم رفتار می کنند‪.‬‬
‫برنامه های مخرب در قسمت هایی از سیستم مانند کل برنامه و یا قسمتی از برنامه در حال‬
‫اجرا‪ ،‬کمین کرده و عمل مورد نظر خود را انجام می دهند‪.‬‬
‫چنین موقعیتی ممکن است در زمان نصب برنامه ای بر روی سیستم ایجاد شود؛ در این حالت‬
‫تغییرات بسیار زیادی در فایل های موجود در سیستم ایجاد شده ونیز‪ ،‬کدهای جدیدی در آن‬
‫اجرا می شوند‪ ،‬که کاربر رضایت صریح و مستقیمی از آنها ندارد‪.‬‬
‫‪28‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬نگرانی در مورد کدهای مخرب‬
‫‪ .1‬کدهای مخرب می توانند آسیب زیادی وارد کنند‪:‬‬
‫کدهای مخرب قادر به انجام هر عملی که توسط دیگر برنامه انجام می شود‪ ،‬هستند‪ .‬مانند نوشتن یک متن‬
‫در یک کامپیوتر یا متوقف کردن اجرای یک برنامه و ‪...‬‬
‫همچنین کدهای مخرب می توانند در یک زمان به هیچ وجه کاری انجام ندهند و ناشناخته باقی بمانند؛ اما‬
‫پس از یک اتفاق‪ ،‬مانند گذشت زمان یا اجرای یک برنامه و ‪ ...‬نمایان شوند‪.‬‬
‫در واقع می توان گفت رفتار برنامه های مخرب مانند رفتار یک بچه دوساله است؛ عمل هایی که وی می‬
‫تواند و انتظار می رود انجام دهد مشخص است‪ ،‬اما گاهی ممکن است عملی خارج از انتظار و ناگهانی‬
‫انجام دهد‪.‬‬
‫کدهای مخرب در واقع هویت کاربر را دارند و هرکاری که او می تواند انجام دهد‪ ،‬آنها نیز می توانند‪.‬‬
‫‪29‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬نگرانی در مورد کدهای مخرب‬
‫‪ .2‬حضور طوالنی مدت کدهای مخرب در اطراف‬
‫کدهای مخرب همواره در اطراف وجود داشته و تأثیرات آنها بسیار نافذ است‪.‬‬
‫راه های مقابله با کدهای مخرب باید آموخته و برای مقابله با آنها بکار گرفته شود‪.‬‬
‫‪30‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬انواع کدهای مخرب‬
‫کد مخرب یا برنامه هرز(‪)malicious code or rogue program‬‬
‫کد مخرب یا برنامه هرز‪ ،‬نامی کلی برای تأثیرات ناخواسته و غیرمطلوبی است که توسط عامل‬
‫هایی با قصد آسیب زدن در برنامه ها ایجاد می شود‪.‬‬
‫تعریف باال شامل برنامه ها و خطاهایی که به قصد آسیب به سیستم نیستند‪ ،‬نمی شود؛ گرچه‬
‫این خطاها می توانند تأثیراتی منفی داشته باشند‪.‬‬
‫همچنین تعریف ارائه شده‪ ،‬برنامه هایی که در ترکیب با برنامه های دیگر آسیب هایی به‬
‫سیستم وارد می کنند را شامل نمی شود‪.‬‬
‫‪31‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬انواع کدهای مخرب‬
‫ویروس (‪)virus‬‬
‫ویروس ها برنامه هایی هستند که قابلیت تکثیر خود را داشته و می توانند از یک برنامه‬
‫مخرب به یک برنامه عادی انتقال یابند‪.‬‬
‫نام ویروس به این دلیل است که آنها می توانند خود را به قسمت های سالم چسبانده و باعث‬
‫معیوب شدن آنها شوند‪.‬‬
‫ویروس ها می توانند دو حالت زیر را داشته باشند‪:‬‬
‫• موقتی و گذرا ‪ :‬این نوع ویروس فقط زمانی که برنامه ای که روی آن قرار دارد‪ ،‬اجرا شود‪ ،‬اجرا‬
‫می شود‪.‬‬
‫• پایدار و ثابت‪ :‬این ویروس در حافظه قرار داشته و بدون توجه به برنامه میزبان‪ ،‬اجرا می شود‪.‬‬
‫‪32‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬انواع کدهای مخرب‬
‫اسب تروجان (‪)Trojan horse‬‬
‫اسب تروجان یک کد مخرب است که عالوه بر تأثیر اولیه خود‪ ،‬دارای تأثیر دیگری است که‬
‫قابل مشاهده نمی باشد‪.‬‬
‫مثال‪:‬‬
‫زمانی که کاربر شناسه و رمز عبور خود را برای ورود به سیستم وارد می نماید؛ در این زمان‬
‫این کد مخرب نسخه ای از آن را برای استفاده در زمان های دیگر بر می دارد‪.‬‬
‫‪33‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬انواع کدهای مخرب‬
‫بمب منطقی و بمب زمانی (‪)logic and time bomb‬‬
‫یک بمب منطقی‪ ،‬کدی مخرب است که وقتی شرایط خاصی ایجاد شود عمل می نماید‪ .‬همچنین‬
‫یک بمب زمانی‪ ،‬بمبی است که پس از گذشت مدت زمان معین اجرا می شود‪.‬‬
‫در گریز یا در پشتی (‪)trap door or back door‬‬
‫در گریز یا در ُپشتی‪ ،‬حالتی است که فرد میتواند از راهی غیر از راه معمول و شناخته شده‪ ،‬به‬
‫برنامه ای دسترسی داشته باشد‪.‬‬
‫‪34‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬انواع کدهای مخرب‬
‫کرم (‪)worm‬‬
‫کرم ها کدهای مخربی هستند که قابلیت تکثیر خود را داشته و در شبکه عمل میکنند‪.‬‬
‫تفاوت کرم و ویروس‪:‬‬
‫• کرم ها در شبکه عمل می کنند؛ اما محل عملکرد ویروس ها درهر رسانه است‪.‬‬
‫• کرم ها برنامه هایی قابل اجرا به صورت تکی ایجاد می نمایند؛ اما ویروس حتما باید روی برنامه ای‬
‫میزبان قرار گیرند‪.‬‬
‫‪Rabbit‬‬
‫یک ‪ rabbit‬برنامه ای مخرب مانند کرم یا ویروس است که خود را بدون هیچ محدودیتی تکثیر کرده‬
‫وهدفش هدر دادن منابع است‪.‬‬
‫‪35‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬نحوه اتصال ویروس ها‬
‫یک ویروس به خودی خود نمی تواند اجرا شود‪ ،‬بلکه نیاز به یک عامل انسانی دارد که با‬
‫شروع عملی‪ ،‬باعث فعال شدن ویروس شود‪.‬‬
‫مثال ‪ :‬قرار دادن سی دی ویروسی در دستگاه و ‪...‬‬
‫پس از فعال شدن ویروس اولیه‪ ،‬ویروس هایی که از آن تکثیر شده اند به راحتی فعالیت خود‬
‫را شروع می کنند‪.‬‬
‫بسیاری از ویروس ها به ایمیل ضمیمه می شوند؛ در این حالت مخرب فایلی را به ایمیل‬
‫ضمیمه کرده و گیرنده را متقاعد می کند آن را باز کند که با این کار ویروس منتشر می شود‪.‬‬
‫‪36‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬نحوه اتصال ویروس ها‬
‫ویروس های الحاق شده‬
‫در این حالت‪ ،‬ویروس قبل از اجرای یک برنامه خود را به آن ملحق کرده و هر زمان برنامه‬
‫اجرا می شود‪ ،‬ویروس نیز اجرا می شود‪.‬‬
‫‪37‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬نحوه اتصال ویروس ها‬
‫ویروس هایی در اطراف برنامه‬
‫در این حالت برنامه پس از فراخوانی برای وجود ویروس‪ ،‬کنترل می شود‪ .‬بنابراین یک مخرب‬
‫پس از کنترل شدن آن و قبل از اجرا‪ ،‬ویروس رابه آن ملحق می کند‪.‬‬
‫‪38‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬ویروس های اسناد‬
‫معمول ترین حالت که با آن مواجهیم‪ ،‬قرار گرفتن ویروس ها در اسنادی مانند پایگاه داده ها‪،‬‬
‫عکس ها‪ ،‬اسالید و ‪ ...‬است‬
‫در این حالت این سند ترکیبی از داده هایی مانند حرف و عدد و نیز‪،‬‬
‫‪command‬‬
‫هایی مانند‬
‫فرمول و زبان برنامه نویسی است‪.‬‬
‫یک مخرب می تواند کدهای خود را در‬
‫اجرا شود‪.‬‬
‫‪command‬‬
‫ها قرار دهد که با اجرای سند‪ ،‬ویروس نیز‬
‫‪39‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬روش گرفتن کنترل توسط ویروس ها‬
‫یک ویروس (‪ )V‬می تواند با استفاده از راه های زیر‪ ،‬به جای یک برنامه (‪ )T‬فراخوانی شود‪:‬‬
‫• ویروس خود را جای برنامه قرار می دهد و می گوید «‪»I am T‬‬
‫• ویروس برنامه را حذف کرده و می گوید «‪»call me instead of T‬‬
‫• ویروس به راحتی خود را به جای برنامه قرار داده و می گوید «‪»invoke me‬‬
‫یک ویروس می تواند کنترل را بدست گیرد‪ .‬این امر در دو حالت امکان پذیر است‪:‬‬
‫• تصاحب فضای یک برنامه در یک فایل‬
‫• عوض کردن مکان اشاره گر و تغییر آن به سمت خود‬
‫شکل بعد این موضوع را نشان می دهد‪:‬‬
‫‪40‬‬
‫ویروس ها و برنامه های مخرب دیگر‪ -‬روش گرفتن کنترل توسط ویروس ها ‪ -‬ادامه‬
‫‪41‬‬
‫هدف کدهای مخرب – دَر گریز‬
‫در گریز‪ ،‬همانطور که در اسالیدهای قبل گفته شد‪ ،‬یک راه ورود به ماژول است که جایی ذکر‬
‫نشده است‪.‬‬
‫دالیل نیاز به در گریز‪:‬‬
‫• برای تست کردن ماژول‬
‫• اجازه دسترسی در صورت از بین رفتن ماژول در آینده‬
‫• اجازه دسترسی در صورت استفاده ماژول در تولید‬
‫• ‪....‬‬
‫‪42‬‬
‫هدف کدهای مخرب – دَر گریز‬
‫برای تست یک جزء به تنهایی باید از ‪ stub‬و ‪ driver‬استفاده نمود که در شکل زیر نشان داده شده است؛‬
‫در این حالت برای هر جزء باید ورود و خروج جداگانه وجود داشته باشد‪.‬‬
‫در این شکل ‪ driver ،MAIN‬و ‪ OUTPUT ،SORT‬و ‪ stub ، NEWLINE‬هستند‪.‬‬
‫‪43‬‬
‫هدف کدهای مخرب – دَر گریز‬
‫‪44‬‬
‫هدف کدهای مخرب – حمالت‬
‫حمله ‪salami‬‬
‫در این حمله‪ ،‬ار بیت های به ظاهر بی اهمیت استفاده شده و با ترکیب آنها‪ ،‬نتایج ارززشمندی گرفته می شود‪.‬‬
‫این بیت ها در نظر افراد‪ ،‬مانند مقادیر خرد پول هستند که در نظر گرفته نمی شوند‪.‬‬
‫حمله‬
‫‪man in the middle‬‬
‫در این حمله‪ ،‬عاملی بین دو موجودیت‪ ،‬که غالبا ورودی افراد و یک برنامه هستند قرار گرفته و باعث اختالل‬
‫در این ارتباط می شوند‪.‬‬
‫حمله‬
‫‪timing‬‬
‫در این حمله با تخمین اندازه ورودی و حدس زدن آن‪ ،‬با توجه به زمان مورد استفاده برای آن‪ ،‬و استفاده از آن‬
‫در جاهایی مثل رمزنگاری‪ ،‬حمله صورت می گیرد‪.‬‬
‫‪45‬‬
‫هدف کدهای مخرب – حمالت‬
‫حمله ‪covert channel‬‬
‫در ابن حمله‪ ،‬اطالعات از یک منبع‬
‫اطالعاتی به روشی که دیگران متوجه نشوند‪،‬‬
‫خارج شده و به عبارت دیگر نشت می کنند‪.‬‬
‫شکل این حالت را نشان می دهد‪:‬‬
‫‪46‬‬
‫کنترل هایی علیه آسیب پذیری ها‬
‫از آنجا که همواره پیشگیری بهتر از درمان است‪ ،‬بهتر است کنترل هایی برای جلوگیری از تهدیدهای‬
‫سیستم وجود داشته باشد‪.‬‬
‫کنترل ها به سه دسته کلی تقسیم می شوند‪:‬‬
‫• کنترل های توسعه ای‬
‫• کنترل های سیستم عامل‬
‫• کنترل های مدیریتی‬
‫‪‬‬
‫کنترل های توسعه ای‪ ،‬کنترل هایی هستند که در زمان ایجاد و توسعه برنامه که شامل عملیات‬
‫مشخص کردن‪ ،‬طراحی‪ ،‬ساخت و تست است‪ ،‬اعمال می شوند‪.‬‬
‫‪47‬‬
‫کنترل هایی علیه آسیب پذیری ها‬
‫پیمانه ای بودن‪ ،‬محفوظ بودن و پنهان کردن اطالعات‬
‫پیمانه یا ‪ ،module‬واحدهای مستقل کوچکی در طراحی و کد هستند که وجود آنها در سیستم در توسعه و‬
‫حفظ امنیت آن نقش دارد‪ .‬زیرا امکان توسعه دادن و یا اعمال شرایط امنیتی روی یک ماژول ساده تر‬
‫است‪.‬‬
‫اگر ماژولی به صورت جدا از ماژول های دیگر نگهداری شود‪ ،‬ردیابی و امکان یافتن خطا و نیز رفع آن‬
‫ساده تر است؛ زیرا در این حالت تغییرات اعمال شده به دیگر ماژول ها منتقل نمی شود‪ .‬به این حالت‬
‫محفوظ بودن یا ‪ encapsulation‬می گویند‪.‬‬
‫مزیت دیگر پیمانه ای بودن‪ ،‬اختفای اطالعات است؛ زیرا در این حالت هر ماژول اطالعات پیاده سازی و‬
‫طراحی خود را از دیگران مخفی می نماید و هنگام تغییرآن‪ ،‬قسمت های دیگر طراحی تغییری نمی کنند‪.‬‬
‫‪48‬‬
‫کنترل هایی علیه آسیب پذیری ها‬
‫پیمانه ای کردن یا‬
‫‪modularization‬‬
‫پیمانه ای کردن عمل تقسیم یک ‪ task‬به زیر ‪ task‬ها است‪ .‬شکل زیر این فرایند را نشان می دهد‪:‬‬
‫‪49‬‬
‫کنترل هایی علیه آسیب پذیری ها‬
‫پیمانه ای کردن یا ‪ - modularization‬ادامه‬
‫یک پیمانه باید دارای پیوستگی باال (‪ )cohesion‬و همبستگی (‪ )coupling‬پایین باشد‪ .‬همبستگی میزان‬
‫وابسته بودن یک ماژول به دیگری است‪ .‬شکل زیر این مورد را نشان می دهد‪:‬‬
‫‪50‬‬
‫کنترل هایی علیه آسیب پذیری ها‬
‫پیمانه ای کردن یا ‪ - modularization‬ادامه‬
‫در اختفای اطالعات ماژول مانند یک جعبه سیاه عمل می کند؛ در این حالت توسعه دهندگان دیگر‪ ،‬نیازی‬
‫به دانستن چگونگی عمل کردن این ماژول ندارند‪ ،‬زیرا مطمئن هستند که کار خود را به درستی انجام می‬
‫دهد‪ .‬شکل زیر اختفای اطالعات را نشان می دهد‪:‬‬
‫‪51‬‬
‫کنترل هایی علیه آسیب پذیری ها‪ -‬تست کردن‬
‫تست کردن‪ ،‬فرایند کنترل کیفیت نرم افزار است که انواع زیر را دارد‪:‬‬
‫• تست واحد‪ ،‬که در آن هر ماژول به تنهایی تست شده و هدف این است که با دادن ورودی مناسب‪،‬‬
‫دریافت خروجی مورد نظر تضمین شود‪ .‬به عیارتی هر ماژول به تنهایی درست عمل نماید‪.‬‬
‫• تست مجتمع‪ ،‬که در آن عملکرد ماژول ها در ارتباط با یکدیگر سنجیده شده و همکاری آنها مدنظر‬
‫است‪.‬‬
‫• تست عملیاتی‪ ،‬که در آن عملکرد سیستم تست می شود‪ .‬به عبارتی در این تست بررسی میشود که آیا‬
‫سیستم در شرایط مشخص عملکرد مورد نظر را دارد یا خیر‪.‬‬
‫• تست مقبولیت‪ ،‬که در آن بررسی می شود سیستم طراحی شده با توجه به خواسته های کاربر‪ ،‬مورد‬
‫قبول وی هست یا نه‪ .‬خروجی این تست سیستم پذیرفته شده از نظر کاربر است‪.‬‬
‫‪52‬‬
‫کنترل هایی علیه آسیب پذیری ها‪ -‬تست کردن‬
‫• تست نصب‪ ،‬که در آن بررسی می شود که سیستم پس از نصب در محل مورد نظر‪ ،‬عملکرد مورد‬
‫نظر را دارد یا خیر‪.‬‬
‫• تست رگرسیون‪ ،‬که بررسی می کند پس از اعمال تغییراتی در سیستم‪ ،‬عملکرد قسمت های مختلف‬
‫تغییر نکرده و همانطور باقی مانده باشد‪.‬‬
‫همه تست های گفته شده به دو دسته کلی زیر تقسیم می شوند‪:‬‬
‫•‬
‫‪Black box test‬‬
‫در این حالت محتوا و داخل سیستم برای تست کننده ها مشخص نبوده و تنها بررسی می کنند که‬
‫ورودی مشخص‪ ،‬خروجی درستی داشته باشد‬
‫•‬
‫‪Clear box test or white box‬‬
‫در این حالت تست کننده ها‪ ،‬طراحی و کدهای سیستم را نیز مورد بررسی قرار می دهند‪.‬‬
‫‪53‬‬
‫کنترل هایی علیه آسیب پذیری ها‬
‫انواع دیگر تست کردن‪:‬‬
‫تست مستقل‪:‬‬
‫در این تست‪ ،‬توسعه دهنده نیاز به مخفی کردن چیزی از ماژول نداشته و تغییرات به زیر سیستم‬
‫ها انتقال نمی یابند‪.‬‬
‫تست نفوذ‪:‬‬
‫در این حالت‪ ،‬توسعه دهنده به جای بررسی آنچه سیستم باید انجام دهد‪ ،‬سیستم را در حالت شکست می‬
‫دهد‪ .‬در این حالت او بررسی می کند که سیستم کاری که نباید را انجام می دهد یا خیر‪.‬‬
‫‪54‬‬
H.M.Hassanzade, [email protected]
55
‫پایان‬