طراحی و توسعه امن نرمافزار
اطلاعات کلی
- نام درس به فارسی: طراحی و توسعه امن نرمافزار
- نام درس به انگلیسی: Secure Software Design and Development
- نامهای مشابه: کدنویسی امن، برنامهنویسی امن، توسعه امن نرمافزار، امنیت سیستمهای نرمافزاری، برنامهنویسی تدافعی
- رشته، گرایش، نوع و واحد درس:
- کارشناسی: مهندسی کامپیوتر
- تحصیلات تکمیلی: مهندسی کامپیوتر – نرمافزار / مهندسي کامپيوتر – رایانش امن
- نوع درس: اختصاصی
- واحد درس: 3 واحد
- مقطع: کارشناسی و کارشناسی ارشد
- پیش نیازها: برنامهنویسی شیگرا
- هم نیازها: مهندسی نرمافزار
- مطالب پیش نیاز: مفاهیم پایه مهندسی نرمافزار و برنامهنویسی
توضیح کوتاه درس
این دوره شرکتکنندگان را با چالشها و رویکردهای طراحی و پیادهسازی سیستمهای نرمافزاری امن آشنا میکند. مباحث شامل اهمیت امنیت، بررسی آسیبپذیریها و حملات، تحلیل نیازمندیهای امنیتی، مدلسازی تهدید و توسعه امن برنامه، و نیز تکنیکهای کدنویسی امن در زبانهای C/C++ و جاوا، بخشهای امنیت سیستم و برنامههای کاربردی، آزمون و استقرار امن و مدیریت محیطهای امن میباشد. علاوه بر آن، ابزارهای تشخیص آسیبپذیری و تکنیکهای مقابله با تهدیدات از دیگر موضوعات مورد بررسی هستند.
مفهوم نرمافزار یا سیستم 2.0 که اخیراً قابلیت استفاده از آن محقق شده، نیز نیازمند به رعایت اصول معماری، طراحی و توسعه نرمافزار امن است که در این درس سعی میشود به آن پرداخته شود.
اهداف و نتایج درس
- آشنایی با مفاهیم پایهای امنیت نرمافزار
- شناخت آسیبپذیریها، حملات و تکنیکهای Exploit نویسی
- فراگیری اصول طراحی و معماری امن نرمافزار
- دریافت آگاهی از قواعد و راهنماهای امنیتی در برنامهنویسی بهویژه در زبانهای جاوا و C/C++
- توانمندی در تحلیل، مدلسازی و مدیریت نیازمندیهای امنیتی
مخاطبین
- دانشجویان مهندسی و علوم کامپیوتر
- مهندسین نرمافزار و برنامهنویسان صنعتی
- متقاضیان کار در زمینه امنیت نرمافزار
- علاقهمندان به پژوهش در حوزه امنیت نرمافزار
سطح دوره
- متوسط و پیشرفته
طول و زمانبندی دوره
- مدت دوره: 4 ماه (16 هفته)
- جلسات کلاس: 15 هفته (45 ساعت – 30 جلسه)
- جلسه ارزیابی: 1 هفته
شیوه برگزاری
- حضوری
سرفصلها و مباحث
بخش 1. طراحی و معماری امن (مستقل از زبان برنامهنویسی)
- مقدمه (2 جلسه)
- درک مفاهیم، واژگان و صفات امنیت نرمافزار (مطابق فصل 1 مرجع A5، فصل 1 مرجع A1، فصل 2 مرجع A4)
- انواع تهدیدها و حملات و Exploit نویسی برای آنها (فصل 1 مرجع A1)
- جمعآوری الزامات امنیتی (2 جلسه)
- تحلیل نیازمندیهای امنیتی (فصل 2 مرجع A1)
- مدلسازی تهدید (فصل 12 مرجع A2)
- توسعه امن برنامه (2 جلسه)
- طراحی و معماری امن (فصل 2 مرجع A1)
- پیادهسازی امن (فصل 2 مرجع A1)
بخش 2. کدنویسی امن در C و C++
- کدنویسی امن برای دادهها و عبارتها (3 جلسه)
- اعتبارسنجی ورودی و پاکسازی دادهها (فصل 3 مرجع A6)
- رشتهها (فصل 2 مرجع A5)
- اشارهگرها (فصل 3 مرجع A5)
- اعداد صحیح (فصل 5 مرجع A5)
- مدیریت امن حافظه پویا (2 جلسه)
- جلوگیری از سرریز و درهم شکستن پشته (فصل 4 مرجع A5)
- جلوگیری از سرریز و درهم شکستن هرم (فصل 4 مرجع A5)
- مدیریت امن خروجی (2 جلسه)
- خروجی قالببندی شده (فصل 6 مرجع A5)
- خواندن و نوشتن فایل (فصل 8 مرجع A5)
بخش 3. کدنویسی امن در جاوا
- کدنویسی امن برای دادهها (2 جلسه)
- اعتبارسنجی ورودی و پاکسازی دادهها (فصل 2 مرجع A3)
- اعلانات و مقداردهی اولیه (فصل 3 مرجع A3)
- کدنویسی امن برای عبارات، محاسبات و مدیریت خطاها (3 جلسه)
- عبارات (فصل 4 مرجع A3)
- انواع داده عددی و عملگرها (فصل 5 مرجع A3)
- انواع داده انتزاعی و متدها (فصل 6 و 7 مرجع A3)
- رفتارهای استثنا (فصل 8 مرجع A3)
- کدنویسی امن برای رمزنگاری (2 جلسه)
- درهمسازی (فصل 8 مرجع A4)
- رمزنگاری متقارن و نامتقارن (فصل 8 مرجع A4)
بخش 4. امنیت سیستم و برنامههای کاربردی
- امنیت وب و موبایل (2 جلسه)
- آسیبپذیریهای وب (فصل 7 و 8 مرجع A1)
- مدلسازی تهدید برای برنامههای وب (فصل 7 و 8 مرجع A1)
- چرخه حیات امن برنامههای وب (فصل 7 و 8 مرجع A1)
- ارتباط امن و پروتکلهای حفاظت از دادهها (HTTPS، SSL، TLS)
- کدنویسی امن برای کنترل دسترسی (2 جلسه)
- سطوح دسترسی در ویندوز و لینوکس (فصل 1 و 2 مرجع A6)
- تأیید هویت و اجازه دسترسی (فصل 7 مرجع A4)
- مدیریت جلسه (فصل 7 مرجع A4 و فصل 8 مرجع A1)
- مرور چک لیستها، گواهینامهها و کاتالوگهای امنیتی (1 جلسه)
- OWASP Top 10، OWASP Mobile Top 10، WASC (وبسایتهای رسمی)
- CVE، CWE، CVSS (وبسایتهای رسمی)
بخش 5. آزمون و استقرار امن
- آزمون امنیت و نفوذ (3 جلسه)
- آزمون ایستا (SAST): تحلیل ایستا و ابزارهای خودکار شناسایی آسیبپذیریها (فصل 9 مرجع A5 و فصل 4 مرجع B2)
- آزمون پویا (DAST): آزمون فاز (فصل 9 مرجع A5) و آزمون نفوذ و تزریق خرابی (فصل 11 و 12 مرجع A4)
- استقرار و نگهداری امن برنامه (1 جلسه)
- امنیت سکوهای توسعه (فصل 16 مرجع A3)
- امنیت محیط اجرا (فصل 17 مرجع A3 و فصل 6 مرجع A1)
- مباحث پیشرفته (1 جلسه)
- امنیت در سامانههای مبتنی بر هوش مصنوعی (سیستم 2.0) – مبتنی بر مقالهها
- برنامهنویسی بازگشت محور (Return-oriented programming) و Exploit نویسی – مبتنی بر مقالهها
نرمافزارها و ابزارهای مورد بحث
- Static Analyzers:
- SourceMeter: https://sourcemeter.com/
- SonarQube: https://www.sonarsource.com/products/sonarqube/
- Fuzzers:
- AFL: https://lcamtuf.coredump.cx/afl/
- Peach Fuzzer: https://peachtech.gitlab.io/peach-fuzzer-community/
- DeepFuzz: https://www.m-zakeri.ir/iust_deep_fuzz/
- Web Penetration Testing:
- Burp Suite: https://portswigger.net/burp
- Acunetix: https://www.acunetix.com
تکالیف و ارزیابی
- تعداد تکالیف پیشنهادی: 5 تکلیف
- ارزیابی به شرح زیر:
- تکالیف تئوری: 20% (دو تمرین تئوری)
- تکالیف عملی: 30% (سه تمرین عملی)
- آزمونهای پایان ترم: 50% (آزمون پایان ترم مبتنی بر پرسشهای چندگزینهای و تشریحی)
کتب مرجع
کتب مرجع اصلی
- [A1] A. K. Talukder, and M. Chaitanya. Architecting Secure Software Systems. CRC Press, 2009.
- [A2] A. Shostack. Threat Modeling: Designing for Security. Wiley, 2014.
- [A3] Fred Long et al. The CERT Oracle Secure Coding Standard for Java. Pearson Education, 2011.
- [A4] Abhay Bhargav, and B. V. Kumar. Secure Java: For Web Application Development. CRC Press, 2010.
- [A5] Robert C. Seacord. Secure Coding in C and C++. Addison-Wesley, 2013.
- [A6] John Viega, Matt Messier. Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More. O'Reilly Media, 2009.
کتب مرجع تکمیلی
- [B1] John Viega, and Gary McGraw. Building Secure Software. Addison-Wesley, 2001.
- [B2] G. McGraw. Software Security: Building Security In. Addison-Wesley, 2006.
- [B3] M. Dowd, J. McDonald, and J. Schuh. The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities. Addison-Wesley, 2006.
- [B4] M. Howard, D. LeBlanc, J. Viega. 24 Deadly Signs of Software Security: Programming Flaws and How to Fix Them. McGraw-Hill, 2009.
- [B5] M. S. Merkow, and L. Raghavan. Secure and Resilient Software Development. CRC Press, 2010.
- [B6] Nancy R. Mead, Julia H. Allen, Sean Barnum, Robert J. Ellison, Gary R. McGraw. Software Security Engineering: A Guide for Project Managers. Addison-Wesley Professional, 2004.
- [B7] Michael Howard, David LeBlanc. Writing Secure Code. Microsoft Press, 2002.
- [B8] Fred Long et al. Java Coding Guidelines: 75 Recommendations for Reliable and Secure Programs. Pearson Education, 2013.
مقالات مرجع
- [P1] Zakeri Nasrabadi, M., Parsa, S. & Kalaee, A. “Format-aware learn&fuzz: deep test data generation for efficient fuzzing.” Neural Comput & Applic, 33, 1497–1513 (2021). doi:10.1007/s00521-020-05039-7
- [P2] Zakeri-Nasrabadi, M., Parsa, S., Ramezani, M., Roy, C., & Ekhtiarzadeh, M. “A systematic literature review on source code similarity measurement and clone detection: Techniques, applications, and challenges.” Journal of Systems and Software, 204 (2023): 111796.
- [P3] S. Chakraborty, R. Krishna, Y. Ding and B. Ray, “Deep Learning Based Vulnerability Detection: Are We There Yet?,” in IEEE Transactions on Software Engineering, vol. 48, no. 9, pp. 3280-3296, 1 Sept. 2022, doi:10.1109/TSE.2021.3087402.
- [P4] Ryan Roemer, Erik Buchanan, Hovav Shacham, and Stefan Savage. “Return-Oriented Programming: Systems, Languages, and Applications.” ACM Trans. Inf. Syst. Secur., 15, 1, Article 2 (March 2012): 34 pages. doi:10.1145/2133375.2133377
وبسایتهای مرتبط
- [W1] The WASC Threat Classification v2.0: http://projects.webappsec.org/
- [W2] OWASP TOP 10: https://owasp.org/www-project-top-ten/
- [W3] OWASP Mobile Top 10: https://owasp.org/www-project-mobile-top-ten/
- [W4] Common Weakness Enumeration (CWE™): https://cwe.mitre.org/
- [W5] Common Vulnerabilities and Exposures (CVE): https://www.cve.org/
- [W6] Common Vulnerability Scoring System: https://www.first.org/cvss/
- [W8] SEI CERT Coding Standards: https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards
- [W9] Oracle Java Security: https://www.oracle.com/java/technologies/javase/seccodeguide.html
سرفصلهای مصوب وزارت علوم
- [MSRT1] Software Systems Security: https://www.syllab.ir/course/u18
- [MSRT2] Secure Software Development: https://www.syllab.ir/course/u42
دروس مرتبط
- [C1] https://web.cs.hacettepe.edu.tr/~abc/teaching/bbm461/index.php
- [C2] https://www.sei.cmu.edu/education-outreach/courses/course.cfm?coursecode=V35
- [C3] https://www.cs.uwyo.edu/~seker/courses/2030/?go=lec
- [C4] http://www.sis.pitt.edu/jjoshi/courses/IS2620/Fall17/Lectures.html
- [C5] https://www.cs.columbia.edu/~suman/COMS_w4181_2024.html
تهیهکننده
- نام: مرتضی ذاکری
- نگارش: 3.0
- آخرین بروزرسانی: 15/12/1403