یه چیزی هست که تقریبا توی کانفیگ همتون هست ولی کمتر کسی میدونه دقیقا چیکار میکنه :))
توضیح میدم...
منظورم اینه:
flow: xtls-rprx-vision
طوری توضیح میدم که حتی مبتدیا هم کامل متوجه بشن <:
اول باید مشکلشو بفهمیم که اسمش TLS in TLS هست
وقتی با VLESS یا Trojan که روی TLS سوارن یه سایت HTTPS باز میکنید
مرورگرتون خودش با اون سایت یه TLS جدا میزنه
این TLS میره داخل تونل پروکسی که خودش TLS هست
یعنی یه TLS داریم داخل یه TLS دیگه :/
خب مشکلش چیه؟ همه چی که رمزنگاری شده :))
رمزنگاری محتوا رو قایم میکنه ولی شکل ترافیک رو نه
فیلترینگ نمیتونه بخونه داخل پکتا چیه ولی میبینه هر پکت چقدر بزرگه
از کدوم طرف اومده و با چه فاصله ای
مثلا handshake تی ال اس یه ریتم ثابت داره:
کلاینت ClientHello میفرسته
سرور یه جواب چند کیلوبایتی میده (سرتیفیکیت و بقیه چیزا)
کلاینت یه پیام کوچیک Finished میفرسته و تازه دیتا شروع میشه :))
حالا توی TLS in TLS فیلترینگ چی میبینه؟
اول یه handshake عادی بین شما و سرور پروکسی
و درست بعدش توی همون اتصال دوباره همون ریتم handshake تکرار میشه 😁
یه اتصال HTTPS معمولی بعد از handshake مستقیم میره سراغ درخواست و جواب
دوبار پشت هم handshake نمیکنه
پس همین میشه یه امضای واضح...
این فقط تئوری نیستا تحقیق کردم:
سال ۲۰۲۴ یه تیم محقق توی کنفرانس USENIX Security نقش 'سانسورچی دلقک' رو بازی کردن و توی یه ISP با بیش از یه میلیون کاربر نشون دادن با همین handshake داخلی میشه پروکسیارو تشخیص داد
-------
خب Vision چیکار میکنه؟
دو تا کار:
1-- padding
اون چندتا پکت اول که پیامای handshake داخلی توشونه (ClientHello و ServerHello) رو با بایت تصادفی بزرگ تر میکنه که اندازه ها اون ریتم آشنا رو نداشته باشن
2-- direct
(بخونید مهمه این قسمت)
دیتای سایتی که باز کردید خودش با TLS رمزنگاری شده...
ولی پروکسی یه بار دیگه رمزنگاریش میکنه
یعنی رو چیزی که خودش لاک بود یه قفل اضافه هم میزنیم :))
Vision
هدر رکوردای TLS داخلی رو میخونه (هدرا رمزنگاری نشدن)
همین که میبینه ترافیک داخلی TLS 1.3 هست و رکوردای رمزنگاری شدش شروع شد
به سمت مقابل خبر میده و از اون لحظه قفل بیرونی رو برمیداره
رکوردای TLS خود سایت همونجوری مستقیم روی اتصال میرن
نتیجه؟:
رکوردای TLS 1.3 از بیرون همه یه شکلن
پس از اون به بعد فیلترینگ یه جریان TLS میبینه نه دوتا
امنیتش هم اوکیه
دیتای سایت خودش با TLS 1.3 رمزنگاری شده
اطلاعات پروکسی مثل UUID و آدرس مقصد هم قبلش زیر قفل بیرونی رفتن
یه سود هم داره:
رمزنگاری دوبل حذف میشه و CPU کمتر مصرف میشه :))
روی لینوکس هم از splice کرنل استفاده میکنه
یعنی دیتا بدون اینکه وارد حافظه Xray بشه مستقیم از یه سوکت میره تو سوکت بعدی.
چند تا نکته:
Vision
فقط با VLESS کار میکنه و دو حالت داره اینا هستن:
حالت اول: روی TCP با TLS یا REALITY
اگه ترافیک داخلی TLS 1.3 باشه direct کامل و splice انجام میشه
حالت دوم: با VLESS Encryption جدید
محدودیت ترنسپورت نداره
اگه TCP باشه
باز splice میکنه اگه نه فقط از رمزنگاری دوبل خلاص میشید
[ پشت CDN اون یکی شدن دو TLS اتفاق نمیفته چون سی دی ان وسط راه TLS رو باز میکنه. ]
Vision
پیشفرض UDP پورت 443 یعنی QUIC رو رد میکنه که مرورگر برگرده روی HTTPS معمولی
یه نکته flow:
باید هم سمت سرور ست بشه هم کلاینت.
و
"ورژن های جدید Xray (مثلا 26.1.18) اگه VLESS رو بدون flow بزنید توی لاگ اخطار deprecated میدن"
البته Vision جادو نیست :/
چون padding فقط پکتا رو بزرگ تر میکنه ولی تعداد رفت و برگشتای اول اتصال رو نمیتونه کم کنه
همون مقاله هم گفته padding تصادفی به تنهایی محدودیت داره
امیدوارم مفید بوده باشه...
Post #335
9.43K
- ❤ 292
- 🔥 25
- 👍 21
- ❤🔥 9