Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Portspoof — Émule des ports ouverts et des signatures de service sur l'ensemble des 65535 ports TCP pour ralentir la reconnaissance, tromper les scanners et gaspiller les ressources des attaquants avec des faux services convaincants et du tarpitting. | Kitploit
Outils/GitHubGitHub/drk1wi/portspoof
Outils DéfensifsReconnaissanceAnalyse des VulnérabilitésÉvasion IDS/IPSSécurité RéseauRed Teaming
GitHubdrk1wi/portspoof

Portspoof

Émule des ports ouverts et des signatures de service sur l'ensemble des 65535 ports TCP pour ralentir la reconnaissance, tromper les scanners et gaspiller les ressources des attaquants avec des faux services convaincants et du tarpitting.

Voir le dépôt
2.4k179il y a 6 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Site web

Portspoof

License Platform Build Status

Portspoof émule des ports ouverts et des signatures de services sur l'ensemble des 65535 ports TCP, transformant la phase de reconnaissance d'un scan rapide en un processus long et gourmand en ressources. Les scanners voient des milliers de services convaincants mais factices, rendant impossible l'identification de la surface d'attaque réelle.

Table des matières

  • Vue d'ensemble
  • Fonctionnalités clés
  • Fonctionnement
  • Approche de conception
  • Installation
  • Configuration
  • Utilisation
  • Durcissement avec iptables
  • Portspoof Pro
  • Auteurs et licence

Vue d'ensemble

L'objectif principal de Portspoof est de rendre la reconnaissance lente, coûteuse et peu fiable pour les attaquants. Au lieu d'un scan Nmap standard de 5 secondes qui cartographie chaque service réel sur un système, un attaquant confronté à Portspoof voit 65535 ports ouverts, chacun exécutant ce qui ressemble à un service légitime différent. Il n'existe aucun moyen rapide de déterminer lesquels sont réels.

Fonctionnalités clés

  • Tous les 65535 ports TCP sont toujours ouverts : Au lieu d'indiquer à un attaquant qu'un port est FERMÉ ou FILTRÉ, Portspoof renvoie SYN+ACK pour chaque tentative de connexion.
  • Émulation de services : Plus de 9000 signatures de services dynamiques générées à partir d'expressions régulières. Chaque port répond aux sondes avec une identité de service différente et convaincante.
  • Modes de diffusion mixtes : Chaque port reçoit un profil comportemental différent au démarrage (bannière immédiate, réponse différée ou attente silencieuse) avec des temps d'attente répartis sur une large plage. La détection de version sur toute la plage (nmap -sV -p-) dépasse largement les limites pratiques.
  • Défense offensive : Peut être utilisé comme 'Frontend de Framework d'Exploitation' pour exploiter les vulnérabilités des outils de scan de l'attaquant.
  • Léger et sécurisé : Fonctionne en espace utilisateur (aucun privilège root requis), se lie à UN SEUL port TCP par instance en cours d'exécution et a une utilisation marginale du CPU/mémoire.

Fonctionnement

1. Déjouer les scanners de ports

Exemple de scan Nmap :

root@kitploit:~
$ 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

2. Confusion de la détection de version

Portspoof répond aux sondes de service avec des signatures valides et générées dynamiquement basées sur une vaste base de données d'expressions régulières. En conséquence, un attaquant ne pourra pas déterminer quels numéros de port votre système utilise réellement.

Exemple de scan de version (ports 1–100) :

root@kitploit:~
$ 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?

Le résultat

Combinées, ces techniques signifient :

  • Il n'existe aucun moyen rapide de distinguer les services réels des faux. Le timing, le comportement et le contenu des bannières varient tous sur la plage de ports.
  • Un scan de version complet (nmap -sV -p-) avec les paramètres de tarpit par défaut prend plus de 10 heures et génère des centaines de mégaoctets de données factices.
  • Le scanner de l'attaquant brûle du temps et des threads sur des connexions qui ne mènent nulle part.

Approche de conception

Les services réels (SSH, SMTP, FTP, HTTP) envoient une bannière et maintiennent la connexion ouverte, en attendant une entrée du client. Une émulation convaincante signifie faire de même : accepter, envoyer, maintenir. Mais un modèle thread-par-client brûle de la mémoire et du CPU sur les changements de contexte, et à grande échelle, le défenseur manque de ressources avant que l'attaquant ne manque de patience. L'outil de tromperie devient un vecteur d'auto-DOS.

