LAB 3 - Confiabilidad y Seguridad en SW

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 25

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS


ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

PROF. ROBERT. E. ARISACA MAMANI


PROF. R. FABRIZIO CALIENES RODRIGUEZ

GUÍA DE LABORATORIO
TOPICOS AVANZADOS DE INGENIERIA DE
SOFTWARE

X SEMESTRE 2022B

COMPETENCIAS
A. Aplica de forma transformadora conocimientos de matemática, computación e ingeniería como herramienta
para evaluar, sintetizar y mostrar información como fundamento de sus ideas y perspectivas para la resolución de
problemas.

E. Identifica de forma reflexiva y responsable, necesidades a ser resueltas usando tecnologías de información y/o
desarrollo de software en los ámbitos local, nacional o internacional, utilizando técnicas,
herramientas, metodologías, estándares y principios de la ingeniería.

Q. Diseña soluciones informáticas apropiadas para uno o más dominios de aplicación utilizando los principios de
ingeniería que integran consideraciones éticas, sociales, legales y económicas entiendo las fortalezas y
limitaciones del contexto.
Curso: Tópicos Avanzados de Ingeniería de Software Página: 1

Confiabilidad y Seguridad en
Laboratorio
Software
3
I
OBJETIVOS
 Conocer las caracteristicas de la confiabilidad y la seguridad en software.
 Trasmitir la importancia de del uso de los distintos estandare, metodos y
procedimientos de seguridad y confiabilidad en aplicaciones, paginas web y sistemas.
 Identificar las fallas existentes en los procesos de software.
 Implementar un plan básico de ingeniería de confiabilidad, en base a fallas encontradas
en sus procesos.
 Conocer los criterios de evaluación que nos permitan tener la certeza de la
confidencialidad de la Información (IT).
 Conocer los conceptos básicos para mantener la seguridad dentro de los sitios de la
Internet.

II
TEMAS A TRATAR
 Ingeniería de Confiabilidad
 Confiabilidad de Software
 Seguridad de Software
 Riesgos de seguridad
 Vulnerabilidades
Curso: Tópicos Avanzados de Ingeniería de Software Página: 2

III
MARCO TEÓRICO
Introducción
Los sistemas de información son cada vez más importantes en la sociedad moderna. Se
podría decir que prácticamente la totalidad de las actividades diarias están controladas, o
necesitan el apoyo de un sistema software.
A medida que las funciones de este tipo de sistemas son más esenciales y complejas, su
confiabilidad es más crítica e importante, por lo que cada vez se dedican más recursos
para conseguir sistemas de información con un grado de confiabilidad elevado.

A raíz de todo esto el software inseguro está debilitando las finanzas, salud, defensa,
energía, y otras infraestructuras críticas.
A medida que la infraestructura digital se hace cada vez más compleja e interconectada, la
dificultad de lograr la seguridad en aplicaciones aumenta exponencialmente.

Es por tal motivo que hoy en día muchas de las organizaciones tan tomando medidas para
garantizar la seguridad del software así como su valor consecuente como es la
confiabilidad, es por ende que hoy en día es muy importante para todos la medición de la
calidad de sw y la implementación de dos características muy importantes al momento de
desarrollar, como son la confiabilidad y la seguridad.

Calidad de Software
El software es inmaterial y la calidad del software difícil de medir, pero tenemos algunas
pautas, algunos indicadores que nos ayudan a diferenciar los productos de calidad de los
que carecen de ella:
 El acercamiento a cero defectos.
 El cumplimiento de los requisitos intrínsecos y expresos.
 La satisfacción del cliente.

Sobre todo la satisfacción del cliente, porque ya se sabe que un suministrador puede
engañar a todos alguna vez o a alguno muchas veces, pero no puede engañar a muchos
durante largo tiempo.
El cliente casi siempre tiene razón y para eso están las encuestas de satisfacción. El
software de calidad es el que resulta en los primeros puestos de la tabla por “aclamación”
de los usuarios.

