Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Bienvenido a Seguridad de las Aplicaciones Web: Explotación y Contramedidas para Aplicaciones Web Modernas. En este prefacio, hablaremos de los fundamentos necesarios para leer y comprender con éxito el contenido de este libro. También hablaremos de los objetivos de aprendizaje e intentaremos construir un perfil de lector arquetípico para que tú (el lector) puedas entender si te beneficiarás de este libro o no.

Considera la posibilidad de completar este prefacio antes de pasar al Capítulo 1 si no sabes si este libro es para ti, o si no estás seguro de que tus habilidades actuales estén preparadas para el contenido técnico de los capítulos siguientes.

Conocimientos previos y objetivos de aprendizaje

Este es un libro que no sólo te ayudará a aprender a defender tu aplicación web contra los hackers, sino que también te guiará a través de los pasos que dan los hackers para investigar y entrar en una aplicación web.

A lo largo de este libro discutiremos muchas técnicas que los hackers utilizan hoy en día para entrar en aplicaciones web alojadas por empresas, gobiernos y, ocasionalmente, incluso por aficionados.

Tras una investigación suficiente sobre las técnicas mencionadas anteriormente, iniciamos un debate sobre cómo asegurar las aplicaciones web contra estos hackers.

Al hacerlo, descubrirás nuevas formas de pensar sobre la arquitectura de las aplicaciones. También aprenderás a integrar las buenas prácticas de seguridad en una organización de ingeniería. Por último, evaluaremos una serie de técnicas para defendernos de los tipos de ataques más comunes y peligrosos que se producen hoy en día contra las aplicaciones web.

Después de completar Seguridad de Aplicaciones Web tendrás los conocimientos necesarios para realizar técnicas de reconocimiento contra aplicaciones a las que no tengas acceso a nivel de código.

También serás capaz de identificar vectores de amenaza y vulnerabilidades en aplicaciones web, y elaborar cargas útiles diseñadas para comprometer los datos de la aplicación, interrumpir el flujo de ejecución o interferir en la función prevista de una aplicación web.

Con estas habilidades en la mano, y los conocimientos adquiridos en la sección final sobre la seguridad de las aplicaciones web, serás capaz de identificar las áreas de riesgo de la base de código de una aplicación web y comprenderás cómo escribir código para defenderte de ataques que, de otro modo, pondrían en peligro tu aplicación y a sus usuarios.

Nota

El contenido de este libro aumenta progresivamente, de modo que si decides avanzar y te das cuenta de que te falta información esencial previa, sólo tienes que retroceder unos capítulos para ponerte al día.

Los temas que no se definan como requisito previo en este capítulo no se presentarán en el libro sin una explicación previa.

Antecedentes sugeridos

La audiencia potencial de este libro es bastante amplia, pero el estilo en que está escrito y la forma en que están estructurados los ejemplos deberían hacerlo ideal para cualquier persona con una formación de nivel intermedio en ingeniería de software.

¿Qué implica una "formación intermedia en ingeniería de software", te preguntarás? La respuesta a esa pregunta variará considerablemente de una persona a otra. En lo que respecta a cualquier persona altamente técnica, este libro podría requerir en realidad sólo una "formación de nivel principiante en ingeniería de software". En otras palabras, un administrador de sistemas con experiencia previa en desarrollo web y/o scripting (si es suficiente) podría leer razonablemente este libro y entender todos los ejemplos. Dicho esto, este libro incluye ejemplos que requieren conocimientos de codificación tanto del cliente como del servidor. Conocer uno u otro no es suficiente para comprender en profundidad estos ejemplos.

Este libro también incluye discusiones sobre redes cliente/servidor básicas sobre HTTP. Además, las conversaciones sobre arquitectura de software aparecen en capítulos posteriores, cuando exploramos formas de integrar software propio con software de terceros, mitigando al mismo tiempo los riesgos de seguridad.

Como en este libro se tratan tantos temas, he optado por definir el nivel de habilidad necesario para completarlo con éxito como "intermedio" frente a "principiante", porque este libro no sería apropiado para quienes no tuvieran ninguna experiencia o conocimiento en la escritura de aplicaciones de software con calidad de producción.

Competencias mínimas requeridas

En este libro, una "formación de nivel intermedio en ingeniería de software" implica lo siguiente:

  • Puedes escribir programas CRUD (crear, leer, actualizar, borrar) básicos en al menos un lenguaje de programación.

  • Puedes escribir código que se ejecute en algún servidor (como código backend).

  • Puedes escribir al menos algo de código que se ejecute en un navegador (código frontend, normalmente JavaScript).

  • Sabes lo que es HTTP, y puedes hacer, o al menos leer, llamadas GET/POST sobre HTTP en algún lenguaje o framework.

  • Puedes escribir, o al menos leer y comprender, aplicaciones que utilicen código tanto del lado del servidor como del lado del cliente, y comunicarse entre ambos a través de HTTP.

  • Conoces al menos una base de datos popular (MySql, MongoDB, etc.).

