RKNHardering Help

مسیرهای قدیمی از طریق نام‌های ثابت رابط VPN

شناسه: ROUTE_VPN_INTERFACE دسته: مسیرها و پشتهٔ شبکه وضعیت در RKNHardering 2.10.0: بررسی فعال نقش در حکم نهایی: بالا

این صفحه پیاده‌سازی واقعی RKNHardering 2.10.0 را توضیح می‌دهد. در آن مشخص شده است چه اقدام‌هایی بدون روت ممکن‌اند، چه چیزهایی به روت نیاز دارند و کدام راهکار فقط یک سیگنال را کاهش می‌دهد، بی‌آن‌که VPN را به‌طور کامل پنهان کند.

چه چیزی بررسی می‌شود و چرا

detectVpnRoutes() فایل /proc/net/route را می‌خواند، ردیف‌های مربوط به tun0، tun1، utun0، ppp0، wg0 و wg1 را می‌شمارد و اگر شمار بیشتر از صفر باشد route_vpn_iface|vpn_routes=N را تولید می‌کند. این سیگنال قدیمی با اطمینان بالا است.

شرط دقیق فعال‌شدن

دست‌کم یک ردیف در /proc/net/route از نام ثابت رابط VPN استفاده کند.

معنای نتیجه

این یک نشت مستقیم IPv4 از procfs است و به پیش‌فرض‌بودن مسیر وابسته نیست.

تأثیر این خط بر گزارش: این خط detected=true را تنظیم می‌کند و به‌عنوان یک نشانهٔ محلی با اطمینان بالا در نظر گرفته می‌شود.

محدودیت‌ها و مثبت‌های کاذب احتمالی

در نسخه‌های جدیدتر Android، SELinux اغلب دسترسی procfs را برای برنامهٔ عادی می‌بندد؛ در آن حالت نبود خط به‌معنای پاک‌بودن سیستم نیست. IPv6 و netlink با سیگنال‌های دیگر پوشش داده می‌شوند.

این خط باید همراه با سیگنال‌های مجاور ارزیابی شود. پاک‌بودن نتیجهٔ یک API به‌تنهایی Java Binder، libc، netlink خام/فراخوانی مستقیم سامانه، procfs/sysfs، سوکت‌های محلی و نشانه‌های سمت سرور را هم‌زمان پوشش نمی‌دهد.

توصیه‌ها برای این بردار

بدون روت

بدون روت، طراحی مسیریابی را اصلاح کنید، نه نحوهٔ نمایش جدول را. برای تلفنی پاک از دروازهٔ خارجی استفاده کنید. اگر VPN در VpnService باقی می‌ماند، split routing را طوری تنظیم کنید که برنامهٔ تحت آزمون واقعاً از شبکهٔ فیزیکی مورد انتظار خارج شود؛ اما این را پنهان‌سازی مسیرهای محلی ندانید، زیرا رابط و قواعد policy ممکن است قابل مشاهده بمانند. روی دستگاه در حال استفاده مسیرها را با ip route حذف نکنید؛ Android و سرویس VPN آن‌ها را دوباره می‌سازند و ممکن است اتصال قطع شود.

با روت

روی دستگاه روت‌شده، پس‌زمینه باید منبع داده را فیلتر کند، نه فقط libc را. در VPNHide بالادستی، پس‌زمینه‌های هسته برای ioctl، netlink و برخی بردارهای route/procfs طراحی شده‌اند و Zygisk یک گزینهٔ مشروط باقی می‌ماند. kmod و KPM را هم‌زمان نصب نکنید، زیرا ممکن است همان توابع هسته را رهگیری کنند. VPNHide Next پوشش گسترده‌تری برای PMTU/MSS/qdisc/BPF ادعا می‌کند، اما این ادعای بیرونی باید روی همان هسته بازتولید شود. VPNHide بالادستی فیلتر /proc/net/route را مستند کرده است؛ وقتی سیاست SELinux رام اجازهٔ خواندن فایل را می‌دهد، پس‌زمینهٔ هسته باید دسترسی خام open/read را نیز پوشش دهد.

روش راستی‌آزمایی نتیجه

adb shell cat /proc/net/route 2>&1 | head -80

permission denied یعنی مسیر برای پوسته قابل دسترسی نیست؛ برنامه ممکن است نتیجهٔ متفاوتی بگیرد.

پس از هر تغییر، RKNHardering و سرویس‌گیرندهٔ VPN را به‌اجبار متوقف کنید، هر دو را دوباره اجرا کنید و اسکن کامل را تکرار کنید. Zygisk، Xposed و ماژول‌های هسته معمولاً به راه‌اندازی مجدد دستگاه نیاز دارند. فقط همین خط را مقایسه نکنید؛ سیگنال‌های مجاور را نیز بررسی کنید، زیرا یک هوک ناقص اغلب میان APIها ناسازگاری ایجاد می‌کند.

مجوزهای لازم و خطرها

خود پروب با مجوزهای معمول برنامه اجرا می‌شود و روت درخواست نمی‌کند. دستورهای ADB زیر فقط برای جهت‌یابی تشخیصی‌اند: adb shell با UID دیگری اجرا می‌شود و ممکن است نسبت به فرایند برنامه اطلاعات بیشتر یا کمتری ببیند. آزمون تعیین‌کننده، اجرای دوبارهٔ بررسی درون برنامه پس از توقف اجباری است.

خطرها

procfs مانند فایل معمولی قابل ویرایش نیست. حذف مسیرها اتصال شبکه را قطع می‌کند.

بازگردانی

آخرین تغییر را برگردانید: ماژول یا قاعدهٔ افزوده‌شده را با مدیر معمول خودش غیرفعال کنید، دستگاه را دوباره راه‌اندازی کنید و اسکن خط مبنا را تکرار کنید. روی وضعیتی ناشناخته هوک دیگری لایه نکنید.

سطح شواهد

بالا. با تجزیه‌گر /proc/net/route و فهرست نام‌های ثابت راستی‌آزمایی شده است؛ نوع نتیجه بالا است.

وضعیت یک راهکار شخص ثالث خودبه‌خود به این دستگاه تعمیم پیدا نمی‌کند. ادعای سازندهٔ ماژول فقط فرضیهٔ آغازین است؛ تأیید واقعی به نتیجه‌ای تکرارپذیر از RKNHardering روی همان نسخهٔ Android، میان‌افزار و هسته نیاز دارد.

منابع و تاریخ آخرین راستی‌آزمایی

سیگنال‌های مرتبط: route-table, proc-ipv6-route-vpn, vpn-policy-rules.

بازگشت به مرجع بررسی‌های بومی