החנות נטענת היטב בבית ומציגה קיר של «תעבורה חריגה» ברגע שהמנהרה עולה. פורום מסרב להכניס אותך, ועמוד סטרימינג מתעקש שאתה במדינה שמעולם לא ביקרת בה. שום דבר מזה לא דורש תוכנת ריגול. אתר רואה את הכתובת שממנה מגיעים החבילות שלך, ועם VPN הכתובת הזו שייכת למרכז נתונים ולא לקו ביתי. רוב מה שמכונה זיהוי VPN מתחיל ונגמר בעובדה האחת הזו, והשאר הוא הסקה בשיעור שגיאה צפוי.

החסימה מתחילה במקום שממנו נראה שהחבילות שלך מגיעות

כל בקשה נושאת כתובת מקור, והשרת שמקבל אותה יכול לחפש אותה בנתונים ציבוריים: איזו רשת מכריזה עליה, אם הרשת הזו היא ספק אחסון, אם היא הופיעה ברשימות התעללות, ואיזו מדינה הרישום מקצה לה. שום דבר מזה לא מזהה אותך, וכל זה יחד מספיק כדי לשבץ אותך בקטגוריה.

הסתכל על התעבורה שלך כמו שזר היה מסתכל. שתי פקודות מכסות את רוב המשטח, והשנייה היא זו שאנשים שוכחים:

curl -sS https://ipinfo.io/json
dig +short TXT o-o.myaddr.l.google.com @ns1.google.com

הראשונה מחזירה את כתובת היציאה, את הארגון שלה ואת המדינה שלה. השנייה מחזירה את כתובת הפותר שהגיע לשרת השמות של Google, שלרוב שייכת לרשת אחרת מהיציאה שלך, והיא הכתובת שאתר רואה אם הוא מתעד נתונים בצד הפותר. כששתי אלה שייכות למדינות שונות, אתרים מסוימים רואים באי-ההתאמה סימן חשוד, גם כששום דבר לא שגוי בהגדרה שלך.

כשהסירוב מתחיל רק אחרי שהמנהרה עולה, חשד קודם כל בכתובת היציאה. החלף שרת ונסה שוב לפני שאתה נוגע בדפדפן. חסימה שעוקבת אחריך בשלוש יציאות של אותו ספק קשורה לטווחים של הספק; חסימה שנעלמת בשרת אחר קשורה לכתובת הבודדת ההיא.

אזור הזמן, השפה והשעון לא תואמים לכתובת

קוד העמוד יכול לקרוא את אזור הזמן שלך, את העדפות השפה שלך ואת הגדרות המסך בלי שום בקשת הרשאה. דפדפן שמדווח על שעון מרכז אירופה כשהחיבור מגיע ממרכז נתונים בסינגפור הוא אות חזק יותר מהכתובת לבדה, וזה בדיוק סוג אי-ההתאמה שדירוג הונאות נבנה לזהות.

Intl.DateTimeFormat().resolvedOptions().timeZone
navigator.language
Intl.DateTimeFormat().resolvedOptions().locale

שלוש השורות האלה בקונסולת המפתחים אומרות לך מה הדפדפן שלך מוסר מרצון. לקוח VPN יכול לשנות את המסלול שלך ושום דבר אחר, כך שהפרופיל שאתה נושא נשאר מקומי בעוד שהיציאה שלך אינה. העקביות היא מה שחשוב כאן: מחשב נייד שמוגדר לאותו אזור כמו היציאה נראה רגיל, ומחשב שמתנגש עם עצמו לא.

זו גם הסיבה שהכשל הוא לסירוגין. אתרים רבים לא אכפת להם, מעטים מדרגים אותו, ואתר חברות אחד מחליט שאתה רמאי. הלקוח עובד כראוי בכל שלושת המקרים, ולכן תשובת התמיכה הרגילה, «זה בטח הדפדפן שלך», היא גם מרגיזה וגם נכונה חלקית.

מה קוד העמוד באמת יודע על המכונה שלך

