1.5.2015

נספח: אבטחת מידע בסביבת הפיתוח

יום הפועלים שמח לכם.
בין אם אתם מפתחי תוכנה, בודקי תוכנה, מנהלי פרויקטים, מנהלי אבטחת מידע או סתם כי נמאס לכם שמדברים איתכם בג'רגון לא מובן - חשוב שתדעו את המושגים הבאים;

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

מודל ה-SDLC

נספח ב': פיתוח מאובטח

 

מודלים לפיתוח תוכנה


Build and Fix – פיתוח ללא תכנון מקדים. בעיות בתוכנה מטופלות לאחר שחרור התוכנה (בעזרת טלאים (Patches) ועדכונים.).

Waterfall – גישה הפועלת לפי שלבים, פאזות (Phases) הדורשת שכל שלב יושלם לפני המעבר לשלב הבא. נחשב למודל לא "גמיש" ובעל קושי להטמעת שינויים.

V-Shaped model (V-Model) – מודל השם דגש לתיקוף ולאימות ( Verification and Validation ) שלבי הפיתוח. בדיקות התוכנה נעשות במהלך הפיתוח ולא בסיומו.

Prototyping – כחלק ממודלי פיתוח תוכנה. יצירת דגם או מודל למטרת Proof-of-concept

Incremental model – שימוש בכמה מחזורי פיתוח לכל חלק, פיסה מהתוכנה – כחלק מתהליך הפיתוח הכולל.

Spiral model – גישה איטרטיבית (חוזרת על עצמה) השמה דגש לניתוח סיכונים בכל חזרה. זהו מודל גמיש המעניק יכולת להטמיע שינויים בהתאם לדרישת הלקוח.

Rapid Application Development – מודל המשלב את הגישה האיטרטיבית וגישת ה-Prototyping שמטרתו האצת קצב תהליך הפיתוח.

Agile model – תהליכי פיתוח מבוססים איטרטיביות והצטברות (Incremental) המעודדת עבודה בקבוצות. זהו מודל המעניק גמישות והסתגלות המחליף את צורת תהליכי הפיתוח שבד"כ מוקפדת ומחמירה. 

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

Joint Analysis Development (JAD) – שיטה המתמקדת בגישת עבודה בצוות בסביבות מכוונות סדנאות (Workshop-Oriented) .

