روشهای امن برنامهنویسی برای اطمینان از صحت و امنیت برنامه
امنیت هر امری که با نوشتن کد ایجاد میشود، به اقدامات امنیتی و لحاظ ناکتی در طول کدنویسی بستگی دارد. برای اطمینان از بالاترین سطح امنیت برنامه، استانداردهای امنیتی خاصی باید در طول مراحل توسعه رعایت شوند. اگر در حال توسعه برنامه یا نرم افزار جدیدی هستید، میتوانید برای مراقبت از امنیت محصول خود دو روش داشته باشید: 1. شما میتوانید نرم افزار یا برنامهای را توسعه داده و سپس به بررسی دقیق آن بپردازید و هرگونه آسیبپذیری امنیتی را برطرف کنید. 2. شما میتوانید امنیت را بخشی از فرایند توسعه قرار دهید و یک مفهوم را که ذاتاً ایمن و مطمئن باشد، توسعه دهید. از طریق دادههای تجربی ثابت شده است که رویکرد کارآمد این است که امنیت از ابتدا بخشی از فرآیند توسعه باشد. در اینجا مطلب مواردی ذکر شده است که میتوانید برای اطمینان از توسعه بی خطر برنامه، آنها را دنبال کنید. 12 روش برنامه نویسی امن برای برقراری امنیت در برنامه 1. اعتبارسنجی ورودی یکی از موارد خطرناک برای هر برنامه ورودیها هستند. هر ورودی از منابع داده نامعتبر باید تأیید اعتبار شود. اگر اینکار به درستی اجرا شود، میتوانید به راحتی از بسیاری آسیبپذیریها جلوگیری کنید. با احتیاط با منابع وروردی خارجی مانند آرگومانهای خط فرمان، رابطهای شبکه، متغیرهای محیطی و فایلهای کنترل شده توسط کاربر رفتار کرده و قوانین سختگیرانه اعتبار سنجی ورودی را برای اطمینان از امنیت پیاده سازی کنید. 2. مسائل مطرح شده توسط کامپایلر را حل کنید. هنگام تدوین کد، کامپایلر را در بالاترین سطح هشدار تنظیم کنید. قبل از ادامه کار و روند توسعه، به هشدارهای ظاهر شده نگاهی بیندازید و تک تک آنها را از بین ببرید. استفاده از ابزار ارزیابی ایمنی برنامه static و dynamic برای بررسی بیشتر آسیب پذیریهای محصول در حال توسعه میتواند روش بهتری باشد. 3. از یک معماری منحصر به فرد پیروی کنید. کپی کردن معماری از برنامه دیگری، برنامه شما را ذاتاً آسیبپذیر میکند. برای ایجاد یک برنامه با کمترین آسیبپذیری، معماری اختصاصی و سیاستهای امنیتی خود را طراحی و پیاده سازی کنید. به عنوان مثال، اگر سیستم در زمانهای مختلف به سطوح مختلف دسترسی نیاز دارد، میتوانید سیستم را به زیر سیستمهایی با سطح مجوزهای مختلف تقسیم کنید و زیر سیستمها بتوانند بین خود ارتباط برقرار کنند. 4. سادگی کلید اصلی است. تحقیقات و دادههای تجربی نشان میدهد که یک برنامه سادهتر، یک برنامه ایمنتر است. اگر میخواهید برنامهای ایمن باشد، آن را تا حد ممکن کوچک و ساده نگه دارید. طرحهای پیچیده احتمال خطاها و آسیب پذیریهای قابل بهرهبرداری را افزایش میدهند. این بدان معنا نیست که نمیتوان یک برنامه پیچیده را ایمن کرد. با این حال، مقدار زمان و تلاش لازم برای ایمن سازی چنین برنامهای بسیار بیشتر از یک برنامه سادهتر است. 5. دسترسیها به طور پیش فرض deny باشند. روشی کاملاً امن برای توسعه برنامه ها، مبتنی بر تصمیم گیری درمورد دسترسیها به جای رد کردنها میباشد. به عبارت سادهتر، هر کسی که میخواهد به برنامه یا دادههای داخل آن دسترسی پیدا کند یک هکر محسوب میشود مگر اینکه خلاف آن را ثابت کند. فقط پس از اعتبارسنجی برای دسترسی، کسی میتواند اجازه دسترسی پیدا کند. 6. از اصل حداقل سطح دسترسی پیروی کنید. یکی دیگر از اقدامات مهم و مفیدی که میتواند یک برنامه را ایمن کند، اجرای کارها و فرایندها با حداقل میزان ممکن از سطح دسترسی است. اگر کاری به درجه بالاتری از سطح دسترسی احتیاج داشته باشد، باید فقط برای زمانی محدود که برای انجام کار لازم است مجاز باشد. این مسئله باعث میشود که فرصت مهاجم برای حمله به سیستم شما بسیار کاهش یابد. 7. جریان داده بین سیستمهای فرعی را پاکسازی کنید. پاکسازی دادهها یکی از مهمترین و موثرترین روشها برای اطمینان از این است که در صورت بروز نقض، محتوای آن باقیمانده است. این یک روش کدگذاری ایمن برای پاکسازی کلیه دادههایی است که از command shells، پایگاه دادههای رابطهای و اجزای دیگر به جریان میافتند. ممکن است برای مهاجمان امکان استفاده از حملات SQL ،command یا تزریق برای invoke توابع بلااستفاده این کامپوننتها وجود داشته باشد. از آنجا که اعتبارسنجی ورودی ممکن است برای چنین مواردی کافی نباشد، امنیت تنها با پاکسازی جریان دادهها تقویت میشود. 8. از چند لایه دفاع استفاده کنید. برای کاهش خطرات از بیش از یک استراتژی دفاعی استفاده کنید. این امر میتواند درصورت وجود هرگونه آسیبپذیری در یک لایه از مکانیزم دفاعی، در صورت عدم موفقیت یک لایه، لایهی دیگر، برنامه را ایمن کند. این امر نه تنها میتواند سرعت انتشار خطر امنیتی را کاهش دهد بلکه میتواند مانع نفوذ آن در سیستم شود. 9. از تکنیکهای تضمین کیفیت استفاده کنید. پیروی از تکنیکهای تضمین کیفیت میتواند در شناسایی و از بین بردن آسیب پذیریهای یک برنامه بسیار موثر باشد. مواردی مانند تست fuzz، بررسی کد منبع و تست نفوذ باید بخشی از فرایند توسعه باشد تا مطمئن شوید هیچ آسیبپذیری به هیچ وجه به کد وارد نمی شود. بررسیهای یک شخص یا مرکز خارج از تیم توسعه نیز مهم است. هنگامی که شما به عنوان یک توسعه دهنده در حال ایجاد یک برنامه هستید، ممکن است مواردی را نادیده بگیرید. با تأیید و بررسی شخص سوم، میتوان برنامه را ایمنتر کرد. 10. از استانداردهای کدگذاری استفاده کنید. استانداردهای کدگذاری توسط نهادهای بین المللی تدوین شده و به منظور استانداردسازی اقدامات کدگذاری است تا مطمئن شود هیچ آسیبپذیری در کد باقی نمانده است. استفاده از استانداردهای کدگذاری میتواند روند توسعه را آسانتر و ایمنی محصول نهایی را بیشتر کند. 11. الزامات امنیتی را تعریف کنید. در ابتدای چرخه حیات توسعه نرم افزار، الزامات امنیتی برنامه را کشف و مستند کنید. اطمینان حاصل کنید که تمام داکیومنتهای بعدی که در این نرم افزار استفاده شده یا برای آن ساخته شدهاند با الزاماتی که شما تعیین کردهاید مطابقت دارند. این موضوع مهمی است زیرا اگر مجموعهای از الزامات امنیتی برای اینکار وجود نداشته باشد، نمیتوانید از امنیت سیستم اطمینان حاصل کنید. 12. مدل سازی تهدید از مدل سازی تهدید میتوان برای پیش بینی تهدیدهایی که نرم افزار تحت آن قرار دارد استفاده کرد. روند مدل سازی تهدید شامل شناسایی داراییهای اصلی و کلیدی، تجزیه برنامه، شناسایی و طبقه بندی تهدیدات برای هر دارایی یا component، درجه بندی تهدیدها بر اساس رتبه بندی ریسک و سپس تدوین استراتژیهای کاهش تهدید است. سپس این استراتژیها برای اطمینان از اینکه سیستم از امنیت و نفوذناپذیری برخوردار است، پیاده سازی میشوند. تهیه و تدوین: سینا فقیری