See Security
המכללה לאבטחת מידע וללוחמת מידע

צרו איתנו קשר

שם מלא
טלפון
דוא"ל
תוכן
קוד אבטחה:

חדשות ועדכונים

כל החדשות ›

קורס אבטחת קוד C++ & C

תוכניתנים מבריקים נבדלו מאז ומתמיד ביעילות הפיתוח ובאלגנטיות הפתרונות אשר הטמיעו. ברם, בעשור האחרון, הצטרף המונח "אמינות" להגדרת התוכניתן המבריק, עקב האיומים ברשת. 

שפות התכנות C ו- C++ הנן אושיות הפיתוח, ומהוות בסיס למרבית מערכות ההפעלה, עבור שירותי הרשת, לפיתוח מערכות משובצות מחשב ולפיתוח מערכות זמן אמת.

למרבה הצער, סביבת הפיתוח לשפות אלו ידועה כמרובת חולשות ואיומים, ולפיכך, במהלך הקורס מתבקשים התלמידים לזהות פגמים בגרסאות מודרניות של תוכנות קוד פתוח משותף ומתורגלים למתן פתרונות מאובטחים לבעיות קידוד הנוגעות לאבטחת היישום.

היקף התוכנית:

32 שעות לימוד.

מטרת התוכנית:

הקורס הסבר מפורט של טעויות התכנות הנפוצות בסביבת C ו- C++ ומתאר כיצד שגיאות אלה עשויות להוביל הקוד הוא פגיע לניצול, תוך התבססות על הנחיות "C-CERT Secure Coding Standard", ומניעת פגיעות עקב פגמים בתכנון, בפיתוח, בהטמעה, בשדרוג או בתחזוקה של היישום.

קהל יעד:

1.       מפתחי תוכנה /תוכניתנים בסביבת C/ C++.

2.       בודקי תוכנה מתקדמים בסביבת C/ C++.

3.       מנהלי פרוייקטים וצוותי פיתוח בסביבת C/ C++.

תמצית תוכנית הלימודים

  • Introduction
  • Secure C/C++ Programming

o    A real exploit program

o    Security is a process, not a product

o    Adding cryptography does not make a

o    program secure

o    C++ versus C

  • Integer operations

o    Value truncation

o    How can you avoid this problem?

o    Integer overflow and underflow

o    How can you avoid this problem?

o    Signed/unsigned problems

o    How can you avoid this problem?

o    Non-exceptional conditions

  • Buffer overflow introduction

o    Memory layout

o    Stack overflows

o    Exploit: calling another function

o    Other exploits for stack overflows

o    More stack overflow information

o    A real stack overflow exploit program

o    Avoiding these problems

  • Heap and other data segment overflows

o    The heap

o    Heap data structure attacks

o    Common programming errors

o    Avoiding these problems

  • Format string errors

o    It gets worse!

o    A real attack program

o    The problem

o    How can you avoid this problem?

  • Pointer issues

o    Pointers to functions

o    C++ virtual method table

o   Destructors

o    Global offset table (GOT)

o    The .dtors section

o    Exit handlers

o    setjmp/longjmp

o    Exception handling

o    Avoiding these problems

  • Memory management

o    malloc aids

o    PhkMalloc

o    Electric fence

o    Die Hard

o    Programming techniques

  • valgrind

o    Using valgrind

o    Command-line options

o    memcheck overview

o    Finding memory leaks

o    Command-line flags specific to

o    memcheck

o    Finding illegal free() calls

o    Finding buffer overflows

o    Other uses of memcheck

  • Other buffer overflow avoidanceandmitigation techniques

o    Standard C libraryfunctions

o    Alternate functions/libraries

o    OS- and compiler-level countermeasures

o    General

o    Stack

o    Heap

o    Static analysis tools

o    Dynamic analysis tools (other than

o    valgrind

o    strace

o   ltrace

  • Secure failures

o    Resources

o    C++ Exceptions

o    C/C++ function and system call error

o    Returns

o    Additional coding techniques

  • Input validation techniques

o    White lists

o    Canonicalization

o    Little languages

o    Taint checking through static analysis

o    Programs

  • Process issues

o    Erasing data

o    The problem

o    Some solutions

o    Signals

o    Signal-safe calls

o    Signal race conditions

o    How to avoid these problems

  • Filesystem Security Issues

o    Erasing data in the filesystem

o    The problem

o    Solutions

o    Encrypting on-disk data

o    Filesystem TOCTOU race conditions

o    Password command races

o    Avoiding TOCTTOU problems

o    Coding tips to reduce problems

o    Open with O_EXCL and

o    O_CREAT

o    Temporary Files

o    Coding tips to reduce problems

  • Least privilege

o    Dropping privileges after obtaining a

o    resource

o    Separation of privilege

o    Implementing separation of privilege

o    Process for designing separation of

o    privilege

o    OpenSSH

o    Applying separation of privilege to

o    OpenSSH

  • Compartmentalization

o    Processes as compartments

o    File system compartmentalization

o    Description

o    Setup

o    Other details

o    Breaking out and other mischief

  • Security and the software development life cycle

o    Requirements

o    Design/Architecture

o    Design is critical

o    Ensure the program is well-designed

o    Properly-written specifications

o    Code development

o    Implementation is critical

o    Testing

o    Operations/maintenance

o    Penetrate and patch is the wrong

o    Approach

  • Black-box Testing

o    Syntax Testing

o    Equivalence Partitioning

o    Boundary Condition Testing

o    Fuzzing

o    Resource Limits and Failure Conditions

o    Tools for Testing

o    Fuzz testing tools

o    The Peach Fuzzer