Parte 1 - Configurando una red básica para aprender sobre gestión de vulnerabilidades
Tags: spanish, cybersecurity, vulnerabilities, beginners
Published: 2023-08-27 04:21:06

#Introducción

En este post se ponen en práctica conceptos técnicos y conocimientos básicos que son necesarios para el alistamiento de una infraestructura para la gestión de vulnerabilidades. Se realiza el despliegue de servicios inseguros (http,ftp) y seguros (https,sftp,vpn), con el objetivo de inspeccionar puertos y analizar tráfico en la red de servidores propuesta. Este laboratorio hace parte de una serie de desafíos que se irán adelantando con el fin de probar diferentes tecnologías y herramientas de hacking ético.

#Desarrollo

## Paso 1: Configurar la red

Para desarrollar el laboratorio se utiliza la herramienta de virtualización VirtualBox, y se configuran las máquinas en modo adaptador de puente con DHCP habilitado. Con esta configuración, cada máquina virtual se trata como una máquina separada en su red real, lo que significa que las máquinas host, cualquier máquina virtual y cualquier otro dispositivo en la red pueden comunicarse entre sí, además las máquinas virtuales tienen acceso a Internet. Para realizar la configuración requerida puede seguir la guía disponible en [1].

Se configura una red como la mostrada a continuación:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/azx4f9s0bsvmq69gls44.png)

Servidor 1:

- OS: Kali linux 2023.2
- IP: 10.0.2.4/24

Servidor 2:

- CentOS Stream 9
- IP: 10.0.2.15/24

Las dos máquinas fueron descargadas del sitio `https://www.linuxvmimages.com/`, lo cual facilita la configuración de la red ya que vienen listas para ser importadas en VirtualBox. Para facilitar el paso de archivos entre el host y las máquinas virtuales se habilita la funcionalidad de carpeta compartida. En caso de que se no le permita acceder a la carpeta, debe agregar el usuario de cada máquina al grupo vboxsf, lo cual se hace con el comando:
```
sudo usermod -aG vboxsf $(whoami)
```

## Paso 2: Verificar conectividad

Se verifica la conectividad entre los dos servidores utilizando el comando ping

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vz07nby2g7wgvuwlq1zc.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hcerawc35hmakmf7vy5n.png)

Para ambos casos se observa un éxito del 100% en la transmisión de paquetes, el cual comprueba la comunicación entre servidores a través del protocolo IP enviando paquetes ICPM. 

## Paso 3 y Paso 4: Escaneo de puertos con NMAP

Desde el servidor 1 se realiza el escaneo a nivel local y hacia internet utilizando la herramienta NMAP.

En la ejecución se utiliza la opción `-Pn`, esto para indicarle a NMAP que ignore la detección de hosts y realice el escaneo sin realizar ninguna prueba de ping. Cuando se utiliza esta opción, la herramienta no intentará determinar si el host objetivo está en línea, esto significa que asumirá que el host objetivo está en línea y procederá a escanear los puertos especificados sin realizar una comprobación previa.

### Nmap en LAN

En el servidor 1 se observan abiertos los puertos abiertos por XAMPP (21, 80, 443, 3306).

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qmx13ywskkb2i3os38m.png)

En el servidor 2 se observa abierto el puerto 22, el cual es utilizado por el protocolo SSH. En el puerto 9090 se observa cerrado el puerto 9090, este esta siendo utilizado por zeus, un software de balanceo de carga.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wz87poswjstu69n0y34v.png)

### Nmap en sitios de internet

Para el sitio `scanme.nmap.org` se observan abiertos los puertos 22 y 25. El puerto 25 fue utilizado para la transferencia de correo, en este momento no se recomienda su uso dado que no tiene un mecanismo de seguridad. Actualmente el puerto 587 es el canal de transmisión por defecto para SMTP, ya que proporciona una transmisión segura del correo electrónico mediante el cifrado STARTTLS.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tcrmgx1xt5pl4b71c0gk.png)

