
सभी 65535 TCP पोर्ट्स पर खुले पोर्ट और सेवा हस्ताक्षरों का अनुकरण करता है ताकि टोही को धीमा किया जा सके, स्कैनर्स को भ्रमित किया जा सके, और आकर्षक नकली सेवाओं और टारपिटिंग के साथ हमलावर के संसाधनों को बर्बाद किया जा सके।
पोर्टस्पूफ सभी 65535 TCP पोर्ट पर खुले पोर्ट और सेवा हस्ताक्षरों का अनुकरण करता है, जिससे पुनर्ज्ञान चरण एक त्वरित स्कैन से एक लंबी, संसाधन-गहन प्रक्रिया में बदल जाता है। स्कैनर हजारों भ्रामक लेकिन नकली सेवाएं देखते हैं, जिससे वास्तविक हमले की सतह की पहचान करना अव्यावहारिक हो जाता है।
पोर्टस्पूफ का प्राथमिक लक्ष्य हमलावरों के लिए पुनर्ज्ञान को धीमा, महंगा और अविश्वसनीय बनाना है। एक मानक 5-सेकंड Nmap स्कैन के बजाय जो सिस्टम पर हर वास्तविक सेवा का मानचित्रण करता है, पोर्टस्पूफ का सामना करने वाला हमलावर 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
पोर्टस्पूफ सेवा प्रोब पर एक विशाल रेगुलर एक्सप्रेशन डेटाबेस पर आधारित मान्य, गतिशील रूप से उत्पन्न हस्ताक्षरों के साथ प्रतिक्रिया करता है। परिणामस्वरूप, एक हमलावर यह निर्धारित नहीं कर पाएगा कि आपका सिस्टम वास्तव में कौन से पोर्ट नंबर का उपयोग कर रहा है।
उदाहरण संस्करण स्कैन (पोर्ट 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) एक बैनर भेजती हैं और कनेक्शन खुला रखती हैं, क्लाइंट इनपुट की प्रतीक्षा करती हैं। ठोस अनुकरण का अर्थ है वही करना: स्वीकार करें, भेजें, पकड़ें। लेकिन प्रति-क्लाइंट थ्रेड मॉडल मेमोरी और CPU को कॉन्टेक्स्ट स्विचिंग पर बर्बाद करता है, और बड़े पैमाने पर रक्षक के पास हमलावर के धैर्य से पहले संसाधन समाप्त हो जाते हैं। धोखा उपकरण स्वयं-डॉस वेक्टर बन जाता है।
दृष्टिकोण: एक एकल-थ्रेडेड epoll इवेंट लूप। प्रत्येक पोर्ट को स्टार्टअप पर एक वितरण मोड सौंपा जाता है: कुछ तुरंत बैनर धकेलते हैं, कुछ क्लाइंट द्वारा डेटा भेजने की प्रतीक्षा करते हैं, और कुछ मौन रहते हैं। प्रतीक्षा समय परिमाण के क्रम (दसियों मिलीसेकंड से मिनट) में प्रति-कनेक्शन जिटर के साथ फैलाया जाता है, ताकि एक ही पोर्ट पर बार-बार प्रोब समान समय न लौटाएं।
यह मायने रखता है क्योंकि इसके बिना, एक हमलावर हर पोर्ट पर कचरा भेज सकता है और प्रतिक्रिया समय माप सकता है: वास्तविक सेवाएं तेजी से बंद होती हैं (गलत प्रोटोकॉल), जबकि एक भोला टारपिट सेकंड तक रोकता है। मिश्रित मोड और विस्तृत समय प्रसार के साथ, हजारों नकली पोर्ट भी वास्तविक सेवाओं के समान सीमा में बंद होते हैं। फ़िल्टर करने के लिए कोई स्पष्ट सीमा नहीं है।
अर्थव्यवस्था विषमता के कारण काम करती है:
प्रति-पोर्ट वितरण मोड प्रक्रिया के जीवनकाल के लिए निश्चित होते हैं लेकिन पुनरारंभ पर अप्रत्याशित होते हैं। प्रतीक्षा समय में प्रति-कनेक्शन यादृच्छिक घटक होता है ताकि बार-बार प्रोब प्राकृतिक भिन्नता दिखाएं, जो लोड के तहत वास्तविक सेवाओं के समान हो।
v2.0 मूल बैनर-एंड-क्लोज़ व्यवहार को बदलता है जो कनेक्शन-समाप्ति बाईपास के लिए संवेदनशील था (Vicarius/Hored1971 ब्लॉग पोस्ट देखें)। टारपिट इंजन मिश्रित समय के साथ सभी कनेक्शनों को खुला रखता है, जिससे कनेक्शन-समाप्ति फ़िल्टरिंग, समय फिंगरप्रिंटिंग, बैनर विश्लेषण और सांख्यिकीय पैटर्न मॉडलिंग को हराया जाता है।
सुनिश्चित करें कि आपके पास C++ कंपाइलर और CMake (3.10+) स्थापित है।
mkdir build && cd build
cmake -DCMAKE_INSTALL_SYSCONFDIR=/etc ..
make
sudo make install
पोर्टस्पूफ यूज़रलैंड में चलता है लेकिन अन्य पोर्ट के लिए निर्धारित ट्रैफ़िक को इंटरसेप्ट करने के लिए सिस्टम फ़ायरवॉल नियमों पर निर्भर करता है।
सभी आने वाले TCP ट्रैफ़िक (पोर्ट 1-65535) को पोर्टस्पूफ पोर्ट (डिफ़ॉल्ट 4444) पर रीडायरेक्ट करें।
लिनक्स (iptables):
# पहले वास्तविक सेवाओं को बाहर करें, फिर बाकी को पोर्टस्पूफ पर रीडायरेक्ट करें
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 नियमों को सहेज सकते हैं या system_files निर्देशिका में दिए गए iptables-config का उपयोग कर सकते हैं।
आप 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 -1 -v
वर्डलिस्ट के साथ फ़ज़ करें:
portspoof -f payloads.txt -v
ऊपर दिया गया मूल REDIRECT नियम काम करता है, लेकिन एक आक्रामक स्कैनर अभी भी कनेक्शन के साथ पोर्टस्पूफ को अभिभूत करने का प्रयास कर सकता है। निम्नलिखित नियमसेट दर सीमित करने और उन होस्ट के लिए स्वचालित प्रतिबंध जोड़ता है जो कनेक्शन सीमा से अधिक हैं। वास्तविक सेवाओं (इस उदाहरण में 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
# प्रति स्रोत IP नए SYNs की दर सीमित करें
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+ कनेक्शन रखता है, तो चिह्नित करें और छोड़ें
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
पोर्टस्पूफ प्रो धोखे को एकल होस्ट से पूरे नेटवर्क तक स्केल करता है। एक एकल सेंसर पूर्ण /16 नेटवर्क का अनुकरण करता है: हजारों IP, प्रत्येक में सभी पोर्ट पर अद्वितीय सेवाएं, स्टेटफुल मल्टी-स्टेप वार्तालाप धारण करता है।
लेखक: Piotr Duszyński (@drk1wi)
लाइसेंस: GNU General Public License v2.0 (GPLv2)। विवरण के लिए LICENSE फ़ाइल देखें।
व्यावसायिक, वैध अनुप्रयोगों के लिए, कृपया उपयुक्त लाइसेंसिंग व्यवस्था के लिए लेखक से संपर्क करें।
यदि आपको कोई बग मिलता है या फीचर अनुरोध हैं, तो कृपया उन्हें GitHub Issue Tracker पर रिपोर्ट करें या piotr [at] duszynski.eu पर ईमेल के माध्यम से लेखक से संपर्क करें।