
모든 65535 TCP 포트에 걸쳐 열린 포트와 서비스 시그니처를 에뮬레이션하여 정찰을 지연시키고, 스캐너를 혼란시키며, 설득력 있는 가짜 서비스와 트래피팅으로 공격자의 자원을 낭비하게 합니다.
Portspoof는 모든 65535개 TCP 포트에서 열린 포트와 서비스 시그니처를 에뮬레이션하여, 정찰 단계를 빠른 스캔에서 오래 걸리고 리소스 집약적인 프로세스로 전환합니다. 스캐너는 수천 개의 그럴듯하지만 가짜 서비스를 보게 되어 실제 공격 표면을 식별하는 것이 실용적이지 않게 됩니다.
Portspoof의 주요 목표는 공격자에게 정찰을 느리고, 비용이 많이 들며, 신뢰할 수 없게 만드는 것입니다. 표준 5초 Nmap 스캔이 시스템의 모든 실제 서비스를 매핑하는 대신, 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시간 이상 소요되며 수백 MB의 가짜 데이터를 생성합니다.실제 서비스(SSH, SMTP, FTP, HTTP)는 배너를 보내고 클라이언트 입력을 기다리며 연결을 유지합니다. 설득력 있는 에뮬레이션은 동일한 작업을 수행하는 것을 의미합니다: 수락, 전송, 유지. 그러나 클라이언트당 스레드 모델은 메모리와 CPU를 컨텍스트 스위칭에 낭비하며, 규모가 커지면 방어자는 공격자가 인내심을 잃기 전에 리소스가 고갈됩니다. 속임수 도구는 자체 DOS 벡터가 됩니다.
접근 방식: 단일 스레드 epoll 이벤트 루프. 각 포트에는 시작 시 전달 모드가 할당됩니다. 일부는 즉시 배너를 푸시하고, 일부는 클라이언트가 데이터를 보낼 때까지 기다렸다가 응답하며, 일부는 침묵을 유지합니다. 유지 시간은 수십 밀리초에서 분 단위로 여러 자릿수에 걸쳐 분산되며 연결당 지터(jitter)가 추가되므로 동일한 포트에 대한 반복적인 프로브가 동일한 타이밍을 반환하지 않습니다.
이것이 중요한 이유는 이것 없이는 공격자가 모든 포트에 쓰레기를 보내고 응답 타이밍을 측정할 수 있기 때문입니다. 실제 서비스는 잘못된 프로토콜의 경우 빠르게 닫히는 반면, 순진한 타르핏은 몇 초 동안 유지됩니다. 혼합 모드와 넓은 타이밍 분포를 사용하면 수천 개의 가짜 포트도 실제 서비스와 동일한 범위에서 닫힙니다. 필터링할 수 있는 명확한 임계값이 없습니다.
비대칭성 때문에 경제성이 확보됩니다:
포트별 전달 모드는 프로세스 수명 동안 고정되지만 재시작 간에는 예측할 수 없습니다. 유지 시간에는 연결당 임의 구성 요소가 있으므로 반복 프로브는 부하가 걸린 실제 서비스와 유사한 자연스러운 변동성을 보여줍니다.
v2.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 규칙을 저장하거나 system_files 디렉토리에 제공된 iptables-config를 사용할 수 있습니다.
system_files/init.d/의 예제를 사용하여 Portspoof를 시작 스크립트에 추가할 수 있습니다.
이 모드는 포트 스캐너에 가짜 서비스 시그니처를 생성하여 공급합니다.
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)를 호스팅하는 포트는 리디렉션에서 제외되지만 전역 차단 규칙에 의해 여전히 보호됩니다.