L'approche : une boucle d'événements epoll monothread. Chaque port se voit attribuer un mode de diffusion au démarrage : certains poussent une bannière immédiatement, certains attendent que le client envoie des données avant de répondre, et d'autres restent silencieux. Les temps d'attente sont répartis sur des ordres de grandeur (dizaines de millisecondes à minutes) avec une gigue par connexion, de sorte que des sondes répétées sur le même port ne renvoient pas un timing identique.

C'est important car sans cela, un attaquant peut envoyer des déchets sur chaque port et mesurer le temps de réponse : les services réels se ferment rapidement (mauvais protocole), tandis qu'un tarpit naïf maintient la connexion pendant des secondes. Avec des modes mixtes et une large dispersion temporelle, des milliers de faux ports se ferment également dans la même plage que les services réels. Il n'y a pas de seuil propre pour filtrer.

L'économie fonctionne grâce à l'asymétrie :

  • Coût du défenseur : ~1–2 Ko de mémoire noyau par connexion inactive. La boucle epoll est monothread, aucun surcoût de changement de contexte. Une machine modeste gère 10k+ connexions simultanées sans effort.
  • Coût de l'attaquant : temps et effort. Un scan de port ne leur apprend rien — chaque port est ouvert. Pour trouver les services réels, ils ont besoin d'une détection de version sur les 65535 ports, puis de sondages au niveau protocole sur tout ce qui semble plausible. Un scan de 5 secondes devient 10+ heures de travail actif, le résultat reste une aiguille dans une botte de foin, et la plupart des attaquants passent à une cible plus facile.

Les modes de diffusion par port sont fixes pour la durée de vie du processus mais imprévisibles d'un redémarrage à l'autre. Les temps d'attente ont une composante aléatoire par connexion afin que les sondes répétées montrent une variance naturelle, similaire aux services réels sous charge.

v2.0 remplace le comportement bannière-et-fermeture d'origine qui était vulnérable à un contournement par fermeture de connexion (voir l'article de blog Vicarius/Hored1971). Le moteur tarpit maintient toutes les connexions ouvertes avec un timing mixte, déjouant le filtrage par fermeture de connexion, l'empreinte temporelle, l'analyse de bannière et la modélisation statistique.


Installation

Prérequis

Assurez-vous d'avoir un compilateur C++ et CMake (3.10+) installés.

Construire à partir des sources

root@kitploit:~
mkdir build && cd build
cmake -DCMAKE_INSTALL_SYSCONFDIR=/etc .. 
make
sudo make install

Configuration

Portspoof fonctionne en espace utilisateur mais s'appuie sur les règles du pare-feu système pour intercepter le trafic destiné à d'autres ports.

1. Configurer le pare-feu (iptables)

Redirigez tout le trafic TCP entrant (ports 1-65535) vers le port de Portspoof (4444 par défaut).

Linux (iptables) :

root@kitploit:~
# Exclure d'abord les services réels, puis rediriger le reste vers 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

Remarque : Remplacez eth0 par votre interface réseau. Ajoutez une règle RETURN pour chaque port hébergeant un service réel.

Pour rendre cela persistant, vous pouvez sauvegarder vos règles iptables ou utiliser le iptables-config fourni dans le répertoire system_files.

2. Démarrage système

Vous pouvez ajouter Portspoof à vos scripts de démarrage en utilisant les exemples dans system_files/init.d/.


Utilisation

Mode d'émulation de services (Recommandé)

Ce mode génère et alimente les scanners de ports avec des signatures de services factices.

root@kitploit:~
portspoof -c /etc/portspoof.conf -s /etc/portspoof_signatures -D

Avec des temporisations tarpit personnalisées (maintenir chaque connexion entre 10 et 60 secondes) :

root@kitploit:~
portspoof -s /etc/portspoof_signatures -t 10 -T 60 -D

Mode port ouvert

Ce mode renvoie simplement un état OPEN pour chaque tentative de connexion sans envoyer de bannières de service. Les connexions sont toujours piégées (tarpittées).

root@kitploit:~
portspoof -D

Mode fuzzing

Portspoof peut être utilisé pour fuzzer des outils de scan en envoyant des charges utiles aléatoires ou basées sur une liste de mots.

