Masterclass de Pruebas de Seguridad de GraphQL

Rate this content
Bookmark

Todos hemos escuchado el revuelo sobre llevar la seguridad de las aplicaciones a manos de los desarrolladores, pero si eres como la mayoría de las empresas, ha sido difícil hacer que esto sea una realidad. No estás solo: establecer la cultura, los procesos y las herramientas necesarias para lograrlo es difícil, especialmente para aplicaciones sofisticadas como aquellas respaldadas por GraphQL. En esta sesión técnica práctica, Zachary Conger, Ingeniero Senior de DevOps de StackHawk, te guiará sobre cómo proteger tus APIs de GraphQL contra vulnerabilidades utilizando pruebas de seguridad automatizadas. Prepárate para ponerte manos a la obra con las pruebas automatizadas de seguridad de aplicaciones.

This workshop has been presented at GraphQL Galaxy 2021, check out the latest edition of this Tech Conference.

FAQ

DAST, o Pruebas de Seguridad de Aplicaciones Dinámicas, es una forma de escanear una aplicación en ejecución principalmente basada en web. Funciona enviando solicitudes y examinando las respuestas para determinar si hay vulnerabilidades, informando sobre posibles problemas sin necesidad de acceso al código fuente.

En el taller se usaron varias herramientas para las pruebas de seguridad, incluyendo Dependabot para análisis de composición de software (SCA), CodeQL para Pruebas de Seguridad de Aplicaciones Estáticas (SAS), y Stackhawk para Pruebas de Seguridad de Aplicaciones Dinámicas (DAST).

Puedes automatizar las pruebas de seguridad en tu repositorio de GitHub utilizando GitHub Actions. Durante el taller, se enseñó a agregar flujos de trabajo de GitHub Actions que incluyen herramientas como Dependabot, CodeQL y Stackhawk para realizar pruebas de seguridad automáticamente cada vez que se envía código al repositorio.

CodeQL es una herramienta de Pruebas de Seguridad de Aplicaciones Estáticas (SAS) que analiza el código fuente en busca de patrones que puedan indicar vulnerabilidades, como la falta de sanitización de entradas. Es útil para identificar problemas que podrían no manifestarse sin una revisión detallada del código.

Dependabot es una herramienta de análisis de composición de software (SCA) que verifica las dependencias del proyecto en busca de vulnerabilidades conocidas. Automáticamente crea solicitudes de extracción para actualizar las dependencias a versiones más seguras, ayudando a mantener el software actualizado y menos vulnerable a ataques.

Se recomendó usar pruebas DAST en entornos de preproducción o de prueba en lugar de en producción directamente, para evitar alteraciones de datos y obtener resultados de escaneo consistentes sin impactar el rendimiento del entorno de producción.

Zachary Conger
Zachary Conger
104 min
06 Dec, 2021

Comments

Sign in or register to post your comment.
Video Summary and Transcription
El masterclass de hoy cubre las Pruebas de Seguridad Automatizadas de GraphQL utilizando herramientas como Dependabot, CodeQL y StackHawk. Explora pruebas de seguridad como el análisis de composición de software y las pruebas de seguridad de aplicaciones estáticas. El masterclass demuestra cómo configurar flujos de trabajo de GitHub Actions, habilitar Dependabot para la seguridad de las dependencias y configurar el análisis de CodeQL. También destaca el uso de StackHawk para pruebas de penetración automatizadas y la optimización del proceso de escaneo. El masterclass enfatiza la importancia de las pruebas continuas y las medidas de seguridad en el desarrollo de software.

1. Introducción a las pruebas de seguridad automatizadas de GraphQL

Short description:

La masterclass de hoy trata sobre las pruebas de seguridad automatizadas de GraphQL. Cubriremos varias pruebas de seguridad, incluido el análisis de composición de software (SCA) y las pruebas de seguridad de aplicaciones estáticas (SAS). Utilizaremos herramientas como Dependabot y CodeQL para buscar vulnerabilidades en sus dependencias y código base. Estas pruebas se automatizarán en el flujo de trabajo de CI/CD. Comencemos haciendo un fork de un repositorio de aplicación GraphQL y agregando pruebas de seguridad a él.

