Le rapport peut être utilisé pour sonder activement les pare-feu afin d'énumérer les règles de blocage sortantes ou entrantes. Utilisez-le correctement et vous pourrez obtenir la configuration du pare-feu.
Je l'ai principalement développé pour m'aider à résoudre les problèmes liés à un scanner de réseau distribué que je développe actuellement.
Ce morceau de code n'est qu'un analyseur PCAP, ce qui signifie que vous devez lui fournir un vidage de paquets réseau correctement acquis pour qu'il fonctionne. L'outil imprimera ensuite les ports qui (selon le PCAP) sont bloqués par le pare-feu.
Pour l'utiliser, vous devez accéder à au moins deux machines. L’un se trouve derrière le pare-feu que vous souhaitez tester et l’autre de l’autre côté.
Il existe deux cas d'utilisation possibles :
Vous aurez besoin d'outils comme tcpdump, tshark ou wireshark pour capturer et enregistrer le trafic réseau (ou tout autre renifleur), et d'outils comme nmap ou masscan pour créer et envoyer les paquets de sondage. Dans les exemples suivants, j'utiliserai masscan et tcpdump.
Dans le cas où il y a un autre pare-feu juste avant la machine externe (pas celui derrière le pare-feu que vous allez tester), il serait préférable de savoir quelles sont les règles en place. Mais ce n'est pas obligatoire, vous pouvez toujours le découvrir en effectuant davantage de tests à partir de différents endroits.
Suivre les étapes ci-dessous vous aidera à obtenir un résultat précis.
Supposons que nous souhaitions énumérer les règles sortantes parce que nous prévoyons d'exécuter un scanner de réseau plus tard sur cette machine et que nous voulons donc être sûrs qu'aucun trafic sortant ne sera bloqué par notre pare-feu de sortie.
La machine derrière le pare-feu a l'adresse IP aaaa
tandis que la machine extérieure a bbbb
. Cette deuxième machine serait celle sur laquelle nous exécuterons le renifleur de paquets (dans ce cas tcpdump
) et la première que nous allons configurer.
Acquisition du PPCE
Nous devons démarrer un renifleur de paquets ici afin de voir quels paquets de sondage n'arriveront pas à destination. Considérant que cette machine a l'adresse IP publique bbbb
associée à l'interface réseau eth0
et qu'aucun pare-feu n'est en cours d'exécution . Nous exécutons tcpdump comme suit
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
un fichier re-port.pcap
sera généré et, une fois notre test terminé, c'est le fichier que nous transmettrons à cet outil. Mais nous verrons cette partie plus tard.
Sonder le trafic
Nous allons générer 65535 paquets SYN
depuis la machine derrière le pare-feu et les envoyer à bbbb
.
Pour ce faire, j'utilise masscan
. Cela nous permet de définir le débit avec l'option --rate
et le nombre de paquets créés pour chaque port spécifié avec l'option --retries
. Ces deux options sont importantes pour nous car nous devons être sûrs que tous les paquets pouvant atteindre la destination y parviendront. En fonction de la bande passante dont vous disposez sur la source/destination, les paquets pourraient être perdus en raison du débit d'envoi élevé. Pour ce test, nous devons y aller lentement et en toute sécurité. En Italie, nous avons un proverbe qui tient : qui va lentement va loin, qui me semble approprié ici.
masscan -Pn -n -p 1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
en faisant quelques tests, je découvre que 350 paquets par seconde envoyés deux fois par port, pour un total de 131 072 (128 000) paquets, prennent environ neuf minutes sans perte de paquets.
Énumérer les règles de pare-feu
À ce stade, nous pouvons utiliser Re-port
pour obtenir la liste des ports fermés. Revenez à la première machine, arrêtez le renifleur de paquets CTRL+C
et copiez le re-port.pcap
dans le répertoire où se trouve l'outil Re-port. Vous pouvez maintenant l'exécuter comme suit :
./enumerate.py re-port.pcap
Les exemples précédents énuméraient les règles de blocage TCP. Si vous souhaitez une liste de tous les ports UDP bloqués, suivez les étapes ci-dessus en modifiant les commandes comme suit :
# Machine with b.b.b.b IP
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
# Machine with a.a.a.a IP
masscan -Pn -n -p U:1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
# Re-port
./enumerate.py re-port.pcap --udp
Exécutez ./enumerate.py --help pour afficher toutes les options
$./enumerate.py --help
usage: enumerate.py [-h] [--address ADDRESS] [--open] [--version] [-u] [-v] pcap
Re-port is a tool to actively enumerate firewall rules.
positional arguments:
pcap PCAP dump of receiving scan traffic
optional arguments:
-h, --help show this help message and exit
--address ADDRESS scanners's IP address. If unset, all the packets in the
PCAP will be used to enumerate closed ports
--open print open ports instead of closed ones
--version show program's version number and exit
-u, --udp search for UDP open ports instead of TCP
-v, --verbose increase output verbosity
Report est une classe Python et vous pouvez l'utiliser/l'étendre à votre guise.
Il est itérable et vous l'utilisez dans une instruction with
.
with Report('dump.pcap') as r:
r.enumerate_ports('tcp', '127.0.0.1')
r.print_ports()
ou
r = Report('dump.pcap')
r.enumerate_ports('tcp', '127.0.0.1')
for port in r:
print('Open %d' % port)
@r4d10n : pour l'idée simple derrière cet outil.