پرش به محتویات

طراحی و توسعه امن نرم‌افزار

اطلاعات کلی

  • نام درس به فارسی: طراحی و توسعه امن نرم‌افزار
  • نام درس به انگلیسی: Secure Software Design and Development
  • نام‌های مشابه: کدنویسی امن، برنامه‌نویسی امن، توسعه امن نرم‌افزار، امنیت سیستم‌های نرم‌افزاری، برنامه‌نویسی تدافعی
  • رشته، گرایش، نوع و واحد درس:
  • کارشناسی: مهندسی کامپیوتر
  • تحصیلات تکمیلی: مهندسی کامپیوتر – نرم‌افزار / مهندسي کامپيوتر – رایانش امن
  • نوع درس: اختصاصی
  • واحد درس: 3 واحد
  • مقطع: کارشناسی و کارشناسی ارشد
  • پیش نیازها: برنامه‌نویسی شی‌گرا
  • هم نیازها: مهندسی نرم‌افزار
  • مطالب پیش نیاز: مفاهیم پایه مهندسی نرم‌افزار و برنامه‌نویسی

توضیح کوتاه درس

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

اهداف و نتایج درس

  • آشنایی با مفاهیم پایه‌ای امنیت نرم‌افزار
  • شناخت آسیب‌پذیری‌ها، حملات و تکنیک‌های Exploit نویسی
  • فراگیری اصول طراحی و معماری امن نرم‌افزار
  • دریافت آگاهی از قواعد و راهنماهای امنیتی در برنامه‌نویسی به‌ویژه در زبان‌های جاوا و C/C++
  • توانمندی در تحلیل، مدل‌سازی و مدیریت نیازمندی‌های امنیتی

مخاطبین

  • دانشجویان مهندسی و علوم کامپیوتر
  • مهندسین نرم‌افزار و برنامه‌نویسان صنعتی
  • متقاضیان کار در زمینه امنیت نرم‌افزار
  • علاقه‌مندان به پژوهش در حوزه امنیت نرم‌افزار

سطح دوره

  • متوسط و پیشرفته

طول و زمان‌بندی دوره

  • مدت دوره: 4 ماه (16 هفته)
  • جلسات کلاس: 15 هفته (45 ساعت – 30 جلسه)
  • جلسه ارزیابی: 1 هفته

شیوه برگزاری

  • حضوری

سرفصل‌ها و مباحث

بخش 1. طراحی و معماری امن (مستقل از زبان برنامه‌نویسی)

  1. مقدمه (2 جلسه)
    • درک مفاهیم، واژگان و صفات امنیت نرم‌افزار (مطابق فصل 1 مرجع A5، فصل 1 مرجع A1، فصل 2 مرجع A4)
    • انواع تهدیدها و حملات و Exploit نویسی برای آن‌ها (فصل 1 مرجع A1)
  2. جمع‌آوری الزامات امنیتی (2 جلسه)
    • تحلیل نیازمندی‌های امنیتی (فصل 2 مرجع A1)
    • مدل‌سازی تهدید (فصل 12 مرجع A2)
  3. توسعه امن برنامه (2 جلسه)
    • طراحی و معماری امن (فصل 2 مرجع A1)
    • پیاده‌سازی امن (فصل 2 مرجع A1)

بخش 2. کدنویسی امن در C و C++

  1. کدنویسی امن برای داده‌ها و عبارت‌ها (3 جلسه)
    • اعتبارسنجی ورودی و پاک‌سازی داده‌ها (فصل 3 مرجع A6)
    • رشته‌ها (فصل 2 مرجع A5)
    • اشاره‌گرها (فصل 3 مرجع A5)
    • اعداد صحیح (فصل 5 مرجع A5)
  2. مدیریت امن حافظه پویا (2 جلسه)
    • جلوگیری از سرریز و درهم شکستن پشته (فصل 4 مرجع A5)
    • جلوگیری از سرریز و درهم شکستن هرم (فصل 4 مرجع A5)
  3. مدیریت امن خروجی (2 جلسه)
    • خروجی قالب‌بندی شده (فصل 6 مرجع A5)
    • خواندن و نوشتن فایل (فصل 8 مرجع A5)

بخش 3. کدنویسی امن در جاوا

  1. کدنویسی امن برای داده‌ها (2 جلسه)
    • اعتبارسنجی ورودی و پاک‌سازی داده‌ها (فصل 2 مرجع A3)
    • اعلانات و مقداردهی اولیه (فصل 3 مرجع A3)
  2. کدنویسی امن برای عبارات، محاسبات و مدیریت خطاها (3 جلسه)
    • عبارات (فصل 4 مرجع A3)
    • انواع داده عددی و عملگرها (فصل 5 مرجع A3)
    • انواع داده انتزاعی و متدها (فصل 6 و 7 مرجع A3)
    • رفتارهای استثنا (فصل 8 مرجع A3)
  3. کدنویسی امن برای رمزنگاری (2 جلسه)
    • درهم‌سازی (فصل 8 مرجع A4)
    • رمزنگاری متقارن و نامتقارن (فصل 8 مرجع A4)

