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 del contenido del libro y de a quién va dirigido, incluidos los conocimientos necesarios para aprovechar al máximo el contenido técnico de los capítulos siguientes. Leer el prefacio te ayudará a saber si este libro es para ti.

Cambios respecto a la primera edición

Encontrarás un número significativo de cambios al comparar este libro con su primera edición anterior. Hay más de cien páginas de contenido nuevo, pero además hay docenas de páginas editadas.

La primera edición estaba enfocada principalmente a los ingenieros principiantes y de nivel medio, pero a menudo los comentarios pedían contenidos más avanzados a partir de los cuales se pudiera continuar por una determinada vía de aprendizaje para cada capítulo. Ahora, la mayoría de los capítulos ofrecen contenidos avanzados, por lo que espero que los profesionales de la seguridad de nivel superior saquen ahora más provecho de la lectura de este libro.

Además, el libro se ha actualizado considerablemente para incorporar tecnologías recientes. Me pareció imprescindible añadir casos de ejemplo y código para asegurar y atacar formas de tecnología nuevas pero comunes en las aplicaciones web, por ejemplo GraphQL y las bases de datos NoSQL.

La segunda edición tiene importantes franjas de contenido nuevo sobre seguridad, incluido el contenido que cubre las últimas y más populares tecnologías de aplicaciones web. También se ha modificado para incluir más contenido avanzado por capítulo y para incorporar en sus páginas docenas, si no cientos, de sugerencias y peticiones de lectores y editores.

Espero que encuentres este libro bien organizado y agradable de leer, y que una vez que lo hayas terminado, salgas de él con nuevos conocimientos y perspectivas que mejoren tu conjunto de habilidades en seguridad de la información.

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 aficionados. Tras una investigación suficiente sobre las técnicas mencionadas anteriormente, iniciamos un debate sobre cómo proteger las aplicaciones web contra estoshackers.

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 tienes acceso a nivel de código. También serás capaz de identificar los vectores de amenaza y las vulnerabilidades de las 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, podrás identificar las áreas de riesgo de la base de código de una aplicación web y comprender cómo escribir código para defenderse 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, así que si decides saltarte algún capítulo y descubres que te falta información esencial previa, sólo tienes que retroceder unos cuantos capítulos para ponerte al día. Cualquier tema que no se defina como prerrequisito en este prefacio no se presentará en el libro sin una explicación previa.

¿Por qué hay ejemplos en JavaScript?

La mayoría de los ejemplos de código de este libro están escritos en JavaScript, lo cual es atípico en los libros relacionados con la seguridad del software. Puede que te preguntes por qué elegí esto al planificar el libro.

Todos los buenos ingenieros de seguridad deben entender JavaScript, porque es el único lenguaje de programación que puede ejecutarse en el cliente dentro de un navegador web en este momento. Por lo tanto, decidí que sería mejor presentar la mayoría de los ejemplos del lado del servidor en JavaScript, dado que los ejemplos del lado del cliente tienen que estar en JavaScript. Por suerte, los lenguajes de programación son en su mayoría intercambiables, así que si eres capaz de entender el contenido conceptualmente, deberías poder aplicar cualquiera de los ataques o mitigaciones del lado del servidor contra cualquier otro lenguaje de programación del lado del servidor.

¿Por qué enseñar conceptos en lugar de herramientas?

Este libro explica técnicas de ciberseguridad ofensivas y defensivas a un nivel razonablemente bajo para revelar lo que ocurre bajo el capó de herramientas populares. Por ejemplo, en este libro desarrollarás cargas útiles de Cross-Site Scripting (XSS) y encontrarás sumideros XSS en lugar de utilizar una herramienta automatizada de descubrimiento XSS como XSS-Sniper.

Hoy en día, muchos ingenieros de seguridad y pen testers no comprenden lo que ocurre debajo de las herramientas que utilizan habitualmente. El inconveniente de esto es que la dependencia de las herramientas hace que dichos ingenieros y pen testers no puedan aprovechar los ataques avanzados o las mitigaciones. Además, las herramientas del sector de la seguridad de las aplicaciones en particular son efímeras, es decir, se cambian y quedan obsoletas con regularidad.

Al enseñar los conceptos subyacentes en lugar de basarse en herramientas de pago, cualquiera que lea este libro debería ser capaz de saltar de una herramienta a otra o de implementar herramientas, ataques o mitigaciones personalizadas. Esto no sería posible si el libro se centrara en herramientas específicas.

Antecedentes sugeridos

El público del libro es bastante amplio. Está escrito y estructurado para cualquier persona con una formación de nivel intermedio en ingeniería de software. ¿Qué es una "formación intermedia en ingeniería de software"? La respuesta variará considerablemente de una persona a otra.

Para una persona muy 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 decidido definir el nivel de habilidad necesario para completarlo con éxito como "intermedio" frente a "principiante". Este libro no sería apropiado para quienes no tengan 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.

  • Estás familiarizado con 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?