Reuse model – מודל העושה שימוש (בהדרגה (במודלים שכבר פותחו. בפיתוח תוכנות מסוג זה, משתמשים באבי-טיפוס מוכנים ומשנים אותם בהתאם לדרישת הלקוח. כיוון שמודל זה לא דורש פיתוח תוכנה מהיסוד, הוא מפחית בצורה משמעותית את עלות וזמן הפיתוח.

Cleanroom – גישה ששמה לה למטרה מניעת תקלות וטעויות ע"י שימוש בשיטות ומבני פיתוח מוסכמים ותקניים. גישה זו נחשבת לקפדנית מאוד ומשמשת בעיקר לפיתוח תוכנות באיכות הגבוהה ביותר וכן תוכנות הנחשבות קריטיות (ברפואה, צבא וכו').


מושגים כלליים




Statement of work (SOW) – מתאר את דרישות המוצר והלקוח. הצהרה מפורטת תעזור להבטיח כי דרישות אלו מובנות כראוי ושלא נלקחו הנחות "סתם".

Work breakdown structure (WBS) – כלי לניהול פרויקטים המשמש להגדרת תהליכי עבודה ומקבץ אותם לאלמנטים נפרדים בסביבת הארגון.

Privacy impact rating – מציג את רמת הרגישות של הנתונים אליהם ניגשים ו\או עובדים.

Attack surface – רכיבי מוצר הזמינים לשימוש התוקף לתקיפת המוצר עצמו.

Attack surface analysis – זיהוי וצמצום כמות קוד המוצר הנגיש למשתמש לא מורשה.

Threat modeling – גישה סיסטמתית המתארת כיצד סכנות מבוססות איומים שונים עלולות להתרחש.

Computer-aided software engineering (CASE) – מתייחס לסוג של תוכנה המאפשרת פיתוח באופן אוטומטי ובד"כ מגיעה בצורה של כליי עריכה, Debuggers, Version-control וכלים שונים לניתוח קוד.

Static analysis – טכניקת debugging המנתחת קוד ללא הרצת התוכנה ולכן גם מתבצעת לפני הידור (Compiling) התוכנה. 

Fuzzing – טכניקה המשמשת לזיהוי ולגילוי זליגה וחולשות בתוכנה.

Verification – קובע האם המוצר תואם ועומד בדרישות שנקבעו.

Validation – קובע האם ב"עולם האמיתי" המוצר מעניק את הפתרון הנדרש לשם פיתוחו.

Web application security consortium (WASC) – ארגון ללא מטרות רווח, המורכב מקבוצות של מומחים מכל העולם (וכן, נציגי חברות ופעילים בולטים) ששמה לה למטרה יצירה ופיתוח של תקני אבטחת מידע מוסכמים ברשת האינטרנט (ה- World Wide Web ).

Open web application security project (OWASP) – ארגון ללא מטרות רווח, המתמקד לשיפור רובד האבטחה באפליקציות מבוססות Web.

Build Security In (BSI) – סט של כלים, חוקים, הוראות ונהלים המפורסם ע"י המחלקה לביטחון המולדת של ארה"ב. מיועד למפתחי תוכנה, ארכיטקטים ומומחי אבטחת מידע.

ISO/IEC 27034 – תקן בינלאומי המיועד בעיקרו לארגונים, ומציג דרכים כיצד יש להטמיע תהליכי אבטחת-מידע כחלק מניהול התוכנות אשר בבעלותם (בעיקר בתוכנות אשר פותחו ע"י גורם צד שלישי, בעזרת מיקור חוץ וכו').

Capability Maturity Model Integration (CMMI) model – תהליכי השבחה המעניקים לארגונים אלמנטים נחוצים לניהול ופיתוח של תהליכים באופן יעיל ובכך לשפר ביצועיהם.

Change control – תהליכי שליטה ובקרה של שינויים שבוצעו כחלק מתהליך מחזור הפיתוח (SDLC). שינויים ופעולות יתועדו.

Software Configuration Management (SCM) – זיהוי של רכיבים ותכונות בתוכנה בנקודות זמן שונות, וכן יישום וביצוע שיטות בקרה של שינויים במטרה להבטיח תחזוקה נאותה בכל הקשור לשלמות (integrity) התוכנה ומעקב (traceability) יעיל כחלק מה-SDLC.

Software escrow – אחסון קוד המקור של התוכנה בידי גורם צד-שלישי. קוד המקור יפורסם באופן פומבי אם חברת הפיתוח (או בעלי הזכויות) פושטת את הרגל או אם תחזוקת התוכנה (עדכונים וכו') לא נעשית כמובטח כמוצהר בהסכם בין הצדדים.

Programming language generations – 1) Machine language. 2) Assembly language.
3)
High-level language. 4) Very high-level language. 5) Natural language.

Machine language – אוסף הוראות בשפה הבינארית שמעבד המחשב מסוגל להבין ולעבוד איתן בצורה ישירה.

Assembly language – שפת תכנות ברמה הנמוכה (low-level programming language) ושייכת לשפת תכנות דור שני. מעניקה ייצוג, תיאור של אוסף ההוראות הכתובות בשפת מכונה.

Assemblers – כלים הממירים קוד הכתוב בשפת אסמבלי להוראות בשפת המכונה.

High-level language – ידועות גם כשפות תכנות דור שלישי (Third-generation PL, 3GL), זאת משום המבנה "המעודן" שלהם ושימוש בהצהרות מופשטות. Fortran ו- COBOL הינן השפות העתיקות יותר מסוג זה, וכיום שפות פופולריות כגון C, Java, C++ תופסות את מקומן.

Very high-level languages – ידועות גם כשפות תכנות דור רביעי (4GL) וייעודן לקרב ככל האפשר את השפה המדוברת להוראות מכונה. Perl, Python, PHP, Ruby ואף SQL נכנסות לקטגוריה זו של שפות תכנות.

