יחידה 11 / 12

אימות קוד, פגיעויות וסיכונים של פלט AI

רווחים:

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

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

כאן אנו מתייחסים ל"אימות" בשלושה רבדים: תקינות (האם הקוד אכן עושה את העבודה?), אבטחה (האם הוא עומד בקלט זדוני?), ומקור/רישיון (האם יש לי את הזכות להשתמש בקוד זה?). לכל שכבה יש אמצעי שליטה משלה, ואי אפשר לעקוף אף אחד מהם עם "זה מה שה-AI אמר".

שלוש שכבות של סיכון

1. סכנת דיוק (הזיה). המודל עשוי לקרוא לפונקציה לא קיימת, להשתמש לרעה ב-API, לעקוף בשקט מקרה קצה. הקוד נראה "סביר" אבל שגוי. תרופה נגד: קומפילציה, בדיקה, ניתוח סטטי ובדיקה חזותית.

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

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

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

שלב אחר שלב: שער אימות שכבות

  1. קרא בהבנה. באמת להבין את הקוד לפני קבלתו; אל תמזג קוד שאתה לא מבין. אם אינך יכול להסביר "למה זה עובד", זה עדיין לא אושר.
  2. ודא שהוא קיים. ודא שכל פונקציה, API וחבילה בשימוש אכן קיימים ונעשה בהם שימוש נכון (שער הזיות).
  3. הפעל כלים אוטומטיים. מהדר, linter (סורק סגנון/שגיאות), בודק סוג, בדיקות יחידות, ואם אפשר SAST (Static Application Security Testing - כלי שסורק קוד מקור לאיתור נקודות תורפה).
  4. תסתכל על זה מנקודת מבט ביטחונית. האם הקלט מאומת? האם השאילתה מותאמת לפרמטרים? האם הסוד קבור? האם יש בקרת הרשאות?
  5. בדוק מקור ורישיון. האם תלויות חדשות מורשות? האם הפלט נראה דומה מדי לבסיס קוד ידוע?
  6. אם זה קריטי לאבטחה, בקש אישור מומחה. סקירה עצמאית על ידי מהנדס המוכשר בתחומים כמו אימות, תשלום, קריפטוגרפיה, בקרת גישה היא חובה.

שלושה מיני מארזים

מקרה 1 - הזרקת SQL נתפסה בשער הבדיקה. הקוד שנוצר בינה מלאכותית שמשרשר קלט משתמש ישירות לשאילתת SQL עבור נקודת קצה חיפוש ("... שם שם = '" + q + "'"). הקוד עבד ועבר את המבחן. בדיקה ממוקדת אבטחה וסריקת SAST תפסו זאת; זה הומר לשאילתה עם פרמטרים (הצהרה מוכנה). אם זה לא היה נתפס, זו הייתה פגיעות קלאסית של דליפת נתונים.

מקרה 2 - חבילת הזיה. AI הציע חבילת npm לא קיימת (ניתוח מהיר-בטוח) עבור משימה. כאשר המפתח ניסה להתקין אותה, החבילה לא נמצאה. גרוע מכך: במקרים מסוימים, תוקפים יכולים למלא שמות חבילות מסוג "רוחות" כאלה בחבילות אמיתיות וזדוניות (בלבול תלות). שיעור: אמת כל חבילה מומלצת מול הרישום הרשמי והיסטוריית הורדות/תחזוקה.

מקרה 3 - אי התאמה של רישיון. לספרייה נלווית נחמדה שהוצעה על ידי AI הייתה בעלת רישיון copyleft חזק שלא תואם את רישיון המוצר של המוסד. סריקת רישיון תלות דיווחה על כך; הצוות החליף את הרישיון בחלופה מתאימה. ללא אימות, ייווצר נטל משפטי בהפצת מוצרים.

ארבע תבניות הניתנות להעתקה

בדיקה עצמית לפני קבלה:

לפני קבלת הקוד הבא שנוצר בינה מלאכותית, בדוק: 1) האם כל פונקציה/API/חבילה שבה הוא משתמש באמת קיימת? סמן את החשודים.2) האם יש קלט לא מאומת, שרשור SQL/פקודה, סוד קבור, קריפטו חלש? 3) מהם הבאגים/מקרי הקצה שלא טופלו? סמן כל ממצא כ"ודאי / סביר" והצע תיקונים.{{קוד}}

סקירה ממוקדת אבטחה:

בחן את הקוד הזה בעין אבטחה. חפש פגיעויות נפוצות בסגנון OWASP: הזרקה, אימות/הרשאה שבור, חשיפת נתונים רגישים, דה-סריאליזציה לא מאובטחת, ניתוב מחדש לא מאומת. לכל ממצא: סיכון, תרחיש ניצול, תיקון. מדובר במיון ראשוני; הפנה ממצאים קריטיים לבדיקת אבטחה אנושית.{{code}}