El argumento de la calidad es exhibido por las empresas como un factor diferenciador,


como clave de sus procesos de negocio y como eslogan de competitividad empresarial.

De hecho, la exigencia cada vez mayor por parte del mercado de la certificación ISO
9000 o el interés creciente por los modelos de calidad de gestión empresarial de tipo
EFQM son indicadores de la percepción de la calidad como un elemento cada vez más
necesario.
Curso: Tópicos Avanzados de Ingeniería de Software Página: 3

La calidad del software debe ser una disciplina más, dentro de la Ingeniería del software.
El principal instrumento para garantizar la calidad de las aplicaciones sigue siendo el plan
de calidad.
El plan se basa en unas normas o estándares genéricos y en unos procedimientos
particulares.

Las normas, directivas, modelos y estándares son básicamente las siguientes:


 Familia de normas ISO 9000 y en especial, la ISO 9001 y la ISO 9000-3.2: 1996
Quality Management and Quality Assurance Standards.
 ISO 8402: 1994.
 IEEE 730/1984, Standard for Software Quality Assurance Plans.
 IEEE Std 1028: 1989, IEEE Standard for Software Reviews and Audits.
 El Plan General de Garantía de Calidad del Consejo Superior de Informática.
MAP.
 CMM. Capability Maturity Model.
 ISO/IEC JTC1 15504. SPICE. Software Process Improvement and Capability
Determination.
 Modelo de EFQM. Modelo de la Fundación Europea de Gestión de Calidad.

Los procedimientos pueden variar en cada organización, pero lo importante es que estén
escritos, personalizados, adaptados a los procesos de la organización y, lo que es más
importante, que se cumplan. La calidad del software debe implementarse a lo largo de
todo el ciclo de vida, debe correr paralelo desde la planificación del producto hasta la fase
de producción del mismo.

La calidad de un software se define mediante un conjunto de características que no son


fácilmente medibles. Estas características son relativas por una parte a la operación del
sistema, y por otra a su evolución.

Los atributos de calidad del software están categorizados en seis características


(funcionalidad, fiabilidad, usabilidad, eficiencia, mantenibilidad y portabilidad), que se
subdividen a su vez en subcaracteristicas.

Par poder entender cada uno de estos aspectos de calidad de software tenesmo que tener
en claro lo que persiguen estos indicadores:

 Funcionalidad
La capacidad del producto software para proporcionar funciones que satisfacen
necesidades declaradas e implícitas cuando se usa bajo condiciones especificadas.
Curso: Tópicos Avanzados de Ingeniería de Software Página: 4

Las subcaracterísticas son la adecuación, exactitud, interoperabilidad y seguridad


de acceso.

 Fiabilidad
La capacidad del producto software para mantener un nivel especificado de
prestaciones cuando se usa bajo condiciones especificadas.
Las subcaracterísticas son la madurez, la tolerancia a fallos y la capacidad de
recuperación.

 Usabilidad
La capacidad del producto software para ser entendido, aprendido, usado y ser
atractivo para el usuario, cuando se usa bajo condiciones especificas.
Las subcaracterísticas son la capacidad para ser entendido, aprendido, operado y
controlado y capacidad de atracción.

 Eficiencia
La capacidad para proporcionar prestaciones apropiadas, relativas a la cantidad de
recursos usados, bajo condiciones determinadas.
Las subcaracterísticas son el comportamiento temporal (tiempos de respuesta, de
proceso y potencia, bajo unas condiciones determinadas) y la utilización de
recursos.

 Mantenibilidad
La capacidad del software para ser modificado. Las modificaciones podrán incluir
correcciones, mejoras o adaptación del software a cambios en el entorno, y
requisitos y especificaciones funcionales.
Entre las subcaracterísticas de la mantenibilidad se encuentra la capacidad para ser
analizado, capacidad para ser cambiado, la estabilidad y la capacidad para ser
probado.

 Portabilidad
