====== [Fort]Práctica 3: Securizando Aplicaciones ======
===== 1. Abre un navegador y realiza una descarga =====
==== Revisa con el TOP el consumo de CPU ====
Firefox (Proceso 110216) está consumiendo en torno al 60% de la CPU como podemos ver en la siguiente captura:
{{:master_cs:fortificacion:pasted:20250218-140416.png}}
==== Usa cpulimit para reducir el consumo de CPU a 1/5 del que usa ====
Para realizar esto ejecutaremos los siguientes comandos:
cd /sys/fs/cgroup/
mkdir firefox #Creamos el cgroup para firefox
cd firefox
{{:master_cs:fortificacion:pasted:20250218-141526.png}}
Tras eso añadimos firefox al cgroup y procedemos a limitar su consumo de CPU
echo 110216 > cgroup.procs#Metemos el proceso de firefox en el cgroup
echo 200000 1000000 > cpu.max #Limitamos el uso de CPU al 20%
{{:master_cs:fortificacion:pasted:20250218-141651.png}}
==== Resultado ====
Como se puede observar, el consumo ha bajado y ahora consume un 20% máximo.
{{:master_cs:fortificacion:pasted:20250218-141754.png}}
===== 2. Crea un container Debian y arráncalo =====
Para arrancar un container debian usamos el siguiente comando:
lxc-create -t debian -n deb
==== Establece una contraseña para el usuario root del container ====
Para ello debemos entrar primero a la máquina con el siguiente comando para abrir la terminal del contenedor:
lxc-start #Arrancamos la máquina
lxc-attach -n deb /bin/sh #Llamamos a la terminal
{{:master_cs:fortificacion:pasted:20250218-142719.png}}
Tras eso procedemos a establecer la contraseña del root con el siguiente comando:
passwd root
{{:master_cs:fortificacion:pasted:20250218-142912.png}}
==== Añade 3 usuarios ====
Desde el mismo sitio que hemos establecido la contraseña para el root procedemos a crear los 3 usuarios:
su - root
useradd -m -s /bin/bash usuario1
useradd -m -s /bin/bash usuario2
useradd -m -s /bin/bash usuario3
{{:master_cs:fortificacion:pasted:20250218-143239.png}}
==== Instala apache 2 y ssh en el container ====
Comenzamos instalando apache 2:
{{:master_cs:fortificacion:pasted:20250218-143343.png}}
Tras eso procedemos a instalar SSH:
{{:master_cs:fortificacion:pasted:20250218-143549.png}}
==== Cambia la dirección de red en el container para usar una dirección de red estática ====
Para establecer una IP estática usamos el siguiente comando:
sudo ifconfig eth0 10.0.3.68 netmask 255.255.255.0 up
{{:master_cs:fortificacion:pasted:20250218-144508.png}}
==== Cambial el puerto de SSH al 222 ====
Vamos a la ruta /etc/ssh y modificamos el archivo sshd_config:
{{:master_cs:fortificacion:pasted:20250218-144810.png}}
==== Modifica el archivo de configuración del container ====
{{:master_cs:fortificacion:pasted:20250218-145044.png}}
===== 3. Crea un cgroup =====
Creamos un nuevo csgroup con el siguiente comando:
cd /sys/fs/cgroup/
mkdir grupo #Creamos el nuevo cgroup
cd grupo
{{:master_cs:fortificacion:pasted:20250218-145523.png}}
==== Abre un terminal y añade el shell de este al cgroup ====
echo $$ #Obtenemos el ID del proceso del Shell (En este caso 1709)
echo 1709 > cgroup.procs #Añadimos el proceso del shell al gproup
{{:master_cs:fortificacion:pasted:20250218-150155.png}}
==== Desde ese mismo shell abre firefox y atril ====
{{:master_cs:fortificacion:pasted:20250218-150247.png}}
==== Revisa el contenido de cgroup.procs y memory.current ====
{{:master_cs:fortificacion:pasted:20250218-150514.png}}
{{:master_cs:fortificacion:pasted:20250218-150537.png}}
==== Pon un 1 en cgroups.freeze ¿Que pasa? ¿Que hay ahora en memory.current? ====
Los programas que abrimos antes quedan congelados. El contenido de memory.current es ahora este:
{{:master_cs:fortificacion:pasted:20250218-151059.png}}
Este valor que podemos observar es la memoria consumida por los procesos de cgroup en bytes. Ahora el valor parece ser superior al que vimos anteriormente. Tras esto descongelamos el proceso poniendo un 0 en groups.freeze
==== Pon los valores 30000 100000 en cpu.max ¿Que pasa? ====
{{:master_cs:fortificacion:pasted:20250218-151350.png}}
Estamos limitando cuanto pueden consumir los procesos del cgroup, en este caso estamos limitando los procesos a un 30%
==== 4. Crea una copia de ls, llámala listar y crea un perfil de apparmor vacío para ella ====
{{:master_cs:fortificacion:pasted:20250218-151949.png}}
aa-easyprof /usr/bin/listar #Creamos archivo de configuración plantillaque debemos editar
aa-easyprof /usr/bin/listar > /etc/apparmor.d/usr.bin.listar #Copiamos el archivo generado al apparmor
nano /etc/apparmor.d/usr.bin.listar
Editamos el archivo añadiendo las reglas de denegación debajo de "# No read paths specified"
{{:master_cs:fortificacion:pasted:20250218-153930.png}}
Tras eso parseamos el archivo modificado para apparmor y habilitamos la política con enforce:
apparmor_parser -r /etc/apparmor.d/usr.bin.listar
aa-enforce /usr/bin/listar
=== ¿Que pasa cuando se usa listar para mostrar /etc? ===
Nos sale que no tenemos permisos para ver el directorio
{{:master_cs:fortificacion:pasted:20250218-154741.png}}
=== ¿Que pasa cuando usas -l con otros directorios? ===
Se muestran pero sin nombres de usuario al que pertenecen ni grupos:
{{:master_cs:fortificacion:pasted:20250218-154826.png}}