קרברוס (Kerberos) הוא פרוטוקול אימות שמאפשר ליישומי שרת/לקוח לזהות זה את זה בצורה מאובטחת ולנהל תקשורת מוצפנת ברשת פתוחה. הפרוטוקול משתמש בעיקר בהצפנה סימטרית (אותו מפתח גם להצפנה וגם לפענוח) ובצד שלישי אמין שעוזר לחלק מפתחות הצפנה. קרברוס נפוץ מאוד בארגונים ומשמש לאימות, שלמות מידע וסודיות.
קרברוס נוצר במסגרת פרויקט אתנה של MIT ב-1979. השם לקוח מדמות המיתולוגיה היוונית. פותחו גרסאות פנימיות ראשוניות; גרסה 4 פורסמה ב-1980. גרסה 5, שהינה התקן הנפוץ כיום, פורסמה ב-1993 על ידי צוות MIT בראשות קליפורד ניומן וג'ון קול. גרסה 5 עובדה ושופרה כדי לתקן בעיות בטיחות. MIT פרסמה מימושים וכלי תכנות (API) לתמיכה בפרוטוקול.
בעבר היו מגבלות ייצוא בשל שימוש באלגוריתמים כמו DES. לכן פותחו מימושים חופשיים נוספים מחוץ לארה"ב, כמו Heimdal ו-Shishi.
בהתחלה השתמשו בקרברוס ב-DES ובר-CBC (מצב הפעלה), כצופן זרם ב-RC4 ובפונקציות גיבוב כמו MD5. כיום מקובל שימוש ב-AES (הצפנה מתקדמת) עם שילובי אימות HMAC-SHA1.
קרברוס מתאים בעיקר לסביבות ארגוניות ולא לאינטרנט הפתוח. מיקרוסופט אימצה את קרברוס גרסה 5 ב-Windows וב-Active Directory. מימושים תומכים ב-Unix, Linux, macOS ו-FreeBSD. חברות ותשתיות ארגוניות רבות משתמשות בקרברוס לזיהוי והרשאות ברשתות פנימיות.
מטרת קרברוס היא לאפשר אימות מהימן ברשת שבה אפשר לצותת למסריים. הפרוטוקול מניח שהמחשבים המשתתפים אמינים ומעודכנים. אם תקיפה מצליחה לפרוץ לאחד המחשבים המשתתפים, אבטחת המערכת נפגעת. לכן יש לשמור על שרתי אימות ולקוחות מעודכנים ובטוחים.
KDC הוא שרת מרכזי שמייצר ומנפיק מפתחות לשיחה בין לקוחות לשרתים. הוא מורכב ממסד נתונים, שרת אימות (AS) ושרת הנפקת טיקטים (TGS). ה-KDC מייצר "תעודות אימות" שנקראות טיקטים (tickets) שבעזרתן הלקוחות מוכיחים את זהותם לשירותים.
מפתח שיחה הוא מפתח זמני שמשרת ללקוח ולספק השירות מאפשר להצפין שיחה מסוימת. ה-KDC מנפיק את מפתח השיחה וחבילות מוצפנות: אחת לשרת השירות ואחת ללקוח. החבילה ללקוח מוצפנת במפתח הנגזר מסיסמת המשתמש, ולכן רק הלקוח יכול לפענחה ולחלץ את מפתח השיחה.
כאשר הלקוח שולח טיקט לספק השירות, הוא מצרף גם "מזהה" (authenticator), פרטי הלקוח וזמן, המוצפנים במפתח השיחה. ספק השירות מפענח את הטיקט, מוציא את מפתח השיחה, ואז מפענח את המזהה כדי לבדוק שהבקשה טרייה ושייכת ללקוח. זמן אמין חשוב כאן; אם הזמן שונה ביותר מהמותר, הבקשה נדחית.
בגרסה 5 נוספה גם טכניקה שנקראת "מטמון שידור חוזר" (replay cache). שרתים שומרים רשימה של תעודות שקיבלו כדי לדחות תעודות כפולות ולמנוע התקפות של שידור חוזר.
כדי לאפשר "אימות יחיד" (SSO, כניסה אחת שמאפשרת גישה למשאבים נוספים), מיישומים שומרים באופן זמני מפתחות שיחה וטיקטים במטמון הרשאות (Credential Cache). מיקום המטמון משתנה בין יישומים; חלק מהמימושים מאחסנים אותו בזיכרון מוגן כדי להקטין סיכון לגניבת המפתחות.
1) המשתמש מקליד שם וסיסמה. המחשב מייצר מפתח סודי מהסיסמה.
2) הלקוח מבקש המלצה (credential) משרת האימות (AS) עבור שירות מסוים, בלי לשלוח את הסיסמה.
3) ה-AS מחזיר שני מסרים מוצפנים: טיקט ל-TGS ומפתח שיחה מוצפן במפתח הנגזר מסיסמת המשתמש.
4) הלקוח מפענח את המפתח מהמסר השני ומתקשר ל-TGS.
5) הלקוח שולח ל-TGS את הטיקט ומזהה מוצפן במפתח השיחה כדי לבקש טיקט לשירות הרצוי.
6) ה-TGS בודק את הבקשה ומנפיק טיקט לספק השירות יחד עם מפתח שיחה חדש.
7) הלקוח שולח לספק השירות את הטיקט ואת מזהה חדש. לאחר אימות, הספק מאפשר גישה לשירות.
8) אופציונלית, הספק מחזיר חותם זמן כדי לאשר אימות הדדי.
קרברוס מחייב שמפתחות הצפנה יהיו זמינים בפורמט קריא במערכות המשתתפות בזמן תקשורת. זה יוצר נקודת תורפה: אם תוקף חודר למערכת ומחלץ את המפתחות, הוא יכול להתחזות. מסד נתונים של KDC חייב להישמר מוצפן ומוגן. תכנון נכון כולל גם אמצעים למנוע התקפות שימוש חוזר ולשמור על סנכרון זמן בין מחשבים.
קרברוס משתמש בחותם זמן כדי לוודא טריות ההודעות ולמנוע התקפות שבהן מישהו משדר שוב מסר ישן. סטייה מוגבלת בין שעון הלקוח לשרת מותרת, בדרך כלל דקות ספורות.
הצורך בסנכרון זמן הוא חיסרון. אם שעון השרת מוטעה, ניתן להשתמש בתעודות ישנות. לכן יש חשיבות לשמירה על שעון השרת והסנכרון שלו בצורה מאובטחת. קיימת גם גרסה של הפרוטוקול שפותרת זאת ללא חותמות זמן, אך היא מוסיפה שלב נוסף.
התלות ב-KDC מקוון מחייבת זמינות שלו. כש-KDC נופל, מערכת האימות כולה עלולה להיפגע. לכן בדרך כלל מפעילים מספר שרתי KDC לשיפור זמינות.
קרברוס מאפשר האצלת סמכויות: שירות יכול לפעול בשם משתמש מול שירותים נוספים. זה שימושי במערכות מורכבות ומשופר לעומת NTLM, שמספק רק אימות חד-צדדי.
הפרוטוקול חשוף לסיסמאות חלשות ולבעיות אם משתתפים אינם מאובטחים. כמו כן הוא מיועד למדינות וארגונים עם תשתית פנימית ולא לשימוש ישיר ברחבי האינטרנט.
קרברוס הוא דרך בטוחה לזהות משתמשים במחשבים ברשת. הוא עוזר לשלוח הודעות בסתר כך שאחרים לא יקראו אותן.
קרברוס הומצא במכון MIT. הגרסה החשובה נקראת גרסה 5 והיא יצאה בשנות ה-90.
להצפנה משתמשים היום ב-AES. AES היא דרך לחבוא מידע כך שרק מי שיש לו מפתח יכול לקרוא אותו.
קרברוס משמש בארגונים גדולים ובמערכות כמו Windows ו-Active Directory.
המטרה היא לוודא מי אתה ברשת פתוחה שאנשים יכולים לצותת לה.
יש שרת מרכזי שנקרא KDC. הוא נותן "כרטיס" שנקרא טיקט. הטיקט מראה למחשבים אחרים שאתה אמיתי.
מפתח שיחה הוא מפתח זמני. הוא משמש להצפין ולפענח את השיחה בין שני מחשבים.
כדי להוכיח שזה אכן אתה, הלקוח שולח טיקט ומזהה עם זמן. השירות בודק שהזמן קרוב לשעון שלו.
לפעמים המערכת שומרת טיקט לזמן מה כדי שלא תצטרך להקליד סיסמה שוב. זה נקרא SSO. את הטיקט שומרים במקום בטוח.
1) המשתמש מזין שם וסיסמה.
2) המחשב מבקש משרת האימות טיקט.
3) השרת שולח טיקט ומפתח שיחה מוצפן.
4) הלקוח משתמש במפתח כדי לבקש טיקט לשירות הרצוי.
5) הלקוח שולח את הטיקט לספק השירות.
6) אם הכל תקין, הספק מאפשר גישה.
אם מישהו גונב את המפתחות מהמחשב, הוא יכול להעמיד פנים שהוא אתה. לכן חשוב לשמור על המחשבים והשרתים בטוחים.
מישהו עלול ליירט הודעה ישנה ולשלוח אותה שוב. לכן משתמשים בחותם זמן ובמנגנון ששומר תעודות כדי לדחות הודעות מכפילות.
ה-KDC חייב להיות זמין. אם הוא לא עובד, משתמשים לא יוכלו להיכנס.
יתרון: קרברוס מאפשר עבודה נוחה ובטוחה בארגון.
חיסרון: הוא רגיש לסיסמאות חלשות ולמחשבים לא מאובטחים.
תגובות גולשים