• 44965531 (21) 98+
  • تهران – فلکه دوم صادقیه -خیابان آیت الله کاشانی – کوچه احمدی - پلاک ۳ (ساختمان آراد) - واحد ۳

عماد (امن سازی)

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

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

امن سازی نرم­ افزارها

راه‌حل امن‌سازی نرم‌افزارها در دو ایده‌ی کلی نهفته است:

  • نفوذ و عیب‌یابی امنیتی و رفع نقایص با وصله‌های امنیتی پس از تولید
  • در نظر داشتن امنیت در فرایند تولید نرم‌افزار (مهندسی نرم‌افزار امن)

طبق گزارش CERT نود درصد نقاط ضعف گزارش شده در نرم‌افزارها به دلیل رعایت نکردن نکات امنیتی شناخته شده در سیستم‌ها بوده است. در همین گزارش عنوان شده است که ۱۰ نقطه‌ی ضعف شناخته‌ شده‌ی معروف، دلیل اصلی ۷۵٪ مشکلات امنیتی گزارش شده در نرم‌افزارها است. بنابراین می‌توان گفت که اگر تولید کنندگان نرم‌افزار با این ده مشکل آشنایی داشته باشند و در تولید نرم‌افزار آن‌ها را رعایت کنند، حدوداً مشکلات امنیتی نر‌م‌افزارها ۷۵٪ کاهش می‌یابد. بنابراین در نظر گرفتن امنیت از همان ابتدای فرایند تولید ، بخش قابل توجهی از آسیب‌پذیریهای امنیتی نرم‌افزارها راپوشش می‌دهد. نتایج زیر حاصل از تحقیقات انجام گرفته بر روی نرم‌افزارها است و مؤید همین مطلب است که هرچه نگرش امنیتی زودتر در چرخه‌ی تولید نرم‌افزار بروز پیدا کند، هزینه‌های تحمیلی در مراحل بعد از چرخه‌ی زندگی نرم‌افزار کاهش پیدا می‌کند:

  • اگر هزینه‌ی زمان طراحی را در یک واحد در نظر بگیریم، هزینه زمانی رفع همان خطاها و نقایص در پیاده‌سازی ۵/۶ برابر خواهد بود.
  • اگر آسیب‌پذیری امنیتی در زمان تست سیستم کشف و رفع شود هزینه ۱۵ برابر خواهد بود.
  • اگر مشکل امنیتی به عنوان یک وصله‌ی الحاقی به نرم‌افزار پس از انتشار آن حل شود،‌ هزینه معادل ۶۰ برابر هزینه‌ی زمان طراحی خواهد داشت.

راه‌حل اساسی برای تولید یک نرم‌افزار به‌صورت امن الزامات زیر را در بردارد:

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

 

مشكل این‌جاست كه روش‌های موجود برای توسعه‌ی نرم‌افزارها معمولاً همه‌ی الزامات فوق را هم‌زمان برآورده نمی‌كنند.

با این‌که در بسیاری موارد نرم‌افزار و برنامه‌ی کاربردی در کنار هم و یا جایگزین هم بکار می‌روند روشن شدن مفهوم نرم‌افزار در مقابل برنامه‌ی کاربردی نقطه‌ی آغاز مناسبی است که به تعیین دامنه‌ی بحث نیز کمک می‌نماید:

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

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

