220 likes | 424 Views
הגנה במערכות מתוכנתות. תרגול 12 – אבטחה ברמת התובלה – SSL/TLS. הערה: שקפים אלה אינם מהווים תחליף לחומר התרגולים המפורסם באתר הקורס, ומשמשים כעזר הוראה בלבד. אבטחה ברמת התובלה. SSL – Secure Socket Layer ( Netscape, 1994 ) נדרש להבחין בין חבילות מוגנות ע"י SSL וחבילות שאינן מוגנות על-ידו
E N D
הגנה במערכות מתוכנתות תרגול 12 – אבטחה ברמת התובלה – SSL/TLS הערה: שקפים אלה אינם מהווים תחליף לחומר התרגולים המפורסם באתר הקורס, ומשמשים כעזר הוראה בלבד.
אבטחה ברמת התובלה • SSL – Secure Socket Layer (Netscape, 1994) • נדרש להבחין בין חבילות מוגנות ע"י SSL וחבילות שאינן מוגנות על-ידו • הקצאת מספר פורט שונה • http מעל SSL:פורט 443 • http רגיל: פורט 80 • גרסה נוכחית: 3.0 • TLS (Transport Layer Security) הגנה במערכות מתוכנתות - תרגול 12
יתרונות וחסרונות • כותב האפליקציה לא צריך להתעסק בכתיבת שירותי אבטחה • פונה לשכבת ה-SSL כדי לקבל אותם • הפרוטוקול נהנה משירותי המהימנות של TCP. • מתאים לשימוש עם Packet Filtering Firewalls. • TCP/IP headers לא מוצפנים על-ידו – PF Firewall יכול לבחון אותם • מצד שני המידע המועבר בהם חשוף, ולא מוגן מפני התקפות הגנה במערכות מתוכנתות - תרגול 12
שירותי אבטחה של SSL 3.0 • אימות זהות השרת • אימות הדדי של השרת והלקוח (אופציונלי) • מהימנות (Reliability) • מסתמך על TCP • שלמות ואימות ההודעות • ע"י חישוב MAC • סודיות ההודעות • באמצעות הצפנות • דחיסה הגנה במערכות מתוכנתות - תרגול 12
מבנה פרוטוקול SSL אימות השרת (אופציונלית גם הלקוח), בניית ה-state • מורכב מארבעה תתי פורטוקולים, אשר נמצאים בשתי שכבות: הודעה לצד השני כי עליו לשנות state SSL פרוטוקול להעברת הודעות שגיאה הגנה על האפליקציה ועל תתי הפרוטוקולים האחרים הגנה במערכות מתוכנתות - תרגול 12
SSL State • המידע המשמש לביצוע ההצפנה והאימות ע"י ה-SSL Record Protocol. • נבנה ע"י פרוטוקול ה-Handshake, שבו נתמקד. • מכיל: • אלגוריתם הצפנה • אלגוריתם עבור MAC • אלגוריתם דחיסה • שני IVs • שני מספרים סידוריים • ארבעה מפתחות סימטריים • ClientWrite • ServerWrite • ClientMAC • ServerMac אחד עבור חבילות הנשלחות ע"י הלקוח, ואחד עבור אלה הנשלחות ע"י השרת הגנה במערכות מתוכנתות - תרגול 12
SSL Full Handshake • חמש הודעות שבסופן נוצר ה-state. Client Server ClientHello(version, cipher_suites, client_random, sid) Msg1: ServerHello(version, cipher_suite, server_random, sid), Cert, [CertRequest] Msg2: ClientKeyExchange, [Certificate],[CertVerify] Msg3: ChangeCipherSpec Msg4: FinishedClient רק אם יש צורך בבניית State חדש ChangeCipherSpec Msg5: FinishedServer הגנה במערכות מתוכנתות - תרגול 12
הודעה ראשונה בשלב זה נתעלם מ-sid ונניח שערכו שווה ל-0 Client Server • יוזם הקשר ב-SSL הוא הלקוח. • version – גרסת SSL שהלקוח מריץ (למשל 3.0) • cipher_suites – רשימת cipher_suite בהם הלקוח תומך ומוכן להשתמש • כל אחד כולל אלגוריתם הצפנה ואלגוריתם MAC • client_random – מספר אקראי בן 256 סיביות • יעשה בו שימוש לגזירת המפתחות. ClientHello(version, cipher_suites, client_random, sid) Msg1: הגנה במערכות מתוכנתות - תרגול 12
הודעה שניה בשלב זה נתעלם מ-sid ונניח שערכו שווה ל-0 Client Server • version – גרסת SSL בה ישתמשו • בד"כ "המכנה המשותף" בין השרת והלקוח • cipher_suite – נבחר מבין אלה שהלקוח הציע • השרת יבחר את החזק ביותר שהוא תומך בו • server_random – מספר אקראי בן 256 סיביות • יעשה בו שימוש לגזירת המפתחות. • Cert – סרטיפיקט של השרת (כולל את המפתח הפומבי שלו) • CertRequest – אופציונאלי במידה והשרת מעוניין באימות הלקוח. ServerHello(version, cipher_suite, server_random, sid), Cert, [CertRequest] Msg2: הגנה במערכות מתוכנתות - תרגול 12
הודעה שלישית Client Server • הלקוח בודק את הסרטיפיקט שקיבל. • אם תקין, מייצר pre_master_secret • מספר אקראי באורך 384 סיביות (48 בתים) • מחשב ושולח לשרת את: ClientKeyExchange = EPubServer(pre_master_secret) ClientKeyExchange, [Certificate],[CertVerify] Msg3: הגנה במערכות מתוכנתות - תרגול 12
הודעה שלישית - המשך Client Server • אם השרת ביקש לאמת את הלקוח: • הלקוח שולח בחזרה את הסרטיפיקט שלו ואת CertVerify, כאשר: CertVerify = SigClient(pre_master_secret, Msg1,Msg2) • הערה: משתמשים באלגוריתם חתימה בטוח: תוקף לא יכול לגלות את pre_master_secret מתוך CertVerify. • לא ניתן לבצע התקפת שידור חוזר על CertVerify, כיוון ש-Msg1 ו-Msg2 כוללות את client_random ואת server_random. ClientKeyExchange, [Certificate],[CertVerify] Msg3: הגנה במערכות מתוכנתות - תרגול 12
עכשיו אפשר לחשב מפתחות • client_random, server_random עברו באופן גלוי. • pre_master_secret עבר באופן סודי. master_secret =h(pre_master_secret, client_random, server_random) • מחרוזת בגודל 384 סיביות. (מוגנת מפני שידור חוזר) • יתר המפתחות וה-IVs נגזרים מתוך ה-master_secret. • יוצרים מחרוזת key_block שאורכה גדול מסכום אורכי ארבעת המפתחות ושני ה-IVs: key_block = h(master_secret, server_random, client_random) • הסיביות הראשונות ישמשו ל-ClientMAC, אלה שאחריהן ל-ServerMAC, וכו'. הגנה במערכות מתוכנתות - תרגול 12
לפני המשך הפרוטוקול... Client Server • הודעה זו אינה חלק מפרוטוקול ה-Handshake • הלקוח מודיע לשרת שכל ההודעות בהמשך יאובטחו ע"י המפתחות ClientWrite ו-ClientMAC עליהם הוסכם ב-State. ChangeCipherSpec הגנה במערכות מתוכנתות - תרגול 12
הודעה רביעית Client Server • הודעה מוגנת ע"י ה-State • כוללת אימות של כל ההודעות שנשלחו ב-Handshake עד כה • לא כולל ההודעה הנוכחית והודעת ה-ChangeCipherSpec. FinishedClient=EkClientWrite(MACkClientMAC(Msg1,Msg2,Msg3)) • השרת יכול לוודא שהלקוח גזר את המפתחות הנכונים, ולכן הוא הלקוח האמיתי. Msg4: FinishedClient הגנה במערכות מתוכנתות - תרגול 12
לפני המשך הפרוטוקול... Client Server • הודעה זו אינה חלק מפרוטוקול ה-Handshake • השרת מודיע ללקוח שכל ההודעות בהמשך יאובטחו ע"י המפתחות ServerWrite ו-ServerMAC עליהם הוסכם ב-State. ChangeCipherSpec הגנה במערכות מתוכנתות - תרגול 12
הודעה חמישית Client Server • דומה להודעה שנשלחת ע"י הלקוח: FinishedServer=EkServerWrite(MACkServerMAC(Msg1, Msg2,Msg3,Msg4)) • הלקוח יכול לוודא שהשרת גזר את המפתחות הנכונים, ולכן הוא השרת האמיתי. Msg5: FinishedServer הגנה במערכות מתוכנתות - תרגול 12
הפעלה מקוצרת של הפרוטוקול • ניתן לנצל master_secret שחושב בהרצה קודמת כדי לקצר את הפרוטוקול. (דורש לזכור אותו...) • זוכרים את sid? • מזהה את ה-session בין הלקוח לשרת • פרמטר באורך של עד 32 בתים הגנה במערכות מתוכנתות - תרגול 12
SSL Abbreviated Handshake • נחסכה ההודעה השלישית מהפרוטוקול המלא. • מוותרים על Cert ועל CertRequest בהודעה השניה. • סדר שליחת הודעות ה-Finished התחלף. Client Server ClientHello(version, cipher_suites, client_random, sid10) Msg1: ServerHello(version, cipher_suite, server_random, sid2=sid1) Msg2: ChangeCipherSpec Msg3: FinishedServer ChangeCipherSpec Msg4: FinishedClient הגנה במערכות מתוכנתות - תרגול 12