Para el sitio `tryhackme.com` se observan abiertos los puertos 25, 80, 443 y 8080.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ql6iqirwlva4qnpv7fd.png)

## Paso 5: Habilitar servicios http y ftp

Se realiza la descarga de XAMPP desde el sitio oficial `https://www.apachefriends.org/download.html` y se instala en el servidor 1 utilizando los siguientes comandos:
```
chmod +x xampp-linux-x64-8.2.4-0-installer.run
./xampp-linux-x64-8.2.4-0-installer.run
```
Para iniciar el servicio se utiliza el comando:
```
sudo /opt/lampp/lampp start services
```
Para comprobar que ha sido instalado con éxito utilizar el navegador e ir al localhost (127.0.0.1) como se observa en la imagen:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rkwfkbn7mgc1pmmweimf.png)
Con esto se realizará la interceptación de tráfico http y ftp.

## Paso 6: Interceptar tráfico http con Wireshark

Para interceptar tráfico con wireshark desde el servidor 1 se utiliza la interface eth0.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v6jt97rc07r39mpi8ari.png)

Se realiza la navegación desde el servidor 2 al servidor 1, a través de la dirección web 10.0.2.4, y se explora manualmente para generar tráfico de red.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c33dl10z0gu02t4xhjad.png)

Se obtiene la traza de 177 paquetes.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/stvddtgr9isi3rsik3ep.png)

Se identifica en el trafico de red el uso de los siguientes protocolos: HTTP, HTTP/XML, TCP. Como es de esperar, no hay tráfico cifrado. Adicionalmente se identifica la siguiente alerta en el tráfico TCP: "TCP window specified by the receiver is now completely full" (ver la sección de Conclusiones para el análisis).
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5it9pkjgp1px5iioxgo0.png)

## Paso 7: Habilitar el servicio ftp

Para habilitar el servicio ftp se siguen los pasos en el manual de instalación de XAMPP disponibles en el mismo sitio web local `http://localhost/dashboard/docs/transfer-files-ftp.html`.

Para abrir el panel de configuración de xampp se utiliza el siguiente comando:
```
sudo /opt/lampp/manager-linux-x64.run
```

Asegurarse que el servicio ProFTPD esta corriendo como se observa en la imagen:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/utmofdxogbfkz753axxj.png)

El usuario y contraseña son los mismos que se utilizan para acceder al servidor 1.

## Paso 8: Conexión al servidor ftp utilizando lftp

Desde el servidor 2 se realiza la conexión ftp, utilizando la herramienta lftp, la cual es un cliente de línea de comandos que permite la transferencia de archivos a través de múltiples protocolos. 
En la imagen se observa el uso de lftp:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/em0xeox1vruy2pcrqifn.png)

## Paso 9: Interceptar tráfico ftp

Para interceptar el tráfico ftp se utiliza Wireshark. Se crea un directorio test y después se borra para generar tráfico de red como se observa en la imagen:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x3lypkm4p4ktq5bf0nh1.png)

Se identifica el uso de los protocolos: ARP, DHCP, DNS, FTP, FTP-DATA, TCP y TLSv1.2.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mfcndqqnjgi5m4126f3u.png)

Se observa que el usuario y contraseña van en texto plano a través del protocolo FTP:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5n0odgpv6052ktnqhud6.png)

Igualmente se conocen los comandos ejecutados por el usuario:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l9cvycw73p7d3pmcucsm.png)

El protocolo FTP permite conocer todo lo que realice el usuario ya que va en texto plano, por lo cual nunca debe ser utilizado en un servicio real.

## Paso 10: Interceptar tráfico en una VPN

Para este paso se realiza la configuración de 2 VPN, la primera desde el servidor 1 hacia internet utilizando winscribe `https://windscribe.com/` y la segunda entre los servidores de la red local utilizando openvpn `https://openvpn.net/`.