بخش 4. امنیت سیستم و برنامه‌های کاربردی

  1. امنیت وب و موبایل (2 جلسه)
    • آسیب‌پذیری‌های وب (فصل 7 و 8 مرجع A1)
    • مدل‌سازی تهدید برای برنامه‌های وب (فصل 7 و 8 مرجع A1)
    • چرخه حیات امن برنامه‌های وب (فصل 7 و 8 مرجع A1)
    • ارتباط امن و پروتکل‌های حفاظت از داده‌ها (HTTPS، SSL، TLS)
  2. کدنویسی امن برای کنترل دسترسی (2 جلسه)
    • سطوح دسترسی در ویندوز و لینوکس (فصل 1 و 2 مرجع A6)
    • تأیید هویت و اجازه دسترسی (فصل 7 مرجع A4)
    • مدیریت جلسه (فصل 7 مرجع A4 و فصل 8 مرجع A1)
  3. مرور چک لیست‌ها، گواهی‌نامه‌ها و کاتالوگ‌های امنیتی (1 جلسه)
    • OWASP Top 10، OWASP Mobile Top 10، WASC (وب‌سایت‌های رسمی)
    • CVE، CWE، CVSS (وب‌سایت‌های رسمی)

بخش 5. آزمون و استقرار امن

  1. آزمون امنیت و نفوذ (3 جلسه)
    • آزمون ایستا (SAST): تحلیل ایستا و ابزارهای خودکار شناسایی آسیب‌پذیری‌ها (فصل 9 مرجع A5 و فصل 4 مرجع B2)
    • آزمون پویا (DAST): آزمون فاز (فصل 9 مرجع A5) و آزمون نفوذ و تزریق خرابی (فصل 11 و 12 مرجع A4)
  2. استقرار و نگهداری امن برنامه (1 جلسه)
    • امنیت سکوهای توسعه (فصل 16 مرجع A3)
    • امنیت محیط اجرا (فصل 17 مرجع A3 و فصل 6 مرجع A1)
  3. مباحث پیشرفته (1 جلسه)
    • امنیت در سامانه‌های مبتنی بر هوش مصنوعی (سیستم 2.0) – مبتنی بر مقاله‌ها
    • برنامه‌نویسی بازگشت محور (Return-oriented programming) و Exploit نویسی – مبتنی بر مقاله‌ها

نرم‌افزارها و ابزارهای مورد بحث


تکالیف و ارزیابی

  • تعداد تکالیف پیشنهادی: 5 تکلیف
  • ارزیابی به شرح زیر:
    • تکالیف تئوری: 20% (دو تمرین تئوری)
    • تکالیف عملی: 30% (سه تمرین عملی)
    • آزمون‌های پایان ترم: 50% (آزمون پایان ترم مبتنی بر پرسش‌های چندگزینه‌ای و تشریحی)

کتب مرجع

کتب مرجع اصلی

  1. [A1] A. K. Talukder, and M. Chaitanya. Architecting Secure Software Systems. CRC Press, 2009.
  2. [A2] A. Shostack. Threat Modeling: Designing for Security. Wiley, 2014.
  3. [A3] Fred Long et al. The CERT Oracle Secure Coding Standard for Java. Pearson Education, 2011.
  4. [A4] Abhay Bhargav, and B. V. Kumar. Secure Java: For Web Application Development. CRC Press, 2010.
  5. [A5] Robert C. Seacord. Secure Coding in C and C++. Addison-Wesley, 2013.
  6. [A6] John Viega, Matt Messier. Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More. O'Reilly Media, 2009.

کتب مرجع تکمیلی

  1. [B1] John Viega, and Gary McGraw. Building Secure Software. Addison-Wesley, 2001.
  2. [B2] G. McGraw. Software Security: Building Security In. Addison-Wesley, 2006.
  3. [B3] M. Dowd, J. McDonald, and J. Schuh. The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities. Addison-Wesley, 2006.
  4. [B4] M. Howard, D. LeBlanc, J. Viega. 24 Deadly Signs of Software Security: Programming Flaws and How to Fix Them. McGraw-Hill, 2009.
  5. [B5] M. S. Merkow, and L. Raghavan. Secure and Resilient Software Development. CRC Press, 2010.
  6. [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.
  7. [B7] Michael Howard, David LeBlanc. Writing Secure Code. Microsoft Press, 2002.
  8. [B8] Fred Long et al. Java Coding Guidelines: 75 Recommendations for Reliable and Secure Programs. Pearson Education, 2013.

مقالات مرجع

  1. [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
  2. [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.
  3. [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.
  4. [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

وب‌سایت‌های مرتبط

  1. [W1] The WASC Threat Classification v2.0: http://projects.webappsec.org/
  2. [W2] OWASP TOP 10: https://owasp.org/www-project-top-ten/
  3. [W3] OWASP Mobile Top 10: https://owasp.org/www-project-mobile-top-ten/
  4. [W4] Common Weakness Enumeration (CWE™): https://cwe.mitre.org/
  5. [W5] Common Vulnerabilities and Exposures (CVE): https://www.cve.org/
  6. [W6] Common Vulnerability Scoring System: https://www.first.org/cvss/
  7. [W8] SEI CERT Coding Standards: https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards
  8. [W9] Oracle Java Security: https://www.oracle.com/java/technologies/javase/seccodeguide.html

سرفصل‌های مصوب وزارت علوم

دروس مرتبط


تهیه‌کننده

  • نام: مرتضی ذاکری
  • نگارش: 3.0
  • آخرین بروزرسانی: 15/12/1403

سفارش

ارتباط با ما