Estas habilidades representan los criterios mínimos para seguir con éxito los ejemplos de este libro. Cualquier experiencia que tengas más allá de estos puntos es una ventaja y hará que este libro te resulte mucho más fácil de consumir y te aporte valor educativo.

Nota

Aunque la mayoría de los ejemplos de código de este libro están escritos en JavaScript por simplicidad (para que el código del cliente y del servidor estén en el mismo lenguaje), la mayoría de los ejemplos pueden aplicarse a otros lenguajes con poco esfuerzo.

He hecho todo lo posible por organizar los temas de este libro de modo que aumenten en dificultad a un ritmo sostenible. También he intentado ser lo más prolijo posible en mis explicaciones. Esto significa que siempre que hablo de una nueva tecnología, empiezo con una breve introducción y una visión general de cómo funciona.

¿Quién se beneficia más de la lectura de este libro?

Dejando a un lado los requisitos previos, creo que es importante aclarar quién se beneficiará más de este libro, por lo que me gustaría explicar a quién va dirigido. Para ello, he estructurado esta sección en función de los objetivos de aprendizaje y los intereses profesionales. Si no encajas en ninguna de las siguientes categorías, aún podrás aprender muchos conceptos valiosos o al menos interesantes de este libro.

Este libro se escribió para resistir el paso del tiempo, así que si más adelante decides dedicarte a una de las profesiones a las que va dirigido, todos los conocimientos de este libro deberían seguir siendo relevantes.

Ingenieros de software y desarrolladores de aplicaciones web

Creo que sería justo decir que el público principal de este libro es un ingeniero de software o desarrollador de aplicaciones web que se encuentre al principio o a mitad de su carrera. Idealmente, este lector está interesado en adquirir un conocimiento profundo de las técnicas ofensivas utilizadas por los hackers, o de las técnicas defensivas utilizadas por los ingenieros de seguridad para defenderse de los hackers.

A menudo, los títulos "desarrollador de aplicaciones web" e "ingeniero de software" son intercambiables, lo que puede dar lugar a cierta confusión, teniendo en cuenta que utilizo ambos a lo largo de los próximos capítulos. Empecemos con una aclaración.

Ingenieros de software

En mi opinión, y en aras de la claridad, cuando utilizo el término "ingeniero de software", me refiero a un generalista capaz de escribir software que funcione en diversas plataformas. Los ingenieros de software se beneficiarán de este libro de varias maneras.

En primer lugar, gran parte de los conocimientos contenidos en este libro son transferibles con un mínimo esfuerzo a software que no se ejecuta en la web. También es transferible a otros tipos de aplicaciones en red, siendo las aplicaciones móviles nativas las primeras que me vienen a la mente.

Además, varios exploits tratados en este libro se aprovechan de integraciones del lado del servidor que implican la comunicación con una aplicación web y otro componente de software. Como resultado, es seguro considerar cualquier software que interactúe con una aplicación web como un vector de amenaza potencial (bases de datos, CRM, contabilidad, herramientas de registro, etc.).

Desarrolladores de aplicaciones web

Por otro lado, un "desarrollador de aplicaciones web", según mi definición, es alguien altamente especializado en escribir software que se ejecuta en la web. A menudo se subdividen en desarrolladores frontend, backend y full stack.

Históricamente, muchos ataques contra aplicaciones web se han dirigido a vulnerabilidades del lado del servidor. Como resultado, creo que el caso de uso de este libro para un desarrollador backend o full stack es muy transparente y fácil de entender.

También creo que este libro debería ser valioso para otros tipos de desarrolladores de aplicaciones web, incluidos los que no escriben código que se ejecuta en un servidor, sino que se ejecuta en un navegador web (desarrolladores frontend/JavaScript).

Como explicaré en los próximos capítulos, muchas de las formas en que los hackers se aprovechan de las aplicaciones web actuales se originan a través de código malicioso que se ejecuta en el navegador. Algunos hackers incluso aprovechan el DOM del navegador o las hojas de estilo CSS para atacar a los usuarios de una aplicación.

Estos puntos sugieren que también es importante que los desarrolladores frontales que no escriban código del lado del servidor sean conscientes de los riesgos de seguridad que su código puede exponer y de cómo mitigarlos.

Objetivos generales de aprendizaje

Este libro de debería ser un recurso fantástico para cualquiera de los precedentes que busquen hacer un cambio de carrera hacia un papel más orientado a la seguridad. También será valioso para quienes deseen aprender a reforzar las defensas de su propio código o del código que mantiene su organización.

Si quieres defender tu aplicación contra exploits muy específicos, este libro también es para ti. Este libro sigue una estructura única, que debería permitirte utilizarlo como referencia de seguridad sin tener que leer ninguno de los capítulos que implican piratería informática. Eso, por supuesto, si ése es tu único objetivo al comprar este libro.

Yo sugeriría leerlo de principio a fin para obtener la mejor experiencia de aprendizaje, pero si sólo buscas una referencia sobre cómo protegerse frente a tipos concretos de hackeos, simplemente abre el libro por la mitad y empieza a leer.

