Módulo 5
Encontrar Vulnerabilidades en Aplicaciones Web
Última actualización en: 27 Agosto 2024
Editar esta página en GitHubMódulo 5
Última actualización en: 27 Agosto 2024
Editar esta página en GitHubUna vez que haya aprendido sobre los diferentes tipos de vulnerabilidades, ¡es hora de buscarlas en las aplicaciones web que está probando! Para comenzar y obtener algo de práctica inicial, probará una aplicación web deliberadamente vulnerable..
Después de completar este subtema, los profesionales podrán encontrar vulnerabilidades en un sitio web real, en lugar de comprender las vulnerabilidades individuales de forma aislada.
Una vez completados los subtemas anteriores, debería tener una buena comprensión de vulnerabilidades individuales. Si bien esto puede ser suficiente para guiarlo en la reparación de vulnerabilidades o realizar análisis forenses en una vulneración de una aplicación web, no es suficiente si desea encontrar esas vulnerabilidades en una aplicación web. Si bien las prácticas de laboratorio anteriores se centraron en acertijos que lo desafiaban a activar una vulnerabilidad en una sola entrada, en una aplicación web real la mayoría de las entradas no serán vulnerables a nada. Su desafío será encontrar aquellas entradas raras que sean vulnerables.
Para ayudar en esto, es útil tener una estructura mental que guíe sus pruebas. Esto le servirá para organizar sus pensamientos y notas sobre lo que está probando y también puede servir como lista de verificación. ¡No subestime el poder de una lista de verificación! Las listas de verificación son la razón por la que los viajes aéreos son seguros, y la introducción de listas de verificación en las unidades de cuidados intensivos de los hospitales de un estado de EE. UU. redujo las tasas de infección en 2/3, y en más de un año y medio salvó más de 1.500 vidas. Cualquier tarea compleja y propensa a errores se beneficiará enormemente de una lista de verificación, y probar aplicaciones web es extremadamente complejo y propenso a errores.
Para este subtema, probará una aplicación web deliberadamente vulnerable. Intentará encontrar todas las vulnerabilidades en la aplicación y documentarlas.
Para empezar, necesitarás una aplicación para realizar la prueba. Una (mala) opción sería encontrar algún sitio web aleatorio en Internet e intentar acceder a él. Esta no es una buena idea por dos razones. La primera es que no es ético (incluso si tus intenciones son buenas, ¿qué pasa si dañas accidentalmente el sitio?) y, dependiendo de dónde vivas, probablemente sea ilegal. La segunda es que, especialmente al principio, es imposible saber la diferencia entre un sitio que es seguro y que uno no sea bueno realizando pruebas.
La solución a esto es practicar en un sitio que sea intencionalmente vulnerable. Estos sitios están creados expresamente para que las personas practiquen la búsqueda y explotación de vulnerabilidades. Es ético y legal probarlos (la mayoría se pueden descargar para que usted los pruebe en su propia computadora) y tienen ciertas vulnerabilidades conocidas, para que pueda evaluar su éxito. Para este subtema usaremos la aplicación web vulnerable OWASP Juice Shop .
A continuación, necesitará una metodología para guiar sus pruebas. A medida que adquiera experiencia, probablemente comenzará a desarrollar su propia estructura y procedimientos que funcionen bien para su estilo de trabajo preferido. Sin embargo, al principio necesitarás una para empezar. Para esta ruta de aprendizaje, utilizaremos una metodología escrita por Tanner Prynn, que está en línea con los estándares utilizados por la mayoría de las prácticas profesionales de pruebas de penetración de aplicaciones web. Este documento metodológico es un buen compromiso entre brevedad (compare sus 23 páginas impresas con las 465 de la guía de pruebas OWASP) y exhaustividad. No contiene todas las vulnerabilidades posibles ni tiene una guía completa para probar las vulnerabilidades que cubre, pero debería ser suficiente para permitirle aprovechar la experiencia que tiene.
Además de tener una estructura y una lista de verificación de lo que ha probado, es extremadamente importante que tome notas detalladas. Las notas estructuradas, como una lista de verificación, solo llegan hasta cierto punto. A continuación se muestran algunos ejemplos de cómo utilizar notas de formato libre:
Finalmente, para que su arduo trabajo sea útil para cualquiera, debe documentar las vulnerabilidades que encuentre. Generalmente probarás el sitio web de otra persona y producirá algún tipo de informe, ya sea formal o informal. De todos modos, algunos de los objetivos principales del informe deben ser comunicar:
Por lo general, los informes tendrán una sección introductoria que habla sobre lo que se probó y lo que no, y luego otra sección que contiene detalles de cada vulnerabilidad encontrada. Profundicemos en cada sección.
La sección introductoria normalmente contiene información sobre la aplicación probada. Detalles como la URL de la aplicación, el entorno en el que se probó (por ejemplo, producción versus pre-producción) y el rango de fechas en el que se realizó la prueba son todos importantes, lo que permite a los desarrolladores del sitio web contextualizar las pruebas en función de sus ciclos de desarrollo y lanzamiento.
También es importante incluir información sobre los objetivos de la prueba. Para algunas pruebas, el objetivo podría ser probar únicamente vulnerabilidades que podrían resultar en una toma completa de la infraestructura del servidor web. Para otros, el objetivo podría ser realizar una prueba muy exhaustiva y completa. Para la mayoría de las pruebas de aplicaciones web, la prueba debe completarse dentro de un período de tiempo determinado y el objetivo es identificar vulnerabilidades, tantas y tan impactantes como sea posible en ese tiempo. Incluir esta información cruza la línea entre describir lo que se probó y lo que no se probó.
Finalmente, si se excluyó algún tipo de prueba, alguna partes del sitio no se probaron o si hubo otras restricciones que impidieron que se alcanzaran los objetivos de la prueba, es importante anotarlos en el informe. De esa manera, los propietarios del sitio no estarán al tanto de áreas que podrían contener vulnerabilidades desconocidas.
Los informes de evaluación de seguridad de aplicaciones web normalmente tendrán otra sección que enumera los detalles de cada vulnerabilidad encontrada. Esta es la parte más importante del informe y es importante que sea clara y comprensible. Por lo general, esto toma la forma de una lista para cada vulnerabilidad que incluye cosas como:
A veces se utilizará un método más estructurado para llegar a una calificación de riesgo, como CVSS. Tenga en cuenta que estos métodos son lo suficientemente inflexibles como para generar a veces calificaciones de riesgo que no reflejan la realidad, o lo suficientemente flexibles como para no proporcionar ninguna coherencia significativa. Para obtener más orientación sobre cómo determinar las calificaciones de riesgo, consulte la metodología de calificación de riesgo de OWASP y las pautas de calificación de riesgo para programas de recompensas por errores como Bugcrowd.
Si bien lo anterior representa una cantidad mínima razonable de información para incluir en un informe, está bien (y a menudo es bueno) incluir más. Las empresas profesionales de evaluación de la seguridad a veces elaboran informes que están a disposición del público. Leerlos puede proporcionarle inspiración para sus propios informes, así como información sobre las vulnerabilidades que pueden existir y sus clasificaciones de riesgo. Este GitHub contiene un gran repositorio de informes públicos. Tenga en cuenta que muchos informes públicos no incluyen detalles de vulnerabilidad, pero algunos (como los siguientes) sí lo hacen:
Una última nota sobre los informes: Es muy importante que documente los hallazgos en su informe mientras realiza la prueba. Por lo general, los evaluadores y evaluadoras con poca experiencia querrán seguir realizando pruebas, pensando que será fácil redactar el informe más adelante. Esto es falso. Terminan sus pruebas y luego luchan por completar su informe, y a menudo necesitan regresar y hacer más pruebas para completar su informe. Puede parecer ineficiente dejar de realizar pruebas y escribir una vulnerabilidad en su informe, especialmente si tiene que actualizar esa vulnerabilidad más adelante. Sin embargo, es más eficiente hacer exactamente esto.
La mayor parte de esta ruta de aprendizaje es esta práctica. Aquí reunirá todas las técnicas que aprendió en subtemas anteriores para encontrar vulnerabilidades en una aplicación web real. Deberías esperar que esto te lleve algo de tiempo. Por lo general, a una persona profesional capacitada le tomaría hasta una semana evaluar completamente una aplicación como Juice Shop, y usted aún no es una persona profesional capacitada. Es posible que se encuentre luchando; eso es normal. Resista la tentación de buscar tutoriales u hojas de respuestas, o de consultar las siguientes secciones de esta ruta de aprendizaje. La lucha es una parte natural e importante del proceso de aprendizaje.
No debería esperar encontrar todos los casos de cada vulnerabilidad. Inténtelo, pero no se decepcione si no lo hace. Además, trate de no cuestionarse demasiado acerca de si realizó las pruebas lo suficientemente exhaustivas o no. Es literalmente imposible saber con seguridad que ha encontrado todas las vulnerabilidades en todas las aplicaciones, excepto en las más limitadas.
En su lugar, siga la metodología e intente probar minuciosamente el sitio web. Si tiene cosas que revisar de sus notas, revíselas brevemente, pero no dedique mucho tiempo a esas cosas. Recuerde, esto es sólo una práctica.
Si tiene un mentor o mentora, revise su informe de práctica con él. Probablemente le resultará útil consultar uno o más artículos que contienen vulnerabilidades que otras personas han encontrado, aquí tiene uno. Tenga en cuenta que Juice Shop contiene muchos desafíos. Los desafíos implican principalmente la explotación de vulnerabilidades. Lo mejor que puedes hacer es que tu mentor o mentora te dé pistas sobre las vulnerabilidades que pasaste por alto, por ejemplo, en qué página se encuentran, y luego intenta encontrarlas tú mismo. Si está realmente estancado, pídale a su mentor o mentora que le acompañe a través de la vulnerabilidad.
Si no tiene un mentor o mentora a, puede ser autodidacta para este subtema. Simplemente puede realizar las actividades anteriores. En lugar de recibir una pista de su mentor o mentora, observe brevemente los desafíos e intente descubrir la vulnerabilidad asociada. Nuevamente, si está realmente estancado, existen numerosos tutoriales, tanto escritos como en formato de video.
La Lista de Verificación
Gratis para los primeros artículos de la publicación, los posteriores requieren suscripciónUn artículo sobre la importancia de utilizar listas de verificación en muchas profesiones diferentes.
Directorio de aplicaciones web vulnerables de OWASP
GratisUna colección de aplicaciones web con vulnerabilidades conocidas que se pueden utilizar para probar las habilidades de evaluación web y pruebas de penetración.
Metodología para pruebas de seguridad de aplicaciones web de alta calidad
GratisUna lista completa (y, para citar al autor, con opiniones) de cuestiones que un protector digital debe revisar al evaluar la seguridad de las aplicaciones web.
Samy (gusano)
GratisUn ejemplo de un código malicioso que aprovechó las vulnerabilidades XSS
Una descripción general de CVSS
GratisUn vistazo rápido al sistema común de puntuación de vulnerabilidades, un enfoque estructurado utilizado para calificar la gravedad de las vulnerabilidades.
Metodología de calificación de riesgo OWASP
GratisHay muchas formas diferentes de calificar los riesgos de vulnerabilidades y exploits, y OWASP crea una de ellas, que se describe aquí en detalle.
Taxonomía de vulnerabilidad de Bugcrowd
GratisOtra forma de rastrear riesgos de vulnerabilidades, esta vez por Bugcrowd
Informes públicos de pruebas de penetración
GratisUna lista pública de informes de pruebas de penetración elaborados.
¡Felicidades por terminar Módulo 5!
Marque la casilla para confirmar su finalización y continúe al siguiente módulo.
Marca el módulo actual como completado y guarda el progreso para el usuario.
Has completado todos los módulos en este camino de aprendizaje.