Tema1 PDF
Tema1 PDF
Tema1 PDF
datos
[1.1] ¿Cómo estudiar este tema?
[1.2] Introducción
1
[1.6] Arquitecturas y tecnologías de desarrollo de los
servicios web
Esquema
Ideas clave
Para estudiar este tema lee las Ideas clave que encontrarás a continuación.
1.2. Introducción
Objetivos de seguridad
Vulnerabilidades y ataques
Por tanto, se pueden definir las clases de vulnerabilidades en función de las fases del
SSDLC. Las clases de vulnerabilidades comúnmente aceptadas incluyen
vulnerabilidades de diseño, implementación y vulnerabilidades operacionales.
» Stealing Passwords
» Social Engineering
» Bugs and Back Doors
» Authentication Failures
» Protocol Failures
» Information Leakage
» Exponential Attacks Viruses and Worms
» Denial-of-Service Attacks
» Botnets
» Active Attacks
» Nivel de diseño
Tal substitución puede implicar el uso del software malicioso del atacante.
Defensa: hay que evitar operaciones no-atómicas si pueden tener implicaciones
de seguridad, si no se está seguro de sí una operación es atómica, se asume que el
sistema operativo puede ejecutarla en dos pasos o más pasos interrumpibles.
o Ataque con sniffer. Un sniffer es un software que captura los paquetes del
tráfico de la red con el objetivo de capturar nombres de usuario y passwords que
se transmiten en claro. Defensa: hay que usar protocolos seguros de
autenticación en la validación de los usuarios de las aplicaciones. Secuestro de
sesiones. Este tipo de ataque explota las debilidades del protocolo TCPIP
secuestrando una conexión establecida.
» Nivel de implementación
» Nivel de operación
mejor utilizar tarjetas PKI con certificados digitales que permitan utilizar una
autenticación de cliente con el protocolo SSL u otro similar.
Como base para acometer la seguridad online se abordarán los diseños seguros de los
servicios de autenticación, gestión de sesiones seguras y autorización. Otras actividades
como la derivación de requisitos de seguridad, modelado de amenazas, análisis y
gestión del riesgo y revisión de la seguridad del código se estudiarán en otras
asignaturas como puede ser seguridad en el software.
Por tanto, se puede considerar que los pilares fundamentales para el diseño e
implementación de la seguridad de las aplicaciones son tres:
» Política de seguridad.
» Sistema de Gestión de Seguridad de la Información.
» Ciclo de vida de desarrollo seguro de software.
» Monitorización continua.
Tienen que ver con continuar asegurando una correcta configuración de todos los
elementos y partes que intervienen en la aplicación como son:
o Administración de las configuraciones de los parámetros que afectan a la
seguridad de toda la aplicación, contenidos en los archivos correspondientes al
servidor de aplicaciones, aplicación y base de datos.
o Gestión y administración de la autenticación, autorización y control de accesos.
o PKI para gestión de certificados digitales: Establecimiento de conexiones seguras.
o Política de gestión de contraseñas. Monitorización continua, auditoría y gestión
de logs: SIEM, IDS, IPS, Firewall de red, etc.
o Mecanismos de protección externos como firewall de aplicaciones web (WAF), de
bases de datos, firewalls XML o herramientas de protección de vulnerabilidades
en tiempo real (RASP) que ofrecen ya varias empresas como Fortify HP
(SecuirtyScope) o IBM (Appscan standard editon IAST).
o Gestión de backups y de desastres. Centro de respaldo.
o Gestión de incidentes de seguridad.
Normalmente, se supone que se está inmerso en una organización, que tiene definida
una política de seguridad con lo que esto implica y que se tienen procesos definidos
en todo lo que se refiere a desarrollo de software, gestión de configuración, gestión y
aseguramiento de la calidad con sus correspondientes procedimientos y actividades,
donde un proyecto de software tiene una dirección de proyecto, equipo de desarrollo y
de esta manera se planifica y gestiona adecuadamente y se sigue un modelo de ciclo de
vida adaptado a las características del proyecto. Se tiene el apoyo también de un equipo
de seguridad que puede asesorar en todas y realizar incluso algunas de las actividades y
» Revisión de código
» Análisis de riesgo arquitectónico
» Pruebas de penetración
» Pruebas de seguridad basados en riesgo
» Casos de abuso
» Requisitos de Seguridad
» Operaciones de Seguridad
» Revisión externa
Hay que resaltar que estas actividades hay que repetirlas a lo largo del ciclo de vida lo
que supone un ciclo continuo en la ejecución de las distintas actividades de
seguridad:
Por supuesto, siempre hay que continuar con la formación en seguridad, que
proporciona un mecanismo de prevención por ejemplo si los desarrolladores de código
se forman en como validar los campos de entrada salida de la aplicación. Documentar,
realizando cuantificación y análisis de métricas de seguridad que se puedan emplear en
futuros proyectos para mejorar.
Las vulnerabilidades del software son simplemente debilidades en un sistema que los
atacantes pueden aprovechar para obtener alguna ventaja. En el contexto de la
seguridad del software, las vulnerabilidades son defectos o descuidos específicos en
una parte del software que permiten que los atacantes hagan algo malicioso o que
alteren información sensible o que interrumpan o destruyan un sistema o tomar el
control de un sistema informático o de un programa. Son errores o descuidos en los
programas que dan lugar a comportamiento inesperado y típicamente indeseable. Se
puede afirmar que para que una vulnerabilidad (debilidad en el diseño, código,
configuración, protección online de una aplicación) se materialice en una aplicación y
puede provocar una pérdida de datos o tomar el control del servidor. Las
aplicaciones y API que utilizan componentes con vulnerabilidades conocidas pueden
debilitar las defensas de las aplicaciones y permitir diversos ataques e impactos.
En la cima del top 10 se encuentran aquellas vulnerabilidades que son del tipo
inyección. Estas vulnerabilidades suelen explotarse por errores en la
programación de las consultas. En segundo lugar, y subiendo desde la tercera
posición, se encuentran las vulnerabilidades de pérdida de autenticación. En este caso
se apunta a errores en el diseño donde los atacantes pueden comprometer tokens y
contraseñas o incluso explotar vulnerabilidades dentro de la aplicación.
Esto da una idea de la magnitud del auge del desarrollo de este tipo de aplicaciones y
del volumen de negocio que suponen y que hace que sean principal objetivo con ánimo
de lucro. La motivación de este trabajo parte de esta estadística como base que
demuestra la trascendencia que tiene poner gran esfuerzo en estudiar como securizar el
gran volumen de aplicaciones web que se desarrollan. En la figura 4, se representan las
ratios de utilización de aplicaciones web y los lenguajes más empleados en su
desarrollo. Veracode es una empresa que ofrece sus servicios para análisis de seguridad
de aplicaciones.
En la figura 5, como resultado del informe del estado de la seguridad del software,
volumen 9, publicado por Veracode, se presenta la distribución del desarrollo de
software atendiendo a su suministrador, interno, open-source, Commercial,
Outsourced. Interesante la observación de que casi la tercera parte del volumen de
desarrollo procede de terceras partes, comercial y open source. Hay que tener en
cuenta que en algunos de estos casos no se dispondrá del código fuente y hay que tener
en cuenta que la comprobación de seguridad de ese código pasa por disponer de
determinadas herramientas o servicios que sean capaces de analizar código binario de
forma estática o dinámica. La elección o combinación de las mismas se analizará en un
tema posterior.
1. Http
El protocolo HTTP implementa una serie de métodos especificados en HTTP 1.1 rfc
2616. Son los siguientes:
» HEAD: pide una respuesta idéntica a la que correspondería a una petición GET
pero sin el cuerpo de la respuesta. Esto es útil para la recuperación de
metainformación escrita en los encabezados de respuesta, sin tener que transportar
todo el contenido.
» GET: pide una representación del recurso especificado. Por seguridad no debería
ser usado por aplicaciones que causen efectos ya que transmite información a través
de la URI agregando parámetros a la URL.
» POST: envía los datos para que sean procesados por el recurso identificado (url).
Los datos se incluirán en el cuerpo de la petición. Esto puede resultar en la creación
de un nuevo recurso o de las actualizaciones de los recursos existentes o ambas
cosas.
» PUT: sube, carga o realiza un upload de un recurso especificado (archivo). Es el
camino más eficiente para subir archivos a un servidor. Esto es porque en POST
utiliza un mensaje multiparte y el mensaje es decodificado por el servidor. En
contraste, el método PUT te permite escribir un archivo en una conexión socket
establecida con el servidor. La desventaja del método PUT es que los servidores de
hosting compartido no lo tienen habilitado.
En una petición GET los parámetros que se incluyen en la cadena de la URL pueden ser
rutinariamente escritos a LOG,s cache del navegador y almacenados en el historial
del navegador revelando información sensible como passwords, etc. Es más sencillo
prevenir XSS deshabilitando GET en las aplicaciones. Es más fácil para un atacante
enviando emails con una URL con parámetros maliciosos:
Como HTTP es sin estado, construir casi cualquier tipo de aplicación sofisticada
requiere un identificador de sesión que sirva para ambos sentidos de la comunicación
para asociar las peticiones previas de un usuario con las siguientes. Los identificadores
de sesión pueden ser pasados hacia adelante y hacia atrás como parámetros URL pero
hoy la mayor parte de las aplicaciones manejan cookies.
La razón más común de usar un identificador de sesión es permitir a un usuario
autenticarse solo una vez para continuar con una serie de interacciones con la
aplicación.
Esto quiere decir que la seguridad de la aplicación depende de ello siendo muy difícil
para un atacante aprovechar el identificador de sesión para un usuario autenticado.
3. Lenguajes de Scripts
Por ejemplo, estos son algunos de los ejemplos de tecnologías de script más utilizadas
hoy en día.
» ASP (http://msdn.microsoft.com/en-us/library/aa286483.aspx).
» Perl (http://www.perl.org/).
» ColdFusion (http://www.adobe.com/es/products/coldfusion/).
» Y PHP (http://www.php.net/).
» JavaScript (http://es.wikipedia.org/wiki/JavaScript)
Para interactuar con una página web JavaScript dispone de una implementación del
Document Object Model (DOM). JavaScript, normalmente, se interpreta en el lado del
cliente por el navegador incluido en código HTML que se descarga del servidor de
forma síncrona. En arquitecturas más recientes, como AJAX, se carga un motor de
javascript que interactúa por un lado con el usuario para modificar dinámicamente la
interfaz del usuario y por otro lado de forma asíncrona con el servidor para obtener
datos necesarios para presentación permitiendo hacer otras tareas mientras se sirve la
petición y evitando tiempos muertos y páginas de espera que sufre el usuario con
las tradicionales aplicaciones web.
Esta última característica se engloba dentro del llamado B2B (Business To Business),
del cual el máximo exponente son los llamados servicios Web. En otra sección de estos
apuntes se analiza con más profundidad esta tecnología.
» Fiabilidad: Debe ser capaz de seguir ofreciendo servicios a sus clientes a pesar de
posibles fallos de los componentes del sistema.
En la actualidad las plataformas más importantes son aquellas que disponen del
apoyo de gran cantidad de empresas, entidades o asociaciones y que disponen de
grupos de estandarización que aseguren su futuro. Ahora mismo las plataformas más
importantes son:
Existen pocas razones para elegir J2EE o .NET desde la perspectiva de la seguridad o
de rendimiento en general. De entre los muchos estudios comparativos entre ambas
tecnologías se puede citar el trabajo de J. Padilla y J. Pérez (2009-2010) o la tesis de
Manuel Garrido (2006), donde se pueden encontrar detalles más concretos relativos a
seguridad. J2EE y .NET tienen diferentes enfoques para implementación de la
seguridad.
Las capas de que se compone una aplicación web (figura 18) son:
Uno de los patrones de diseño de las aplicaciones web más comunes es el Modelo-
Vista-Controlador (MVC), http://www.jtech.ua.es/j2ee/publico/spring-2012-
13/sesion03-apuntes.html
Cada acción del usuario que normalmente generaría una petición HTTP toma la forma
de una llamada JavaScript al motor Ajax en su lugar. Cualquier respuesta a una acción
del usuario que no requiere un viaje de vuelta al servidor, tales como la validación de
datos simple, edición de datos en la memoria, e incluso un poco de navegación: el
motor se encarga por sí solo. Si el motor necesita algo del servidor con el fin de
responder-si se trata de comunicación de datos para el procesamiento, la carga de
código de interfaz adicional, o recuperación de nuevos datos, el motor hace esas
peticiones de forma asíncrona, normalmente, usando XML, sin que se cale interacción
de un usuario con la aplicación (figura siguiente).
Además, las aplicaciones AJAX pueden ser vulnerables a nuevas clases de ataques
como la suplantación cruzada de peticiones entre sitios web (Cross Site Request
Forgery (CSRF)).
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
Protocolo SOAP
Para la comunicación entre las diferentes entidades o aplicaciones que actúan como
consumidores de servicios o proveedores de los mismos, los servicios web emplean un
protocolo denominado SOAP que tiene la estructura reflejada en la figura siguiente. Los
mensajes SOAP con estructura XML tienen:
» Una envoltura.
» Una cabecera con datos descriptivos.
» Un body o contenido.
Servicio
UDDI UDDI
que stion registro re giste r
(broker)
Servicio Servicio
consumidor proveedor
Las aplicaciones web en casi todos los casos necesitarán almacenar datos en más o
menos grandes cantidades. Para proporcionar este servicio normalmente, como ya se
ha visto anteriormente, se añade otra capa a la arquitectura de la aplicación web que
soporta el servicio de almacén de datos como puede ser un Sistema Gestor de Bases
de Datos (SGBD) como Oracle, Sql Server o DB2. También se pueden utilizar
repositorios de datos en formato XML en un fichero de datos que puede ser accedido
por la aplicación o un Directorio LDAP (Lightweight Directory Access Protocol).
Así como un Sistema de Gestión de Base de Datos como Sybase, Oracle, Informix
o Microsoft se utiliza para procesar consultas y actualizaciones a una base de datos
relacional, un servidor LDAP es utilizado para procesar consultas y actualizaciones a un
directorio de información LDAP. En otras palabras, un directorio de información
LDAP es un tipo de base de datos, pero no es una base de datos relacional y a diferencia de
una base de datos que está diseñada para procesar cientos o miles de cambios por minuto
como los sistemas de procesamiento de transacciones en línea a menudo utilizados en el e-
commerce los directorios LDAP están fuertemente optimizados para el rendimiento en
accesos de lectura.
1. Archivos de datos
» TEMP. Aquí Oracle almacena las tablas temporales (para gestionar sus
transacciones). Se almacena en el archivo TEMP01.DBF.
Se trata de archivos de datos en los que Oracle registra todos los cambios que se
efectúan sobre los datos (INSERT, UPDATE y DELETE) de la base de datos dentro de
la caché de buffers de la base de datos. Estos archivos se utilizan en situaciones de fallo
para recuperar datos validados que no se han escrito en los archivos de datos. Suele
haber varios registros de rehacer y conviene almacenarlos en discos diferentes para
evitar pérdidas debido a fallos en el disco. Normalmente se crean varios grupos de Redo
Log online, formado cada uno de ellos por varios miembros, los miembros de un grupo
contienen copias idénticas.
3. Archivos de control
Contienen información sobre los archivos asociados con una base de datos Oracle.
Todas las modificaciones importantes que se hagan en la estructura de la base de datos
se registran en el archivo de control. Estos archivos mantienen la integridad de la base
de datos. Oracle recomienda que la base de datos tenga un mínimo de dos archivos de
control en discos diferentes. Si se daña un archivo de control debido a un fallo en disco,
se podría restaurar utilizando la copia intacta del archivo de control del otro disco. La
Es un grupo de estructuras de memoria que sirven para almacenar los datos de la base
de datos que se han consultado más recientemente. Contiene información de datos y de
control para el servidor Oracle. Se descompone en las siguientes zonas:
» Conjunto Java: especifica el tamaño para satisfacer los requisitos de análisis de los
comandos Java y almacena el código Java.
Hay un conjunto de procesos del servidor que ayuda a la base de datos a funcionar:
sonlos procesos soporte o de segundo plano. En la figura, se puede observar una visión
general de una arquitectura Oracle. Los procesos en segundo plano son los siguientes:
datos cuando: el número de bloques sucios (cualquier bloque de datos que se cambie
en la caché de buffers de datos) alcanza el 90 % de ocupación, o cuando se produce
un timeout (cada tres segundos), o cuando se produce un punto de control o
checkpoint.
» Escritor de registros LGWR. Gestiona la escritura del contenido del buffer del
registro de rehacer de la SGA a los archivos de Redo Log online. Es el único proceso
que escribe en los archivos de registro de rehacer y el único que lee los buffers de
este registro. Los registros de Redo se escriben en uno de los grupos, a los que el
proceso LGWR denomina grupo Redo Log online actual, en las siguientes
situaciones:
o Cuando se valida una transacción.
o Cuando el buffer Redo Log se llena a un tercio de su capacidad.
o Cuando hay más de un mega de registros cambiados en el buffer de Redo Log.
o Cuando se produce un timeout (cada tres segundos).
o Antes que el DBWR escriba los bloques modificados de la caché de buffers de la
base de datos a los archivos de datos. Esta operación permite que Oracle pueda
recuperarse en cualquier momento si hay fallos. El proceso DBWR debe esperar
al escritor de registros antes de escribir los bloques modificados desde los buffers
del bloque de datos a los archivos de datos; es decir, en primer lugar, se escribe la
transacción en los registros de rehacer y luego se escribe en la base de datos.
LGWR escribe en los archivos de Redo Log de forma secuencial, cuando se llena un
grupo, comienza a escribir en el siguiente, si se llena el último grupo volverá a escribir
en el primero.
» Archivador ARCH. Es opcional, y archiva en disco o cinta una copia de los Redo
Log cuando están llenos para una posible recuperación por fallo de disco. Para que
se produzca el archivado, la base de datos tiene que estar abierta en modo
ARCHIVELOG, esto se decide al crear la base de datos. El proceso ARCH se inicia
haciendo una copia de seguridad del grupo de logs llenos en cada cambio de log.
Archiva automáticamente los Redo Log online antes de que se puedan volver a
utilizar, con el fin de proteger los cambios realizados en la base de datos. La copia
automática se activa con el parámetro LOG_ARCHIVE_START = TRUE.
»
Figura 26. Resumen componentes Oracle.
Bray, T. et al. (1998). El lenguaje extensible de marcas (XML) 1.0. Recomendación del
W3C. Recuperado de: http://www.w3.org/TR/1998/REC-xml-19980210
Connolly, G. M., Akin, M., Goyal, A., Howlett, R. y Perrins, M. (2008). Building
Dynamic Ajax Applications Using WebSphere Feature Pack for Web 2.0. IBM
Redbooks
Dowd, M., McDonald, J. y Schuh, J. (2006). The Art of Software Security Assessment:
Identifying and Preventing Software Vulnerabilities. Massachusetts: Addison Wesley
Professional. Print.
Graff, M. (2001). Secure Coding. The State of the Practice. Recuperado de:
http://codecraft.lk/wp-content/uploads/2018/09/Secure-Coding-Principles-and-
Practices.pdf
Kirda, E., Kruegel, C. Vigna, G. y Jovanovic, N. (2006). Noxes: a client-side solution for
mitigating cross-site scripting attacks. In Proceedings of the Symposium on Applied
Computing.
Ramos, Mª. J., Ramos, A., y Montero, F. (2006). Sistemas gestores de bases de datos.
Madrid: McGraw-Hill. Recuperado de:
http://allmastersolutions.com/shared/Sistemas%20Gestores%20de%20Bases%20de%
20Datos.pdf
Scambray, J., Liu, V. y Sima, C. (2010). Hacking Exposed Web Applications 3. Nueva
York: McGraw-Hill/Osborne.
Silic, M., Krolo, J. y Delac, G. (2010). Security Vulnerabilities in Modern Web Browser
Architecture. Faculty of Electrical Engineering and Computing. Zagreb: University of
Zagreb. Recuperado de:
https://bib.irb.hr/datoteka/473776.SecurityVulnerabilitiesInModernWebBrowserArch
itecture.pdf
Lo + recomendado
Lecciones magistrales
No dejes de leer…
Política de seguridad
Alonso, M., Díaz, G., Mur, F., Peire, J. y Sancristóbal, E. (2004). Seguridad en las
comunicaciones y en la información. Madrid: UNED.
Accede al artículo a través del aula virtual o desde la siguiente dirección web:
http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-53r4.pdf
Henderson, C. (2006). Building Scalable Web Sites. (pp. 6-26). O'Reilly Media, Inc.
Seguridad en AJAX
Ajax Security Basics y Book excerpt: Jump into AJAX development. Se revisan aspectos
de seguridad de este tipo de aplicaciones y se introduce la forma de solucionarlos.
Accede a los documentos desde el aula virtual o a través de las siguientes direcciones web:
http://www.symantec.com/connect/articles/ajax-security-basics
http://www.javaworld.com/javaworld/jw-08-2006/jw-0807-ajax.html
Accede a los documentos desde el aula virtual o a través de las siguientes direcciones web:
https://www.cisecurity.org/cis-benchmarks/
https://www.veracode.com/blog/2013/03/browser-security-settings-for-chrome-
firefox-and-internet-explorer
https://www.stigviewer.com/stig/microsoft_internet_explorer_11/
https://bib.irb.hr/datoteka/473776.SecurityVulnerabilitiesInModernWebBrowserArch
itecture.pdf
No dejes de ver…
+ Información
A fondo
Arquitectura J2EE
JSON
Ajax
Este enlace es una ampliación sobre la Arquitectura de Servicios Web, describiendo los
protocolos y servicios que los componen: SOAP, UDDI, WSDL.
Webgrafía
Página web del proyecto abierto para Seguridad de las Aplicaciones Web. En su página
web se menciona su propósito:
Accede a la
página web
a través del aula virtual o desde la siguiente dirección:
https://www.owasp.org/index.php/Main_Page
WASC
Página de WASC, asociación sin ánimo de libro formada por un grupo internacional de
expertos profesionales de la industria y representantes de organizaciones que producen
software libre y ampliamente acordados estándares de seguridad de mejores prácticas
para la world wide web.
Accede a la página a través del aula virtual o desde la siguiente dirección web:
http://www.webappsec.org/
SANS
Accede a la página a través del aula virtual o desde la siguiente dirección web:
https://www.sans.org/
https://www.sans.org/top25-software-errors/
Veracode
Accede a la página a través del aula virtual o desde la siguiente dirección web:
http://www.veracode.com/security/
Bibliografía
Actividades
Objetivo
Descripción de la actividad
Investigar:
Rúbrica
Seguridad Puntuación
en Peso
Descripción máxima
aplicaciones %
Ajax (puntos)
10 100 %
Test
7. El proceso que se encarga de volcar los datos del buffer de redo log de un SGBD se
llama:
A. DBWR.
B. LGWR.
C. SMON.
D. PMON.
9. ¿Qué métodos http hay que permitir en un servidor web para que sean más seguras
las peticiones?
A. GET.
B. TRACE.
C. POST.
D. OPTIONS.