Ingenieros de seguridad, Pen Testers y Bug Bounty Hunters

Como resultado de cómo está estructurado este libro, también puede utilizarse como recurso para pruebas de penetración, caza de recompensas por fallos y cualquier otro tipo de trabajo de seguridad a nivel de aplicación. Si este tipo de trabajo es relevante o interesante para ti, entonces puede que la primera mitad del libro sea más de tu agrado.

Este libro profundizará en cómo funcionan los exploits, tanto a nivel de código como de arquitectura, en lugar de limitarse a ejecutar conocidos scripts de software de código abierto (OSS) o hacer uso de software de automatización de la seguridad de pago. Por ello, hay un segundo público para este libro: ingenieros de seguridad de software, ingenieros de seguridad informática, ingenieros de seguridad de redes, probadores de penetración y cazadores de recompensas por fallos.

Consejo

¿Quieres ganar un poco de dinero extra mientras desarrollas tus habilidades como hacker? Lee este libro y luego apúntate a uno de los programas de recompensas por fallos de que se mencionan en la Parte III. Es una forma estupenda de ayudar a otras empresas a mejorar la seguridad de sus productos mientras desarrollas tus habilidades de hacker y ganas algo de dinero adicional.

Este libro será muy beneficioso para los actuales profesionales de la seguridad que entienden conceptualmente cómo funcionan muchos ataques, pero que desearían una inmersión profunda en los sistemas y el código que hay detrás de una herramienta o script.

En el mundo de la seguridad actual, es habitual que los probadores de penetración operen utilizando una amplia gama de scripts de exploits preconstruidos. Esto ha dado lugar a la creación de muchas herramientas de pago y de código abierto que automatizan ataques clásicos, y ataques que pueden ejecutarse fácilmente sin un conocimiento profundo de la arquitectura de una aplicación o de la lógica dentro de un bloque de código concreto.

Los exploits y contramedidas contenidos en este libro se presentan sin utilizar ninguna herramienta especializada. En su lugar, nos basaremos en nuestros propios scripts, peticiones de red y las herramientas que vienen de serie en los sistemas operativos basados en Unix, así como en las herramientas estándar presentes en los tres principales navegadores web (Chrome, Firefox y Edge).

Con esto no quiero restar valor a las herramientas de seguridad especializadas. De hecho, creo que muchas de ellas son excepcionales y facilitan enormemente la realización de pruebas de penetración profesionales y de alta calidad.

En cambio, la razón por la que este libro no contiene el uso de herramientas de seguridad especializadas es para que podamos centrarnos en las partes más importantes de encontrar una vulnerabilidad, desarrollar un exploit, priorizar los datos a comprometer y asegurarnos de que puedes defenderte contra todo lo anterior. Como resultado, creo que al final de este libro estarás preparado para salir a la naturaleza y encontrar nuevos tipos de vulnerabilidades, desarrollar exploits contra sistemas que nunca antes han sido explotados y endurecer los sistemas más complejos contra los atacantes más persistentes.

¿Cómo está organizado este libro?

En te darás cuenta enseguida de que este libro está estructurado de forma bastante diferente a la mayoría de los libros de tecnología que existen. Esto es intencionado. Este libro está estructurado a propósito para que haya una proporción casi 1:1 de capítulos sobre hacking (ataque) y seguridad (defensa).

Tras comenzar nuestra aventura con una pequeña lección de historia y una exploración de la tecnología, las herramientas y los exploits del pasado, pasaremos a nuestro tema principal: exploits y contramedidas para las aplicaciones web modernas. De ahí el subtítulo de este libro.

El contenido principal de este libro está estructurado en tres partes principales, y cada parte contiene muchos capítulos individuales que abarcan una amplia gama de temas. Lo ideal es que recorras este libro de forma lineal, desde la primera página hasta la última. Leer este libro en ese orden te proporcionará el mayor aprendizaje posible. Como ya se ha mencionado, este libro también puede utilizarse como referencia de hacking o como referencia de ingeniería de seguridad, centrándose en la primera o en la segunda mitad, respectivamente.

A estas alturas ya deberías entender cómo navegar por el libro, así que vamos a repasar las tres partes principales de este libro para que podamos comprender la importancia de cada una.

Recon

La primera parte de este libro es "Recon", donde evaluamos formas de obtener información sobre una aplicación web sin intentar necesariamente hackearla.

En "Recon", tratamos una serie de tecnologías y conceptos importantes que es esencial dominar si quieres convertirte en hacker. Estos temas también serán importantes para cualquiera que desee bloquear una aplicación existente, porque la información expuesta por muchas de estas técnicas puede mitigarse con una planificación adecuada.

He tenido la oportunidad de trabajar con los que creo que son algunos de los mejores probadores de penetración y cazadores de recompensas por fallos del mundo. A través de mis conversaciones con ellos y mi análisis de cómo hacen su trabajo, me he dado cuenta de que este tema es mucho más importante de lo que muchos otros libros lo pintan.

¿Por qué es importante el reconocimiento?