Los siguientes videos son extractos de esta serie. Hoy, el título es Pruebas de Seguridad Automatizadas de GraphQL. Y mi nombre es Zachary Conger. Soy un ingeniero senior de DevOps en StackHawk, y trabajo como gerente de la empresa para StackHawk. Mi función principal es ayudarte a tener un producto DAST, un escáner de pruebas de seguridad de aplicaciones dinámicas. Soy un adoptante temprano de DevOps. He estado desarrollando software, automatización, pruebas, observabilidad, ese tipo de cosas durante muchos años, demasiados años. Y en mi tiempo libre, me gusta tocar música, andar en bicicleta y tomar fotografías amateur. Soy realmente, realmente súper útil con cualquier problema técnico que surja. Pero espero que no haya demasiados, porque nuevamente, vamos a operar completamente desde un navegador web, que es prácticamente todo lo que necesitas hoy en día. Una última vez, debes obtener la guía del taller, hay un enlace en Discord y en el chat de Zoom. Vamos a usar Discord, así que únete a Discord si aún no estás allí. Lo usaremos para encuestas y puntos de control, por lo que cuando lleguemos a ciertos puntos en el taller, nos detendremos y diremos, `¿todos están al día?` Y tú nos darás un pulgar hacia arriba si lo estás y un pulgar hacia abajo si no lo estás. Realmente ayuda con el flujo y asegurarse de que todos puedan aprovechar al máximo el taller. Y finalmente, si no tienes una cuenta de GitHub, ve a github.com y regístrate. Aquí está la agenda para hoy. Vamos a tomar una aplicación GraphQL. Es una aplicación de prueba simple de GraphQL que realmente no hace mucho aparte de proporcionar una interfaz gráfica. Es como un pequeño motor de blogs, un motor de blogs simple. Tiene algunas vulnerabilidades. Lo que vamos a hacer es todos vamos a hacer un fork de ese repositorio en nuestra propia cuenta de GitHub, luego vamos a agregar un flujo de trabajo de GitHub Actions para automatizar la construcción de esa aplicación en GitHub Actions. Luego vamos a comenzar a agregar pruebas de seguridad a ese flujo de trabajo para que cada vez que envíes código al repositorio de GitHub, se ejecuten más pruebas en él. Entonces, la primera prueba, en realidad, algunas de estas están basadas en el flujo de trabajo y otras son más automáticas que eso, simplemente ocurren en segundo plano. Dependabot es la primera prueba que agregaremos, que probará tu aplicación en busca de vulnerabilidades conocidas y cualquier dependencia que agregues. La siguiente será CodeQL, que analizará el código de la aplicación, en realidad, recorrerá todo el código y buscará patrones que indiquen vulnerabilidades. Y luego, finalmente, agregaremos Stackhawk, que escaneará dinámicamente la aplicación en ejecución en busca de vulnerabilidades. Y todo esto ocurre en el flujo de trabajo de CI/CD, por lo que es automático en cada envío. Bien, mencioné estas formas de pruebas y déjame explicarlas un poco más detalladamente. Este taller se supone que es bastante general, pero estamos utilizando algunas herramientas específicas. Por supuesto, Stackhawk es una de ellas y soy de Stackhawk. Creemos que es la mejor herramienta DAST disponible, pero hay otras opciones y el objetivo de este taller es que conozcas todas ellas, o muchas de ellas. Entonces, el primer tipo de prueba que vamos a hacer se llama SCA o análisis de composición de software. Y en esta forma de prueba, opera en código estático y recorre tus dependencias. Examina tu, en este caso, vamos a examinar el archivo package.json y el archivo package lock.json, y vamos a buscar, va a construir la cadena de dependencia y verificar todo eso en el catálogo de bibliotecas y dependencias de código abierto e informar sobre cualquier vulnerabilidad conocida en cualquiera de esas versiones de bibliotecas. Y si encuentra alguna, te dará un plan de acción para solucionarlo. Entonces, SCA se ha convertido en algo así como un estándar básico que debes hacer en todos tus repositorios. No hay falsos positivos en cierto sentido porque todas las vulnerabilidades que encuentra son vulnerabilidades conocidas y es muy rápido y es muy fácil y generalmente es gratuito. La mayoría de las empresas que ofrecen SCA ofrecen un plan gratuito o un plan bastante económico. Hoy vamos a usar Dependabot, pero hay otras opciones realmente buenas. Sneak es una de las mejores, de hecho. Es posible que en el futuro también incluyamos Sneak como la opción de SCA que hagamos. Dependabot también es muy bueno. Y luego hay otra versión, una versión de código abierto llamada FASA, también tienen una opción respaldada comercialmente. El siguiente tipo de prueba que vamos a agregar a nuestra aplicación se llama SAS o Pruebas de Seguridad de Aplicaciones Estáticas. Ejemplos de esto son CodeQL, que vamos a usar hoy. También hay SonarQube y CheckMarks y muchas otras buenas opciones. Si buscas en Google por SAS, encontrarás muchas opciones disponibles. Este tipo de prueba también opera en código estático, pero no está mirando tus dependencias en absoluto. En realidad, está revisando tu base de código y busca patrones que indiquen que podrías tener una vulnerabilidad. Tal vez no estés haciendo ninguna sanitización de entradas, por ejemplo, generalmente encontraría ese tipo de problema y te lo informaría.

