قانون فایروال بر پایه SSID پس از تغییر Wi-Fi دیگر فیلتر نمیکرد
فایروالی که به SSID گره خورده است، وقتی Android نام شبکهای ناشناخته برمیگرداند باز میماند. هویت را از اجرا جدا کنید و به حالت ناشناخته سیاست خودش را بدهید.
قانون ساده بود: ترافیک را فقط تا وقتی که تلفن به Wi-Fi دفتر متصل است فیلتر کن. ماهها دوام آورد، و بعد یک صبح تلفن روی همان SSID با همان نماد کلید نشسته بود و فیلتر کردن متوقف شده بود. هیچ چیز در شبکه تغییر نکرده بود؛ چیزی که تغییر کرده بود این بود که آیا برنامه میتواند نام شبکه را ببیند. در Android، «روی کدام Wi-Fi هستم» و «این ترافیک را مسدود کن» دو کار جدا هستند، و فایروالی که این دو را در هم میآمیزد، دقیقاً وقتی نام در دسترس نیست باز میماند.
نشانه: هویت ناپدید میشود و سیاست دنبالش میآید
قانون SSID یک مقدار را میخواند و سپس شاخهای انتخاب میکند. وقتی خواندن چیز مفیدی برنگرداند، کد باید کاری بکند و پیشفرض رایج این است: «شبکه مورد انتظار نیست، پس فیلتر نکن». همین پیشفرض یک مشکل مجوز را به نشت ترافیک تبدیل میکند. نماد کلید دیده میشود چون سرویس VPN هنوز در حال اجراست؛ فقط شاخه دیگری را اعمال میکند.
به ترتیب رویدادها نگاه کنید، نه به شبکه. یک اعلان مجوز ردشده، یک بهروزرسانی سیستم که دسترسی به SSID را پشت مجوز دیگری برد، خاموش شدن سرویسهای مکان، یا تغییر سیاست نمایه کاری میتوانند همان نتیجه را بدهند در حالی که تلفن روی همان نقطه دسترسی میماند.
چرا نام میتواند ناشناخته برگردد
WifiInfo.getSSID() شناسه مجموعه سرویس شبکه فعلی را برمیگرداند و Android مستند کرده است که دسترسی به فیلدهای حساس به مکان به مجوز وابسته است. وقتی دسترسی در دسترس نیست، فراخوانی به جای شکست پرصدا UNKNOWN_SSID برمیگرداند. پس مقدار خالی یا ناشناخته شاهدی بر ترک Wi-Fi توسط تلفن نیست؛ شاهدی است بر اینکه برنامه نمیتواند شبکه را دستهبندی کند.
دو بررسی این حالتها را جدا میکند. تأیید کنید که تلفن متصل است و ببینید سیستم چه گزارش میدهد، سپس تأیید کنید که برنامه واقعاً مجوزی را دارد که در این نسخه Android لازم دارد:
adb shell cmd wifi status
adb shell dumpsys package <your.app> | grep -i -E "ACCESS_FINE_LOCATION|NEARBY_WIFI_DEVICES"
اگر خط وضعیت شبکهای متصل نشان دهد در حالی که برنامه نامی ناشناخته میبیند، مشکل شما مجوز یا سطح API است، نه مشکل Wi-Fi. پیش از دست زدن به قواعد فایروال این را درست کنید، چون هر قاعده پاییندستی در برابر مقداری ارزیابی میشود که برنامه نمیتواند بخواند.
فیلتر کردن واقعاً کجا اجرا میشود
فایروال محلی Android معمولاً مدل VpnService را بدون فرستادن ترافیک به سرور راه دور به کار میبرد: رابط مجازی را میگیرد، قواعد خودش را اعمال میکند و آنچه را اجازه میدهد ارسال میکند. پلتفرم یک سرویس VPN فعال برای هر نمایه کاربر اجازه میدهد و دومی جایگزین اولی میشود نه اینکه روی آن سوار شود. بنابراین یک برنامه فایروال جداگانه و یک VPN کاری جداگانه زنجیره دو مرحلهای نمیسازند؛ یکی از آن دو برنده میشود.
این برای قانون SSID مهم است چون نقطه اجرا و نقطه مشاهده اجزای متفاوتی هستند. VpnService تعیین میکند چه چیزی از دستگاه خارج میشود؛ API Wi-Fi فقط یک برچسب میدهد. برنامه میتواند درست اجرا کند و نادرست دستهبندی کند، و دقیقاً همین شکست در این مقاله است.
به حالت ناشناخته سیاست خودش را بدهید
هویت شبکه را سه حالت در نظر بگیرید و پیش از عرضه قانون، سیاست هر یک را بنویسید. حالت سوم همان است که فراموش میشود، و همان جایی است که مهاجم یا پیکربندی نادرست شما را در آن قرار میدهد.
| Observation | Policy to specify |
|---|---|
| Expected SSID is readable | The explicit filtering policy you designed |
| A different SSID is readable | The default policy for untrusted networks |
| Unknown, changing or unreadable | Fail closed until classification is reliable |
بسته شکست خوردن یعنی حالت ناشناخته سختگیرانهترین سیاست معقول را به ارث میبرد، نه راحتترین را. اگر این کار تلفن را در شبکه جدید بیاستفاده کند، راهحل درست یک استثنای عمدی و آشکار است، نه یک تصمیم اعتماد خاموش که در بررسی مقدار تهی پنهان شده باشد.
یک SSID آشنا برچسب است، نه شاهدی بر اپراتور شبکه. هر کسی میتواند نقطه دسترسی با نام دفتر راه بیندازد، پس تطابق نام هرگز نباید تنها چیزی باشد که میان یک نشست حساس و یک بخش غیرقابل اعتماد ایستاده است.
گذارها را آزمایش کنید، نه حالت پایدار را
آزمون در حالت پایدار در شبکهای که قانون را ساختهاید میگذرد. شکستها در گذارها زندگی میکنند: مجوز ردشده، Wi-Fi به شبکه همراه، یک SSID به دیگری، راهاندازی دوباره سرویس VPN و برنامه VPN دیگری که رابط را در دست میگیرد. برای هر یک تصمیم بگیرید که آیا اتصالهای موجود بازبینی میشوند و آیا ترافیک محافظتشده تا زمانی که حالت ناشناخته است مسدود میماند.
نتیجه را در سه جمله بنویسید: شرط مشاهدهشده، جزئی که تصمیم را اجرا میکند، و عقبنشینی عمدی. اگر یکی از این سه نباشد، قانون هنوز سیاست نیست؛ یک گمان است که تصادفاً در شبکه دفتر کار میکند.