פילטרים בוויירשארק לעומק¶
אם כבר פתחתם Wireshark פעם אחת ותפסתם תעבורה, אתם יודעים בדיוק כמה מהר המסך מתמלא. מאות ואפילו אלפי חבילות בדקה, וברגע שרוצים למצוא משהו ספציפי בתוך כל זה, הגלילה הידנית פשוט לא עובדת. הכלי שהופך את הכאוס הזה לחקירה ממוקדת נקרא פילטר תצוגה - display filter, וזה בדיוק מה שהמאמר הזה עוסק בו לעומק.
פילטר תצוגה מול פילטר לכידה - שני דברים שונים¶
לפני שצוללים לתחביר, חשוב להבין הבדל שמבלבל הרבה מתחילים. בוויירשארק יש שני סוגי פילטרים שנראים דומים אבל עושים דברים שונים לגמרי.
פילטר לכידה - capture filter מוגדר לפני שמתחילים לתפוס תעבורה, והוא קובע אילו חבילות בכלל ייכנסו ללכידה. חבילה שלא עומדת בו לא נשמרת בכלל, לא ניתן לשחזר אותה אחר כך.
פילטר תצוגה - display filter, שזה הנושא של המאמר הזה, פועל אחרי שהלכידה כבר קיימת. כל החבילות עדיין שם, שמורות, והפילטר רק קובע אילו מהן מוצגות לכם על המסך כרגע. אפשר לשנות אותו, למחוק אותו, ולהחליף אותו כמה פעמים שרוצים, בלי לאבד שום מידע. זה הכלי שבו תשתמשו הכי הרבה בפועל, כי הוא זה שנותן לכם לחקור לעומק בלי לתפוס מחדש.
אבני הבניין הבסיסיות של התחביר¶
תחביר פילטר התצוגה בנוי מביטויים שאפשר לשלב זה עם זה. הבסיס הכי פשוט הוא סינון לפי פרוטוקול - פשוט כותבים את שם הפרוטוקול בשורת הפילטר:
http- יציג רק תעבורת HTTP.dns- יציג רק שאילתות ותשובות DNS.tls- יציג רק תעבורה מוצפנת ב-TLS.
מעבר לפרוטוקול, אפשר לסנן לפי שדות ספציפיים בתוך החבילה, עם אופרטורים כמו ==, !=, >, ו-<:
ip.addr == 10.0.0.5- כל תעבורה שנוגעת לכתובת IP הזו, בין אם היא המקור או היעד.ip.src == 10.0.0.5אוip.dst == 10.0.0.5- אם רוצים לדייק רק לכיוון אחד.tcp.port == 443- כל תעבורה שנוגעת לפורט הזה, ב-TCP.http.response.code == 404- רק תשובות HTTP עם קוד סטטוס ספציפי.
והחלק שהופך את זה לכלי חקירה אמיתי הוא היכולת לשלב תנאים עם אופרטורים לוגיים - and, or, ו-not. למשל, ip.addr == 10.0.0.5 and tcp.port == 443 יראה רק תעבורה מוצפנת שקשורה לכתובת ספציפית, ו-http and not tcp.port == 80 יראה תעבורת HTTP שרצה על פורט לא סטנדרטי.
כמה תבניות פילטר שבאמת שימושיות בשטח¶
מעבר לתחביר היבש, יש כמה תבניות שחוזרות שוב ושוב כשמנתחים תעבורה בפועל, וכדאי להכיר אותן כרעיון, גם אם התחביר המדויק משתנה מעט לפי מה שמחפשים:
איתור שגיאות HTTP. במקום לעבור ידנית על כל בקשה, סינון לפי קודי תשובה בטווח השגיאות - למשל קודים שמתחילים ב-4 או ב-5 - חושף מיד בקשות שנכשלו, בלי צורך לחפש אותן בעין בין מאות בקשות תקינות.
בידוד שיחה בודדת - stream. כשמצאתם חבילה מעניינת ואתם רוצים לראות את כל השיחה שהיא חלק ממנה, ולא רק את החבילה הבודדת, אפשר לסנן לפי מזהה השיחה כדי לראות את כל חילופי החבילות בין שני הצדדים מההתחלה ועד הסוף, בדיוק לפי הסדר. זה הכלי שהופך "חבילה אחת מוזרה" ל"תמונה מלאה של מה שקרה".
שאילתות DNS חשודות. בסינון תעבורת DNS ובחיפוש אחר דפוסים לא רגילים - שמות דומיין ארוכים ומוזרים, שאילתות חוזרות בתדירות גבוהה מאוד, או פניות לדומיינים לא מוכרים - אפשר לזהות סימנים מוקדמים לתקשורת של תוכנה זדונית עם שרת שליטה, עוד לפני שרואים כל סימן אחר לבעיה.
למה שליטה בפילטרים היא ההבדל האמיתי¶
מי שלא שולט בפילטרים חווה את Wireshark בדיוק כמו שהוא נראה בפעם הראשונה - זרם אינסופי של שורות שאין דרך אנושית לעקוב אחריהן. מי ששולט בפילטרים חווה כלי אחר לגמרי - מקלידים שאלה מדויקת, ומקבלים בדיוק את התשובה, מתוך כל מיליון החבילות שנתפסו.
ההבדל הזה קריטי בשני עולמות שבהם וויירשארק נמצא בשימוש יומיומי - אבחון תקלות רשת רגילות, שבהן צריך למצוא מהר למה חיבור נכשל או התנהג מוזר, וניתוח אבטחה, שבו לומדים לקרוא תעבורה כדי לזהות תקיפה או לפתור אתגר פורנזיקה ברשת - בדיוק סוג המשימות שנפגשים איתן בעולם ה-CTF ובעבודת בדיקות חדירה אמיתית.
אם התחום הזה מדבר אליכם - לקרוא תעבורת רשת כמו ספר פתוח, ולהבין בדיוק מה עובר בין שני מחשבים - שווה להעמיק בו ברצינות. בקורס בדיקות חדירה יש התעמקות מלאה בניתוח תעבורה וב-Wireshark, כולל תרגילים על תעבורה אמיתית שממש דורשים לבנות פילטרים מדויקים כדי לפתור אותם.
לסיכום¶
פילטר תצוגה הוא לא תוספת נחמדה בוויירשארק, הוא בעצם הכלי המרכזי שהופך אותו משימושי לכלי עבודה אמיתי. תתחילו מהבסיס - פרוטוקול בודד, כתובת IP בודדת - ותתקדמו לשילובים מורכבים יותר ככל שהחקירה שלכם דורשת. ככל שתתרגלו יותר, כתיבת פילטר מדויק תהפוך למהירה כמו לנסח שאלה במילים.