portforge.cr o cómo abrir numerosos puertos "falsos" en nuestro servidor

¿Eres un "azulón" y quieres tocar los... la moral al pobre pentester que intenta enumerar los servicios de tu servidor para comprometerlo?
Con portforge.cr podrás abrir tantos sockets como quieras de forma que cuando alguien escanee tu servidor verá un montón de puertos abiertos, haciendo tedioso encontrar aquellos que realmente son válidos.
Digamos que es un pequeño paso para vencer o dificultar el reconocimiento.

Portforge es realmente un script escrito en Crystal (un lenguaje de programación muy parecido a Ruby) y utiliza una técnica incorporada en su compilador llamado Fibers. Se parecen mucho a los hilos del sistema, pero Fibers es mucho más ligero y la ejecución se gestiona a través del proceso 1.

portforge.cr puede abrir tantos puertos como quieras entre 1024 y 65535. También funciona por debajo de 1024, pero para eso tienes que ser un usuario root. Cuanto mayor sea el rango que elijas, más tardará el script en cargar cada socket, pero la herramienta está bastante optimizada y solo debería tomar un par de minutos (según el sistema, por supuesto).

El script funciona en 2 pasos: primero realiza su propio escaneo en el sistema para ver qué puertos ya están abiertos y los puertos abiertos se colocan en una lista y los puertos cerrados en otra. El siguiente paso es abrir los puertos cerrados, por lo que el script selecciona la lista con todos los puertos cerrados y abre un socket en cada uno de ellos.

Mientras que la denominada "fibra" principal está abriendo un socket en cada puerto, se llama a otra "fibra" por debajo del principal que escucha las conexiones entrantes y las cierra directamente. Este proceso se repite indefinidamente, o hasta que interrumpa el script.

Instalación y uso

Crystal:

$ curl -sSL https://dist.crystal-lang.org/apt/setup.sh | sudo bash
$ sudo apt install crystal

Opcional:
sudo apt install libssl-dev      # for using OpenSSL
sudo apt install libxml2-dev     # for using XML
sudo apt install libyaml-dev     # for using YAML
sudo apt install libgmp-dev      # for using Big numbers
sudo apt install libreadline-dev # for using Readline

$ git clone https://github.com/Beyarz/portforge.cr.git

$ cd portforge.cr

$ crystal portforge.cr
[-] Argument: /home/vmotos/.cache/crystal/crystal-run-portforge.tmp host start end
[-] Example:  /home/vmotos/.cache/crystal/crystal-run-portforge.tmp localhost 4440 4445

$ crystal portforge.cr localhost 5430 5450
[!] Scan started.
[+] 99.63% done.
[!] Scan finished.
[+] Forging started.
[+] The ports should be open now.
[!] To end this proccess you have to interrupt it.

ANTES:

Starting Nmap 7.60 ( https://nmap.org ) at 2018-10-29 23:32 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000010s latency).
Not shown: 65519 closed ports
PORT      STATE SERVICE
111/tcp   open  rpcbind
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
538/tcp   open  gdomap
631/tcp   open  ipp
902/tcp   open  iss-realsecure
4443/tcp  open  pharos
5432/tcp  open  postgresql
5433/tcp  open  pyrrho
6342/tcp  open  unknown
8080/tcp  open  http-proxy
8307/tcp  open  unknown
9050/tcp  open  tor-socks
17500/tcp open  db-lsp
17600/tcp open  unknown
17603/tcp open  unknown

DESPUÉS:

Starting Nmap 7.60 ( https://nmap.org ) at 2018-10-29 23:33 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000011s latency).
Not shown: 65500 closed ports
PORT      STATE SERVICE
111/tcp   open  rpcbind
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
538/tcp   open  gdomap
631/tcp   open  ipp
902/tcp   open  iss-realsecure
4443/tcp  open  pharos
5430/tcp  open  radec-corp
5431/tcp  open  park-agent
5432/tcp  open  postgresql
5433/tcp  open  pyrrho
5434/tcp  open  sgi-arrayd
5435/tcp  open  sceanics
5436/tcp  open  pmip6-cntl
5437/tcp  open  pmip6-data
5438/tcp  open  unknown
5439/tcp  open  unknown
5440/tcp  open  unknown
5441/tcp  open  unknown
5442/tcp  open  unknown
5443/tcp  open  spss
5444/tcp  open  unknown
5445/tcp  open  smbdirect
5446/tcp  open  unknown
5447/tcp  open  unknown
5448/tcp  open  unknown
5449/tcp  open  unknown
5450/tcp  open  tiepie
6342/tcp  open  unknown
8080/tcp  open  http-proxy
8307/tcp  open  unknown
9050/tcp  open  tor-socks
17500/tcp open  db-lsp
17600/tcp open  unknown
17603/tcp open  unknown

Repo: https://github.com/Beyarz/portforge.cr

3 comentarios :

  1. Parece sencillito y potente eso de Crystal. No lo conocía, pero promete.

    ResponderEliminar
  2. bueno, aunque mejor sería un script que ocultara todos los puertos abiertos

    ResponderEliminar