SlideShare una empresa de Scribd logo
1 de 8
Métodos para la Construcción de Software Fiable
                           Priscill Smilce Orue

          Escuela Técnica Superior de Ingeniería Informática,

                         Universidad de Málaga,

                             Málaga - España


                           31 de enero de 2012




Introducción
    La ingeniería de software busca diseñar, desarrollar e implementar he-
rramientas cada vez más ables, válidas, seguras y consistentes. Es por este
motivo que la ANSI denió el concepto de Fiabilidad del Software como: la
probabilidad de una operación libre de errores del software para un periodo
especíco de tiempo dentro de un entorno delimitado [6]. Dentro del contex-
to de la web, se aplican las Pruebas de Penetración o Pruebas de Intrusión
(en inglés Penetration Testing ). Por medio de tales pruebas, los evaluadores
descubren vulnerabilidades por medio de la simulación de ataques a una apli-
cación web determinada. Tales ataques se basan en técnicas automatizadas
que recolectan información sobre la web objetivo y analiza las respuestas de
la aplicación para determinar si los ataques fueron exitosos [2].
    Este trabajo describe aspectos relacionados a conceptos de abilidad del
software, pruebas de penetración y análisis estáticos y dinámicos empleados
en pruebas de intrusión a aplicaciones web, como mecanismos de verica-
ción y comprobación de la seguridad. Además, se presentan herramientas
asociadas al tema, de manera a relacionar la teoría con la práctica. Para
la realización de este trabajo, la composición se llevó a cabo con el editor
 A
L TEXy se consultaron diversas fuentes secundarias, con el n de ofrecer la
información mas actualizada posible.

1.    Fiabilidad del software
   A medida que la funcionalidad de las operaciones computacionales se
vuelven más esenciales y complicadas en la sociedad moderna y las aplicacio-

                                     1
nes de software críticas aumentan en tamaño y complejidad, la abilidad del
software se vuelve más importante. La abilidad del software es un atributo
de la calidad del software, junto a la funcionalidad, usabilidad, rendimiento,
facilidad de mantenimiento, capacidad y documentación [6]. En los últimos
años, los costos del desarrollo de software y los costos de errores en el mismo
representan los mayores gastos. Por este motivo, se han llevado a cabo acti-
vidades de investigación en la ingeniería de la abilidad del software durante
los últimos 25 años, y más de 50 modelos estadísticos han sido propuestos
para estimar la abilidad del software. Este campo busca sistemáticamente
reducir o eliminar las fallas de sistemas que puedan afectar al rendimiento
de las aplicaciones [8].

2.    Pruebas de Intrusión (              Penetration Tests )
    Las aplicaciones Web son usadas para proveer funcionalidad que permite
a las empresas construir y mantener relaciones con sus clientes. La informa-
ción almacenada por las aplicaciones web es por lo general condencial, y
si es obtenida para usos malintencionados, su exposición podría resultar en
pérdidas signicativas tanto para clientes como empresas [2].
    Una de las técnicas empleadas para lograr la abilidad de las aplicacio-
nes web son las Pruebas de Intrusión (en inglés Penetration Tests ). Estas
pruebas identican vulnerabilidades en sitios web por medio de las simula-
ciones de ataques. Aunque las pruebas de intrusión no pueden garantizar que
todas las vulnerabilidades sean identicadas en una aplicación, la misma es
popular entre los desarrolladores porque: (1) generalmente tiene una baja
tasa de reportes de falsa vulnerabilidad debido a que las descubre explotán-
dolas; (2) verica las aplicaciones dentro de un contexto, lo cual permite el
descubrimiento de vulnerabilidades que surgen debido al entorno desplegado
de la aplicación web; y (3) provee entradas concretas para cada reporte de
vulnerabilidad que puede guiar a los desarrolladores a corregir el código [2].
    El proceso de la prueba de intrusión puede ser dividido en tres fases.
Halfond [2] plantea el esquema 1 para resumirlas:
      Recolección de información: se selecciona una aplicación web a evaluar
      y se obtiene información sobre la misma aplicando diversas técnicas, co-
      mo la exploración automática (automatic scanning), rastreo web (web
      crawling), e ingeniería social.
      Generación de ataques: es el desarrollo de ataques a la aplicación bajo
      evaluación. Esta fase puede ser automatizada al personalizar ataques

                                      2
conocidos o al emplear scripts de ataques automatizados.
      Análisis de respuestas obtenidas: una vez que los ataques han sido
      efectuados, los evaluadores realizan un análisis de los resultados para
      determinar si los ataques fueron exitosos y preparan un reporte nal
      sobre las vulnerabilidades descubiertas.




               Figura 1: Proceso de las Pruebas de Intrusión



3.    Análisis estáticos de las Pruebas de Intrusión
    Livshits [3] describe algunas pruebas de intrusión aplicando análisis está-
ticos para detectar vulnerabilidades, por ejemplo la técnica de Inyección SQL
(SQL Injection ), scripts de sitios (cross-site scripting ) y ataques separados
de HTTP (HTTP splitting attacks ). Estas técnicas están basadas en análisis
escalables y precisos. Los análisis estáticos pueden requerir o no acceso al
código fuente de la aplicación.
    Cuando se accede al código fuente para efectuar las pruebas, lo primero
que se lleva a cabo es traducir dicho código a un modelo intermedio [1].
Se realizan varios tipos de análisis y nalmente se presentan los resultados.
Estos tres pasos están gracados en 2. La ventaja de este enfoque es que es
más rápido que una revisión manual del código fuente, y se puede analizar
el código sin ejecutarlo. Su desventaja es que analiza programas que fueron
escritos sin considerar la seguridad, y el evaluador puede encontrarse con
múltiples paradigmas y tecnologías, lo cual ralentiza el trabajo.
    En el sistema propuesto por [3], los usuarios de la herramienta describen
