עקבו אחר שאילתת ה-DNS צעד אחר צעד כדי למצוא את המקור האמיתי
כתובת רזולוור שנדחפת ללקוח אינה קובעת איזה מקור הרזולוור יראה. עקבו אחר הלקוח, המעביר והשרת המקבל, ואז רשמו את המסלול.
מתן כתובת רזולוור ללקוח קובע לאן נשלחות השאילתות, ולא איזה מקור הרזולוור יראה. הניתוב, ההעברה והתרגום מקבלים כל אחד את תורו בין שני הקצוות. ספר העבודה לשאלות מקור עוקב אחר השאילתה צעד אחר צעד ורושם מה כל צופה ראה בפועל. הסדר חשוב, משום שטענה שנאמרת לפני התצפית היא רק ניחוש בפורמט טוב יותר.
רשמו את הסידור לפני שאתם אוספים ראיות
ארבעה מקומות יכולים לספר לכם משהו על מקור DNS, ולא כולם אומרים אותו דבר. גרעין הלקוח יודע איזה מקור הוא היה משתמש, המעביר יודע מה הוא שלח כלפי מעלה, ההתקן המתרגם יודע מה הוא כתב מחדש, והרזולוור המקבל יודע מה הגיע. רשמו לאילו מהם אתם באמת יכולים להגיע לפני שאתם אוספים משהו.
| Observation point | What it can prove | What it cannot prove | How to read it |
|---|---|---|---|
| client kernel | which source address it would use for that resolver | anything a device in between rewrote | ip route get against the resolver address |
| forwarder | that it sent an upstream query, and from which source | what the client originally asked for | its own log and its cache state |
| translating device | that a source was rewritten, and to what | whether the query was legitimate | NAT policy and its counters |
| receiving resolver | the address that actually arrived | which client behind that address asked | a scoped capture on port 53 |
רשמו גם את הציפייה שלכם, כולל הרזולוור שלדעתכם נמצא בשימוש. מסלול מפוצל יכול לשלוח שאילתה למקום אחר לגמרי, ומטמון יכול להשיב בלי שום חילופין כלפי מעלה, ולכן הנחה שנשמרת רק בזיכרון לא תשרוד את ההפתעה הראשונה. החזיקו את התכנון המוצהר ואת המסלול הנצפה בעמודות נפרדות של אותה רשומה; כשהשניים חלוקים, מצאתם את השאלה ששווה לרדוף אחריה.
בדקו איזה תהליך באמת שלח את השאילתה
התחילו בלקוח: רשמו את כתובת הרזולוור, את שם השאילתה ואת הזמן, ואז אשרו איזה תהליך שלח אותה. השורה הראשונה למטה מציינת את התהליך שמחזיק במעבד ה-UDP, וזה הבדיקה שהכותרת הזו מבטיחה. אם אותו תהליך הוא עוזר דפדפן או סביבת הרצה של מכולה ולא הרזולוור של המערכת, שאר העקבות מתאר מסלול שאיש לא ביקש.
ss -tunp 'dport = :53'
dig @10.20.30.53 host.corp.example +noall +answer
ip route get 10.20.30.53
במארח עם כמה ממשקים, בררו קודם איזו כתובת מקור הגרעין בוחר לאותו יעד לפני שאתם מסתכלים במקום אחר. זו הנקודה האחרונה שבה המסלול נמצא כולו בשליטתכם, וזה הערך שתשוו למה שהרזולוור מדווח. אי-התאמה היא הסימן שמשהו בדרך כתב את החבילה מחדש, או שנשלחו שתי שאילתות שונות.
החזיקו את שמות הבדיקה פנימיים, משום ששם פנימי שנשלח ל-רזולוור ציבורי אינו מוכיח דבר על המסלול הפנימי ומפרסם שם שלא הייתם צריכים לפרסם. דפדפן שבו DNS מאובטח מופעל לא יופיע ברשימת המעבדים הזו כלל, וההיעדרות הזו היא עצמה התשובה.
המעביר מבצע שאילתה שנייה ונפרדת
מעביר הופך חילופין אחד לשניים. הבקשה מלמטה מגיעה, ואז המעביר שולח את השאילתה שלו כלפי מעלה מכתובת שהוא בוחר. התצורה שלו, ולא הלקוח, קובעת מה הרזולוור העליון רואה.
המדריך של dnsmasq שווה קריאה מהסיבה הזו: הוא מתעד כיצד מעביר בוחר שרתים כלפי מעלה וכיצד הוא קושר את צד ההאזנה שלו, ושום דבר בסידור הזה אינו נושא את מקור הלקוח כלפי מעלה. לכן יומן רזולוור שמראה כתובת שער הוא תקין ולא הוכחה לתקלה. גם היעדרות נקראת בטעות באותה קלות, משום שפגיעת מטמון אינה מייצרת שום שאילתה כלפי מעלה ונראית בדיוק כמו שאילתה שמעולם לא הגיעה. קראו את תצורת המעביר ואת מצב המטמון שלו לפני שתסיקו אחת משתי המסקנות. שתי שאלות, שני מקומות להסתכל בהם.
קראו את המקור ב-רזולוור המקבל
התצפית היחידה שמכריעה את זה נלקחת בצד השרת. כל מה שנגזר מרשימת הממשקים של הלקוח נשאר השערה עד שהרזולוור מדווח מה באמת הגיע.
tcpdump -ni any port 53 and host 10.20.30.53
לכדו במארח הרזולוור, החזיקו את הלכידה קצרה ומוגבלת, ואחסנו אותה במקום שהמדיניות מתירה. אם המקור הנצפה הוא כתובת מתורגמת, השאלה הבאה היא איזה התקן ביצע את התרגום והאם המדיניות שלו היא המיועדת. לכידה עונה מה הגיע; היא אינה מסבירה למה המדיניות התירה זאת. נקבו בשם הצופה ובשלב ברשומה, משום שטענת פרטיות לגבי שער היא טענה לגבי אותו שלב ולא לגבי המסלול כולו.
רשמו את הממצא כמסלול, לא ככתובת
רשמו את הלקוח, את הרזולוור, כל מעביר, את המקור הנצפה בכל שלב ואת המדיניות שמסדירה אותו. רשומה כזו עונה על רוב השאלות העתידיות בלי לכידה נוספת. ציירו אותה כשרשרת, משום שרשימת כתובות מסתירה איזה שלב יצר איזו.
צרפו לציור את התאריך, את גרסת הלקוח ואת מהדורת התצורה, כדי שקורא מאוחר יוכל לומר אם היא עדיין תקפה. הפרידו את מקור התעבורה מכל דבר אחר שהשירות מעבד, משום שלראות כתובת שער אין אומר דבר על מה עוד נשמר. גם מיקומו של רזולוור אינו אומר דבר על איזה לקוח שאל. דווקא הפרדת הטענות האלה היא מה שהופך את המסקנה לניתנת להגנה בבדיקה.