Es la capacidad para ser transferido de un entorno a otro.
Las subcaracterísticas son la adaptabilidad, la coexistencia y la capacidad para
reemplazar a otro producto software.

Calidad vs Seguridad vs Confiabilidad de Software


Los conceptos de Calidad, Seguridad y Confiabilidad o fiabilidad son aspectos de lo que
genéricamente se denomina “Calidad” pero no deberían confundirse.

Para el usuario de un bien, los tres términos citados son importantes, siendo lo que se ha
llamado calidad el grado de aprecio o idoneidad que el usuario tiene por el bien. El
usuario, consumidor o cliente, se encuentra en un estado privilegiado ya que elegirá aquel
producto o servicio que mejor satisfaga sus necesidades.
Curso: Tópicos Avanzados de Ingeniería de Software Página: 5

El usuario optará por aquel que,


dentro de un rango de precios,
resulte más idóneo para sus
necesidades.

Sin embargo, desde el punto de


vista de la empresa ese concepto
de calidad resulta insuficiente,
ya que será necesario algo más
tangible para poder
desarrollarla.

La calidad se ha considerado tradicionalmente desde el punto de vista técnico, es decir,


referido a la fabricación de un bien material, aunque actualmente esta interpretación de la
calidad ha evolucionado. De forma general, en sentido amplio, por “calidad” de un bien o
servicio se entiende actualmente el grado de aprecio que el usuario tiene por el mismo.

Respecto a la Seguridad de un
producto, en primer lugar hay que
tener en cuenta que se debe
garantizar la seguridad ante todo
tipo de daño que puedan sufrir las
personas en todas las fases de la
vida del producto, desde que se
fabrica hasta que el usuario lo
utiliza, aunque para este usuario el
concepto de seguridad está
relacionado, muchas veces con el
uso particular que él le da al producto, no con el proceso de fabricación que se ha seguido
hasta llegar a manos del usuario.

Por último, el concepto de


fiabilidad suele ser percibido por
el usuario como garantía de
funcionamiento correcto del
producto durante su utilización,
en unas condiciones
determinadas, a lo largo de un
período especificado. La
fiabilidad de un producto va
unida de forma inseparable a su
diseño, ya que durante la fase de
diseño es cuando se ponen de manifiesto todos los requisitos que debe cumplir el
producto para satisfacer las necesidades del cliente, tanto en rendimiento, prestaciones y
durabilidad como en seguridad.
Curso: Tópicos Avanzados de Ingeniería de Software Página: 6

Confiabilidad de Software
La IEEE define a la confiabilidad como “la habilidad que tiene un sistema
o componente de realizar sus funciones requeridas bajo condiciones específicas en
periodos de tiempo determinados”.

La confiabilidad de software significa que un programa en particular debe de seguir


funcionando en la presencia de errores.

Los errores pueden ser relacionados al diseño, a la implementación, o a la programación.


 Aunque casi todos los softwares tengan errores, la mayoría de los errores
nunca serán revelados debajo de circunstancias, pero un atacante busca esta
debilidad para atacar un sistema.
 Las organizaciones que desarrollan productos basados en software
requieren de prácticas efectivas que permitan mejorar la calidad del
producto. La Ingeniería de la Confiabilidad de Software es una práctica
cuantitativa que puede ser implementada en organizaciones de cualquier tamaño
bajo distintos modelos de desarrollo.

Una falla es la manifestación percibida por el cliente de que algo no funciona


correctamente e impacta su
percepción de la calidad. Un defecto
es el problema en el producto de
software que genera una falla.
 Se dice que un Software es
confiable si realiza lo que el
usuario desea, cuando así lo
requiera
 No es confiable si así no lo
hiciera. A nuestros fines un
Software no es confiable
cuando falla.
 Las fallas se deben a errores
en el Software. Si corregimos
estos errores sin introducir
nuevos, mejoramos la
Confiabilidad del Software