los patrones de vulnerabilidad de mayor interés en PQL (Program Query


                                      3
Figura 2: Proceso estático con acceso al código

Language, lenguaje para expresar patrones de eventos u objetos con sinta-
xis similar a Java [9]). La herramienta, tal como se lo graca en 3, aplica
consultas especicadas por los usuarios a Java bytecode y encuentra todas
las posibles coincidencias estadísticamente. Los resultados del análisis son
integrados a Eclipse, haciendo que todas las vulnerabilidades sean fáciles de
examinar y solucionar como parte del proceso de desarrollo. Su principal ven-
taja es que puede encontrar todas las violaciones de seguridad sin ejecutar
la aplicación, por lo que el acceso al código no es necesario.




               Figura 3: Arquitectura de un análisis estático


4.    Análisis dinámicos de las Pruebas de Intrusión
    Tradicionalmente, las herramientas de análisis estático son usadas du-
rante el proceso de desarrollo de la aplicación para asegurar la calidad del
producto. Por otra parte, los análisis dinámicos se utilizan durante la fase de
despliegue, asegurando la protección de la aplicación web en tiempo de eje-
cución [7]. Halfond [2] agrega que el enfoque dinámico automatiza el análisis
de las respuestas obtenidas, para determinar si los ataques tuvieron éxito.
    Un modelo propuesto que aplica el análisis dinámico toma los datos de
entrada del proceso de evaluación funcional de una aplicación web [7]. Es-
te enfoque se basa en los casos de evaluación preparados por el equipo de

                                      4
pruebas. Los argumentos que favorecen este análisis son los siguientes:
   1. Al enviar patrones de ataques reales, es posible evaluar datos de rutinas
      de validación para lograr la exactitud, no tratarlos ciegamente.
   2. La implementación de análisis dinámicos conoce la aplicación web por
      dentro, entonces pruebas de intrusión más precisas pueden ser genera-
      das. Estos son dos ejemplos que ilustran este concepto:
           Suponiendo que en cierto módulo el parámetro HTTP está vin-
           culado únicamente con la construcción de la respuesta HTTP,
           entonces no tiene sentido evaluarlo con otros valores que ataques
           XSS.
           Los parámetros POST insertados dentro de una base de datos
           como claves pueden ser identicados. Luego de este paso, se puede
           aplicar un algoritmo especial de control para vericarlos.
    En la Figura 4, se muestra un ejemplo del enfoque dinámico [7]. La prime-
ra fase consiste en las siguientes acciones: evaluación de casos preestablecidos,
generación de trazas de ejecución y posterior análisis. El objetivo consiste en
determinar el conjunto de posibles vulnerabilidades. Esto es logrado por la
aproximación de la aplicación web con un conjunto de DDGs interconecta-
dos ( del inglés Data Dependency Graph, Grafo de Dependencia de Datos).
Luego se aplica el modelo mejorado de Tainted Mode.




Figura 4: Esquema general de la integración de Pruebas de Intrusión con el
Análisis Dinámico
    En la segunda fase, varios ataques son enviados a la aplicación web para
ser vericados. Se considera que hay vulnerabilidades si patrones maliciosos

                                       5
fueron encontrados. El resultado es la lista de vulnerabilidades que fueron
validadas con éxito con las pruebas de intrusión y una lista adicional de
posibles vulnerabilidades. La posible vulnerabilidad es reportada como un
tópico por el modelo mejorado de Tainted Mode que no fue conrmado con
las pruebas de intrusión y puede ocurrir por dos causas: puede ser un falso
positivo, o puede ser el resultado de una base de datos de patrones maliciosos
incompleto que fue utilizado durante las pruebas de intrusión [7].

5.    Herramientas para Pruebas de Intrusión
    El Departamento de Seguridad Nacional de EEUU arma que muchas
organizaciones aplican un enfoque híbrido, entre análisis estáticos y diná-
micos. Este factor ha favorecido al desarrollo de estándares para mantener
una amplia colección de herramientas para las pruebas de intrusión [4]. El
PTES(del inglés Penetration Testing Execution Standard ) detalla las técnicas
y herramientas para las pruebas de intrusión [10]. La selección de las mismas
depende de la profundidad de las pruebas a ser aplicadas. Se consideran las
siguientes categorías:
     Herramientas requeridas: lo primero es tener conocimiento de los sis-
     temas operativos más usados, de uso de máquinas virtuales, equipos
     de radio frecuencia y software dedicado. Las máquinas virtuales facili-
     tan tener múltiples instancias de sistemas operativos ejecutándose en
     una estación de trabajo. Dentro del contecxto del software, hay va-
     rias herramientas disponibles. Algunas más comunes son: metaesploit
     (conjunto de herramientas de explosión remota), nexpose (scanner de
     vulnerabilidad), nessus (localizador y documentador de vulnerabilida-
     des), openvas (scanner de vulnerabilidades), Social-Engineer Toolkit
     (útil para realizar ataques contra el elemento humano).
     Recolección de Inteligencia: es la fase en el cual los datos o inteligen-
     cia son recolectados para guiar las acciones de evaluación. Incluye in-
     formación sobre empleados,productos, planes, etc. A nivel más amplio,
     agrega información sobre empresas competidoras dentro del mercado.
     En este nivel, se aplican los conceptos del OSINT (del inglés Open
     Source Intelligence ), que busca todos los datos sobre la empresa y sus
     competidores en fuentes de información públicas.
     Análisis de vulnerabilidades: se emplea para identicar y evaluar los
     riesgos de seguridad a partir de las vulnerabilidades detectadas con las


                                      6
