|  |
| --- |
| بخشی از یک مجموعه دربارهٔ |
| امنیت اطلاعات |
| نسخه بُردارینسخه بُرداری |
| 
رده‌های مرتبط با امنیت |
| * امنیت رایانه
* امنیت خودرو
* جرایم سایبری
	+ قاچاق جنسی سایبری
	+ کلاهبرداری رایانه‌ای
* سایبرگدون
* سایبرتروریسم
* جنگ مجازی
* جنگ الکترونیک
* جنگ اطلاعاتی
* امنیت اینترنت
* موبایل سکوریتی
* امنیت شبکه
* محافظت در برابر کپی
* مدیریت حقوق دیجیتال
 |
| 
تهدیدها |
| * آگهی‌افزار
* تهدیدهای پیشرفته و مستمر
* اجرای کد دلخواه
* درهای پشتی
* درهای پشتی سخت‌افزاری
* تزریق کد
* جرم‌افزار
* تزریق اسکریپت از طریق وبگاه
* کریپتوجکینگ
* بات‌نت‌ها
* نقص داده
* دانلود درایو-بای
* اشیاء کمکی مرورگر
* جرایم رایانه‌ای
* ویروس‌ها
* تراش‌دادن داده
* محروم‌سازی از سرویس
* شنود
* کلاهبرداری از طریق ایمیل
* رایانامه‌نگاری متقلبانه
* اکسپلویت
* کی‌لاگرها
* بمب‌های منطقی
* بمب‌های ساعتی
* فورک بمب‌ها
* زیپ بمب‌ها
* شماره‌گیرهای تقلبی
* بدافزارها
* پی‌لود
* فیشینگ
* موتور چندشکلی
* ترفیع امتیازی
* باج‌افزار
* روت‌کیت‌ها
* بوت‌کیت‌ها
* ترس‌افزار
* شل‌کد
* اسپم
* مهندسی اجتماعی (امنیت)
* تراش‌دادن صفحه نمایش
* جاسوس‌افزار
* اشکال‌های نرم‌افزاری
* اسب‌های تروآ
* تروجان‌های سخت‌افزاری
* تروجان‌های کنترل از راه دور
* آسیب‌پذیری
* وب شل‌ها
* وایپر
* کرم‌ها
* تزریق اس‌کیوال
* نرم‌افزار امنیتی سرکش
* زامبی
 |
| 
محافظت |
| * امنیت برنامه
	+ کدنویسی امن
	+ ایمن‌سازی پیش‌فرض
	+ ایمن‌سازی با طراحی
		- مورد سوءاستفاده
* کنترل دسترسی در رایانه
	+ اصالت‌سنجی
		- احراز هویت چندعاملی
	+ کسب اجازه
* نرم‌افزار امنیت رایانه
	+ نرم‌افزار ضدویروس
	+ سیستم عامل متمرکز بر امنیت
* امنیت داده‌محور
* مبهم‌سازی کد
* داده پوشانی
* رمزگذاری
* دیوار آتش
* سامانه تشخیص نفوذ
	+ تشخیص نفوذ مبتنی بر میزبان (HIDS)
	+ تشخیص ناهنجاری
* مدیریت اطلاعات و رویدادهای امنیتی (SIEM)
* درگاه امن موبایل
* محافظت از خود برنامه در زمان اجرا
 |
| * ن
* ب
* و
 |

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

جلوگیری از سرریز بافر
---------------------

سرریز بافر، یک آسیب‌پذیری امنیتی نرم‌افزاری رایج می‌باشد، زمانی اتفاق می‌افتد که یک فرایند تلاش می‌کند داده‌های بیشتری نسبت به ظرفیت بافر ذخیره کند. برای مثال، در صورتی که (۸ بخش) فضا برای ذخیره‌سازی داشته باشیم، اگر تلاش کنیم یک فضای بیشتر (یعنی ۹ بخش) را مورد استفاده قرار دهیم خطا وجود خواهد داشت. در حافظه کامپیوتر داده‌های سرریز شده ممکن است داده‌ها را در مکان بعدی بازنویسی کنند که می‌تواند یک آسیب‌پذیری امنیتی (انفجار پشته) یا خاتمه برنامه (segmentation fault) رخ دهد.