בדיקת תלות ורישיון:

רשום את התלות שנוספו/מוצעים על ידי קוד זה. עבור כל אחד: האם החבילה אכן קיימת, האם היא מתוחזקת, מה יהיה הרישיון הטיפוסי שלה (חובה לאמת), והאם היא אכן נחוצה לפרויקט או שניתן לעשות זאת עם כלי קיים?{{קוד או רשימת תלות}}

הטלת טפסות בטוחה (בייצור):

כתוב קוד עבור {{משימה}}. כללי אבטחה חובה: - אימות / חיטוי כל הקלט החיצוני. - השתמש רק בשאילתה עם פרמטרים בגישה למסד נתונים. - אל תטמיע סודות בקוד; הנחה משתנה סביבה/מנהל סודי - אל תבלע שגיאות; שקול את זה בצורה משמעותית. הסבירו כיצד הקוד תואם את הכללים הללו ב-3 פריטים.

הנחיה חלשה / הנחיה חזקה

חלש: "כתוב שאילתה שמחפשת לפי שם משתמש." (ייתכן שיתרחש קוד פגיע להזרקה.)
חזק: "כתוב פונקציה שמחפשת לפי שם משתמש. לעולם אל תצרף קלט משתמש לשאילתה כמחרוזת; השתמש בשאילתה עם פרמטר (משפט מוכן). אמת את הקלט עבור אורך ותו. הסבר ב-2 משפטים מדוע הקוד נסגר להזרקה."

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

שכבת אימות

כלי/שיטה

האם מספיק "AI אמר"?

דיוק

קומפילציה, בדיקה, בדיקה ויזואלית

לא

מציאות API/חבילה

בקרת מסמכים/רשומות רשמית

לא

אבטחה

SAST, סקירת אבטחה

לא

רישיון/מקור

בדיקת תלות ורישיון

לא

לוגיקה קריטית לאבטחה

אישור מהנדס מומחה

ממש לא

לא ניתן להעביר אחריות

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

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

טעויות נפוצות

  • מבלבל בין "עובד" ל"בטוח". קוד שעובר בדיקות עלול להיות פגיע להתקפה.
  • שימוש בחבילה/API מבלי לאמת זאת. חבילות הזויות משחיתות וגם מהוות סיכון אבטחה.
  • עקיפת כלים אוטומטיים. לינטר, בודק הקלדה ו-SAST תופסים בזול את מה שבני אדם מפספסים.
  • התעלמות מהרישיון. תלות לא נכונה ברישיון יוצרת נטל משפטי על ההפצה.
  • הטלת האחריות על הרכב. הצוות אחראי על הקוד בהפקה; "AI עשה את זה" אינו תירוץ.

לסיכום

קבלת פלט AI דורשת שלוש שכבות של אימות: נכונות (קומפילציה, בדיקה, בדיקה חזותית), אבטחה (SAST וסקירה ממוקדת אבטחה) ומקור/רישיון (בדיקת תלות). אשר שכל חבילה וממשק API בשימוש אכן קיימים, אכוף דפוסים מאובטחים מההתחלה, ושלח קוד אבטחה קריטי לאישור מהנדס מוסמך. "עובד" אין פירושו בטוח, ו"איי מיוצר" אינו מסיר אחריות. שער האימות הוא המחיר של המקצועיות, לא המהירות.

משימת יישום

תן בכוונה ל-AI משימה רגישה לאבטחה (למשל "פונקציה שמחפשת במסד הנתונים עם קלט משתמש"), הפעם מבלי לכפות דפוס בטוח. העבר קוד נכנס דרך תבניות "ביקורת עצמית לפני קבלה" ו"סקירה ממוקדת אבטחה": האם יש הזרקה, סוד קבור, חבילה הזויה או קלט לא מאומת? לאחר מכן שאל שוב את אותה משימה עם תבנית "הטלת דפוס מאובטח" והשווה את שני הפלטים. אם אפשר, הפעל כלי linter/SAST והשווה את הממצאים לוויסות העצמי של ה-AI.

רשימת בדיקה

  • [ ] אני מאמת פלט AI בשלוש שכבות: דיוק, אבטחה ורישיון.
  • [ ] אני מאשר שכל פונקציה, API וחבילה בשימוש אכן קיימים.
  • [ ] אני מפעיל כלי קומפילציה, בדיקה, linter ואם אפשר גם SAST.
  • [ ] אני כופה דפוסים מאובטחים (שאילתה עם פרמטרים, אימות קלט, ניהול סודות) מההתחלה.
  • [ ] אני בודק את הרישוי והדרישה של תלות חדשה.
  • [ ] אני מגיש קוד קריטי לאבטחה לאישור מהנדס מוסמך ואני מבין שאני אחראי.