Me atrevería a decir que para muchos de los mejores cazadores de recompensas por fallos del mundo, la capacidad de reconocimiento a nivel de experto es lo que diferencia a estos "grandes" hackers de los simplemente "buenos".

En otras palabras, una cosa es tener un coche rápido (en este caso, quizás saber construir hazañas), pero sin conocer el camino más eficiente hacia la meta, puede que no ganes la carrera. Un coche más lento podría llegar a la meta en menos tiempo que uno rápido si se toma un camino más eficiente.

Si las analogías basadas en la fantasía te resultan más familiares, podrías pensar en las habilidades de reconocimiento como algo parecido a un pícaro en un juego de rol. En nuestro caso, el trabajo del pícaro no consiste en hacer mucho daño, sino en explorar por delante del grupo y volver con información. Es el tipo que ayuda a alinear los disparos y averigua qué batallas tendrán mayores recompensas.

La última parte en particular es sumamente valiosa, porque es probable que se puedan registrar muchos tipos de ataques contra objetivos bien defendidos. Esto significa que puede que sólo tengas una oportunidad de explotar un determinado agujero de software antes de que se encuentre y se cierre.

Podemos concluir con seguridad que el segundo uso del reconocimiento es averiguar cómo priorizar tus hazañas.

Si estás interesado en una carrera como probador de penetración o cazador de recompensas por fallos, esta parte del libro será de suma importancia para ti. Esto se debe en gran medida a que en el mundo de la caza de recompensas por fallos, y en menor medida de las pruebas de penetración, las pruebas se realizan al estilo "caja negra". Las pruebas de "caja negra" son un estilo de pruebas en el que el probador no conoce la estructura ni el código de una aplicación, y por tanto debe construir su propia comprensión de la aplicación mediante un análisis y una investigación cuidadosos.

Ofensa

La segunda parte de este libro es "Ofensa". Aquí el enfoque del libro pasa del reconocimiento y la recopilación de datos al análisis del código y las peticiones de red. Luego, con estos conocimientos, intentaremos aprovecharnos de las aplicaciones web inseguras o mal configuradas.

Advertencia

Un número de capítulos de este libro explican técnicas de hacking reales utilizadas por hackers malintencionados de sombrero negro en el mundo real. Es imprescindible que, si vas a probar técnicas de este libro, lo hagas sólo con una aplicación que sea de tu propiedad o con la que tengas permiso explícito por escrito para probar exploits.

El uso inadecuado de las técnicas de pirateo informático presentadas en este libro podría acarrear multas, penas de cárcel, etc., dependiendo de las leyes de tu país sobre la actividad de pirateo informático.

En la Parte II, aprenderemos a construir e implementar exploits. Estos exploits están diseñados para robar datos o cambiar por la fuerza el comportamiento de una aplicación.

Esta parte del libro se basa en los conocimientos de la Parte I, "Reconocimiento". Utilizando nuestras habilidades de reconocimiento previamente adquiridas junto con las habilidades de pirateo recién adquiridas, comenzaremos a tomar el control y atacar aplicaciones web de demostración.

La Parte II está organizada explotación por explotación. Cada capítulo explica en detalle un tipo diferente de explotación.

Estos capítulos comienzan con una explicación del exploit en sí para que puedas entender cómo funciona mecánicamente. A continuación, discutimos cómo buscar vulnerabilidades en las que se pueda aplicar este exploit. Por último, creamos una carga útil específica para la aplicación de demostración que estamos explotando. A continuación, desplegamos la carga útil y observamos los resultados.

Vulnerabilidades consideradas en profundidad

Cross-Site Scripting (XSS), uno de los primeros exploits en los que profundizamos, es un tipo de ataque que funciona contra una amplia gama de aplicaciones web, pero que también puede aplicarse a otras aplicaciones (por ejemplo, aplicaciones móviles, juegos flash/ActionScript, etc.). Este ataque concreto consiste en escribir código malicioso en tu propia máquina y, a continuación, aprovechar los deficientes mecanismos de filtrado de una aplicación para permitir que tu script se ejecute en la máquina de otro usuario.

Cuando hablemos de un exploit como un ataque XSS, empezaremos con una aplicación vulnerable. Esta aplicación de demostración será sencilla y directa, idealmente sólo unos pocos párrafos de código. A partir de esta base, escribiremos un bloque de código que se inyectará como carga útil en la aplicación de demostración, que se aprovechará de un hipotético usuario del otro lado.

Parece sencillo, ¿verdad? Y debería serlo. Sin defensas, es fácil entrar en la mayoría de los sistemas de software. Como resultado, con un exploit como el XSS, en el que hay muchas defensas, profundizaremos progresivamente en los detalles de la escritura e implementación de un ataque.

Al principio intentaremos derribar las defensas rutinarias y, con el tiempo, pasaremos a eludir mecanismos de defensa más avanzados. Recuerda, sólo porque alguien haya construido un muro para defender su base de código no significa que no puedas pasar por encima o por debajo de él. Aquí es donde usaremos algo de creatividad y encontraremos soluciones únicas e interesantes.

