سیستم‌های نرم‌افزاری امن

Secure Software Systems

شماره درس: ۴۰۸۱۵ تعداد واحد: ۳
مقطع: کارشناسی ارشد نوع درس: نظری
پیش‌نیاز: – هم‌نیاز: –

اهداف درس

هدف از این درس، آشنا نمودن دانشجویان کارشناسی ارشد با با سیستمهای نرم‌افزاری امن می باشد. چهار محور اصلی درس عبارتند از درک عمیق حملات کلاسیک، سیاست های امنیتی در زمان اجرای برنامه، تحلیل نرم افزا و معماری های موجود برای ساخت نرم‌افزار امن. این درس دارای 3 تمرین کاربردی/ برنامه نویسی می باشد تا دانشجویان با مباحث مطرح شده بصورت عمیق تری آشنا شوند.

ریز مواد

  1. مقدمه ای بر سیستمهای نرم‌افزاری امن
  2. حملات کلاسیک
    • حملات سرریز بافر، آسیب‌پذیری‌های فرمت استرینگ و RoP و غیره
  3. محافظت در زمان اجرا
    • ردگیری رنگ پویا (Taint Analysis)
    • بازسازی مجدد اسمبلی (Reaasembely)
    • یکپارچگی جریان کنترل (CFI)
  4. تحلیل کد
    • تحلیل ایستا و پویا
    • اجرای نمادین (Symbolic Execution)
    • فازینگ
  5. معماری
    • بلوک‌های ساخت پایه:‌ جداسازی، محافظت از حافظه
    • بلوک‌های ساخت پایه: جعبه‌شن جاوا، ماشین‌های مجازی VMI و غیره
    • جداسازی و محدودسازی در اندروید
    • پردازش قابل اعتماد
  6. وب
    • حملات وب
    • دفاع در وب: کلاینت بومی، جداسازی برنامه
    • پیچیدگی‌های ساختار وب
  7. کاربردپذیری
    • امنیت کاربردپذیر
    • تجربه کاربر
    • تاثیر انسان در فرایند‌ها

ارزیابی

  • شرکت فعال در کلاس: ۳ نمره
  • آزمون‌های میان‌ترم و پایان‌ترم: ۱۰ نمره
  • تمرین‌های کاربردی/ برنامه‌نویسی: ۷ نمره

مراجع

  • Reflections on Trusting Trust, Ken Thompson, Turing Award Lecture ,1984.
  • Measuring Pay-per-Install: The Commoditization of Malware Distribution, J. Caballero, C. Grier, C. Kreibich, V. Paxson, 2011.
  • Buffer Overflows: Attacks and Defenses for the Vulnerability of the Decade, Cowan, C., Wagle, F., Pu, C., Beattie, S., & Walpole, J., 2000.
  • Exploiting format string vulnerabilities, teso, Phrack, September 2001.
  • Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software, James Newsome and Dawn Song, NDSS 2005.
  • All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution (but might have been afraid to ask), E. J. Schwartz, T. Avgerinos, D. Brumley, IEEE S&P 2011.
  • Binary Stirring: Self-randomizing Instruction Addresses of Legacy x86 Binary Code, R. Wartell, V. Mohan, K. W. Hamlen, and Z. Lin, CCS 2012.
  • Reassembleable Disassembling, Shuai Wang, Pei Wang, and Dinghao Wu, Usenix Security 2015.
  • Ramblr: Making Reassembly Great Again, Ruoyu Fish Wang, Yan Shoshitaishvili, Antonio Bianchi,
  • Aravind Machiry, John Grosen, Paul Grosen, Christopher Kruegel, Giovanni Vigna, NDSS 2017.
  • Position Independent Code (PIC) in shared libraries, Eli Benderskly, 2011.
  • Control-Flow IntegrityMartin Abadi, Mihai Budiu, Ulfar Erlingsson, Jay Ligatti, CCS 2005.
  • Code-Pointer Integrity, Volodymyr Kuznetsov, Laszlo Szekeres, Mathias Payer, George Candea, R. Sekar, Dawn Song, OSDI 2014.
  • Checking system rules using system-specific, programmer-written compiler extensions, Dawson Engler, Benjamin Chelf, Andy Chou, and Seth Hallem, OSDI 2000.
  • A few billion lines of code later: using static analysis to find bugs in the real world, Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler. Communications of the ACM, 2010.
  • EXE: Automatically Generating Inputs of Death, Cristian Cadar, Vijay Ganesh, Peter M. Pawlowski, David L. Dill, Dawson R. Engler, 13th ACM CCS, 2006.
  • KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs, Cristian Cadar, Daniel Dunbar, Dawson Engler, OSDI 2008.
  • Under-Constrained Symbolic Execution: Correctness Checking for Real Code, David A. Ramos, Dawson Engler, Usenix Security 2015.
  • VUzzer: Application-aware Evolutionary Fuzzing, Sanjay Rawat, Vivek Jain, Ashish Kumar, Lucian Cojocar, Cristiano Giuffrida, Herbert Bos, NDSS’17.
  • The Protection of Information in Computer Systems, Jerome H. Saltzer, Michael D. Schroeder, Proceedings of the IEEE, 1975.
  • A virtual machine introspection based architecture for intrusion detection, Tal Garfinkel and Mendel Rosenblum, NDSS 2003.
  • SubVirt: Implementing malware with virtual machines, Samuel T. King, Peter M. Chen, Yi-Min Wang, Chad Verbowski,Helen J. Wang and Jacob R. Lorch, IEEE S&P, 2006.
  • A Bad Dream: Subverting Trusted Platform Module While You Are Sleeping, Seunghun Han, Wook Shin, Jun-Hyeok Park, and HyoungChun Kim, Usenix Security 2018.
  • Security Challenges in an Increasingly Tangled Web, Kumar, D., Ma, Z., Durumeric, Z., Mirian, A., Mason, J., Halderman, J. A., & Bailey, M., WWW 2017.
  • Native Client: A Sandbox for Portable, Untrusted x86 Native Code, Yee B, Sehr D, Dardyk G, Chen JB, Muth R, Ormandy T, Okasaka S, Narula N, Fullagar N., IEEE S&P, 2009.