Conocimientos previos aparte, creo que es importante aclarar quién se beneficiará más de este libro, así 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

El principal destinatario de este libro es un ingeniero de software o desarrollador de aplicaciones web que se encuentre al principio o a mitad de su carrera profesional. Lo ideal es que estés interesado en conocer en profundidad las técnicas ofensivas utilizadas por los hackers o las técnicas defensivas utilizadas por los ingenieros de seguridad para defenderse de los hackers.

A menudo, los títulos "ingeniero de software" y "desarrollador de aplicaciones web" son intercambiables, lo que puede llevar un poco a confusión. Yo utilizo ambos a lo largo del libro. Empecemos con algunas aclaraciones.

Ingenieros de software

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 de este libro son fácilmente transferibles 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.

Varios exploits tratados en este libro se aprovechan de las 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

En este libro, un desarrollador de aplicaciones web 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 claro. También creo que este libro es 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é, 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 se aprovechan del DOM del navegador o de las hojas de estilo CSS para atacar a los usuarios de una aplicació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 que se ajuste a las descripciones anteriores y que esté buscando un cambio profesional 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. La estructura de este libro 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. Te sugiero que lo leas de principio a fin para obtener la mejor experiencia de aprendizaje, pero si sólo buscas una referencia sobre la seguridad frente a tipos concretos de piratería informática, hojea el libro hasta la mitad y empieza.

Ingenieros de seguridad, Pen Testers y Bug Bounty Hunters

La estructura del libro también se presta a ser utilizada como recurso para pruebas de penetración, caza de recompensas por errores o cualquier otro tipo de trabajo de seguridad a nivel de aplicación. Si eso es relevante o interesante para ti, puede que la primera mitad del libro sea más de tu agrado.

Nosotros profundizaremos en cómo funcionan los exploits, tanto a nivel de código como de arquitectura, en lugar de limitarnos 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. Este libro será beneficioso para los profesionales de la seguridad que entienden cómo funcionan conceptualmente muchos ataques, pero a los que les gustaría profundizar en los sistemas y el código que hay detrás de una herramienta o un script.

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 que se indican en la Parte III. Es una forma estupenda de ayudar a las empresas a mejorar la seguridad de sus productos mientras desarrollas tus habilidades de hacker y ganas algo de dinero adicional.

Hoy en día es habitual que los encargados de las pruebas 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, solicitudes 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). Esto no es un juicio sobre el valor de las herramientas de seguridad especializadas: creo que muchas de ellas son excepcionales y facilitan mucho la realización de pruebas de penetración profesionales y de alta calidad.

Este libro no hace uso de herramientas de seguridad especializadas 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 nuevas vulnerabilidades, desarrollar exploits contra sistemas que nunca han sido explotados antes, 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).

Comenzamos 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. Luego pasamos a nuestro tema principal: la explotación y las contramedidas para las aplicaciones web modernas. (De ahí el subtítulo de este libro).

El contenido principal se divide en tres partes principales, cada una de las cuales contiene muchos capítulos individuales que abarcan una amplia gama de temas. Lo ideal sería que recorrieras este libro de forma lineal, desde la primera página hasta la última. Como ya se ha dicho, leer este libro en orden proporcionará el mayor aprendizaje posible, pero también puede utilizarse como referencia de hacking o de ingeniería de seguridad centrándose en la primera o la segunda mitad, respectivamente.

A estas alturas ya deberías entender cómo navegar por el libro, así que repasemos las tres partes principales para 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", analizamos una serie de tecnologías y conceptos importantes que es esencial dominar si deseas 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. 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 los "grandes" hackers de los "buenos" hackers. En otras palabras, una cosa es tener un coche rápido (en este caso, quizás saber cómo construir exploits), pero sin conocer la ruta más eficiente hacia la línea de 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 cercanas, 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 personaje 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 lo encuentren y lo cierren. Podemos concluir con seguridad que el segundo uso del reconocimiento es averiguar cómo priorizar tus explotaciones.

Si estás interesado en una carrera como probador de penetración o cazador de recompensas por fallos, la Parte I será de suma importancia para ti. Esto se debe en gran medida a que las pruebas se realizan al estilo "caja negra" en el mundo de la caza de recompensas por fallos y, en menor medida, en las pruebas de penetración. 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 minuciosos.

Ofensa

La Parte II es "Ofensiva". 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 los capítulos explican técnicas de hacking reales utilizadas por hackers malintencionados de sombrero negro en el mundo real.1 Es imprescindible que, si vas a probar las 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 los exploits.

El uso inadecuado de las técnicas de pirateo 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.

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 hacking 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, analizamos 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.

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 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.