2. DAST y GitHub Actions

Short description:

DAST es un método de pruebas de seguridad de aplicaciones dinámicas que escanea el código en ejecución en busca de vulnerabilidades. Envía solicitudes a la aplicación, analiza las respuestas e informa sobre posibles vulnerabilidades. A diferencia de SAST, DAST tiene menos falsos positivos y encuentra problemas más útiles. Sin embargo, puede ser lento dependiendo del tamaño y la capacidad de respuesta de la aplicación. También exploraremos GitHub Actions, un flujo de trabajo de CI/CD integrado en GitHub, con un mercado de acciones que simplifican pasos complejos. Usaremos GitHub Actions para hacer un fork de una aplicación de prueba y crear un flujo de trabajo con múltiples pasos. Cada paso puede ejecutar comandos de shell o utilizar acciones del mercado, y la gestión de secretos está integrada.

Es realmente genial porque a medida que encuentra tus errores, puede señalarlos por archivo y por línea. Te permite saber exactamente dónde está el problema. Tiende a tener muchos falsos positivos y en mi experiencia no encuentra mucho que sea útil en comparación con otras herramientas. Pero eso mejora cada día a medida que estas herramientas mejoran.

También es un poco lento porque necesita compilar tu código, buscarlo y consultarlo. Cuanto más grande sea tu base de código, más lento se vuelve.

Finalmente, vamos a ver DAST, pruebas de seguridad de aplicaciones dinámicas. Hay varios ejemplos de este tipo de escáner. El nuestro se llama Stackhawk. Eso es lo que vamos a usar hoy. Otros incluyen OASP Zap, que es un proyecto de código abierto en el que Stackhawk se basa, hemos construido sobre OASP Zap. También está Burp Suite, que es una herramienta de pruebas de penetración muy común. Y han estado trabajando para facilitar su automatización también.

Las pruebas de seguridad de aplicaciones dinámicas son una forma de escaneo que opera en tu código en ejecución. Por lo general, esto se aplica a una aplicación basada en web, tal vez una interfaz REST en nuestro caso de hoy. Es una interfaz GraphQL. Simplemente se ejecuta, sondea ese servicio en busca de vulnerabilidades. Envía solicitudes, examina las respuestas y, en función de las respuestas que recibe, intenta determinar si hay alguna forma de vulnerabilidad. Informa sobre esas posibles vulnerabilidades. En lugar de darte detalles línea por línea, te muestra la entrada y salida que causó que el escáner piense que hay un problema con tu código. Al igual que SAST, encuentra tus errores, pero a diferencia de SAST tiende a tener menos falsos positivos y encuentra cosas más útiles. De hecho, debido a que está escaneando una aplicación en ejecución, puedes tener cierta confianza en que las cosas que encuentra son realmente cosas expuestas en tu aplicación y explotables en la vida real, siempre y cuando lo que estés probando realmente represente lo que vas a ejecutar en producción. Puede ser un poco lento. Esa es una de las desventajas de DAST. Pero eso depende del tamaño de tu aplicación, de su capacidad de respuesta y de la proximidad del escáner a la aplicación en ejecución. Incluso si es bastante lento, generalmente hay formas de dividirlo y paralelizar el escaneo para que sea más rápido.