herramientas anteriores. Se divide en dos áreas: identicación y valida-
      ción. El segundo busca reducir el número de vulnerabilidades identi-
      cadas a aquellas que son reales. Para la evaluación de vulnerabilidades
      se emplean herramientas como el OpenVAS (Open Vulnerability As-
      sessment System) o el Nessus, aplicable sobre Windows y Linux.
      Explotación: existen varias técnicas de explotación (fuzzing, sning,
      etc) y cada una de ellas tiene su propio conjunto de herramientas.
      Por ejemplo, para la técnica de Fuerza Bruta, que consiste en cambiar
      nombres de usuarios y contraseñas hasta encontrar una coincidencia, se
      tiene la herramienta Brutus (Windows), Medusa, NCrack, etc, que ata-
      can diversos servicios (ejemplos: FTP, HTTP, HTTPS, ICQ, IRC,
      IMAP, LDAP, MS-SQL, MySQL, NCP, NNTP, Oracle, POP3,
      PostgreSQL, SSH,       etc.)
      Post-Explotación: son las actividades que se llevan a cabo una vez que
      el sistema ha sido accedido o comprometido. Las actividades dependen
      del sistema operativo, pueden ir del rango del whoami hasta obtener
      listados de cuentas locales y extraer las contraseñas del registro.
      Reporte: existen dos niveles para reportar los hallazgos, que son eje-
      cutivo y técnico; el primero tiene un enfoque administrativo-gerencial
      en el que se explica en vocabulario simple las implicancias de los resul-
      tados y se sugiere una ruta de acción. En el segundo, se incluyen los
      datos hallados, junto con muestras de pantallas para dar soporte a los
      resultados encontrados.

Conclusiones
    Las Pruebas de Intrusión (Penetration Tests ) sirven para detectar vul-
nerabilidades en aplicaciones web y ayudan a la toma de decisiones que
conciernen a la seguridad de las mismas. Las técnicas estudiadas en este
trabajo fueron los análisis estáticos y dinámicos, con una gran variedad de
herramientas disponibles para cada fase del proceso de pruebas, cubriendo
aspectos técnicos como humanos. Los reportes de resultados de las pruebas
son considerados para reducir todo posible la cantidad de puntos débiles
de una aplicación web. Por lo tanto, es importante conocer con detalle las
técnicas y herramientas de Penetration Testing desde el momento en que se
recolectan los datos de la empresa objetivo, hasta el contenido de los reportes
a ser entregados. Otra recomendación es hacer un seguimiento periódico de


                                      7
las vulnerabilidades más comunes. Por ejemplo, la Fundación OWASP publi-
ca cuales son las vulnerabilidades de seguridad más críticas en aplicaciones
web [5].

Referencias
 [1] Jeremiah Grossman and Jacob West. Correlating static and dynamic
     analysis results. Sitio web; accedido 19-Dic-2011.
 [2] William G. J. Halfond*, Shauvik Roy Choudhary, and Alessandro Or-
     so. Improving penetration testing through static and dynamic analysis.
     Software Testing, Verication and Reliability, 21(3):195  214, Septem-
     ber 2011.
 [3] V. Benjamin Livshits and Monica S. Lam. Finding security vulnerabi-
     lities in java applications with static analysis. SSYM'05 Proceedings of
     the 14th conference on USENIX Security Symposium, 14, 2005.
 [4] U.S Department of Homeland Security National Cyber Security Divi-
     sion (NCSD). Build security in, 2011. Sitio Web; accedido 19-Dic-2011.
 [5] Fundación OWASP. Las 10 vulnerabilidades de seguridad mas criticas
     en aplicaciones web, 2007. Sitio Web; accedido 12-Ene-2012.
 [6] Jiantao Pan. Software reliability, Spring 1999. Sitio Web; accedido
     10-Ene-2012.
 [7] Andrey Petukhov and Dmitry Kozlov. Detecting security vulnerabilities
     in web applications using dynamic analysis with penetration testing,
     2008. Sitio Web; accedido 11-Ene-2012.
 [8] Hoang Pham. Software reliability, Diciembre 1999. Sitio Web; accedido
     10-Ene-2012.
 [9] Sourceforge. Pql: Program query language. Sitio web; accedido 11-Ene-
     2012.
[10] Penetration Testing Execution Standard. Penetration testing execution
     standard, 2011. Sitio Web; accedido 19-Dic-2011.




                                     8

Más contenido relacionado

La actualidad más candente

Systems analysis methodologies(white)
Systems analysis methodologies(white)Systems analysis methodologies(white)
Systems analysis methodologies(white)Bernie Fishpool
 
Lecture 8 (software Metrics) Unit 3.pptx
Lecture 8 (software Metrics) Unit 3.pptxLecture 8 (software Metrics) Unit 3.pptx
Lecture 8 (software Metrics) Unit 3.pptxironman427662
 
Ui ux designing principles
Ui ux designing principlesUi ux designing principles
Ui ux designing principlesDzung Nguyen
 
Agile methodology
Agile methodologyAgile methodology
Agile methodologyTyler Rose
 
Design systems: accounting for quality and scalability
Design systems: accounting for quality and scalabilityDesign systems: accounting for quality and scalability
Design systems: accounting for quality and scalabilityuxpin
 
Mobile Information Architecture
Mobile Information ArchitectureMobile Information Architecture
Mobile Information ArchitectureLifna C.S
 
Windows 2012 server
Windows 2012 serverWindows 2012 server
Windows 2012 serverJaffer Haadi
 
Create User Flow & Wireframing for an Application
Create User Flow & Wireframing for an ApplicationCreate User Flow & Wireframing for an Application
Create User Flow & Wireframing for an ApplicationRudityas Wahyu Anggoro
 
