🎧 New: AI-Generated Podcasts Turn your study notes into engaging audio conversations. Learn more

ilovepdf_merged (1).pdf

Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

01MASW: Seguridad web Seguridad web Fundamentos y mecanismos de seguridad del protocolo HTTP y HTTPS Máster Univ. en Desarrollo de Paco Gómez Ap...

01MASW: Seguridad web Seguridad web Fundamentos y mecanismos de seguridad del protocolo HTTP y HTTPS Máster Univ. en Desarrollo de Paco Gómez Aplicaciones y Servicios Web Curso 2023-2024 (Ed. Abril) Índice 1.-Protocolo HTTP 2.-Protocolo HTTPS 3.-HTTP vs HTTPS 4.-Certificados SSL 5.-Certbot 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW LAB01. JSON Server JSON SERVER MOCKAROO https://www.npmjs.co https://www.mockaroo.com m/package/json- / server RESTER PLUGIN https://chromewebstore.google.com/detail/rest er/eejfoncpjfgmeleakejdcanedmefagga?hl=es 07MASW LAB01. JSON Server 07MASW LAB02. Apache Server XAMPP Server https://www.apachefrie nds.org/es/index.html 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW Infraestructura de clave pública La infraestructura de clave pública (en inglés: public key infrastructure, PKI) es un conjunto de roles, políticas, hardware, software y procedimientos necesarios para crear, administrar, distribuir, usar, almacenar y revocar certificados digitales y administrar el cifrado de clave pública. El propósito de una PKI es facilitar la transferencia electrónica segura de información para diversas actividades de la red, como comercio electrónico, banca por Internet y correo electrónico confidencial. 07MASW Partes PKI En una operación criptográfica que use PKI intervienen conceptualmente como mínimo las siguientes partes: Un usuario iniciador de la operación. Unos sistemas servidores que dan fe de la ocurrencia de la operación y garantizan la validez de los certificados implicados en la operación (autoridad de certificación, Autoridad de registro y sistema de sellado de tiempo). Un destinatario de los datos cifrados/firmados/enviados garantizados por parte del usuario iniciador de la operación (puede ser él mismo). 07MASW Componentes de un PKI Autoridad de certificación (o, Autoridad de registro (o, en en inglés, CA, Certificate inglés, RA, Registration Authority) Authority) la encargada de emitir y revocar la responsable de verificar el enlace certificados. Es la entidad de entre los certificados (concretamente, confianza que da legitimidad a la entre la clave pública del certificado) relación de una clave pública con la y la identidad de sus titulares. identidad de un usuario o servicio. 07MASW Componentes de un PKI Los repositorios Son las estructuras encargadas de almacenar la información relativa a la PKI. Los dos repositorios más importantes son el repositorio de certificados y el repositorio de listas de revocación de certificados. En una lista de revocación de certificados (o, en inglés, CRL, Certificate Revocation List) se incluyen todos aquellos certificados que por algún motivo han dejado de ser válidos antes de la fecha establecida dentro del mismo certificado. 07MASW Componentes de un PKI La autoridad de validación La autoridad de sellado de (o, en inglés, VA, tiempo (o, en inglés, TSA, Validation Authority) TimeStamp Authority) es la encargada de firmar documentos es la encargada de comprobar la con la finalidad de probar que existían validez de los certificados antes de un determinado instante de digitales. tiempo. Usuarios finales Los usuarios y entidades finales son aquellos que poseen un par de claves (pública y privada) y un certificado asociado a su clave pública. 07MASW Componentes de un PKI 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW LAB03. Apache Server. HTTPS XAMPP Server https://www.apachefrie nds.org/es/index.html 07MASW LAB03. Apache Server. HTTPS 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW LAB04. Apache Server. Certificado local autofirmado 07MASW LAB04. Apache Server. Certificado local autofirmado mkcert https://github.com/FiloSottile/mkcert 07MASW 01MASW: Seguridad web Seguridad Web Seguridad Web en el cliente Máster Univ. en Desarrollo de Paco Gómez Aplicaciones y Servicios Web Curso 2023-2024 (Ed. Abril) Índice 1.-Introducción 2.-Cookies 3.-Sesiones 4.-Problemas de seguridad de cookies y sesiones 5.-Política de protección de los navegadores 6.-Ataques de seguridad 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW Una cookie es un fichero de datos que una página web le envía a tu ordenador cuando la visitas. Da igual si estás entrando a la web desde el ordenador o desde el móvil, siempre se solicitará el almacenamiento de la cookie. Tampoco importa si entras desde un navegador independiente o desde el navegador integrado en alguna herramienta o aplicación, también se solicitará la cookie. 07MASW 07MASW 07MASW 07MASW 07MASW 2-Cookies Tipos de Cookies Cookies de sesión Cookies Permanentes se elimina cuando el cliente se cierra, por En lugar de expirar cuando el cliente se que no se especificó una directiva cierra, las cookies permanentes expiran en Expires o Max-Age. Sin embargo, los una fecha específica (Expires) o tras un navegadores web pueden usar la periodo de tiempo específico (Max-Age). restauración de sesiones, lo que hace que la mayoría de las cookies de sesión sean permanentes, como si el navegador nunca se cerrara. 07MASW 07MASW 07MASW 07MASW 07MASW LAB01. PHP Cookie Manual PHP.NET https://www.php.net/m XAMPP anual/en/features.coo kies.php 07MASW ¿Alguna idea de cómo mejorar la seguridad de una cookie? LAB02. Laravel Cookie Instalacion Configuracion https://laravel.com/doc php artisan key:generate s/11.x/installation php artisan migrate Cookie en Response https://laravel.com/docs/11.x/responses#attac hing-cookies-to-responses 07MASW LAB01. Laravel Cookie Encriptacion https://laravel.com/docs/11.x/respon ses#cookies-and-encryption 07MASW 2-Cookies Directivas seguridad Cookies Secure Configuracion Laravel Una cookie segura sólo se envía al servidor con una petición cifrada sobre https://laravel.com/docs/11.x/sessi el protocolo HTTPS. Incluso con Secure, no debería almacenarse on#configuration nunca información sensible en la cookies, ya que son inherentemente inseguras y este flag no puede ofrecer protección real. A partir de Chrome 52 y Firefox 52, los sitios inseguros (http:) no pueden establecer cookies con la directiva Secure. 07MASW 07MASW 07MASW 07MASW LAB03. PHP Session Manual PHP.NET https://www.php.net/m XAMPP anual/en/features.coo kies.php 07MASW LAB03. PHP Session php.ini 07MASW LAB04. Laravel Manual PHP.NET https://laravel.com/doc s/11.x/session Almacenar info en sesion Recuperar info de sesion 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW LAB05. Ejemplo ataque Fijacion PHPSESSION 07MASW LAB05. Ejemplo ataque Fijacion PHPSESSION Manual PHP.NET https://www.php.net/manual/en/se ssion.security.ini.php 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW https://www.bbc.com/mundo/noticias- 07MASW 43472797 07MASW 07MASW 07MASW 07MASW 07MASW https://owasp.org/www-project-top-ten/ 07MASW 6-Atques de seguridad Access control. 01-OWASP El control de acceso aplica una Violación del principio de privilegio mínimo o política tal que los usuarios no denegación por defecto, donde el acceso solo debe pueden actuar fuera de los otorgarse para capacidades, roles o usuarios permisos previstos. Las fallas particulares, pero está disponible para cualquiera. generalmente conducen a la Eludir las comprobaciones de control de acceso divulgación no autorizada de Permitir ver o editar la cuenta de otra persona información, modificación o Elevación de privilegios. destrucción de todos los datos o a la realización de una función comercial fuera de los límites del usuario. Las vulnerabilidades comunes del control de acceso incluyen: 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW https://www.genbeta.com/actualidad/carrefour-sufre-ciberataque-servicios-financieros-que- expone-datos-personales-usuarios 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW 07MASW LAB06. Burp Suite. Proxy web Burp Suite Community edition https://portswigger.net/burp/communitydownload 07MASW LAB06. Burp Suite. Proxy web FoxyProxy. Firefox https://addons.mozilla.org/es/firefox/addon/foxyproxy- standard/ 07MASW LAB06. Burp Suite. Proxy web FoxyProxy. Firefox 07MASW LAB06. Burp Suite. Proxy web 07MASW 01MASW: Seguridad Web Seguridad web Seguridad Web en el servidor Máster Univ. en Desarrollo de Paco Gómez Aplicaciones y Servicios Web Curso 2023-2024 (Ed. Abril) Índice 1.- Encriptación 2.- Gestión de certificados 3.- Firma digital de documentos 4.- Dudas 01MASW 17/01/2024 1 Encriptación 01MASW 17/01/2024 1. Encriptación Algoritmos clave simétrica Se basa en el uso de una única clave secreta necesaria para cifrar y descifrar los mensajes entre el emisor y el receptor. Tanto el emisor como el receptor deben ponerse de acuerdo para compartir la misma clave secreta. El emisor, cifra los mensajes usando la clave secreta y el receptor los descifra utilizando la misma clave secreta. Los ataques por fuerza bruta son el enemigo de los algoritmos de criptografía simétrica. La fuerza de los mismos depende directamente de la complejidad del algoritmo, y también de la longitud de la clave utilizada. 01MASW 17/01/2024 1. Encriptación Algoritmos clave simétrica Características: - A partir del mensaje cifrado, no es posible obtener la clave de cifrado ni tampoco el mensaje en claro por ningún método. - Si conocemos el mensaje en claro y el cifrado, será necesario gastar más tiempo y más dinero en obtener la clave para acceder al mensaje en claro, que el posible valor que pueda tener la información a la que se consiga acceder. Los factores más importantes en la criptografía simétrica es proteger la clave secreta o contraseña junto con la complejidad de la misma. Algunos ejemplos de longitud de claves: - Una clave de 56 bits de longitud tiene como posibles valores 2^56 = 72057594037927936 - Una clave de 128 bits de longitud tiene como posibles valores 2^128 = 340282366920938463463374607431768211456 01MASW 17/01/2024 1. Encriptación Algoritmos clave simétrica Ejemplos de algoritmos simétricos conocidos: - DES (Data Encryption Standard): cifrado en bloque con una longitud de 64 bits por bloque. Utiliza claves de 56 bits de longitud. Con hardware específico es posible obtener la clave mediante ataques de fuerza bruta debido a la escasa longitud de la clave. - 3DES: versión mejorada de DES. Utiliza tres claves diferentes sin relación entre ellas para agrandar la clave sin modificar el algoritmo de cifrado. Presenta como inconveniente que resulta más lento que otros algoritmos. Actualmente el 3DES sigue siendo utilizado, pero cada vez más está siendo sustituido por el algoritmo AES que ha demostrado ser muy robusto y más rápido. Ejemplo de utilización en SSL/TLS. - AES (Advanced Encryption Standard): es un algoritmo de cifrado por bloques. El tamaño fijo del bloque es de 128 bits. La longitud de la clave se puede elegir, y tenemos disponible 128,192 y 256 bits, siendo la longitud de 128 bits el estándar. Utilizado en SSL/TLS. 01MASW 17/01/2024 1. Encriptación Algoritmos clave simétrica Ventajas: - Son muy rápidos, requieren de menos recursos informáticos que otras formas de cifrado. - Simples y fáciles de utilizar. Desventajas: - La distribución de la clave secreta o contraseña entre los usuarios debe realizarse a través de un canal seguro. - Si se disponen de un gran número de claves resulta un problema la gestión de las mismas. Si tenemos un número n de personas que requieren comunicarse entre sí, serán necesarias n(n-1)/2 claves diferentes para que se puedan comunicar entre sí todas las personas. 01MASW 17/01/2024 1. Encriptación Hashing El hashing es un método criptográfico que transforma registros de datos y caracteres de cualquier longitud en valores hash compactos y fijos. Ofrece más seguridad que el cifrado, ya que los valores hash no pueden volver a convertirse en valores originales sin una clave. El hashing es especialmente importante para la gestión y la seguridad de las bases de datos, los datos de los usuarios, la gestión de las contraseñas y la autentificación de los accesos. 01MASW 17/01/2024 LAB01. Ejemplo PHP AES256 hash https://www.php.net/manual/es/function.hash.php openssl-random-pseudo-bytes https://www.php.net/manual/es/function.openssl- random-pseudo-bytes.php openssl-random-pseudo-bytes https://www.php.net/manual/es/function.openssl- encrypt 07MASW 1. Encriptación Ejemplo PHP AES256 El vector de la inicialización (iv) es un valor aleatorio al azar, gracias a su utilización se consigue que mensajes idénticos cifrados bajo la misma clave secreta aparezcan como un texto cifrado completamente diferente. El vector de la inicialización (iv) se almacena junto al mensaje cifrado. 01MASW 17/01/2024 1. Encriptación Algoritmos clave asimétrica Su principal característica es que no se basa en una única clave sino en un par de ellas: clave pública y privada. Todo el contenido que se haya cifrado con la clave pública podrá ser descifrado mediante la clave privada, y viceversa, todo contenido cifrado con la clave privada podrá ser descifrado mediante la clave pública.. 01MASW 17/01/2024 1. Encriptación Algoritmos clave asimétrica La criptografía asimétrica proporciona otras propiedades adicionales a la confidencialidad como: - Autenticidad: el emisor es quien dice ser. La firma en origen y destino es la misma. - Integridad: el mensaje no ha sido alterado. Lo obtenido y lo recibido es igual por lo que el mensaje original no ha sido alterado por un tercero. - No repudio: el emisor no puede negar haber enviado el mensaje al receptor. La firma digital no varía. Las posibles combinaciones sobre un mensaje son las siguientes: - Mensaje + clave pública = Mensaje cifrado. - Mensaje cifrado + clave privada = Mensaje descifrado - Mensaje + clave privada = Mensaje firmado - Mensaje firmado + clave pública = Autenticación 01MASW 17/01/2024 1. Encriptación Algoritmos clave asimétrica Ventajas - Elimina uno de los principales problemas de la criptografía simétrica: el intercambio de la clave. La distribución de claves es más fácil y segura, la clave pública puede ser conocida por todos los usuarios del sistema. - Alto nivel de confidencialidad, integridad y garantiza la no alteración del mensaje. - Se pueden emplear para ser utilizados en firmas digitales. Desventajas - Son más lentos que los algoritmos simétricos. - Las claves deben ser de mayor tamaño que las simétricas. - El mensaje cifrado será de mayor longitud que en los algoritmos simétricos. Habitualmente se utiliza la combinación de algoritmos asimétricos y simétricos, para conseguir las ventajas de ambos tipos de algoritmos. Por ejemplo, dicha combinación es utilizada en los siguientes protocolos: - IPSec o OpenVPN para las redes privadas virtuales. - HTTPS para las conexiones web seguras. - Conexiones SFTP/FTPES. 01MASW 17/01/2024 1. Encriptación Algoritmos clave asimétrica Ejemplos de algoritmos asimétricos: - RSA: sus siglas provienen de las iniciales de sus tres creadores, Rivest, Shamir y Adleman en 1997. La seguridad de este algoritmo radica en el problema de la factorización de números enteros muy grandes. Algunas características muy importantes de RSA es la longitud de clave, actualmente como mínimo se debe utilizar una longitud de 2048 bits, aunque es recomendable que sea de 4096 bits o superior para tener una mayor seguridad. - DSA (Digital Signature Algorithm): Se utiliza ampliamente como un algoritmo de firma digital, es actualmente un estándar, pero DSA no se utiliza para cifrar datos, solamente como firma digital ya que requiere de mucho más tiempo de cómputo que RSA. Este algoritmo se utiliza ampliamente en las conexiones SSH para comprobar la firma digital de los clientes. 01MASW 17/01/2024 1. Encriptación Algoritmos resumen (hash) Los algoritmos o funciones hash transforman cualquier dato de entrada en una serie de caracteres de salida, con una longitud fija o variable, dependiendo del algoritmo hash que se utilice. Los algoritmos de hash solamente funcionan en una única dirección: podemos generar el hash de cualquier contenido, pero con el hash no hay forma de recuperar el contenido inicial que le pasamos a la función hash. Una colisión de hash es una situación que se produce cuando dos entradas distintas a una función de hash producen la misma salida. 01MASW 17/01/2024 1. Encriptación Algoritmos resumen (hash) Utilidades: - Herramienta para proteger la integridad, se comprueban los hashes creados antes y después de la transmisión de datos, de esta manera, si los hashes son idénticos implica que la comunicación ha sido segura y que los datos no han sido alterados por un tercero. - Evitar almacenar contraseñas en BD para no guardarlas en texto claro en base de datos. No se almacena la contraseña del usuario, sino que en su lugar se almacena el hash de la contraseña en BD. Para verificar que el usuario ha introducido correctamente la contraseña se aplica el algoritmo hash a la contraseña introducida por el usuario y se compara con el hash almacenado en BD, si es igual, la contraseña es correcta, si es diferente, la contraseña es incorrecta. - Identificación de contenidos: utilizar el valor hash de un contenido multimedia para identificar ese contenido independientemente de su nombre o ubicación. Ejemplo: Bitorrent. - Detectar documentos protegidos por derechos de autor y crear listas negras. 01MASW 17/01/2024 1. Encriptación Algoritmos resumen (hash) Ejemplos: - SHA2-256: algoritmo muy eficiente y tiene una alta resistencia a colisiones, algo muy importante para mantener la seguridad de este algoritmo de hash. La longitud del hash siempre es igual, no importa lo grande que sea el contenido que uses para generar el hash: ya sea de sola una letra o una imagen ISO de 4GB de tamaño, el resultado siempre será una sucesión de 40 letras y números. - SHA2-384: versión más segura que el SHA2-256, puesto que se aplican más rondas de operaciones y también puede aplicarse sobre una información más extensa. Este algoritmo de hash se suele utilizar para comprobar la integridad de los mensajes y la autenticidad en las redes privadas virtuales. Un aspecto negativo, es que es algo más lento que SHA2-256, pero en determinadas circunstancias puede ser una muy buena opción usar este. - MD5, SHA-0 y SHA-1: Actualmente se han encontrado colisiones y han sido declarados como no seguros por lo que no es recomendable su utilización. Principalmente se desaconseja totalmente su uso en contraseñas, su problema es debido a que la capacidad actual de computación es bastante alta por lo que por ejemplo a un ordenador actual le costaría menos de 1 minuto generar una tabla con todos los hashes posibles si las contraseñas son de 6 dígitos alfanuméricos en minúsculas. Una de las ventajas que presentan es que son muy rápidos frente a otros algoritmos. - Bcrypt: es un algoritmo diseñado específicamente para realizar el hash contraseñas. Permite agregar un "salt" al proceso de generación del hash, por lo que lo hace más inmune a ataques de diccionario, recomendado para el uso en contraseñas. 01MASW 17/01/2024 1. Encriptación Ejemplo hash Bcrypt Bcrypt es una función de hash "lento", lo que hace que los ataques de fuerza bruta con listas de contraseñas comunes sean mucho más difíciles. Bcrypt está disponible como librería para los lenguajes más populares como PHP, Java, NodeJS... Estructura: $2y$: El identificador del algoritmo hash (bcrypt). 10: Factor de coste (2^10= 1024 rondas). Salt de 16 bytes (128 bits), codificado en base64 con 22 caracteres. Hash de 24 bytes (192 bits), codificado en base64 con 31 caracteres 01MASW 17/01/2024 LAB02. Ejemplo bcrypt Password_hash https://www.php.net/manual/es/function.password- hash 07MASW 1. Encriptación Ejemplo hash Bcrypt PHP 01MASW 17/01/2024 1. Encriptación Ejemplo hash Bcrypt PHP 01MASW 17/01/2024 1. Encriptación Ejemplo hash Bcrypt Laravel Laravel por defecto utiliza el algoritmo Bcrypt tanto para el registro como para la autentificación de usuarios. También admite los algoritmos Argon2 y sus derivados, aunque requiere como mínimo el uso de PHP 7.2.0. La selección del tipo de algoritmo que deseamos utilizar y las opciones de configuración de los mismos se realizan desde el fichero config/hashing.php de Laravel 01MASW 17/01/2024 1. Encriptación Ejemplo hash Bcrypt Laravel Se utiliza el método Hash::make ($password) para obtener el hash del password con el algoritmo que hayamos establecido en el fichero de configuración. Una vez obtenido el hash, éste es almacenado en la columna "password" de la tabla users de Laravel. 01MASW 17/01/2024 1. Encriptación Ejemplo hash Bcrypt Laravel Se utiliza el método Hash::check($password, $hashedPassword) para verificar que el password enviado por el usuario es el mismo que el password almacenado en Base de datos. En caso de utilizar el sistema de login incluido por defecto en Laravel (LoginController), no necesitamos utilizar este método ya que dicho controlador se encarga de llamarlo por nosotros. 01MASW 17/01/2024 LAB03. Ejemplo ataque con diccionario y Burp Suite Repo de passwords https://github.com/danielmiessler/SecLists/tree/master 07MASW LAB03. Ejemplo ataque con diccionario y Burp Suite Repo de passwords https://github.com/danielmiessler/SecLists/tree/master 07MASW 1. Encriptación Codificación Base64 Base64 es un algoritmo de codificación que permite transformar Esto es un texto de la asignatura de cualquier carácter de cualquier idioma en un alfabeto que consta Seguridad Web de la VIU de letras, dígitos y signos latinos. Su alfabeto consta de los siguientes 64 caracteres: Codificación Base 64 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx yz0123456789+/ RXN0byBlcyB1biB0ZXh0byBkZSBsYS Utiliza el carácter '=' como sufijo especial para rellenar. Bhc2lnbmF0dXJhIGRlIFNlZ3VyaWRhZ CBXZWIgZGUgbGEgVklV Muy utilizado para transmitir información entre sistemas y evitar problemas de codificación. El algoritmo de codificación Base64 no es un algoritmo de Herramienta Online para codificar y descodificar cifrado, por lo que nunca debemos utilizarlo para cifrar (proteger) datos ya que se decodifica fácilmente. https://www.base64encode.org/ https://www.base64decode.org/ Presenta como desventaja que aumenta el tamaño de la cadena o archivo original un 33% debido a que reemplaza cada 3 bytes 01MASW por 4 bytes. 17/01/2024 1. Encriptación JWT (JSON Web Token) JSON Web Token (JWT) es un estándar abierto (RFC-7519) basado en JSON para crear un token que sirva para enviar datos entre aplicaciones o servicios y garantizar que sean válidos y seguros. Las primeras dos partes (header y payload) son strings en base64 creados a partir de dos JSON. La tercera parte (signature) toma las otras dos partes y utiliza un algoritmo de hash (normalmente SHA-256) para calcular su hash. JWT se puede usar en prácticamente cualquier lenguaje y existen librerías disponibles para su manejo. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwidX El siguiente enlace se puede consultar su NlciI6IkJydWNlIFdheW5lIiwiaWF0IjoxNTE2MjM5MDIyfQ.l0ETBqpw8HmjyF disponibilidad dependiendo del WPuV-Z7CJBSP7GFokv0GNzAVD3_AE lenguaje: https://jwt.io/libraries 01MASW 17/01/2024 1. Encriptación JWT (JSON Web Token) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwidX NlciI6IkJydWNlIFdheW5lIiwiaWF0IjoxNTE2MjM5MDIyfQ.l0ETBqpw8HmjyF WPuV-Z7CJBSP7GFokv0GNzAVD3_AE Header alg: indica el algoritmo usado para la signature (firma). typ: define el tipo de token, en este caso JWT. Payload sub (subject): Identifica el objeto o usuario en nombre del cual fue emitido el JWT debe ser único en el ámbito user: Propiedad personalizada, podemos añadir todas las propiedades que consideremos necesarias para el ámbito de nuestra aplicación. iat (issued at): Indica la marca temporal en segundos que indica de cuando fue creado el token. Signature Firma que verifica la integridad del header y el payload. 01MASW 17/01/2024 1. Encriptación JWT (JSON Web Token) El payload de un JWT es un JSON que puede tener cualquier propiedad que decidamos, aunque hay una serie de nombres de propiedades definidos en el estándar que NO debemos utilizar. - Creador (iss): Identifica a quien creo el JWT - Razón (sub): Identifica el objeto o usuario en nombre del cual fue emitido el JWT. - Audiencia (aud): Identifica quien se supone que va a recibir el JWT. Un ejemplo puede ser web, android o ios. - Tiempo de expiración (exp): Una fecha que sirva para verificar si el JWT está vencido de forma que obligará al usuario/aplicación a volver a autenticarse. - No antes (nbf) - Indica desde que momento se va a empezar a aceptar un JWT. - Creado (iat): Indica cuando fue creado el JWT. - ID (jti) : Un identificador único para cada JWT 01MASW 17/01/2024 1. Encriptación JWT (JSON Web Token) JWT ejercicio 1: Utiliza el Debugger Online https://jwt.io para visualizar el contenido del siguiente Token y responde a las siguientes preguntas: ¿Cuál es el nombre del usuario? ¿Qué rol tiene el usuario? ¿Cuál es la fecha de creación del token en hora española? Utiliza como signature = VIU eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAwMCIsIm5hbWUiOiJSYXVsIiwicm9sZSI6ImFkb WluIiwiaWF0IjoxNjYyNjUyNjI4fQ.33A196muvl56d9KeFN-TY0R76ixOzTOA8f8XXRgt1Iw 01MASW 17/01/2024 LAB03. Ejemplo JWT Token con FastApi 07MASW 2 Gestión de certificados 01MASW 17/01/2024 2. Gestión de certificados Certificados SSL Recordemos el proceso que se inicia cuando accedemos a un sitio Web con HTTPS: 1. El navegador cliente intenta conectarse a un sitio web (servidor web) protegido y configurado mediante un certificado SSL, solicitando que el servidor web se identifique. 2. En respuesta, el servidor web envía al navegador una copia de su certificado SSL firmado por una CA que contiene la clave pública. 3. El navegador cliente verifica si el certificado SSL es confiable. En caso afirmativo, genera una clave de sesión simétrica y la cifra con la clave pública contenida en el certificado ssl enviado por el servidor en el paso 2. 4. El servidor descifra la clave de sesión simétrica mediante el uso de la clave privada asociada a su certificado SSL. 5. Se inicia el intercambio de datos de forma segura mediante el cifrado simétrico utilizando la clave de sesión simétrica compartida. 01MASW 17/01/2024 2. Gestión de certificados Certificados SSL Los certificados son emitidos por una Autoridad de Certificación (CA). Una CA emitirá un certificado después de haber confirmado que se posee el dominio que se desea registrar en el certificado. Un certificado SSL es un archivo de datos, generalmente con la extensión crt, con una estructura similar a la siguiente: -----BEGIN CERTIFICATE----- MIIGoDCCBYigAwIBAgIQYiDm48IeLBvT+kurLjEmjDANBgkqhkiG9w0BAQsFADCB izELMAkGA1UEBhMCRVMxFjAUBgNVBAgTDUlsbGVzIEJhbGVhcnMxEDAOBgNVBAcT B01hbmFjb3IxJzAlBgNVBAoTHlNvbHVjaW9uZXMgQ29ycG9yYXRpdmFzIElQLCBT TDEpMCcGA1UEAxMgRG9uIERvbWluaW8gLyBNckRvbWFpbiBSU0EgRFYgQ0EwHhcN........... MEcGA1UdHwRAMD4wPKA6oDiGNmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9Eb25E b21pbmlvTXJEb21haW5SU0FEVkNBLmNybDB5BggrBgEFBQcBAQRtMGswQgYIKwYB BQUHMAKGNmh0dHA6Ly9jcnQudXNlcnRydXN0LmNvbS9Eb25Eb21pbmlvTXJEb21h WBqRPfmPovZcrJAlmAJoNInmCe0= -----END CERTIFICATE----- Ejemplo de contenido certificado SSL 01MASW 17/01/2024 2. Gestión de certificados Certificados SSL El contenido de un certificado SSL no es legible de un simple vistazo, pero podemos utilizar el siguiente comando de Linux para mostrar su información procesada: openssl req -text -noout -in example.crt 01MASW 17/01/2024 2. Gestión de certificados Certificados SSL Autoridad de certificación (CA) que genera y firma el certificado. Marca de tiempo con la fecha y hora de firma del certificado. 01MASW 17/01/2024 2. Gestión de certificados Certificados SSL Firma del certificado y algoritmo utilizado para la firma del certificado por la autoridad de certificación CA. 01MASW 17/01/2024 2. Gestión de certificados Generación CSR y clave privada Para solicitar un certificado SSL a una autoridad de certificación (CA) es necesario un fichero CSR (Certificate Signing Request) cuyo contenido es un bloque de texto cifrado. Puede ser generado en el servidor donde el certificado SSL será instalado mediante línea de comandos, o bien se puede generar utilizando un generador de CSR Online como ejemplo: https://www.dondominio.com/products/ssl/tools/csr-create/ Comando Linux para generar un fichero CSR desde línea de comandos: openssl req -new -newkey rsa:2048 -nodes -keyout example.key -out example.csr 01MASW 17/01/2024 2. Gestión de certificados Generación CSR y clave privada Country Name (C): El código del país en el que se encuentra su organización. State or Province Name (S): La provincia/región en la que se encuentra la organización. No debe abreviarse. Locality Name (L): La ciudad en la que se encuentra la organización. No debe abreviarse. Organization Name (O): El nombre legal de tu empresa u organización. Organizational Unit Name (OU): El departamento de tu organización que gestiona el certificado. Common name (CN): El nombre de dominio (o subdominio) de tu sitio web, deberá coincidir exactamente con el dominio que escribirán los visitantes al acceder a la web. Utilizaremos el * seguido del dominio principal cuando se trate de certificados de tipo Wildcard. Wilcard: *.example.com. Dominio único: www.example.com Subdominio: secure.example.com Email Address: La dirección de correo electrónico que se utilizará para contactar con tu organización en caso de ser necesario. Challenge password: Contraseña opcional que será necesaria para reinstalar o revocar el certificado, no se suele utilizar. 01MASW 17/01/2024 2. Gestión de certificados Generación CSR y clave privada Una vez completado todos los campos solicitados por el comando automáticamente se generan dos ficheros: example.csr: fichero para enviar a la Autoridad de Certificación (CA), suele ser generado en formato PEM codificado en base64. example.key: clave privada que debemos guardar de forma segura y no compartir con nadie. -----BEGIN CERTIFICATE REQUEST----- MIIC6jCCAdICAQAwgaQxCzAJBgNVBAYTAkVTMREwDwYDVQQID AhWYWxlbmNpYTER MA8GA1UEBwwIVmFsZW5jaWExGDAWBgNVBAo MD01pIEVtcHJlc2EgUy5MLjEZMBcG A1UECwwQRGVwYXJ0YW1lbnRvIFRJQzEWMBQGA1UEAwwNKi5leGFtcGxlLmNvbTEi MCAGCSqGSIb3DQEJARYTc3VwcG9ydEBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAKD12ZAHcYf+L2n42wwkM6O0vC9uge4Kd9n3HOvr NLzbbGs8x6QBfAsOGcc3kLEPTa+YW9YVwWcdciFntrpGPeyXws8+73WABBD+BXpi hKj7Zhk8dTrzqeeq25G8rRDRBH3pDn2lHHDPCTgT1tTgrL9CmnUjbam0Kc2BuYAR hTFRMXA4KNjCoji6WpHPqrLQVGx23Q4WFHSD0p1nt2uuO9buXe+i1fBeRkhqJEXU ayycd3bhlj0fWPFbhXuLRY1gErZSx5HbLn8nlz+TF+S2xfGM0KCg5WlXxlo91LOQ fAWAw5E0m0Z6MhlN7unR6QXZBsDtc56KlwgwbEYrXGw+MEUCAwEAAaAAMA0GCSqG SIb3DQEBCwUAA4IBAQBkeXptc32Dz184PlicsCmgvnh/WR521JB5efdD9zVxEj+Q 8iR/CF4xNsOtLKK1LbEceADEzU40p6EGMxcveaBifxMJ9XeUeyUISEjJksiGRVtF VBSS9Wzk9rxYd9nnGNqkyIXxLmoGaJvILNJCKm+F0insu8sSuU+OS04YSxVui+zD zywSM2d90vQ/ZtH3oWzEPuGgOk3yshm0ImSOGQ4J4wa+WhP9cypb9Z3QFPaRoj+m dxiqmHQUUUhT9K6DxzHp6oD7Vi5TIoh+5P9z62LGLqWRoVTbW80rZsoJGlT3/z/N KK7OhGYCjpSOG8S7alapuwaOAPH50/J1cBGB4xBB -----END CERTIFICATE REQUEST----- Ejemplo fichero CSR 01MASW 17/01/2024 2. Gestión de certificados Ejemplos de autoridades de certificación (CA) Digicert: https://www.digicert.com/es/ Comodo: https://ssl.comodo.com Thawte: https://www.thawte.com Don Dominio / MrDomain RSA DV CA: https://www.dondominio.com 01MASW 17/01/2024 2. Gestión de certificados Generación de certificado auto firmado Puede ser interesante disponer de un certificado ssl gratuito para entornos de desarrollo o pruebas. Una manera fácil es mediante un certificado auto firmado. Con el uso de este tipo de certificados se muestra un aviso en el navegador Web indicando que no es válido y que supone un riesgo de seguridad. No obstante, es posible aceptar y continuar con la navegación normal como si tratará de un certificado firmado por una CA con el mismo comportamiento. Generación CSR y clave privada openssl req -new -newkey rsa:2048 -nodes -keyout example.key -out example.csr Generación del certificado autofirmado con validez para 365 días openssl x509 -req -days 365 -in example.csr -signkey example.key -out example.crt Validación del que certificado se ha generado correctamente openssl x509 -subject -issuer -enddate -noout -in example.crt 01MASW 17/01/2024 2. Gestión de certificados Generación de certificado auto firmado Importante: Restringir los permisos de la clave privada (example.key) como medida de seguridad, para ello establecemos que el propietario sea el usuario del servidor web y que solo tenga permisos de lectura. chown apache example.key chmod 400 example.key 01MASW 17/01/2024 2. Gestión de certificados Generación de certificado auto firmado Aviso de seguridad que muestra el navegador web cuando utilizamos un certificado ssl auto firmado: 01MASW 17/01/2024 2. Gestión de certificados Instalación certificado servidor Web Apache Puerto por defecto para HTTPS (443) ServerName www.example.com DocumentRoot "/var/www/html/example" SSLEngine: Activación del motor del protocolo SSL/TLS. SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLProtocol: Protocolos admitidos, todos excepto SSLv2 y SSLv3 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA debido a que son inseguros y obsoletos. SSLOptions +StdEnvVars SSLCipherSuite: Conjunto de algoritmos de cifrado disponibles durante la fase de negociación con el cliente. MEDIUM = Todos los algoritmos con 128 bit de encriptación. SSLOptions +StdEnvVars HIGH = Todos los algoritmos que usan Triple-DES Excluimos aquellos que no son seguros o están obsoletos mediante el SSLCertificateFile /etc/httpd/conf.d/certs/example.crt carácter "!". SSLCertificateKeyFile /etc/httpd/conf.d/certs/example.key SSLCACertificateFile /etc/httpd/conf.d/certs/intermediate.crt SSLCertificateFile: Ruta donde se encuentra el certificado del dominio proporcionado por la CA. ErrorLog logs/example_ssl_error.log CustomLog logs/example_ssl_access.log common SSLCertificateKeyFile: Ruta donde se encuentra la clave privada obtenida durante la generación del CSR, no se comparte con nadie y Options -Indexes Options Includes se debe proteger. Options FollowSymLinks Options SymLinksIfOwnerMatch SSLCACertificateFile: Certificado intermedio proporcionado por la AllowOverride All CA al obtener el certificado CRT. 01MASW 17/01/2024 2. Gestión de certificados Instalación certificado servidor NGINX listen: Puerto por defecto para HTTPS (443) ssl_protocols: Protocolos admitidos. ssl_ciphers: Conjunto de algoritmos de cifrado disponibles durante la fase de negociación con el cliente. server { listen 443 ssl; ssl_certificate: Ruta donde se encuentra el certificado del dominio server_name www.example.com; CRT proporcionado por la CA. ssl_certificate /etc/nginx/ssl/example.crt; ssl_certificate_key /etc/nginx/ssl/example.key ssl_certificate_key: Ruta donde se encuentra la clave privada ssl_protocols TLSv1 TLSv1.1 TLSv1.2; obtenida durante la generación del CSR. ssl_ciphers HIGH:!aNULL:!MD5;... Para añadir un certificado intermedio de la CA, se deberá concatenar el } certificado intermedio al certificado CRT en un único fichero. Para ello podemos ejecutar el siguiente comando mediante el siguiente comando: cat example.crt intermediate.crt > example_chained.crt De forma que la directiva para cargar el certificado CRT junto con el certificado intermedio será la siguiente: 01MASW ssl_certificate /etc/nginx/ssl/example_chained.crt 17/01/2024 2. Gestión de certificados Certbot Certbot es una herramienta de código libre que facilita la instalación de certificados SSL gratuitos de la autoridad de certificación Let´s Encrypt para los servidores web y sistemas operativos más utilizados. Requisitos: El sitio Web debe ser accesible públicamente en el puerto 80 a través del dominio del SSL que se desea solicitar. Acceso a través línea de comandos (SSH). Permisos para ejecutar comandos con sudo. Características: Utiliza certificados Let's Encrypt con una validez de 3 meses. El certificado se renueva automáticamente cada 60 días mediante la inclusión de una tarea programada (Cron job). Validación únicamente a nivel de dominio. 01MASW 17/01/2024 2. Gestión de certificados Certbot Desde su página oficial ofrecen una guía de instalación detallada simplemente seleccionando el software (servidor web o panel de control) y el sistema operativo, por lo que resulta sencillo utilizar este tipo de certificados de forma gratuita. 01MASW https://certbot.eff.org 17/01/2024 3 Firma digital de documentos 01MASW 17/01/2024 3. Firma digital de documentos Firma digital La firma electrónica o digital es un conjunto de datos electrónicos que acompañan o que están asociados a un documento electrónico cuyas características son: Identificar al firmante de manera inequívoca (autenticación). Asegurar la integridad del documento firmado (integridad). El documento firmado es el mismo que el original y que no ha sufrido ningún tipo de manipulación o modificación por parte de un tercero. Asegurar el no repudio del documento firmado, de forma que el firmante no puede decir que no ha firmado el documento. Para firmar un documento es necesario disponer de un certificado digital, que es un documento digital oficial que contiene los datos identificativos de una persona u organización. 01MASW 17/01/2024 3. Firma digital de documentos Certificado digital El certificado digital es un documento electrónico expedido por una Autoridad de Certificación e identifica a una persona (física o jurídica) con un par de claves. Contiene la información necesaria para firmar electrónicamente e identificar a su propietario con sus datos: nombre, NIF, algoritmo y claves de firma, fecha de expiración y organismo que lo expide. Existen dos claves, la clave privada y clave pública, y trabajan de forma complementaria. Lo que cifra una clave sólo lo puede descifrar o decodificar con la otra. La clave pública se puede repartir o enviar a otros usuarios con el objetivo de que puedan cifrar mensajes que solo pueden ser descifrados con la clave privada. La clave privada nunca debe ser compartida y debe ser protegida por el firmante. 01MASW 17/01/2024 3. Firma digital de documentos 1. El usuario dispone de un documento electrónico (pdf, imagen, doc...) y de un certificado digital que le pertenece e identifica. Proceso firma digital 2. La aplicación para la firma realiza un resumen (hash) del documento. Este resumen es único y cualquier modificación del documento implica también una modificación del resumen. 3. La aplicación de firma utiliza la clave privada para cifrar el resumen (hash) del documento, además se añade la clave pública del certificado digital del firmante generando la firma electrónica. 4. La aplicación crea otro documento electrónico que contiene el documento original más la firma electrónica generando el documento firmado. 5. Para verificar la autenticidad del documento se usa la clave pública para desencriptar el resumen (hash) cifrado con la clave privada. Posteriormente calcula un nuevo resumen (hash) para el documento. De esta forma puede comparar el resumen (hash) calculado con el hash desencriptado; si coinciden, el documento no ha sido modificado. Asimismo, el programa valida que la clave publica usada en la firma pertenece al nombre que lo ha firmado. 01MASW 17/01/2024 3. Firma digital de documentos Herramientas de firma de documentos Aplicación de escritorio AutoFirma: https://firmaelectronica.gob.es/Home/Descargas.html Documentos PDFs Adobe Reader: https://www.adobe.com/es/acrobat/pdf-reader.html Aplicación Online Valide: https://valide.redsara.es/valide/ 01MASW 17/01/2024 3. Firma digital de documentos Ejemplo firma con Adobe Reader 1. Abrir Adobe Reader y buscar una opción llamada Utilizar un certificado. 2. En la barra de herramientas de la parte superior, debemos seleccionar la opción Firmar digitalmente. 01MASW 17/01/2024 3. Firma digital de documentos Ejemplo firma con Adobe Reader 3. Se muestra un listado de los certificados digitales instalados en el ordenador, seleccionamos con el que deseamos firmar el documento. 4. Se muestra una previsualización de la firma y nos ofrece la opción de bloquear el documento para evitar modificaciones posteriores. 01MASW 17/01/2024 3. Firma digital de documentos Ejemplo firma con Adobe Reader 5. Nos solicita la contraseña con la cual se encuentra protegido el certificado digital, dicha contraseña se establece durante el proceso de instalación del certificado en el ordenador. 6. Se genera un nuevo documento que incluye la firma con los datos identificativos del firmante y la fecha de su realización. 01MASW 17/01/2024 3. Firma digital de documentos Ejemplo firma con Adobe Reader Ahora cualquiera que consulte el documento puede identificar al firmante y verificar si la firma es válida. Si se modifica el documento después de la firma, el resumen (Hash) del documento cambiará por lo que la validación de la firma ya no será correcta. 01MASW 17/01/2024 4. Dudas 01MASW Universidad Internacional de Valencia Seguridad Web Seguridad Web en las Bases de Datos 17/01/2024 Paco Gómez Curso 2023-2024 (Ed. Abril) Índice 1.- Inyección SQL 2.- Validación de formularios 3.- Políticas de protección de datos sensibles 4.- Dudas 01MASW 17/01/2024 1 Inyección SQL 01MASW 17/01/2024 1. Inyección SQL ¿Qué es la inyección SQL? La inyección de SQL es un tipo de ciberataque encubierto en el cual un intruso/hacker inserta código malicioso en un sitio web con el objetivo de romper o esquivar las medidas de seguridad y acceder a datos protegidos almacenados en una base de datos relacional comprometiendo la seguridad y privacidad de los usuarios. Se estima que más de la mitad de todos los ciberataques hoy en día aprovechan las técnicas de inyección SQL. Debido a que la gran mayoría de aplicaciones web están construidas bajo una base de datos relacional. Ejemplos bases de datos relacionales son: - Mysql. - PostgreSql. - Oracle. - Microsoft SQL Server. El término SQL es un acrónimo en inglés que procede de Structured Query Language (Lenguaje de Consulta estructurado). Se trata de un lenguaje diseñado para administrar y recuperar información de sistemas de gestión de bases de datos relacionales. A continuación se muestra un ejemplo de una consulta SQL: SELECT * FROM users; 01MASW 17/01/2024 1. Inyección SQL Tipos de ataques de inyección SQL Evitar ataques de inyección SQL es una tarea que le corresponde principalmente a los desarrolladores de las aplicaciones web. Debido a que son los encargados de mitigar las vulnerabilidades que puedan existir y brindar una protección adecuada sobre los datos almacenados en el servidor. Basándonos en la forma en que se realizan los ataques de inyección SQL podemos clasificarlos: - Ataque por unión: esta técnica de inyección permite a los atacantes extraer datos de la base de datos al extender los resultados de la consulta original. Hace uso del operador UNION SQL para integrar dos instrucciones SELECT en un solo resultado, luego lo devuelve como parte de la respuesta. De forma que el atacante puede acceder a datos sensibles a los que no debería tener acceso. - Ataque por error: es el ataque más común y el más fácil de explotar ya que es la propia aplicación Web la que va indicando los errores de la base de datos al realizar las diferentes consultas. El atacante realiza peticiones no válidas de forma intencionada con el objetivo de forzar mensajes de error. Con la información proporcionada por dichos errores se puede obtener información relevante de base de datos como, por ejemplo: estructura, nombres de tablas, campos e incluso los datos almacenados. - Ataque ciego (blind): se utiliza cuando ninguno de los ataques anteriores funciona ya que es el más complejo y avanzado. Se debe realizar preguntas a la base de datos mediante booleanos, es decir, verdadero o falso, sobre todo aquello que se necesite saber. Se di stinguen dos subtipos: - Basado en condicionales: si la consulta está bien, mostrará los resultados. Sino no mostrará nada. - Basado en tiempo: si la consulta es correcta devolverá los resultados a los n segundos. En caso contrario, no mostrará nada. 01MASW 17/01/2024 1. Inyección SQL Consecuencias La gran mayoría de vulnerabilidades por inyección SQL surgen porque la mayoría de los formularios web no están construidos de forma que puedan impedir el ingreso de información adicional a través de sus campos. De esta forma los atacantes se aprovechan de los campos de entrada del formulario para enviar sus propias sentencias SQL a la base de datos. Las consecuencias de un ataque de inyección SQL pueden ser: - Daños a la aplicación: un atacante puede borrar o modificar la base de datos y producir el fallo o corrupción de la base de datos produciendo el fallo completo de la aplicación. - Robo o filtración de datos: muchos ataques tienen por objetivo robar información confidencial como secretos comerciales, información sensible, propiedad intelectual e información de los usuarios o clientes de la empresa. - Pérdida de reputación y confiabilidad: un ataque y filtración de datos supone dañar seriamente la imagen de empresa. - Escalado de privilegios: un atacante podría usar el contenido de una base de datos comprometida para acceder a otras partes de la red interna de una empresa. 01MASW 17/01/2024 LAB01. Ejemplo Products model Product php artisan make:model Product -a public function up(): void { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('description'); $table->timestamps(); }); } 07MASW LAB01. Ejemplo Products Controller public function showProductDetail() { $product=$_GET['product']; $sql="SELECT * FROM products WHERE id=".$product; $result=DB::select($sql); return $result; } 07MASW 1. Inyección SQL Ejemplo inyección SQL En este ejemplo podemos observar un ejemplo en el http://demo.example.com/show?product=1 lenguaje PHP que sufre una vulnerabilidad de inyección de SQL. El valor procedente del parámetro product enviado a través de la URL es concatenado directamente en la sentencia SQL que se envía a la base datos. De forma que no se realiza ningún tipo de validación ni control sobre los posibles valores que pueda tomar. Un atacante podría detectar dicha URL y hacer un uso malintencionado de la misma. Para ello puede modificar el valor del parámetro product por un valor diferente al esperado por el método showProductDetail(). Respuesta A continuación vamos a ver un ejemplo de cómo explotar dicha vulnerabilidad. 01MASW 17/01/2024 1. Inyección SQL Ejemplo inyección SQL http://demo.example.com/show?product=1 AND 1=1 Lo primero que debe hacer un posible atacante es realizar una serie de pruebas para identificar si la URL es susceptible de ser vulnerable a una inyección de código SQL. La primera prueba que realiza es establecer el valor de product a '1 AND 1=1'. Nota: cuando copias la URL en un navegador web los caracteres de espacio se codifica con el valor %20. En este caso observamos como el resultado no cambia por ser la condición siempre verdadera (1=1) y devuelve el producto Respuesta con id=1 como estaba previsto. 01MASW 17/01/2024 1. Inyección SQL Ejemplo inyección SQL http://demo.example.com/show?product=1 AND 1=2 Segunda prueba Establece el valor de product a '1 AND 1=2'. En este caso el resultado cambia, ya que la condición (1=2) siempre es falsa por lo que la consulta SQL devuelve cero resultados. Con estas dos pruebas el atacante ha identificado que la URL es vulnerable frente a una inyección SQL. Ahora conoce una debilidad de la aplicación Web que puede explotar para obtener información sensible sobre los datos almacenados en la BD relacional. Respuesta 01MASW 17/01/2024 1. Inyección SQL Ejemplo inyección SQL http://demo.example.com/show?product=1 OR id=2 Tercera prueba El atacante va a explotar la vulnerabilidad para conseguir información sensible de la base de datos , para ello cambia el valor de product a '1 OR id=2'. En este caso vemos como ahora nos devuelve toda la información tanto del producto con id=1 y del producto con id=2. Respuesta 01MASW 17/01/2024 1. Inyección SQL Ejemplo inyección SQL Cuarta prueba En esta prueba el atacante cambia el valor http://demo.example.com/show?product=1 OR id !=1 de product a '1 OR id != 1'. En este caso vemos como ahora nos devuelve toda la información de todos los productos que se encuentran en la tabla products de base de datos. Además vemos que incluye el producto con id=5 que es un producto privado que todavía no está a la venta y la empresa quería mantener en secreto. La URL es vulnerable y puede ser utilizada para el robo de información confidencial o privada. Respuesta 01MASW 17/01/2024 1. Inyección SQL ¿Cómo prevenir la inyección SQL? - Mantenimiento constante: debemos mantener actualizados los sistemas, dispositivos y cualquier software (framework, sistema operativo, librerías, lenguajes, bases de datos...) que utilice nuestra aplicación Web. De esta forma solventamos posibles errores de seguridad que puedan ser utilizados por terceros para llevar a cabo sus ataques. - Consultas parametrizadas: no debemos utilizar concatenaciones de cadena dentro de una consulta SQL de datos, en su lugar vamos a utilizar consultas parametrizadas o también conocidas como declaraciones preparadas. Este tipo de consultas no concatenan las variables directamente a la consulta SQL, sino que usan una sintaxis específica para pasar el conjunto de parámetros a la consulta SQL. De esta forma, la consulta es primero precompilada y en una fase posterior recibe los valores de los parámetros, sin posibilidad de que la consulta (tablas, índices y joins) sea modificada por el valor de dichos parámetros. La mayoría de los ataques de inyección SQL se pueden evitar haciendo uso de consultas parametrizadas, aunque no evitan el 100% de los ataques como veremos más adelante. 01MASW 17/01/2024 LAB02. Consultas parametrizadas if(isset($_GET['product'])){ $product=$_GET['product']; //CONEXION A LA BBDD $mysqli = new mysqli("localhost", "root", "", "laravel04"); if ($mysqli->connect_errno) { echo "Fallo al conectar a MySQL: (". $mysqli->connect_errno. ") ". $mysqli->connect_error; header("location:login.php?error=Error en la BBDD"); } //Recuperamos product $sql="SELECT * FROM products WHERE id=$product"; 07MASW LAB02. Consultas parametrizadas if(isset($_GET['product'])){ $product=$_GET['product']; //CONEXION A LA BBDD $mysqli = new mysqli("localhost", "root", "", "laravel04"); if ($mysqli->connect_errno) { echo "Fallo al conectar a MySQL: (". $mysqli->connect_errno. ") ". $mysqli->connect_error; header("location:login.php?error=Error en la BBDD"); } //Recuperamos product $sql="SELECT * FROM products WHERE id=$product"; 07MASW 1. Inyección SQL Prevención con consultas parametrizadas PHP Vamos a ver un ejemplo de uso de las consultas parametrizadas con sentencias SQL en PHP sin utilizar ningún tipo de framework. Este ejemplo se realiza con PDO ampliamente utilizado, se trata de una interfaz ligera para poder acceder a bases de datos en PHP. Ejemplo de uso de marcadores con nombre PDO proporciona una capa de abstracción de acceso a datos, lo que significa que, independientemente de la base de datos que se esté utilizando, se emplean las mismas funciones para realizar consultas y obtener datos. PDO requiere PHP 5.1 o superior y permite utilizar bases de datos como MySql o PostgreSql. $pdo->prepare($sql): Prepara una sentencia SQL para ser ejecutada, dicha sentencia puede contener cero o más marcadores de parámetros con nombre (:name) o signos de interrogación (?), posteriormente dichos valores serán sustituidos cuando se ejecute la sentencia. Ejemplo de uso de marcadores con signos de interrogación 01MASW 17/01/2024 1. Inyección SQL Prevención con consultas parametrizadas PHP http://demo.example.com/show?product=1 $pdo->prepare ('SENTENCIA SQL CON MARCADORES'): prepara la sentencia para ser ejecutada en base de datos. $stmt->execute($array) => Ejecuta la sentencia en la base de datos, recibe como parámetro de entrada un array de valores de parámetros que serán sustituidos en la sentencia preparada y será ejecutada en base de datos. 01MASW 17/01/2024 1. Inyección SQL Prevención con consultas parametrizadas PHP http://demo.example.com/show?product=1 $stmt->fetchAll(): Recuperamos los valores devueltos mediante un array que contiene todas las filas del conjunto de resultados. Respuesta 01MASW 17/01/2024 1. Inyección SQL Prevención inyección SQL con Laravel El framework Laravel junto con Eloquent http://demo.example.com/show-with-laravel?product=1 ORM proporciona un generador de consultas robusto que hace uso internamente de las consultas parametrizadas para evitar ataques de inyección de SQL. Vamos a utilizar el constructor de consultas (query builder) de Laravel, dicho constructor nos proporciona una interfaz para la creación y ejecución de consultas de bases de datos. Puede ser usado para ejecutar las principales operaciones de bases de datos y funciona en todos los sistemas de bases de datos soportados por Laravel. En este ejemplo, donde no se valida el valor del Respuesta parámetro product la respuesta contiene la información del producto con id =1, presentando el comportamiento esperado. 01MASW 17/01/2024 1. Inyección SQL Prevención inyección SQL con Laravel http://demo.example.com/show-with-laravel?product=1 AND 1=1 Si establecemos el valor de product a '1 AND 1=1'. Obtenemos como respuesta la información del producto con id =1, por lo que obtenemos el mismo comportamiento que teníamos sin utilizar consultar parametrizadas. Respuesta 01MASW 17/01/2024 1. Inyección SQL Prevención inyección SQL con Laravel http://demo.example.com/show-with-laravel?product=1 AND 1=2 Si establecemos el valor de product a '1 AND 1=2'. Recibimos la misma respuesta que en el caso anterior, concretamente obtenemos otra vez como respuesta la información del producto con id =1. Observamos que la respuesta es diferente a cuando no utilizábamos consultas parametrizadas. Recordemos que cuando no utilizábamos consultas parametrizadas obteníamos un array vacío para este caso concreto. Respuesta 01MASW 17/01/2024 1. Inyección SQL Prevención inyección SQL con Laravel http://demo.example.com/show-with-laravel?product=1 OR id=2 Si establecemos el valor de product a '1 OR id=2'. Recibimos la misma respuesta que en el caso anterior, concretamente obtenemos otra vez como respuesta la información del producto con id =1. Recordemos que cuando no utilizábamos consultas parametrizadas recibíamos un array con la información del producto con id=1 y del producto con id=2. Permitiendo obtener información adicional de la base de datos.. Respuesta 01MASW 17/01/2024 1. Inyección SQL Prevención inyección SQL con Laravel Si establecemos el valor de product a ''1 OR id != 1''. http://demo.example.com/show-with-laravel?product=1 OR id !=1 Recibimos la misma respuesta que en el caso anterior, concretamente obtenemos otra vez como respuesta la información del producto con id =1. Recordemos que cuando no utilizábamos consultas parametrizadas recibíamos toda la información de todos los productos que se encontraban en la tabla de base de datos llamada products. Permitiendo obtener información adicional de la base de datos. Conclusión: el uso de consultas parametrizadas permite mitigar los ataques de inyección SQL en la mayoría de los Respuesta casos. 01MASW 17/01/2024 1. Inyección SQL Prevención inyección SQL PDO/Laravel http://demo.example.com/show-with-laravel-user-set-column?product=1&column=name PDO y por tanto Laravel no soporta el mapeo de nombres de columna por lo que no debemos permitir que un dato de entrada definido por el usuario o manipulable determine el nombre de la columna de la consulta o de ordenación. En este caso las consultas parametrizadas no nos protegen de un ataque de inyección SQL que pueda extraer información sensible de base de datos. En caso de que nuestra aplicación permita determinar las columnas de BD que se muestran debemos validar dichos campos previamente contra una lista de nombres de columnas que están permitidos. De esta forma estamos asegurando que no pueda acceder a columnas de BD sensibles o confidenciales. 01MASW 17/01/2024 2 Validación formularios 01MASW 17/01/2024 LAB03. Preparar ejemplo php artisan make:migration create_products_table -- create=products php artisan make:request ProductStoreRequest php artisan make:request ProductUpdateRequest php artisan make:controller ProductController --resource --model=Product 07MASW 2. Validación formularios Validación de formularios Es posible realizar validaciones en el lado del Cliente (navegador) como por ejemplo mediante JavaScript mediante las cuales podemos extender la funcionalidad del frontend, sin embargo, es posible que un atacante con conocimientos avanzados puede desactivar intencionadamente JavaScript y evitar todos los controles y validacionesimplementadasen frontend. Por estos motivos siempre debemos validar todos los datos en el lado del servidor (backend) con ello conseguimos mayor seguridad frente a inyección de código y conseguimos controlar que todos los datos necesarios son informados sin errores. 01MASW 17/01/2024 2. Validación formularios Validación de formularios en Laravel Laravel incorpora un sistema de validaciones potente que nos permite fácilmente validar los datos de entrada que se reciben con unas sencillas líneas de código. A continuación vamos a ver un ejemplo de cómo utilizarlo con un caso práctico mediante un Rutas Laravel formulario de creación de nuevos productos. Se definen dos rutas: - product.create: utilizada para mostrar la vista con el formulario de creación de productos. - product.store: utilizada para recibir los datos enviados a través del formulario y persistir el producto en caso de que se cumplan todas las validaciones. 01MASW 17/01/2024 2. Validación formularios Validación de formularios en Laravel Vista creada usando el motor de plantillas de Laravel denominado Blade. La vista dispone una sección encargada de mostrar los errores de validación si no se superan las validacionesimplementadas en el lado de servidor. El formulario de ejemplo permite crear un producto a partir 3 campos: - Nombre - Descripción - Referencia Vista Laravel 01MASW 17/01/2024 2. Validación formularios Método dentro del controlador encargado de realizar las Validación de formularios en Laravel validaciones del lado de servidor y almacenar el producto en base de datos. En caso de no superar alguna validación se produce una excepción controlada y se aborta la ejecución secuencial del código, volviendo a la ruta original. En ese momento Laravel define los errores en la variable $errors de forma que la vista puede acceder a la información de los errores para hacerla visible al usuario. Validaciones implementadas - El parámetro name es obligatorio y debe tener una longitud máxima de 25 caracteres. - El parámetro description es obligatorio y debe tener una longitud máxima de 100 caracteres. - El parámetro reference es obligatorio y debe tener una longitud máxima de 20 caracteres, además debe ser único en la tabla products. 01MASW Controlador Laravel 17/01/2024 2. Validación formularios Validación de formularios en Laravel Laravel proporciona un gran cantidad de validaciones comunes que podemos utilizar para controlar los campos de entrada sin necesidad de tener que programarlas desde cero. Las validaciones posibles para la versión 10 encuentran descritas en el siguiente enlace: https://laravel.com/docs/11.x/validation En caso de que tengamos alguna necesidad específica que no está cubierta con las validaciones de Laravel, es posible implementar un tipo validación totalmente personalizada siguiendo los pasos que se describen en su documentación oficial: 01MASW 17/01/2024 2. Validación formularios Ejercicios validaciones Laravel Utilizar las validaciones de Laravel descritas en el siguiente enlace https://laravel.com/docs/11.x/validation#available-validation-rules para implementar las siguientes validaciones: Ejercicio 1: Crear una validación con Laravel para que el nombre ('name') del producto sea requerido, único, solo admita caracteres alfanuméricos y como máximo tenga una longitud de 60 caracteres. Ejercicio 2: Crear una validación para que la descripción ('description') pueda ser "null", solo admita caracteres alfanuméricos y tenga como máximo una longitud de 150 caracteres. Ejercicio 3: Crear una validación con Laravel para que la referencia ('reference') sea requerida, única, solo admita caracteres numéricos y pueda tomar como valor mínimo 1 y valor máximo 10000. 01MASW 17/01/2024 2. Validación formularios Solución: ejercicios validaciones Laravel Ejercicio 1. Crear una validación con Laravel para que el nombre ('name') del producto sea requerido, único, solo admita caracteres alfanuméricos y como máximo tenga una longitud de 60 caracteres. 'name' => 'required|unique:products|alpha_num|max:60' Ejercicio 2. Crear una validación para que la descripción ('description') pueda ser null, solo admita caracteres alfanúmericos tenga como máximo una longitud de 150 carácteres. 'description' => 'nullable|alpha_num|max:150' Ejercicio 3. Crear una validación con Laravel para que la referencia ('reference') sea requerida, única, solo admita caracteres numéricos y pueda tomar como valor mínimo 1 y valor máximo 10000. Solución 1: 'reference' => 'required|unique:products|numeric|min:1|max:10000' Solución 2: 'reference'=>'required|unique:products|numeric|between:1,10000' IMPORTANTE: En el caso de números (numeric) min y max indican los valores mínimos y máximos que puede tomar el número en lugar de indicar el número mínimo y máximo de caracteres. 01MASW 17/01/2024 3 Políticas de protección de datos sensibles 01MASW 17/01/2024 3. Políticas de protección de datos sensibles RGPD La RGPD (Reglamento General de Protección de Datos) entró en vigor en mayo de 2016 y es de aplicación obligatoria para todas las empresas de la Unión Europea, desde el 25 de mayo de 2018. Otorga un mayor control y seguridad a los ciudadanos sobre su información personal en el mundo digital. La RGPD tiene aplicación en todo el mundo, siempre que los datos que se protejan pertenezcan a personas residentes en la Unión Europea. Un dato personal es toda información sobre una persona física identificada o identificable, ya sea un nombre, un DNI, datos de localización, un identificador en línea o uno o varios elementos propios de la identidad física, fisiológica, genética, psíquica, económica, cultural o social de dicha persona. EL RGPD aplica a: - Organizaciones con presencia física en al menos algún país miembro de la Unión Europea. - Organizaciones que procesan o almacenan datos sobre individuos que residen en la Unión Europea. - Organizaciones que utilizan servicios de terceros que procesan o almacenan información sobre individuos que residen en la Unión Europea. 01MASW 17/01/2024 3. Políticas de protección de datos sensibles Derechos RGPD - Derecho a estar informado: proporciona transparencia sobre cómo son utilizados nuestros datos personales. - Derecho al acceso: derecho del individuo a dirigirse al responsable del tratamiento para saber si se están tratando sus datos personales y, en caso afirmativo, obtener información acerca del tipo del tratamiento que se está realizando. - Derecho a la rectificación. - Derecho a ser borrado (o derecho a ser olvidado). - Derecho a restringir el procesamiento: Permite que los datos sean almacenados, pero no procesados. - Derecho a la portabilidad de datos: es posible solicitar copias de la información almacenada sobre nosotros, para utilizar en cualquier otro lugar. - Derecho a objetar: Otorga el derecho a objetar acerca del procesamiento de sus datos. Un ejemplo podría ser la objeción de que sus datos sean utilizados por empresas o campañas de marketing. - Derecho sobre la toma de decisiones y creación de perfiles automáticos: permite objetar sobre la toma de decisiones automáticas que se hagan sobre nuestros datos personales. “Automáticas” se refiere a sin intervención humana. 01MASW 17/01/2024 3. Políticas de protección de datos sensibles Datos sensibles Desde que entró en vigor la RGPD existe el concepto de datos sensibles, una categoría especial de datos personales, que de acuerdo a la ley no se pueden tratar salvo que se reúna alguna de las condiciones específicas. Los datos sensibles, también conocidos bajo el nombre de "categorías especiales de datos", son aquellos datos que están estrechamente relacionados con los derechos y las libertades fundamentales de las personas y cuyo tratamiento puede conllevar riesgos importantes para estos derechos y libertades. Tipos de datos que se consideran sensibles según la RGPD: Origen étnico o racial. Opiniones políticas. Convicciones religiosas y filosóficas. Afiliación sindical. Genética. Biométricos. Salud. Vida sexual. Orientación sexual. 01MASW 17/01/2024 3. Políticas de protección de datos sensibles Ejemplo Datos sensibles A continuación, vemos algunos ejemplos de datos sensibles: El informe médico de una persona es un dato sensible, puesto que se consideran los datos de salud datos sensibles. Ejemplo: software que almacena los reconocimientos médicos de los empleados. La pertenencia de una persona a un sindicato es un dato sensible. La huella dactilar es un dato biométrico por lo que es un dato sensible. Ejemplo: uso de software para el control de accesos a instalaciones. 01MASW 17/01/2024 3. Políticas de protección de datos sensibles Datos sensibles Según la RGPD, únicamente es posible tratar datos sensibles si cumple algunas de las siguie

Use Quizgecko on...
Browser
Browser