ל-JavaScript אין API שמפרט ממשקי רשת. עמוד לא יכול לשאול אילו כתובות יש למחשב הנייד שלך, ולכן הטענה הישנה שסקריפט קורא את כתובת ה-LAN שלך היא בעיקר זיכרון מעידן התוספים, כשפקדי ActiveX, אפלטים של Java וקוד מקורי אחר יכלו לעשות בדיוק את זה.

SignalWhat it revealsStatus today
Source address of the requestExit network, country, hosting statusAlways visible; the main signal
Time zone and languageWhere the profile claims to beReadable without permission
WebRTC candidatesLocal addresses, historicallyHost candidates are mDNS-obfuscated by default
Interface listAll local addressesNot available to ordinary JavaScript

WebRTC הוא החריג הישר לכלל «אין דליפת כתובות מקומיות». איסוף המועמדים שלו חשף פעם כתובות מקומיות לכל עמוד שביקש, והתיקון היה להחליף מועמדי מארח בשמות mDNS אקראיים. ברירת המחדל הזו מתקיימת בדפדפנים הנוכחיים, אבל זו החלטה של הדפדפן ולא הבטחה של הפרוטוקול, ולכן גרסה מיושנת או תצורה מוקשחת שמפעילה מחדש מועמדים מקומיים עדיין עלולה לדלוף. עדכון הדפדפן עוזר לך כאן יותר מכל תוסף.

הספק שלך רואה את השמות, לא את התוכן

HTTPS מגן על תוכן העמוד מקצה לקצה, ומפעיל המנהרה שמעביר את הבתים האלה לא יכול לקרוא אותם. המפעיל עדיין יכול לראות לאיזו כתובת פנית, וברוב הפריסות גם את שם השרת בלחיצת היד, כי השם חייב להיות קריא כדי שהחיבור ינוטף לאתר הנכון. Encrypted Client Hello קיים בדיוק כדי להסתיר את השדה הזה, והוא עוזר רק כשגם הלקוח וגם האתר תומכים בו.

פתרון שמות הוא החצי השני. אם הספק שלך מספק גם את הפותר, הוא רואה כל שם שאתה מחפש לפני שקיים חיבור. אם המכשיר שלך משתמש בפותר ציבורי דרך HTTPS, הספק רואה חיבור לאותו פותר ושום דבר אחר, בעוד שהפותר עצמו רואה את הרשימה.

בקשת HTTP לא מוצפנת קריאה למפעיל מאותה סיבה שהיא קריאה לרשת המלון: שום דבר בתוכה אינו מוצפן. מנהרה מעולם לא טענה אחרת, והיא לא מתקנת את הבחירה של היישום.

הפרד בין «זה VPN» ל«זה אני»

זיהוי הוא זול, הסתברותי ולעיתים קרובות שגוי. כתובות יציאה משותפות מסומנות כי מישהו אחר ניצל אותן לרעה, טווחים ארגוניים מסווגים כאחסון, ומפעילים סלולריים מייצרים תוצאות גיאוגרפיות שמפתיעות את כולם. זיהוי האדם הוא בעיה אחרת: הוא צריך קשר מתמשך כמו חשבון שנכנסת אליו, קוקי, פרט תשלום, או שני צופים שמשווים הערות.

החלט נגד מי אתה באמת נלחם. אם המטרה היא לקרוא עמוד, HTTPS כבר עושה את העבודה הזו והמנהרה משנה מעט. אם המטרה היא למנוע מהאתר לדעת באיזו עיר אתה, היציאה והפותר הם מה שחשוב. אם המטרה היא לנתק את הקשר לזהות האמיתית שלך, החשבון הוא נקודת התורפה, והחלפת שרתים לא עושה דבר לכניסה שהשתמשת בה זה עתה.

יציאה חדשה לא מנתקת אותך מאף דבר, והיא לא יכולה למחוק את מה שאתר כבר שמר על החשבון שהשתמשת בו. לכן הסדר המעשי אינו מרהיב: בחר יציאה שהרשת שלה נראית רגילה, שמור על פרופיל דפדפן עקבי איתה, עדכן את הדפדפן כדי שהתכונות הנוטות לדלוף ישתמשו בברירות המחדל המודרניות שלהן, וקבל שעוד מספר קטן של אתרים יטעה לגביך.

מאמרים קשורים