בדיקות אבטחת תוכנה

**בדיקות אבטחת תוכנה ** (באנגלית: **Software Security Testing**) הן חלק מתהליך הבטחת איכות או בדיקות תוכנה. בדומה לתהליכי בדיקה אחרים תהליך זה בודק את התפקוד של מערכת מידע ותר אחר התנהגות לא נאותה. בדיקות אבטחה שמות דגש על אבטחת מידע ובדיקת העמידות של המערכת בפני התקפות זדוניות, גנבת מידע וניצול לרעה.

## אבטחת מערכות מידע

אבטחת מערכות מידע מוגדרת כשמירה על ששת העקרונות של אבטחת מידע, והם:
***[[סודיות]] (Confidentiality)** - המידע יהיה נגיש רק למי שמורשה לצפות בו או לעשות בו שינויים
***[[שלמות מידע]] (Integrity)** - המידע המתקבל שלם ולא עבר שינויים במהלך שליחתו
***[[אימות זהות]] (Authentication)** - יהיה ניתן לאמת את זהות השולח בצורה מפורשת וניתן יהיה לאתר את מקור המידע
***הרשאות (Authorization)** - יהיה ניתן לקבוע האם משתמש מסוים רשאי לצפות או לעשות שינויים במידע מסוים. תהליך האימות הוא תנאי הכרחי על מנת שלהרשאות תהיה חשיבות כלשהי.
***[[זמינות]] (Availability)** - המידע יהיה זמין ומוכן לשימוש. שרת שנפל הוא דוגמה לפגיעה בזמינות המידע.
***[[אי-התכחשות]] (Non-repudiation)** - יהיה ניתן להתחקות אחר פעולה מסוימת ולקשור אותה אל מבצע הפעולה בצורה שלא ניתנת להתכחשות.

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

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

### תופעות לוואי
בדיקה על פי מפרט בדרך כלל מבוטאת על ידי שני פרמטרים: הקלט המוכנס והפלט הצפוי. אם הפלט בפועל מתאים לפלט הצפוי הבדיקה מוגדרת כהצלחה (המערכת מתפקדת כראוי) והבודק ממשיך הלאה. במקרים רבים אין התייחסות למצב המערכת (state) ולשינויים שהמערכת עברה במהלך הבדיקה. כמו כן, אין התייחסות לדרך בה התבצעה הפעולה.

במקרים רבים בתום פעולה כלשהי יש שינוי במצב המערכת. דוגמאות לשיניים כאלו:

*יצירה, שינוי ומחיקה של קבצים
*קובץ שנפתח ונשאר פתוח
*פורט (תקשורת) שנפתח ונשאר פתוח

לשינויים כאלו קוראים תופעות לוואי (Side effects) כיוון שאין להם השפעה על הפלט של המערכת ובודק לא מיומן עלול להתעלם מהן לחלוטין. כמובן שכל שינוי כזה עלול להוות תקלת אבטחה ולשמש לטובת גורם עוין.

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

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

## כלים
שיטות לבדיקת אבטחת תוכנה:

### כלים אוטומטיים
קיימים כלים אוטומטיים רבים לבדיקות איכות תוכנה ואיתור תקלות ("באגים") אך מעט מאוד כלים הבודקים אבטחה של תוכנה.

### ספריות בדיקה
ספריות אלה מכילות אוסף של מתקפות ידועות אשר ניתן להריץ בצורה אוטומטית על המערכת.

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

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

### OWASP

OWASP הוא פרויקט פיתוח תוכנה אשר עוסק בהיבטי אבטחת מידע. הקוד של תוכנה הוא פתוח (Open-source software).
קהילת OWASP כוללת חברות, מוסדות חינוך ונציגים מכל העולם. הקהילה עוסקת בחיבור מאמרים, פיתוח מתודולוגיות וכלים אשר נגישים לכלל האוכלוסייה. רשמית הקהילה קיימת מאז יוני 2011 והיא רשומה כארגון ללא מטרות רווח באירופה.

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

*הזרקת SQL - הכנסת שאילתת SQL זדונית באפליקציית אינטרנט לשדה קלט (בדרך כלל שדה טקסט חופשי) במקום נתונים המבוקשים. מטרת השאילתא היא לגרום נזק למסד נתונים של השרת ו/או לגשת למידע אשר משתמש פשוט לא מורשה אליו. קיימים הרבה קלטים זדוניים אפשריים אשר ממלאים את המטרה, מה שמהווה קושי ניכר בבדיקות אבטחת תוכנה.
*XSS - הכנסת קוד זדוני באפליקציית אינטרנט. בדרך כלל קוד זה כתוב ב-JavaScript. שדות להכנסת טקסט חופשי הן המקור העיקרי למימוש מתקפה זו. כל גולש אשר מגיע לדף אינטרנט וקורא טקסט לא מודע לסקריפטים של JavaScript שהדפדפן מריץ. גם כאן קיימים קטעי קוד אפשריים רבים שניתן להכניס לגוף של הודעת טקסט שגרתית.
*התקפת אדם באמצע - מתקפה נפוצה בעיקר ברשתות אל-חוטיות. האקר או קראקר מתחבר לשרת או נתב ברשת אינטרנט מקומית ומתחזה עליו. המשתמש הפשוט אשר רוצה להתחבר לאותו שרת/נתב, מקבל אשליה שהוא התחבר ישירות לנתב אך בפועל הוא מחובר למחשב של האקר. כך נוצר מצב בו האקר מאזין לכל התקשורת העוברת בין נתב למשתמש הפשוט. כדי לנסות לזהות מתקפה כזו ניתן למדוד זמן תגובה של המשתמש, אך מאוד קשה להגדיר מהו זמן תגובה סביר שמבטיח כי אין "אדם באמצע". על מנת למנוע אותה יש להיעזר במנגנוני ההצפנה.

## מקורות
*Software Security Testing
*Why Security Testing is Hard

## קישורים חיצוניים

*Why Measuring Security is Hard
*Security Testing in Agile Web Application Development 
*OWASP

קטגוריה:בדיקות תוכנה
קטגוריה:אבטחת מחשבים