Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Métodos para la Construcción de Software Fiable                           Priscill Smilce Orue          Escuela Técnica Su...
nes de software críticas aumentan en tamaño y complejidad, la abilidad delsoftware se vuelve más importante. La abilidad d...
conocidos o al emplear scripts de ataques automatizados.      Análisis de respuestas obtenidas: una vez que los ataques ha...
Figura 2: Proceso estático con acceso al códigoLanguage, lenguaje para expresar patrones de eventos u objetos con sinta-xi...
pruebas. Los argumentos que favorecen este análisis son los siguientes:   1. Al enviar patrones de ataques reales, es posi...
fueron encontrados. El resultado es la lista de vulnerabilidades que fueronvalidadas con éxito con las pruebas de intrusió...
herramientas anteriores. Se divide en dos áreas: identicación y valida-      ción. El segundo busca reducir el número de v...
las vulnerabilidades más comunes. Por ejemplo, la Fundación OWASP publi-ca cuales son las vulnerabilidades de seguridad má...
Upcoming SlideShare
Loading in …5
×

Análisis estáticos y dinámicos en la aplicación de pruebas de intrusión (Penetration Tests)

2,627 views

Published on

La ingeniería de software busca diseñar, desarrollar e implementar herramientas cada vez más fiables, 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ífico de tiempo dentro de un entorno delimitado [6]. Dentro del contexto 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 aplicació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.

  • Be the first to comment

  • Be the first to like this

