مدل تهدید
مدل تهدید کامل در فایل THREAT_MODEL.md در مخزن اصلی نگهداری میشود. نسخه مرجع همان فایل است و بسیار دقیقتر است. این صفحه خلاصهای کوتاه برای اپراتورها و کاربران است.
در برابر چه مهاجمانی طراحی شده
Section titled “در برابر چه مهاجمانی طراحی شده”- مهاجمی که شبکه را زیر نظر دارد، ثبت میکند و سرورها را فعالانه بررسی میکند (سانسورچی). این مهمترین حالت است. وضعیت لایه مبهمسازی میگوید ترنسپورتها در برابر آن چه میکنند و چه چیزی را قابلدیدن باقی میگذارند.
- ارائهدهنده بدخواه، و اشتراک، فایل پوسته، لینک یا کارت ارائهدهنده بدخواه.
- نشست دزدیدهشده پنل، نود نفوذشده و همتای بدخواه داخل تونل.
- پروکسی بالادستی بدخواه، میزبان آینه ثابت و افزونه Xray.
- هر کس به ورودی پراکسی نود برسد، ورودیهای پراکسی را ببینید.
- مهاجم روی مسیر بهروزرسانی و دانلود، مهاجم زنجیره تأمین و مهاجم شبکه محلی (مثلا نقطه دسترسی یا سرور DHCP جعلی).
هر تجزیهگری که ورودی شبکه، داده اشتراک، فایل پوسته یا محتوای ارائهدهنده را میخواند، ورودی دست مهاجم فرض میشود.
برای محافظت از چه چیزهایی طراحی شده
Section titled “برای محافظت از چه چیزهایی طراحی شده”- محتوای ترافیک شما بین اپ و نود، که WireGuard آن را رمزنگاری میکند.
- اشتراک شما، که اپ پیش از خواندن آن امضای ارائهدهنده را بررسی میکند.
- مسیرها و تنظیمات DNS دستگاه شما، با کلید قطع (kill switch) تا ترافیک بیرون از تونل نرود.
- کاربران دیگر یک نود در برابر کاربر بدخواه، در چارچوب قوانین مسیریابی نود.
ورودیهای پراکسی
Section titled “ورودیهای پراکسی”نود میتواند ورودیهای پراکسی socks5، http و mixed داشته باشد که به نرمافزارهای دیگر اجازه میدهند از آن مثل پراکسی ساده استفاده کنند (از v0.2.17). شنوندههایی بدون پوششاند: هیچ چیزشان شبیه یک سایت نیست و هیچچیز در آنها رمزگذاری نمیشود. هر اتصال با گذرواژهٔ پراکسی یک کاربر وارد میشود، و بعد از همان دروازهٔ مقصد، قاعدهها، نقطههای خروج، مجوز استفاده، سهمیه و شمارندههای تونل میگذرد. مدل کامل بخش 5.16 فایل THREAT_MODEL.md است، با خطرهای P1 تا P10. معنایش برای اپراتور:
- رمزگذارینشده. هر کس روی مسیر باشد گذرواژه، هر مقصد و محتوا را میخواند. فقط loopback بدون هشدار میگذرد. نشانی خصوصی هشدار میدهد، چون ممکن است به یک نشانی عمومی NAT شده باشد. هر نشانی دیگر
public: trueمیخواهد و هشدار میدهد. پنل ورودی پراکسی را ناامن (Unsafe) رتبه میدهد. روی loopback گوش بدهید، پشت یک تونل یا پوشش TLS که خودتان اداره میکنید. - پراکسی باز نیست. روش ناشناس وجود ندارد. SOCKS5 فقط نام کاربری و گذرواژه عرضه میکند و HTTP با 407 جواب میدهد. ورود یعنی کاربری از پیکربندی که
proxy_passwordدارد و ورودی او را میپذیرد. کاربر غیرفعال، منقضی یا ردشده از سهمیه رد میشود، و قطع شدن اتصالهای کاربر را ظرف یک ثانیه تمام میکند. - حدس زدن. گذرواژه 16 تا 128 نویسه دارد. مبدأیی که ظرف 60 ثانیه 10 ورود به یک نام را ناموفق بزند آن نام را رد میگیرد، و صبر برای یک نام با شکستهایش بیشتر میشود. تعداد اتصال، اتصال برای هر مبدأ و ورودهای ناتمام سقف دارند.
- UDP ورود مخصوص خودش را ندارد. رله فقط دیتاگرامهای آدرس کلاینت و، بیرون از loopback، از پورتی را میبرد که کلاینت گفته. کلاینت پشت NAT UDP نمیگیرد مگر اپراتور
udp_any_portرا روشن کند، که به فرستندهای که آدرس کلاینت را شریک است اجازه میدهد پیش از اولین دیتاگرام کلاینت همبستگی را بگیرد. - راهی به loopback یا شبکههای تونل نود نیست. دروازهٔ مقصد loopback، link-local، آدرسهای فراداده ابری و هر بازهٔ تونل را پیش از هر قاعده رد میکند. آدرسهای عمومی خود نود باز است، مگر قاعدهٔ
host:selfردشان کند، دسترسی به خود سرور را ببینید. نامها را نود resolve میکند، هرگز میزبان. - درخواستی که دیگری را قاچاق کند. خوانندهٔ HTTP سختگیر و کراندار است، یک درخواست ساده برای هر اتصال برده میشود، و چیزی که پشت آن نوشته شود به مبدأ نمیرسد. یک fuzz target هر دو جلوی کار را میپوشاند.
آنچه دفاع نمیشود: هر چه بالا «رمزگذارینشده» گفته؛ سانسورچیای که پورت را پیدا کند میتواند آن را ببندد و بفهمد چیست؛ هر کس گذرواژهٔ پراکسی کاربری را بفهمد تا وقتی عوض نشود روی هر ورودی پراکسی که او را میپذیرد همان کاربر است؛ و اپراتور میبیند کاربران از راه نود چه میکنند. این مدل را هنوز کسی بیرون از پروژه بازبینی نکرده است.
اتصالهای بیرونی Xray
Section titled “اتصالهای بیرونی Xray”یک نود میتواند ترافیک یک خروجی را از راه سرور VLESS، VMess، Trojan یا Shadowsocks یک طرف دیگر بفرستد (v0.2.18 و بعد از آن). مدل کامل بخش 5.17 در THREAT_MODEL.md است، با خطرهای X1 تا X8. برای اپراتور یعنی:
- ارائهدهنده آنچه خروجی میبرد را میبیند. صاحب آن نشانی نود، هر مقصد و هر بایتی را که مقصد خودش محافظت نکرده میبیند، برای همهٔ کاربرانی که از آن میگذرند. کاربران، نشانیهای تونل و کلیدهایشان را نمیبیند. از او ناشناسی نیست.
- سرور ارائهدهنده نمیتواند به نود برگردد. نشانی مستقیم باید قاعدههای اتصال نود را بگذراند، و نام را خود نود جستوجو میکند، نه Xray و نه تحلیلگر میزبان. آن جستوجو DNS ساده روی UDP است، پس هر کس DNS نود را ببیند میتواند نام ارائهدهنده را ببیند. برای پنهان کردنش نشانی را بنویسید.
- هیچ چیز دور اتصال بیرونیِ از کار افتاده نمیچرخد. جریان با یک دلیل تمام میشود. به
direct، خروجی دیگر یا پیشفرض ارائهدهنده نمیرود، وunsupported.udpچنین خروجیای نمیتواندdirectیاviaباشد. - پیوند اشتراک را همان خوانندهای میخواند که برنامهٔ دسکتاپ، و آنچه میگذرد به فیلدهای نوعدار تبدیل میشود. پیوند هیچوقت نگه داشته، نشان داده یا ثبت نمیشود، و گواهیها همیشه بررسی میشوند.
- سوکتها مال Xray هستند. هر اتصال بیرونی یک سوکت Unix در پوشهای است که فقط کاربر نود و کاربر Xray میتوانند وارد آن شوند، با گذرواژهای که با هر شروع تازه ساخته میشود. نود پیش از فرستادن یک بایت بررسی میکند که سوکت مال کاربر Xray است.
- تغییر، Xray را دوباره راه میاندازد، که کاربران ورودیهای Xray را لحظهای قطع میکند.
آنچه دفاع نمیشود: خروج خود Xray که یونیتش محدودش نمیکند، پس باگ در Xray به نشانی ارائهدهنده محدود نیست؛ بایتهای ارائهدهندهٔ بدخواه که Xray میخواندشان، پس نقصی در Xray-core اعتبارنامههای اتصالهای بیرونی و جریانهای همهٔ کاربران Xray را به مهاجم میدهد؛ و در دسترس بودن، چون ارائهدهنده میتواند خروجی را قطع کند. فقط نودهای لینوکسی آن را اجرا میکنند. این مدل را کسی بیرون از پروژه بررسی نکرده است.
اتصالهای بیرونی WireGuard
Section titled “اتصالهای بیرونی WireGuard”یک نود میتواند ترافیک یک خروجی را از راه سرور WireGuard یک طرف دیگر بفرستد (v0.3.6 و بعد از آن). مدل کامل بخش 5.20 در THREAT_MODEL.md است، با خطرهای W1 تا W7. برای اپراتور یعنی:
- سرور خروجی را میبیند. صاحبش نشانی نود، هر مقصد و هر بایتی را که مقصد خودش محافظت نکرده میبیند، برای همهٔ کاربرانی که از آن میگذرند. کاربران، نشانیهای تونل و کلیدهایشان را نمیبیند: هر جریان از یک نشانی تونل بیرون میرود. از او ناشناسی نیست، و سرور بدخواه میتواند جواب DNS و محتوای محافظتنشده را جعل کند.
- سرور نمیتواند به نود برسد. هر چه بفرستد و جواب جریانی نباشد که نود باز کرده، دور ریخته و شمرده میشود و هرگز جواب داده نمیشود: نه reset، نه جواب ping، نه درگاه باز. صفها و تعداد جریانهایش محدودند، پس سیل حافظهٔ نود را بزرگ نمیکند. یک کاربر حداکثر یکچهارم جریانها را نگه میدارد.
- کاربران میتوانند به شبکهٔ خود سرور برسند. همتاهای دیگر و بازههای خصوصیاش برایشان باز است، مگر اینکه قاعدهٔ مسیریابی آن بازهها را رد کند. نود فقط نشانیها و شبکههای خودش را میبندد، و اعتبارسنجی دربارهٔ هر اتصال بیرونی WireGuard هشدار میدهد.
- نام جعلی نمیتواند نود را به خودش بفرستد. نشانیای که loopback باشد، در بازهٔ یک ورودی باشد یا مال خود نود باشد رد میشود. نشانی جعلی به جای دیگر نمیتواند دستدهی را تمام کند، چون کلید سرور در پیکربندی است، پس اتصال بیرونی از کار میافتد و جز دستدهی چیزی فرستاده نمیشود.
- چیزی دور تونلِ از کار افتاده نمیچرخد. حدود 20 ثانیه بعد از ساکت شدن سرور اتصال بیرونی از کار افتاده است، و هر جریان خروجی با دلیل تمام میشود. هرگز به
direct، خروجی دیگر یا پیشفرض نمیرود، وunsupported.udpنمیتواندdirectیاviaباشد. - کلیدها سر جایشان میمانند. کلیدها هرگز نشان داده یا ثبت نمیشوند. کلید نباید جای دیگری از پیکربندی استفاده شده باشد، پس لو رفتن یکی چیز دیگری را باز نمیکند.
آنچه محافظت نمیشود: UDP بیرونی WireGuard ساده است و سانسورچی میتواند بشناسد و ببندد (جایی که مهم است اتصال بیرونی Xray بگذارید)؛ هر اتصال بیرونی روی یک هسته اجرا میشود و هر جریان را دو بار تمام میکند، پس سرعتش محدود است؛ ایرادی در کد WireGuard یا TCP/IP که نود روی بایتهای سرور اجرا میکند برای همان سرور قابل دسترسی است؛ و سروری که دستدهی را تمام کند و بعد همهچیز را دور بریزد اتصال بیرونی را تا rekey یا keepalive بعدی بالا نگه میدارد، حدود 35 ثانیه روی تونل پرترافیک و تا 2.5 دقیقه روی تونل بیکار. این مدل را کسی بیرون از پروژه بازبینی نکرده است.
دسترسی به خود سرور
Section titled “دسترسی به خود سرور”از v0.3.6 کاربران به سرویسهای روی آدرسهای عمومی نود میرسند، مگر قاعدهای رد کند. نام مسیریابی host:self یعنی هر آدرسی که ماشین دارد، که هر 60 ثانیه از رابطها خوانده میشود. اپراتوری که سرویسهای دیگری آنجا اجرا میکند (پنل دیگر، پایگاه داده، پورت مدیریت) {"tag": "no-self", "ip": ["host:self"], "action": "reject"} را به قاعدهها اضافه میکند. این قاعده برای هر خروجی، هر ورودی و هر پیوند نود برقرار است. چیزی این قاعده را برای اپراتور اضافه نمیکند. دسترسی به خود سرور را ببینید.
- باز هم رد میشود، قاعده هرچه باشد: loopback، link-local، آدرسهای فراداده ابری و هر بازهٔ تونل. پنل فقط روی
127.0.0.1گوش میدهد، پس کاربران نمیتوانند به آن برسند. - آنچه قاعده نمیتواند نام ببرد: آدرسی که هیچ رابطی ندارد (آدرس عمومی پشت NAT یکبهیک)، آدرس anycast و آدرس broadcast. اینها در دسترس میمانند.
- سرویسی که روی همهٔ آدرسها گوش میدهد از هر کدام در دسترس است، تا وقتی قاعده اضافه شود.
- آدرس دروازه به DNS، ping و در ورودی
veilwayبه کانال کنترل جواب میدهد، فقط برای ورودی خودش.
پیوندهای نود
Section titled “پیوندهای نود”یک پیوند دو نود را به هم وصل میکند و مدل کاملش در صفحهٔ پیوندهای نود و مدل تهدید است. برای اپراتور یعنی:
- جفتسازی بر دو اثر انگشت تکیه دارد که اپراتورها برای هم میخوانند. چیز دیگری از جفتسازی محافظت نمیکند، و توافق کلید در آن بازبینی بیرونی نداشته است.
- پیوند خودامضا به همان اثر انگشت تکیه دارد. نامزد
tlsباself_signedفقط با پینهایش مورد اعتماد است، بدون مرجع صدور گواهی. هر کس فایل کلید آن ترنسپورت را بدزدد میتواند خودش را جای خروجی جا بزند، تا وقتی پیوند دوباره جفت شود. - کلید تازه گفته میشود، پنهان نمیشود. نود پین هر ترنسپورت
tlsرا به یاد دارد و وقتی عوض شود یک بار هشدار میدهد و پیوندهایی که کلید قدیمی را پین کردهاند نام میبرد. گواهی تازه را باز هم ارائه میدهد. نودی که شماره میگیردpin_mismatchگزارش میدهد، نه «در دسترس نیست»، و هرگز به حالت بدون پین برنمیگردد. - زنجیر کردن بهطور پیشفرض خاموش است. با
allow_chainروی نیمهٔ خروج، ترافیک یک پیوند میتواند از پیوند دیگری ادامه دهد، حداکثر 3 پیوند پشت سر هم، هرگز از upstream. حد گام فقط محافظ حلقه میان نودهایی است که از آن پیروی میکنند. نودِ ورودی نمیتواند آنچه در نود میانی میگذرد را ببیند یا محدود کند، و آن نود هر مقصد جریانهایی که رد میکند را میبیند. Chaining و Pins and self-signed links را ببینید.
اشتراک ارائهدهندگان دیگر
Section titled “اشتراک ارائهدهندگان دیگر”خروجیای که از اشتراک ارائهدهندهٔ دیگری استفاده میکند (upstream) تابع بخش 5.15 در THREAT_MODEL.md است، با خطرهای U1 تا U9. ارائهدهنده نشانی نود و هر مقصد، نام DNS و بایت محافظتنشدهٔ جریانهایی که به او فرستاده میشود را میبیند. ارائهدهندهٔ بدخواه نمیتواند نود را به سمت میزبان یا شبکههای خودش بکشاند: هر نشانی اتصال هر پروفایلی که فهرست میکند، اگر loopback، بازهٔ یک ورودی، خود نود یا خصوصی باشد (مگر مجاز شده)، رد میشود. شکستگذر میان پروفایلها محدود است، پس ارائهدهنده با قطع کردن نمیتواند نود را در میان آنها بچرخاند. PATCH /v1/upstreams/{tag} فقط پروفایل، شکستگذر، ترنسپورت و خروجی را عوض میکند، هرگز پیوند، کلیدها یا آنچه نود اجازهٔ اتصال به آن دارد را. هیچ چیز دور upstream از کار افتاده نمیچرخد.
محدودیت سرعت
Section titled “محدودیت سرعت”speed_up و speed_down یک کاربر فقط دیر میکنند یا دور میریزند. هرگز جریانی را مسیر دیگری نمیدهند و تصمیم یک قاعده را عوض نمیکنند. TCP که نود بهصورت جریان نگه میدارد دیر میشود و ترافیک دیگر بالاتر از حد دور ریخته و شمرده میشود. DNS و کانال کنترل هرگز دور ریخته نمیشوند. حد برای هر نود است، پس کاربری که همزمان روی چند نود آنلاین است روی هر کدام حد را میگیرد، و سقف برای هر حساب ساخته نشده است.
میزان بار خروجی
Section titled “میزان بار خروجی”خروجیای که تنظیم load دارد به دستگاهها سطحی از کم، متوسط یا زیاد میگوید، نه هرگز عدد. سطح فقط وقتی عوض میشود که در دو نگاه با فاصلهٔ 10 ثانیه مانده باشد، و تغییر حداکثر دقیقهای یک بار به دستگاه گفته میشود. پس یک همتا حداکثر میفهمد خروجی شلوغتر شده، یک دقیقه دیرتر، نه اینکه یک کاربر دیگر کی شروع یا تمام میکند. بدون این تنظیم نود چیزی از ترافیک بقیهٔ کاربران نمیفرستد.
در برابر چه چیزهایی محافظت نمیکند
Section titled “در برابر چه چیزهایی محافظت نمیکند”- تشخیص. هیچ ترنسپورتی غیرقابلتشخیص یا غیرقابلمسدودسازی معرفی نمیشود. همه ترنسپورتها Detectable رتبهبندی میشوند.
- ناظری که هر دو سر را میبیند. کسی که اتصال شما و سمت دور نود را با هم زیر نظر دارد، میتواند آنها را با زمانبندی و حجم تطبیق دهد.
- ارائهدهنده. نود آدرس شما، هر سایتی که باز میکنید و هر نامی که جستجو میکنید را میبیند. Veilway یک VPN است، نه شبکه ناشناسساز.
- دستگاه، نود یا میزبان پنل نفوذشده. اقدامهای طراحی فقط دامنه گسترش یک نفوذ را محدود میکنند و از ماشین نفوذشده محافظت نمیکنند.
- حملههای سنگین ازکارانداختن سرویس به آدرس نود و دسترسی فیزیکی به دستگاه بازشده.
- امنیت خود پروتکلهای Xray. امنیت آنها همان است که نرمافزار Xray فراهم میکند.
گزارش آسیبپذیری
Section titled “گزارش آسیبپذیری”issue عمومی باز نکنید. از فرم خصوصیای که در SECURITY.md آمده استفاده کنید: گزارش آسیبپذیری. آدرس واقعی سرور، کلید، گذرواژه و لینک اشتراک را از گزارش حذف کنید.