Ok, eso es lo que vamos a ver hoy. Y creo que a partir de ahí, vamos a pasar a comenzar por, sí, vamos a ver GitHub Actions. Entonces, el primer paso en nuestro plan es hacer un fork de una aplicación de prueba llamada Phone GraphQL API. Y vamos a crear un flujo de trabajo de GitHub Actions para construirlo básicamente en un pipeline de CI/CD integrado en GitHub.

GitHub Actions es un pipeline de CI/CD integrado en GitHub, tiene un lenguaje de configuración YAML simple y un gran mercado de acciones, que son como complementos. Y esto es lo genial de GitHub Actions en mi opinión, que crearon una forma realmente fácil para que los autores creen acciones que simplifiquen pasos complejos a través de estas pequeñas acciones que puedes agregar. Así que usaremos un par de esas acciones. Usaremos una acción de Stackhawk, una acción de CodeQL, y así sucesivamente. Pero es un sistema realmente genial. Está basado en eventos, generalmente basado en envíos, PR, pero también puedes tener webhooks arbitrarios como eventos de inicio. Y para cada flujo de trabajo que creas, los llaman flujos de trabajo. Dentro de un flujo de trabajo, un solo flujo de trabajo iniciará un solo runner. Por defecto, eso ocurre en la nube de GitHub. En realidad, tienen máquinas virtuales que aparecerán para ti en su propia nube. Y luego, dentro de un flujo de trabajo, que instancia un runner, puedes tener múltiples trabajos, que pueden ejecutarse en paralelo o pueden activarse entre sí, pueden tener un orden. Y dentro de cada trabajo, tienes varios pasos que se ejecutan en secuencia. Así que vamos a hacer un solo flujo de trabajo, un solo trabajo y un par de pasos en nuestro flujo de trabajo. Un ejemplo sencillo. Y cada paso puede ser ejecutar un comando de shell, puedes tener runners basados en Windows y runners basados en Linux. Así que puedes ejecutar un simple comando de shell o ejecutar una acción del mercado de GitHub Actions. Haremos un poco de ambos. Hay una solución de gestión de secretos integrada en GitHub Actions, que nos será útil porque la usaremos para almacenar una clave de API secreta.

QnA

Watch more workshops on topic

Construir con SvelteKit y GraphQL
GraphQL Galaxy 2021GraphQL Galaxy 2021
140 min
Construir con SvelteKit y GraphQL
Top Content
Featured WorkshopFree
Scott Spence
Scott Spence
¿Alguna vez has pensado en construir algo que no requiera mucho código de plantilla con un tamaño de paquete pequeño? En esta masterclass, Scott Spence irá desde el hola mundo hasta cubrir el enrutamiento y el uso de endpoints en SvelteKit. Configurarás una API de GraphQL en el backend y luego usarás consultas de GraphQL con SvelteKit para mostrar los datos de la API de GraphQL. Construirás un proyecto rápido y seguro que utiliza las características de SvelteKit, y luego lo desplegarás como un sitio completamente estático. Este curso es para los curiosos de Svelte que no han tenido una experiencia extensa con SvelteKit y quieren una comprensión más profunda de cómo usarlo en aplicaciones prácticas.