An introduction
An introductionAn introduction
An introductiontumetr
 
Discover Requirement
Discover RequirementDiscover Requirement
Discover Requirementzeyadtarek13
 
Uxpin Why Build a Design System
Uxpin Why Build a Design SystemUxpin Why Build a Design System
Uxpin Why Build a Design SystemLewis Lin 🦊
 
Introduction to User Experience and User Interface Design: A One-Hour Crash C...
Introduction to User Experience and User Interface Design: A One-Hour Crash C...Introduction to User Experience and User Interface Design: A One-Hour Crash C...
Introduction to User Experience and User Interface Design: A One-Hour Crash C...Jason Hong
 
Software Development Life Cycle Model
Software Development Life Cycle ModelSoftware Development Life Cycle Model
Software Development Life Cycle ModelJ.T.A.JONES
 
Lecture 3
Lecture 3Lecture 3
Lecture 39anm12
 
Software Development Software development process
Software Development Software development processSoftware Development Software development process
Software Development Software development processimtiazalijoono
 

La actualidad más candente (20)

Systems analysis methodologies(white)
Systems analysis methodologies(white)Systems analysis methodologies(white)
Systems analysis methodologies(white)
 
Lecture 8 (software Metrics) Unit 3.pptx
Lecture 8 (software Metrics) Unit 3.pptxLecture 8 (software Metrics) Unit 3.pptx
Lecture 8 (software Metrics) Unit 3.pptx
 
Ui ux designing principles
Ui ux designing principlesUi ux designing principles
Ui ux designing principles
 
Agile methodology
Agile methodologyAgile methodology
Agile methodology
 
Design systems: accounting for quality and scalability
Design systems: accounting for quality and scalabilityDesign systems: accounting for quality and scalability
Design systems: accounting for quality and scalability
 
Extreme programming (xp)
Extreme programming (xp)Extreme programming (xp)
Extreme programming (xp)
 
Design sprint
Design sprintDesign sprint
Design sprint
 
Mobile Information Architecture
Mobile Information ArchitectureMobile Information Architecture
Mobile Information Architecture
 
Wireframe
WireframeWireframe
Wireframe
 
Windows 2012 server
Windows 2012 serverWindows 2012 server
Windows 2012 server
 
Create User Flow & Wireframing for an Application
Create User Flow & Wireframing for an ApplicationCreate User Flow & Wireframing for an Application
Create User Flow & Wireframing for an Application
 
An introduction
An introductionAn introduction
An introduction
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Crystal
CrystalCrystal
Crystal
 
Discover Requirement
Discover RequirementDiscover Requirement
Discover Requirement
 
Uxpin Why Build a Design System
Uxpin Why Build a Design SystemUxpin Why Build a Design System
Uxpin Why Build a Design System
 
Introduction to User Experience and User Interface Design: A One-Hour Crash C...
Introduction to User Experience and User Interface Design: A One-Hour Crash C...Introduction to User Experience and User Interface Design: A One-Hour Crash C...
Introduction to User Experience and User Interface Design: A One-Hour Crash C...
 
Software Development Life Cycle Model
Software Development Life Cycle ModelSoftware Development Life Cycle Model
Software Development Life Cycle Model
 
Lecture 3
Lecture 3Lecture 3
Lecture 3
 
Software Development Software development process
Software Development Software development processSoftware Development Software development process
Software Development Software development process
 

Similar a Métodos construcción software fiable

Castaneda suarezandresfernando2017
Castaneda suarezandresfernando2017Castaneda suarezandresfernando2017
Castaneda suarezandresfernando2017Idat
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de softwareTensor
 
Estrategias prueba de software
Estrategias prueba de softwareEstrategias prueba de software
Estrategias prueba de softwareCentro Líbano
 
Pruebas de aplicaciones web
Pruebas de aplicaciones webPruebas de aplicaciones web
Pruebas de aplicaciones webpaulinaaillon
 
Pruebas de aplicaciones web
Pruebas de aplicaciones webPruebas de aplicaciones web
Pruebas de aplicaciones webpaulinaaillon
 
Pruebas de aplicaciones web
Pruebas de aplicaciones webPruebas de aplicaciones web
Pruebas de aplicaciones webpaulinaaillon
 
Capitulo 17 estrategias_de_prueba_de_software
Capitulo 17 estrategias_de_prueba_de_softwareCapitulo 17 estrategias_de_prueba_de_software
Capitulo 17 estrategias_de_prueba_de_softwareAndres Valencia
 
Evaluación - Test de penetracion
Evaluación  - Test de penetracionEvaluación  - Test de penetracion
Evaluación - Test de penetracionrodmonroyd
 
Una metodología para el desarrollo de sistemas de información
Una metodología para el desarrollo de sistemas de informaciónUna metodología para el desarrollo de sistemas de información
Una metodología para el desarrollo de sistemas de informaciónLeonardo Fleire Morales
 
Paper injection sql_santiago_hidalgo_diego_jaramillo_victor_olalla_becket_toa...
Paper injection sql_santiago_hidalgo_diego_jaramillo_victor_olalla_becket_toa...Paper injection sql_santiago_hidalgo_diego_jaramillo_victor_olalla_becket_toa...
Paper injection sql_santiago_hidalgo_diego_jaramillo_victor_olalla_becket_toa...Becket Toapanta
 
Metricas de software
Metricas de softwareMetricas de software
Metricas de softwaresophialara123
 
Implementando owasp samm en latam
Implementando owasp samm en latamImplementando owasp samm en latam
Implementando owasp samm en latamMateo Martinez
 

Similar a Métodos construcción software fiable (20)

