לדלג לתוכן

פתרון אימות אבטחה ופריסה

מטריצה שימושית כוללת פתיחה מורשית, פתיחה לא מורשית, IOCTL לא מוכר, input קצר, input ארוך, גרסה שגויה, ערך שיגרום ל־overflow, output קצר, בקשה תקינה, ביטול לפני הוצאה מהתור, ביטול אחרי הוצאה, סגירת handle והסרה בזמן המתנה.

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

חבילת התקנה עקבית

ה־hardware ID ב־INF צריך להיות זה שבו משתמשים ליצירת התקן המעבדה. שם השירות צריך להפנות לקובץ sys שהחבילה מעתיקה, וגרסת KMDF צריכה להתאים לגרסה שנבחרה בבנייה ולמערכת היעד. ה־catalog צריך להתאים לבתים שנפרסים בפועל.

חתימת בדיקה אינה אישור להפצה. יש לשמור את תצורת הבדיקה בתוך ה־VM ולחזור ל־snapshot נקי או להסיר את ההגדרות בסיום. מסמך שמדווח "החתימה תקינה" בלי להבדיל בין test signing לבין מסלול הפצה אינו מספק.

פלט שמאותחל במלואו

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

בדיקת המשתמש יכולה למלא את ה־buffer בדפוס ידוע לפני הקריאה ולבדוק את מספר הבתים שהוחזר. אבל הבדיקה אינה תחליף לקריאת הקוד: אם driver מחזיר kernel padding לא מאותחל, התוכן עשוי להשתנות בין הרצות. הפורמט וה־Information צריכים למנוע את ההדלפה לפי הבנייה.

ניתוח כשל

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

כאשר אין WDK או VM זמינים, התוצר התקין הוא קוד, ניתוח ותוכנית בדיקה מסומנים כלא מאומתים בריצה. אסור להחליף את הראיה הזו בהצלחת קומפילציה של קוד משתמש או בסימולציה של state machine.