خروجی VPN در اندروید: آنچه واقعاً به گوشی جدید منتقل میشود
خروجی VPN در اندروید تنظیمات و گاهی یک کلید را منتقل میکند، اما هرگز مجوز دستگاه را نه. پیش از پاک کردن گوشی قدیمی بررسی کنید چه چیزی واقعاً منتقل میشود.
خروجی گرفتن از پروفایل VPN در اندروید مثل یک مرحله پشتیبانگیری به نظر میرسد و منویی که آن را ارائه میدهد هیچ کاری برای اصلاح این برداشت نمیکند. آنچه با خود میبرید یک ورودی برای تجزیهگر، کلیدی که ممکن است سیستمعامل هرگز برنگرداند و مجوزی است که دقیقاً برای همان گوشی صادر شده است. این سه را از هم جدا کنید و پرسش مفید ظاهر میشود: کدام بخش هنوز روی دستگاه جدید کم است؟
فایل بخش آسان است. دو بخش دیگر تعیین میکنند که مهاجرت کار میکند یا نه.
پروفایل خروجیگرفته واقعاً چه چیزی دارد
پیش از اعتماد، فایل را در یک ویرایشگر متن باز کنید. پروفایل OpenVPN یک زبان پیکربندی کوچک است: remote، proto، data-ciphers و اغلب بلوکهای درونخطی <ca>، <cert>، <key> یا <tls-crypt> که کلاینت به پشته TLS خود میدهد. پیکربندی WireGuard مسطحتر است: [Interface] شامل PrivateKey و Address است، سپس یک [Peer] برای هر نقطه پایانی که PublicKey، AllowedIPs و Endpoint را حمل میکند. IKEv2 بهصورت .mobileconfig با دیکشنریهای بار داده میآید، نه بلوکهای کلید.
هیچیک از این متن بهتنهایی اعتبارنامه نیست. اعتبارنامه کلید خصوصی است و هر قالب یا آن را درونخطی میچسباند یا به نام مستعاری اشاره میکند که فقط داخل کلاینتی که آن را ساخته حل میشود.
کلید واقعاً کجای اندروید زندگی میکند
اندروید دادههای برنامه را زیر /data/data/<package> نگه میدارد که فقط UID همان برنامه میتواند بخواند. هیچ راه پشتیبانیشدهای برای کپی کردن پوشه خصوصی برنامه دیگر از گوشی روتنشده وجود ندارد و adb backup پس از آنکه اندروید 12 آن را منسوخ کرد و کلاینتها شروع به اعلام allowBackup="false" کردند، دیگر پاسخ عمومی نبود. پس خروجی از یک کلاینت اندروید یعنی آنچه آن کلاینت پیاده میکند، نه کپی از سیستم فایل.
لایه هویت زیر برنامه قرار دارد. اگر کلاینتی کلید شما را به Android Keystore وارد کرده باشد، مواد آنجا تولید یا بستهبندی میشود و خروجیهای بعدی میتوانند بهجای بایتها ارجاعی به نام مستعار Keystore داشته باشند. کلیدهای با پشتیبانی سختافزار طوری ساخته شدهاند که حتی برنامه مالک هم نمیتواند آنها را بخواند، همانطور که Keystore documentation توضیح میدهد، بنابراین پروفایلی که به آن نام مستعار اشاره میکند روی همان گوشی پاک وارد میشود و جای دیگر شکست میخورد.
این خروجی خراب نیست. این همان ویژگی است که از پلتفرم خواسته شده بود.
آنچه پروفایل نمیتواند منتقل کند
اشیاء را با آنچه مقصد میپذیرد مقایسه کنید:
| شیء | منتقل میشود؟ | چرا |
|---|---|---|
| پروتکل و نقطه پایانی | بله، اگر کلاینت مقصد آن را پشتیبانی کند | متن ساده در پروفایل |
| گواهی CA و بررسی نام میزبان | معمولاً | مواد عمومی، اما نام میزبان هنوز باید با گواهی مطابقت کند |
| گواهی کلاینت | بله، مگر اینکه به هر دستگاه گره خورده باشد | گواهیها قابل حملاند؛ صادرکننده تعیین میکند چند دستگاه میتوانند از یکی استفاده کنند |
| کلید خصوصی | فقط اگر بیرون از Keystore تولید شده باشد | کلیدهای با پشتیبانی سختافزار قابل خروجی گرفتن نیستند، فقط جایگزین میشوند |
| حساب، MFA، نشست SSO | خیر | توکنها منقضی میشوند و به دستگاهی که آنها را گرفته گره میخورند |
| مسیرها، DNS و دامنه برنامهها | فقط بهصورت متن پیکربندی | اندروید آنها را هنگام اتصال از طریق VpnService.Builder اعمال میکند |
| فهرست برنامههای تونل تفکیکشده | بهندرت | نام بستهها بین دستگاهها متفاوت است و فهرست وضعیت کلاینت است |
دو ردیف بیشترین سردرگمی را ایجاد میکنند. کلیدی که روی دستگاه تولید و غیرقابلخروجی علامتگذاری شده واقعاً با دادههای برنامه از بین میرود، پس جایگزین کلید جدید بههمراه گواهی صادرشده برای آن است. توکن نشستی که به گوشی جدید کپی شود معمولاً در اولین بازآوری میمیرد، که بهصورت ورود ناموفق خوانده میشود.
ورود یک تجزیه است و سپس یک درخواست رضایت
در سمت گیرنده، ورود یک تجزیه است که پس از آن یک ثبت میآید. کلاینت پیکربندی را میخواند، بررسی میکند هر بلوک ارجاعشده وجود دارد، سپس تعریف تونل را در جعبه شنی خود مینویسد، و به همین دلیل فایلی که از دانلودها انتخاب کردید چیزی نیست که بعداً متصل میشود.
سپس مرحله مجوز میآید که هیچ فایلی نمیتواند از آن بگذرد. اندروید لازم میداند برنامه VpnService.prepare() را صدا بزند و رضایت شما را بگیرد تا بتواند تونی بسازد، بنابراین پروفایل تازهواردشده هنوز یک بار دیالوگ سیستم را نشان میدهد. سپس تونل بهصراحت از طریق addAddress، addRoute، addDnsServer و addAllowedApplication یا addDisallowedApplication برای مسیریابی هر برنامه ساخته میشود. هیچیک از اینها از نقطه پایانی نتیجه نمیشود، بنابراین همان پروفایل میتواند مجموعه مسیرهای مؤثر متفاوتی در دو کلاینت بسازد.
تنظیمات مبتنی بر گواهی یک انشعاب دیگر اضافه میکنند. وقتی سرور گواهی را برای دستگاه مشخصی صادر میکند، همانطور که MDM و ثبتنام SCEP انجام میدهند، استفاده دوباره از آن روی گوشی دوم یا تا زمانی کار میکند که سرور یک نشست به ازای هر هویت را تحمیل کند یا در دستدادن TLS شکست میخورد. پیش از برنامهریزی برای استفاده دوباره، سیاست صادرکننده را بررسی کنید.
پیش از بازنشسته کردن دستگاه قدیمی، دستگاه جدید را بررسی کنید
گوشی قدیمی را متصل نگه دارید تا گوشی جدید چیزی بهتر از یک نماد سبز را پاس کند. آدرس خروج از دستگاه جدید و DNS resolverی که واقعاً استفاده کرده را تأیید کنید. اگر split tunneling مهم است، برنامهای را اجرا کنید که باید تونل را دور بزند و یکی که نباید، سپس ببینید کدام به ارائهدهنده شما میرسد.
یک بررسی آدرس خروج را روشن میکند. https://ifconfig.me را در مرورگر گوشی باز کنید، سپس curl -s https://ifconfig.me را از لپتاپی روی همان Wi-Fi اجرا کنید و هر دو پاسخ را با آدرسی که ارائهدهندهتان اختصاص داده مقایسه کنید.
فقط آنگاه هویت قدیمی را بازنشسته کنید و آن را از طریق صادرکننده انجام دهید: گواهی را باطل کنید یا دستگاه را از حساب حذف کنید. حذف یک فایل از دانلودها هیچ چیز را تمام نمیکند، چون دو دستگاهی که گواهی یکسان دارند در گزارش سرور یکسان به نظر میرسند.
اگر خروجی غیرقابلحمل باشد، راهحل ثبتنام تازه است نه بسته پیکربندی عمومی. یک پروفایل دستگاه دوم بخواهید، یا جفت کلید را روی گوشی جدید تولید کنید و CSR را ارسال کنید؛ کندتر است و همان مسیری است که صادرکننده پشتیبانی میکند.
پیش از حذف هر چیزی فهرست بررسی را اجرا کنید: دستگاه جدید متصل میشود، آدرس خروج و DNS مطابقت دارند، دامنه هر برنامه همان است که میخواستید، هویت قدیمی باطل شده و هر فایل پیکربندی که نگه داشتید در ذخیرهسازی رمزگذاریشده است.