Castaneda suarezandresfernando2017
Castaneda suarezandresfernando2017Castaneda suarezandresfernando2017
Castaneda suarezandresfernando2017
 
Epa aqui
Epa aquiEpa aqui
Epa aqui
 
Intro Guía de Testing OWASP
Intro Guía de Testing OWASPIntro Guía de Testing OWASP
Intro Guía de Testing OWASP
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
 
Estrategias prueba de software
Estrategias prueba de softwareEstrategias prueba de software
Estrategias prueba de software
 
Pruebas de aplicaciones web
Pruebas de aplicaciones webPruebas de aplicaciones web
Pruebas de aplicaciones web
 
Pruebas de aplicaciones web
Pruebas de aplicaciones webPruebas de aplicaciones web
Pruebas de aplicaciones web
 
Pruebas de aplicaciones web
Pruebas de aplicaciones webPruebas de aplicaciones web
Pruebas de aplicaciones web
 
4.3pptx
4.3pptx4.3pptx
4.3pptx
 
Paso 9 actividad colaborativa
Paso 9   actividad colaborativaPaso 9   actividad colaborativa
Paso 9 actividad colaborativa
 
Capitulo 17 estrategias_de_prueba_de_software
Capitulo 17 estrategias_de_prueba_de_softwareCapitulo 17 estrategias_de_prueba_de_software
Capitulo 17 estrategias_de_prueba_de_software
 
Evaluación - Test de penetracion
Evaluación  - Test de penetracionEvaluación  - Test de penetracion
Evaluación - Test de penetracion
 
Capitulo4
Capitulo4Capitulo4
Capitulo4
 
Calidad de sofware
Calidad de sofwareCalidad de sofware
Calidad de sofware
 
Lacrest 2012
Lacrest 2012Lacrest 2012
Lacrest 2012
 
Una metodología para el desarrollo de sistemas de información
Una metodología para el desarrollo de sistemas de informaciónUna metodología para el desarrollo de sistemas de información
Una metodología para el desarrollo de sistemas de información
 
Paper injection sql_santiago_hidalgo_diego_jaramillo_victor_olalla_becket_toa...
Paper injection sql_santiago_hidalgo_diego_jaramillo_victor_olalla_becket_toa...Paper injection sql_santiago_hidalgo_diego_jaramillo_victor_olalla_becket_toa...
Paper injection sql_santiago_hidalgo_diego_jaramillo_victor_olalla_becket_toa...
 
Metricas de software
Metricas de softwareMetricas de software
Metricas de software
 
Implementando owasp samm en latam
Implementando owasp samm en latamImplementando owasp samm en latam
Implementando owasp samm en latam
 
Resumen ejecutivo eh
Resumen ejecutivo ehResumen ejecutivo eh
Resumen ejecutivo eh
 

Más de Priscill Orue Esquivel

Accelerating GWAS epistatic interaction analysis methods
Accelerating GWAS epistatic interaction analysis methodsAccelerating GWAS epistatic interaction analysis methods
Accelerating GWAS epistatic interaction analysis methodsPriscill Orue Esquivel
 
WiSANCloud: a set of UML-based specifications for the integration of Wireless...
WiSANCloud: a set of UML-based specifications for the integration of Wireless...WiSANCloud: a set of UML-based specifications for the integration of Wireless...
WiSANCloud: a set of UML-based specifications for the integration of Wireless...Priscill Orue Esquivel
 
IA conexionista-RNA --Prueba y entrenamiento con modelos de RNA (2)
IA conexionista-RNA --Prueba y entrenamiento con modelos de RNA (2)IA conexionista-RNA --Prueba y entrenamiento con modelos de RNA (2)
IA conexionista-RNA --Prueba y entrenamiento con modelos de RNA (2)Priscill Orue Esquivel
 
IA conexionista-RNA -- Prueba y entrenamiento con modelos de RNA
IA conexionista-RNA -- Prueba y entrenamiento con modelos de RNAIA conexionista-RNA -- Prueba y entrenamiento con modelos de RNA
IA conexionista-RNA -- Prueba y entrenamiento con modelos de RNAPriscill Orue Esquivel
 
IA conexionista-Redes Neuronales Artificiales: introducción
IA conexionista-Redes Neuronales Artificiales: introducciónIA conexionista-Redes Neuronales Artificiales: introducción
IA conexionista-Redes Neuronales Artificiales: introducciónPriscill Orue Esquivel
 
Aplicación de las Redes Hopfield al Problema de Asignación
Aplicación de las Redes Hopfield al Problema de AsignaciónAplicación de las Redes Hopfield al Problema de Asignación
Aplicación de las Redes Hopfield al Problema de AsignaciónPriscill Orue Esquivel
 
Aprendizaje Computacional: Valoraciones personales sobre métodos de etiquetad...
Aprendizaje Computacional: Valoraciones personales sobre métodos de etiquetad...Aprendizaje Computacional: Valoraciones personales sobre métodos de etiquetad...
Aprendizaje Computacional: Valoraciones personales sobre métodos de etiquetad...Priscill Orue Esquivel
 
Perspectiva docente del diseño de contenidos y evaluación para cursos a dista...
Perspectiva docente del diseño de contenidos y evaluación para cursos a dista...Perspectiva docente del diseño de contenidos y evaluación para cursos a dista...
Perspectiva docente del diseño de contenidos y evaluación para cursos a dista...Priscill Orue Esquivel
 

Más de Priscill Orue Esquivel (9)

Accelerating GWAS epistatic interaction analysis methods
Accelerating GWAS epistatic interaction analysis methodsAccelerating GWAS epistatic interaction analysis methods
Accelerating GWAS epistatic interaction analysis methods
 