La Parte II es importante porque comprender la mentalidad de un hacker suele ser vital para diseñar bases de código seguras. Es excepcionalmente importante para cualquier lector interesado en la piratería informática, las pruebas de penetración o la caza de recompensas por errores.

Defensa

La tercera y última parte de este libro, "Defensa", trata sobre cómo asegurar tu propio código contra los hackers. En la Parte III, volvemos a examinar todos los tipos de exploits que tratamos en la Parte II e intentamos considerarlos de nuevo con un punto de vista completamente opuesto. Esta vez, no nos centraremos en irrumpir en los sistemas de software, sino que intentaremos evitar o mitigar la probabilidad de que un hacker pueda irrumpir en nuestros sistemas.

En la Parte III aprenderás a protegerte contra los exploits específicos de la Parte II, además de aprender protecciones generales que asegurarán tu código base contra una amplia variedad de ataques. Estas protecciones generales van desde metodologías de ingeniería "seguras por defecto" hasta buenas prácticas de codificación segura que un equipo de ingeniería puede aplicar fácilmente mediante pruebas y otras herramientas automatizadas sencillas (como un linter).

Además de aprender a escribir código más seguro, también aprenderás una serie de trucos cada vez más valiosos para atrapar a los hackers in fraganti y mejorar la actitud de tu organización hacia la seguridad del software.

La mayoría de los capítulos de la Parte III se han reestructurado de forma similar a los capítulos sobre piratería informática de la Parte II. Comenzamos con una visión general de la tecnología y las habilidades necesarias para empezar a preparar una defensa contra un tipo concreto de ataque.

Inicialmente prepararemos una defensa de nivel básico, que debería ayudar a mitigar los ataques, pero que no siempre podrá rechazar a los hackers más persistentes. Finalmente, mejoraremos nuestras defensas hasta el punto en que se detengan la mayoría, si no todos, los intentos de pirateo.

En este punto, la estructura de la Parte III empieza a diferir de la de la Parte II, ya que debatimos las compensaciones que se derivan de mejorar la seguridad de las aplicaciones. En términos generales, todas las medidas para mejorar la seguridad tendrán algún tipo de compensación fuera de la seguridad. Puede que no te corresponda hacer sugerencias sobre qué nivel de riesgo debe aceptarse a costa de tu producto, pero debes ser consciente de las compensaciones que se hacen.

A menudo, estas compensaciones vienen en forma de rendimiento de la aplicación. Cuanto más te esfuerces en leer y desinfectar los datos, más operaciones se realizan fuera de la funcionalidad estándar de tu aplicación. Por tanto, una función segura suele requerir más recursos informáticos que una función insegura.

Con más operaciones también viene más código, lo que significa más mantenimiento, pruebas y tiempo de ingeniería. Esta sobrecarga de desarrollo para la seguridad suele venir también en forma de sobrecarga de registro o monitoreo.

Por último, algunas precauciones de seguridad tendrán el coste de reducir la usabilidad.

Evaluación de compensaciones

Un ejemplo muy sencillo de este proceso de comparar las ventajas de la seguridad con su coste, en términos de usabilidad y rendimiento, es un formulario de inicio de sesión. Si se muestra al usuario un mensaje de error por un nombre de usuario no válido al intentar iniciar sesión, a un pirata informático le resultará mucho más fácil forzar combinaciones de nombre de usuario y contraseña. Esto ocurre porque el hacker ya no tiene que encontrar una lista de nombres de usuario de inicio de sesión activos, ya que la aplicación confirmará una cuenta de usuario. El hacker sólo tiene que forzar con éxito unos cuantos nombres de usuario, que pueden confirmarse y registrarse para posteriores intentos de intrusión.

Además, el hacker sólo necesita forzar las contraseñas en lugar de las combinaciones de nombre de usuario y contraseña, lo que implica una complejidad matemática significativamente menor y requiere mucho menos tiempo y recursos.

Además, si la aplicación utiliza un esquema de correo electrónico y contraseña para el inicio de sesión en lugar de un esquema de nombre de usuario y contraseña, entonces tenemos otro problema. Un hacker puede utilizar este formulario de inicio de sesión para encontrar direcciones de correo electrónico válidas que pueda vender con fines de marketing o spam. Aunque se tomen precauciones para evitar la fuerza bruta, unas entradas cuidadosamente elaboradas (por ejemplo, first.last@company.com, firstlast@company.com, firstl@company.com) pueden permitir al pirata informático aplicar ingeniería inversa al esquema utilizado para las cuentas de correo electrónico de la empresa y localizar las cuentas válidas de ejecutivos para ventas o personas con criterios de acceso importantes para el phishing.

Como resultado, a menudo se considera una buena práctica proporcionar mensajes de error más genéricos al usuario. Por supuesto, este cambio entra en conflicto con la experiencia del usuario, porque unos mensajes de error más específicos son sin duda ideales para la usabilidad de tu aplicación.