با این‌که می‌توان از حملات سرریز بافر با استفاه از مشاهده‌ی ترافیک HTTP که از پورت ۸۰ می‌رسد، جلوگیری نمود (بعد از تولید نرم‌افزار) ولی راه‌حل بهتر کدنویسی صحیح برای مقابله‌ی اصولی و بنیادی با حملات سرریز بافر در مرحله‌ی تولید نرم‌افزار است.
ولی امروزه تعداد اندکی از سازمان‌ها از روش‌های ایجاد نرم‌افزار امن استفاده می‌کنند. باید پرسید چرا سازمان‌ها از روش‌های شناخته شده برای ایجاد نرم‌افزار‌های امن استفاده نمی‌کنند؟ دلیل آن‌را در دو مورد اصلی می‌توان برشمرد؛ اول، به این دلیل که انجام این کار در همه‌ی سطوح (افراد، تیم، پروژه و سازمان) مشکل است و فراگیر بودن آن کار بسیار پیچیده‌ای است. دوم این‌که بسیاری از افراد عقیده دارند که کارایی بسیار مهم‌تر از امنیت است و در نتیجه سازمان‌ها اعتقاد دارند که ایجاد یک نرم‌افزار با کیفیت بالا و امن، بسیار گران است. درحالیکه شواهدی وجود دارد که نشان می‌دهد پردازه‌‌هایی وجود دارند که کیفیت بالا و سطح امنیتی خوبی دارند اما هزینه‌ی تولید آنها بسیار کمتر از هزینه‌ای است که مشکلات امنیتی می‌تواند برای نرم‌افزار ایجاد کند.

حوزه‌ دانش در امنیت نرم‌افزار

دانش مربوط به امنیت نرم‌افزار را می‌توان به هفت بخش عمده تقسیم كرد. این بخش‌ها عبارتند از: اصول، خطوط راهنما، قوانین، الگوهای حمله، مخاطرات، آسیب‌پذیریها و سوءاستفاده‌ها. این هفت حوزه در دانش را می‌توان در سه دسته‌ی كلی دانش‌های تشخیصی، تجویزی، و پیرامونی تقسیم كرد.
دانش‌های تجویزی اصول، خطوط راهنما و قوانین را دربر می‌گیرند. این‌گونه دانش‌ها سطحی انتزاعی از اصول معماری مانند كمترین امتیاز تا قوانین كدنویسی مخصوص یك زبان مانند اجتناب از کاربرد تابعgets () در زبان C را پوشش می‌دهند. دانش تجویزی بایدها و نبایدها را در تولید نرم‌افزار امن تعیین می‌كند. اصل به دانش عمومی‌ مسلم در امنیت اطلاق می‌شود كه حاصل تجربه باشد. با این‌كه اصول در سطوح بالاتر از عملیات استفاده می‌شوند ولی حاصل تجربه‌های عملیاتی می‌باشند. هر اصل می‌تواند تعدادی قانون و خطوط راهنما داشته باشد. نیازمندیهای امنیتی و معماری نرم‌افزار از اصول تأثیر می‌پذیرند. خطوط راهنما پیشنهاداتی برای انجام و یا عدم انجام اموری هستند كه در سطح معنایی در خلال توسعه‌ی سیستم مطرح می‌شوند. خطوط راهنما معمولاً در زمینه‌های فنی ویژه مانند J2EE،.NET، ماژول‌های هسته‌ی لینوكس و از این قبیل مطرح می‌شوند و توسط تحلیل‌های انسانی ارزیابی می‌گردند. خطوط راهنما به رفع نقایص طراحی و خطاهای كدنویسی كمك می‌كنند. هریک از خطوط ‌راهنما می‌تواند بر اساس یك اصل بوده و تعدادی قانون مرتبط با خود داشته باشد. قوانین پیشنهاداتی برای انجام و یا عدم انجام هستند كه در خلال توسعه‌ی نرم‌افزار در سطح نحوی بیان می‌شوند. قوانین می توانند با پویش لغوی یا تجزیه‌ی ساختار نرم‌افزار بازبینی شوند. قوانین در خصوص زبان‌های برنامه‌سازی بوده و برای غلبه بر خطای برنامه‌نویسی بیان می‌شوند. كد تولید شده در نرم‌افزار كاملاً متأثر از قوانین است.