WiSANCloud: a set of UML-based specifications for the integration of Wireless...
WiSANCloud: a set of UML-based specifications for the integration of Wireless...WiSANCloud: a set of UML-based specifications for the integration of Wireless...
WiSANCloud: a set of UML-based specifications for the integration of Wireless...
 
IA conexionista-RNA --Prueba y entrenamiento con modelos de RNA (2)
IA conexionista-RNA --Prueba y entrenamiento con modelos de RNA (2)IA conexionista-RNA --Prueba y entrenamiento con modelos de RNA (2)
IA conexionista-RNA --Prueba y entrenamiento con modelos de RNA (2)
 
IA conexionista-RNA -- Prueba y entrenamiento con modelos de RNA
IA conexionista-RNA -- Prueba y entrenamiento con modelos de RNAIA conexionista-RNA -- Prueba y entrenamiento con modelos de RNA
IA conexionista-RNA -- Prueba y entrenamiento con modelos de RNA
 
IA conexionista-Redes Neuronales Artificiales: introducción
IA conexionista-Redes Neuronales Artificiales: introducciónIA conexionista-Redes Neuronales Artificiales: introducción
IA conexionista-Redes Neuronales Artificiales: introducción
 
Plan de curso
Plan de cursoPlan de curso
Plan de curso
 
Aplicación de las Redes Hopfield al Problema de Asignación
Aplicación de las Redes Hopfield al Problema de AsignaciónAplicación de las Redes Hopfield al Problema de Asignación
Aplicación de las Redes Hopfield al Problema de Asignación
 
Aprendizaje Computacional: Valoraciones personales sobre métodos de etiquetad...
Aprendizaje Computacional: Valoraciones personales sobre métodos de etiquetad...Aprendizaje Computacional: Valoraciones personales sobre métodos de etiquetad...
Aprendizaje Computacional: Valoraciones personales sobre métodos de etiquetad...
 
Perspectiva docente del diseño de contenidos y evaluación para cursos a dista...
Perspectiva docente del diseño de contenidos y evaluación para cursos a dista...Perspectiva docente del diseño de contenidos y evaluación para cursos a dista...
Perspectiva docente del diseño de contenidos y evaluación para cursos a dista...
 

