שידורים חוזרים של TCP מול דחיות חזרה של IPsec: קראו כל שכבה
דגל שידור חוזר, ACK כפול ומונה דחיות חזרה של ESP מודדים אירועים שונים בשכבות שונות. קראו כל מונה במקום שבו הוא נוצר.
שלושה כלים שונים מדווחים על שלושה כפילויות שונות, ורק אחד מהם הוא אירוע רשת שאפשר לפעול לפיו. שידור חוזר של TCP הוא שולח ששולח שוב טווח, ACK כפול הוא מקבל שמחזיר אישור, ודחיית חזרה של ESP היא התאמת אבטחה שמסרבת למספר רצף שכבר התקבל אצלה. אף אחד מהשלושה אינו מחייב את האחרים. קראו כל מונה בשכבה שמייצרת אותו לפני שאתם מחברים אותם לסיפור אחד.
שלושה מונים שלעולם אינם מודדים את אותו אירוע
סימון שידור חוזר של TCP אומר שהשולח הניח שוב טווח רצף על החוט. אובדן הוא אחד הגורמים לכך, וייתכן שהלכידה שבידיכם פשוט חסרה את המנות המקורית או את האישור שהיה מסביר את התזמון. ACK כפול הוא המקבל שמחזיר אישור מצטבר לפי כללי ההתאוששות של TCP, וזה אינו כתיבה כפולה של היישום ולא עותק שני של הנתונים.
ESP פועל במרחב רצף משל עצמו. כל התאמת אבטחה ממספרת את המנות שהיא שולחת, והמקבל מחזיק חלון של מספרים שכבר התקבלו, ולכן מנת ESP שמגיעה פעמיים נזרקת רק על סמך הכללים האלה. לכן מקטע TCP שנשלח שוב נוסע במנת ESP חדשה עם מספר רצף חדש, וזו התנהגות נכונה בשתי השכבות. אותם בתים יכולים להיראות חדשים במונה אחד וישנים באחר, ואף אחת משתי השכבות אינה משקרת.
מה המנתח יכול לראות ומה לא
התחילו באוצר המילים של המנתח, כי שמות המסננים מתארים תצפיות ולא את פנימיות נקודות הקצה. ספירה בשמות שהכלי עצמו משתמש בהם שומרת עליכם כנים לגבי מה שנמדד באמת. ספירה מלכידה חלקית היא ספירה של מה ששרד, לא של מה שקרה על החוט.
tshark -r trace.pcap -Y "tcp.analysis.retransmission" | wc -l
tshark -r trace.pcap -Y "tcp.analysis.duplicate_ack" | wc -l
קראו את המידע המומחי שלצד המספרים האלה, כי אזהרות בדיקת סכום וסידור משנות כמה משקל מגיע להם. לכידה ממוזגת משני חיישנים יכולה להראות מסגרת אחת פעמיים, וספירה של שני העותקים ממציאה אירוע התאוששות שלא קרה מעולם.
מוני ESP חיים במצב הליבה
מספרי הרצף של ESP שייכים להתאמת האבטחה, לא לזרם TCP, ולכן השער הוא המקום לשאול בו. רשימת המצב מדווחת מוני מנות ושגיאות לכל התאמה שאין לכידה שיכולה לשחזר.
ip -s xfrm state
tshark -r trace.pcap -Y "esp" -T fields -e esp.seq | head
RFC 4303 מגדיר את מספר הרצף ואת חלון מניעת החזרה שצורך אותו, ולכן המונה עולה גם כשדבר אינו שגוי. מספרי רצף חיצוניים מונוטוניים בלי אנומליית TCP מתאימה מצביעים על שולח אחר או על נתיב כפול ולא על סופת שידורים חוזרים. לכידה חיצונית של מנהרה מוצפנת מסתירה בדרך כלל את מספרי הרצף הפנימיים של TCP, ולכן אינה יכולה להוכיח מה עשתה המחסנית הפנימית. לכדו בתוך המנהרה רק במקום שהמדיניות מתירה, ולעולם אל תשביתו את מניעת החזרה כדי להשתיק אזהרה לא קשורה.
איפה נקודת התצפית משנה את התשובה
לפני הסלמה רשמו כיצד נלקחה הלכידה: הממשק, אם תהליך הלכידה דיווח על אובדנים, ואם חותמות הזמן ניתנות להשוואה בין חיישנים. נקודת תצפית אחת אינה יכולה לראות את שני קצותיו של נתיב, ולכן כל אמירה על התנהגות המקבל היא הסקה ולא מדידה. לכידה שנלקחה בשער ולכידה שנלקחה במארח לא יסכימו על הסדר תחת עומס, ואי ההסכמה הזו שייכת בדרך כלל ללכידה ולא למנהרה. המתאם בין שתי תצוגות הוא מה שהופך ספירה לראיה.
השתמשו בזרימת יישום אחת מורשית ורשמו את מוני נקודות הקצה לצד ספירות הלכידה באותו רגע. אם המספרים אינם מסכימים, סמכו על השכבה שבעלת האירוע והתייחסו לאחרת כאל חפץ תצפיתי עד שיוכח אחרת. הכלל הזה פותר את רוב המקרים האלה בלי לגעת בתצורת המנהרה.
לקרוא את המספרים בסדר הנכון
התחילו בשכבה שבה נשאלה השאלה: על אזהרת TCP עונים מלכידת TCP, ועל דחיית ESP עונים ממוני התאמת האבטחה בשער. רק אז שאלו אם שתי התצוגות מתארות את אותה מנה. מסקנה שזקוקה לשתי השכבות צריכה לנקוב בשתיהן, כי טענה על המנהרה שנשענת רק על סימון TCP היא ניחוש.
רשמו את השכבה, המונה ונקודת התצפית לכל ממצא, והקורא הבא לא ימזג שלושה אירועים לתקלה מדומיינת אחת. הסלימו עם שלושת השדות האלה והתיקון בדרך כלל נובע מהראשון.