دانش تشخیصی برای تحلیل و ارزیابی امنیتی الزامی‌ است. این دانش در سطح كاربردی مورد نیاز افراد عملیاتی در پروژه است و به آن‌ها در تشخیص مشكلات متداول امنیتی و رفع آن‌ها كمك می‌كند. الگوهای حمله، آسیب‌پذیریها و سوءاستفاده‌ها در بخش دانش تشخیصی قرار می‌گیرند. الگوی حمله با اتكا به مجموعه‌ای از سوءاستفاده‌ها در نرم‌افزار نتیجه می‌شود و شامل مجموعه‌ای از آسیب‌پذیریها و چگونگی كاربرد و سوء‌استفاده از آن‌ها به منظور وقوع یك حمله‌ی موفق است. الگوی حمله به تعیین مخاطرات موجود در نرم‌افزار و سوءاستفاده‌های احتمالی از آن كمك می‌كند. این الگوها می‌توانند در طراحی Misuse Caseها و Abuse caseها و همچنین طراحی آزمون امنیتی نرم‌افزار مفید باشند. دانش آسیب‌پذیری شامل توصیف آسیب‌پذیریهای نرم‌افزاری است كه در سیستم‌ها تجربه و گزارش شده‌اند. آسیب‌پذیری نتیجه‌ی نقص در نرم‌افزار است كه حمله كننده می‌تواند با سوءاستفاده از آن دسترسیهای غیرمجاز و اعمالی كه سیاست‌های امنیتی سیستم را نقض می‌كنند انجام دهد. طراحی و معماری نرم‌افزار و آزمون‌های نفوذ در نرم‌افزار با استفاده از آسیب‌پذیریها انجام می‌ گیرد. سوءاستفاده‌ها نیز نحوه‌ی بكارگیری یك آسیب‌پذیری را برای حمله به سیستم و دسترسیهای غیرمجاز تشریح می‌كند. سوءاستفاده (اكسپلویت) نوعی حمله است كه از یك یا چند آسیب‌پذیری استفاده می‌ كند. هر سوءاستفاده، آسیب‌پذیریهای مرتبط با خود و پیش‌شرایطی را به‌همراه دارد. سوءاستفاده‌ها در آزمون نفوذپذیری نرم‌افزار كاربرد زیادی دارند.

دانش پیرامونی به دانش مرتبط با مخاطرات موجود برمی‌گردد. این دانش جزئیات جنبه‌هایی كه از دنیای خارج بر توسعه‌ی نرم‌افزار اثر می‌گذارند را بررسی می‌كند. این جنبه‌ها می‌توانند مخاطرات امنیتی محیط و یا اهداف تجاری ویژه باشند. مخاطرات در طی توسعه‌ی نرم‌افزار بوجود می‌آیند. هسته‌ی هر مخاطره شرط و رویداد نتیجه شده از آن است. مخاطرات، منبع مناسبی برای شناسایی به‌موقع (در ابتدای فرایند تولید) موقعیت‌های با پتانسیل آسیب‌پذیری در نرم‌افزار می‌باشند. با شناسایی مخاطرات یك نرم‌افزار و ارزیابی آن‌ها می‌توان راه‌حل‌های موجود برای دفع خطرات احتمالی را با توجه به میزان تهدید كار بست و امنیت نرم‌افزار را بالاتر برد. هر توصیف هر مخاطره بااحتمال وقوع آن، میزان تأثیر، روش‌های رفع آن و هزینه‌ی آن همراه است. معماری و طراحی سیستم و طرح آزمون امنیتی از ارزیابی مخاطرات در سیستم كاملاً تأثیر‌پذیرند. تعیین حوزه‌های جدید و بررسی برای نیازهای آتی امنیت نرم‌افزار اعم از دانش‌های موجود در دیگر شاخه‌های امنیت نرم‌افزار نیز دراین شاخه قرار می‌گیرد.

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

آسیب‌پذیریهای نرم‌افزاری

