En estas prácticas se empleará el software de virtualización VIRTUALBOX para simular los equipos GNU/Linux sobre los que se realizarán las pruebas.
alumno@pc: $ sh ejercicio-nmap.sh
Powershell.exe -executionpolicy bypass -file ejercicio-nmap.ps1
Notas:
$DIR_BASE
especifica donde se descargarán las imágenes y se crearán las MVs.
Por defecto en GNU/Linux será en $HOME/SSI2223 y en Windows en C:/SSI2223.
Puede modificarse antes de lanzar los scripts para hacer la instalación en otro directorio más conveniente (disco externo, etc)
.vdi.zip
de http://ccia.esei.uvigo.es/docencia/SSI/2223/practicas/ y copiarlos en el directorio anterior ($DIR_BASE
) para que el script haga el resto.
VBoxManage startvm <nombre MV>_<id>
Contiene un sistema Parrot Security OS (basado en Debian) con herramientas gráficas y un entorno gráfico ligero LXDE (Lighweight X11 Desktop Environment) [LXDE].
login | password |
---|---|
root | purple |
usuario | usuario |
(con privilegios sudo) |
root@base:~# startx
Dispositivos -> Portapapeles compartido -> bidireccional
de la ventana de la máquina virtual.
El ejercicio consta de dos partes.
máquina | dirección MAC | dirección IP |
---|---|---|
interno1 |
08:00:27:11:11:11 |
192.168.100.11 |
interno2 |
08:00:27:22:22:22 |
192.168.100.22 |
observador |
08:00:27:33:33:33 |
192.168.100.33 |
El primer ejercicio consistirá en el uso de la herramienta de escaneo de puertos NMAP para obtener información de los equipos y servicios de la red.
NMAP implementa diversas técnicas para extraer información de los equipos que forman parte de una red y para identificar los puertos y servicios que están disponibles en distintas máquinas. Algunos de los métodos disponibles realizan el escaneo sin apenas dejar rastro, mientras que otros dejarán un rastro en los ficheros de log de las máquinas analizadas.
En la máquina interno1 (192.168.100.11): habilitar y poner en marcha el servicio de LOG del sistema rsyslog
interno1:~# systemctl enable rsyslog interno1:~# systemctl start rsyslog
Al arrancar, rsyslog
empezará a registrar entradas en una serie de ficheros de LOG en el directorio /var/log
: syslog
, auth.log
, messages
, daemon.log
, kernel.log
, etc
Desde la máquina observador (192.168.100.33):
observador:~# nmap -sP 192.168.100.0/24
observador:~# nmap -sT -v -T4 192.168.100.11 observador:~# nmap -sT -v -T4 192.168.100.22
observador:~# nmap -sT -O -sV -T4 192.168.100.11 (tarda unos segundos)
Los escaneados anteriores dejan rastro. Comprobar los ficheros de log /var/log/syslog
, /var/log/daemon.log
o logs específicos de servidores en
la máquina interno1 y verificar que ha quedado constancia de las
conexiones realizadas por NMAP.
interno1:~# tail -200 /var/log/syslog | less (ampliar el limite de lineas [200] si es necesario)Nota: El rastro del escaneo de tipo -sT que queda en /var/log/syslog fue guardado por los servidores
in.fingerd, inetd, telnetd, ftpd, dovecot, postfix/smtpd
en el momento en que se completó el establecimiento de la conexión TCP (negociación SYV,SYN-ACK,ACK
).
Evaluaremos el comportamiento de los distintos tipos de escaneo sobre la máquina interno1(192.168.100.11)
interno1:~# iptables -A INPUT -i enp0s3 -p tcp \ --tcp-flags SYN SYN -m state --state NEW \ -j LOG --log-prefix "INICIO CONEXION:"Nota: Esta regla iptables captura los mensajes TCP de inicio de conexión (flag
syn
a 1) y crea una entrada en el log del sistema etiquetada con INICIO CONEXION:
interno1:~# tail -f /var/log/syslog(el terminal se libera con CONTROL+C)
observador:~# nmap -sT 192.168.100.11
Generará entradas etiquetadas con
INICIO CONEXION:
, junto con las entradas generadas por los servidores (in.fingerd, inetd, telnetd, ftpd, ...
)
observador:~# nmap -sS 192.168.100.11
Generará entradas etiquetadas con
INICIO CONEXION:
, pero no las generadas por los servidores (in.fingerd, inetd, telnetd, ftpd, ...
)
observador:~# nmap -sN 192.168.100.11
No generará entradas etiquetadas con
INICIO CONEXION:
El segundo ejercicio consistirá en el uso del conjunto de utilidades disponibles en Bettercap y de la herramienta WIRESHARK desde el equipo observador para interceptar el tráfico TELNET, SSH, HTTP y HTTPS entre los equipos interno1 e interno2.
tshark
que ofrece la misma funcionalidad desde un terminal en modo texto (ver https://tshark.dev/)
PREVIO: Habilitar el soporte SSL en el servidor apache2
de interno2 (192.168.100.22)
En el equipo interno2 (192.168.100.22):
interno2:~# mkdir /etc/apache2/ssl/ interno2:~# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
commonName
del servidor HTTP, indicar interno2.ssi.net
Nota: Para moverse por los campos del formulario de configuración del certificado se puede usar la tecla TAB para cambiar de campo y la tecla INTRO para confirmar las elecciones y avanzar.
El fichero generado (/etc/apache2/ssl/apache.pem) contiene tanto el certificado del servidor como la clave privada asociada al mismo.
interno2:~# cat /etc/apache2/ssl/apache.pem interno2:~# openssl x509 -text -in /etc/apache2/ssl/apache.pem interno2:~# openssl rsa -text -in /etc/apache2/ssl/apache.pem
Nota: make-ssl-cert es una utilidad de Debian (incluida en el paquete DEB ssl-cert) para generar certificados autofirmados para pruebas (los datos de configuración del certificado a generar se indican en /usr/share/ssl-cert/ssleay.cnf). Internamente hace uso de las utilidades de la librería openSSL.
Nota: En un servidor real se suele utilizar un certificado emitido por una autoridad de certificación (CA) reconocida (o bien una CA pública o una CA propia de la organización). No es recomendable utilizar certificados autofirmados en sistemas en producción ya que son fácilmente falsificables.
interno2:~# nano /etc/apache2/sites-available/default-ssl.confAsignar los siguientes valores a los parámetros (en caso de que estén comentados descomentarlos)
... SSLEngine on ... SSLCertificateFile /etc/apache2/ssl/apache.pem SSLCertificateKeyFile /etc/apache2/ssl/apache.pem ...Asegurar que el fichero /etc/apache2/ports.conf incluya el valor Listen 443
interno2:~# a2enmod ssl interno2:~# a2ensite default-ssl interno2:~# systemctl restart apache2
Nota:
Los ficheros de configuración de los módulos disponibles están en /etc/apache2/mods-available/ y al habilitarlos se crea un enlace simbólico desde /etc/apache2/mods-enabled/
Los ficheros de configuración de los ”sitios web” disponibles (normalmente son configuraciones de servidores virtuales Apache) están en /etc/apache2/sitess-available/ y al habilitarlos se crea un enlace simbólico desde /etc/apache2/sites-enabled/
tshark
y ponerlo en escucha sobre la tarjeta enp0s3 para ver (en caso de ser posible) el tráfico que pasa por la red
observador:~# tshark --color -i enp0s3
telnet
con interno2 (con login usuario
y contraseña usuario
)
interno1:~# telnet interno2.ssi.net Trying 192.168.100.22... Connected to interno2.ssi.net. Escape character is '^]'. Linux 5.18.0-14parrot1-amd64 (interno2.ssi.net) (pts/0) interno2.ssi.net nombre: usuario Contraseña: usuario Linux interno2.ssi.net 5.18.0-14parrot1-amd64 ... interno2:~$ ls -l interno2:~$ exit
lynx
interno1:~# lynx interno2.ssi.net (salir con tecla Q o [control]+C)
tshark
con [control]+C
interno1:~# arp -n Address HWtype HWaddress Flags Mask Iface 192.168.100.33 ether 08:00:27:33:33:33 C enp0s3 192.168.100.1 (incomplete) enp0s3 192.168.100.22 ether 08:00:27:22:22:22 C enp0s3
interno2:~# arp -n Address HWtype HWaddress Flags Mask Iface 192.168.100.33 ether 08:00:27:33:33:33 C enp0s3 192.168.100.11 ether 08:00:27:11:11:11 C enp0s3 192.168.100.1 (incomplete) enp0s3
Objetivos:
08:00:27:33:33:33
(que realmente pertene a 192.168.100.33 (observador)).
Para llevar a cabo el ARP spoofing y el ataque MITM se usarán los suguientes módulos de Bettercap
net.probe
: Módulo que sondea la red enviando paquetes de prueba a cada IP para que el módulo net.recon
los detecte (ver https://www.bettercap.org/modules/ethernet/net.recon/)
net.recon
: Módulo que consulta la tabla ARP del sistema para detectar las nuevas máquinas que vayan apareciendo en la red monitorizada (ver https://www.bettercap.org/modules/ethernet/net.probe/)
arp.spoof
: Módulo que inunda la red con paquetes ARP para hacerse pasar por las máquinas con las IPs seleccionadas y hacer posible el ataque MITM (ver https://www.bettercap.org/modules/ethernet/spoofers/arp.spoof/)
net.sniff
: Módulo que actua como sniffer capturando los paquetes recopilados gracias a la falsificación ARP y retransmitiéndolos a los destinatarios originales. Tiene capacidad de reconocer diferentes protocolos y realizar filtrado sobre sus paquetes (ver https://www.bettercap.org/modules/ethernet/net.sniff/)
Nota: opcionalmente se puede habilitar el interfaz web de Bettercap haciendo uso de los módulos api.rest
y http.ui
(ver https://www.bettercap.org/usage/webui/).
Pasos a seguir:
observador:~# bettercap -iface enp0s3 192.168.100.0/24 > 192.168.100.33 » help net.probe 192.168.100.0/24 > 192.168.100.33 » help net.recon 192.168.100.0/24 > 192.168.100.33 » net.recon on 192.168.100.0/24 > 192.168.100.33 » net.probe on (esperar unos segundos) 192.168.100.0/24 > 192.168.100.33 » net.probe off 192.168.100.0/24 > 192.168.100.33 » net.show +----------------+-------------------+-------------------+---------------------------+-------+-------+----------+ | IP | MAC | Name | Vendor | Sent | Recvd | Seen | +----------------+-------------------+-------------------+---------------------------+-------+-------+----------+ | 192.168.100.33 | 08:00:27:33:33:33 | enp0s3 | PCS Computer Systems GmbH | 0 B | 0 B | 19:39:12 | | | | | | | | | | 192.168.100.11 | 08:00:27:11:11:11 | interno1.ssi.net. | PCS Computer Systems GmbH | 120 B | 92 B | 19:39:36 | | 192.168.100.22 | 08:00:27:22:22:22 | interno2.ssi.net. | PCS Computer Systems GmbH | 120 B | 92 B | 19:39:36 | +----------------+-------------------+-------------------+---------------------------+-------+-------+----------+ 192.168.100.0/24 > 192.168.100.33 »
Nota 1: No se debe salir de la consola de Bettercap durante la sesión de ARP Spoofing y MITM, es necesario que los módulos de Bettercap estén en funcionamiento.
Nota 2: (opcional) Es posible poner en marcha el interfaz Web de Bettercap
apache
con el comando systemctl stop apache2
http-ui
(script propio de Bettercap) con el comando include http-ui
(ver código en /usr/share/bettercap/caplets/http-ui.cap
)
http://127.0.0.1:80
, con el usuario user
y la contraseña pass
(definidos en /usr/share/bettercap/caplets/http-ui.cap
))
tshark
y ponerlo en escucha sobre la tarjeta enp0s3 para ver el tráfico ARP generado por Bettercap durante el ataque de ARP spoofing
observador:~# tshark --color -i enp0s3
192.168.100.0/24 > 192.168.100.33 » help arp.spoof 192.168.100.0/24 > 192.168.100.33 » help net.sniff 192.168.100.0/24 > 192.168.100.33 » set arp.spoof.internal true 192.168.100.0/24 > 192.168.100.33 » set arp.spoof.targets 192.168.100.11,192.168.100.22 192.168.100.0/24 > 192.168.100.33 » arp.spoof on
tshark
y cerrar la captura con [control]+C
interno1:~# arp -n
interno2:~# arp -n
CUESTION 1: ¿Cómo son los mesajes ARP que envia el módulo arp.spoof
? ¿Cómo quedan las tablas ARP de interno1 e interno2 y qué significan esos valores?
net.sniff
de Bettercap, dejará los paquetes capturadas en el fichero /tmp/telnet.pcap
192.168.100.0/24 > 192.168.100.33 » set net.sniff.filter "not arp" 192.168.100.0/24 > 192.168.100.33 » set net.sniff.output /tmp/telnet.pcap 192.168.100.0/24 > 192.168.100.33 » net.sniff on
interno1:~# telnet interno2.ssi.net Trying 192.168.100.22... Connected to interno2.ssi.net. Escape character is '^]'. Linux 5.18.0-14parrot1-amd64 (interno2.ssi.net) (pts/1) interno2.ssi.net nombre: usuario Contraseña: usuario Linux interno2.ssi.net 5.18.0-14parrot1-amd64 ... interno2:~$ ls -l ... interno2:~$ exit
net.sniff off
192.168.100.0/24 > 192.168.100.33 » net.sniff off
observador:~# wireshark /tmp/telnet.pcap
telnet
en embos sentidos
[botón derecho] > Seguir > Flujo TCP
net.sniff
de Bettercap, dejará los paquetes capturadas en el fichero /tmp/ssh.pcap
192.168.100.0/24 > 192.168.100.33 » set net.sniff.output /tmp/ssh.pcap 192.168.100.0/24 > 192.168.100.33 » net.sniff on
interno1:~# ssh usuario@interno2.ssi.net usuario@interno2.ssi.net's password: usuario Linux interno2.ssi.net 5.18.0-14parrot1-amd64 ... interno2:~$ ls -l ... interno2:~$ exit
net.sniff off
192.168.100.0/24 > 192.168.100.33 » net.sniff off
observador:~# wireshark /tmp/ssh.pcap
Key Exchange Init
), intercambio de parámetros Diffie-Hellman y New Keys
marcando el fin de la negociación y el inicio del tráfico cifrado con las claves secretas acordadas.
ssh
en ambos sentidos
[botón derecho] > Seguir > Flujo TCP
net.sniff
de Bettercap, dejará los paquetes capturadas en el fichero /tmp/http.pcap
192.168.100.0/24 > 192.168.100.33 » set net.sniff.output /tmp/http.pcap 192.168.100.0/24 > 192.168.100.33 » net.sniff on
lynx
(también puede hacer con el navegador gráfico Falkon)
interno1:~# lynx interno2.ssi.net (para generar tráfico, acceder a alguna de las aplicaciones disponibles, por ejemplo DVWA con admin/password)
Nota: En caso de no obtener respuesta, reiniciar el servidor apache2
en la máquina interno2 (192.168.100.22)
interno2:~# systemctl restart apache2
net.sniff off
192.168.100.0/24 > 192.168.100.33 » net.sniff off
observador:~# wireshark /tmp/http.pcap
http
por separado
[botón derecho] > Seguir > Flujo TCP
[botón derecho] > Seguir > Flujo HTTP
net.sniff
de Bettercap, dejará los paquetes capturadas en el fichero /tmp/https.pcap
192.168.100.0/24 > 192.168.100.33 » set net.sniff.output /tmp/https.pcap 192.168.100.0/24 > 192.168.100.33 » net.sniff on
lynx
(también puede hacer con el navegador gráfico Falkon, importante añadir https
)
interno1:~# lynx https://interno2.ssi.net (para generar tráfico, acceder a alguna de las aplicaciones disponibles, por ejemplo DVWA con admin/password)
Nota: El navegador pedirá confirmación (lynx
varias veces) al tratarse de un certificado autofirmado emitido por una CA no reconocida (no está en /etc/ssl/certs/ca-certificates.pem
) y considerarlo no fiable.
net.sniff off
192.168.100.0/24 > 192.168.100.33 » net.sniff off
observador:~# wireshark /tmp/https.pcap
tls
Client Hello
)
[botón derecho] > Seguir > Flujo TCP
telnet
frente a ssh
y de http
respecto https
)
ENTREGA: en MOOVI, hasta 27/12/2022 (individual o parejas)