מידע מורחב

  • תאריך
  • שעה 13:48
  • ע"י
  • צפיות 1898
  • תגובות 0
  • דירוג 5 /5

באגים בתוכנה יכולים להרוג – קחו אחריות לשינוי

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

    קוד הכתוב באופן גרוע יכול להיות לא רק יותר יקר, אלא לפעמים אפילו קטלני :
  • מערכת קרקעית להתראת-גובה עם באגים בתוכנה, הייתה אחראית במידה מסוימת להתרסקות טיסה מסחרית של Korean Air בשנת 1997 בגואם שם נהרגו 228 אנשים.
  • תוכנה פגומה נגד נעילת-בלמים (ABS) אילצה את היצרן להחזיר לתיקון - 39,000 משאיות וטרקטורים ו- 6,000 אוטובוסי בית-ספר בשנת 2000.

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

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

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

מחקרים מראים כי שימוש בכלי ניתוח קוד high-end כגון קלוקוורק, יכול להגדיל את התפוקה של מתכנתים ב- 30% על ידי צמצום באופן משמעותי של זמן איתור והבנת הבאגים.

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

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

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

דוגמה פשוטה לקוד בעייתי:
1  void foo()
2  {
3      char a[8]; // holds two 4-byte ints
4      for (int i = 0; i < sizeof(a); i++)
5      {
6          ((int*)a)[i] = i;
7      }
8  }


ישנם מצבים בהם המערך מוגדר כסוג (type) מסוים אך הגישה אליו מתבצעת בהמרה לסוג אחר (cast to a different type), דבר העלול לגרום לחריגה מגבולות המערך.

תיקון לקוד הבעייתי שלמעלה:
1  void foo()
2  {
3      char a[8]; // holds two 4-byte ints
4      for (int i = 0; i < sizeof(a) / sizeof(int); i++)
5      {
6          ((int*)a)[i] = i;
7      }
8  }


בעיה נפוצה בקוד Java הינה XSS (ר"ת של: Cross-site scripting) המשתייכת לקבוצה של פרצות אבטחה המאפשרים להכניס תוכן ע"י משתמש חיצוני (שאינו מנהל האתר). ניצול פרצות אלו מאפשר החדרת דוק זדוני המתחזה לקוד לגיטימי.

דוגמה:
15     protected void printComment(Connection conn, ServletOutputStream out, String user) throws SQLException, IOException {
16         PreparedStatement pr = conn.prepareStatement("SELECT * FROM comms WHERE user = ?");
17         pr.setString(0, user);
18         String comment = pr.executeQuery().getString("comment");
19         out.println("Comments: " + comment);
20     }


הכלי של קלוקוורק מדווח על בעיה בשורה 19, שבה נעשה שימוש ב- 'comment' המכיל מידע המגיע ממסד-הנתונים (שורה 18) אך משמש ליצירת עמוד הווב ללא בדיקה של הערכים. אותו מידע עלול להכיל קוד שרירותי של HTML ו- JavaScript. לשם שימוש לרעה בבעיה זו צריך להימצא (בקוד) גם בעיה המאפשרת הזרקת מידע לא בדוק לתוך מסד הנתונים.
עדיין לא נרשמת לאתר ? לחץ כאן להרשמה מהירה
נא המתן...
דירוג


עליך להתחבר כדי להגיב. לחץ כאן להתחברות.