Métodos construcción software fiable

  • 1. Métodos para la Construcción de Software Fiable Priscill Smilce Orue Escuela Técnica Superior de Ingeniería Informática, Universidad de Málaga, Málaga - España 31 de enero de 2012 Introducción La ingeniería de software busca diseñar, desarrollar e implementar he- rramientas cada vez más ables, válidas, seguras y consistentes. Es por este motivo que la ANSI denió el concepto de Fiabilidad del Software como: la probabilidad de una operación libre de errores del software para un periodo especíco de tiempo dentro de un entorno delimitado [6]. Dentro del contex- to de la web, se aplican las Pruebas de Penetración o Pruebas de Intrusión (en inglés Penetration Testing ). Por medio de tales pruebas, los evaluadores descubren vulnerabilidades por medio de la simulación de ataques a una apli- cación web determinada. Tales ataques se basan en técnicas automatizadas que recolectan información sobre la web objetivo y analiza las respuestas de la aplicación para determinar si los ataques fueron exitosos [2]. Este trabajo describe aspectos relacionados a conceptos de abilidad del software, pruebas de penetración y análisis estáticos y dinámicos empleados en pruebas de intrusión a aplicaciones web, como mecanismos de verica- ción y comprobación de la seguridad. Además, se presentan herramientas asociadas al tema, de manera a relacionar la teoría con la práctica. Para la realización de este trabajo, la composición se llevó a cabo con el editor A L TEXy se consultaron diversas fuentes secundarias, con el n de ofrecer la información mas actualizada posible. 1. Fiabilidad del software A medida que la funcionalidad de las operaciones computacionales se vuelven más esenciales y complicadas en la sociedad moderna y las aplicacio- 1
  • 2. nes de software críticas aumentan en tamaño y complejidad, la abilidad del software se vuelve más importante. La abilidad del software es un atributo de la calidad del software, junto a la funcionalidad, usabilidad, rendimiento, facilidad de mantenimiento, capacidad y documentación [6]. En los últimos años, los costos del desarrollo de software y los costos de errores en el mismo representan los mayores gastos. Por este motivo, se han llevado a cabo acti- vidades de investigación en la ingeniería de la abilidad del software durante los últimos 25 años, y más de 50 modelos estadísticos han sido propuestos para estimar la abilidad del software. Este campo busca sistemáticamente reducir o eliminar las fallas de sistemas que puedan afectar al rendimiento de las aplicaciones [8]. 2. Pruebas de Intrusión ( Penetration Tests ) Las aplicaciones Web son usadas para proveer funcionalidad que permite a las empresas construir y mantener relaciones con sus clientes. La informa- ción almacenada por las aplicaciones web es por lo general condencial, y si es obtenida para usos malintencionados, su exposición podría resultar en pérdidas signicativas tanto para clientes como empresas [2]. Una de las técnicas empleadas para lograr la abilidad de las aplicacio- nes web son las Pruebas de Intrusión (en inglés Penetration Tests ). Estas pruebas identican vulnerabilidades en sitios web por medio de las simula- ciones de ataques. Aunque las pruebas de intrusión no pueden garantizar que todas las vulnerabilidades sean identicadas en una aplicación, la misma es popular entre los desarrolladores porque: (1) generalmente tiene una baja tasa de reportes de falsa vulnerabilidad debido a que las descubre explotán- dolas; (2) verica las aplicaciones dentro de un contexto, lo cual permite el descubrimiento de vulnerabilidades que surgen debido al entorno desplegado de la aplicación web; y (3) provee entradas concretas para cada reporte de vulnerabilidad que puede guiar a los desarrolladores a corregir el código [2]. El proceso de la prueba de intrusión puede ser dividido en tres fases. Halfond [2] plantea el esquema 1 para resumirlas: Recolección de información: se selecciona una aplicación web a evaluar y se obtiene información sobre la misma aplicando diversas técnicas, co- mo la exploración automática (automatic scanning), rastreo web (web crawling), e ingeniería social. Generación de ataques: es el desarrollo de ataques a la aplicación bajo evaluación. Esta fase puede ser automatizada al personalizar ataques 2
  • 3. conocidos o al emplear scripts de ataques automatizados. Análisis de respuestas obtenidas: una vez que los ataques han sido efectuados, los evaluadores realizan un análisis de los resultados para determinar si los ataques fueron exitosos y preparan un reporte nal sobre las vulnerabilidades descubiertas. Figura 1: Proceso de las Pruebas de Intrusión 3. Análisis estáticos de las Pruebas de Intrusión Livshits [3] describe algunas pruebas de intrusión aplicando análisis está- ticos para detectar vulnerabilidades, por ejemplo la técnica de Inyección SQL (SQL Injection ), scripts de sitios (cross-site scripting ) y ataques separados de HTTP (HTTP splitting attacks ). Estas técnicas están basadas en análisis escalables y precisos. Los análisis estáticos pueden requerir o no acceso al código fuente de la aplicación. Cuando se accede al código fuente para efectuar las pruebas, lo primero que se lleva a cabo es traducir dicho código a un modelo intermedio [1]. Se realizan varios tipos de análisis y nalmente se presentan los resultados. Estos tres pasos están gracados en 2. La ventaja de este enfoque es que es más rápido que una revisión manual del código fuente, y se puede analizar el código sin ejecutarlo. Su desventaja es que analiza programas que fueron escritos sin considerar la seguridad, y el evaluador puede encontrarse con múltiples paradigmas y tecnologías, lo cual ralentiza el trabajo. En el sistema propuesto por [3], los usuarios de la herramienta describen los patrones de vulnerabilidad de mayor interés en PQL (Program Query 3
  • 4. Figura 2: Proceso estático con acceso al código Language, lenguaje para expresar patrones de eventos u objetos con sinta- xis similar a Java [9]). La herramienta, tal como se lo graca en 3, aplica consultas especicadas por los usuarios a Java bytecode y encuentra todas las posibles coincidencias estadísticamente. Los resultados del análisis son integrados a Eclipse, haciendo que todas las vulnerabilidades sean fáciles de examinar y solucionar como parte del proceso de desarrollo. Su principal ven- taja es que puede encontrar todas las violaciones de seguridad sin ejecutar la aplicación, por lo que el acceso al código no es necesario. Figura 3: Arquitectura de un análisis estático 4. Análisis dinámicos de las Pruebas de Intrusión Tradicionalmente, las herramientas de análisis estático son usadas du- rante el proceso de desarrollo de la aplicación para asegurar la calidad del producto. Por otra parte, los análisis dinámicos se utilizan durante la fase de despliegue, asegurando la protección de la aplicación web en tiempo de eje- cución [7]. Halfond [2] agrega que el enfoque dinámico automatiza el análisis de las respuestas obtenidas, para determinar si los ataques tuvieron éxito. Un modelo propuesto que aplica el análisis dinámico toma los datos de entrada del proceso de evaluación funcional de una aplicación web [7]. Es- te enfoque se basa en los casos de evaluación preparados por el equipo de 4
  • 5. pruebas. Los argumentos que favorecen este análisis son los siguientes: 1. Al enviar patrones de ataques reales, es posible evaluar datos de rutinas de validación para lograr la exactitud, no tratarlos ciegamente. 2. La implementación de análisis dinámicos conoce la aplicación web por dentro, entonces pruebas de intrusión más precisas pueden ser genera- das. Estos son dos ejemplos que ilustran este concepto: Suponiendo que en cierto módulo el parámetro HTTP está vin- culado únicamente con la construcción de la respuesta HTTP, entonces no tiene sentido evaluarlo con otros valores que ataques XSS. Los parámetros POST insertados dentro de una base de datos como claves pueden ser identicados. Luego de este paso, se puede aplicar un algoritmo especial de control para vericarlos. En la Figura 4, se muestra un ejemplo del enfoque dinámico [7]. La prime- ra fase consiste en las siguientes acciones: evaluación de casos preestablecidos, generación de trazas de ejecución y posterior análisis. El objetivo consiste en determinar el conjunto de posibles vulnerabilidades. Esto es logrado por la aproximación de la aplicación web con un conjunto de DDGs interconecta- dos ( del inglés Data Dependency Graph, Grafo de Dependencia de Datos). Luego se aplica el modelo mejorado de Tainted Mode. Figura 4: Esquema general de la integración de Pruebas de Intrusión con el Análisis Dinámico En la segunda fase, varios ataques son enviados a la aplicación web para ser vericados. Se considera que hay vulnerabilidades si patrones maliciosos 5
  • 6. fueron encontrados. El resultado es la lista de vulnerabilidades que fueron validadas con éxito con las pruebas de intrusión y una lista adicional de posibles vulnerabilidades. La posible vulnerabilidad es reportada como un tópico por el modelo mejorado de Tainted Mode que no fue conrmado con las pruebas de intrusión y puede ocurrir por dos causas: puede ser un falso positivo, o puede ser el resultado de una base de datos de patrones maliciosos incompleto que fue utilizado durante las pruebas de intrusión [7]. 5. Herramientas para Pruebas de Intrusión El Departamento de Seguridad Nacional de EEUU arma que muchas organizaciones aplican un enfoque híbrido, entre análisis estáticos y diná- micos. Este factor ha favorecido al desarrollo de estándares para mantener una amplia colección de herramientas para las pruebas de intrusión [4]. El PTES(del inglés Penetration Testing Execution Standard ) detalla las técnicas y herramientas para las pruebas de intrusión [10]. La selección de las mismas depende de la profundidad de las pruebas a ser aplicadas. Se consideran las siguientes categorías: Herramientas requeridas: lo primero es tener conocimiento de los sis- temas operativos más usados, de uso de máquinas virtuales, equipos de radio frecuencia y software dedicado. Las máquinas virtuales facili- tan tener múltiples instancias de sistemas operativos ejecutándose en una estación de trabajo. Dentro del contecxto del software, hay va- rias herramientas disponibles. Algunas más comunes son: metaesploit (conjunto de herramientas de explosión remota), nexpose (scanner de vulnerabilidad), nessus (localizador y documentador de vulnerabilida- des), openvas (scanner de vulnerabilidades), Social-Engineer Toolkit (útil para realizar ataques contra el elemento humano). Recolección de Inteligencia: es la fase en el cual los datos o inteligen- cia son recolectados para guiar las acciones de evaluación. Incluye in- formación sobre empleados,productos, planes, etc. A nivel más amplio, agrega información sobre empresas competidoras dentro del mercado. En este nivel, se aplican los conceptos del OSINT (del inglés Open Source Intelligence ), que busca todos los datos sobre la empresa y sus competidores en fuentes de información públicas. Análisis de vulnerabilidades: se emplea para identicar y evaluar los riesgos de seguridad a partir de las vulnerabilidades detectadas con las 6
  • 7. herramientas anteriores. Se divide en dos áreas: identicación y valida- ción. El segundo busca reducir el número de vulnerabilidades identi- cadas a aquellas que son reales. Para la evaluación de vulnerabilidades se emplean herramientas como el OpenVAS (Open Vulnerability As- sessment System) o el Nessus, aplicable sobre Windows y Linux. Explotación: existen varias técnicas de explotación (fuzzing, sning, etc) y cada una de ellas tiene su propio conjunto de herramientas. Por ejemplo, para la técnica de Fuerza Bruta, que consiste en cambiar nombres de usuarios y contraseñas hasta encontrar una coincidencia, se tiene la herramienta Brutus (Windows), Medusa, NCrack, etc, que ata- can diversos servicios (ejemplos: FTP, HTTP, HTTPS, ICQ, IRC, IMAP, LDAP, MS-SQL, MySQL, NCP, NNTP, Oracle, POP3, PostgreSQL, SSH, etc.) Post-Explotación: son las actividades que se llevan a cabo una vez que el sistema ha sido accedido o comprometido. Las actividades dependen del sistema operativo, pueden ir del rango del whoami hasta obtener listados de cuentas locales y extraer las contraseñas del registro. Reporte: existen dos niveles para reportar los hallazgos, que son eje- cutivo y técnico; el primero tiene un enfoque administrativo-gerencial en el que se explica en vocabulario simple las implicancias de los resul- tados y se sugiere una ruta de acción. En el segundo, se incluyen los datos hallados, junto con muestras de pantallas para dar soporte a los resultados encontrados. Conclusiones Las Pruebas de Intrusión (Penetration Tests ) sirven para detectar vul- nerabilidades en aplicaciones web y ayudan a la toma de decisiones que conciernen a la seguridad de las mismas. Las técnicas estudiadas en este trabajo fueron los análisis estáticos y dinámicos, con una gran variedad de herramientas disponibles para cada fase del proceso de pruebas, cubriendo aspectos técnicos como humanos. Los reportes de resultados de las pruebas son considerados para reducir todo posible la cantidad de puntos débiles de una aplicación web. Por lo tanto, es importante conocer con detalle las técnicas y herramientas de Penetration Testing desde el momento en que se recolectan los datos de la empresa objetivo, hasta el contenido de los reportes a ser entregados. Otra recomendación es hacer un seguimiento periódico de 7
  • 8. las vulnerabilidades más comunes. Por ejemplo, la Fundación OWASP publi- ca cuales son las vulnerabilidades de seguridad más críticas en aplicaciones web [5]. Referencias [1] Jeremiah Grossman and Jacob West. Correlating static and dynamic analysis results. Sitio web; accedido 19-Dic-2011. [2] William G. J. Halfond*, Shauvik Roy Choudhary, and Alessandro Or- so. Improving penetration testing through static and dynamic analysis. Software Testing, Verication and Reliability, 21(3):195 214, Septem- ber 2011. [3] V. Benjamin Livshits and Monica S. Lam. Finding security vulnerabi- lities in java applications with static analysis. SSYM'05 Proceedings of the 14th conference on USENIX Security Symposium, 14, 2005. [4] U.S Department of Homeland Security National Cyber Security Divi- sion (NCSD). Build security in, 2011. Sitio Web; accedido 19-Dic-2011. [5] Fundación OWASP. Las 10 vulnerabilidades de seguridad mas criticas en aplicaciones web, 2007. Sitio Web; accedido 12-Ene-2012. [6] Jiantao Pan. Software reliability, Spring 1999. Sitio Web; accedido 10-Ene-2012. [7] Andrey Petukhov and Dmitry Kozlov. Detecting security vulnerabilities in web applications using dynamic analysis with penetration testing, 2008. Sitio Web; accedido 11-Ene-2012. [8] Hoang Pham. Software reliability, Diciembre 1999. Sitio Web; accedido 10-Ene-2012. [9] Sourceforge. Pql: Program query language. Sitio web; accedido 11-Ene- 2012. [10] Penetration Testing Execution Standard. Penetration testing execution standard, 2011. Sitio Web; accedido 19-Dic-2011. 8