---
# System prepended metadata

title: Practica CSAI. Securización esencial en servidores Linux y Windows.

---

# Practica CSAI. Securización esencial en servidores Linux y Windows.

2024 Q2

Daniel Silva Iglesias (daniel.silva.iglesias@udc.es)
Daniel Vicente Ramos (daniel.vicente.ramos@udc.es)


# Ubuntu Server

[Enlace de descarga](https://ubuntu.com/download/server)
Versión usada: 22.04.03

## Pasos previos

Primero definimos una red NAT y dejamos el nombre por defecto "NatNetwork"

[Añadir red NAT](https://www.youtube.com/watch?v=wdAiel6KYCQ)


Cuando creemos las maquinas virtuales, cuando esten apagadas iremos a configuración y en "Red" y "Adaptador 1" selecionamos "Red Nat"

Dejamos la configuración por defecto

![image](https://hackmd.io/_uploads/B1dVhrPha.png)



![image](https://hackmd.io/_uploads/rJu6B0EoT.png)

Seleccionamos la ISO que hemos descargado, modificaremos los siguientes apartados:

Usuario/contraseña: dsilva/123456 | dvicente/1233456
Memoria: +6000mb
CPUs: 4
Espacio: 25GB

Durante la instalación darle a siguiente en todos los pasos

![image](https://hackmd.io/_uploads/BJeUj0EoT.png)
![image](https://hackmd.io/_uploads/H1QIiR4ip.png)
![image](https://hackmd.io/_uploads/B1PIsRVia.png)



El resto todo por defecto y tras un rato deberíamos poder iniciar sesión
Iniciar sesión y hacer:

```sh
apt update
apt upgrade
```

## Ejercicio 1: 
>Crea una cuenta de usuario con la información de la tabla inferior y mueve su partición home a una partición nueva de tipo Ext3.

>Nombre: “Tu nombre”. 
Grupo: Usuarios
Shell: Bash
Dirección home /home/Usuarios
Password 123456
Expiración de la cuenta 23/07/2023

>Por último, crea un directorio en la nueva partición, Alumnado, que
pertenezca al usuario CSAI, al grupo CSAI y que tenga permisos RW para el
grupo Alumnado y RX para el usuario “Tu nombre”.


- Creamos primero el grupo del usuario:

```sh
sudo groupadd Usuarios // Comando que se utiliza para crear un nuevo grupo de usuarios.
```

- Posteriormente creamos el usuario:

```sh
sudo useradd -g Usuarios -s /bin/bash -d /home/Usuarios -e 23-07-2024 TuNombre
```

useradd: Este es el comando que se utiliza para crear un nuevo usuario.

-g Usuarios: Este parámetro establece el grupo del nuevo usuario a “Usuarios”. El grupo debe ser previamente creado.

-s /bin/bash: Este parámetro establece la shell predeterminada del nuevo usuario a “/bin/bash”, que es la shell Bash comúnmente utilizada en sistemas Linux.

-d /home/Usuarios: Este parámetro establece el directorio de inicio del nuevo usuario a “/home/Usuarios”.

-e 23-07-2024: Este parámetro establece la fecha de expiración de la cuenta del usuario. En este caso, la cuenta expirará el 23 de julio de 2024.

TuNombre: Este es el nombre del nuevo usuario que se está creando.

- Establecemos la contraseña a posteriori

```sh
sudo passwd TuNombre // Comando que se utiliza para establecer contraseñas de usuarios.
```

Y escribes `123456` para la contraseña y confirmar contraseña


- Añadir disco a la maquina

Primero apagamos la máquina para poder añadir un disco duro en el que montaremos la partición del usuario

Dense la interfaz de VirtualBox hacemos: 

`ubuntu-server > Configuración > Almacenamiento > Controlador: SATA > Añadir Disco Duro`

Desde esta pantalla vamos a añadir un disco de 500mb para la nueva partición

`Crear > VHD > Reservar completamente > Ponemos 500mb`


- Crear nueva partición

```sh
fdisk -l				       //(Listamos los discos)
fdisk /dev/sdb				       //(Seleccionamos el nuevo disco virtual)
n					       //(Crea una nueva partición)
p					       //(Tipo de partición primario)
(Los siguientes 3 pasos por defecto)
w					       //(Guardar cambios)
```

No hace falta utilizar “sudo” si entramos como superusuario mediante “sudo su” y nuestra contraseña.

Enter en la configuración hasta crear la nueva partición 


```sh
sudo mke2fs –j /dev/sdb	//(Convertimos el formato del disco a ext3) 
sudo groupadd Usuarios		// Creamos el grupo Usuarios 
```

Creamos el usuario daniv o danis, le añadimos al grupo Usuarios, le asignamos la /bin/bash y le configuramos su directorio por defecto 

```
sudo useradd -m –g Usuarios –s /bin/bash -d /home/Usuarios -e 23-07-2024 daniv 
```

Configuramos la contraseña para el usuario daniv o danis 

```
sudo passwd daniv 
```

Ponemos de propietario al grupo Usuarios en el directorio /home/Usuarios (OJO: Los “:” son obligatorios para decir al sistema que es un grupo no un usuario) 

```sh
sudo chown –R  :Usuarios  /home/Usuarios 
```

Cambia el propietario del grupo para que pueda tener permisos

```
sudo chgrp Usuarios /home/Usuarios  
```

Damos permiso de ejecución, escritura y lectura dentro del directorio Usuarios 

```
sudo chmod –R g+rwx /home/Usuarios 
```

Creamos un directorio para el punto de montaje 
```
sudo mkdir /mnt/part_usuarios 
```

Montamos la partición creada del disco en el directorio que acabamos de crear 

```sh
sudo mount /dev/sdb /mnt/part_usuarios 
```

Para que el sistema sepa dónde está asociada la partición que hemos creado, este consultará el fichero “/etc/fstab”, donde tenemos que indicar que el directorio /home/Usuarios está enlazado a dicha partición. Para ello, existen dos alternativas, hacerlo mediante el UUID y otra hacerlo directamente simplemente ejecutando el comando:
```
sudo nano /etc/fstab
```

... y añadiendo la línea “/dev/sdb /home/Usuarios ext4 defaults 0 2” al fichero. Una vez añadida la línea, ejecutamos:


```
sudo reboot // Reiniciamos para que se apliquen los cambios 
```

#### Referencias

[Link ISO Ubuntu Server](https://ubuntu.com/download/server)
[Manual groupadd](https://manpages.ubuntu.com/manpages/xenial/en/man8/groupadd.8.html)
[Manual useradd](https://manpages.ubuntu.com/manpages/xenial/en/man8/useradd.8.html)
[Manual passwd](https://manpages.ubuntu.com/manpages/xenial/en/man8/groupadd.8.html)
[Manual fdisk](https://manpages.ubuntu.com/manpages/focal/es/man8/fdisk.8.html)
[Guía particiones con fdisk](https://phoenixnap.com/kb/linux-create-partition#ftoc-heading-8)
[Guia mover home a otra particion 1](https://www.softzone.es/linux/tutoriales/mover-home-otra-particion/)
[Guia mover home a otra particion 2](https://www.howtogeek.com/442101/how-to-move-your-linux-home-directory-to-another-hard-drive/)
[Guia dew editar permisos](https://www.redhat.com/sysadmin/manage-permissions)



## Ejercicio 2: 
>Conéctate por ssh a tú propia máquina, si no has instalado Openssh en el inicio deberás hacerlo ahora.

> Cambia el puerto por defecto al 2245, limita el número máximo de intentos de conexión a 3 y desactiva la posibilidad de acceso remoto para root. 
> Si lo has hecho “bien” ahora no puedes acceder por SSH al servidor. No pasa nada porque tienes acceso “físico” a la máquina, pero esto no siempre será el caso, antes de realizar las acciones anteriores, deberías haber habilitado el acceso por medio de clave público-privada, configúralo.


Aviso: Cada vez que se indica "127.0.0.1" se puede sustituir por su alias "localhost".

Ya hemos instalado openssh durante la instalación

Hacemos un backup de la configuración inicial de ssh

```
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
```

Miramos si ssh esta funcionando

```
systemctl status ssh
```

Comprobamos que podemos acceder mediante ssh con nuestro usuario y contraseña:

```
ssh dvicente@127.0.0.1
```

Si nos pide guardar el fingerprint escribimos `yes`, para futuras conexiones. Para salir del ssh, escribimos `exit` en el terminal.

Abrimos el fichero "/etc/ssh/sshd_config" mediante el comando:

```sh
sudo nano /etc/ssh/sshd_config 
```

Haremos las siguientes modificaciones al fichero:
```sh
// Modificamos el puerto por defecto
"#Port 22" a "Port 2245"  
// Cambiamos el máximo de intentos de conexión
"#MaxAuthTries 6" a "MaxAuthTries 3" 
// Desactiva acceso remoto para root
"#PermitRootLogin prohibit-password" a "PermitRootLogin no" 
```

Para aplicar los cambios debemos reiniciar el servicio "ssh", mediante el comando:
```sh
sudo systemctl restart ssh
```

Intentamos volver a acceder mediante ssh al puerto 22, veremos que no es posible:
```sh
ssh dvicente@127.0.0.1 -p 22
```

Ahora vamos a probar con el usuario root, para ello, establecemos primero la contraseña de root. En nuestro caso `123456`, mediante el comando:

```sh
sudo passwd root
```

Volvemos a intentar conectarnos con el usuario root mediante ssh a la máquina:

```sh
ssh root@127.0.0.1 -p 2245
```

Comprobamos que aunque nos deja ingresar la contraseña, al comprobar si es correcta nos debería salir "Permission denied, please try again.", ya que desactivamos el acceso root.

Sin embargo al acceder mediante ssh al puerto 2245 con nuestro usuario veremos que podemos acceder:
```sh
ssh dvicente@127.0.0.1 -p 2245
```

Abrimos el fichero "/etc/ssh/sshd_config" mediante el comando:

```sh
sudo nano /etc/ssh/sshd_config 
```

Haremos las siguientes modificaciones al fichero:
```sh
// Habilitamos autenticacion por Pubkey
"#PubkeyAuthentication yes" a "PubkeyAuthentication yes"
```

Generamos una clave ssh para poder autenticarnos (salimos de sudo con `exit` en caso de haber hecho sudo su para generar la key para nuestro usuario)

```sh
ssh-keygen
```

Y el resto de pasos por defecto

Ahora hay que añadir la clave pública recien generada a authorized_keys en el servidor

```sh
cat /home/dvicente/.ssh/id_rsa.pub > /home/dvicente/.ssh/authorized_keys
```

Y finalmente comprobamos que podemos entrar sin introducir contraseña

```sh
ssh -p 2245 dvicente@127.0.0.1
```



#### Referencias
[Updating the SSH configuration](https://www.ibm.com/docs/en/ioc/1.6.0?topic=servers-updating-ssh-configuration)
[Desactivar el acceso al servidor root mediante SSH](https://www.ionos.es/ayuda/infraestructuras-servidores-cloud/primeros-pasos/informacion-importante-sobre-la-seguridad-de-su-servidor/desactivar-el-acceso-al-servidor-root-mediante-ssh/)

## Ejercicio 3: 
>Instala nmap, netstat, muestra los puertos abiertos y la información que hayas podido recopilar, que te pueda resultar útil a la hora de securizar la máquina, puertos abiertos, servicios, S.O…

- NMAP

Instalamos "nmap" (con la opción "-y" para aceptar la confirmación):
```sh
sudo apt install nmap -y
```

Ver puertos abiertos y los servicios que corren en cada uno:
```
nmap -p 0-65535 127.0.0.1
```
Comprobamos que en el puerto 2245 tenemos el servicio ssh corriendo.

Ver sistema operativo
```
nmap -A 127.0.0.1
```

Vemos que es incapaz de adivinar que tipo de SO utilizamos por tener el ssh en 2245, cambiando el puerto de vuelta al 22 es capaz de deducir que se usa un linux

Para que haga una estimación de que sistema operativo se esta usando
```
nmap -O 127.0.0.1
```

-A: Permite la detección de la versión del sistema operativo,  el escaneo de scripts y la traza de la ruta.
-O: Detección remota del sistema operativo utilizando TCP/IP stack fingerprinting. Con la opción "-osscan-guess": lo hace más agresivo. 
-p: Establece el rango de puertos que se van a escanear.
```
nmap localhost -A -O -p 0-65535 -osscan-guess
```

Para detectar packet filters o firewalls
```
nmap -sA localhost
```
En nuestro caso no hay ningun puerto con packet filters o Firewalls

Para comprobar si hay algun puerto protegido por packet filters o firewalls
```
nmap -PN 192.168.0.101
```
Vemos que solo responde el 22

- NetStat

Instalamos "net-tools" para instalar "netstat":
```
sudo apt install net-tools
```

Ver tabla de enrutamiento de red:
-r para mostrar la tabla de enrutamiento de red 
-n obliga a netstat a imprimir direcciones separadas por puntos en lugar de utilizar nombres de red simbólicos
```
netstat -nr
```

Mostrar estadísticas de la interfaz de red:
-i para obtener un resultado de estadísticas de una interfaz de red que esté configurada.
-a imprime todas las interfaces presentes en el kernel.
```
netstat -ai
```

Mostrar conexiones:
-a: Muestra todas las conexiones y escuchas, no solo las activas.
-n: Muestra las direcciones y puertos numéricamente en lugar de resolver nombres.
-t: Muestra las conexiones TCP.
```
netstat -ant
```

Ver información detallada sobre los servicios, puertos y conexiones:
-p: Muestra el programa o proceso asociado con cada conexión o puerto.
-u: Muestra las conexiones UDP.
-t: Muestra las conexiones TCP.
-n: Muestra las direcciones y puertos numéricamente en lugar de resolver nombres.
-a: Muestra todas las conexiones y escuchas, no solo las activas.
```
netstat -punta
```


#### Referencias
[Realiza escaneos de puertos con Nmap a cualquier servidor o sistema](https://www.redeszone.net/tutoriales/configuracion-puertos/nmap-escanear-puertos-comandos/)
[Cómo instalar el comando netstat en Linux](https://es.linux-console.net/?p=241)
[Ejemplos de comandos de nmap](https://www.tecmint.com/nmap-command-examples/)
[Nmap Cheat Sheet 2024: All the Commands & Flags](https://www.stationx.net/nmap-cheat-sheet/)

## Ejercicio 4: 
>Instala Lynis, explica qué hace, ejecútalo en el equipo y haz un resumen de los resultados que te hayan parecido más relevantes o sorprendentes.

Instalar Lynis

```sh
apt install lynis
```

### Información

Lynis es una herramienta de seguridad de código abierto que sirve para realizar auditorias, "system hardening", "penetration testing", detección de vulnerabilidades y pruebas de conformidad en sistemas Unix, macOS y Linux. 

Parámetros más comunes de de Lynis:

![image](https://hackmd.io/_uploads/r1xYpBPha.png)

### Auditoría

Ejecutar auditoría sencilla sobre el system

```sh
lynis audit system
```



```sh
  Lynis security scan details:

  Hardening index : 56 [###########         ]
  Tests performed : 257
  Plugins enabled : 1

  Components:
  - Firewall               [V]
  - Malware scanner        [X]

  Scan mode:
  Normal [V]  Forensics [ ]  Integration [ ]  Pentest [ ]

  Lynis modules:
  - Compliance status      [?]
  - Security audit         [V]
  - Vulnerability scan     [V]

  Files:
  - Test and debug information      : /var/log/lynis.log
  - Report data                     : /var/log/lynis-report.dat
```

La información de test y debug se almacenará por defecto en la ruta: "/var/log/lynis.log" y los datos del reporte en la ruta "/var/log/lynis-report.dat".

Warnings dados por Lynis

```sh
  Warnings (2):
  ----------------------------
  ! Found one or more vulnerable packages. [PKGS-7392]
      https://cisofy.com/lynis/controls/PKGS-7392/

  ! iptables module(s) loaded, but no rules active [FIRE-4512]
      https://cisofy.com/lynis/controls/FIRE-4512/
```

Tambien da varias sugerencias de mejorar contraseñas y poner fechas de expiración

Uno de los problemas que mostró Lynis que vamos a resolver en la siguiente pregunta es:

```sh
  * Set a password on GRUB boot loader to prevent altering boot configuration (e.g. boot in single user mode without password) [BOOT-5122]
      https://cisofy.com/lynis/controls/BOOT-5122/
```

Es un problema que encontro durante la ejecución de `[+] Boot and services`
```sh
  - Checking presence GRUB2                                   [ FOUND ]
    - Checking for password protection                        [ NONE ]
```

Fichero de log generado por Lynis:

![image](https://hackmd.io/_uploads/H1Kz-OHJ0.png)

Lynis ejecuta una amplia variedad de pruebas individuales para evaluar la condición del sistema. La mayoría de estas pruebas están programadas en shell script y cuentan con identificadores únicos (e.j KRNL-6000). Además, es modular y permite ejecutar pruebas personalizadas, incluso se pueden realizar en otros lenguajes de programación. En la imagen anterior se muestra el resultado de un test, que comprueba si todos los directorios de home tienen permisos suficientemente restrictivos, esto es, que el propietario tenga todos los permisos, el grupo tenga permisos de lectura y ejecución y el resto de usuarios no tienen permisos, para que nos de el OK.

#### Referencias
[Guia Lynis](https://cisofy.com/documentation/lynis/)
[Información de Lynis](https://cisofy.com/lynis/)
[Regla de Lynis sobre boot password](https://cisofy.com/lynis/controls/BOOT-5122/)


## Ejercicio 5:  
>Una de las cuestiones que nos muestra Lynis es una de las mayores vulnerabilidades de un sistema recién instalado, la inexistencia de password en el GRUB2. Si alguien accede a la sala de servidores y reinicia la máquina podría conseguir acceso total al sistema. 

> Edita el grub2 de forma que se necesite password para acceder al mismo.


```sh
grub-install -V
```

Vamos a encriptar la contraseña primero
```sh
grub-mkpasswd-pbkdf2
```
Copiamos la contraseña y editamos el fichero de grub
```sh
nano /etc/grub.d/40_custom
```

Vamos a editar el fichero 40_custom para persistirlo en caso de que haya actualizaciones:
>* The superuser/user information and password do not have to be contained in the /etc/grub.d/00_header file. The information can be placed in any /etc/grub.d file as long as that file is incorporated into grub.cfg. The user may prefer to enter this data into a custom file, such as /etc/grub.d/40_custom so it is not overwritten should the Grub package be updated. If placing the information in a custom file, do not include the "cat << EOF" and "EOF" lines as the content is automatically added from these files.

Y ponemos lo siguiente:
```sh
set superusers="dvicente"
password_pbkdf2 dvicente {contraseña generada con grub-mkpasswd-pbkdf2}
```

Si queremos añadir varios superusuarios se agregarían de la siguiente forma:
```sh
set superusers="dvicente danis"
password_pbkdf2 dvicente {contraseña generada con grub-mkpasswd-pbkdf2 para dvicente}
password_pbkdf2 danis {contraseña generada con grub-mkpasswd-pbkdf2 para danis}
```

Actualizamos la configuración de grub
```sh
sudo update-grub
```

Y reiniciamos
```sh
reboot
```

 #### Referencias

[Regla de lynis sobre boot password](https://cisofy.com/lynis/controls/BOOT-5122/)
[Guia de como securizar grub2](https://help.ubuntu.com/community/Grub2/Passwords)

# Windows Server

## Pasos previos

Enlace de descarga: https://azureforeducation.microsoft.com/devtools
Después de iniciar sesión dirigirse al apartado software y descargar la versión Windows Server 2019 Standard
 
![image](https://hackmd.io/_uploads/ByuXnAVjp.png)

 
Versión usada para: Windows Server 2019 Standard (updated Mar 2023)
Guardar la clave obtenida dándole al botón “View key”/”Ver clave”

![image](https://hackmd.io/_uploads/B1WV3ANja.png)


Se puede obtener la clave a posteriori en caso de olvidarse en el siguiente apartado:

![image](https://hackmd.io/_uploads/Bkw4nR4oa.png)

En virtualbox llamamos a la nueva maquina windows-server
Seleccionamos la edición "Stadard (Desktop Experiece)"
Y definimos las mismas credenciales:
danis
123456
Metemos la key en el apartado Instalción desatendida > Clave de producto
Ponemos las mismas especificaciones.
Memoria: +6000mb
CPUs: 4
Espacio: 25GB

Durante la isntalacion todas las opciones por defecto


## Ejercicio 1: 
>Al terminar la instalación tenemos un Windows Server sin rol ni características. Vamos a instalar algunas características esenciales para comenzar a trabajar.

- a) Inicia el Administrador del Servidor (Server Manager) si no lo ha hecho automáticamente, y cambia el nombre de la máquina al que desees.

Tan pronto termine de instalar se iniciare el Server Manager. En la barra lateral seleccionamos:
Local Server > Click en el nombre del servidor (windows-server) > Boton Change y ponemos `daniserver`

![image](https://hackmd.io/_uploads/BkC8WEIo6.png)


- b) Asígnale una ip estática al equipo y utiliza de DNS primaria tú IP y la de Google de secundaria:8.8.8.8 (en un servidor real no debería utilizarse esta ip, aunque lo veréis en muchas empresas. En nuestro laboratorio es aceptable).


Obtenemos la ip con  `ipconfig` desde el CMD
![image](https://hackmd.io/_uploads/rJAfmN8o6.png)
Para este caso es `10.0.2.15`, con mascara ``255.255.255.0`` y ``10.0.2.2``

Primero accedemos a la pestaña de "Local Server", a continuación, a la parte de Ethernet y hacemos clic en "IPv4 address assigned by DHCP, IPv6 enabled". Cuando se abra la pestaña nueva, hacer clic derecho encima de la conexión de red de Ethernet para acceder a "Properties". En el listado de conexiones seleccionamos "Internet Protocol Version 4 (TCP/IPv4)" y luego a propiedades. Configuramos la conexión con los siguientes datos:

Rellenamos con la siguiente información:
![image](https://hackmd.io/_uploads/S114VNUop.png)




- c) Deshabilita la Administración Remota

En Local Server > Remote Management hacemos click y desmarcamos el check para descativar Administración remota

![image](https://hackmd.io/_uploads/ryJgBV8sT.png)


- d) Desactiva Ipv6

En la pestaña "Local Server" hacemos clic en el enlace de Ethernet "10.0.2.15, IPv6 Enabled", volvemos a las propiedades del adaptador de red de Ethernet, en el listado quitamos el "check" de la casilla "Internet Protocol Version 6 (TCP/IPv6)" y le damos a "Ok".

- e) Asegúrate de que el servidor no se actualizará en horas de oficina que en tú empresa abarca desde las 8 a las 22 de la noche:

Start > Settings > Update & Security > Change active hours > Ponemos 8:00 AM - 10:00 PM

- f) Permite que descargue actualizaciones automáticamente pero que nos advierta cuando el equipo requiera reiniciarse para aplicarlas:

Start > Settings > Update & Security > Advanced Options > Update options y activar el "Automatically download updates, even over metered data connections (charges may apply)".

En el apartado siguiente de "Update Notifications", activar el "Show a notification when your PC requires a restart to finish updating".

![image](https://hackmd.io/_uploads/B1_ftEUsT.png)


- g) Asegúrate que, al menos, las siguientes características están activadas:

    - a. Protección en tiempo real y protección basada en la nube.
Start > Settings > Update & Security > Windows Security > Virus & threat protection > Manage Settings
Y comprobamos que esta marcado:![image](https://hackmd.io/_uploads/rJfu_EUja.png)


    - b. Firewall activado en todas las redes.
Start > Settings > Update & Security > Windows Security > Firewall & Network protection![image](https://hackmd.io/_uploads/SyTndV8o6.png)

    - c. Realiza ping a la máquina Ubuntu y desde esta al servidor Windows, demuestra que lo has conseguido sin desactivar el Firewall de Windows y explícalo.

Obtenemos la ip de la maquina de ubuntu usando 
```sh
ipconfig
```

Y hacemos ping a la ip de `enp0s3 inet`

Obtenemos la ip de la maquina de windows usando el sigiente comando en CMD 
```sh
ipconfig
```

Y hacemos ping a la ipv4 que sale

![image](https://hackmd.io/_uploads/H1_66HPha.png)

El comando ping envía paquetes ICMP al destino especificado y verifica si hay respuesta.

No es necesario desactivar el Firewall de Windows o modificar las reglas para el protocolo ICMP (utilizado por ping). 
De forma predeterminada, el firewall de Windows Defender debería bloquear las solicitudes de eco ICMP (ping) a menos que las haya permitido explícitamente. Para nuestro caso ya habíamos hecho el realm join antes de hacer ping por lo que probablemente este dentro de las execpciones permitidas por el firewall.

Estas son las reglas relacionadas con ICMP que el firewall habilita por defecto:

Reglas de entrada
![image](https://hackmd.io/_uploads/B1k1xLDn6.png)

Reglas de salida
![image](https://hackmd.io/_uploads/SkJIgLwha.png)

#### Referencias



## Ejercicio 2: 
>En este punto nuestro equipo está listo para asumir el rol de Controlador de Domino, instala los siguientes roles, Directorio Activo y DNS, promueve el equipo a Controlador de Dominio y añade un nuevo bosque con el dominio csai.local.

### Añadir roles

Server Manager Dashboard > 
- Manage > 
    - Add roles and features > 
        - *Before You Begin* hacer clic en "Next"
        - *Installation Type* hacer clic en "Next"
        - *Server Selection* hacer clic en "Next"
            - Active Directory Domain Service > Add Features
            - DNS Server > Add Features
        - *Features* hacer clic en "Next" 
        - *AD DS* hacer clic en "Next" 
        - *DNS Server* hacer clic en "Next"
        - *Confirmation* Marcar "Restart the destination server automatically if required" y pulsar "Install"
        - *Results* hacer clic en "Close" cuando finalice.


### Configurar controlador de dominio

Hacer clic en la bandera 
- Promote this server to a domain controller
    - *Deployment Configuration* Add a new forest y añadir nombre en root domain name "csai.local"
    - *Domain Controller Options* y escribir la contraseña "CSAI$123456" y volver a escribir para confirmar
        - *DNS Options* hacer clic en "Next" 
    - *Additional Options* NetBios "CSAI" y hacer clic en "Next" 
    - *Paths* hacer clic en "Next" 
    - *Review Options* hacer clic en "Next", y opcionalemte en "Review options" para comprobar la correcta configuración
    - *Prerequisites check* hacer clic en "Next"
    - *Installation* hacer clic en "Install"
    - *Results* debería reiniciarse la maquina

![image](https://hackmd.io/_uploads/S1x5TbCsT.png)


#### Referencias

[How to Install Active Directory Domain Services in Windows Server 2019 - Linkedin](https://www.linkedin.com/pulse/how-install-active-directory-domain-services-windows-server-2019-/)
[Active Directory and Forest](https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/deploy/install-a-new-windows-server-2012-active-directory-forest--level-200-)

## Ejercicio 3: 
>Ya dispones de un Controlador de Dominio totalmente operativo con su base de datos de Directorio Activo. Añade ahora un grupo, llámale “admins-csai”, crea un usuario con tu nombre y asígnalo al grupo, crea una carpeta personal para tu nuevo usuario y asígnale una unidad personal, Z: del A.D.

Server Manager > Tools
- Active Directory Users and Computers
    - CSAI.local
        - New > Groups
            - Group Name: admins-csai
            - Pulsamos "Ok"
        - New > Users 
            - Usuario: dsilva
            - Contraseña: CSAI$123456
            
            ![image](https://hackmd.io/_uploads/HyfZZGCo6.png)
            

Clic derecho encima del grupo "admins-csai" y "Add to a group", clic en "Advanced", "Starts with:" escribimos Dani y "Find Now", seleccionamos el usuario nuevo y darle a "Ok" > "Apply" > "Ok"

Crear una carpeta en el directorio "C:" y llamarla "Home", por ejemplo. Una vez creada, hacer clic derecho > Properties > Sharing > Advanced Sharing

En Share name al poner $ al final ocultamos la carpeta para el resto de usuarios por razones e seguridad

![image](https://hackmd.io/_uploads/SyrXNz0i6.png)

En Permission añadimos al usuario nuevo y le damos todos los permisos, luego "Apply" y "Ok" 

![image](https://hackmd.io/_uploads/Hky3VM0jp.png)

Vamos al Active Directory, accedemos a "Users", clic derecho sobre el usuario que hemos creado previamente > "Properties" > "Profile" y en "Home Folder" le asignamos una letra a la carpeta compartida, en este caso la "Z:" y pegamos en el "To:" la ruta de acceso a la carpeta compartida. La ruta de la carpeta compartida se puede ver al hacer clic derecho sobre la carpeta > "Properties" > "Sharing" y en "Network Path". 

![image](https://hackmd.io/_uploads/rJVwdeBpp.png)

![image](https://hackmd.io/_uploads/BJ7GFeS66.png)

#### Referencias

[Active Directory : Add Group Accounts - Server World](https://www.server-world.info/en/note?os=Windows_Server_2019&p=active_directory&f=6#:~:text=Run%20%5BServer%20Manager%5D%20and%20open,New%5D%20%2D%20%5BGroup%5D.&text=Input%20a%20Group%20name%20you'd%20like%20to%20add.&text=A%20new%20Group%20is%20just%20added.)

[Create User](https://support.huawei.com/enterprise/en/doc/EDOC1100138517/e881ba22/how-do-i-create-ad-domain-users-and-groups-on-the-ad-domain-controller)

[HOW TO CREATE HOME FOLDERS IN ACTIVE DIRECTORY (AD) – WINDOWS SERVER 2022](https://sanuja.com/blog/how-to-create-home-folders-in-active-directory)


## Ejercicio 4: 
>Descarga las siguientes herramientas, PolicyAnalizer y Windows 10 Version 1809 and Windows Server 2019 Security Baseline.zip de las que componen Microsoft Security Compliance Toolkit: La descarga debería hacerse desde un equipo cliente, no deberíamos navegar por internet desde un servidor como norma general. La url de la herramienta es: [Link](https://www.microsoft.com/en-us/download/confirmation.aspx?id=55319) (Tambíen puedes buscarla por el texto “Microsoft Security Compliance Toolkit”). A continuación, explica para qué se utiliza PolicyAnalizer y muestra un ejemplo.

Policy Analyzer es una herramienta de Microsoft que se utiliza para comparar las configuraciones de políticas de seguridad entre diferentes sistemas Windows o para verificar si un sistema cumple con los estándares de seguridad establecidos. Permite cargar archivos de configuración de politicas de grupo (Group Policy Objects - GPO) desde un sistema local o desde un controlador de dominio y luego analizarlos para ver si cumplen con los requisitos de seguridad.

En este caso vamos a obtener las GPOs baseline de nuestro SO (Windows Server 2019 Security Baseline) y examinaremos si nuestro sistema cumple con la baseline:

vir
Primero extraemos los zips y dentro de "PolicyAnalizar" > "PolicyAnalizer_40" hay un fichero llamada PolicyAnalizer.exe, lo ejecutamos.

![image](https://hackmd.io/_uploads/HyCvazCiT.png)

"Add" > "File" > "Add files from GPO(s)..." y seleccionamos del otro zip extraido "Windows 10 Version ..." y seleccionamos la carpeta "GPOs", le damos a import y le ponemos de nombre "Data"
En policyAnalizer le damos a "Compatibility Effect Status"


![image](https://hackmd.io/_uploads/H1q7pfAja.png)

La regla que ha fallado en la imagen superior detalla que es recomendable habilitar la auditoría de accesos sobre un fichero compartido.

#### Referencias

[Guia basica de PolycyAnalizer](https://arnaudloos.com/2018/intro-to-policy-analyzer/)


## Ejercicio 5: 
>Instala Microsoft LAPS y explica para qué sirve. Por último, añade Ubuntu a dominio y muestra cómo puedes acceder con tu usuario “tu nombre”, examina ambas máquinas con Nessus y señala las vulnerabilidades más relevantes que hayas encontrado.

**Microsoft LAPS** (Local Administrator Password Solution) es una herramienta diseñada para administrar automáticamente las contraseñas de las cuentas de administrador local en dispositivos unidos a **Microsoft Entra** o a **Windows Server Active Directory**.

Las principales funciones de Microsoft LAPS son:

- **Rotación automática de contraseñas**: LAPS cambia regularmente las contraseñas de las cuentas de administrador local para mejorar la seguridad.
- **Copia de seguridad de contraseñas**: LAPS almacena las contraseñas de forma segura en el directorio activo, lo que permite su recuperación en caso de necesidad.
- **Protección contra ataques**: Ayuda a prevenir ataques como Pass-the-Hash y lateral-transversal al cambiar las contraseñas de forma periódica.
- **Soporte remoto**: Permite a los equipos de soporte técnico iniciar sesión y recuperar dispositivos incluso si no son accesibles de otra manera.
- **Modelo de seguridad específico**: Utiliza listas de control de acceso y cifrado opcional para proteger las contraseñas almacenadas en Windows Server Active Directory.
- **Integración con Entra**: Admite el modelo de control de acceso basado en roles de Entra para proteger las contraseñas almacenadas en Microsoft Entra ID.

En resumen, Microsoft LAPS es una herramienta valiosa para garantizar la seguridad de las cuentas de administrador local en entornos de red.

### Instalación de LAPS

Descargamos LAPS (LAPS.x64.msi) desde un equipo cliente y la pasamos al Windows Server 2019. [Enlace de descarga](https://www.microsoft.com/en-us/download/details.aspx?id=46899)


Entramos en "Active Directory Users and Computers" y en el forest "csai.local" en users vemos 2 grupos "Schema Admins", hacemos click derecho "Add to group" con el usuario "danis". Después de añadir a los usuarios reiniciamos la máquina.

![image](https://hackmd.io/_uploads/BJ3-r8v3a.png)

En el instalador añadimos las "Management Tools" y "PowerShell module"
Abriendo un powershell como administrador ejecutamos:
```sh
Import-module AdmPwd.PS
Update-AdmPwdADSchema
```
![image](https://hackmd.io/_uploads/Skt-SLwha.png)

```
(Get-ADComputer -Identity $env:COMPUTERNAME).DistinguishedName

Set-AdmPwdComputerSelfPermission -OrgUnit "Domain Controllers"
```
![image](https://hackmd.io/_uploads/Byc6D8Pna.png)

```
Set-AdmPwdReadPasswordPermission -Identity "ADPro Computers" -AllowedPrincipals "admins-csai"

Find-AdmPwdExtendedRights -Identity "ADPro Computers"
```
![image](https://hackmd.io/_uploads/SyHXcUvhT.png)

Ir a "Group Policy Management" > "Forest: csai.local" > "csai.local", hacer clic derecho "Create a GPO in this domain, and Link it here..."

Con los siguientes datos:
* Name: "Computer – LAPS"
* Source Starter GPO: (none)

Editar la GPO que acabamos de crear e ir a "Computer Configuration" > "Policies" > "Administrative Templates" > "LAPS". Hacer clic en "Enable local admin password management" > "Edit policy setting" y establecerla en "enabled". Hacer lo mismo con "Password Settings" configurando adiccionalmente la complejidad de la contraseña, hacer clic en "Apply" y luego en "Ok.



```sh
sudo hostnamectl set-hostname ubuntu-server.udc.es
apt install realmd
realm discover 10.0.2.15
sudo realm join 10.0.2.15 --user danis -v
useradd danis
```

![image](https://hackmd.io/_uploads/SkH7rwP2p.png)


### Analsis con Nessus

Para utilizar Nessus es necesario obtener una cuenta, las opciones gratuítas son Essentials (uso ilimitado) o Expert (uso durante 7 días). Para nuestro caso usamos Expert por si habría un mayor rango de análisis disponibles.

Una vez obtenida la clave de Nessus hay que seleccionar el tipo de licencia que hemos obtenido:
![image](https://hackmd.io/_uploads/SyqzP70o6.png)

Posteriormente hay que obtener el challenge code y junto con la clave de activación generada al registrarse podemos generar una licencia que habrá que poner en la instancia de Nessus corriendo en nuestra maquina local:

![image](https://hackmd.io/_uploads/Sk9tDQ0op.png)
![image](https://hackmd.io/_uploads/r12cDXAiT.png)
![image](https://hackmd.io/_uploads/Sk7jy2inp.png)

Nessus es un servicio web que por defecto corren en la siguiente url https://localhost:8839

Para configurar analisis en Nessus pondremos las ips de Windows (ipconfig) y Ubuntu (ifconfig) para cada nuevo escaneo.

### Resultados del analisis de Nessus Expert en Windows y Ubuntu.

- Analisis del tipo "Basic Network Scan"

![image](https://hackmd.io/_uploads/r1OimclpT.png)

Ejemplo de uno de los análisis de Windows
![image](https://hackmd.io/_uploads/SkIf4cxTp.png)

Ejemplo de uno de los análisis de Ubuntu
![image](https://hackmd.io/_uploads/HJlvV9gpp.png)

Para ningún caso se encontro una vulnerabilidad de ningun tipo.

- Analisis del tipo "Policy Compliance Scan" 

No se encontraron problemas en Windows Server
![image](https://hackmd.io/_uploads/Hkn_ncxaa.png)
 ![image](https://hackmd.io/_uploads/SJK2xixpp.png)

Tampoco se encontraron problemas en Ubuntu Server
![image](https://hackmd.io/_uploads/HJlcloxTa.png)
![image](https://hackmd.io/_uploads/SkZjeogTa.png)

#### Referencias

[LAPS](https://www.microsoft.com/en-us/download/details.aspx?id=46899)
[Instalar LAPS](https://activedirectorypro.com/microsoft-laps-setup-install-guide/)
[Schema Admins and Enterprise Users](https://techcommunity.microsoft.com/t5/windows-server-for-it-pro/how-to-see-who-is-a-member-of-schema-admin-and-how-to-add-a/m-p/1385842)
[Nessus](https://docs.tenable.com/nessus/Content/InstallNessus.htm)
[Configure Tenable Nessus](https://docs.tenable.com/nessus/Content/ConfigureNessus.htm)

___

# Anexo A

## 1. Configuración y Hardening de Servidores

Has utilizado herramientas de hardening como Lynis (para Linux) y Security Compliance Toolkit 
(para Windows).

#### ¿Qué pasos específicos se tomaron para hardenizar cada servidor?

##### Ubuntu Server

1. Creamos una partición donde sólo los usuarios pertenecientes al grupo Usuarios tienen permiso en él.
2. Cambiamos el puerto del servicio ssh por defecto al 2245, limitar el número máximo de intentos de conexión a 3 y desactivar la posibilidad de acceso remoto para root.
3. Añadir contraseña al Grub para evitar accesos no deseados.

##### Windows Server

1. Asignamos una ip estática al equipo, desactivamos ipv6, cambiamos las horas de actualización del equipo y mostramos una alerta cuando se requiera reiniciar, por último activamos el antivirus de Windows.
2. Uso de PolicyAnalizer para detectar desviaciones de buenas prácticas con respecto a una configuración de Windows Server 2019 ideal
3. Uso de LAPS tanto para la gestión de contraseñas como para protección contra ataques.


#### ¿Cómo se comparan las estrategias de hardening entre Linux y Windows?

Ambos sistemas ponen énfasis en la seguridad de las contraseñas y en otorgar los mínimos privilegios necesarios a los recursos.

Windows prioriza la desactivación de funciones que puedan representar riesgos de seguridad.

Por otro lado, Linux se enfoca en la reparación de fallos de seguridad, en la encriptación, entre otros aspectos.

En Ubuntu, se utiliza la terminal para operaciones, permitiendo acceder a comandos previamente ejecutados mediante el uso de la tecla de flecha hacia arriba, lo que sugiere evitar el uso de contraseñas directamente en los comandos y optar por introducirlas cuando el sistema lo solicite.

Inicialmente, Ubuntu expone el puerto 22, lo cual podría facilitar a los atacantes la identificación del sistema operativo usando herramientas como nmap. Alterar el puerto predeterminado puede dificultar esta identificación y proteger el sistema de posibles vulnerabilidades.

Windows, a diferencia, cuenta con varios puertos abiertos desde el inicio, pero también con un firewall ya configurado. La ejecución de nmap sobre Windows puede mostrar varios puertos disponibles (como el 143, 995, 993, 587, 25 y 110 de TCP), pero con protecciones que complican la obtención de información adicional del sistema (por ejemplo, nmap podría identificar erróneamente el sistema como un dispositivo de British Gas).

Mientras que en Windows la interacción se realiza principalmente a través de interfaces gráficas, lo que no deja un registro evidente de las actividades realizadas, en Linux y especialmente en servidores, es común la descarga de paquetes directamente de Internet.

Ubuntu Server incluye diversas herramientas de línea de comandos diseñadas para reforzar la seguridad del servidor.

Windows Server, en contraste, ofrece la aplicación Server Manager, que concentra las opciones de configuración más comunes en un solo lugar.


#### ¿Nombra otro par de herramientas para hardenizar Linux y Windows respectivamente?

Linux:

* **Bastille Linux**

    Bastille Linux era una herramienta reconocida utilizada para el fortalecimiento de la seguridad en sistemas operativos Linux y otras variantes, desde hace unos años no recibe actualizaciones.

* **JShielder**

    JShielder es una herramienta de seguridad para sistemas Linux diseñada para incrementar su seguridad mediante la implementación de medidas de fortalecimiento del sistema.

Windows:

* **Hardentools**
    
    Hardentools es una herramienta de seguridad que permite deshabilitar algunas de las funcionalidades que están presentes en los sistemas de Windows 10 y Windows 11, así como en algunas aplicaciones de estos sistemas como son Microsoft Office, LibreOffice y Adobe PDF Reader. Estas funcionalidades están pensadas para empresas y los usuarios individuales se ven expuestos a la ejecución de código malicioso por atacantes.

* **AppLocker**
        
    AppLocker es una herramienta de seguridad integrada que permite administrar y restringir qué aplicaciones o archivos (como ejecutables, scripts y DLLs) pueden ser ejecutados por los usuarios en el sistema. Esta característica está integrada en algunas características de Windows Defender Control de aplicaciones.

##### Referencias

[Linux hardening](https://linuxsecurity.expert/security-tools/linux-hardening-tools)

[awesome-security-hardening](https://github.com/decalage2/awesome-security-hardening?tab=readme-ov-file#windows)

[Windows hardening tools](https://github.com/hardentools/hardentools)

[AppLocker](https://learn.microsoft.com/es-es/windows/security/application-security/application-control/windows-defender-application-control/applocker/applocker-overview)

## 2. Modelos de Calidad y Principios de Seguridad

###    ¿Cómo aplicarías estos modelos como CMMI o ISO 20000 al proceso de desarrollo y mantenimiento de los servidores?


Preguntar CMMI-DEV o CMMI-SVC?

En el caso de CMMI, se distinguirían diferentes niveles de madurez, partiendo del primer nivel, donde no hay gestión de los procesos, se encuentran:
- El segundo nivel "Gestionado": Comprendería las áreas de proceso de gestión de requisitos (REQM), planificación de proyecto (PP), monitorización del proyecto y control (PMC), y en caso de que los servidores sean proporcionados, gestión de acuerdos con proveedores (SAM). En este nivel, deberían estar definidos los procedimientos básicos para el desarrollo y mantenimiento de los servidores.
- El tercer nivel "Definido": Comprendería las áreas de proceso de gestión integrada del proyecto (IPM), gestión de riesgos (RSKM), análisis de decisiones y resolución (DAR). En este nivel, se debería tener un nivel de protección de los servidores, tener definido su integración en el proyecto y su coordinación con otras áreas de proceso, así como los procedimientos de actuación en caso de situaciones adversas. 
- El cuarto nivel "Gestionado cuantitativamente": Comprendería las áreas de proceso de gestión cuantitativa del proyecto (QPM) y rendimiento del proceso organizativo (OPP). En este nivel se debería tener una gestión cuantitativa y orientada a datos, contribuyendo a la mejora continua y una eficiencia en los procesos relacionados con la infraestructura de los servidores.
- El quinto nivel "Optimizado": Comprendería las áreas de proceso de innovación organizacional y despliegue (OID) y análisis causal y resolución (CAR). En este nivel se debería alcanzar un alto nivel de mejora continua a nivel organizacional y una capacidad de innovación y adaptabilidad para adaptarse a diferentes tecnologías.

En el caso de ISO 20000, es una norma internacional que establece los requisitos para un sistema de gestión de servicios TI. Empieza por el diseño y transición de servicios nuevos o cambios de estos, la distribución de los procesos se hacen de la siguiente forma:
- Procesos de control: Estos procesos comprenden la gestión de la configuración de los elementos que componen el servicio (servidores, software, etc) y el control de los entregables que son enviados al cliente.
- Procesos de prestación de servicios: Estos procesos definen los requisitos para la prestación de servicios.
- Procesos de resolución: Establecen los requisitos para la resolución de incidentes y problemas, lo que es necesario para el continuo funcionamiento de los servidores.
- Procesos de relación: Estos procesos definen los requisitos para tratar  con los clientes como con los proveedores, si los servidores fuesen proporcionados de forma externa.

###    ¿Qué principios de seguridad son fundamentales en el contexto de estos modelos?

Con lo mencionado anteriormente, podemos destacar la gestión de problemas e incidentes, la gestión de su configuración, la seguridad de la información gestionada y control de acceso. Se puede observar que ambos modelos se enfocan en la mejora continua del proceso, conformidad legal y un enfoque basado en el riesgo.

#### Referencias
[CMMI for Development](https://www.wibas.com/cmmi/cmmi-for-development-cmmi-dev-v13)
[What is ISO 20000?](https://advisera.com/wp-content/uploads/sites/6/2016/02/What_is_ISO_20000_white_paper_EN.pdf)

## 3. Cifrado y Seguridad de Datos

Linux: GnuPG, OpenSSL.

Windows: BitLocker, Windows Encrypting File System (EFS).

###  Muestra un ejemplo de uso de cada una de las herramientas anteriores en tus máquinas.

#### Linux

##### GnuPG

```sh
apt install gnupg # Instalamos gnupg
gpg --list-key  # Listamos las keys, en este caso no debería haber ninguna
gpg --gen-key # Generamos una key
```

Introducimos para los siguientes campos
- Nombre: dsilva
- Email: daniel.silva.iglesias@udc.es
- Passphrase: 123456
- Unsecure passphrase continue: Ok
- Re-enter passphrase: 123456

```sh
echo 'Hello, World!' > helloworld.txt
gpg --encrypt -- armor --recipient dsilva helloworld.txt
```
El comando de arriba hace lo siguiente:
- Encriptamos (–-encrypt)
- En formato ascii (–-armor)
- Para el usuario dsilva (--recipient)
- Para el fichero helloworld.txt

```sh
rm helloworld.txt
gpg --decrypt helloworld.txt.asc # en caso de no usar --armos cambiar ".asc" por ".gpg"
```

Y deberíamos poder ver el contenido del helloworld.txt original

```sh
echo 'Hello, World!' > helloworld.txt # Volvemos a crear el fichero
gpg --sign helloworld.txt # Firmar un archivo
gpg --verify helloworld.txt # Comprobar la firma de un archivo
```

##### OpenSSL

Vamos a hacer lo mismo en openssl

```sh
apt install openssl # Instalamos openssl
openssl enc -pbkdf2 -salt -in helloworld.txt -out helloworld.txt.enc -pass pass:123456
openssl enc -pbkdf2 -d -in helloworld.txt.enc -out helloworld.txt.dec -pass pass:123456
cat helloworld.txt.dec
```

#### Windows

##### BitLocker


Activamos la funcionalidad de BitLocker Drive Encryption

Server Manager Dashboard > 
- Manage > 
    - Add roles and features > 
        - *Before You Begin* hacer clic en "Next"
        - *Installation Type* hacer clic en "Next"
        - *Server Selection* hacer clic en "Next"
        - *Server Roles* hacer clic en "Next"
        - *Features* hacer clic en "Bitlocker Drive Encryption" y darle a "Next"
        - *Confirmation* hacer clic en "Install"
        - *Results* hacer clic en "Cerrar"

![image](https://hackmd.io/_uploads/SyyObxHT6.png)

https://chat.openai.com/share/614d0794-a3e9-40da-a7e9-cd6aaf5cc016


Antes de encriptar un disco es necesario habilitar TPM apra ello es necesario realizar los siguientes pasos.

Desde el Local Group Policy Editor en la siguiente ruta: 
- Computer Configuration > Administrative Templates > Windows Components > Bit Locker Drive Encryption.

Selecciona Operating System Devices y en la ventana de Require additional authentication at startup establece la siguiente configuración.
![image](https://hackmd.io/_uploads/BJ2LHlS6T.png)

Una vez hecho esto, haga clic en el botón Aceptar para que los cambios surtan efecto.

A continuacion crea una nueva particion para encriptar en Disk Management:
![image](https://hackmd.io/_uploads/SJ5fGfR6p.png)

Y sigue los siguientes pasos para encriptar con BitLocker la nueva partición:
![image](https://hackmd.io/_uploads/HyrUMzATT.png)
![image](https://hackmd.io/_uploads/ryquGM066.png)
![image](https://hackmd.io/_uploads/SJfszzCTp.png)
![image](https://hackmd.io/_uploads/BJj2fGA6p.png)

Y con esto la nueva partición esta encriptada:
![image](https://hackmd.io/_uploads/HJg9lmG0T6.png)


##### Windows Encrypting File System (EFS)

Para habilitar EFS en un archivo wn Windows basta con acceder a las propiedades y en Advanced Attributes habilitar la encriptación:

![image](https://hackmd.io/_uploads/HJM0E7066.png)

![image](https://hackmd.io/_uploads/BJ8EBQApT.png)


https://www.seguridadjabali.com/2020/01/servicios-de-cifrado-en-windows-server.html



###### Rererencias

[Tutorial de GnuPG y OpenSSL](https://ioflood.com/blog/install-gpg-command-linux/)
[Instalación alternativa OpenSSL](https://docs.openiam.com/docs-4.2.1.3/appendix/2-openssl)
[Instalar BitLocker](https://learn.microsoft.com/es-es/windows/security/operating-system-security/data-protection/bitlocker/install-server)

## 4. Auditoría y Análisis de Vulnerabilidades

Wireshark es una herramienta que permite hacer un análsis exhaustivo del tráfico que recibe una red

#### ¿Qué vulnerabilidades identificó Wireshark en comparación con Nessus?

![image](https://hackmd.io/_uploads/HJf4J40pp.png)

Wireshark realiza un analisis sobre el trafico que recibe que se puede consultar en el apartado: 
- Analize > Expert info

Dejando corriendo la aplicacion un rato el analsis realizado por Wireshark, sobre la red de ethernet, acabó detectando actividades inesperadas que Wireshark marco como Warnings.

La diferencia entre Wireshark y Nessus es que Nessus hace enfasis en la configuración del equipo, un comportamiento similar a nmap, y Wireshark permite seguir trazas de paquetes y realizar seguimiento de redes.

Wireshark es especialmente util para analizar la causa de ordenadores ya comprometidos ya que se puede trazar el trafico que el ordenador esta realizando y localizar la brecha de seguridad.

#### ¿Cómo se pueden mitigar estas vulnerabilidades?

La principal manera de mitigar estas vulnerabilidades detectadas por wireshark es sercurizar estos puestos en el firewall o preteger esos puertos mediante sistemas de *port knocking* para aumentar la seguridad

## 5. Hacking Ético y Pruebas de Penetración

 Crea una maquina virtual con Kali Linux como sistema operativo para pruebas de penetración.

Muestra capturas de herramientas como Metasploit, Nmap, SQLmap

##### Nmap

Utilizando NMap sobre la puerta de enlace de la máquina virtual

![image](https://hackmd.io/_uploads/Sk-DUm7J0.png)
![image](https://hackmd.io/_uploads/Byf587QJC.png)
![image](https://hackmd.io/_uploads/ryxnIm7JA.png)



##### Metasploit

Utilizando Metasploit para realizar un ataque básico a una máquina vulnerable Windows y obtener una sesión Meterpreter.

Creamos el exe que enviaremos a la víctima con msfvenom (en este caso con sistema operativo Windows)

![image](https://hackmd.io/_uploads/Sk6XhNQyC.png)

Creamos una sesión para escucha utilizando los siguientes comandos:

![image](https://hackmd.io/_uploads/BJGfiNQJR.png)


##### SQLmap
Siguiendo el tutorial en referencias para utilizar sqlmap en una página web de prueba.

Comando (Ver bases de datos):
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 --dbs  

![image](https://hackmd.io/_uploads/HklgA4QJR.png)
![image](https://hackmd.io/_uploads/BJ3mCNmyC.png)
![image](https://hackmd.io/_uploads/SkzrR4XyC.png)
![image](https://hackmd.io/_uploads/Bk4LCN7J0.png)

Comando (Ver tablas):
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart --tables

![image](https://hackmd.io/_uploads/SyySWBQ1R.png)

Comando (Ver columnas de la tabla "artists"):
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart -T artists --columns 

![image](https://hackmd.io/_uploads/B1rO1SmkR.png)

Comando (Ver información columna "aname"):
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart -T artists -C aname --dump 

![image](https://hackmd.io/_uploads/Bym2JBm1R.png)

Comando (Ver información columna "adesc"):
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart -T artists -C adesc --dump 

![image](https://hackmd.io/_uploads/HJq1lH71A.png)



####  ¿Qué técnicas de hacking ético podrías utilizar desde Kali para probar tus servidores?

Existen diferentes técnicas entre las que se encuentran reconocimiento, escaneo de vulnerabilidades, explotación, post-explotación, análisis de tráfico, pruebas de penetración y análisis de contraseñas.

####  ¿Qué herramientas de pruebas de penetración tenemos en Kali, muestra captura de pantalla dos de ellas?

Esta es una lista de 25 herramientas de pruebas de penetración que están incluidas en Kali (Fuente en referencias).

1. Nmap
2. Lynis
3. Fierce
4. OpenVAS
5. Nikto
6. WPScan
7. Skipfish
8. CMSMap
9. Fluxion
10. Aircrack-ng
11. Kismet Wireless
12. Wireshark
13. John the Ripper
14. THC Hydra
15. findmyhash
16. RainbowCrack
17. Metasploit Framework
18. Social Engineering Toolkit
19. BeEF
20. Yersinia
21. DHCPig
22. FunkLoad
23. SlowHTTPTest
24. Inundator
25. t50


### THC Hydra

Instalamos un servicio ftp

sudo apt-get install vsftpd

Utilizamos la herramienta THC Hydra para intentar adivinar la contraseña del usuario ftp por fuerza bruta.

Abrimos el fichero "passwd.txt" y añadimos el siguiente contenido:
"a
test
admin
abcd
kali"

Utilizamos este fichero de contraseñas para intentar averiguar la contraseña del usuario de ftp por fuerza bruta con el siguiente comando.

hydra -l kali -P passwd.txt -vV 10.0.2.15 ftp


![image](https://hackmd.io/_uploads/HykWfCtJA.png)

### SlowHTTPTest

Instalamos un servidor apache con el siguiente comando:
sudo apt-get install apache2

Accedemos a la ruta "/var/www/html/" y añadimos un fichero "test.php" con el siguiente contenido:
"<?php
sleep(30);
echo "Hello World";
?>"

Iniciamos o reiniciamos el servicio apache con el comando "sudo systemctl start apache2"

Ejecutamos el comando slowhttptest para intentar tirar el servidor apache y ver los resultados:

"slowhttptest -c 1000 -H -g -u http://localhost/slow.php"

![image](https://hackmd.io/_uploads/B1pvSAtJ0.png)


#### Referencias

[nmap | Kali Linux Tools](https://www.kali.org/tools/nmap/)
[metasploit-framework | Kali Linux Tools](https://www.kali.org/tools/metasploit-framework/)
[sqlmap | Kali Linux Tools](https://www.kali.org/tools/sqlmap/)
[Ethical hacking using kali linux](https://www.edureka.co/blog/ethical-hacking-using-kali-linux/)
[How to use SQLMAP to test a website for SQL Injection vulnerability - GeeksforGeeks](https://www.geeksforgeeks.org/use-sqlmap-test-website-sql-injection-vulnerability/)
[Lista de herramientas de penetración](https://securitytrails.com/blog/kali-linux-tools)
[THC Hydra](https://www.ngi.es/thc-hydra-ataques-contrasenas-servicios-red/)
[SlowHTTPTest](https://www.kali.org/tools/slowhttptest/)

## 6. Peritaje Informático

Herramientas de recuperación de datos como TestDisk.
 
Herramientas forenses digitales como Autopsy o Forensic Toolkit (FTK).

####  ¿A nivel de peritaje, cómo se investigaría un incidente de seguridad en los servidores?

En un incidente de seguridad, se tomarían medidas para asegurar la integridad de la evidencia. Primero, se bloquearía la escritura en los discos para evitar cualquier modificación posterior y se procedería a clonarlos, garantizando así que la evidencia original permanezca intacta. Adicionalmente, se generarían hashes de los datos clonados para confirmar que su contenido es idéntico al de la evidencia original.
 
Posteriormente, se llevaría a cabo un análisis exhaustivo tanto del disco como de la memoria utilizando herramientas especializadas. Para el análisis de disco se emplearían programas como TestDisk o Autopsy, mientras que para el análisis de memoria se utilizarían herramientas como Dumpit o Volatility.
 
Finalmente, una vez que la evidencia haya sido meticulosamente recopilada y analizada, los hallazgos se presentarían a las partes interesadas para su evaluación y toma de decisiones.

####  ¿Qué evidencia se recopilaría y cómo se presentaría en un informe de peritaje?

En un informe de peritaje informático, la evidencia recopilada y su presentación son cruciales para el análisis forense y la resolución del caso.
 
1. **Datos Digitales Recopilados**:
   - **Imágenes del disco duro**: Copias exactas de los discos duros que contienen todos los archivos, programas y el sistema operativo.
   - **Registros de memoria volátil**: Información de la RAM que puede incluir datos sobre procesos y programas en ejecución en el momento del incidente.
   - **Logs del sistema y de aplicaciones**: Registros que pueden indicar actividades anómalas o el acceso a programas y archivos relevantes.
   - **Archivos temporales y de caché**: Datos que pueden ofrecer información sobre la actividad reciente en el dispositivo.
   - **Correos electrónicos y documentos**: Comunicaciones y documentos que podrían ser relevantes para el caso.
   - **Historial de navegación y cookies**: Información que puede ayudar a reconstruir actividades en línea y patrones de comportamiento.
 
2. **Análisis y Evidencia Forense**:
   - **Análisis de la integridad de datos**: Verificación de los hashes calculados para asegurar que las copias son exactas replicas de los originales sin alteraciones.
   - **Recuperación de datos borrados**: Uso de herramientas como Autopsy para recuperar archivos que pueden haber sido eliminados.
   - **Análisis de archivos y artefactos ocultos**: Identificación de programas maliciosos, rootkits o datos escondidos.
   - **Análisis de la memoria**: Extracción de información sobre procesos y conexiones de red activos en el momento del incidente utilizando herramientas como Volatility.
 
3. **Presentación del Informe**:
    - **Portada**
    - **Tabla de contenido**
    - **Glosario**
    - **Antecedentes**
    - **Objeto**
    - **Introducción**
    - **Resumen ejecutivo**
    - **Elementos estudiados**
    - **Análisis**
    - **Conclusiones**
    - **Apéndice: el perito y el colegio**
    - **Apéndice: Acta de las acciones realizadas**

 
Este informe debe estar estructurado de manera que sea tanto comprensible como útil para los investigadores, abogados, jueces o cualquier otra parte interesada que pueda depender de sus conclusiones para tomar decisiones legales o administrativas.

Por ejemplo usando TestDisk podemos analizar el estado de los discos:

![image](https://hackmd.io/_uploads/Byh02600T.png)

![image](https://hackmd.io/_uploads/ryQg6pRRa.png)

![image](https://hackmd.io/_uploads/Sk--paR0p.png)

![image](https://hackmd.io/_uploads/H1uz6pRR6.png)

![image](https://hackmd.io/_uploads/r1lVpa0CT.png)

####  Crea un caso con Autopsy y carga la imagen de tú máquina Windows, explica el proceso y muestra capturas del mismo.

Una vez cargada la imagen de Windows en Autopsy como un datasource podemos empezar a analizarla.

En nuestro caso Autopsy encontró la siguiente información sobre nuestra imágen de Windows.

Las unicas imágenes que encontró fueron las del fondo de pantalla de Windows

![image](https://hackmd.io/_uploads/ryst5kQxA.png)

![image](https://hackmd.io/_uploads/BJlAcyXxC.png)

Identificar el sistema operativo con precision

![image](https://hackmd.io/_uploads/rJ6goJXeA.png)

En base a la entropía de los ficheros es capaz de detectar si un fichero esta comprimido:

![image](https://hackmd.io/_uploads/B1bKs17xC.png)

En este caso el fichero tiene pinta de seer una base de datos, por lo que tiene sentido que tenga baja entropía.

Tambien analiza los contenidos de los ficheros para detectar extenciones incorrectas:

![image](https://hackmd.io/_uploads/r1Zfh1Xe0.png)

Tambien busca emails, regex y otros criterios en los documentos

Tambien encontró los usuarios del sistema entre los que se encuentran los usados durante la práctica 

![image](https://hackmd.io/_uploads/HJOahJXl0.png)

Autopsy tambien registra los ficheros que fueron marcardos para ser borrados, con lo que sería posible recuperar ficheros que fueron borrados del sistema. En nuestro caso no hemos borrado ningun fichero por lo que no pudimos encontrar algun ejemplo para mostrar.

![image](https://hackmd.io/_uploads/ByE7ygXgA.png)
