استفاده از روش برنامه نویسی پدافندی جهت افزایش امنیت نرم افزار در زبان #C

نویسندگان

1 دانشگاه جامع امام حسین(ع)

2 دانشگاه رازی کرمانشاه

چکیده

با توجه به اهمیت امنیت نرم‌افزارهای رایانه ای در سازمان‌های نظامی، برنامه­ نویسان و طراحان این سیستم‌ها ملزم به رعایت مسائل امنیتی در برنامه‌نویسی هستند. این مقاله بر روی مرحله کدنویسی در چرخه تولید نرم‌افزار تمرکز دارد. هدف کدنویسی پدافندی، جلوگیری از بروز حوادث ناشی از کدنویسی نامناسب است. این حوادث شامل ازکارافتادن برنامه، دسترسی به کد منبع، استفاده بیش‌ازحد از منابع سخت‌افزاری و افزایش زمان نیاز جهت به‌روزرسانی برنامه هستند. در ادامه استفاده از آرگومان‌های نامی در فراخوانی تابع معرفی گردید که این عوامل منجر به افزایش خوانایی و درنتیجه کاهش زمان به‌روزرسانی برنامه می‌شود. جهت مدیریت خطاهای حین اجرا، روش شکست سریع استثناءها و نحوه مدیریت مناسب آن‌ها ارائه ‌شده است. این اقدامات موجب افزایش امنیت برنامه و عدم ازکارافتادن برنامه به­دلیل کدنویسی نامناسب گردیده و از طرفی موجب افزایش تعداد توابع، کلاس‌ها و درنتیجه افزایش تعداد خط کد می‌شود. این مسئله ممکن است موجب نگرانی درباره افزایش زمان اجرای برنامه و هزینه پردازشی شود. این مقاله به پیاده‌سازی یک برنامه در دو حالت کدنویسی پدافندی و غیرپدافندی پرداخته است. نتایج نشان می­دهد که میانگین عمر نخ‌ها در حالت پدافندی 23/8 ثانیه است، درحالی‌که این مقدار برای حالت غیرپدافندی، 80/8 ثانیه بود. از طرفی، میزان درصد استفاده از پردازنده در حالت‌های پدافندی و غیرپدافندی به ترتیب 32/54% و 70/54%، از طرف دیگر برای هزینه پردازشی کاربر نیز به­ترتیب 23/24% و 41/24% بود. این اعداد حاکی از هزینه پردازشی و زمان اجرای یکسان برنامه در دو حالت پدافندی و غیرپدافندی است.  

کلیدواژه‌ها


عنوان مقاله [English]