Fuzzer avec un générateur interne :

root@kitploit:~
# Génère des charges utiles aléatoires de taille aléatoire
portspoof -1 -v

Fuzzer avec une liste de mots :

root@kitploit:~
portspoof -f payloads.txt -v

Durcissement avec iptables

La règle REDIRECT de base ci-dessus fonctionne, mais un scanner agressif peut toujours tenter de submerger Portspoof avec des connexions. Le jeu de règles suivant ajoute une limitation de débit et un bannissement automatique pour les hôtes qui dépassent le seuil de connexion. Les ports hébergeant des services réels (SSH dans cet exemple) sont exclus de la redirection mais toujours protégés par la règle de bannissement globale.

root@kitploit:~
# --- NAT : rediriger tout sauf les services réels ---
# ajouter une règle RETURN pour chaque port que vous utilisez réellement (SSH, HTTP, etc.)
iptables -t nat -A PREROUTING -p tcp --dport 22 -j RETURN
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 4444

# --- FILTER : défense en profondeur ---

# autoriser le loopback (critique : empêche de casser les services locaux)
iptables -A INPUT -i lo -j ACCEPT

# si cette IP a été signalée comme abusive, bloquer tout (silencieux, pas de RST)
iptables -A INPUT -m recent --name PORTSCAN --rcheck --seconds 60 -j DROP

# limiter le débit des nouveaux SYN par IP source
iptables -A INPUT -p tcp --syn -m hashlimit \
  --hashlimit-above 10/sec --hashlimit-burst 30 \
  --hashlimit-mode srcip --hashlimit-name syn_throttle -j DROP

# si une seule IP détient 100+ connexions vers portspoof, signaler et bloquer
iptables -A INPUT -p tcp --syn --dport 4444 -m connlimit \
  --connlimit-above 100 --connlimit-mask 32 \
  -m recent --name PORTSCAN --set -j DROP

# autoriser le trafic établi et les nouvelles connexions
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --syn -j ACCEPT
iptables -A INPUT -j DROP

Pour les déploiements à fort trafic, augmentez la taille de la liste xt_recent :

root@kitploit:~
echo "options xt_recent ip_list_tot=10000" > /etc/modprobe.d/xt_recent.conf

Et ajustez le suivi de connexion du noyau :

root@kitploit:~
sysctl -w net.netfilter.nf_conntrack_max=131072
sysctl -w net.core.somaxconn=4096

Portspoof Pro

Portspoof Pro étend la tromperie d'un seul hôte à un réseau entier. Un seul capteur émule des réseaux /16 complets : des milliers d'IP, chacune avec des services uniques sur tous les ports, maintenant des conversations étatiques en plusieurs étapes.

  • Tromperie à l'échelle du réseau. Transformez les espaces IP sombres et les sous-réseaux inutilisés en une grille de tromperie active. Chaque hôte émulé présente des services uniques avec une personnalité différente par IP source. Le tarpitting actif épuise les pools de sockets de l'attaquant et limite les outils automatisés.
  • Détection de scan et empreinte d'outil. Détecte les techniques de scan SYN, FIN, NULL, XMAS, ACK. Prend les empreintes de Nmap, Masscan, ZMap et des scanners personnalisés. Télémétrie JSON structurée avec correspondance MITRE ATT&CK, diffusée vers votre SIEM.
  • Déploiement sûr pour la production. Fonctionne dans un environnement isolé aux côtés du trafic de production. Les politiques de routage dirigent le trafic de tromperie vers le capteur. Pas de dérivation en ligne, aucun risque pour les charges de travail réelles.
  • Conformité prête à l'emploi. Prend en charge NIS2, DORA, ISO 27001, NIST CSF et CIS Controls.

portspoof.io


Auteurs et licence

Auteur : Piotr Duszyński (@drk1wi)

Licence : GNU General Public License v2.0 (GPLv2). Voir le fichier LICENSE pour plus de détails.

Pour les applications commerciales légitimes, veuillez contacter l'auteur pour les modalités de licence appropriées.


Signaler des problèmes

Si vous rencontrez des bogues ou avez des demandes de fonctionnalités, veuillez les signaler sur le GitHub Issue Tracker ou contacter l'auteur par e-mail à piotr [at] duszynski.eu.

Télécharger l’outil