Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Octubre 2019
Alcance
El presente documento describe los trabajos realizados del proceso de Quality
Assurance (QA), para la revisión de negocio, seguridad y funcionalidad, del sistema
web Reporte Obligatorio Gases de Efecto Invernadero (GEI).
1
lo cual subsana las brechas e inconsistencias actualmente existentes entre los sistemas
que administran la SMA y MINSAL.
2
Etapa de Módulo de Reporte: Corresponde a un módulo de generación de reportes,
tanto de emisiones como de fuentes, al cual tendrán acceso de todos los stakeholders
vinculados con la información de carácter ambiental relacionada a las emisiones de
fuentes fijas (MMA, SMA, MINSAL y Min. Energía).
3
Resumen ejecutivo
En el presente proyecto de QA, se realizan test automatizados para asegurar la
integridad del funcionamiento, ante las modificaciones normales del software construido
con la metodología ágil, en este caso se llevan a cabo pruebas de seguridad, usuario y
de aceptación. El paso a producción se aborda con la herramienta herramientas
DevOps de GitLab, que permite automatizar el deploy desde el repositorio Git,
asegurando así que la versión en producción es la versión master del repositorio,
además se usa un servidor de staging, que permite realizar las pruebas en un ambiente
idéntico al ambiente productivo.
Identificar y subsanar brechas de seguridad en cada una de las etapas del Reporte GEI,
durante la marcha blanca.
El alcance de este informe corresponde a los puntos 4.1 al 4.6 de los Términos de
Referencia:
4
4.1 Planificación y Metodología.
Se usa documentación liviana, en documentos ejecutivos breves y completos que
indiquen las mejoras y correcciones, para el uso del equipo de desarrollo, product owner
y usuarios finales de la aplicación.
Metodología
Scrum
Scrum es una metodología de desarrollo de sistemas, que forma parte de las
metodologías ágiles, teniendo como principal característica el desarrollo incremental,
enfocado en los requerimientos principales del sistema, acoge requisitos cambiantes,
las personas del negocio y los desarrolladores deben trabajar juntos de forma cotidiana
a través del proyecto.
Roles
Product Owner
El Product Owner es el encargado de optimizar y maximizar el valor del producto, siendo
la persona encargada de gestionar el flujo de valor del producto a través del listado de
requerimientos. Adicionalmente, es fundamental su labor como interlocutor con los
stakeholders y sponsors del proyecto, así como su faceta de altavoz de las peticiones
y requerimientos de los clientes. Si el Product Owner también juega el rol de
representante de negocio, su trabajo también aporta valor al producto.
Consultor de Negocio
Este rol es similar al Product Owner, en cuanto al aporte de los requerimientos de
negocio, desde el punto de vista técnico y validaciones en las pruebas de usuario y
revisión de los datos iniciales del sistema.
Consultor de desarrollo
Este rol aporta apoyo en el manejo de las mejores prácticas y conocimientos de las
herramientas de desarrollo, lenguajes de programación y patrones de desarrollo y
diseño arquitectónico.
5
QA
Este rol es el responsable de dirigir y organizar las pruebas que son aplicadas al sistema
para asegurar la calidad del producto, velar por la correcta aplicación de las pruebas
automatizadas en conjunto con los desarrolladores y dar el paso a producción en
acuerdo con los usuarios del sistema.
Arquitecto
Este rol es responsable de dirigir, decidir e implementar las tecnologías, piezas de
software necesarios para el funcionamiento de los sistemas, su interacción, estructura
de servidores, patrones de desarrollo, diseño y directrices de seguridad.
Desarrollador
Este rol es el responsable de la construcción de los requerimientos en los lenguajes de
programación y estructuras de datos definidas para dar solución al problema de negocio
planteado por los product owner y estructurado por el arquitecto de sistemas.
Diseñador
Este rol es el responsable de aplicar directrices de usabilidad, diseño gráfico y digital a
los sistemas construidos, de tal forma que sea de fácil comprensión y acorde con las
directrices de diseño dictadas por el Gobierno de Chile y el Ministerio de Medio
Ambiente.
Sprint
Scrum se basa en el principio ágil de desarrollo iterativo e incremental. Sprint es
el período de trabajo para desarrollar un incremento de producto, y se
recomiendan duraciones entre una y cuatro semanas. Al final de cada Sprint el
equipo de desarrollo y QA, entregan una pieza de software completa y funcional,
que contiene un conjunto de funcionalidades del proyecto.
Sprint de QA
El sprint de QA tiene como objetivo realizar todas las tareas de pruebas, ya sea
con herramientas de testing o pruebas de usuario presencial, además en este
sprint se realiza la preparación de la data e instructivos para las pruebas. El
resultado de las pruebas da como resultado el paso a staging con las
observaciones al equipo de desarrollo, para reingresar la funcionalidad al sprint
de desarrollo siguiente.
6
Control de versiones
En base a los lineamientos de Gobierno Digital proporcionados e instruidos por el
Ministerio del Medio Ambiente el control de versiones será llevado sobre la herramienta
Git, se utiliza el procedimiento de pull request, que permite integrar los desarrollos al
código master. Al contar con las herramientas DevOps de GitLab, se realizan los deploy
desde Git master, lo que permite asegurar que la versión de producción está completa
en el repositorio Git.
7
implementación y la administración de la infraestructura. DevOps apunta a ciclos de
desarrollo más cortos, mayor frecuencia de implementación y lanzamientos más
confiables, en estrecha alineación con los objetivos comerciales.
Quality Assurance QA
El presente proyecto basa su ejecución guiado por las directrices de calidad dictadas
por las normas ISO25000 System and Software Quality Requirements and
Evaluation. Proporcionando un marco de trabajo y ejecución de los trabajos tendientes
a asegurar la calidad del software construido.
8
ISO25000 System and Software Quality Requirements and Evaluation
El objetivo general de la creación del estándar ISO/IEC 25000 SQuaRE (System and
Software Quality Requirements and Evaluation) es organizar, enriquecer y unificar las
series que cubren dos procesos principales: especificación de requisitos de calidad del
software y evaluación de la calidad del software, soportada por el proceso de medición
de calidad del software.
ISO/IEC 25000, conocida como SQuaRE (System and Software Quality Requirements
and Evaluation), es una familia de normas que tiene por objetivo la creación de un
marco de trabajo común para evaluar la calidad del producto software.
La familia ISO/IEC 25000 es el resultado de la evolución de otras normas anteriores,
especialmente de las normas ISO/IEC 9126, que describe las particularidades de un
modelo de calidad del producto software, e ISO/IEC 14598, que abordaba el proceso
de evaluación de productos software. Esta familia de normas ISO/IEC 25000 se
encuentra compuesta por cinco divisiones.
La Norma ISO 25000, proporciona una guía para el uso de las series de estándares
internacionales llamados requisitos y Evaluación de Calidad de Productos Software
(SQuaRE). La norma establece criterios para la especificación de requisitos de calidad
de productos software, sus métricas y su evaluación, e incluye un modelo de calidad
para unificar las definiciones de calidad de los clientes con los atributos en el proceso
de desarrollo.
Las características de calidad y sus mediciones asociadas pueden ser útiles no
solamente para evaluar el producto software sino también para definir los
requerimientos de calidad. La serie ISO/IEC 25000:2005 reemplaza a dos estándares
relacionados: ISO/IEC 9126 (Software Product Quality) e ISO/IEC 14598 (Software
Product Evaluation).
Testing preprogramado
Esta metodología de trabajo permite crear pruebas de integridad y acoplamiento de
código, estas pruebas son construidas por el equipo de desarrollo y forma parte de un
pool de pruebas unitarias que son ejecutadas en el sprint de desarrollo antes de pasar
al sprint de QA, además el pool de pruebas es ejecutado por el procedimiento de deploy
con las herramientas de GitLab, el cual no permite realizar pasos a producción si el
código no cumple satisfactoriamente con los test.
9
seguidamente se refactoriza el código escrito. El propósito del desarrollo guiado por
pruebas es lograr un código limpio que funcione. La idea es que los requisitos sean
traducidos a pruebas, de este modo, cuando las pruebas pasen se garantiza que el
software cumple con los requisitos que se han establecido.
Requisitos
Para que funcione el desarrollo guiado por pruebas, el sistema que se programa tiene
que ser lo suficientemente flexible como para permitir que sea probado
automáticamente. Cada prueba es suficientemente pequeña para que se pueda
determinar unívocamente si el código probado pasa o no la verificación que ésta le
impone. El diseño se ve favorecido ya que se evita el indeseado "sobre diseño" de las
aplicaciones y se logran interfaces más claras y un código más cohesivo.
En primer lugar, se debe definir una lista de requisitos y después se ejecuta el siguiente
ciclo:
1. Elegir un requisito: Se elige de una lista el requisito que se cree que da mayor
conocimiento del problema y que a la vez sea fácilmente implementable.
2. Escribir una prueba: Se comienza escribiendo una prueba para el requisito.
Para ello el programador debe entender claramente las especificaciones y los
requisitos de la funcionalidad que está por implementar. Este paso fuerza al
programador a tomar la perspectiva de un cliente considerando el código a través
de sus interfaces.
3. Verificar que la prueba falla: Si la prueba no falla es porque el requisito ya
estaba implementado o porque la prueba es errónea.
10
4. Escribir la implementación: Escribir el código más sencillo que haga que la
prueba funcione. Se usa la expresión "Déjelo simple" ("Keep It Simple, Stupid!"),
conocida como principio KISS.
5. Ejecutar las pruebas automatizadas: Verificar si todo el conjunto de pruebas
funciona correctamente.
6. Eliminación de duplicación: El paso final es la refactorización, que se utiliza
principalmente para eliminar código duplicado. Se hace un pequeño cambio
cada vez y luego se corren las pruebas hasta que funcionen.
7. Actualización de la lista de requisitos: Se actualiza la lista de requisitos
tachando el requisito implementado. Asimismo, se agregan requisitos que se
hayan visto como necesarios durante este ciclo y se agregan requisitos de
diseño (P. ej. que una funcionalidad esté desacoplada de otra).
Tener un único repositorio universal de pruebas facilita complementar TDD con otra
práctica recomendada por los procesos ágiles de desarrollo, la "Integración Continua".
Integrar continuamente el trabajo con el del resto del equipo de desarrollo permite
ejecutar toda batería de pruebas y así descubrir si la última versión es compatible con
el resto del sistema. Es recomendable y menos costoso corregir pequeños problemas
cada pocas horas que enfrentarse a problemas enormes cerca de la fecha de entrega
fijada.
Características
Una característica de esta forma de programación es el evitar escribir código
innecesario ("You Ain't Gonna Need It" (YAGNI)). Se intenta escribir el mínimo código
posible, y si el código pasa una prueba, aunque se sepa que es incorrecto, da una idea
de que se tiene que modificar nuestra lista de requisitos agregando uno nuevo.
La generación de pruebas para cada funcionalidad hace que el programador confíe en
el código escrito. Esto permite hacer modificaciones profundas del código
(posiblemente en una etapa de mantenimiento del programa), pues se conoce que si
se logra pasar todas las pruebas se tiene un código que funcione correctamente.
Otra característica del Test Driven Development es que requiere que el programador
primero haga fallar los casos de prueba. La idea es asegurarse de que los casos de
prueba realmente funcionen y puedan recoger un error.
Las pruebas de software (en inglés software testing) son las investigaciones empíricas
y técnicas cuyo objetivo es proporcionar información objetiva e independiente sobre la
calidad del producto a la parte interesada o stakeholder. Es una actividad más en el
proceso de control de calidad.
11
Las pruebas son básicamente un conjunto de actividades dentro del desarrollo de
software. Dependiendo del tipo de pruebas, estas actividades pueden ser
implementadas en cualquier momento de dicho proceso de desarrollo. Existen distintos
modelos de desarrollo de software, así como modelos de pruebas. A cada uno
corresponde un nivel distinto de involucramiento en las actividades de desarrollo.
El objetivo de las pruebas es presentar información sobre la calidad del producto a las
personas responsables de éste. Las pruebas de calidad presentan los siguientes
objetivos: encontrar defectos o bugs, aumentar la confianza en el nivel de calidad,
facilitar información para la toma de decisiones, evitar la aparición de defectos.
Teniendo esta afirmación en mente, la información que puede ser requerida es de lo
más variada. Esto hace que el proceso de testing sea completamente dependiente del
contexto en el que se desarrolla.
El ambiente ideal de las pruebas es aquel que es independiente del desarrollo del
software, de esta manera se logra objetividad en las pruebas.
A pesar de lo que muchos promueven, no existen las "mejores prácticas" como tales.
Toda práctica puede ser ideal para una situación, pero completamente inútil o incluso
perjudicial en otra.
Por esto, las actividades técnicas, documentación, enfoques y demás elementos que
condicionan las pruebas a realizar deben ser seleccionadas y utilizadas de la manera
más eficiente según contexto del proyecto.
Pruebas estáticas
Son el tipo de pruebas que se realizan sin ejecutar el código de la aplicación.
Puede referirse a la revisión de documentos, dado que no se realiza una ejecución de
código. Esto se debe a que se pueden realizar "pruebas de escritorio" con el objetivo
de seguir los flujos de la aplicación.
Pruebas dinámicas
Todas aquellas pruebas que para su ejecución requieren la ejecución de la aplicación.
Las pruebas dinámicas permiten el uso de técnicas de caja negra y caja blanca con
mayor amplitud. Debido a la naturaleza dinámica de la ejecución de pruebas es posible
medir con mayor precisión el comportamiento de la aplicación desarrollada.
12
traducidos a pruebas, de este modo, cuando las pruebas pasen se garantiza que el
software cumple con los requisitos que se han establecido.
Procedimiento de aceptación
Al final de cada sprint de QA, se realizan pruebas de aceptación por parte de los product
owner del proyecto, estas pruebas dan como resultado el paso a producción de un
conjunto de funcionalidades, o la reinyección al sprint de desarrollo para su corrección.
Paso a Staging
Se implementa un procedimiento de pasos a staging, coordinado por el arquitecto del
proyecto, vía GitLab, que permita mantener en forma ordenada las versiones de los
módulos y un historial de cambios fácil de seguir y documentar.
Servidor de pruebas
Staging
Este servidor es un espejo del servidor de producción y será utilizado para llevar a cabo
las pruebas de usuario y de aceptación.
13
Ambiente de desarrollo
Development
Esta etapa es realizada directamente en el computador de cada desarrollador,
permitiendo la libertad de trabajo, en cuanto a pruebas de concepto y pruebas unitarias
respectivas. El ambiente de desarrollo debe contener las siguientes herramientas:
Servidor de producción
Production
Server productivo, expuesto a los usuarios finales. La configuración de hardware de
este server, es determinado según las necesidades de performance del software
resultante del proyecto y el flujo de usuarios concurrentes del servicio, en caso de alta
demanda se evalúan configuraciones en cluster.
El soporte del kernel Linux para los espacios de nombres aísla la vista que tiene una
aplicación de su entorno operativo, incluyendo árboles de proceso, red, ID de usuario
4
y sistemas de archivos montados, mientras que los cgroups del kernel proporcionan
aislamiento de recursos, incluyendo la CPU, la memoria, el bloque de E/S y de la red.
Desde la versión 0.9, Docker incluye la biblioteca libcontainer como su propia manera
de utilizar directamente las facilidades de virtualización que ofrece el kernel Linux,
además de utilizar las interfaces abstraídas de virtualización mediante libvirt, LXC
(Linux Containers) y systemd-nspawn.
De acuerdo con la firma analista de la industria 451 Research, "Docker es una
herramienta que puede empaquetar una aplicación y sus dependencias en un
contenedor virtual que se puede ejecutar en cualquier servidor Linux. Esto ayuda a
permitir la flexibilidad y portabilidad en donde la aplicación se puede ejecutar, ya sea
en las instalaciones físicas, la nube pública, nube privada, etc."
8
14
Docker implementa una API de alto nivel para proporcionar contenedores livianos que
ejecutan procesos de manera aislada.
Construido sobre las facilidades proporcionadas por el kernel Linux (principalmente
cgroups y namespaces), un contenedor Docker, a diferencia de una máquina virtual, no
requiere incluir un sistema operativo independiente. En su lugar, se basa en las
8
Database
El sistema contiene un componente importante de datos base para su funcionamiento,
correspondiente a un modelo datos de negocio, que debe ser revisada y aceptada por
los consultores de negocio, siguiendo los mismos procedimientos de QA, que se
realizan sobre el software.
Database Seeding
El Seeding de la base de datos es la inicialización de una base de datos con datos.
El Seeding de una base de datos es un proceso en el que se proporciona un conjunto
inicial de datos a una base de datos cuando se está instalando.
Es especialmente útil cuando se quiere poblar la base de datos con datos que se
desean desarrollar en el futuro. Este suele ser un proceso automatizado que se ejecuta
en la configuración inicial de una aplicación. Los datos pueden ser datos ficticios o datos
necesarios, como una cuenta de administrador inicial.
15
Modelos que contienen Seeding
En módulos del proyecto Reporte G.E.I. contienen una considerable cantidad de
registros de Seed, estos modelos contendrán los datos de los tipos de Fuente, sus
formas de caracterización, los tipos de combustibles asociados, unidades de medida,
procesos, predecesores y sucesores válidos para el diagrama de descarga, entre otros.
Tecnologías de Software
Framework: Laravel PHP
Link framework Laravel: Laravel
Sistema Operativo: Linux Centos
Link Linux Ubuntu: Ubuntu
Motor de base de datos: Postgres
Link Postgres: Postgres
16
Pruebas de Vulnerabilidad
El presente proyecto contempla la aplicación de un conjunto de pruebas de
vulnerabilidad, tendientes a identificar y mitigar brechas de seguridad a las que estén
expuestos los sistemas, estas pruebas y aplicación de herramientas de hacking,
están basadas en los principios del Ethical Hacking.
Pruebas de Penetración
Las pruebas de penetración son una práctica para poner a prueba un sistema
informático, red o aplicación web para encontrar vulnerabilidades que un atacante
podría explotar. Las pruebas de penetración pueden ser automatizadas con
aplicaciones de software, o se pueden realizar manualmente. De cualquier manera, el
proceso incluye la recopilación de información sobre el objetivo antes de la prueba
(reconocimiento), la identificación de posibles puntos de entrada, intentos de entrar (ya
sea virtualmente o de manera real) y el reporte de los resultados.
17
Planificación
Alcance
El presente informe aborda el trabajo realizado tendiente a asegurar la calidad del
sistema Web: Registro de Fuentes y Procesos, para lo cual se siguió el marco
metodológico presentado para el proyecto, aplicando el ciclo de vida de QA, a cada uno
de los elementos de negocio del sistema, además se ha abordado la mitigación de
errores de ingreso de datos, en las interfaces de usuario a través de soluciones de
integridad referencial y validación de predecesores y sucesores en la creación del
diagrama de descarga. Además, se han ejecutado herramientas de hacking ético, para
identificar las vulnerabilidades de los servidores que alojan en el sistema Web y su base
de datos.
18
Resultados previos
Ciclo de Vida de QA
19
Mitigación y Correcciones
El código fuente y los datos base de esta solución, se encuentra implementado en los servidores
del Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
20
Combustible - Unidad de Medida
Se ha trabajado en la creación y preparación de seeders que permiten crear integridad
referencial a los datos base del sistema, esto se ha aplicado a los modelos de Tipo de
Combustible y Unidad de Medida, esto permite que la interfaz de caracterización de
fuentes muestre solo las unidades de Medida del combustible elegido.
El código fuente y los datos base de esta solución, se encuentra implementado en los servidores
del Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
21
Pruebas Interfaz Diagrama de Descargas
La interfaz gráfica Diagrama de Descarga, le permite al usuario crear un diagrama que
muestra la interacción de las fuentes de emisión en su establecimiento, permitiendo
mostrar el flujo de las emisiones entre sus fuentes, su equipos de abatimiento y sus
ductos de descarga o chimeneas, pudiendo caracterizarlas inmediatamente, Se han
aplicado las pruebas a esta interfaz, siguiendo el ciclo de vida de QA propuesto en este
proyecto, detectándose que la mayoría de los errores cometidos por el usuario obedece
al ordenamiento incongruente del diagrama, es decir flujos ilógicos en su construcción.
22
Correcciones y Mitigación
Se propone crear un algoritmo de sucesores y predecesores válidos que permita al
sistema prevenir las incongruencias en ordenamiento del flujo correcto del diagrama de
descargas, para esto se ha preparado y creado un conjunto de datos base, que son
cargados vía seeders, estos datos son usados por un algoritmo de validación que es
ejecutado cada vez que el usuario agregue un flujo en el diagrama, alertando al usuario
del error y eliminando los flujos erróneos del diagrama. Esta solución apunta
principalmente a mitigar el desconocimiento del negocio por parte de los usuarios.
El código fuente y los datos base de esta solución, se encuentra implementado en los servidores
del Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
Consideraciones
Al momento de realizar los trabajos del presente informe, se cuenta con un servidor de
Staging, en la red interna del Ministerio de Medio Ambiente, todas las pruebas han sido
ejecutadas sobre este servidor que cuenta con S.O. Linux Ubuntu 18.04. y que
comparte recursos con otros sistemas que se encuentran en proceso de desarrollo y
pruebas. El sistema Web, Registro de fuentes y procesos, se ha montado sobre
contenedores Docker, separando los servicios en aplicativo y base de datos.
En cuanto se cuente con un servidor productivo, expuesto a internet, se procederá a
realizar nuevamente la totalidad de pruebas efectuadas, para probar el acceso, tanto
desde internet como desde la red interna del Ministerio.
Pruebas de Vulnerabilidad
Se aplicó un conjunto de pruebas de seguridad basadas en las herramientas de hacking
ético, estas pruebas apuntan a la seguridad de red, acceso a base de datos y acceso
23
a directorios, en cada una de ellas se realizó en un procedimiento tendiente a identificar
posibles puntos de vulnerabilidad del sistema.
Servidor Staging
IP: 10.100.2.48
Pruebas de Red
El servidor escaneado expone un conjunto de puertos con vulnerabilidades conocidas
y con una alta probabilidad de susceptibilidad ante ataques tendientes a bloquear la
comunicación o acceder a la información del S.O. y los aplicativos alojados. Son
especialmente susceptibles los puertos de acceso de base de datos, 5432 y 3306 que
exponen los motores de base de datos PostgreSQL y MySQL.
Puertos expuestos
21/tcp filtered ftp
22/tcp open ssh
80/tcp open http
81/tcp open hosts2-ns
83/tcp open mit-ml-dev
443/tcp open https
3306/tcp open mysql
5432/tcp open postgresql
8081/tcp open blackice-icecap
8082/tcp open blackice-alerts
9000/tcp open cslistener
24
Mitigación y correcciones
Se procede a cerrar al exterior los todos los puertos que no son necesarios para la
operación del sistema Web, Reporte de fuentes y procesos, dejando exclusivamente el
puerto 80 para el acceso al sistema desde el browser de los clientes. El puerto 22 se
ha dejado expuesto solo a la red interna del Ministerio del Medio Ambiente, para realizar
las tareas de deploy y mantención.
El código fuente y los scripts de esta solución, se encuentra implementado en los servidores
del Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
Mitigación y correcciones
Se procedió a realizar los cambios necesarios en el código del sistema, implementando
las mejores prácticas de desarrollo, también se implementaron un conjunto de script,
que permiten modificar las configuraciones de las piezas de software involucradas en
las vulnerabilidades detectadas.
25
El código fuente y los scripts de esta solución, se encuentra implementado en los servidores
del Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
El código fuente y los scripts de esta solución, se encuentra implementado en los servidores
del Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
Este módulo incluye todos los formularios que serán utilizados por los administradores
de la plataforma (Usuario Enlace Nacional, Enlace Sectorial y Administrador) como la
vista asociada al usuario Industrial, Debe incluirse la revisión de los formularios Solicitud
a Sistema Sectorial, formulario Revisión de Solicitudes, Búsqueda y mantenedores de
solicitudes, entre otros.
Consideraciones
Al momento de realizar los trabajos del presente informe, se cuenta con un servidor de
Staging, en la red interna del Ministerio de Medio Ambiente, todas las pruebas han sido
ejecutadas sobre este servidor que cuenta con S.O. Linux Ubuntu 18.04. y que
comparte recursos con otros sistemas que se encuentran en proceso de desarrollo y
26
pruebas. El sistemas Web, Cuantificación de Emisiones, se ha montado sobre
contenedores Docker, separando los servicios en aplicativo y base de datos.
Pruebas de Vulnerabilidad
Se aplicó un conjunto de pruebas de seguridad basadas en las herramientas de hacking
ético, estas pruebas apuntan a la seguridad de red, acceso a base de datos y acceso
a directorios, en cada una de ellas se realizó en un procedimiento tendiente a identificar
posibles puntos de vulnerabilidad del sistema.
Servidor Staging
IP: 10.100.2.48
Pruebas de Red
El servidor escaneado ya ha pasado por un proceso de mitigación en los trabajos que
se están realizando, por lo que se ha dejado el puerto 80 para el acceso al sistema
desde el browser de los clientes. El puerto 22 se ha dejado expuesto solo a la red
interna del Ministerio del Medio Ambiente, para realizar las tareas de deploy y
mantención. Sin embargo, el puerto 22 aun es accesible vía User-Password, lo cual
puede traer una brecha de seguridad en el acceso al servidor.
Puertos expuestos
22/tcp open ssh
80/tcp open http
Mitigación y correcciones
Se procede regular el acceso al puerto 22 sólo vía RSA Key, cerrando todos los
restantes métodos de acceso, dejando así el acceso solo a los miembros del equipo de
desarrollo encargados del deploy y administración del servidor.
27
En criptografía, RSA (Rivest, Shamir y Adleman) es un sistema criptográfico de clave
pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es
válido tanto para cifrar como para firmar digitalmente.
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una
pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave
pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado
llega al receptor, este se ocupa de descifrarlo usando su clave privada.
28
Mitigación y correcciones
Se procedió a realizar los cambios necesarios en el código del sistema, implementando
las mejores prácticas de desarrollo, también se implementaron un conjunto de script,
que permiten modificar las configuraciones de las piezas de software involucradas en
las vulnerabilidades detectadas.
Este módulo se debe revisar desde las distintas plataformas de usuario: Usuario Enlace
Nacional, Enlace Sectorial y Administrador.
Consideraciones
Al momento de realizar los trabajos del presente informe, se cuenta con un servidor de
Staging, en la red interna del Ministerio de Medio Ambiente, todas las pruebas han sido
29
ejecutadas sobre este servidor que cuenta con S.O. Linux Ubuntu 18.04. y que
comparte recursos con otros sistemas que se encuentran en proceso de desarrollo y
pruebas. El sistemas Web, Cuantificación de Emisiones, se ha montado sobre
contenedores Docker, separando los servicios en aplicativo y base de datos.
En cuanto se cuente con un servidor productivo, expuesto a internet, se procederá a
realizar nuevamente la totalidad de pruebas efectuadas, para probar el acceso, tanto
desde internet como desde la red interna del Ministerio.
Pruebas de Vulnerabilidad
Se aplicó un conjunto de pruebas de seguridad basadas en las herramientas de hacking
ético, estas pruebas apuntan a la seguridad de red, acceso a base de datos y acceso
a directorios, en cada una de ellas se realizó en un procedimiento tendiente a identificar
posibles puntos de vulnerabilidad del sistema.
Servidor Staging
IP: 10.100.2.48
Pruebas de Red
El servidor escaneado ya ha pasado por un proceso de mitigación en los trabajos que
se están realizando, por lo que se ha dejado el puerto 80 para el acceso al sistema
desde el browser de los clientes. El puerto 22 se ha dejado expuesto solo a la red
interna del Ministerio del Medio Ambiente, para realizar las tareas de deploy y
mantención. Sin embargo, el puerto 22 aun es accesible vía User-Password, lo cual
puede traer una brecha de seguridad en el acceso al servidor.
Puertos expuestos
22/tcp open ssh
80/tcp open http
Mitigación y correcciones
Se procede regular el acceso al puerto 22 sólo vía RSA Key, cerrando todos los
restantes métodos de acceso, dejando así el acceso solo a los miembros del equipo de
desarrollo encargados del deploy y administración del servidor.
30
En criptografía, RSA (Rivest, Shamir y Adleman) es un sistema criptográfico de clave
pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es
válido tanto para cifrar como para firmar digitalmente.
La seguridad de este algoritmo radica en el problema de la factorización de números
enteros. Los mensajes enviados se representan mediante números, y el funcionamiento
se basa en el producto, conocido, de dos números primos grandes elegidos al azar y
mantenidos en secreto. Actualmente estos primos son del orden de 10 elevado a 300,
y se prevé que su tamaño crezca con el aumento de la capacidad de cálculo de los
ordenadores.
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una
pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave
pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado
llega al receptor, este se ocupa de descifrarlo usando su clave privada.
Se cree que RSA será seguro mientras no se conozcan formas rápidas de
descomponer un número grande en producto de primos. Aunque se cree que la
computación cuántica podría proveer de una solución al problema de factorización,
existen investigadores que dudan que dichos avances vayan a volver obsoletos estos
algoritmos.
31
Mitigación y correcciones
Se procedió a realizar los cambios necesarios en el código del sistema, implementando
las mejores prácticas de desarrollo, también se implementaron un conjunto de script,
que permiten modificar las configuraciones de las piezas de software involucradas en
las vulnerabilidades detectadas.
El código fuente y los script de esta solución, se encuentra implementado en los servidores del
Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
El código fuente y los scripts de esta solución, se encuentra implementado en los servidores
del Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
32
Estas propuestas deben ser acordadas e implementadas en la marcha blanca del
Reporte GEI, antes de ponerlo en producción.
Pruebas automatizadas
Las pruebas automatizadas consisten en el uso de un software para controlar y
configurar las condiciones previas a las pruebas, la ejecución de las pruebas y la
comparación de los resultados reales con los resultados esperados. Se desarrollan
dentro del proyecto y están destinadas a cuidar el correcto funcionamiento de la lógica
interna del sistema.
Cada una de estas pruebas sigue una serie de pasos dentro del sistema, con el fin de
asegurar que las funcionalidades no hayan sido tocadas por los desarrolladores en el
proceso de QA.
Laravel Dusk
Para estas pruebas se utiliza Laravel Dusk, que proporciona una API de automatización
y prueba para navegador expresiva y fácil de usar. De forma predeterminada, Dusk no
requiere que instalar JDK o Selenium en el sistema. En su lugar, Dusk usa una
instalación de ChromeDriver independiente.
Pruebas de concepto
Previo a utilizar Laravel Dusk como herramienta de testing, se realizaron pruebas de
concepto para asegurar que la tecnología funciona de forma adecuada dentro del
sistema. Para esto se escribieron diferentes pruebas y se ejecutaron en el navegador,
con el fin de revisar la correcta interacción y respuesta entre las instrucciones dadas y
el browser.
33
● Type: Es una instrucción para escribir un texto o una selección de caracteres
específicos dentro de un cuadro de texto indicado en la misma función.
● AssertPathIs: Dentro de esta función se indica la ruta donde debería estar el
usuario y acusa si se encuentra allí o no.
● AssertSee: Acusa la presencia algún texto indicado en la página y que, por
ende, el usuario debería poder ver.
● AcceptDialog: Cierra un cuadro de diálogo de JavaScript haciendo click en el
botón OK.
● WhenAvailable: Espera por un tiempo determinado la presencia de alguna
ventana emergente, para luego interactuar con él.
● Keys: Este método permite ingresar secuencias de entrada más complejos a un
elemento dado a como lo haría normalmente el método type. Con este método
es posible presionar (y mantener presionadas) distintas teclas, como pueden ser
TAB, ENTER, ESCAPE, CONTROL, SHIFT, DELETE, las teclas desde el F1 al
F12, teclas de flechas, etc.
● Press: Presiona algún botón indicado por el selector.
● Pause: Establece una pausa por un tiempo determinado por el usuario y
después continúa la prueba.
● WaitFor: Espera la aparición de un elemento determinado por un período de
tiempo especificado por el usuario.
34
Ejemplo de prueba automatizada
Se elige el requisito y se escribe la prueba:
35
Se escribe la implementación y se ejecuta la prueba automatizada:
36
1.2. Editar CIIU: Determina a qué etapas tendrá accesos el usuario
En esta funcionalidad el usuario puede cambiar el CIIU del establecimiento
seleccionando cuatro niveles de desagregación.
2. Etapas
3. Registro
3.1.
Etapa 1: Fuentes de uso general: Registro simple para establecimientos
principalmente no industriales
En esta funcionalidad se despliega un listado de tres tipos de fuentes de uso general,
en donde el usuario puede agregar, editar y eliminar una fuente. También, se muestra
un botón para enviar las fuentes registradas.
● Nombre
● Marca
● Modelo
● N° de serie
● N° interno
● Año de fabricación
● Código ducto
● Año de instalación
● Fecha de operación inicial
● Fecha de primera declaración
37
● Fecha inscripción
● Tipo de combustible
● Consumo nominal
● Unidad de combustible
● CCF8
● Nombre CCF8
38
● Las chimeneas requieren de la altura, diámetro, latitud y longitud de la misma
para desplegar un mapa con la ubicación exacta de la misma.
● Los sistemas de abatimiento contienen menos datos requeridos, estos son el
nombre, marca, modelo, n° de serie, n° interno, año de fabricación y año de
instalación.
● Cada tipo de fuente tiene una cantidad de campos definidos en la base de datos,
y la interfaz solicitará sólo los campos indicados.
39
3.4.1. Caracterizar fuente sujeta a PDA
Dentro de la funcionalidad Caracterizar Fuente se despliega una ventana de donde se
ingresan los datos de la fuente a registrar. Los campos que se despliegan para el
ingreso de datos dependen del tipo de fuente seleccionado.
4. Secciones (Menú)
40
Resultados finales para el Registro de Fuentes y Procesos
Pruebas Acceso: Etapas por CIIU
41
6 Clasificación Una vez ingresada la Ninguna.
"CCF8" información se debe
desplegar la
clasificación CCF8 de
forma automática.
7 "Guardar" Registro La fuente debe quedar La información se lista de
listada con información forma correcta. Pero, es
ingresada. posible guardar letras y
símbolos en los campos n° de
serie, n° interno y código de
ducto.
Debería permitir el ingreso de
guiones (-) exclusivamente.
8 "Enviar" Registro Desplegar la pantalla No aparece un check, pero
principal del registro. aparece un diálogo de ÉXITO
La etapa 1 se debe al completar la tarea.
mostrar con un check.
42
8 Registrar Fuente Visualizar campos en tono rojo Ninguna.
"Caracterizar" si la información ingresada es
errónea.
Visualizar campos en tono verde
si la información ingresada es
correcta.
9 Ingreso "Tipo de Debe mostrar las opciones de Ninguna.
Combustible" combustible según la fuente que
se está registrando, puede ser
una caldera, turbina o motor.
Además de mostrar la unidad de
combustible de acuerdo al
combustible seleccionado.
10 Agregar Al agregar el combustible debe Ninguna.
Quemadores según aparecer la opción para
corresponda incorporar los quemadores.
(Calderas-Turbinas) Al ingresar se debe mostrar una
pantalla con la opción
"AGREGAR QUEMADOR".
11 Ingresar a Desplegar una pantalla para Ninguna.
"AGREGAR agregar la información de los
QUEMADOR" quemadores de acuerdo a los
combustibles seleccionados.
12 Agregar de Registrar los quemadores sólo Ninguna.
información de para los combustibles
quemadores registrados. Debe aparecer una
opción para indicarlo como
sistema dual (combustible
primario y secundario).
13 Clasificación CCF8 Debe solicitar el campo Ninguna.
adicional "CCF8" para el
despliegue automático de la
clasificación "Nombre CCF8".
14 "Guardar" Registro La caja debe mostrar un Check Ninguna.
(verde) para indicar que se
guardó el registro.
15 Registrar La caja debe mostrar un Check Ninguna.
Abatimiento y (verde) para indicar que se
Guardar guardó el registro.
16 Registrar Chimenea Desplegar un mapa con la Ninguna.
y Guardar ubicación de la chimenea.
Además, la caja debe indicar un
Check (verde) para indicar que
el registro fue guardado.
17 Registrar Chimenea Desplegar un mapa con la Ninguna.
y Guardar ubicación de la chimenea.
Además, la caja debe indicar un
Check (verde) para indicar que
el registro fue guardado.
18 Probar Botón ZOOM Botón maximizar: Debe Ninguna.
: Maximizar - aumentar la pantalla.
Minimizar-Ajustar Botón minimizar: Debe disminuir
de pantalla.
Botón ajustar: Debe encuadrar
el diagrama de descarga.
19 "Guardar" Diagrama Solo debe permitir guardar si Guarda la
de descarga está toda la información información
registrada. incompleta y la deja
como en EDICIÓN.
43
20 "Enviar" Registro Se debe desplegar la pantalla No envía la
principal del registro. Y la etapa información
2 se debe mostrar con un incompleta. Sin
Check. embargo, al
presionar ENVIAR
(con la información
incompleta) aparece
un diálogo de
ÉXITO.
La información
finalmente queda en
estado de EDICIÓN.
44
información ingresada
es correcta.
8 Ingreso "Tipo de Debe mostrar las Ninguna.
Combustible" opciones del
combustible a
seleccionar según la
fuente elegida. Y la
unidad de combustible
de acuerdo a
combustible
seleccionado.
9 Clasificación Debe solicitar el campo No se puede seleccionar el
CCF8 adicional "CCF8" para el CCF8.
despliegue automático
de la clasificación
"Nombre CCF8".
10 Agregar Al agregar el Ninguna.
Quemadores combustible debe
según aparecer opción de
corresponda incorporar los
(Calderas- quemadores. Cuando se
Turbinas) ingresa debe aparecer
la opción "AGREGAR
QUEMADOR".
11 Ingresar a Debe desplegar la Ninguna.
"AGREGAR pantalla para agregar
QUEMADOR" información de los
quemadores, de
acuerdo a los
combustibles
ingresados.
12 Agregar de Debe aparecer el Ninguna.
información de registro de los
quemadores quemadores, pero sólo
para los combustibles
registrado. Junto con la
opción para indicarlo
como sistema dual
(combustible primario y
secundario).
13 "Guardar" La caja debe indicar un Ninguna.
Registro Check (verde) cuando el
registro quede
guardado.
14 Registrar La caja debe indicar un Ninguna.
Abatimiento y Check (verde) cuando el
Guardar registro quede
guardado.
15 Registrar Desplegar un mapa con Ninguna.
Chimenea y la ubicación de la
Guardar chimenea. Además, la
caja debe indicar un
Check (verde) para
indicar que el registro
fue guardado.
16 Probar Botón Botón maximizar: Debe Ninguna.
ZOOM: Maximizar aumentar la pantalla.
- Minimizar- Botón minimizar: Debe
Ajustar disminuir de pantalla.
45
Botón ajustar: Debe
encuadrar el diagrama
de descarga.
17 "Guardar" Sólo debe permitir Si bien guarda la información
Diagrama de guardar si está toda la incompleta, la deja como en
descarga información registrada. EDICIÓN.
18 "Enviar" Registro Se debe desplegar la Envía la información
pantalla principal del incompleta. Al presionar
registro. Y la etapa 2 se ENVIAR (con la información
debe mostrar con un incompleta) aparece un
Check. diálogo de ÉXITO.
46
Pruebas Acceso: Navegación mediante barra lateral
NO DEBE
CHIMENEA FUENTE ABATIMIENTO EN SERIE PERMITIR NO PERMITE
47
NO DEBE
CHIMENEA ABATIMIENTO FUENTE EN SERIE PERMITIR NO PERMITE
NO DEBE
ABATIMIENTO CHIMENEA FUENTE EN SERIE PERMITIR NO PERMITE
NO DEBE
ABATIMIENTO FUENTE CHIMENEA EN SERIE PERMITIR NO PERMITE
DEBE
PERMITIR
SÓLO EN NO PERMITE
FUENTE FUENTE ABATIMIENTO CHIMENEA EN SERIE ETAPA 3 EN ETAPA 3
NO DEBE
FUENTE CHIMENEA CHIMENEA ABATIMIENTO EN SERIE PERMITIR NO PERMITE
DEBE
FUENTE ABATIMIENTO ABATIMIENTO CHIMENEA EN SERIE PERMITIR NO PERMITE
EN DEBE
FUENTE ABATIMIENTO ABATIMIENTO CHIMENEA PARALELO PERMITIR PERMITE
Mitigación y correcciones
Se procedió a realizar los cambios necesarios en el código del sistema, corrigiendo
cada uno de los puntos de error informados por el proceso de QA, a continuación, se
realizaron las pruebas automatizadas y las pruebas manuales de las funcionalidades
corregidas en el servidor de testing, en el proceso mencionado todas las pruebas
resultaron sin errores detectados.
El código fuente y los script de esta solución, se encuentra implementado en los servidores del
Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
48
3. Menú Declaraciones
Ingreso a pantalla que permite el acceso a las declaraciones F138, Registrar
Mediciones y Declarar COV'S de manera independiente.
La pantalla despliega las declaraciones realizadas por el establecimiento indicando:
● Periodo de Declaración
● Tipo
● Fecha Declaración
● Estado
3.1. NUEVA DECLARACIÓN D.S. 138: Declaración de F138 Anual
En esta funcionalidad se despliega una nueva declaración en “DECLARACIONES
DEL ESTABLECIMIENTO” permitiendo el acceso a esta mediante el botón EDITAR.
49
3.2.2. AGREGAR CORRIDA (cambiar a AGREGAR MEDICIÓN)
Permite agregar una medición y su información asociada a un contaminante.
50
Acceder a Ingresar a pantalla con la
3 "Administrar información del Ninguna.
Declaraciones" establecimiento.
Acceder a
"CAMBIAR La declaración listada debe
5 ESTADO" y presentar algún cambio de No se puede cambiar estado.
seleccionar un estado.
estado
Declaración F138
51
Permite que se muestran
Acceder a
nuevas fuentes registradas en
3 "ACTUALIZACIÓ Ninguna.
registro de fuentes y
N FUENTES"
procesos.
Permite visualización de
Abre la ventana donde
Acceder a "IR A diagrama generado en el
debería estar dibujado el
5 DIAGRAMA DE reporte de fuentes y procesos
diagrama, pero este no
DESCARGA" e ingreso de niveles de
aparece.
actividad y consumo.
52
Declaración de Mediciones
Prueba Funcionalidad Resultado Esperado Observaciones
En las opciones “VER
Acceso a pantalla con MEDICIONES” y “REGISTRAR
Acceder a fuentes incorporadas en MEDICIONES” se encuentra el
1 "REGISTRAR registro de fuentes y error tipográfico “Contaminate” (en
MEDICIONES" procesos. Presenta opción de el label del formulario).
"REGISTRAR MEDICIÓN" No se muestra ningún diagrama
de descarga.
Acceso a pantalla permite
Seleccionar una ingresar información de la Dentro del formulario, hay un
Fuente y medición por contaminante. placeholder con el texto
2
"REGISTRAR Presenta opción AGREGAR “Comuestos Orgánicos Volátiles
Reporte MEDICIONES" CORRIDA / Select File / (COV)”
de GUARDAR
Medicione
s Incorporar
información y
3 Ninguna.
"AGREGAR
CORRIDA"
Cargar informe
No abre la ventana para elegir un
4 de medición
pdf.
"Select File"
Declaración de COV’S
Prueba Funcionalidad Resultado Esperado Observaciones
Permite incorporación de
Acceder a
1 Información operacional, Ninguna.
"REGISTRAR COV’S"
estimaciones y mediciones
"BAJAR PLANILLA" Descarga planilla con
para carga de información necesaria para
2 No descarga la plantilla.
información caracterizar la operación (
operacional formulario 3B)
53
Declaración de COV’S
Prueba Funcionalidad Resultado Esperado Observaciones
Acceso a pantalla con fuentes
Acceder a incorporadas en registro de Ninguna (Aparece como
5 "REGISTRAR fuentes y procesos. Presenta INGRESAR MEDICIÓN e
MEDICIONES" opción de "REGISTRAR INGRESAR CORRIDA).
MEDICIÓN"
Incorporar información
7 y "AGREGAR Ninguna.
CORRIDA"
Mitigación y correcciones
Se procedió a realizar los cambios necesarios en el código del sistema, corrigiendo
cada uno de los puntos de error informados por el proceso de QA, a continuación, se
realizaron las pruebas automatizadas y las pruebas manuales de las funcionalidades
corregidas en el servidor de testing, en el proceso mencionado todas las pruebas
resultaron sin errores detectados.
El código fuente y los scripts de esta solución, se encuentra implementado en los servidores
del Ministerio del Medio Ambiente, en el repositorio de control de versiones GitLab y se adjuntan
en digital en el CD que acompaña este informe.
54