### Interceptar tráfico desde el servidor 1 hacia internet

Con windscribe se establece una conexión vpn, como se observa en la imagen:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3xbbxb5vu131c3cj6fyi.png)

Windscribe ofrece los protocolos: Wireguard, UDP, TCP, Stealth y WStunnel. Para mayor información sobre el protocolo wireguard consultar la página `https://www.wireguard.com/`.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mbgr9mdgaxywbdqqkirf.png)

En wireshark se observa el uso de los protocolos: ARP, TCP, TLSv1.2 y Wireguard. Probando la conexión a un sitio internet inseguro (http), vemos que en wireshark que no se ve esa conexión.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jwhuut1k9jge1w1n5xmz.png)

Todo el tráfico queda encapsulado en el protocolo Wireguard.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dsbryb87bvvouf8imop3.png)

### Establecer el canal seguro entre servidores locales

Para configurar la vpn se utiliza OpenVPN. El servidor 1 como server y el servidor 2 como cliente siguiendo la guía disponible en [2]. 

Se configura el servidor VPN como se muestra en la imagen.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rskds5wb29hc05tzvlvw.PNG)
Los parámetros de configuración son:

- Dirección IP: 10.0.2.4
- Puerto: 1194
- Protocolo: UDP
- DNS: /etc/resolv.conf

Del lado del cliente se debe instalar EPEL en CentOS, para lo cual se sigue la guía disponible en [3]. EPEL es un repositorio de software con aplicaciones de terceros para sistemas Red Hat y derivados.

Para instalar el gestor de red se utiliza el comando:
```
sudo dnf install NetworkManager-openvpn
```

Para ejecutar la conexión vpn se utiliza el comando:
```
sudo openvpn /etc/openvpn/client/client.conf
```

En la imagen se observa que la conexión vpn se realizo de manera exitosa (Initialization Sequence Completed).
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v8vg9084fmmyo1gnubni.PNG)

### Interceptar tráfico http y ftp

En la interceptación de tráfico ftp se observa que se utilizan los protocolos ARP, DNS, OpenVPN, SSL, TCP, TLSv1.2 y TLSv1.3. Por lo cual el tráfico FTP va encapsulado en el protocolo OpenVPN.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ia99r01lo0aec565hquv.PNG)

En la interceptación de trafico http se observa que se utilizan los protocolos ARP, DHCP, ICMPv6, OpenVPN y SSL. Por lo cual el tráfico HTTP va encapsulado en el protocolo OpenVPN.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fvcydxygv5x27grhbe1y.PNG)

## Paso 11 y 12: Establecer conexiones seguras HTTPS y SFTP, e interceptar el tráfico

### HTTPS
Para establecer la conexión https se sigue la guía disponible en [4]. Se configura como se muestra en la imagen:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mipygzoe9o1ru4m3v64n.PNG)

Los parámetros de configuración del certificado son:

- Country Name: CO
- State or Province Name: Antioquia
- Locality Name: Medellin
- Organization Name: ITM
- Common Name: localhost

Al probar la conexión https desde el servidor 2, se observa que el certificado utiliza el protocolo TLS 1.3 con cifrado AES 128.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5nfdzj4t0c78sehyspte.PNG)

Al interceptar el trafico se observa el uso de los protocolos TCP y TLSv1.3. Se observa también la alerta "TCP Window Full".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h8746kx06mq233sdtwe2.PNG)

### SFTP
Para establecer la conexión sftp, se utilizo la guía disponible en [5]. En la imagen se observa la conexión utilizando el comando sftp. 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fyev7ytpdma9fyf53w58.PNG)

Con wireshark se observa el uso de los protocolos ARP, DHCP, SSH y TCP.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tjx1yrqk7qzvgbrmpt25.PNG)

#Conclusiones

A lo largo del ejercicio se observa que es posible establecer una red para realizar la prueba de protocolos inseguros y seguros, además de ver el tráfico e identificar vulnerabilidades utilizando software libre. 