Este es un buen ejemplo de una compensación que puede hacerse para mejorar la seguridad de la aplicación, pero a costa de reducir la usabilidad. Esto debería darte una idea del tipo de compensaciones que se tratan en la Parte III de este libro.

Esta parte del libro es muy importante para cualquier ingeniero de seguridad que quiera mejorar sus conocimientos, o para cualquier ingeniero de software que esté pensando en cambiar a un puesto de ingeniería de seguridad. La información que aquí se presenta ayudará a diseñar y escribir aplicaciones más seguras.

Como en la Parte II, comprender cómo se puede mejorar la seguridad de una aplicación es un activo valioso para cualquier tipo de hacker. Esto se debe a que, mientras que las defensas rutinarias a menudo pueden eludirse fácilmente, las defensas más complejas requieren una comprensión y unos conocimientos más profundos para eludirlas. Esta es una prueba más de por qué sugiero leer el libro de principio a fin.

Aunque algunas partes de este libro pueden proporcionarte un aprendizaje más valioso que otras, dependiendo de tus objetivos, dudo que ninguna de ellas sea en vano. La formación cruzada de este tipo es especialmente valiosa, ya que cada parte del libro no es más que otra perspectiva del mismo rompecabezas.

Lengua y terminología

Probablemente ya se haya hecho evidente que este libro pretende enseñarte una serie de habilidades muy útiles, pero también muy raras y particulares. Aunque estas habilidades son cada vez más valiosas y mejorarán mucho tus posibilidades de venta en el mercado laboral, también son bastante difíciles de aprender, ya que requieren concentración, aptitud y la capacidad de adquirir un modelo mental totalmente nuevo que defina tu forma de ver las aplicaciones web.

Para comunicar correctamente estas nuevas habilidades, necesitamos establecer un lenguaje común. Esto es importante para ayudarme a guiarte por el libro sin confusiones, y también para ayudarte a expresar tus nuevas ideas de un modo que sea coherente en todas las organizaciones de seguridad e ingeniería.

Cada vez que introduzco un nuevo término o frase, hago todo lo posible por explicarlo. En particular, cuando se trata de acrónimos, deletreo primero el acrónimo antes de utilizarlo por sí mismo. Lo has visto antes, cuando he explicado el término Cross-Site Scripting (XSS).

Aparte de eso, he hecho todo lo posible para determinar qué términos y frases podrían necesitar una explicación. Los he recopilado y organizado en las siguientes tablas (Tablas P-1 a P-3).

Si alguna vez te topas con un término o una frase que no entiendes del todo, no dudes en volver a este capítulo (¡marcalo!) y ver si aparece aquí. Si no es así, no dudes en enviar un correo electrónico a mi editor, y tal vez podamos incluirlo en la próxima edición del libro, ¡si tengo la suerte de vender suficientes ejemplares como para justificar una continuación!

Tabla P-1. Ocupación
Ocupación Descripción

Hacker

Alguien que irrumpe en los sistemas, normalmente para filtrar datos o hacer que el sistema funcione de un modo que sus desarrolladores no pretendían originalmente.

Sombrero blanco

A veces se denomina "hacker ético" a quien utiliza técnicas de hacking para ayudar a las organizaciones a mejorar la seguridad.

Sombrero negro

El hacker arquetípico: el que utiliza técnicas de pirateo para entrar en sistemas con el fin de obtener beneficios, provocar el caos o satisfacer sus propios objetivos e intereses.

Sombrero gris

Un hacker de a medio camino entre el sombrero blanco y el sombrero negro; ocasionalmente, estos hackers infringen las leyes, como intentar entrar en aplicaciones sin permiso, pero a menudo lo hacen por descubrir algo o por reconocimiento, más que por lucro o para provocar el caos.

Probador de penetración

Alguien al que se le paga por entrar en los sistemas, a menudo de la misma forma que lo haría un hacker. A diferencia de los piratas informáticos, a los probadores de penetración se les paga para que informen de fallos y descuidos en el software de la aplicación, de modo que la empresa propietaria del software pueda arreglarlo antes de que un pirata informático con intenciones maliciosas se introduzca en él.

Cazarrecompensas de bichos

A probador de penetración autónomo. A menudo, las grandes empresas crean "programas de divulgación responsable" que conceden premios en metálico por informar sobre agujeros de seguridad. Algunos cazadores de recompensas por fallos trabajan a tiempo completo, pero a menudo se trata de profesionales a tiempo completo que participan fuera del trabajo por un dinero extra.

Ingeniero de seguridad de aplicaciones

A veces llamado "ingeniero de seguridad del producto", un ingeniero de software cuya función es evaluar y mejorar la seguridad del código base y la arquitectura de las aplicaciones de una organización.

Ingeniero de seguridad de software

Un ingeniero de software de cuya función es desarrollar productos relacionados con la seguridad, pero que no se encarga necesariamente de evaluar la seguridad para el conjunto de la organización.

Admin

A veces se llama "sys admin" o "administrador del sistema". Los administradores son el personal técnico encargado de mantener la configuración y el tiempo de actividad de un servidor o aplicación web.

