ברשתות מודרניות, אבטחת העברת הנתונים היא חשיבות עליונה, ו-Secure Sockets Layer (SSL) ו-Transport Layer Security (TLS) הם פרוטוקולים בשימוש נרחב כדי להבטיח פרטיות ואבטחת נתונים. עם זאת, ישנם מקרים שבהם ייתכן שיהיה עליך לנתח תעבורה מוצפנת לצורך פתרון בעיות, ניתוח משפטי או ניטור רשת. מאמר טכני זה ידריך אותך בפענוח תעבורת SSL/TLS באמצעות Wireshark ו-tcpdump, שני כלי ניתוח רשת רבי עוצמה. נסקור מה הם Wireshark ו-tcpdump, נסביר את הצפנת SSL ו-TLS, ונדגים כיצד לפענח תעבורת SSL באמצעות מפתח סודי מראש או מפתח פרטי RSA.
מה הם Wireshark ו-tcpdump? #
Wireshark #
Wireshark הוא מנתח פרוטוקולי רשת בקוד פתוח המאפשר למשתמשים ללכוד ולעיין באופן אינטראקטיבי בתעבורה הפועלת ברשת מחשבים. זה מאפשר לך לבדוק נתונים ברמה פרטנית, ולספק נראות לתוך הפרוטוקולים וחבילות הנתונים המועברים. Wireshark נמצא בשימוש נרחב לפתרון בעיות רשת, פיתוח פרוטוקולים וניתוח אבטחה.
tcpdump #
tcpdump הוא כלי מנתח מנות בשורת הפקודה שלוכד תעבורת רשת ומציג אותה בזמן אמת. זה יעיל מאוד ללכידת נתונים מרשתות חיות, ומאפשר לך לשמור מנות לקובץ (המכונה קובץ לכידה) לניתוח מאוחר יותר. בעוד ש-tcpdump חסר את הממשק הגרפי של Wireshark, הוא רב עוצמה לניתוח מהיר, סינון מנות ואיסוף נתונים במערכות מרוחקות.
מהי הצפנת SSL? #
SSL (Secure Sockets Layer) הוא פרוטוקול שפותח על ידי Netscape להעברת מסמכים פרטיים דרך האינטרנט. SSL משתמש באלגוריתמי הצפנה כדי להבטיח שהנתונים הנשלחים בין הלקוח (למשל, דפדפן אינטרנט) לבין השרת אינם קריאים לכל מי שיירט את השידור.
TLS (Transport Layer Security) הוא היורש של SSL והוא מאובטח יותר. בעוד TLS שונה מבחינה טכנית מ-SSL, המונח SSL משמש לעתים קרובות כדי להתייחס לשני הפרוטוקולים.
SSL/TLS פועל על ידי הקמת ערוץ תקשורת מאובטח בין שתי מערכות. מושגי המפתח בהצפנת SSL/TLS כוללים:
- הצפנה סימטרית: מפתח יחיד משמש להצפנה ולפענוח הנתונים.
- הצפנה אסימטרית: שני מפתחות (ציבורי ופרטי) משמשים; ניתן לפענח נתונים המוצפנים באמצעות המפתח הציבורי רק באמצעות המפתח הפרטי המתאים.
- אישורים: SSL/TLS משתמש בתעודות כדי לאמת את זהות השרת ולעיתים הלקוח.
- לחיצת יד: התהליך שבו הלקוח והשרת יוצרים חיבור מאובטח, מחליפים מפתחות ומסכמים על שיטות הצפנה.
פענוח SSL עם מפתח סודי מראש #
המפתח הסודי שלפני המאסטר הוא מרכיב חיוני בתהליך לחיצת היד של SSL/TLS. מפתח זה משמש ליצירת מפתחות הפעלה, אשר משמשים לאחר מכן להצפנת הנתונים בפועל המועברים ברשת. על ידי השגת המפתח הסודי מראש, אתה יכול לפענח את נתוני הפגישה.
שלבים בסיסיים לפענוח SSL עם מפתח סודי מראש #
כדי לפענח תעבורת SSL באמצעות המפתח הסודי מראש, בצע את השלבים הבאים:
1. הגדר את משתנה סביבת קובץ היומן
2. לכיד עם tcpdump ואמת את קובץ היומן
3. הגדר את Wireshark לפענוח SSL
הגדר את משתנה סביבת קובץ היומן #
הגדרת SSLKEYLOGFILE על Windows #
במערכות Windows, תצטרך להגדיר משתנה סביבה כדי לאחסן את המפתחות הסודיים שלפני המאסטר בקובץ יומן. משתנה זה, בשם SSLKEYLOGFILE, מגדיר את הנתיב שבו המפתחות נשמרים.
1. התחל בלחיצה ימנית על המחשב שלי ובחירה פרויקטים מהתפריט כדי לפתוח את תפריט המערכת.
2. לחץ על הגדרות מערכת מתקדמות ברשימה השמאלית כדי לפתוח את חלון מאפייני מערכת.
3. ב מתקדם הכרטיסייה, לחץ על הלחצן "משתני סביבה".
4. תַחַת משתני משתמש, לחץ על חָדָשׁ… לַחְצָן. אתה יכול גם ליצור משתנה זה תחת משתני מערכת אם ברצונך לרשום מפתחות SSL עבור כל המשתמשים במערכת. עם זאת, בדרך כלל עדיף לשמור אותו מוגבל לפרופיל שלך.
5. ב שם משתנה שדה, הזן SSLKEYLOGFILE.
ב ערך משתנה בשדה, הזן את הנתיב שבו ברצונך לשמור את קובץ היומן. לחלופין, אתה יכול ללחוץ עיין בקובץ... כדי לבחור את הנתיב באמצעות בורר הקבצים.
אם אתה מגדיר זאת כמשתנה כלל מערכת, ודא שהקובץ נגיש לכל המשתמשים, או השתמש בתווים כלליים. לדוגמה, אתה יכול להשתמש %USERPROFILE%\AppData\ssl-keys.log or C:\ssl-keys.log .
6. לאחר שתסיים, לחץ על OK כדי להחיל את השינויים ולהמשיך עם השלבים הבאים.
הגדרת SSLKEYLOGFILE בלינוקס או מק #
ב-Linux וב-Mac, תצטרך להגדיר את SSLKEYLOGFILE שימוש במשתנה סביבה יצוא. באותו מסוף, אתה יכול לבצע tcpdump והוא יפיק את קובץ יומן המפתח המצוין כאשר יתגלה חיבור SSL.
root@noid-01:~# ייצוא SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump ...
כדי לשמור על תצורת משתנה סביבה קבועה, ערוך את פרופיל המשתמש עם עורך טקסט כמו ננו. עבור לינוקס, משתנה זה מאוחסן ב ~ / .bashrc, וב-Mac, הוא נוצר ב ~ /. bas_profile. לאחר מכן, הוסף את יצוא פקודה עבור SSLKEYLOGFILE משתנה בסוף הקובץ ושמור את השינויים.
לכיד עם tcpdump ואמת את קובץ היומן #
כדי לבדוק את יצירת קובץ היומן, נסה לפתוח דפדפן, לבצע tcpdump או להפעיל פקודת curl לשרת HTTPS כדי לאשר שהקובץ נוצר כראוי.
כדוגמה, באותו טרמינל בו נוצר משתנה הסביבה, ה- tcpdump ללכידת התעבורה ו-curl לשירות HTTPS יופעלו לצורך פענוח:
root@noid-01:~# ייצוא SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump -i any port 443 -w ~/capture.pcap & root@noid-01:~# curl https://(לאחר מכן, סגור את הפקודה tcpdump)
ודא שקובץ היומן ~/.ssl-key.log ולכידת התעבורה ב- ~/capture.pcap נוצרו. לבסוף, עיין בשלב האחרון כדי לראות את התעבורה המוצפנת באמצעות Wireshark.
אם תפתחו את הקובץ ssl-key.log תראו משהו כזה:
root@noid-01:~# cat ~/.ssl-key.log CLIENT_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a db6f3d27b40b7c8e10ed415281b39e45ca6ef2b59468f943dbe6e81e1f82e0f0 SERVER_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a d819660e194d9439e7152ceac2a439b41584afbeb5d719663cecb3c63b5c2eb1 CLIENT_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 71d4806141cb1b247c1d1f3f7747a804fcc5e06c4192d8f53fc763a27b92316c SERVER_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 2ca17b0f7ff708fb3001be17a1c85163219221a4595462415e9e9e6653daf1fa EXPORTER_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 3f74b0cbe802d3e3dd3b5f6dee4114f928ec936a0cd388643d146cfb606f62a4
הגדר את Wireshark לפענוח SSL #
ברגע שמערכת הלכידה רושמת מפתחות קדם-מאסטר, אתה יכול להשתמש בקובץ יומן המפתחות יחד עם המנות שנלכדו כדי לפענח תעבורת SSL ב-Wireshark.
1. העלה את יומן המפתח ולכידת קבצים למערכת שבה Wireshark מותקן.
2. פתח את קובץ לכידת התעבורה עם Wireshark.
3. הגדר את פרוטוקול SSL. לחץ על ערוך, ולאחר מכן בחר העדפות. תיפתח תיבת הדו-שיח 'העדפות' ותציג רשימה של פריטים בצד שמאל. הרחב את ה פרוטוקולים החלק, גלול מטה ולחץ על SSL. ב SSL אפשרויות פרוטוקול, אתר את השדה המסומן שם קובץ יומן (Pre)-Master-Secret. דפדף אל קובץ היומן שהגדרת קודם לכן, או הדבק את הנתיב ישירות בשדה זה.
4. החל את התצורה. לאחר הגדרת ה שם קובץ יומן (Pre)-Master-Secret, לחץ על OK כדי לשמור את השינויים ולחזור ל-Wireshark. כעת אתה מוכן לפענח את התעבורה שנלכדה. כאשר אתה בוחר מסגרת נתונים מוצפנת, בדוק את תצוגת Packet byte. מתחת לתצוגה, אתה אמור לראות כרטיסייה עבור נתוני SSL מפוענחים בין היתר.
אם נתוני הסשן עדיין נראים בלתי קריאים ואינך רואה HTML, ייתכן שהסיבה לכך היא דחיסת GZIP, הנמצאת בשימוש נפוץ על ידי שרתי אינטרנט כמו Apache. במקרה זה, לחץ על הכרטיסייה גוף entity uncompressed , הזמינה רק כאשר פענוח SSL מופעל. כאן, תוכל לצפות בקוד המקור הלא דחוס של האתר, כגון רכיב הכותרת של דף Apache המוגדר כברירת מחדל בטקסט רגיל.
שימוש במפתח RSA לפענוח SSL #
Wireshark מציעה תכונה המאפשרת להעלות את מפתחות ה-RSA שלכם לפענוח תעבורת SSL, אך בפועל, פענוח מפתחות ה-RSA מיושן.
ירידה זו בשימוש נובעת מאימוץ של Perfect Forward Secrecy (PFS), שהפך את פענוח מפתח RSA מסורתי למיושן. עם PFS, הפעלות המנוהלות באמצעות Diffie-Hellman אינן מסתמכות ישירות על מפתח ה-RSA. במקום זאת, הם יוצרים מפתח חד פעמי המאוחסן רק ב-RAM ומוצפן באמצעות המפתח בדיסק.
אם השתמשת בעבר במפתח RSA כדי לפענח תעבורה ומצאת שהיא כבר לא עובדת, סביר להניח שמכשיר היעד משתמש בחילופי מפתחות של Diffie-Hellman. אתה יכול לאשר זאת על ידי הפעלת רישום SSL ב-Wireshark.
כדי לאפשר רישום:
1. לחץ על ערוך בתפריט סרגל הכלים ובחר העדפות.
2. הרחב פרוטוקולים בחלק משמאל, גלול מטה ולחץ על SSL.
3. הגדר את המיקום עבור קובץ יומן ה-SSL שלך על ידי לחיצה על לְדַפדֵף לַחְצָן.
לאחר הפעלת הרישום, צלם הפעלה עם המארח התומך ב-SSL ובדוק את היומנים. חפש את מסגרת המשא ומתן ללחיצת יד של TLS; סביר להניח שתראה ערך DHE (או ECDHE, עבור מפתחות עקומה אליפטית) במחרוזת הצופן, המציין שחילופי מפתחות של דיפי-הלמן נמצאים בשימוש.
אם אתה רואה הודעה המציינת שלא ניתן למצוא את סוד המאסטר, ופענוח מפתח RSA נכשל, תצטרך לעבור לשיטת סוד המאסטר לפענוח.
ככל שה-PFS נפוצה יותר, במיוחד עם כניסתו של TLS 1.3, פענוח מפתח RSA המסורתי הוצא משימוש ואין להסתמך עליו יותר.
יודע יותר #
פורמט SSLKEYLOGFILE עבור TLS #
פורמט SSLKEYLOGFILE הוא קובץ טקסט המשמש לאחסון מפתחות סודיים טרום-מאסטריים לפענוח חיבורי TLS. הקובץ מקודד ב-UTF-8, כאשר כל שורה מכילה סוד המזוהה על ידי תווית, ערך אקראי של הלקוח והסוד עצמו, כולם מופרדים על ידי רווחים. הפורמט מקבל סיומות שורות שונות (CRLF, CR, LF), ושורות המתחילות ב- # מטופלות כהערות.
עבור TLS 1.3, מספר תוויות מתאימות לשלבים שונים של לוח הזמנים של המפתחות, כגון CLIENT_HANDSHAKE_TRAFFIC_SECRET ו-SERVER_TRAFFIC_SECRET_0. עבור TLS 1.2 וגירסאות קודמות, התווית CLIENT_RANDOM מזהה את הסוד הראשי.
שיקולי אבטחה:
גישה אל SSLKEYLOGFILE מאפשר פענוח של תעבורת TLS, המהווה סיכון אבטחה משמעותי. בקרות גישה נאותות חיוניות כדי למנוע גישה לא מורשית או הסלמה של הרשאות. רישום יומן צריך להיות מופעל רק על ידי משתמשים מורשים, ויש להחיל הרשאות קבצים קפדניות. הסודות שנרשמו לא רק מאפשרים פענוח אלא יכולים גם לאפשר לתוקפים לשנות או להחדיר נתונים לחיבורים פעילים, ובמקרים מסוימים, להתחזות לנקודות קצה או לזייף הודעות.
כיצד פועלת לחיצת יד SSL דו כיוונית? #
לחיצת יד SSL דו-כיוונית מאמתת את השרת וגם את הלקוח. כך מתפתח התהליך:
1. לקוח שלום: הלקוח יוזם את לחיצת היד על ידי שליחת הודעת "לקוח שלום" לשרת. הודעה זו כוללת את חבילות הצופן הנתמכות של הלקוח ותאימות גרסת TLS.
2. שרת שלום: השרת מגיב בהודעת "Server Hello", המכילה את האישור הציבורי של השרת ובקשה לאישור הלקוח.
3. אימות תעודת לקוח: הלקוח מאמת את אישור השרת. אם זה חוקי, הלקוח שולח את האישור שלו בחזרה לשרת.
4. אימות תעודת שרת: השרת בודק את האישור של הלקוח. אם האישור של הלקוח תקף, הקמת הפגישה ממשיכה, ומאפשרת תקשורת מאובטחת בין שני הצדדים.
האם ניתן לפענח תעבורת SSL/TLS שעברה ריח פסיבי? #
כן, אפשר לפענח תעבורת SSL/TLS שהרחה באופן פסיבי, אבל תזדקק למפתח RSA כדי לעשות זאת. ניתן להשיג את המפתח הזה באמצעים לגיטימיים עם הרשאה מתאימה או, באופן פחות אתי, על ידי יירוטו באמצעות התקפת "אדם באמצע".