Se muestra que el uso de protocolos inseguros como http y ftp debe evitarse, ya que el tráfico puede ser interceptado y leído dado que se encuentra en texto plano. Esto inclusive en servicios que se utilicen solamente dentro de una red local, ya que un atacante que penetre las medidas de seguridad perimetrales podría hacer fácil uso de los datos.

La alerta "TCP window specified by the receiver is now completely full" se refiere a una condición que ocurre en una conexión TCP cuando el receptor del tráfico informa al emisor que su ventana de recepción está completamente llena. Esto significa que el receptor no puede aceptar más datos en ese momento porque su memoria para almacenar los datos entrantes está llena.

En términos de ciberseguridad, esta alerta puede ser útil para identificar posibles problemas de congestión en la red o incluso ataques de denegación de servicio (DoS) en los que un atacante podría inundar una conexión TCP. En algunos casos, esta alerta podría indicar una vulnerabilidad en la forma en que un sistema maneja los datos entrantes, lo cual podría ser utilizado para ejecutar código malicioso en el sistema receptor o realizar otras acciones maliciosas. En un ataque avanzado, una ventana de recepción llena podría utilizarse como parte de una cadena de ataques para aprovechar debilidades en la infraestructura de red y sistemas.

Tanto el uso de una VPN como la implementación de conexiones seguras (HTTPS y SFTP) utilizando certificados tienen sus propias ventajas y desventajas. La elección dependerá de los requisitos específicos de seguridad y el contexto de uso. 

Una VPN cifra todo el tráfico entre el cliente y el servidor, protegiendo múltiples tipos de tráfico, no solo HTTP y FTP, lo que la hace útil para aplicaciones más diversas. Permiten el acceso seguro a redes internas desde ubicaciones remotas y puede ocultar la dirección IP real del usuario, proporcionando cierto grado de anonimato. Sin embargo pueden ser complejas de configurar y mantener, requieren recursos técnicos y suelen implicar costos adicionales en términos de hardware, software y recursos humanos. Además el tráfico puede sufrir cierta degradación del rendimiento debido al cifrado y la encapsulación.

Las conexiones seguras (https y sftp) están diseñadas específicamente para proteger tipos de tráfico individuales, lo que puede llevar a un rendimiento mejorado en comparación con una VPN. Son ampliamente adoptados y admitidos por la mayoría de los navegadores y aplicaciones de servidor FTP. Por otro lado, deben ser configurados individualmente y no ocultan la dirección IP real del usuario, por lo que no proporcionan anonimato.

A través del ejercicio se estableció un proceso paso a paso que buscar servir de guía a cualquier entusiasta de la ciberseguridad, y que servirá de base para la ejecución de laboratorios posteriores.

#Referencias

[1] "Cómo conectar en red dos máquinas virtuales con VirtualBox - Noticias Movil". Noticias Movil. https://noticiasmoviles.com/como-conectar-en-red-dos-maquinas-virtuales-con-virtualbox/ (accedido el 27 de agosto de 2023).

[2] alu. "How to set up a Linux VPN server (Beginner’s Guide)". Average Linux User. https://averagelinuxuser.com/linux-vpn-server/ (accedido el 27 de agosto de 2023).

[3] "How to enable the EPEL repository in CentOS 9 Stream". Unix / Linux the admins Tutorials. https://unixcop.com/enable-epel-repository-centos-9-stream/ (accedido el 27 de agosto de 2023).

[4] "XAMPP: uso de certificados SSL en localhost - Syloper". Syloper | Desarrollo de software a medida. https://www.syloper.com/blog/servidores/xampp-certificados-ssl-localhost/ (accedido el 27 de agosto de 2023).

[5] "Cómo instalar y utilizar SFTP en servidores Linux - HowtoForge". HowtoForge. https://howtoforge.es/como-instalar-y-utilizar-sftp-en-servidores-linux/ (accedido el 27 de agosto de 2023).