Maestro Scrum

Un puesto de liderazgo en una organización de ingeniería responsable de ayudar a un equipo de ingeniería a planificar y ejecutar el trabajo de desarrollo.

Campeón de seguridad

Un ingeniero de software de no afiliado a una organización de seguridad, ni responsable del trabajo de seguridad, pero interesado en mejorar la seguridad del código de una organización.

Tabla P-2. Términos
Plazo Descripción

Vulnerabilidad

Un fallo en un sistema de software, a menudo como resultado de un descuido de ingeniería o de una funcionalidad inesperada al conectar varios módulos entre sí. Este tipo concreto de fallo permite a un pirata informático realizar acciones no intencionadas contra el sistema de software.

Vector de amenaza o vector de ataque

Una subsección de la funcionalidad de la aplicación que un hacker considera escrita de forma insegura, por lo que es probable que incluya vulnerabilidades y sea un buen objetivo para el pirateo.

Superficie de ataque

Una lista de vulnerabilidades de una aplicación que un hacker elaborará al determinar la mejor forma de atacar un sistema de software.

Explota

Normalmente un bloque de código o una lista de comandos que pueden utilizarse para aprovecharse de una vulnerabilidad.

Carga útil

Un exploit de que ha sido formateado de manera que permite enviarlo a un servidor para aprovecharse de una vulnerabilidad. A menudo, esto sólo significa empaquetar un exploit en el formato adecuado para enviarlo a través de una red.

Equipo rojo

Un equipo de formado a menudo por probadores de penetración, ingenieros de seguridad de redes e ingenieros de seguridad de software. Este equipo intenta piratear el software de una empresa para evaluar la capacidad de la empresa para enfrentarse a piratas informáticos reales.

Equipo azul

Un equipo de formado a menudo por ingenieros de seguridad de software e ingenieros de seguridad de redes. Este equipo intenta mejorar la seguridad del software de una empresa, a menudo utilizando los comentarios de un equipo rojo para establecer prioridades.

Equipo morado

Un equipo de que desempeña una combinación de responsabilidades de las funciones del equipo rojo y del equipo azul. Un equipo de seguridad de propósito general en lugar de un equipo especializado, a menudo más difícil de dotar correctamente de personal debido a los requisitos de habilidades expansivas.

Página web

Una serie de documentos de información accesibles a través de Internet, normalmente mediante el protocolo HTTP.

Aplicación web

Una aplicación similar a un escritorio que se suministra a través de Internet y se ejecuta dentro de un navegador en lugar de un sistema operativo anfitrión. Se diferencian de los sitios web tradicionales en que tienen muchos niveles de permisos, almacenan las entradas del usuario en bases de datos y a menudo permiten a los usuarios compartir contenidos entre sí.

Aplicación híbrida

Una aplicación móvil que se construye sobre tecnología basada en web. Suelen utilizar otra biblioteca, como Cordova de Apache, para compartir la funcionalidad nativa con la aplicación web.

Tabla P-3. Acrónimos
Acriónimo Descripción

API

Aplicación interfaz de programación: un conjunto de funciones expuestas por un módulo de código con la intención de que otro código lo consuma y haga uso de él. Se utiliza normalmente en este libro cuando se refiere a funciones expuestas a través de HTTP que un navegador puede llamar en un servidor. También puede utilizarse para referirse a módulos que se comunican localmente, incluidos módulos separados en el mismo paquete de software.

CSRF

Cross-Site Request Forgery: un ataque en el que un hacker es capaz de aprovecharse de los permisos de un usuario privilegiado para realizar peticiones contra un servidor.

CSS

Hojas de estilo en cascada: un lenguaje de estilo que suele utilizarse en combinación con HTML para crear una IU visualmente atractiva y correctamente alineada.

DDoS

Denegación de servicio distribuida : ataque DoS realizado a gran escala por varios ordenadores a la vez, que abruma a un servidor con su gran número; un solo ordenador probablemente no sería capaz de causar semejante caos.

DOM

Document Object Model-una API que viene con todos los navegadores web. Incluye toda la funcionalidad necesaria para organizar y gestionar el HTML de la página junto con las API para gestionar el historial, las cookies, las URL y otras funcionalidades comunes del navegador.

DoS

Denegación de servicio: un ataque que no se centra en robar datos, sino en solicitar tantos recursos del servidor o del cliente que la experiencia del usuario de la aplicación empeora o la aplicación deja de funcionar.

HTML

Lenguaje de marcado de hipertexto: un lenguaje de plantillas utilizado en la web junto con CSS y JavaScript.

HTTP

Protocolo de transferencia de hipertexto: el protocolo de red más utilizado para la comunicación entre clientes y servidores en una aplicación web o un sitio web.

HTTPS

Protocolo de Transferencia de Hipertexto Seguro-Tráfico HTTP cifrado mediante HTTP sobre TLS o HTTP sobre SSL.

JSON