نمونه یک برنامه نوشته شده به زبان C که مستعد سرریز بافر است 

```
int vulnerable\_function(char \* large\_user\_input) {
char dst[SMALL];
strcpy(dst, large\_user\_input);
}

```
 اگر ورودی کاربر بزرگتر از بافر مقصد باشد، سرریز بافر رخ خواهد داد. برای رفع خطای این برنامه ناامن از سرریز بافر احتمالی از strncpy استفاده کنید. 

```
int secure\_function(char \* user\_input) {
char dst[BUF\_SIZE];
 //copy a maximum of BUF\_SIZE bytes
strncpy(dst, user\_input,BUF\_SIZE);
}

```
 یک جایگزین امن دیگر این است که به صورت پویا حافظه را با استفاده از malloc بگذارید. 

```
char \* secure\_copy(char \* src) {
size\_t len = strlen(src);
char \* dst = (char \*) malloc(len + 1);
if(dst != NULL){
strncpy(dst, src, len);
//append null terminator
 dst[len] = '\0';
}
return dst;
}

```
 در قطعه کد بالا، برنامه تلاش می‌کند تا محتویات ***src*** را به ***dst*** کپی کند ***،*** در حالی که همچنین مقدار بازگشتی malloc را بررسی می‌کند تا اطمینان حاصل شود که حافظه کافی برای مقصد buffer اختصاص داده می‌شود.

جلوگیری از حمله رشته فرمت
-------------------------

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

عملکرد C printf خروجی را به stdout می‌نویسد. اگر پارامتر عملکرد printf به درستی فرمت نشده باشد، می‌توان چندین اشکال امنیتی را به وجود آورد. برنامه زیر نمونه حمله رشته فرمت است. 

```
int vulnerable\_print(char \* malicious\_input) {
printf(malicious\_input);
}

```
 پارامترهای مخرب برای این برنامه می‌تواند شامل "٪ s٪ s٪ s٪ s٪ s٪ s٪ s" باشد، که سبب بروز خطا برنامه هنگام خواندن از بخش نامناسب حافظه می‌شود.

جلوگیری از سرریز کامل
---------------------

سرریز عدد صحیح زمانی اتفاق می‌افتد که عملیات محاسباتی یک عدد صحیح که در فضای موجود نمایش داده می‌شود بسیار بزرگ باشد. برنامه ای که به درستی برای سرریز عدد صحیح بررسی نمی‌شود، اشکالات و سوء استفاده‌های نرم‌افزاری بالقوه را به همراه دارد.

کد زیر تابعی در C ++ است که تلاش می‌کند تا تأیید کند که مجموع x و y کمتر یا برابر مقدار تعریف شده MAX است: 

```
bool sumIsValid\_flawed(unsigned int x, unsigned int y) {
unsigned int sum = x + y;
return sum <= MAX;
}

```
 مشکل کد این است که سرریز عدد صحیح را چک نمی‌کند. اگر مجموع x و y بزرگتر از حداکثر مقدار احتمالی یک `unsigned int` ، عملیات اضافه شدن سرریز خواهد شد و احتمالاً در نتیجه یک مقدار کمتر یا برابر MAX خواهد بود، حتی اگر مجموع x و y بزرگتر از MAX باشد.

تابع زیر سرریز با تأیید مقدار بزرگتر یا برابر با x و y است. اگر مجموع سرریز شود، مجموع آن کمتر از x یا کمتر از y خواهد بود. 

```
bool sumIsValid\_secure(unsigned int x, unsigned int y) {
unsigned int sum = x + y;
return sum>= x && sum>= y && sum <= MAX;
}

```

جستارهای وابسته
---------------

* برنامه‌نویسی دفاعی
* اشکال امنیتی

منابع
-----