Using the defensive programming method to increase the security of the software in #C language

  1. P. S. Gilmour, “Defensive programming,” Embedded Syst. Program. vol. 3, pp. 60-68, 1989.
  2. D. Y. Cheng, J. T. Deutsch, and R. W. Dutton, “Defensive programming in the rapid development of a parallel scientific program,” IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, vol. 9, pp. 665-669, 1990.
  3. A. A. J. Zumalde, J. M. Secall, and J. B. C. Junior, “Comparative Analysis on the Impact of Defensive Programming Techniques for Safety-Critical Systems,” LADC '09. Fourth Latin-American Symposium, pp. 95-102, 2009.
  4. K. W. Collier and J. S. Collofello, “Issues in software cycle time reduction,” IEEE Fourteenth Annual International Phoenix Conference, pp. 302-309, 1995.
  5. P. Chul Su, L. Jae Hee, S. C. Seo, and B. K. Kim, “Assuring software security against buffer overflow attacks in embedded software development life cycle,” Advanced Communication Technology (ICACT), The 12th International Conference on, pp. 787-790, 2010.
  6. N. Davis, W. Humphrey, S. T. Redwine, G. Zibulski, and G. McGraw, “Processes for Producing Secure Software: Summary of US National Cybersecurity Summit Subgroup Report,” IEEE Security and Privacy, vol. 2, pp. 18-25, 2004.
  7. S. Velmourougan, P. Dhavachelvan, R. Baskaran, and B. Ravikumar, “Software Development Life Cycle Model to Improve Maintainability of Software Applications,” Advances in Computing and Communications (ICACC), Fourth International Conference on, pp. 270-273, 2014.
  8. P. Avgeriou, P. Kruchten, R. L. Nord, I. Ozkaya, and C. Seaman, “Reducing Friction in Software Development,” IEEE Software, vol. 33, pp. 66-73, 2016.
  9. B. Boehm and V. R. Basili, “Software Defect Reduction Top 10 List,” Computer, vol. 34, pp. 135-137, 2001.
  10. M. K. Gupta, M. C. Govil, and G. Singh, “Static analysis approaches to detect SQL injection and cross site scripting vulnerabilities in web applications: A survey,” In Recent Advances and Innovations in Engineering (ICRAIE), pp. 1-5, 2014.
  11. R. Chen, Y. Liu, Z. Jia, and J. Gao, “Isolating and Understanding Program Errors Using Probabilistic Dispute Model,” Computer Software and Applications Conference (COMPSAC), IEEE 37th Annual, pp. 633-638, 2013.
  12. J. A. Jones and M. J. Harrold, “Empirical evaluation of the tarantula automatic fault-localization technique,” 20th IEEE/ACM international Conference on Automated software engineering, CA, USA, 2005.
  13. C. Liu, X. Yan, L. Fei, J. Han, and S. P. Midkiff, “SOBER: statistical model-based bug localization,” SIGSOFT Softw. Eng. Notes, vol. 30, pp. 286-295, 2005.
  14. H. Cleve and A. Zeller, “Locating causes of program failures,” 27th international conference on Software engineering, USA, 2005.
  15. G. K. Baah, A. Podgurski, and M. J. Harrold, “The probabilistic program dependence graph and its application to fault diagnosis,” International symposium on Software testing and analysis, USA, 2008.
  16. جرجم، سلیمان، دهقانی، مهدی، امن‌سازی نرم‌افزار مبتنی بر کدنویسی امن‌، فصلنامه پدافند غیرعامل، شماره 17، بهار 1393 ص 41.
  17. R. Kumar, S. K. Pandey, and S. I. Ahson, “Security in Coding Phase of SDLC,” Wireless Communication and Sensor Networks, WCSN '07. Third International Conference, pp. 118-120, 2007.
  18. B. Taylor and S. Kaza, “Security Injections@Towson: Integrating Secure Coding into Introductory Computer Science Courses,” Journal of ACM Transactions on Computing Education (TOCE), vol. 16, Issue 4, Article no. 16, 2016.
  19. M. Zaidman, “Teaching defensive programming in Java,” J. Comput. Sci. Coll., vol. 19, pp. 33-43, 2004.
  20. کشوری، سامان، جوادزاده، محمدعلی، عباسی، مصطفی، بررسی انواع آزمون نرم‌افزار جهت افزایش کیفیت و امنیت نرم‌افزار، دهمین کنفرانس رمز دانشگاه جامع امام حسین(ع)، 1394.
  21. A. Khalili, A. Sami, M. Azimi, and ET. Al, “Employing secure coding practices into industrial applications: a case study,” Journal of Empirical Software Engineering, vol. 21, Issue 1, pp. 4-16, February 2016.
  22. P. R. Dominguez, “10 Principles for Keeping Your Programming Code Clean,” Available: http://www.onextrapixel.com/2011/01/20/10-principles-for-keeping-your-programming-code-clean/ (Jan. 05, 2016).
  23. D. M. Selfa, M. Carrillo, and M. D. R. Boone, “A Database and Web Application Based on MVC Architecture,” 16th International Conference on Electronics, Communications and Computers, 2006.
  24. R. C. Martin, “The Clean Coder: A Code of Conduct for Professional Programmers: Prentice Hall Press,” Robert C. Martin Series, 1st Edition, 2011.
  25. L. Hunt, “C# Coding Standards for .NET,” Document Version 1.15, http://www.lance-hunt.net, 2007.
  26. R. C. Martin, “Clean Code: A Handbook of Agile Software Craftsmanship: Prentice Hall PTR,” Prentice Hall; 1 Edition, 2008.
  27. M. Aderhold, G. Alexander, and M. Heiko, “Choosing a Formalism for Secure Coding: FSM vs. LTL,” TU Darmstadt, Technical TUD-CS-2013-0180, 2013.
  28. A. Hunt and D. Thomas, “Pragmatic Unit Testing in C# with NUnit: The Pragmatic Programmers,” Pragmatic Bookshelf; 2 Edition, 2004.
  29. G. Meszaros, “xUnit Test Patterns: Refactoring Test Code Addison-Wesley,” Addison-Wesley Professional; 1 edition, 2007.
  30. L. Williams, G. Kudrjavets, and N. Nagappan, “On the Effectiveness of Unit Test Automation at Microsoft,” 20th International Symposium on Software Reliability Engineering, pp. 81-89, 2009.
  31. J. Shore, “Fail fast [software debugging],” IEEE Software, vol. 21, pp. 21-25, 2004.