Suena sencillo, ¿verdad? Y debería serlo. Sin defensas, la mayoría de los sistemas de software son fáciles de vulnerar. 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 persona interesada 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. Aquí, no nos concentraremos en irrumpir en los sistemas de software; intentaremos prevenir 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 están estructurados 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. Por último, mejoraremos nuestras defensas hasta detener la mayoría de los intentos de pirateo, si no todos.

En este punto, la estructura de la Parte III empieza a diferir de la de la Parte II, ya que tratamos en 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.

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 nombre de usuario: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 pirata informático sólo necesita forzar las contraseñas en lugar de las combinaciones de nombre de usuario y contraseña, lo que implica una disminución significativa de la complejidad matemática 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 pasar a desempeñar funciones 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 una formación más valiosa 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 con éxito estas nuevas habilidades, necesitamos establecer un lenguaje común. Esto es importante para evitar confusiones y para ayudarte a expresar tus nuevas ideas de forma 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 XSS. Aparte de eso, he hecho todo lo posible para determinar qué términos y frases podrían necesitar explicación. Los he recopilado y organizado en las siguientes tablas (Tablas P-1 a P-3). Si te tropiezas con un término o frase que no entiendes del todo, vuelve a este prefacio (¡marcalo!) para 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.

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

Hacker

Alguien que irrumpe en los sistemas, normalmente para exfiltrar 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 en algún lugar entre el sombrero blanco y el sombrero negro; ocasionalmente estos hackers violarán las leyes, como intentar entrar en aplicaciones sin permiso, pero a menudo por el bien del descubrimiento o el reconocimiento más que por el beneficio o para causar 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

Un probador autónomo de penetración. 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 se denomina "ingeniero de seguridad de productos", es decir, 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 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 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 pirata informático elaborará al determinar la mejor forma de atacar un sistema de software.

Explota

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

Carga útil

Un exploit que se ha formateado de manera que permita 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 compuesto 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 compuesto 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 que desempeña una combinación de responsabilidades de las funciones del equipo rojo y del equipo azul. Un equipo de seguridad de uso 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
Acró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 (Cascading Style Sheets): 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: un ataque DoS realizado a gran escala por varios ordenadores a la vez, abrumando a un servidor con su gran número; un solo ordenador probablemente no sería capaz de causar tal caos.

DOM

Modelo de Objetos del Documento: una API que se incluye con todos los navegadores web. Incluye toda la funcionalidad necesaria para organizar y gestionar el HTML de la página junto con 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

Notación de objetos de JavaScript: 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

Software de código abierto: 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 (Representational State Transfer): una arquitectura específica de para crear API sin estado que define los puntos finales de la API como recursos en lugar de 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 de 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

Ciclo de vida del desarrollo de software seguro: 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

Sistema de control de versiones-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

Lenguaje de marcado extensible: 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 externa XML: 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 beneficiar a quienes tienen intereses de seguridad tanto ofensivos como defensivos. Es fácilmente accesible para que cualquier tipo de desarrollador o administrador con una formación suficiente en programación web (cliente y servidor) pueda entenderlo y utilizarlo.

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

Este libro puede leerse de principio a fin o como referencia a la carta para determinados tipos de técnicas de reconocimiento, ataques y defensas contra ataques. En última instancia, su objetivo es ayudarte a mejorar la seguridad de las aplicaciones web de una forma práctica y que siga una progresión lógica, de modo que no se requiera una experiencia previa significativa en seguridad.

Espero sinceramente que los cientos de horas que he dedicado a escribir este libro te resulten provechosos, 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 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 https://oreilly.com.

Cómo contactar con nosotros

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

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-application-security-2e.

Para noticias e información sobre nuestros libros y cursos, visita https://oreilly.com.

Encuéntranos en LinkedIn: https://linkedin.com/company/oreilly-media.

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

Míranos en YouTube: https://youtube.com/oreillymedia.

Agradecimientos

Un agradecimiento especial a las siguientes personas

  • Editores de la 1ª edición: Angela Rufino y Jennifer Pollock

  • Revisión técnica de la 1ª edición: August Detlefsen, Ryan Flood, Chetan Karande, Allan Liska y Tim Gallo

  • Editores de la 2ª edición: Angela Rufino, Katherine Tozer y Tonya Trybula

  • Revisión técnica de la 2ª edición: Nishil Shah, Dustin Kinsey, Caroline Wong, Jon Lamendola, Ming Chow y Chetan Karande

También quiero dar las gracias a mi esposa Amy, que me ha apoyado durante más de una década en una serie de proyectos difíciles, incluidas las dos ediciones de este libro.

1 O'Reilly pretende evitar el uso de un lenguaje figurado que asocie características positivas o negativas con colores que también se asocian, problemáticamente, con personas. En este libro, utilizamos los términos "sombrero negro" y "sombrero blanco" cuando todavía no se utiliza una alternativa lo suficientemente extendida en la seguridad de la información como para que quede claro.

Get Seguridad de las Aplicaciones Web, 2ª Edición 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.