1 00:00:05,679 --> 00:01:08,299 Bueno, sí, totalmente. Perfecto. ¿Puedes ver bien la pantalla que estoy compartiendo? Vale, fenomenal. Bueno, pues mi nombre es Laura Coveño y efectivamente voy a presentar el proyecto final del módulo de Administración de Sistemas Informáticos en Red. Yo lo he titulado Plataforma de Gestión de Contraseñas Seguras. 2 00:01:08,299 --> 00:01:38,280 Un pequeño índice nada más a modo de resumen de lo que quiero presentar, hablaré un poquito de la introducción de por qué me planteo este proyecto, qué objetivos tengo con el proyecto, qué tecnología he usado para desarrollarlo, hablaré de la parte del desarrollo del proyecto, de las pruebas que he hecho y luego la parte final ya de producción o puesta en marcha, un poquito de la documentación que he considerado oportuna generar a raíz del proyecto y luego finalmente el contexto laboral, conclusiones, 3 00:01:38,299 --> 00:01:52,060 y vías o caminos a seguir más adelante, porque bueno, esto lógicamente es un proyecto, un inicio, pero tiene, yo creo, mucha capacidad de desarrollo a largo plazo. 4 00:01:52,060 --> 00:02:08,740 Entonces, problema o necesidad que he detectado yo, ciberseguridad, sabemos que hoy en día es un aspecto crítico, ataques, ciberataques, robos, phishing, etc. 5 00:02:08,740 --> 00:02:14,599 CTC. Contraseña yo creo que es un poco la primera línea de defensa que tenemos en cualquier 6 00:02:14,599 --> 00:02:19,419 sistema informático, en cualquier programa, en cualquier aplicación. La contraseña es 7 00:02:19,419 --> 00:02:24,680 un poco la primera barrera a la hora de frenar estos ataques, este tema de ciberseguridad. 8 00:02:25,680 --> 00:02:30,280 Yo me he dado cuenta, sobre todo desde que he empezado la formación en centros de trabajo, 9 00:02:30,979 --> 00:02:37,199 que los usuarios cometemos muchísimos errores a la hora de gestionar, generar y sobre todo 10 00:02:37,199 --> 00:02:43,259 almacenar contraseñas. Yo mi formación en centros de trabajo la he desarrollado haciendo 11 00:02:43,259 --> 00:02:49,120 una instalación de un programa multiplataforma que funciona un poco como gestor de almacén, 12 00:02:49,300 --> 00:02:56,120 facturación, proveedores. Lleva 200.000 contraseñas. Sí que es verdad que es un programa que tiene 13 00:02:56,120 --> 00:03:01,620 muchísimas aplicaciones, pero también tiene muchas contraseñas. Entonces, desde el minuto 14 00:03:01,620 --> 00:03:07,139 uno yo me di cuenta que yo, para empezar, yo como instaladora o como un poco desarrolladora 15 00:03:07,139 --> 00:03:12,580 de esa parte de la tarea del programa, no era capaz de gestionar tantas contraseñas, 16 00:03:12,680 --> 00:03:18,379 las almacenaba mal, las perdía, las tenía en un blog apuntadas y cuando luego he hecho 17 00:03:18,379 --> 00:03:21,960 formación a clientes y he estado trabajando con los clientes me he dado cuenta que les 18 00:03:21,960 --> 00:03:27,460 pasaba exactamente lo mismo, con lo cual dije, bueno, pues aquí tenemos una cosa importante 19 00:03:27,460 --> 00:03:32,159 a trabajar y que voy a utilizar para mí y proyecto final de módulo porque creo que 20 00:03:32,159 --> 00:03:36,680 es algo interesante. Sí que es verdad, como comento aquí en la diapositiva, que existen 21 00:03:36,680 --> 00:03:41,280 muchas soluciones ya en el mercado, ¿vale? Pero la inmensa mayoría de ellas para empezar 22 00:03:41,280 --> 00:03:49,500 son de pago y luego requieren una serie de instalaciones, mantenimientos, recursos que 23 00:03:49,500 --> 00:03:53,560 en muchos casos no son necesarias o creo que no son necesarias. Hay empresas pequeñas 24 00:03:53,560 --> 00:04:01,180 o proyectos pequeños que sí necesitan gestionar bien las contraseñas, pero que no requieren de una infraestructura como estas soluciones de pago. 25 00:04:01,599 --> 00:04:37,310 Entonces, un poco aquí en este contexto, dime, la voy pasando, pues ya estamos, una vez por lo paso aquí ya está, vale, bueno, 26 00:04:37,310 --> 00:04:49,370 Un poco poniendo en antecedentes de dónde he detectado yo el problema y por dónde quiero tirar. Seguimos desde aquí entonces, ¿vale? Nada, a ti, perdona, ¿eh? 27 00:04:49,370 --> 00:04:59,050 Entonces, como te decía, la idea o lo que me propongo como objetivo general de este proyecto es mejorar la seguridad a los usuarios 28 00:04:59,050 --> 00:05:05,110 ofreciéndoles una alternativa que sea sencilla y sobre todo gratuita, que les permita almacenar las contraseñas 29 00:05:05,110 --> 00:05:09,389 sin tener que depender de estas aplicaciones o de estas soluciones que te digo que están en el mercado 30 00:05:09,389 --> 00:05:11,910 pero que suelen ser privativas o de pago 31 00:05:11,910 --> 00:05:17,110 Dentro de ese objetivo general me marco también unos objetivos específicos para el proyecto 32 00:05:17,110 --> 00:05:32,670 Lo que quiero es que haya una autenticación con el tema del pass hash. Necesito o creo que necesitamos tener una interfaz web que nos permita que el usuario, de una manera muy sencillita, muy sencillita, pueda ir almacenando contraseñas. 33 00:05:33,209 --> 00:05:43,569 Quiero también crear una base de datos que esté cifrada, que lleve sus medidas de seguridad y que sea muy básica para que no consuma ni requiera demasiado mantenimiento. 34 00:05:45,149 --> 00:05:53,629 Y luego, por supuesto, que el acceso a esta interfaz web sea de forma, con protocolo SSL, para garantizar la seguridad de todos los datos. 35 00:05:54,290 --> 00:06:00,769 Y siguiendo un poco una arquitectura más o menos modular, ¿vale? Dentro de las posibilidades... ¡Uy! Perdón. 36 00:06:00,769 --> 00:06:08,339 Vale, entonces, en cuanto a la tecnología que he utilizado para desarrollar este proyecto 37 00:06:08,339 --> 00:06:13,180 He trabajado todo con VirtualBox, he creado tres máquinas virtuales, ¿vale? 38 00:06:13,180 --> 00:06:17,639 En un entorno LAN, una máquina que he llamado máquina de desarrollo 39 00:06:17,639 --> 00:06:23,639 En la que llevo a cabo toda la creación de base de datos, toda la generación del backend 40 00:06:23,639 --> 00:06:29,019 Un frontend un poquito así facilón, una aplicación que conecte ambos 41 00:06:29,019 --> 00:06:31,639 Eso va todo en una máquina que he llamado de desarrollo 42 00:06:32,399 --> 00:06:51,480 Una máquina de pruebas que es la que voy a utilizar para todo el tema de seguridad, de hacer pruebas de ciberataques, de pentesting y demás. Y finalmente una máquina de producción en la que ya voy a hacer, digamos, la gestión real de las contraseñas, voy a hacer la producción real de mi proyecto. 43 00:06:51,480 --> 00:07:09,680 ¿Vale? Todas van basadas en arquitectura cliente-servidor y todas en un entorno Linux con Apache, MySQL y PHP, menos en la máquina de producción en vez de Apache he utilizado otro servidor web que, bueno, ahora un poquito más adelante os cuento cuál y por qué. 44 00:07:09,680 --> 00:07:17,759 Como decía, hay una primera máquina que es de desarrollo en la que llevo a cabo tanto el backend como la aplicación como el frontend 45 00:07:17,759 --> 00:07:23,339 Dentro del backend, bueno es que esto claro debería ir saliendo una a una las imágenes, perdona 46 00:07:23,339 --> 00:07:26,180 Pero como no va en presentación que lo he puesto aquí 47 00:07:26,180 --> 00:07:32,620 Decía que hay como tres partes básicas dentro del backend 48 00:07:32,620 --> 00:07:38,379 Por un lado la base de datos, el lenguaje PHP que es un poco el que configura y conecta 49 00:07:38,379 --> 00:07:41,699 y Apache, que es con el que hacemos el servicio web. 50 00:07:42,800 --> 00:07:48,180 Como base de datos, en vez de MySQL, me he decantado por SQL Edit, 51 00:07:48,500 --> 00:07:53,060 una base de datos que es un poquito más ligera, que no necesita servidor, muy fácil de uso, 52 00:07:53,779 --> 00:07:57,199 una única tabla relacional en la que ponemos usuario y contraseña, 53 00:07:57,720 --> 00:08:05,259 y poco más, porque realmente la finalidad del gestor o de esta plataforma es almacenar contraseña. 54 00:08:05,339 --> 00:08:07,199 Es usuario y contraseña, usuario y contraseña. 55 00:08:08,379 --> 00:08:25,100 PHP, que es el lenguaje que utilizamos y cómo configuramos todo, vamos a utilizar tanto el password hash como el password verify, hash para el tema de revelación y subida de contraseñas, verify para tenerlas almacenadas y verificadas correctamente. 56 00:08:26,240 --> 00:08:34,980 Apache también lo he utilizado no solamente como servidor web, sino para instaurar una serie de cabeceras de seguridad, intentando siempre mejorar. 57 00:08:34,980 --> 00:08:41,139 Lógicamente es una plataforma que va a almacenar datos clave para la empresa o para el servicio o para la aplicación 58 00:08:41,139 --> 00:08:45,259 Y quiero que tenga, pues, cuanta mayor seguridad, mejor 59 00:08:45,259 --> 00:08:51,960 Por último, también me parecía correcto o creo que era necesario tener un backup diario, ¿vale? 60 00:08:51,960 --> 00:08:56,500 Entonces he utilizado la aplicación de Chrome que funciona muy bien en Linux 61 00:08:56,500 --> 00:09:01,460 Y que me permite configurar, pues bueno, en este caso ha sido diario, que se haga a medianoche 62 00:09:01,460 --> 00:09:03,860 un backup todos los días para tener 63 00:09:03,860 --> 00:09:05,399 esa información guardada 64 00:09:05,399 --> 00:09:08,240 después necesitaba 65 00:09:08,240 --> 00:09:09,820 generar o tener una 66 00:09:09,820 --> 00:09:11,059 aplicación que un poco 67 00:09:11,059 --> 00:09:13,659 gestionara todas estas contraseñas 68 00:09:13,659 --> 00:09:15,000 y las tuviera almacenadas 69 00:09:15,000 --> 00:09:17,740 para hacer un poco la comunicación 70 00:09:17,740 --> 00:09:19,679 con la base de datos, pues bueno, tenemos 71 00:09:19,679 --> 00:09:21,779 el archivo base database 72 00:09:21,779 --> 00:09:23,679 PHP y luego 73 00:09:23,679 --> 00:09:25,419 lo que he hecho ha sido, por eso decía 74 00:09:25,419 --> 00:09:26,720 es una estructura modular 75 00:09:26,720 --> 00:09:29,500 entre comillas, dentro de la 76 00:09:29,500 --> 00:09:30,539 simplicidad del proyecto 77 00:09:30,539 --> 00:09:34,440 Archivos independientes para cada una de las partes 78 00:09:34,440 --> 00:09:36,759 Tengo un archivo para el registro de usuarios 79 00:09:36,759 --> 00:09:39,039 Tengo un archivo para el acceso de usuarios 80 00:09:39,039 --> 00:09:41,919 Tengo un archivo para actualizar los usuarios 81 00:09:41,919 --> 00:09:45,240 Y otro archivo para que se eliminen los usuarios 82 00:09:45,240 --> 00:09:51,360 De esta forma hacemos un poquito modular todo el tema de la base de datos y de la aplicación 83 00:09:51,360 --> 00:10:01,159 Con respecto al frontend lo que yo quiero es que el usuario de forma intuitiva, facilona y rápida 84 00:10:01,159 --> 00:10:06,519 pueda teclear su contraseña, guardarla y olvidarse, ¿vale? 85 00:10:06,519 --> 00:10:12,620 Tener dentro de un mismo archivo o de un mismo login, un mismo role, 86 00:10:13,080 --> 00:10:16,320 todas las contraseñas que necesite tener disponibles, ¿vale? 87 00:10:16,340 --> 00:10:21,019 Para eso dentro del frontend lo que hemos hecho es una interfaz, como se ve ahí, muy facilona, 88 00:10:21,700 --> 00:10:27,179 con un código HTML que, lo siento, está puesto en una de estas ventanitas. 89 00:10:27,179 --> 00:10:54,460 Luego, cuando se ve la presentación una a una, es un código muy fácil, muy intuitivo, una hoja de estilo, pues eso, algo limpito, claro y accesible y Java para que haya una conexión entre datos y pueda funcionar, ¿vale? Esta sería la parte de desarrollo, ¿vale? Lo que es la base o lo que es la estructura del proyecto, del gestor de contraseñas. 90 00:10:55,059 --> 00:11:14,519 Luego lo que decíamos, vamos a trabajar con contraseñas, es información muy delicada para la empresa o para el proyecto o para la aplicación y hice una segunda parte que era ver qué seguridad, qué usabilidad, qué escalabilidad tenía esa plataforma que habíamos creado. 91 00:11:14,519 --> 00:11:35,679 Entonces, lo primero que hicimos fue realizar pruebas de seguridad, creamos la máquina pruebas, como he dicho al principio, para hacer como de atacante a nuestro sistema y luego, bueno, he desarrollado varios test, algunos que habíamos visto a lo largo del módulo, otros que, bueno, he visto yo que podían ser interesantes. 92 00:11:35,679 --> 00:11:42,860 Por ejemplo, Nmap lo hemos usado en el curso para ver escaneo de puertos, ver qué servicios están activos y demás. 93 00:11:43,899 --> 00:11:48,759 Nico también se mencionó en su momento para ver las vulnerabilidades que podía tener el servidor. 94 00:11:49,720 --> 00:11:57,659 Y, bueno, OpenBAS sí que es un poco el más novedoso de todos los que he utilizado, como un escaneo así más avanzado que había que configurar 95 00:11:57,659 --> 00:12:04,279 y que me daba mucha más información sobre las necesidades que podía tener a nivel de seguridad todo este proyecto. 96 00:12:04,279 --> 00:12:34,259 Entonces, bueno, vale, voy a acelerar entonces. 97 00:12:34,279 --> 00:12:41,899 como son la heurística, como son experiencias de usuario, encuestas y demás, pues siempre intentando mejorar y hacer más fácil el acceso. 98 00:12:42,659 --> 00:12:52,700 Pruebas de carga y rendimiento. JMeter y Locus los hemos visto en el módulo, pues un poco ver si mi plataforma era capaz de soportar carga de trabajo y volumen de trabajo. 99 00:12:52,899 --> 00:13:00,120 Una vez que habíamos visto todas esas técnicas y que habíamos mejorado todo eso, lo que hicimos fue, ya instalado en la máquina de producción, 100 00:13:00,120 --> 00:13:05,299 utilizando, como decía al principio, en vez de Apache, NGINX como servidor web. 101 00:13:05,639 --> 00:13:09,940 Un poquito porque me permitía más jugar, porque quería probar un servidor nuevo, 102 00:13:10,539 --> 00:13:15,019 porque un poco como proxy inverso tiene más ventajas, pues bueno, de ahí la opción, ¿vale? 103 00:13:15,840 --> 00:13:19,659 Copie el proyecto tal cual de la máquina de desarrollo a la máquina de producción, 104 00:13:19,659 --> 00:13:26,799 se ve aquí cómo está funcionando, configuración del firewall y a funcionar con el proyecto, ¿vale? 105 00:13:26,799 --> 00:13:30,860 En principio, le metimos también seguridad, ¿vale? 106 00:13:30,860 --> 00:13:34,679 Con el tema de que en vez de acceso por HTTP, fuera por HTTPS. 107 00:13:35,200 --> 00:13:40,580 Usando Cervo, hemos creado, es una aplicación que te permite certificados gratuitos. 108 00:13:41,039 --> 00:13:45,720 Pues, bueno, garantiza un poquito más la confidencialidad y la seguridad de los datos en el sistema. 109 00:13:47,399 --> 00:13:51,700 He generado una serie de guías, tanto para la instalación de esta plataforma, 110 00:13:51,919 --> 00:13:55,519 como para la administración y como para los usuarios finales, con los pasos. 111 00:13:55,519 --> 00:14:16,240 Muy sencillito, está todo adjunto en el proyecto para que lo puedan ver. En cuanto a contexto laboral, creo que tiene mucha utilidad para pequeñas empresas o empresas que quieren ahorrar costes o que quieren tener un mantenimiento muy sencillito, porque como habéis visto, todo esto se gestiona desde la misma plataforma, no necesita actualizaciones y es totalmente gratuito. 112 00:14:16,240 --> 00:14:28,139 Con lo cual, pequeñas y medianas empresas, centros educativos, usuarios individuales o NGs, pues bueno, me parece una alternativa económica y funcional muy buena para todo lo que hay de pago. 113 00:14:28,139 --> 00:14:57,799 Lo que decía, hemos desarrollado con PHP y SQLiter un cifrado robusto, una protección frente a inyecciones SQL, las pruebas de seguridad nos han dado información para mejorar un poquito la aplicación y de cara al futuro lo que me planteo para seguir, porque creo que tiene potencial y tiene capacidad para desarrollarse más, un poquito más, pues una autentificación multifactorial, pues bien por un código, por una SMS, por lo que sea. 114 00:14:58,139 --> 00:15:27,340 hacer que se pueda directamente poner como una extensión en el navegador, incluso generar aplicaciones que bien en el móvil o bien en el escritorio me dejen guardar las contraseñas y bueno, ya a nivel un poquito más profesional, hacer un despliegue en la nube, pues convirtiéndola en una SaaS profesional y un poquito más escalable para si nos vamos a empresas más grandes que ya sí requieren otro tipo de gestión. 115 00:15:27,340 --> 00:15:30,500 Pues cualquier cosa, cualquier duda 116 00:15:30,500 --> 00:15:32,940 Estoy a vuestra disposición 117 00:15:32,940 --> 00:15:59,080 Sí 118 00:15:59,080 --> 00:16:47,399 Bueno, Java 119 00:16:47,399 --> 00:16:50,419 La verdad que la API no me ha dado tanta guerra 120 00:16:50,419 --> 00:16:51,679 Como me ha dado Java 121 00:16:51,679 --> 00:16:53,879 Sí que es verdad que bueno 122 00:16:53,879 --> 00:16:56,039 PHP es muy intuitivo 123 00:16:56,039 --> 00:16:56,820 Muy facirón 124 00:16:56,820 --> 00:16:59,059 Yo tengo algo de conocimientos en Python 125 00:16:59,059 --> 00:17:02,259 Pero Java me ha supuesto un reto 126 00:17:02,259 --> 00:17:04,099 Por eso, porque dentro de que 127 00:17:04,099 --> 00:17:05,599 Sé que es el más utilizado 128 00:17:05,599 --> 00:17:11,339 o en teoría es el más utilizado, sí que es verdad que el tema de programación en Java me ha costado bastante. 129 00:17:11,819 --> 00:17:17,480 He tenido que leer mucho y empaparme mucho para algo, yo sé que esto es muy sencillito lo que he hecho, 130 00:17:17,619 --> 00:17:23,099 pero bueno, me ha requerido sí que es verdad ponerme un poco de cero con Java. 131 00:17:31,819 --> 00:17:37,799 He tenido dificultades porque al principio no conseguía la conexión entre el backend y el frontend, 132 00:17:37,799 --> 00:18:06,079 Me daba errores, pero yo creo que era todo. Yo tengo un grave problema con el tema de puertos, de firewall y demás. Entonces, muchas veces intentando ser muy restrictiva e intentando que la API nos rompiera un poco la seguridad que tiene que haber entre los datos del backend y del frontend, sí que es verdad que esa parte, la parte de conexión entre la zona de administrador y la zona de usuario, sí que la API me lo puso un poco complicado. 133 00:18:18,769 --> 00:18:42,920 Bueno, a ver, yo creo que ofrece, por ejemplo, todo el tema del password. No todas las aplicaciones lo llevan. A la hora de recopilar y de guardar las contraseñas hay aplicaciones que sí lo utilizan y otras que no. 134 00:18:42,920 --> 00:18:56,259 Yo creo que es importante y sobre todo el cifrado SSL que permite, yo lo que he hecho ha sido recanalizar todo el tráfico HTTP al HTTPS para garantizar un extra más de seguridad. 135 00:18:56,259 --> 00:19:12,680 Entonces yo creo que también las cabeceras que marqué en Apache al principio, una serie de puntos extra, que hay aplicaciones que tienen uno, tienen el otro, pero no tienen, yo estoy aplicando tres puntos que considero básicos de seguridad. 136 00:19:12,680 --> 00:19:30,460 Entonces hay aplicaciones que llevan dos, aplicaciones que llevan también los tres, pero bueno, quizá utilizan Apache, que como proxy funciona, no que funcione peor, pero bueno, tiene un poquito más de ventajas en el GIMP. No lo sé, quizá por ahí sea el punto fuerte de mi plataforma. 137 00:19:39,109 --> 00:19:42,470 Perfecto, Pilar, mil gracias a ti. Perdona un poco el problema técnico, ¿vale? 138 00:19:58,829 --> 00:19:59,390 No, no, no. 139 00:20:00,289 --> 00:20:01,930 Fenomenal, Pilar, pues muchísimas gracias. 140 00:20:04,069 --> 00:20:05,130 Pues sí, hasta luego. 141 00:20:05,650 --> 00:20:06,650 Gracias.