Tabla de contenidos:
- Inicio e introducción a Svelte
- Inicializar el proyecto frontend
- Recorrido por el proyecto esqueleto de SvelteKit
- Configurar el proyecto backend
- Consultar datos con GraphQL
- Recuperación de datos en el frontend con GraphQL
- Estilización
- Directivas de Svelte
- Enrutamiento en SvelteKit
- Endpoints en SvelteKit
- Despliegue en Netlify
- Navegación
- Mutaciones en GraphCMS
- Envío de mutaciones GraphQL a través de SvelteKit
- Preguntas y respuestas
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Node Congress 2024Node Congress 2024
152 min
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Featured Workshop
Emanuel Scirlet
Miguel Henriques
2 authors
Ven y aprende cómo puedes potenciar tus aplicaciones modernas y seguras utilizando GraphQL y Javascript. En este masterclass construiremos una API de GraphQL y demostraremos los beneficios del lenguaje de consulta para APIs y los casos de uso para los que es adecuado. Se requiere conocimiento básico de Javascript.
Masterclass Práctica: Introducción a Pentesting para Aplicaciones Web / APIs Web
JSNation US 2024JSNation US 2024
148 min
Masterclass Práctica: Introducción a Pentesting para Aplicaciones Web / APIs Web
Featured Workshop
Gregor Biswanger
Gregor Biswanger
En esta masterclass práctica, estarás equipado con las herramientas para probar efectivamente la seguridad de las aplicaciones web. Este curso está diseñado tanto para principiantes como para aquellos que ya están familiarizados con las pruebas de seguridad de aplicaciones web y desean ampliar su conocimiento. En un mundo donde los sitios web juegan un papel cada vez más central, asegurar la seguridad de estas tecnologías es crucial. Comprender la perspectiva del atacante y conocer los mecanismos de defensa apropiados se han convertido en habilidades esenciales para los profesionales de TI.Esta masterclass, dirigida por el renombrado entrenador Gregor Biswanger, te guiará a través del uso de herramientas de pentesting estándar de la industria como Burp Suite, OWASP ZAP y el marco profesional de pentesting Metasploit. Aprenderás a identificar y explotar vulnerabilidades comunes en aplicaciones web. A través de ejercicios prácticos y desafíos, podrás poner en práctica tu conocimiento teórico y expandirlo. En este curso, adquirirás las habilidades fundamentales necesarias para proteger tus sitios web de ataques y mejorar la seguridad de tus sistemas.
Seguridad de tipo de extremo a extremo con React, GraphQL y Prisma
React Advanced 2022React Advanced 2022
95 min
Seguridad de tipo de extremo a extremo con React, GraphQL y Prisma
Featured WorkshopFree
Sabin Adams
Sabin Adams
En este masterclass, obtendrás una visión de primera mano de lo que es la seguridad de tipo de extremo a extremo y por qué es importante. Para lograr esto, construirás una API de GraphQL utilizando herramientas modernas y relevantes que serán consumidas por un cliente de React.
Prerrequisitos: - Node.js instalado en tu máquina (12.2.X / 14.X)- Se recomienda (pero no es obligatorio) utilizar VS Code para las tareas prácticas- Un IDE instalado (se recomienda VSCode)- (Bueno tener) *Un conocimiento básico de Node.js, React y TypeScript
GraphQL para Desarrolladores de React
GraphQL Galaxy 2022GraphQL Galaxy 2022
112 min
GraphQL para Desarrolladores de React
Featured Workshop
Roy Derks
Roy Derks
Hay muchas ventajas en utilizar GraphQL como fuente de datos para el desarrollo frontend, en comparación con las API REST. Nosotros, los desarrolladores, por ejemplo, necesitamos escribir mucho código imperativo para recuperar datos y mostrarlos en nuestras aplicaciones y manejar el estado. Con GraphQL, no solo puedes reducir la cantidad de código necesario para la obtención de datos y la gestión del estado, sino que también obtendrás una mayor flexibilidad, mejor rendimiento y, sobre todo, una mejor experiencia de desarrollo. En este masterclass aprenderás cómo GraphQL puede mejorar tu trabajo como desarrollador frontend y cómo manejar GraphQL en tu aplicación frontend de React.
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
React Summit 2022React Summit 2022
173 min
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
Top Content
WorkshopFree
Kellen Mace
Kellen Mace
En esta masterclass, aprenderás cómo construir una aplicación Next.js que utiliza Apollo Client para obtener datos de un backend de WordPress sin cabeza y usarlo para renderizar las páginas de tu aplicación. Aprenderás cuándo debes considerar una arquitectura de WordPress sin cabeza, cómo convertir un backend de WordPress en un servidor GraphQL, cómo componer consultas usando el IDE GraphiQL, cómo colocar fragmentos GraphQL con tus componentes, y más.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

