
يحاكي المنافذ المفتوحة وتوقيعات الخدمة عبر جميع منافذ TCP البالغ عددها 65535 لإبطاء الاستطلاع، وإرباك الماسحات الضوئية، وإهدار موارد المهاجمين بخدمات مزيفة مقنعة والتصيد (tarpitting).
Portspoof يحاكي المنافذ المفتوحة وتوقيعات الخدمات عبر جميع منافذ TCP الـ 65535، مما يحول مرحلة الاستطلاع من مسح سريع إلى عملية طويلة ومستهلكة للموارد. يرى الماسحون آلاف الخدمات المزيفة المقنعة، مما يجعل من غير العملي تحديد سطح الهجوم الحقيقي.
الهدف الأساسي لـ Portspoof هو جعل الاستطلاع بطيئًا ومكلفًا وغير موثوق للمهاجمين. بدلاً من مسح Nmap قياسي مدته 5 ثوانٍ يرسم كل خدمة حقيقية على النظام، يرى المهاجم الذي يواجه Portspoof 65535 منفذًا مفتوحًا، كل منها يدير ما يبدو كخدمة مشروعة مختلفة. لا توجد طريقة سريعة لمعرفة أي منها حقيقي.
SYN+ACK لكل محاولة اتصال.nmap -sV -p-) يتجاوز الحدود العملية بكثير.مثال لمسح Nmap:
$ nmap -p 1-20 target
Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for target
Host is up (0.00016s latency).
PORT STATE SERVICE
1/tcp open tcpmux
2/tcp open compressnet
3/tcp open compressnet
4/tcp open unknown
5/tcp open rje
6/tcp open unknown
7/tcp open echo
8/tcp open unknown
9/tcp open discard
10/tcp open unknown
11/tcp open systat
12/tcp open unknown
13/tcp open daytime
14/tcp open unknown
15/tcp open netstat
16/tcp open unknown
17/tcp open qotd
18/tcp open unknown
19/tcp open chargen
20/tcp open ftp-data
يستجيب Portspoof لفحوصات الخدمة بتوقيعات صالحة مولدة ديناميكيًا تعتمد على قاعدة بيانات ضخمة من التعبيرات المنتظمة. نتيجة لذلك، لن يتمكن المهاجم من تحديد أي أرقام المنافذ التي يستخدمها نظامك بالفعل.
مثال لمسح الإصدار (المنافذ 1–100):
$ nmap -sV -p 1-100 target
Nmap scan report for target
Host is up (0.00016s latency).
PORT STATE SERVICE VERSION
1/tcp open tcpmux?
2/tcp open irc ircu ircd
3/tcp open tcpwrapped
5/tcp open http Polycom CMA Global Address Book (GAB) httpd
10/tcp open http PGP Universal httpd
11/tcp open http SnapStream Media Beyond TV PVR http config
12/tcp open pop3 Novell GroupWise pop3d
13/tcp open http micro_httpd
15/tcp open ssh OpenSSH r (protocol 8; NCSA GSSAPI authentication patch)
16/tcp open ftp QMS/Minolta Magicolor 2200 DeskLaser printer ftpd
17/tcp open smtp Network Box smtpd
21/tcp open ftp?
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
23/tcp open tcpwrapped
25/tcp open smtp?
27/tcp open http BMC/Marimba Management http config
37/tcp open http Indy httpd qlRKjiF
39/tcp open pop3
41/tcp open ftp VSE ftpd WhH
43/tcp open imap Scalix imapd 6
46/tcp open telnet AXIS webcam telnetd 96747 (Linux)
49/tcp open smtp Openwave Email Mx smtpd
50/tcp open http 3Ware web interface 3v (RAID storage)
51/tcp open ftp WebStar 4dftp ...
53/tcp open tcpwrapped
55/tcp open webdav Tonido WebDAV
56/tcp open tor-control Tor control port (Authentication required)
59/tcp open irc ircu ircd
60/tcp open rtsp GStreamer rtspd
64/tcp open http BaseHTTPServer CAxoE (Mercurial hg serve; Python LDkW)
66/tcp open telnet Slirp PPP/SLIP-on-terminal emulator telnetd
70/tcp open smtp qpsmtpd
71/tcp open smtp Microsoft Exchange smtpd
73/tcp open http Avaya IP Office VoIP PBX httpd
77/tcp open smtp Zeus SMTPS smtpd
79/tcp open ftp Sambar ftpd
80/tcp open tcpwrapped
81/tcp open imap-proxy nginx imap proxy
82/tcp open ssh (protocol 811)
83/tcp open http peercast.org
88/tcp open csta Alcatel OmniPCX Enterprise
90/tcp open http WASD httpd
91/tcp open http Fortinet FortiGate 50B firewall http config
93/tcp open imap ModusMail imapd 4
98/tcp open ssh Sysax Multi Server sshd 7 (protocol 940)
99/tcp open http 2Wire HomePortal http config 5473
100/tcp open newacct?
تعني هذه التقنيات مجتمعة ما يلي:
nmap -sV -p-) مع إعدادات الفخ الافتراضية أكثر من 10 ساعات ويولد مئات الميغابايت من البيانات المزيفة.ترسل الخدمات الحقيقية (SSH، SMTP، FTP، HTTP) رسالة ترحيبية وتبقي الاتصال مفتوحًا، في انتظار إدخال العميل. المحاكاة المقنعة تعني فعل الشيء نفسه: قبول، إرسال، احتفاظ. لكن نموذج الخيط لكل عميل يستهلك الذاكرة ووحدة المعالجة المركزية في تبديل السياق، وعلى نطاق واسع ينفد موارد المدافع قبل نفاد صبر المهاجم. تصبح أداة الخداع ناقل هجوم رفض الخدمة الذاتي.
النهج: حلقة أحداث epoll أحادية الخيط. يتم تعيين وضع توصيل لكل منفذ عند بدء التشغيل: بعضها يدفع رسالة ترحيبية فورًا، والبعض الآخر ينتظر أن يرسل العميل بيانات قبل الرد، والبعض الآخر يبقى صامتًا. يتم توزيع أوقات الاحتفاظ عبر مراتب حجمية (عشرات الميلي ثوانٍ إلى دقائق) مع تشويش لكل اتصال، بحيث لا تعود الفحوصات المتكررة لنفس المنفذ بتوقيت متطابق.
هذا مهم لأنه بدونه، يمكن للمهاجم إرسال بيانات غير صالحة لكل منفذ وقياس توقيت الاستجابة: الخدمات الحقيقية تُغلق بسرعة (بروتوكول خاطئ)، بينما الفخ الساذج يحتفظ لثوانٍ. مع الأوضاع المختلطة والانتشار الزمني الواسع، تغلق آلاف المنافذ المزيفة أيضًا في نفس نطاق الخدمات الحقيقية. لا يوجد حد واضح للتصفية بناءً عليه.
يعمل الاقتصاد بسبب عدم التماثل:
أوضاع التوصيل لكل منفذ ثابتة طوال عمر العملية ولكنها غير متوقعة عبر عمليات إعادة التشغيل. أوقات الاحتفاظ بها مكون عشوائي لكل اتصال بحيث تُظهر الفحوصات المتكررة تباينًا طبيعيًا، مشابهًا للخدمات الحقيقية تحت الحمل.
الإصدار 2.0 يستبدل سلوك الرسالة الترحيبية والإغلاق الأصلي الذي كان عرضة لتجاوز إغلاق الاتصال (انظر منشور مدونة Vicarius/Hored1971). محرك الفخ يحتفظ بجميع الاتصالات مفتوحة مع توقيت مختلط، مما يهزم تصفية إغلاق الاتصال، وبصمة التوقيت، وتحليل الرسالة الترحيبية، ونمذجة الأنماط الإحصائية.
تأكد من توفر مترجم C++ و CMake (الإصدار 3.10+).
mkdir build && cd build
cmake -DCMAKE_INSTALL_SYSCONFDIR=/etc ..
make
sudo make install
يعمل Portspoof في مساحة المستخدم ولكنه يعتمد على قواعد جدار الحماية الخاصة بالنظام لاعتراض حركة المرور الموجهة إلى منافذ أخرى.
أعد توجيه كل حركة مرور TCP الواردة (المنافذ 1-65535) إلى منفذ Portspoof (الافتراضي 4444).
Linux (iptables):
# استبعد الخدمات الحقيقية أولاً، ثم أعد توجيه الباقي إلى Portspoof
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j RETURN
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -j REDIRECT --to-ports 4444
ملاحظة: استبدل eth0 بواجهة الشبكة الخاصة بك. أضف قاعدة RETURN لكل منفذ يدير خدمة حقيقية.
لجعل هذا دائمًا، يمكنك حفظ قواعد iptables الخاصة بك أو استخدام iptables-config المتوفر في دليل system_files.
يمكنك إضافة Portspoof إلى نصوص بدء التشغيل الخاصة بك باستخدام الأمثلة في system_files/init.d/.
يولد هذا الوضع ويغذي ماسحات المنافذ بتوقيعات خدمة مزيفة.
portspoof -c /etc/portspoof.conf -s /etc/portspoof_signatures -D
مع توقيتات فخ مخصصة (الاحتفاظ بكل اتصال بين 10 و 60 ثانية):
portspoof -s /etc/portspoof_signatures -t 10 -T 60 -D
يقوم هذا الوضع ببساطة بإرجاع حالة OPEN لكل محاولة اتصال دون إرسال رسائل ترحيبية للخدمة. لا تزال الاتصالات محتجزة في الفخ.
portspoof -D
يمكن استخدام Portspoof لتشويش أدوات المسح عن طريق إرسال حمولات عشوائية أو قائمة على قائمة كلمات.
تشويش باستخدام المولد الداخلي:
# يولّد حمولات عشوائية بحجم عشوائي
portspoof -1 -v
تشويش باستخدام قائمة كلمات:
portspoof -f payloads.txt -v
قاعدة REDIRECT الأساسية أعلاه تعمل، لكن الماسح العدواني لا يزال بإمكانه محاولة إغراق Portspoof بالاتصالات. تضيف مجموعة القواعد التالية تحديد المعدل والحظر التلقائي للمضيفين الذين يتجاوزون حد الاتصال. يتم استبعاد المنافذ التي تستضيف خدمات حقيقية (SSH في هذا المثال) من إعادة التوجيه ولكنها لا تزال محمية بقاعدة الحظر العالمية.
# --- NAT: أعد توجيه كل شيء باستثناء الخدمات الحقيقية ---
# أضف قاعدة RETURN لكل منفذ تستخدمه بالفعل (SSH، HTTP، إلخ.)
iptables -t nat -A PREROUTING -p tcp --dport 22 -j RETURN
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 4444
# --- FILTER: دفاع متعمق ---
# اسمح بحلقة الاسترجاع (حرج: يمنع كسر الخدمات المحلية)
iptables -A INPUT -i lo -j ACCEPT
# إذا تم وضع علامة على عنوان IP هذا كمسيء، أسقط كل شيء (صامت، لا RST)
iptables -A INPUT -m recent --name PORTSCAN --rcheck --seconds 60 -j DROP
# حدد معدل SYNs الجديدة لكل عنوان IP مصدر
iptables -A INPUT -p tcp --syn -m hashlimit \
--hashlimit-above 10/sec --hashlimit-burst 30 \
--hashlimit-mode srcip --hashlimit-name syn_throttle -j DROP
# إذا احتفظ عنوان IP واحد بـ 100+ اتصال بـ portspoof، ضع علامة وأسقط
iptables -A INPUT -p tcp --syn --dport 4444 -m connlimit \
--connlimit-above 100 --connlimit-mask 32 \
-m recent --name PORTSCAN --set -j DROP
# اسمح بحركة المرور المنشأة والاتصالات الجديدة
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --syn -j ACCEPT
iptables -A INPUT -j DROP
للنشر عالي الحركة، قم بزيادة حجم قائمة xt_recent:
echo "options xt_recent ip_list_tot=10000" > /etc/modprobe.d/xt_recent.conf
وضبط تتبع اتصالات النواة:
sysctl -w net.netfilter.nf_conntrack_max=131072
sysctl -w net.core.somaxconn=4096
Portspoof Pro يوسع نطاق الخداع من مضيف واحد إلى شبكة بأكملها. مستشعر واحد يحاكي شبكات /16 كاملة: آلاف عناوين IP، لكل منها خدمات فريدة عبر جميع المنافذ، مع الاحتفاظ بمحادثات متعددة الخطوات ذات حالة.
المؤلف: بيوتر دوشينسكي (@drk1wi)
الترخيص: رخصة جنو العمومية العامة الإصدار 2.0 (GPLv2). راجع ملف LICENSE للحصول على التفاصيل.
للتطبيقات التجارية المشروعة، يرجى الاتصال بالمؤلف لترتيبات الترخيص المناسبة.
إذا واجهت أي أخطاء أو كانت لديك طلبات ميزات، فيرجى الإبلاغ عنها على متعقب مشكلات GitHub أو الاتصال بالمؤلف عبر البريد الإلكتروني على piotr [at] duszynski.eu.