انواع آسیب‌پذیریهای مختلفی که ممکن است در یک سیستم وجود داشته باشد به ۱۳ رده‌ی کلی تقسیم می‌شود. هر رده می‌تواند چند نوع آسیب‌پذیری را در خود جای دهد که در این بخش تنها به دسته بندی کلی آسیب‌پذیریها اکتفا شده است. برای آشنایی با انواع آسیب‌پذیریها در هر رده و جزئیات هر یک می‌توانید به گزارش «دسته‌بندی انواع آسیب‌پذیریها» مراجعه نمایید. در ادامه دسته‌بندی کاملی از آسیب‌پذیریهای شناخته شده برای سیستم‌ها به‌همراه توصیف اجمالی آن دسته آسیب‌پذیری ذکر شده است.

نقض کنترل دسترسی:

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

نقص در مدیریت پیکربندی:

این نوع آسیب‌پذیریها، مشکلات موجود در پیکربندی یک برنامه و یا محیط اجرایی برنامه‌ها را دربرمی‌گیرد. این مشکلات معمولاً در اثر استفاده نادرست از پیکربندی که به صورت قراردادی در سیستم‌ها وجود دارد، مانند استفاده از گذرواژه‌های قراردادی به وجود می‌آید. مدیر سیستم باید قبل از استفاده از هر نرم‌افزار و برنامه و یا مکانیزم ‌امنیتی همه‌ی پیکربندیها را بررسی کند و برنامه را طبق آنچه که نیاز دارد پیکربندی کند. نقص در پیکربندی کارگزار سیستم، نقص در پیکربندی برنامه‌ی کاربردی، و نقص در پیکربندی زیرساخت‌ها (مانند مسائل مربوط به کارگزارهای وب و کارگزارهای برنامه‌ی کاربردی) از اجزای نقص پیکربندی می‌باشند.

حفاظت ناقص از داده‌ها:

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

اعتبارسنجی ناقص ورودیها:

بررسی اعتبارسنجی داده‌ها از مهم‌ترین قسمت‌ها در بررسی کد برنامه‌ی کاربردی است. بیشتر مشکلات امنیتی موجود در برنامه‌ها، مرتبط با داده‌های ورودی کاربر است که این مسأله اهمیت اعتبارسنجی داده‌های ورودی را دوچندان می‌کند. ورودیهای غیرمعتبر شامل نویسه‌ها در ورودیهای متنی، URL به‌عنوان ورودی، قبول کاراکترهای غیرمجاز در پرس‌وجوها، نوع و اندازه‌ی غیرمعتبر داده‌ها و قبول کدهای متا در ورودی می‌توانند موجب حملاتی مانند سرریز بافر، تزریق پرس‌وجو، نویسه و دستور شده و دسترسیهای غیرمجاز را فراهم آورد.

شرط مسابقه:

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

منع سرویس در برنامه‌ی کاربردی:

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

سرریز بافر:

سرریز بافر یکی از معمول‌ترین آسیب‌پذیری‌های امنیتی می‌باشد که هنگامی‌ که چک کردن اندازه کافی روی داده ورودی انجام نگرفته است، رخ می‌دهد. از این شکاف می‌توان برای جایگزینی محتوای حافظه استفاده کرد. هنگامی‌ که داده نوشته شده در بافر بیش از طول بافر باشد، داده‌ی اضافی در فضای حافظه همسایه ریخته می‌شود. این فضای حافظه به طور معمول پشته‌ی برنامه‌های کاربردی می‌باشد که برای ذخیره‌ی آدرس قسمت بعدی از کد که باید اجرا شود، استفاده می‌گردد. توسط حمله‌ی سرریز بافر، این فضای حافظه می‌تواند جایگزین شده و در نتیجه پروسه‌ی در حال اجرا کنترل اجرایی خود را از دست می‌دهد. نفوذگر می‌تواند از موقعیت سرریز بافر برای اجرای دستورات مختلف سیستم‌عامل استفاده کند. بدین ترتیب که با حمله‌ی سرریز بافر، نفوذگر می‌تواند آدرس کد خود را در حافظه جایگزین کند و در نتیجه بعد از اتمام اجرای برنامه‌ی جاری، کد نفوذگر اجرا خواهد شد. هنگامی‌ که برنامه در محدوده‌ی کاربری با مجوز بالا مثل root در یونیکس و Admin در ویندوز اجرا می‌شود، حمله‌ی سرریز بافر می‌تواند نتایج خطرناکی داشته باشد. شروع حمله‌ی سرریز بافر ساده نیست اما اگر نفوذگر موفق شود می‌تواند تأثیرات ویران‌کننده‌ای بر ماشین میزبان داشته باشد.

