این روش امکان جایگزینی بسته در سطح اتصالات TCP را می دهد که از داخل یک تونل رمزگذاری شده عبور می کنند، اما اجازه نمی دهد تا در اتصالاتی که از لایه های رمزگذاری اضافی استفاده می کنند (به عنوان مثال، TLS، HTTPS، SSH) استفاده شود. الگوریتم های رمزگذاری مورد استفاده در VPN اهمیتی ندارند، زیرا بسته های جعلی از رابط خارجی می آیند و توسط هسته به عنوان بسته هایی از رابط VPN پردازش می شوند. محتمل ترین هدف حمله، تداخل با اتصالات HTTP رمزگذاری نشده است، اما
جعل بسته موفقیت آمیز برای تونل های ایجاد شده با استفاده از OpenVPN، WireGuard و IKEv2/IPSec نشان داده شده است. Tor مستعد این مشکل نیست، زیرا از SOCKS برای ارسال ترافیک استفاده می کند و به یک رابط حلقه بک متصل است. برای IPv4، اگر rp_filter روی حالت Loose تنظیم شده باشد، حمله ممکن است (sysctl net.ipv4.conf.all.rp_filter = 2). در ابتدا، بیشتر سیستم ها از حالت "سخت" استفاده می کردند، اما از آن شروع می شد
مکانیزم rp_filter
مسیر پاسخ ممکن است از طریق یک رابط شبکه به غیر از رابطی که بسته دریافتی از طریق آن رسیده است عبور کند.
در حالت شل، یک بسته دریافتی در جدول مسیریابی بررسی می شود، اما اگر آدرس منبع از طریق هر رابط شبکه موجود قابل دسترسی باشد، معتبر تلقی می شود. حمله پیشنهادی بر این اساس است که مهاجم می تواند بسته ای را با یک آدرس منبع جعلی مربوط به رابط VPN ارسال کند و علیرغم اینکه این بسته از طریق رابط شبکه خارجی و نه از طریق VPN وارد سیستم می شود، در rp_filter حالت "Loose" چنین بسته ای دور انداخته نخواهد شد.
برای انجام یک حمله، مهاجم باید دروازه ای را که کاربر از طریق آن به شبکه دسترسی پیدا می کند، کنترل کند (به عنوان مثال، از طریق یک سازمان MITM، زمانی که قربانی به یک نقطه دسترسی بی سیم کنترل شده توسط مهاجم متصل می شود، یا از طریق
با تولید جریانی از بستههای ساختگی که در آن آدرس IP رابط VPN جایگزین میشود، تلاش میشود تا بر اتصال ایجاد شده توسط مشتری تأثیر بگذارد، اما تأثیر این بستهها تنها از طریق تجزیه و تحلیل غیرفعال جریان ترافیک رمزگذاریشده مرتبط قابل مشاهده است. با بهره برداری از تونل برای انجام یک حمله، باید آدرس IP رابط شبکه تونل اختصاص داده شده توسط سرور VPN را پیدا کنید و همچنین تعیین کنید که اتصال به یک میزبان خاص در حال حاضر از طریق تونل فعال است.
برای تعیین IP رابط شبکه مجازی VPN، بسته های SYN-ACK به سیستم قربانی ارسال می شود و به طور متوالی کل محدوده آدرس های مجازی را شمارش می کند (اول از همه، آدرس های استفاده شده در VPN به طور پیش فرض شماره گذاری می شوند، به عنوان مثال، OpenVPN از زیر شبکه 10.8.0.0/24 استفاده می کند). وجود آدرس را می توان بر اساس دریافت پاسخ با پرچم RST قضاوت کرد.
به روشی مشابه، وجود اتصال به یک سایت خاص و شماره پورت در سمت مشتری تعیین می شود - با مرتب سازی شماره پورت ها، یک بسته SYN به عنوان آدرس منبع برای کاربر ارسال می شود که در آن سایت IP جایگزین شده است و آدرس مقصد یک IP مجازی مجازی است. پورت سرور را می توان پیش بینی کرد (80 برای HTTP)، و شماره پورت در سمت کلاینت را می توان با نیروی بی رحم محاسبه کرد و برای اعداد مختلف تغییر در شدت پاسخ های ACK را در ترکیب با عدم وجود بسته با RST تجزیه و تحلیل کرد. پرچم.
در این مرحله، مهاجم هر چهار عنصر اتصال را میداند (آدرسهای IP منبع/پورت و آدرس IP مقصد/درگاه)، اما برای تولید بستهای ساختگی که سیستم قربانی آن را بپذیرد، مهاجم باید دنباله TCP و تعیین کند. اعداد تصدیق (seq و ack) - اتصالات. برای تعیین این پارامترها، مهاجم به طور مداوم بستههای RST جعلی را ارسال میکند و اعداد دنبالهای مختلف را امتحان میکند تا زمانی که یک بسته پاسخ ACK را شناسایی کند که ورود آن نشان میدهد که عدد در پنجره TCP قرار میگیرد.
در مرحله بعد، مهاجم با ارسال بسته هایی با همان تعداد و مشاهده رسیدن پاسخ های ACK، صحت تعریف را روشن می کند و پس از آن تعداد دقیق دنباله فعلی را انتخاب می کند. این کار با این واقعیت پیچیده است که پاسخ ها در داخل یک تونل رمزگذاری شده ارسال می شوند و حضور آنها در جریان ترافیک رهگیری شده تنها با استفاده از روش های غیر مستقیم قابل تجزیه و تحلیل است. اینکه آیا یک کلاینت بسته ACK را به سرور VPN ارسال می کند یا نه، بر اساس اندازه و تأخیر پاسخ های رمزگذاری شده، که با ارسال بسته های جعلی مرتبط است، تعیین می شود. به عنوان مثال، برای OpenVPN، یک بسته رمزگذاری شده با اندازه 79 به شما امکان می دهد به طور دقیق قضاوت کنید که یک ACK در داخل وجود دارد.
تا زمانی که حفاظت از حمله به عنوان یک روش موقت برای مسدود کردن مشکل به هسته سیستم عامل اضافه شود
iptables -t raw -I PREROUTING ! -i wg0 -d 10.182.12.8 -m addrtype ! --src-نوع LOCAL -j DROP
یا برای nftables
nft ip جدول را به صورت خام اضافه کنید
nft add chain ip raw prerouting '{ type filter hook prerouting priority 0; }'
nft add rule ip raw prerouting 'iifname != "wg0" ip daddr 10.182.12.8 fib saddr type != local drop'
برای محافظت از خود در هنگام استفاده از تونلهایی با آدرسهای IPv4، فقط rp_filter را روی حالت "Strict" قرار دهید ("sysctl net.ipv4.conf.all.rp_filter = 1"). در سمت VPN، روش تشخیص شماره دنباله را می توان با افزودن padding به بسته های رمزگذاری شده مسدود کرد و همه بسته ها را به اندازه یکسان کرد.
منبع: opennet.ru