| gsocket(1) | General Commands Manual | gsocket(1) |
نام (NAME)
gsocket —
برقراری
ارتباط امن
از میان
فایروال
بدون نیاز
به باز کردن
پورت
خلاصه دستور (SYNOPSIS)
gsocket [-qT]
[-s secret]
[-k keyfile]
[-p port]
[program] [args ...]
توضیحات (DESCRIPTION)
ابزار
gsocket
میتواند
برای
توانمندسازی
یک برنامه
جهت
برقراری
ارتباط از
میان
فایروال در
شرایطی
استفاده
شود که
برقراری
اتصال
مستقیم به
یک میزبان
یا ایستگاه
کاری دیگر
امکانپذیر
نیست (پشت NAT
یا فایروال).
سناریوی
معمول شامل
دو ایستگاه
کاری است که
در
شبکههای
خصوصی مجزا
و پشت
فایروالهای
جداگانه
قرار دارند.
ابزار gsocket
توابع
کتابخانه
شبکه
برنامه
(مانند ()connect و ()accept)
را در
اختیار
گرفته و
ترافیک را
رمزگذاری
کرده و از
طریق شبکه
رله سوکت
سراسری (GSRN)
هدایت
میکند.
هیچیک از ایستگاههای کاری نیازی به باز کردن پورت در فایروال خود یا پذیرش اتصالات TCP ورودی ندارند.
این اتصال با استفاده از پروتکل SRP (طبق RFC 5054) همراه با الگوریتم AES-256 و عدد اول ۴۰۹۶ بیتی بهصورت سرتاسری (End-to-End) رمزگذاری میشود. شبکه GSRN تنها ترافیک رمزگذاریشده را مشاهده میکند.
کاربردهای متداول شامل موارد زیر است:
- اتصال ssh از یک ایستگاه کاری به دیگری
- برقراری ارتباط OpenVPN میان دو ایستگاه کاری
- استفاده از netcat بین دو ایستگاه کاری
- و کاربردهای بسیار دیگر.
ایده
آدرسهای IP و
شماره
پورتها را
کنار
بگذارید: دو
برنامه
باید
بتوانند تا
زمانی که یک
عبارت رمز
مشترک (secret) را
میدانند،
با یکدیگر
ارتباط
برقرار
کنند (به جای
دانستن
آدرس IP و
شماره پورت
یکدیگر).
ابزار gsocket
چنین
اتصالی را
بدون توجه
به آدرس IP
محلی یا
موقعیت
جغرافیایی
و مستقل از
آنها
برقرار
میسازد.
این کار با
تحلیل
برنامه و
جایگزین
کردن لایه IP
با سازوکار
انتقال
اختصاصی
خود از طریق
GSRN انجام
میشود.
اتصال
بهصورت
سرتاسری
رمزگذاری
شده است و GSRN
تنها
ترافیک
رمزگذاریشده
را
میبیند.
سناریوی معمول، یک پیکربندی کلاینت/سرور مانند ssh و sshd است: اتصالات برقرارشده با ssh به هر نام میزبانی که به '.gsocket' ختم میشود، (از طریق GSRN) به سرور sshd (پشت فایروال) هدایت میشوند.
تغییر
مسیر به
ازای هر
برنامه
انجام
میگیرد (و
فقط به همان
برنامه
محدود
میشود).
ابزار gsocket
جدول
مسیریابی (routing
table) را تغییر
نمیدهد و
تنظیمات NAT
یا فایروال
را نیز
دستکاری
نمیکند.
این ابزار
همچنین
نیازی به
مجوزهای
کاربر ارشد
(superuser) ندارد.
گزینهها (OPTIONS)
-ssecret- یک عبارت رمز برگزیده توسط کاربر. هر دو طرف اتصال باید از عبارت رمز یکسانی برای برقراری ارتباط استفاده کنند.
-kfile- فایلی که حاوی عبارت رمز است.
-g- تولید یک عبارت رمز تصادفی امن و ارسال آن به خروجی استاندارد.
-q- حالت بیصدا (Quiet). هیچ هشدار یا خطایی را در خروجی چاپ نمیکند.
-T- استفاده از
شبکه تور (TOR).
ابزار
gsocketاز طریق شبکه TOR به GSRN متصل خواهد شد. این گزینه نیازمند نصب و فعال بودن تور است. -pport- محدوده پورتهای شنود TCP برای هدایت و تغییر مسیر [پیشفرض: همه].
اتصالات به هر نام میزبانی که به '*.gsocket' ختم شود یا به آدرس آیپی '127.31.33.7'، از طریق شبکه GSRN هدایت میشوند.
اتصالات به هر نام میزبانی که به '*.thc' ختم شود یا به آدرس آیپی '127.31.33.8'، ابتدا از طریق تور (TOR) و سپس از طریق GSRN هدایت میشوند.
مثالها (EXAMPLES)
مثال ۱
- برقراری
ارتباط OpenSSH
بین دو
ایستگاه
کاری پشت
فایروال:
سرور:
$ gsocket -s MySecret
/usr/sbin/sshd$ gsocket -s MySecret ssh
xaitax@gsocketمثال ۲
- برقراری
ارتباط netcat
میان دو
ایستگاه
کاری پشت
فایروال:
سرور:
$ gsocket -s MySecret nc -lp
31337$ gsocket -s MySecret nc gsocket
31337مثال ۳
- ارتباط OpenVPN
میان دو
ایستگاه
کاری پشت
فایروال:
سرور:
$ gsocket -s MySecret openvpn --dev
tun1 --proto tcp-server --ifconfig 10.9.8.1 10.9.8.2$ gsocket -s MySecret openvpn --dev
tun1 --proto tcp-client --ifconfig 10.9.8.2 10.9.8.1 --remote
gsocketمثال ۴
- ارتباط IRCD
میان دو
ایستگاه
کاری پشت
فایروال:
سرور:
$ gsocket -s MySecret inspircd
--nolog --nofork$ gsocket -s MySecret irssi -c
gsocketمثال ۵
- ارتباط Socat
میان دو
ایستگاه
کاری پشت
فایروال:
سرور:
$ gsocket -s MySecret socat -
TCP_LISTEN:31337$ gsocket -s MySecret socat -
TCP:gsocket:31337راهاندازی در SYSTEMCTL (SYSTEMCTL INSTALLATION)
امکان در دسترس قرار دادن هر سرویس یا دیمنی از میان هر نوع فایروال وجود دارد. در این حالت سرویس تنها از طریق GSRN و فقط در صورتی که کلاینت عبارت رمز را بداند قابل دسترسی خواهد بود. هیچ پورت یا سرویسی در اینترنت عمومی باز و نمایان نمیشود و وجود سرویس پنهان باقی میماند. این مثال سرور openssh-server (سرویس sshd) را از طریق GSRN در دسترس قرار میدهد. هیچکس، حتی گردانندگان GSRN، به پورت، دیمن یا سرویس دسترسی ندارند (زیرا از عبارت رمز بیاطلاع هستند). سرویس جدید در کنار openssh-server موجود همزیستی داشته و هیچ اختلالی در عملکرد آن ایجاد نمیکند.
۱. کپی فایل /etc/systemd/system/sshd به /etc/systemd/system/gs-sshd
۲. ویرایش /etc/systemd/system/gs-sshd و تغییر این سطر:
ExecStart=/usr/sbin/sshd -D
$SSHD_OPTSExecStart=gsocket -s MySecret
/usr/sbin/sshd -D $SSHD_OPTS۳. شروع سرویس تازه ایجاد شده
# systemctl start
gs-sshd۴. بررسی وضعیت سرویس
# systemctl status
gs-sshd۵. اتصال از هر میزبان دیگر به openssh-server تازه ایجاد شده (و پنهان):
$ gsocket -s MySecret ssh
user@gsocketآزمایش و تست (TESTING)
ابزار
gsocket از روش
LD_PRELOAD برای در
اختیار
گرفتن
فراخوانیهای
شبکه از
پردازه
فراخواننده
استفاده
میکند. سپس
شماره پورت
را به عبارت
رمز الحاق
کرده و
پردازه gs-netcat را
برای هدایت
اتصال TCP
اجرا
میکند. این
پیکربندی
را میتوان
با gs-netcat آزمایش
کرد.
آزمون
۱ - سرور gsocket و
کلاینت gs-netcat:
سرور:
$ gsocket -s MySecret nc -lp 1234 #
پورت TCP برابر
۱۲۳۴ است$ gs-netcat -s 1234-MySecret #
توجه کنید:
`<port>-<SECRET>`آزمون
۲ - کلاینت gsocket
و سرور gs-netcat:
سرور:
$ gs-netcat -s 1234-MySecret
-l$ gsocket -s MySecret nc blah.gsocket
1234از نظر
داخلی،
ابزار gsocket
(در سمت
کلاینت) یک
پردازه
پسزمینه gs-netcat
منشعب
میکند که
روی 127.31.33.7 روی
یک پورت
تصادفی TCP
شنود
میکند. سپس
ابزار gsocket
تلاش `nc` برای
تحلیل نام
`blah.gsocket` را تشخیص
داده و آدرس
127.31.33.7 را به `nc`
بازمیگرداند.
سپس پردازه
`nc` در عوض به 127.31.33.7
متصل
میشود و
پردازه gs-netcat (که
بهطور
خودکار
آغاز شده
است) اتصال
را تحویل
گرفته و
ترافیک را
از طریق GSRN
منتقل
میکند.
ابزار `nc`
همچنین
میتواند
برای
آزمایش
مستقیماً
به 127.31.33.7 به جای
blah.gsocket متصل شود:
کلاینت:
$ gsocket -s MySecret nc -n
127.31.33.7 1234آزمون
۳ - سرویس SSHD
از طریق gsocket:
سرور:
$ gsocket -s MySecret /usr/sbin/sshd
-D -p 1234$ gs-netcat -s
1234-MySecretSSH-2.0-OpenSSH_8.4p1
Debian-2استفاده از gs-netcat به عنوان هدایتکننده پورت و ssh برای اتصال:
کلاینت:
$ gs-netcat -s 1234-MySecret -p
44222$ ssh -p 44222
user@127.1آزمون
۴ - اتصال SSH
از طریق gsocket:
روی سرور، یک فوروارد پورت gs-netcat اجرا کنید تا اتصالات ورودی GSRN را به SSHD روی localhost هدایت کند:
سرور:
$ gs-netcat -s 22-MySecret -l -d
127.0.0.1 -p 22$ gsocket -s MySecret ssh
user@gsocketمحیط (ENVIRONMENT)
متغیرهای
محیطی زیر
را میتوان
برای کنترل
رفتار gsocket
تنظیم کرد:
GSOCKET_SOCKS_IP
آدرس IP
سرور TOR (یا هر
سرور SOCKS دیگر)
را تعیین
میکند.
همراه با -T
استفاده
میشود.
پیشفرض 127.0.0.1
است.GSOCKET_SOCKS_PORT
شماره
پورت سرور TOR
(یا هر سرور SOCKS
دیگر). همراه
با -T استفاده
میشود.
پیشفرض 9050
است.GSOCKET_ARGS
رشتهای
حاوی
پارامترهای
اضافی خط
فرمان.
ابتدا
پارامترهای
معمول خط
فرمان
پردازش شده
و سپس
پارامترهای
خط فرمان
موجود در GSOCKET_ARGS
اعمال
میشوند.امنیت (SECURITY)
ارسال گذرواژه به عنوان پارامتر خط فرمان امن نیست. استفاده از گزینه k- یا GSOCKET_ARGS یا وارد کردن گذرواژه در هنگام اعلان ورودی را مد نظر قرار دهید:
$ gsocket -k
<file>$ export GSOCKET_ARGS="-s
MySecret"$ gsocket۱.
امنیت
بهصورت
سرتاسری (End-to-End)
است. بدین
معنی که
رمزگذاری
از کاربر تا
کاربر است (و
نه صرفاً تا
سرورهای GSRN).
شبکه GSRN تنها
دادههای
(رمزگذاریشده)
را میان
کاربران
رله
میکند.
۲. نشست
ارتباطی
۲۵۶ بیتی و
موقت (ephemeral) است.
برای هر
نشست
بهطور
تصادفی از
نو ایجاد
میشود (و بر
پایه
گذرواژه
ساخته
نمیشود).
این ابزار
از SRP
کتابخانه OpenSSL
با
الگوریتم AES-256
و عدد اول
۴۰۹۶ بیتی
بهره
میبرد.
۳.
گذرواژه
میتواند
«ضعیف»
باشد بدون
آنکه امنیت
نشست را
تضعیف کند.
یک حمله
جستجوی
فراگیر (brute force)
علیه یک
گذرواژه
ضعیف، برای
هر بار حدس
زدن
نیازمند
برقراری یک
اتصال جدید
TCP خواهد بود.
۴. از
گذرواژههای
ساده و
ناامن
مانند 'password123'
استفاده
نکنید.
نفوذگر
ممکن است
تصادفاً
همان رمز را
انتخاب
کرده و متصل
شود. در صورت
تردید، از
دستور gs-netcat -g
برای تولید
یک عبارت
رمز قوی
استفاده
کنید.
گذرواژه
طرفین
ارتباط
باید حداقل
به
اندازهای
قوی باشد که
مهاجم
نتواند
تصادفاً در
مدتی که یکی
منتظر
اتصال
دیگری است،
آن را حدس
بزند.
۵. اگر
شخصی
گذرواژه
یکسانی را
با دو نفر به
اشتراک
بگذارد و هر
یک متصل
شوند،
نمیتواند
تشخیص دهد
کدامیک
متصل شده
است.
۶. فرض
کنید فردی
گذرواژه
مشترکی با
کاربر مجاز
و نفوذگر
دارد.
هنگامی که
کاربر مجاز
گوش دادن به
اتصالات را
متوقف کند،
نفوذگر
میتواند
به جای او
شروع به
شنود کند.
کلاینت
هنگام
برقراری
اتصال جدید
نمیتواند
تشخیص دهد
به چه کسی
متصل
میشود. در
صورت
نگرانی
درباره این
موضوع از a <token>-
استفاده
کنید. خلاصه:
هنگام
اشتراکگذاری
یک گذرواژه
با گروهی
بیش از ۲
نفر، فرض بر
این است که
همه افراد
با حسننیت
عمل
میکنند؛
در غیر این
صورت از SSH بر
بستر اتصال
GS/TLS استفاده
نمایید.
۷.
پروتکل SRP
دارای
رازداری
پیشرو
کامل (Perfect Forward Secrecy)
است. این
یعنی حتی در
صورت افشای
گذرواژه در
آینده،
نشستهای
ثبتشده
قبلی
رمزگشایی
نخواهند
شد.
نکات (NOTES)
جدیدترین نسخه از طریق نشانی https://github.com/hackerschoice/gsocket در دسترس است.
همچنین ببینید (SEE ALSO)
gs-netcat(1), gs-sftp(1), gs-mount(1), blitz(1), nc(1), socat(1)
اشکالات (BUGS)
تلاشهای
زیادی
انجام
گرفته تا
ابزار gsocket
در تمامی
حالتهای
گوناگون
خود رفتار
درستی
داشته باشد.
در صورتی که
احساس
میکنید
تحت هر
شرایطی
عملکرد
نادرستی
دارد،
لطفاً به
آدرس (skyper@thc.org)
اطلاع داده
و نحوه
رفتار مورد
انتظار را
بیان
فرمایید.
| March 2, 2021 | Linux 6.12.107+deb13-amd64 |