Natural language (NLP) – ידועות גם כשפות מהדור החמישי שמטרתן ליצור תוכנות המסוגלות לפתור בעיות בעצמן. בד"כ משמשת מערכות בעלות יכולת של בינה-מלאכותית. דוגמאות ידועות הן Wolfram Alpha, Inform7 וכחלק מ-MATLAB.

Compilers – כלים אשר ממירים High-level language לפורמט ברמת-מכונה (exe,dll וכו') כך שמעבד הבנוי בארכיטקטורה מסוימת – יבין.

Interpreters – כלים להמרת קוד הכתוב ב"שפת תרגום" (PHP, Perl, Python...) לקוד מכונה.

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

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

Polymorphism – בתכנות, כאשר שני אובייקטים מסוגלים לקבל את אותו הקלט ולהפיק פלט שונה.

Cohesion – סוג של מדידה אשר מודד כמה משימות שונות מודול מסוים דורש ע"מ להתבצע.

Coupling – סוג של מדידה אשר מודד מהי כמות האינטראקציה הדרושה ע"מ שמודול מסוים יתבצע.

Data structure – ייצוג של קשרים לוגיים בין אלמנטים של נתונים.

Distributed Computing Environment (DCE) – מסגרת (framework) וסט של כלי פיתוח למטרת פיתוח תוכנות שרת\לקוח המאפשר מחשוב מבוזר (Distributed computing).

Common Object Request Broker Architecture (CORBA) – תקן ארכיטקטורה מונחית-עצמים אשר פותחה ע"י Object Management Group (OMG). תקן זה מאפשר לרכיבי תוכנה הכתובים בשפות תכנות שונות – לתקשר ולרוץ במערכות שונות.

Object Request Broker (ORB) – מנהל את כל התקשורת בין רכיבי התוכנה ומאפשר אינטראקציה בסביבות מחשוב מבודרות והטרוגניות. ה-ORB פועל כ-"ברוקר" בין בקשות לקוח לשירות בסביבות מרובות אובייקטים.

Component Object Model (COM) – מודל שפותח ע"י חברת מייקרוסופט המאפשר תקשורת בין תוכנות אשר נכתבו בשפות שונות – באותה המערכת.
 
Object Linking and Embedding (OLE) – מעניק לאובייקטים את האפשרות להיות משותפים (Shared) על אותו מחשב ולהשתמש ב-COM כבסיס תקשורת. זוהי טכנולוגיה אשר פותחה ע"י מייקרוסופט ומאפשרת הטמעה וקישור בין אובייקטים שונים.

Java Platform, Enterprise Edition (J2EE) – פלטפורמה בלתי-תלויה המבוססת שפת Java ומאפשרת גישה מודולרית לכתיבת קוד במטרה לפרשם (ולהבינם) ביתר קלות. J2EE מגדיר את מודל השרת\לקוח בצורה מונחית-עצמים ובלתי תלויה בסוג המערכת.

Service-oriented architecture (SOA) – מעניק לתוכנות שונות גישה תקנית ומגוונת לשירותים מסוימים – בו-זמנית. 

Simple Object Access Protocol (SOAP) – פרוטוקול מבוסס XML אשר מקודד הודעות בסביבת Web.

Mashup – השילוב של פונקציונליות, נתונים ואפשרויות תצוגה של שני מקורות או יותר – ע"מ ליצור פונקציונליות או שירותים שונים.

Software as a Service (SaaS) – מודל להעברת והנגשת תוכנה, המתאפיין באחסון מרכזי לנתונים ולאפליקציות אשר נגישים ללקוחות ולקליינטים מבוססי רשת. שיטת ההנגשה הפופולארית כיום היא ע"י מחשוב ענן ( Cloud computing). 

Cloud computing – שיטה מבוססת-אינטרנט המעניקה שירותים (לרוב, ע"פ דרישה – on-demand) באמצעות המחשב ללא מוצר מוחשי כלשהו.

Mobile code – קוד אשר מועבר באמצעות הרשת כאשר ביצוע\הפעלת הקוד נעשית ע"י המערכת בצד השני.

Java applets – רכיבים (applets) קטנים המעניקים פונקציונליות ומועברים באמצעות Java bytecodes . רכיבים אלה רצים בסביבת דפדפנים בעזרת ה-JVM. Java הינה שפה חוצה-פלטפורמות ולכן רכיבים אלו מסוגלים לרוץ במגוון רחב של דפדפנים.

Sandbox – סביבה ווירטואלית המעניקה בקרה לביצוע פעולות קוד מורשות במערכת. תוכנן ומיועד לביצוע הרצות של תוכנות לא מהימנות ממקורות מרוחקים (בד"כ).

ActiveX – טכנולוגיה מבית מייקרוסופט המורכבת מטכנולוגיות OOP שונות ומבוססת על COM ו-DCOM. זוהי מסגרת (framework) המגדירה רכיבי-תוכנה לשימוש חוזר ללא תלות בשפת התכנות.

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

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

Server Side Include (SSI) – זוהי שפת Scripting (סט פקודות) צד-שרת המיועדת לתקשורת מבוססת Web. בד"כ משמשת לסיפוח תכנים מ-קבצים שונים לתוך דפי אינטרנט. מאפשרת למפתחי Web שימוש חוזר בתוכן זהה אל תוך כמה דפי אינטרנט בו זמנית.

Client-side validation – אימות של הקלט הנעשה לפני שליחת הבקשה לשרת.

Cross-site scripting (XSS) – סוג התקפה אשר מנצלת חולשה באתרי אינטרנט המאפשרת הזרקה של קוד זדוני לתוך אפליקציית ה-Web.

Parameter validation – אלו הערכים המתקבלים לשרת אשר נבדקים ומאומתים עוד לפני עיבוד הבקשה בשרת.

Web proxy – חלק(רכיב) מתוכנה, אשר מותקן במערכת, ומיועד לניטור התעבורה בין הדפדפן לשרת ה-Web.

Replay attack – כאשר התוקף "לוכד" תעבורה כחלק משיחה (Session) לגיטימית במטרה להתחזות למשתמש מורשה.


בסיסי נתונים



Database – אוסף נתונים המאוחסנים באופן המאפשר למספר משתמשים ותוכנות לגשת, לשנות ולראות את אותם נתונים ע"פ דרישה.

Database management system (DBMS) DBMS כופה על שימוש בבקרות גישה ולכן מעניק הבטחה ואבטחה על שלמות הנתונים. בנוסף, מכיל פונקציות מגוונות לניהול הנתונים.

Relational database model – מודל העושה שימוש בתכונות (Attributes. מיוצגות ע"י העמודות) ו- Tuples (רשומה סופית ומסודרת של אלמנטים. מיוצגת ע"י השורות) המכילות לרוב מידע ארגוני.

Hierarchical data model – שילוב של רשומות ושדות הקשורים זה לזה – במבנה עץ-לוגי.

Object-oriented database - מודל המיועד לטיפול במגוון רב של נתונים (תמונות, קבצי קול ומסמכים). נחשב למודל דינאמי יותר מבסיסי נתונים מסוג Relational.

Object-relational database (ORD) – שימוש במערכת לניהול בסיסי נתונים, ומבוססת יחסי-עצמים (Object Relational Database Management System, ORDBMS), בנוסף, שימוש בבסיס נתונים מסוג Relational עם תוכנת Front-end הכתובה בשפה מונחית-עצמים.

Schema – מבנה מסד-נתונים המתואר בשפה הנתמכת ב-DBMS. משמש לתיאור אופן ארגון הנתונים.

Data dictionary – אוסף מרוכז של הגדרות, אובייקטים ומפתחות אודות הנתונים.

Primary key – מוגדר כמזהה של שורה ומשמש לאינדוקס בבסיסי נתונים מבוססי Relational.

Foreign key – תכונה המיושמת בטבלאות הנתונים המקשרת ל-Primary key בטבלה שונה.

Two-phase commit – טכניקה המאופיינת בשימוש של בקרה נוספת להבטחת שלמות המידע הנשמר (ושמור) בבסיס הנתונים.

Cell suppression – טכניקה המשמשת להסתרת תאים (Cells) מסוימים המכילים מידע רגיש.

Noise and perturbation – טכניקה העושה שימוש בהזנת מידע מוטעה במטרה (ובתקווה) לבלבל את התוקף, לעייף אותו ובזאת למנוע התקפות.

Data warehousing – שילוב נתונים ממספר בסיסי נתונים (או מקור נתונים) אל תוך בסיס נתונים אחד גדול ובכך להעניק יכולת לאנליזה של הנתונים.

Data mining – ידוע גם כ- Knowledge Discovery in Database (KDD), תהליך למיצוי הנתונים המאוחסנים ב- Data warehouse לכדי מידע שימושי.


Expert systems – ידוע גם כ- Knowledge-based systems. מערכות העושות שימוש בבינה מלאכותית כדי לפתור בעיות מורכבות. 

Artificial neural network (ANN) – מודל מתמטי\חישובי המבוסס על מבנה הנוירונים (תאי עצב) במוחנו.

 

ווירוסים ונוזקות 


רכיבי הנוזקה:


לנוזקה (Malware) שישה אלמנטים עיקריים, למרות שלא מן הנמנע כי נוזקות מסוימות לא יכילו את כל השישה.

Insertion תהליך "ההתקנה", בו הנוזקה מתקינה עצמה במחשב הקורבן.

Avoidance השימוש בשיטות וטכניקות למניעת גילוי הנוזקה.

Eradication – תהליך בו הנוזקה "מסירה\מוחקת" את עצמה לאחר ביצוע\הרצת תוכן המנה (Payload).

Replication – התהליך בו הנוזקה משכפלת ומפיצה את עצמה לקורבנות אחרים.

Trigger – שימוש באירוע מסוים כ"טריגר" להרצת תוכן המנה.

Payload – בעברית, "מטען", "תוכן מנה". מכילה את סט הפונקציות הנדרשות (מחיקת קבצים, התקנת backdoor וכו').





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

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

Compression viruses – סוג נוסף של ווירוס אשר דוחס ומוסיף עצמו לקובצי הרצה (Executables).

Stealth virus – ווירוס "מתוחכם", אשר מסתיר את השינויים שהוא ביצע. סוג זה מנסה לחמוק מאנטי-ווירוסים בכך שבקשותיו (requests) מוסוות כבקשות של מערכת ההפעלה.

Polymorphic virus – ווירוס המייצר עותקים שונים (אך פועלים) של עצמו. ווירוס זה לא משאיר עותקים זהים ממנו בין הדבקה להדבקה – דבר המקשה אנטי וירוסים מבוססי חתימות (signatures) לזהותו.

 Multipart virus – נקרא גם "Multipartite virus". מכיל כמה וכמה רכיבים ומדביק חלקים שונים ממערכת ההפעלה. אופן ההדבקה וההפצה נעשה בדרכים שונות ומגוונות, דבר המקשה הסרתו אם וכאשר הוא זוהה.

Self-garbling virus – ווירוס המנסה לחמוק מתוכנות האנטי ווירוס בכך שהוא משנה את הקוד של עצמו בכל פעם שקיימת חתימה ידועה לגביו בתוכנות האנטי ווירוס.

Meme virus – אלה לא ממש ווירוסים, אלא סוג של הודעות דוא"ל אשר ממשיכות להעביר (forward) את עצמן באינטרנט.

Bots – תוכנות אשר מריצות משימות (tasks) ופעולות באופן אוטומטי בעיקר במרחב האינטרנטי. משימות אלה בד"כ פשוטות ובעלות מבנה החוזר על עצמו. שימוש זדוני בבוטים בא לידי ביטוי ביצירה והפעלה של Botnet (אוסף מרוכז ומבוקר של בוטים).

Worms – בשונה מווירוסים, אלה יכולים לשכפל עצמם גם ללא יישומים מארחים (Host applications) ובד"כ מכילים בתוכם תוכנות קטנות לביצוע הפעולות.

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

Trojan horse – תוכנה במסווה של תוכנה אחרת. מטרתה היא לבצע פעולות זדוניות "ברקע" ללא ידיעת המשתמש.

Remote Access Trojans (RATs) – תוכנות זדוניות אשר רצות במערכות ומאפשרות גישה מרחוק לשימוש התוקף.

Immunizer – סיפוח קוד לקובץ או לתוכנה במטרה להטעות את הווירוס בכך "שיחשוב" שהנ"ל כבר מזוהם (מודבק).