רווחים:
- יכולת להשתמש בבינה מלאכותית כעין שנייה ולסמן פגיעויות של מחלקת OWASP (הזרקה, סוד קשה, בקרת גישה) בקוד על ידי מתן הקשר
- יכולת לחסל תוצאות חיוביות שגויות שנוצרו על ידי בינה מלאכותית עם הקשר ולמנוע התייחסות לכל ממצא כאל פגיעות אמיתית מבלי לאמת אותו
- היכולת לזהות שהתיקון המוצע על ידי בינה מלאכותית עשוי להציג פגיעויות/באגים חדשים ולהעביר כל תיקון דרך שער הסקירה והבדיקה
פגיעויות בתוך תוכנה הן מהפגיעות היקרות ביותר מכיוון שהן מוטמעות במוצר מההתחלה ומופצות למיליוני משתמשים. סקירת קוד מאובטח היא תהליך של קריאת קוד מקור שורה אחר שורה ותפיסת פגיעויות - הזרקת SQL, פגיעות אימות, סיסמה מקודדת, הרשאה שגויה - לפני שהן נכנסות לייצור. כאשר נעשה ביד, זה איטי ומעייף; קל לפספס פגיעות בבסיס קוד גדול.
AI חזק בבדיקת קוד משתי סיבות: קוד הוא גם שפה, ובינה מלאכותית טובה בזיהוי תבניות. בינה מלאכותית יכולה לסמן במהירות דפוסים מסוכנים בחתיכת קוד (הכנסת קלט משתמש ישירות לשאילתה, אחסון נתונים לא מוצפן, אימות קלט חסר), להסביר מדוע כל אחד מהם מסוכן, ולהציע תיקון. אבל ה-AI אינו רואה את כל ההקשר ההפעלה של הקוד (ייתכן שהקלט מנוקה בשכבה אחרת), הוא עשוי להמציא פגיעות שאינה קיימת (false positive) או לפספס פגיעות אמיתית (false negative), והכי חשוב, ה"תיקון" שהוא מציע עלול להציג פגיעות או באג חדש. AI הוא עין שנייה ומצביע בסקירת קוד; המפתח ומומחה האבטחה מחליטים האם ממצא הוא פגיעות אמיתית והאם התיקון נכון ובטוח.
שלבים של סקירת קוד
- תן היקף והקשר. איזו שפה, איזו מסגרת, מאיפה הקוד הזה לוקח קלט, איפה הוא נותן פלט, באיזו שכבה הוא עובד? סקירת קוד ללא הקשר מייצרת תוצאות חיוביות שגויות.
- סרוק לאיתור דפוסים מסוכנים. חפש מחלקות פגיעות ידועות של AI (כגון OWASP Top 10): הזרקה, אימות, חשיפת נתונים רגישים, בקרת גישה.
- יש להצדיק כל ממצא. לכל דגל: איזה קו, איזה מחלקת פגיעות, איך אפשר לנצל אותו, מה ההוכחות. ממצא לא מוצדק אינו נלקח ברצינות.
- הסר חיובי כוזב. האם הקלט אכן מנוקה, האם הנתיב הזה באמת נגיש - בדוק עם ההקשר.
- אמת את התיקון. אשר כי התיקון המומלץ על ידי AI אכן סוגר את הפגיעות, אינו מציג פגיעויות/באגים חדשים ועבר בדיקות.
- אישור אנושי. מפתח + מומחה אבטחה סוקר את הממצא והתיקון; כך הוא נכנס למאגר הקודים.
תנאים: SAST (Static Application Security Testing - בדיקות אבטחה סטטיות המנתחות קוד מקור מבלי להפעיל אותו). DAST (דינמי - בדיקה דינמית הבודקת את האפליקציה הפועלת באופן חיצוני). OWASP Top 10 הוא הרשימה הסטנדרטית של פגיעויות אפליקציות האינטרנט הנפוצות ביותר. הזרקה היא פגיעות הנגרמת על ידי פירוש קלט המשתמש כפקודה/שאילתה (למשל הזרקת SQL). שאילתה עם פרמטרים היא השיטה הנכונה שמונעת הזרקה על ידי הפרדת הקלט מהקוד.
טבלה של מחלקות פגיעות נפוצות
מחלקת פגיעות
סימפטום (בקוד)
פתרון נכון
המלכודת של AI
הזרקת SQL
מצטרף לקלט לשאילתה
שאילתה עם פרמטרים
יכול להתעלם מחטאות
סוד מקודד קשה
סיסמא/הכנס קוד
כספת סודית (כספת), מקיף
חיובי שגוי (מדגם/בדיקה)
אימות חלש
שליטה חסרה/שגויה
שליטה חזקה ומרוכזת
מפספס את ההקשר
בקרת גישה לקויה
אין בדיקת אישור
הרשאה בצד השרת
לא מבין זרימה מורכבת
חשיפת נתונים רגישים
אחסון/רישום ללא סיסמה
הצפנה, מיסוך
לא יכול לדעת ביקורתיות
סדרה לא מאובטחת
הסרת נתונים לא מהימנים
ניתוח מאובטח
מתגעגע לתבנית נדירה
שלושה מיני תיקים
מקרה 1 - תפיסת ההזרקה בפועל. למפתח יש את הבינה המלאכותית לבחון פונקציית גישה לנתונים. ה-AI מסמן את השורה שבה ערך ה-userId מהמשתמש משורשר ישירות לטקסט SQL ואומר "זו הזרקת SQL קלאסית, הפוך אותה לשאילתה עם פרמטרים"; מספק תיקון לדוגמה. המפתח מאשר שהקלט לא עבר חיטוי במקומות אחרים, מוודא שמדובר בפגיעות אמיתית, מיישם את השאילתה עם הפרמטרים המוצעת וכותב בדיקה. AI הדגישה את הפגיעות; בדיקות אימות ותיקון הגיעו מהמפתח.
מקרה 2 - סוד קבוע כוזב חיובי. ה-AI רואה את השורה = "test1234" בקובץ ואומר "קריטי: סיסמה מקודדת קשה". המפתח בודק את ההקשר: זהו קובץ בדיקת יחידה, נתוני בדיקת דמה, לא שוחררו לייצור ולא מועברים למערכת אמיתית. הממצא הוא חיובי שגוי. היזם מתעד זאת אך אינו נוקט בפעולה כי זה לא סוד אמיתי. לקח: יש לבטל את הסימן "הסוד הקשה" של AI על ידי הקשר; לא כל מחרוזת היא סוד.
מקרה 3 - תיקון פגיעות חדש. בינה מלאכותית מציעה תיקון לפגיעות XSS (סקריפטים חוצה אתרים); אבל הקוד שהוא מציע מנקה קלט במקום הלא נכון ומדלג על קידוד פלט באזור אחר; כתוצאה מכך, הפער אינו נסגר לחלוטין. מומחה האבטחה סוקר את התיקון, מבחין בקידוד החסר ומתקן אותו בשכבה הנכונה. לקח: התיקון שעליו ממליצה בינה מלאכותית אינו מאובטח אוטומטית; כל תיקון נבדק ונבדק.
הנחיה חלשה / הנחיה חזקה
הנחיה חלשה:
האם יש פרצה בקוד הזה, תקן אותה: [קוד]
הנחיה זו אינה נותנת שום הקשר (שפה, מסגרת, מקור קלט), אינה מבקשת הצדקה, אינה מפקפקת בחיוב השקרי ופתוחה לקבל באופן עיוור את התיקון שמפיק ה-AI. בינה מלאכותית עירבה סימנים של פגיעות אמיתית וגם לא קיימת.
הנחיה עוצמתית:
התפקיד שלך: עוזר שהוא העין השנייה למפתח בסקירת קוד מאובטח. קבלת החלטות; לשקול את התיקון מיושם ישירות. קוד: [ציין שפה/מסגרת]. הקשר: פונקציה זו [מקור קלט: למשל. מקבל [בקשת HTTP חיצונית], כותב אל [יעד פלט]. המשימה שלך: (1) סמן נקודות תורפה אפשריות עם המחלקה OWASP, תן מספר שורה + למה מסוכן + איך לנצל + ראיות לכל ממצא, (2) כתוב לפחות תרחיש חיובי שגוי אחד עבור כל ממצא (למשל אם הקלט מחוטא בשכבה אחרת), (3) הצע תיקון אבל עם הסימן "[סקירה + מבחן כתיבה]"; כמו כן, הערך אם התיקון מציג פגיעויות/באגים חדשים. הוספת פגיעות מזויפת.[קוד]
הנחיה חזקה נותנת הקשר, מבקשת שיעור וראיות OWASP, שאלות חיוביות שגויות וסיכונים של תיקון, מאלצת ביקורת אנושית.
תבניות הנחיות הניתנות להעתקה
תבנית סריקת פגיעות בדוק את קוד [שפה/מסגרת] עבור OWASP Top 10. עבור כל ממצא אפשרי: מספר שורה, מחלקת פגיעות, מדוע זה מסוכן, ניצול מדגם, חוזק הראיות (ודאי/סביר/חלש). הקשר: קלט [מקור], פלט [יעד]. הוספת ממצאים מפוברקים; אם אינך בטוח, הקלד "[חייב להיות מאומת]". קוד: [הדבק]
FALSE POSITIVE ELIMINATION PATTERN למציאת הקוד הבאה, רשום את התרחישים שבהם אין פגיעות אמיתית: האם ניתן לנקות את הקלט בשכבה אחרת, האם נתיב זה נגיש, האם ערך זה הוא בדיקה/דוגמה, האם המסגרת מוגנת אוטומטית. כתוב איך לאשר עבור כל אחד. מוצא: [הדבק]
FIX EVALUATION templateמליץ על תיקון לפגיעות הבאה; ואז בקר את התיקון שלך: (1) האם זה באמת סוגר את הפגיעות, (2) האם הוא מציג פגיעות/באג חדש, (3) איזה מבחן עלי לכתוב (רישיות חיוביות ושליליות), (4) השפעה על ביצועים/פונקציונליות. אני אבדוק ואבדוק את התיקון. פגיעות + קוד: [הדבק]
תבנית לימוד תבנית מאובטחת למחלקת פגיעות [למשל. הזרקת SQL] מציגים באופן יחסי דפוס הקלדה בטוח ודפוסים שגויים נפוצים בשפה/מסגרת זו. כלל כללי + תן דוגמה לקוד; אבל אני רוצה שתשאל את ההקשר לפני שאתה מיישם אותו בקוד שלי. שפה/מסגרת: [כתוב]
טעויות נפוצות
- סקירה ללא הקשר. ללא שפה, מסגרת והקשר קלט/פלט, AI מבלבל בין ממצאים אמיתיים ומזויפים; הקפד לתת הקשר.
- לטעות בכל סימן בחולשה אמיתית. AI מייצר תוצאות חיוביות שגויות (נתוני בדיקה, קלט מנוקה בשכבה אחרת); מנפים כל ממצא עם הקשר.
- יישום עיוור של תיקון ה-AI. תיקון מומלץ עשוי להציג פגיעויות/באגים חדשים; לבדוק ולכתוב מבחנים.
- סומך על השלילי השקרי. גם אם ה-AI אומר "ללא פגיעות", בחן את הנתיבים הקריטיים בעצמך; סריקה סטטית לא מזהה כל פגיעות.
- מתן הקוד/סוד לכלי החיצוני. קוד פרטי וסודות אמיתיים (מפתח, סיסמה) הם קניין רוחני ופגיעות; אנונימי או השתמש בכלים ארגוניים מבודדים.
טיפ: כאשר יש את קוד סקירת הבינה המלאכותית, המסנן היעיל ביותר הוא לבקש את "חוזק הראיות" (ודאי/סביר/חלש) עבור כל ממצא. רוב הממצאים המסומנים כ"חלשים" הם חיובים שגויים; אתה מקצה את האנרגיה שלך ל"בטוחים".
זהירות: תיקון האבטחה המוצע של AI לא אמור להיכנס למחסן מבלי להיבדק. "תיקון" שגוי יכול גם להשאיר את הפגיעות פתוחה וגם להוביל לשגיאה תפקודית בייצור; כל תיקון עובר דרך שער הסקירה והבדיקה.
לסיכום
סקירת קוד מאובטח היא הדרך הזולה ביותר לתפוס נקודות תורפה לפני שהן נכנסות לייצור, ומכיוון שקוד הוא שפה, בינה מלאכותית הופכת כאן לעין שנייה רבת עוצמה: מסמן דפוסים מסוכנים, מסביר סיכון, מציע תיקונים. אבל הבינה המלאכותית לא רואה את כל הקשר ההפעלה, מייצרת נקודות חיוביות שגויות ושליליות שגויות, והתיקון שהוא ממליץ עליו עשוי להציג פגיעויות חדשות. אז לסקירה יש שישה שלבים (הקשר, סינון, הצדקה, ביטול חיובי כוזב, אימות תיקון, אישור אנושי) וההחלטה היא של המפתח ומומחה האבטחה. שלושה עקרונות: שום ממצא לא מתפרש ללא הקשר, כל סימן מתבטל עם הקשר, שום תיקון לא נכנס לאחסון ללא בדיקה. והקוד/סוד לעולם לא נמסר לכלי חיצוני ללא אנונימיזציה.
משימת יישום
קח קטע קוד לדוגמה (הסרת חלקים רגישים מהקוד שלך או קוד לדוגמה עם נקודות תורפה). בקש מבינה מלאכותית לבחון אותה באמצעות תבנית "סריקת פגיעות"; החל את התבנית "ביטול חיובי כוזב" עבור כל ממצא וחסל את האמיתיים. קח את התיקון של הממצא החמור ביותר עם תבנית "הערכת תיקון", בדוק אותו בעצמך וכתוב מקרה מבחן חיובי + אחד שלילי. שים לב כמה ממצאים היו חיוביות כוזבות.
רשימת בדיקה
- [ ] נתתי את השפה, המסגרת והקשר הקלט/פלט לפני שבדקתי את הקוד.
- [ ] ביקשתי מספר שורה, מחלקת פגיעות, נתיב ניצול והוכחות לכל ממצא.
- [ ] בדקתי כל ממצא לאיתור תוצאות חיוביות שגויות עם הקשר.
- [ ] לא יישמתי באופן עיוור את התיקון של ה-AI; סקרתי וכתבתי מבחן.
- [ ] למרות הפלט "ללא פגיעות", בדקתי את הנתיבים הקריטיים בעצמי.
- [ ] עשיתי אנונימיות את הקוד/הסודות או השתמשתי בכלים מבודדים של החברה.
- [ ] העברתי את הגילוי והתיקון דרך אישור מפתח + אבטחה.