lab-00-vm — instantaneas, restauracion y ventana de dano ======================================================== ESTADO: LABORATORIO LOCAL Target: ninguno publicado (se opera con "docker compose exec") Autorizacion: sistema local creado por ti para entrenamiento. Este laboratorio no publica ni un solo puerto. No hay nada que apuntar desde el navegador y eso es deliberado: es el ejemplo de un laboratorio cuya superficie hacia tu maquina es cero. Se entra por "docker compose exec" y por ningun otro sitio. Por que contenedores y no una maquina virtual de verdad ------------------------------------------------------- El curso tiene que poder verificarse en cualquier equipo con Docker, sin exigir un hipervisor, licencias ni 20 GB libres. Los contenedores de aqui SIMULAN el ciclo de trabajo de una VM con instantaneas. El mapeo es literal: VM real este laboratorio ------------------------------ ------------------------------ disco virtual de la invitada volumen disco_invitada instantanea (snapshot) copia en almacen_instantaneas revertir a la instantanea copiar del almacen al disco red solo-anfitrion red vm_interna (internal: true) apagar y borrar la VM docker compose down -v Lo que un contenedor NO te da y una VM si: kernel separado. Un exploit que escapa del kernel compartido sale del contenedor y llega a tu maquina. Por eso el material realmente destructivo del curso se practica en una VM, y este laboratorio solo entrena el habito de instantanea/reversion. Que levanta ----------- invitada la maquina que se ensucia y se rompe; monta disco_invitada en /disco instantaneas gestor: monta el disco de la invitada Y el almacen; es la unica pieza con acceso a ambos consola puesto de observacion; NO monta el disco, solo ve a la invitada por la red interna Una sola red: vm_interna internal: true, SIN salida a internet Dos volumenes: disco_invitada estado mutable de la invitada almacen_instantaneas copias del estado en momentos conocidos Los dos volumenes estan separados a proposito. Una instantanea guardada dentro del mismo disco que pretende proteger no es una instantanea: si el disco se corrompe, se lleva la copia con el. Comandos -------- docker compose up -d levantar docker compose ps ver que corre docker compose exec invitada sh entrar a la invitada docker compose exec instantaneas sh entrar al gestor docker compose down -v destruir todo Ciclo completo: instantanea, dano, reversion -------------------------------------------- # 1) estado limpio docker compose exec invitada cat /disco/estado/marca.txt # 2) tomar una instantanea antes de tocar nada docker compose exec instantaneas sh -c \ "mkdir -p /instantaneas/limpia && cp -a /disco/estado /instantaneas/limpia/" # 3) romper la invitada a proposito docker compose exec invitada sh -c \ "echo 'estado=roto' > /disco/estado/marca.txt && rm -f /disco/estado/datos.txt" docker compose exec invitada cat /disco/estado/marca.txt # 4) revertir a la instantanea docker compose exec instantaneas sh -c \ "rm -rf /disco/estado && cp -a /instantaneas/limpia/estado /disco/" # 5) comprobar que volviste al estado conocido docker compose exec invitada sh -c \ "cat /disco/estado/marca.txt && cat /disco/estado/datos.txt" Lo que ocurre entre el paso 2 y el paso 4 es la VENTANA DE DANO: todo lo que se produzca ahi dentro se pierde al revertir. Medirla y decidirla es el ejercicio, no un detalle. Como comprobar que el aislamiento funciona ------------------------------------------ # ninguna pieza tiene salida a internet docker compose exec consola sh -c "curl -m 5 -sS https://example.com; echo salida=$?" # se espera un fallo de red, no una pagina # las piezas si se ven entre ellas por nombre de servicio docker compose exec consola sh -c "getent hosts invitada" # no hay NINGUN puerto publicado en el anfitrion docker compose ps --format "{{.Service}} {{.Ports}}" # la columna de puertos debe salir vacia Si algo falla ------------- "no such service" estas en otro directorio; entra en cursos/seguridad/labs/lab-00-vm el cp de reversion no encuentra /instantaneas/limpia no tomaste la instantanea (paso 2); ese es exactamente el fallo que el laboratorio quiere que sufras una vez la consola SI llega a internet revisa que vm_interna conserve internal: true y que ningun servicio este en otra red Cuando termines, siempre: docker compose down -v