JavaScript Notación de objetos: una especificación para almacenar datos jerárquicos de forma ligera, fácil de leer por los humanos y fácil de leer por las máquinas. Se utiliza a menudo en la comunicación entre el navegador y un servidor web en las aplicaciones web modernas.

OOP

Programación orientada a objetos-un modelo de programación que organiza el código en torno a objetos y estructuras de datos, en lugar de funcionalidad o lógica.

OSS

Abierto software de código fuente: software que está disponible libremente tanto para su consumo como para su modificación. A menudo se publica bajo licencias como MIT, Apache, GNU o BSD.

REST

Transferencia de Estado Representacional: una arquitectura específica para crear API sin estado que define los puntos finales de la API como recursos y no como unidades funcionales. REST permite muchos formatos de datos, pero normalmente se utiliza JSON.

RTC

Comunicación en tiempo real -un protocolo de red más reciente que permite a los navegadores comunicarse entre sí y con los servidores web.

SOAP

Protocolo simple de acceso a objetos: un protocolo para API basadas en funciones que requieren esquemas escritos de forma estricta. Sólo admite XML como formato de datos.

PNT

Política del mismo origen: política aplicada por el navegador que impide que el contenido de un origen se cargue en otro origen.

SPA

Aplicación de una sola página -también llamada "aplicación web de una sola página" (SPWA). Se refiere a un sitio web en Internet que funciona de forma similar a una aplicación de escritorio, gestionando su propia interfaz de usuario y estado en lugar de utilizar los valores predeterminados proporcionados por el navegador.

SSDL

seguro ciclo de vida de desarrollo de software -también llamado SDLC/SDL. Un marco común que permite a los ingenieros de software y a los ingenieros de seguridad trabajar juntos para escribir un código más seguro.

SSL

Secure Sockets Layer-un protocolo criptográfico diseñado para asegurar la información en tránsito (a través de la red), en particular para su uso en HTTP.

TLS

Seguridad de la Capa de Transporte: protocolo criptográfico diseñado para proteger la información en tránsito (a través de la red), utilizado normalmente en HTTP. Este protocolo sustituyó a SSL, que ahora está obsoleto.

VCS

Versión sistema de control-un tipo especial de software utilizado para gestionar las adiciones y redacciones históricas de un código base. A veces también incluye funciones de gestión de dependencias y colaboración.

XML

Extensible Markup Language: una especificación para almacenar datos jerárquicos que se adhiere a un estricto conjunto de reglas. Más pesado que JSON, pero más configurable.

XSS

Cross-Site Scripting: un tipo de ataque que consiste en forzar a otro cliente (a menudo un navegador) a ejecutar código escrito por un hacker.

XXE

Entidad XML externa: un ataque que se basa en un analizador XML mal configurado para robar archivos locales del servidor web o incluir archivos maliciosos de otro servidor web.

Resumen

Se trata de un libro polifacético diseñado para que resulte beneficioso a quienes tengan intereses de seguridad tanto ofensivos como defensivos. También está escrito de forma que sea fácilmente accesible para que cualquier tipo de desarrollador o administrador con una formación suficiente en programación web (cliente + servidor) pueda entenderlo y utilizarlo.

La Seguridad de las Aplicaciones Web te guía a través de una serie de técnicas utilizadas por hackers con talento y cazadores de recompensas por fallos para introducirse en las aplicaciones, y luego te enseña las técnicas y procesos que puedes implementar en tu propio software para protegerte contra dichos hackers.

Este libro está diseñado para leerse de principio a fin, pero también puede utilizarse como referencia a demanda para determinados tipos de técnicas de reconocimiento, ataques y defensas contra ataques. En definitiva, este libro está escrito para ayudar al lector a mejorar la seguridad de las aplicaciones web de una forma práctica y sigue una progresión lógica, de modo que no se requiere una experiencia previa significativa en seguridad.

Espero sinceramente que los cientos de horas que he dedicado a escribir este libro te resulten provechosos (al lector), y que extraigas algún aprendizaje interesante de su contenido. Te invito a que me envíes cualquier comentario o sugerencia para futuras ediciones.

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width bold

Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.

Constant width italic

Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Aprendizaje en línea O'Reilly

Nota

Durante más de 40 años, O'Reilly Media ha proporcionado formación, conocimientos y perspectivas sobre tecnología y negocios para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos, conferencias y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.

Cómo contactar con nosotros

Por favor, dirige tus comentarios y preguntas sobre este libro a la editorial:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Norte
  • Sebastopol, CA 95472
  • 800-998-9938 (en Estados Unidos o Canadá)
  • 707-829-0515 (internacional o local)
  • 707-829-0104 (fax)

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/web-app-security.

Envía un correo electrónico para comentar o hacer preguntas técnicas sobre este libro.

Para más información sobre nuestros libros, cursos, conferencias y noticias, consulta nuestro sitio web en http://www.oreilly.com.

Encuéntranos en Facebook: http://facebook.com/oreilly

Síguenos en Twitter: http://twitter.com/oreillymedia

Míranos en YouTube: http://www.youtube.com/oreillymedia

Get Seguridad de las aplicaciones web now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.