De GraphQL Zero a GraphQL Hero con RedwoodJS
GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
De GraphQL Zero a GraphQL Hero con RedwoodJS
Top Content
Tom Pressenwurter introduces Redwood.js, a full stack app framework for building GraphQL APIs easily and maintainably. He demonstrates a Redwood.js application with a React-based front end and a Node.js API. Redwood.js offers a simplified folder structure and schema for organizing the application. It provides easy data manipulation and CRUD operations through GraphQL functions. Redwood.js allows for easy implementation of new queries and directives, including authentication and limiting access to data. It is a stable and production-ready framework that integrates well with other front-end technologies.
Estado Local y Caché del Servidor: Encontrando un Equilibrio
Vue.js London Live 2021Vue.js London Live 2021
24 min
Estado Local y Caché del Servidor: Encontrando un Equilibrio
Top Content
This Talk discusses handling local state in software development, particularly when dealing with asynchronous behavior and API requests. It explores the challenges of managing global state and the need for actions when handling server data. The Talk also highlights the issue of fetching data not in Vuex and the challenges of keeping data up-to-date in Vuex. It mentions alternative tools like Apollo Client and React Query for handling local state. The Talk concludes with a discussion on GitLab going public and the celebration that followed.
Baterías Incluidas Reimaginadas - El Resurgimiento de GraphQL Yoga
GraphQL Galaxy 2021GraphQL Galaxy 2021
33 min
Baterías Incluidas Reimaginadas - El Resurgimiento de GraphQL Yoga
Envelope is a powerful GraphQL plugin system that simplifies server development and allows for powerful plugin integration. It provides conformity for large corporations with multiple GraphQL servers and can be used with various frameworks. Envelope acts as the Babel of GraphQL, allowing the use of non-spec features. The Guild offers GraphQL Hive, a service similar to Apollo Studio, and encourages collaboration with other frameworks and languages.
Aplicaciones sólidas de React y GraphQL para personas con prisa
GraphQL Galaxy 2022GraphQL Galaxy 2022
29 min
Aplicaciones sólidas de React y GraphQL para personas con prisa
The Talk discusses the challenges and advancements in using GraphQL and React together. It introduces RedwoodJS, a framework that simplifies frontend-backend integration and provides features like code generation, scaffolding, and authentication. The Talk demonstrates how to set up a Redwood project, generate layouts and models, and perform CRUD operations. Redwood automates many GraphQL parts and provides an easy way for developers to get started with GraphQL. It also highlights the benefits of Redwood and suggests checking out RedwoodJS.com for more information.
Adoptando GraphQL en una Empresa
GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
Adoptando GraphQL en una Empresa
Today's Talk is about adopting GraphQL in an enterprise. It discusses the challenges of using REST APIs and the benefits of GraphQL. The Talk explores different approaches to adopting GraphQL, including coexistence with REST APIs. It emphasizes the power of GraphQL and provides tips for successful adoption. Overall, the Talk highlights the advantages of GraphQL in terms of efficiency, collaboration, and control over APIs.
Deja paso a los resolvers: un nuevo enfoque para la ejecución de GraphQL
GraphQL Galaxy 2022GraphQL Galaxy 2022
16 min
Deja paso a los resolvers: un nuevo enfoque para la ejecución de GraphQL
GraphQL has made a huge impact in the way we build client applications, websites, and mobile apps. Despite the dominance of resolvers, the GraphQL specification does not mandate their use. Introducing Graphast, a new project that compiles GraphQL operations into execution and output plans, providing advanced optimizations. In GraphFast, instead of resolvers, we have plan resolvers that deal with future data. Graphfast plan resolvers are short and efficient, supporting all features of modern GraphQL.