![]() |
ערך ללא מקורות
| |
ערך ללא מקורות | |
זמן בדיקה עד זמן שימוש (באנגלית: Time-of-check to time-of-use; בראשי תיבות: TOCTOU) היא מחלקה של באגים בתוכנה, הנגרמים על ידי מרוץ תהליכים וקשורים בבדיקת מצב חלקי המערכת (כמו פרטי אבטחה) ובשימוש בבדיקות אלה.
זמן בדיקת לזמן שימוש הם נפוצים במערכת ההפעלה יוניקס, בין פעולות במערכת הקבצים, אך יכולים לקרות גם בהקשרים אחרים, כולל שקעים מקומיים ובשימוש לא נכון בהעברות מסד הנתונים.
הקוד בשפת הC הבא מכיל באג זמן בדיקה לזמן שימוש, כאשר משתמשים בsetuid שביוניקס.
if (access("file", W_OK) != 0) {
exit(1);
}
fd = open("file", O_WRONLY);
write(fd, buffer, sizeof(buffer));
מרוץ התהליכים הזה הוא פגיעה להתקפה הבא:
//
// After the access check
symlink("/etc/passwd", "file");
// Before the open, "file" points to the password database
//
//
בדוגמה זאת, התוקף יכול לעשות אקספלויט למרוץ התהליכים שמתרחש פה, על מנת להטעות את הsetuid של הקורבן כדי שיכתוב מחדש את כל מאגר הסיסמאות של המערכת.
TOCTOU יכולים לשמש להסלמת הרשאות, כדי לקבל גישה מנהלתית למכונה.
אף על פי שרצף האירועים הזה דורש תזמון מדויק, אך ייתכן שתוקף יבצע זאת ללא קושי רב מדי. המשמעות היא שיישומים אינם יכולים להניח שהמצב המנוהל על ידי מערכת ההפעלה.
ניצול מרוץ תהליכים מסוג TOCTOU דורש תזמון מדויק על מנת להבטיח שפעולות התוקף משתלבות כהלכה עם הקורבן. בדוגמה שלעיל, על התוקף לבצע את קריאת מערכת במדויק בין הגישה לפתוחה. עבור ההתקפה הכללית ביותר, יש לתזמן תקיפה לביצוע לאחר כל פעולה על ידי הקורבן, המכונה גם "דריכה אחת".
TOCTOU הם קשים להסרה ולמניעה, בהקשר של מרוץ תהליכים של זמן בדיקה לזמן שימוש, האתגר המהותי הוא להבטיח שלא ניתן לשנות את מערכת הקבצים. בשנת 2004 פורסמה תוצאה שהראתה כי אין טכניקה ניידת ודטרמיניסטית להימנעות מTOCTOU.