La confiabilidad es un aspecto en el
cual se involucran diferentes
dimensiones.

Los principales conceptos asociados a la confiabilidad del software son:

 Fiabilidad: En la ingeniería se usa generalmente para asegurar aquella condición


de trabajo que permite al usuario realizar sus tareas para que el sistema no llegue a
corromperse.

 Disponibilidad: Se refiere a la condición de trabajo que un sistema debe de tener.


Curso: Tópicos Avanzados de Ingeniería de Software Página: 7

 Seguridad: Este concepto no solo describe el comportamiento del


sistema, también nos define la habilidad que tiene este para poder resistir los
ataques externos.

 Mantenimiento: Es una mediada en la cual el sistema está apto para


reparaciones y modificaciones.

 Protección: Se refiere a la capacidad del sistema de permitir las fallas de manera


inmediata, en caso de que el sistema llegara a fallar existirá alguna manera de
proteger la información o las acciones que el sistema realice.

Ingeniería de Confiabilidad de Software


La ingeniería de confiabilidad de software es una herramienta en las organizaciones que
brinda la posibilidad de hacer una planeación y guía de procesos de software de modo
cuantitativo.
Realmente no es de actual creación, más bien surgió en los años setenta a partir de las
contribuciones de: J.D. Musa y Okumoto. La eficacia de la ICS realmente es alta y es por
ello que empresas como HP, IBM, Motorola, Microsoft Y muchas más hayan hecho uso
de la misma.

La ICS se distingue por los siguientes dos elementos:


 La utilización esperada en relación a la funcionalidad del sistema.
 Necesidades en términos de calidad establecidos por el cliente.

Proceso de la Ingeniería de Confiabilidad de Software


El proceso de la ingeniería de confiabilidad de software se define a partir de seis
actividades las cuales:
 Definición del producto
 Desarrollo de un perfil de operación
 Establecer la confiabilidad
indicada
 Preparación de las pruebas
 Ejecución de las pruebas
 Procesar y dirigir las pruebas
Curso: Tópicos Avanzados de Ingeniería de Software Página: 8

Existe gran cantidad de software en la actualidad para el estudio de confiabilidad, algunos


de ellos están desarrollados específicamente para procesos web y otros para ser tratados
directamente sobre código fuente, pero su utilización es indispensable hoy en día para
mejorar la confiabilidad y seguridad del software; a continuación, se muestra un esquema
con las principales herramientas del mercado:

Seguridad de Software
La seguridad es una disciplina que se encarga de proteger la integridad y la privacidad de
la información almacenada en un sistema.

El autor y experto en seguridad Gary McGraw comenta lo siguiente:


“La seguridad del software se relaciona por completo con la calidad. Debe
pensarse en seguridad, confiabilidad, disponibilidad y dependencia, en la fase inicial, en
la de diseño, en la de arquitectura, pruebas y codificación, durante todo el ciclo de vida
del software [proceso].”

En pocas palabras, el software que no tiene alta calidad es fácil de penetrar por parte de
intrusos y en consecuencia, el software de mala calidad aumenta indirectamente
el riesgo de la seguridad, con todos los costos y problemas que eso conlleva.
Curso: Tópicos Avanzados de Ingeniería de Software Página: 9

También plantea que la base de los problemas de seguridad son la conectividad, la


complejidad y la extensibilidad de los sistemas actuales y su defunción está dada bajo 2
conceptos orientados dentro los objetivos de la Ing. de Software:
1. La seguridad de un producto desarrollado se orienta a la búsqueda de que dicho
producto continúe funcionando correctamente ante ataques maliciosos.
2. La seguridad del Software en construcción se orienta a la resistencia proactiva de
posibles ataques.

Riesgos de Seguridad
Los atacantes pueden potencialmente usar rutas diferentes a través de la aplicación para
hacer daño a la organización.
Cada una de estas rutas representa un riesgo que puede, o no, ser lo suficientemente grave
como para justificar la atención.