تزریق:

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

خطاها در برنامه‌‌های کاربردی ناگزیر به‌وجود می‌آیند. بنابراین باید سعی کرد که واکنش مناسبی هنگام بروز خطا در برنامه‌ی کاربردی نشان داده شود. شرایط خطایی که در حین عملیات مختلف به وجود می‌آید معمولاً به‌درستی مدیریت نمی‌شوند. مدیریت نادرست خطا می‌تواند مشکلات امنیتی مختلفی را به وجود بیاورد. از دیدگاه امنیتی، بروز خطا در برنامه‌ی کاربردی می‌تواند از دو جهت مشکل‌ساز باشد:
۱٫ پیغام خطایی که برای کاربر در پی بروز خطا در برنامه صادر می‌شود، ممکن است شامل اطلاعاتی باشد که کاربران خرابکار بتوانند از آن در جهت شناخت سیستم و حملات بعدی استفاده نمایند. معمول‌ترین مشکل این است که پیغام‌هایی با جزئیات خطاهای داخلی به کاربر نمایش داده می‌شود. این پیغام‌ها جزئیات پیاده‌سازی را آشکار می‌کنند که نباید هیچگاه آشکار شوند. این جزئیات، اطلاعات مهمی‌ را در مورد رخنه‌های ممکن برای نفوذگر فراهم می‌آورد. خطاها باید درست مدیریت شوند و پیغام با محتوایی به کاربر داده شود که هیچ‌گونه اطلاعات مفیدی را برای نفوذگر فراهم نیاورد.
۲٫ بروز خطا در سیستم ممکن است منجر به از کارافتادن بخشی از سیستم گردد و مکانیزم‌های امنیتی موجود به طور کلی یا جزیی خدشه‌دار شوند. این خدشه، سیستم را در برابر حملات بعدی آسیب‌پذیر می‌نماید.

نقص در نظارت:

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

نقص در پنهان‌سازی یا رمزنگاری اطلاعات:

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

هویت‌سنجی ضعیف:

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

بهترین روش‌ها در امنیت نرم‌افزار

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

فعالیت­های شرکت اسرار

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

  • ارائه پیشنهادات جهت طراحی امن یک نرم­ افزار
  • ارائه دستورالعمل­های لازم جهت تولید امن نرم­ افزار
  • ارزیابی امنیتی و یافتن نقاط ضعف و آسیب­پذیری­های یک نرم­ افزار تولید شده
  • ارائه راهکار جهت امن­سازی یک نرم­ افزار موجود
  • مشاوره و نظارت بر توسعه­ ی امن­ نرم­ افزارها از طراحی تا استقرار

پروژه­ های تست نفوذپذیری توسط شرکت اسرارعمدتاً در سطوح سه گانه زیر قابل اجراست:

  • Black Box

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

  • Gray Box

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

  • White Box

ارزیابی­ها در این سطح در بالاترین سطح ممکن انجام می­شود. تیم ارزیابی امنیتی اسرار با کمک اطلاعاتی که از مشتری کسب می­کند، تا سطح معماری و توپولوژی هدف نقاط ضعف موجود را تبیین نموده و در صورت نیاز مشتری برای ایجاد امنیت به شکل حداکثر، ارزیابی در سطح مرور کد را نیز ارائه می­کند. تمام تستهایی که در سطوح Black Box  و Gray Box قابل انجام است؛ در این سطح نیز با عمق بیشتری پیاده سازی می­شود.

amn1

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