Análisis estáticos y dinámicos en la aplicación de pruebas de intrusión (Penetration Tests)

  1. 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 2012Introducció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 estemotivo que la ANSI denió el concepto de Fiabilidad del Software como: laprobabilidad de una operación libre de errores del software para un periodoespecí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 evaluadoresdescubren vulnerabilidades por medio de la simulación de ataques a una apli-cación web determinada. Tales ataques se basan en técnicas automatizadasque recolectan información sobre la web objetivo y analiza las respuestas dela aplicación para determinar si los ataques fueron exitosos [2]. Este trabajo describe aspectos relacionados a conceptos de abilidad delsoftware, pruebas de penetración y análisis estáticos y dinámicos empleadosen pruebas de intrusión a aplicaciones web, como mecanismos de verica-ción y comprobación de la seguridad. Además, se presentan herramientasasociadas al tema, de manera a relacionar la teoría con la práctica. Parala realización de este trabajo, la composición se llevó a cabo con el editor AL TEXy se consultaron diversas fuentes secundarias, con el n de ofrecer lainformación mas actualizada posible.1. Fiabilidad del software A medida que la funcionalidad de las operaciones computacionales sevuelven más esenciales y complicadas en la sociedad moderna y las aplicacio- 1
  2. 2. nes de software críticas aumentan en tamaño y complejidad, la abilidad delsoftware se vuelve más importante. La abilidad del software es un atributode la calidad del software, junto a la funcionalidad, usabilidad, rendimiento,facilidad de mantenimiento, capacidad y documentación [6]. En los últimosaños, los costos del desarrollo de software y los costos de errores en el mismorepresentan 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 durantelos últimos 25 años, y más de 50 modelos estadísticos han sido propuestospara estimar la abilidad del software. Este campo busca sistemáticamentereducir o eliminar las fallas de sistemas que puedan afectar al rendimientode las aplicaciones [8].2. Pruebas de Intrusión ( Penetration Tests ) Las aplicaciones Web son usadas para proveer funcionalidad que permitea las empresas construir y mantener relaciones con sus clientes. La informa-ción almacenada por las aplicaciones web es por lo general condencial, ysi es obtenida para usos malintencionados, su exposición podría resultar enpé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 ). Estaspruebas identican vulnerabilidades en sitios web por medio de las simula-ciones de ataques. Aunque las pruebas de intrusión no pueden garantizar quetodas las vulnerabilidades sean identicadas en una aplicación, la misma espopular entre los desarrolladores porque: (1) generalmente tiene una bajatasa de reportes de falsa vulnerabilidad debido a que las descubre explotán-dolas; (2) verica las aplicaciones dentro de un contexto, lo cual permite eldescubrimiento de vulnerabilidades que surgen debido al entorno desplegadode la aplicación web; y (3) provee entradas concretas para cada reporte devulnerabilidad 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. 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ón3. 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 separadosde HTTP (HTTP splitting attacks ). Estas técnicas están basadas en análisisescalables y precisos. Los análisis estáticos pueden requerir o no acceso alcódigo fuente de la aplicación. Cuando se accede al código fuente para efectuar las pruebas, lo primeroque 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 esmás rápido que una revisión manual del código fuente, y se puede analizarel código sin ejecutarlo. Su desventaja es que analiza programas que fueronescritos sin considerar la seguridad, y el evaluador puede encontrarse conmúltiples paradigmas y tecnologías, lo cual ralentiza el trabajo. En el sistema propuesto por [3], los usuarios de la herramienta describenlos patrones de vulnerabilidad de mayor interés en PQL (Program Query 3
  4. 4. Figura 2: Proceso estático con acceso al códigoLanguage, lenguaje para expresar patrones de eventos u objetos con sinta-xis similar a Java [9]). La herramienta, tal como se lo graca en 3, aplicaconsultas especicadas por los usuarios a Java bytecode y encuentra todaslas posibles coincidencias estadísticamente. Los resultados del análisis sonintegrados a Eclipse, haciendo que todas las vulnerabilidades sean fáciles deexaminar y solucionar como parte del proceso de desarrollo. Su principal ven-taja es que puede encontrar todas las violaciones de seguridad sin ejecutarla aplicación, por lo que el acceso al código no es necesario. Figura 3: Arquitectura de un análisis estático4. 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 delproducto. Por otra parte, los análisis dinámicos se utilizan durante la fase dedespliegue, 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álisisde las respuestas obtenidas, para determinar si los ataques tuvieron éxito. Un modelo propuesto que aplica el análisis dinámico toma los datos deentrada 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. 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 endeterminar el conjunto de posibles vulnerabilidades. Esto es logrado por laaproximació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 elAnálisis Dinámico En la segunda fase, varios ataques son enviados a la aplicación web paraser vericados. Se considera que hay vulnerabilidades si patrones maliciosos 5
  6. 6. fueron encontrados. El resultado es la lista de vulnerabilidades que fueronvalidadas con éxito con las pruebas de intrusión y una lista adicional deposibles vulnerabilidades. La posible vulnerabilidad es reportada como untópico por el modelo mejorado de Tainted Mode que no fue conrmado conlas pruebas de intrusión y puede ocurrir por dos causas: puede ser un falsopositivo, o puede ser el resultado de una base de datos de patrones maliciososincompleto 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 muchasorganizaciones aplican un enfoque híbrido, entre análisis estáticos y diná-micos. Este factor ha favorecido al desarrollo de estándares para manteneruna amplia colección de herramientas para las pruebas de intrusión [4]. ElPTES(del inglés Penetration Testing Execution Standard ) detalla las técnicasy herramientas para las pruebas de intrusión [10]. La selección de las mismasdepende de la profundidad de las pruebas a ser aplicadas. Se consideran lassiguientes 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. 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 queconciernen a la seguridad de las mismas. Las técnicas estudiadas en estetrabajo fueron los análisis estáticos y dinámicos, con una gran variedad deherramientas disponibles para cada fase del proceso de pruebas, cubriendoaspectos técnicos como humanos. Los reportes de resultados de las pruebasson considerados para reducir todo posible la cantidad de puntos débilesde una aplicación web. Por lo tanto, es importante conocer con detalle lastécnicas y herramientas de Penetration Testing desde el momento en que serecolectan los datos de la empresa objetivo, hasta el contenido de los reportesa ser entregados. Otra recomendación es hacer un seguimiento periódico de 7
  8. 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 aplicacionesweb [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. SSYM05 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

×