מה זה Fuzzing?

מה מטושטש

הקדמה: מה זה Fuzzing?

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

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

כאן נכנס לתמונה ה-'fuzzing'.

מהי התקפה מטושטשת?

Fuzzing, Fuzz Testing או התקפת Fuzzing, היא טכניקת בדיקת תוכנה אוטומטית המשמשת להזנת נתונים אקראיים, בלתי צפויים או לא חוקיים (הנקראים Fuzz) לתוך תוכנית. התוכנית מנוטרת להתנהגויות חריגות או בלתי צפויות כגון הצפת מאגר, קריסות, דליפות זיכרון, ניתוק שרשורים והפרות גישה לקריאה/כתיבה. לאחר מכן נעשה שימוש בכלי ה-fuzzing או fuzzer כדי לחשוף את הסיבה להתנהגות החריגה.

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

Fuzzers משמשים בתוכניות שמקבלות קלט מובנה או שיש להן סוג של גבול אמון. לדוגמה, לתוכנית שמקבלת קובצי PDF תהיה אימות מסוים כדי לוודא שלקובץ יש סיומת .pdf ומנתח לעיבוד קובץ ה-PDF.

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

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

 

סוגי Fuzzers

ניתן לסווג פיוזרים על סמך כמה מאפיינים:

  1. לתקוף מטרות
  2. שיטת יצירת Fuzz
  3. מודעות למבנה הקלט
  4. מודעות למבנה התוכנית

1. תקיפה של מטרות

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

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

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

2. שיטת יצירת Fuzz

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

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

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

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

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

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

3. מודעות למבנה קלט

סיווג זה מתבסס על האם ה-fuzzer מודע ומשתמש באופן פעיל במבנה הקלט של תוכנית ביצירת נתוני fuzz. א פוזר מטומטם (מזגן שאינו מודע למבנה הקלט של תוכנית) יוצר רעש באופן אקראי ברובו. זה יכול לכלול fuzzers מבוססי-דורות וגם מוטציות. 


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

4. מודעות למבנה התוכנית

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

נתוני ה-fuzz שנוצרו במהלך בדיקת הקופסה השחורה הם בדרך כלל אקראיים, אלא אם כן ה-fuzzer הוא fuser מבוסס מוטציות אבולוציוני, שבו הוא 'לומד' על ידי ניטור השפעת ה-fuzzing שלו ושימוש בזה מידע כדי לחדד את מערך הנתונים המטושטש שלו.

לעומת זאת, בדיקת White-box משתמשת במודל של המבנה הפנימי של התוכנית כדי ליצור נתוני fuzz. גישה זו מאפשרת ל-fuzzer להגיע למיקומים קריטיים בתוכנית ולבדוק אותה. 

כלי Fuzzing פופולריים

יש הרבה מטושטשים כלים בחוץ בשימוש על ידי בודקי עטים. כמה מהפופולריים שבהם הם:

מגבלות של Fuzzing

אמנם Fuzzing היא טכניקת בדיקת עט שימושית באמת, אבל היא לא חפה מטעויות. חלק מאלה הם:

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

 

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

סיכום

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

אז למה אתה מחכה? 

התחילו להתעסק היום!

גוגל ומיתוס הגלישה בסתר

גוגל ומיתוס הגלישה בסתר

גוגל ומיתוס הגלישה בסתר ב-1 באפריל 2024, גוגל הסכימה ליישב תביעה על ידי השמדת מיליארדי רשומות נתונים שנאספו ממצב גלישה בסתר.

קרא עוד »