A veces, estas rutas son triviales de encontrar y explotar, y a veces son muy difíciles, del
mismo modo, el daño que se causa puede ir de ninguna consecuencia, o ponerlo fuera del
negocio.

Para determinar el riesgo en una organización, de debe evaluar la probabilidad asociada a


cada agente de amenaza, vector de ataque, y la debilidad en la seguridad, y combinarla
con una estimación del impacto técnico y de negocios para su organización, en
conjunto, estos factores determinan el riesgo global.
Curso: Tópicos Avanzados de Ingeniería de Software Página: 10

Top 10 de Riesgos de Seguridad en Aplicaciones


Curso: Tópicos Avanzados de Ingeniería de Software Página: 11
Curso: Tópicos Avanzados de Ingeniería de Software Página: 12
Curso: Tópicos Avanzados de Ingeniería de Software Página: 13
Curso: Tópicos Avanzados de Ingeniería de Software Página: 14
Curso: Tópicos Avanzados de Ingeniería de Software Página: 15
Curso: Tópicos Avanzados de Ingeniería de Software Página: 16
Curso: Tópicos Avanzados de Ingeniería de Software Página: 17
Curso: Tópicos Avanzados de Ingeniería de Software Página: 18
Curso: Tópicos Avanzados de Ingeniería de Software Página: 19
Curso: Tópicos Avanzados de Ingeniería de Software Página: 20
IV
ACTIVIDADES
1. Analizar las diferentes vulnerabilidades en paginas web especificas.
2. Investigar de acuerdo a las vulnerabilidades encontradas en que categoria del
“TOP 10 de Riesgos de Seguridad” se encuentra.
3. Investigar y aplicar la metodología OWASP (open web application security
project) para encontrar vulnerabilidades en páginas web.

VI
EJERCICIOS PROPUESTOS
1. Investigar y probar sobre una una aplicación web la herramienta Zed Attack Proxy
(ZAP), para descubrir los riesgos de seguridad y las vulnerabilidades de la aplicacion y
sus datos.

2. Para el presente laboratorio, el grupo de trabajo debera investigar una aplicacion web y
realizar sobre esta la evaluacion de vulnerabilidades, utilizando la siguiente estructura,
basandonos en Ethical Hacking:
a) Footprinting: Buscar información, investigar e identificar información (cuál es su
server de mail, cual es su pg web, q usuarios tiene la empresa, cuál es su dirección
ip publica, que utiliza, Linux, Exchange server, tipo de SO, su metadata).
b) Fingerprinting: Hacer un escaneo de servicios y puertos que están expuestos,
enumeración, escaneo de puertos y servicios que utiliza la organización.
c) Análisis de vulnerabilidades: Reporte de vulnerabilidades encontradas.
https://www.zaproxy.org/

3. Según las vulnerabilidades halladas, indicar en que categorias del “TOP 10 de Riesgos
de Seguridad”, se encuentran.

Tips para desarrollar los pasos según Ethical Hacking:

a.- RESUMEN PARA RECOLECTAR INFORMACIÓN (FOOTPRINTING)


1.- Buscamos información en google mediante archivos para conocer a nuestro
objetivo
Con Google hacking:
 Pdf
 Xls
 Configuración
 Ini
 Camaras

2.- Buscamos dominios de la empresa con netcraft http://www.netcraft.com/


Curso: Tópicos Avanzados de Ingeniería de Software Página: 1

Paginas para buscar información


http://www.netcraft.com/
Si una organización esta expuesta en internet. Netcraft busca todos los dominios
asociados a un dominio principal, pagina web, intranet, correo.
Para encontrar números de serie: http://pastebin.com/
www.cuwhois.com
www.robtex.com
http://bit.ly/name2email

(Todas las posibles combinaciones de correo que puede tener una persona)
http://mailtester.com/

Para testear si existe el correo. (Hay servidores que están configurados para que
no permita la identificación del usuario)
https://rapportive.com/

3.- Buscar nombres DNS (servidores que resuelven nombres, es decir coloco nombre
de empresa y obtengo IP) con http://network-tools.com/
 Nombres DNS
 Registro A: página web
 Registro MX: servidor de correo electrónico
 Registro NS: name server, los nombres de servidores de DNS
 Registro SOA: autoridad que registra esos datos

b.- RESUMEN PARA BUSCAR PUERTOS Y SERVICIOS (FINGERPRINTING)


Debemos identificar qué rol está cumpliendo un servidor en la organización, por eso es
importante enumerar puertos y servicios de un servidor en una empresa

Para que un cliente se comunique con la BD usa un puerto por defecto:


 Sqlserver pto 1433
 Oracle pto 1521
 Mysql pto 3306

Pero ese Puerto se puede cambiar manualmente. Por eso una buena práctica de seguridad
de información es cambiar los puertos por defecto. En TCP tengo hasta el puerto 65534
(los primeros 1000 son puertos reservados). También se aplica a puertos UDP. Las
organizaciones crean una línea base o hardening.

Los puertos me dicen que rol y que papel cumple una PC en la red, por ejemplo si
encuentro en una pc que está habilitado el puerto 53 entonces es un servidor DNS

Consulta de DNS mediante 2 comandos por internet: whois y nslookup, puedo utilizar
el www.network-tools.com

Consultar desde Windows


Cmd
Curso: Tópicos Avanzados de Ingeniería de Software Página: 2

Nslookup
Set q=mx (para registros de correo)
unsa.edu.pe (colocar el dominio)

/***************/
Para buscar números de serie
Pastebin.com
/************************/

VII
CUESTIONARIO
1. ¿Qué es la funcionalidad y fiabilidad de un software?
2. ¿Qué es la disponibilidad del software?
3. ¿Qué se debe garantizar para que un software sea confiable?
4. ¿Qué es la confiabilidad que manifiesta un servicio o un sistema?

VIII
BIBLIOGRAFÍA
1. Acuña Acuña, J. (2003). Ingeniería de Confiabilidad. Costa Rica: Editorial
Tecnológica de Costa Rica.
2. Albin, S., & Crefeld, P. (1994). Getting started: Concurrent engineering for a
medim-sized manufacturer. Journal of Manufacturing System 13 , págs. 48-58.
3. Edinn. (2011). Edinn. Recuperado el 16 de Marzo de 2012, de mttr.html
4. Escobar R, L. A., Villa D, E. R., & Yañez C, S. (2003). Confiabilidad. Historia,
Estado del arte y desafíos futuros. Dyna , 5-21.
5. García Flores, R. (Enero-Marzo de 2004). Universidad Autónoma de Nuevo León.
Recuperado el 26 de Marzo de 2012, de Ingeniería concurrente y tecnologías de
información: http://www.ingenierias.uanl.mx/22/ingenieriaconcu.PDF
6. Mather, D. (15 de 10 de 2002). La cultura de confiabilidad. Recuperado el 26 de
Marzo de 2012.
7. Melo González, R., Lara Hernández, C., & Jacobo Gordillo, F. (2009). Estimación
de la confiabilidad- mantenibilidad-mediante una simulación tipo Monte Carlo de
un sistema de compresión de gas amargo durante la etapa de ingeniería. Redalyc ,
13.
8. Prieto García, C. (2008). Universidad de Sevilla. Recuperado el 16 de Marzo de
2012.
9. Ruiz, R. (06 de Enero de 2011). Blogspot.mx. Recuperado el 25 de Marzo de
2012.
10. Salvador., S. G. (2003). Ingeniería de proyectos informáticos. Actividades y
procedimientos. Universitas.
11. Software Guru. (2008). Recuperado el 26 de Marzo de 2012.

También podría gustarte