1 Seguridad en Entornos Web para Sistemas de Gestión Académica René Guamán Quinche Facultad de Informática, Universidad del País Vasco Donostia-San Sebastián, España eguaman001@ikasle.ehu.es Resumen. El presente trabajo identifica los principales problemas de seguridad informática en los sistemas Web de Gestión Académica. Se analizaron los ataques más comunes a los que son expuestos los sistemas Web. Se elaboró un documento sobre las políticas de seguridad, las cuales ayudan a contrarrestar los ataques de Inyección SQL y XSS. También se propone un diseño que analice las peticiones de entrada con el fín de asegurar la integridad y confidencialidad de la información. Palabras claves: Inyección SQL, XSS, atacante, políticas de seguridad. 1 Introducción La historia de Internet nace con el desarrollo de las redes de comunicación entre computadoras que permitierón la comunicación entre usuarios desde diferentes ubicaciones físicas. A partir de la década de los 80‟s comenzó una expansión e incorporación a internet de diversas redes de Europa y del resto del mundo. En los noventa se introdujo la World Wide Web (WWW), que se hizo común y con ello se crearón las bases de protocolo de transmisión HTTP, el lenguaje de documentos HTML y el concepto de los URL. Internet tuvo un impacto profundo en el mundo laboral, por lo que fue necesario mejorar las páginas estáticas desarrolladas en HTML y se comenzó a crear el HTML dinámico capaz de actualizar los formularios y las bases de datos, en el momento de enviar una petición. Como consecuencia de estos cambios, a mediados de la década del año 2000 apareció la Web 2.0. Actualmente, Internet ha cambiado la vida de las personas; con el úso de un ordenador y acceso a la red. Es posible hacer casi de todo, que aún un usuario se le pueda ocurrir. Desarrollándose sistemas Web para la mayoría de las actividades que se realicen. Dichos sistemas se han convertido en las herramientas más utilizadas para el desarrollo económico, educativo y social. 2 Por otra parte, los sistemas Web son necesarios en el desarrollo laboral tanto en el ámbito empresarial privado como en administraciones publicas. En este trabajo, se enfocará en los sistemas Web de gestión académica SWGA1. Los cuales se encargan de las transacciones, tanto administrativas como académicas. Por tal motivo es necesario establecer mecanismos de protección, con la finalidad de proteger los datos de cada individuo y se mantengan tanto íntegros, como disponibles con sus los niveles de confidencialidad adecuada. De ahí la gran importancia de establecer, políticas para implantar la seguridad informática2. La proliferación de código maligno y su rápida distribución a través del Internet, así como los miles de ataques e incidentes de seguridad que se producen todos los años han contribuido a despertar un enorme interés por prevenir y detectar ataques a los SWGA. En este ámbito, el proyecto abierto de seguridad de aplicaciones Web 3 es una comunidad abierta y libre que se enfoca en mejorar la seguridad en las aplicaciones de sistemas Web. En el año 2010 se presentó una lista de riesgos y se concentro en las 10 principales amenazas Web. Para cada una de ellas, se proporciona información básica acerca de la amenaza, los controles de seguridad y el impacto en las transacciones de una organización. Actualmente el 80% de los ataques informáticos son llevados a cabo por código malicioso y las configuraciones por defecto que se realizan en el desarrollo de un sistema Web hacen que el ataque sea una tarea sencilla. Por todo lo expuesto, se propone un diseño que permita detectar dos de los principales ataques que son la Inyección SQL y Cross-Site Scripting XSS, publicado en lista de fallos de seguridad informática establecido por la fundación OWASP2 en su artículo “OWASP Top Ten Project” (http://www.owasp.org/index.php/Top_10) Además se han propuesto un sinnúmero de soluciones para los numerosos ataques de aplicaciones web durante varios años. Y como se dice: quien tiene la información tiene el poder. Así tanto los administradores de seguridades y los atacantes han medido sus habilidades y se han dedicado grandes esfuerzos para que los sistemas Web tengan una fortaleza segura o por el contrario se pueda vulnerar dichos sistemas para obtener la información. El mundo de la seguridad informática es un camino difícil, de allí la importancia que se debería dedicar a todos los aspectos relacionados a la seguridad informática y en especial a las seguridades en los SWGA. 1 2 3 SWGA, Sistemas Web de Gestión Académica Álvaro Gómez en su libro “Seguridad Informática Básica” define la seguridad Informática como cualquier medida que impida la ejecución de operaciones no autorizadas en un sistema o red informática, cuyos efectos puedan conllevar daños sobre la información. OWASP, The open Web application security project, http://www.owasp.org 3 1.1. Objetivos 1.1.1. General Definir un esquema que permita detectar ataques de Inyección SQL y Cross-Site Scripting XSS en los SWGA. 1.1.2. Específicos Analizar e identificar los principales fallos de seguridad en los SWGA. Seleccionar políticas, estándares y procedimientos de seguridad informática que permitan prevenir ataques a los SWGA. Proponer un diseño que permita evaluar las peticiones de entrada de un servidor de seguridad Web. Realizar un escenario de ataque de Inyección SQL para validar el diseño propuesto. 1.2. Contenido Este documento está estructurado en cinco apartados. El primero hace una introducción de lo que se quiere alcanzar con esta investigación. El segundo recoge el estado de arte donde se describen los conceptos y fundamentos de seguridad informática, políticas de seguridad y ataques del tipo Inyección SQL y XSS. El tercero apartado se selecciona un conjunto de políticas, estándares y procedimientos de seguridad informática con el objetivo que sirva como guía para el uso correcto de los SWGA. El cuarto se presenta un diseño que permite aplicar las políticas de seguridad seleccionadas en el tercer apartado y poder evaluar los datos que ingresa una persona a través de un navegador Web. El quinto se describen las conclusiones obtenidas en este proyecto de investigación y trabajos futuros. Además en los anexos se incluyen las políticas de seguridad para la implementación de código en sistemas web y los índices de las figuras y tablas. 4 2 Estado del Arte 2.1. La seguridad en sistemas informáticos. El 22 de noviembre de 1988 Robert T. Morris un estudiante graduado de la Universidad de Cornell, protagonizó un gran incidente de la seguridad informática: uno de sus programas se convirtió en el famoso gusano de Internet llamado “El Gusano de Morris”. Miles de computadoras conectados a la red se vieron inutilizadas durante días, y las pérdidas fueron estimadas en millones de dólares. Desde ese momento el tema de la seguridad en sistemas operativos, redes, hardware y software han adquirido una gran importancia [1]. Hoy en día la seguridad informática es cada vez más reconocida e importante a nivel mundial, tanto en las empresas privadas como en las instituciones públicas, ya que Internet es la principal fuente de acceso de cualquier tipo de información y por ello se han diseñado e implementado un sinnúmero de aplicaciones para casi todas las áreas del conocimiento. Esto ha permitido que se automaticen muchos procesos que habitualmente se realizaban de forma manual, lo que permitió que se agiliten los procesos y simplificado el trabajo de las persona. Por tal razón las personas se han vuelto muy dependientes de Internet, lo que podría ser un problema debido a los fraudes de inseguridad informática [2]. La definición de Seguridad Informática es un concepto más amplio y se puede definir como cualquier medida que impida la ejecución de operaciones no autorizadas sobre un sistema o red informática, cuyos efectos pueden producir daños de la información y comprometer su confidencialidad, autenticidad e integridad.[3] Los profesionales de la seguridad de la información deben proporcionar dos funciones distintas, la dirección ejecutiva y el rol táctico. La dirección ejecutiva de la información es necesaria para tomar decisiones de riesgo oportuna, sensible y realista en materia de gestión de la información. El rol táctico hay que tomar en consideración la parte operacional (el impacto que tiene un incidente en nuestra capacidad para apoyar al proceso del negocio), de recuperación (el impacto y el precio de nuestras acciones) y el financiero (el gasto de compensación de las horas extraordinaria, gasto directo en efectivo y otros gastos) [4]. El valor de la seguridad está constituido por la relación calidad-precio. Cuando mejor sea la relación, mayor será el valor. José Ángel de Bustos hace una reflexión y afirma que para que un sistema informático sea seguro no basta con utilizarlo correctamente. Hace falta que esté 5 4 libre de fallos, que no tenga puertas traseras y que no posea ninguna funcionalidad "no documentada". La única forma de poder fiarnos de la seguridad de un programa informático es tener a nuestra disposición el código fuente, ya que de esta manera podemos ver cómo ha sido desarrollado [5]. Es cierto que esta reflexión tiene dos caras, la primera es que al tener el código fuente disponible y por ende los intrusos tienen ventajas, ya que pueden descubrir los fallos y aprovecharse de ellos, y también existe gente dedicada a la "caza" de bugs5 que descubre los fallos, los pone en conocimiento de los usuarios y los arregla, con lo cual los usuarios pueden obrar en consecuencia. Lo que ocurre es que no hay una “cultura” de seguridad en Internet. La sociedad en que vivimos nos ha enseñado desde que éramos niños unas reglas básicas de protección de nuestros objetos personales para evitar pérdidas o robos. En cambio nuestra experiencia con Internet es muy breve y es una realidad que cada vez más personas necesitaran conocer el manejo de las computadoras así como las protecciones que día a día se van ofreciendo para garantizarnos la seguridad en el manejo de la información. 2.1.1 Principios básicos Al hablar de aplicaciones Web se está haciendo directamente referencia a seguridad lógica6, ya que en lo que se refiere a seguridad física pertenece a otras instancias distintas de un desarrollado Web. Por tal razón, en este trabajo tomaremos como referencia a la norma ISO/IEC 177997. Esta norma evalúa el nivel de protección de un sistema informático analizando la confidencialidad, integridad y disponibilidad, dependiendo del tipo de organización. En nuestro caso nos enfocaremos a las tres características porque al establecer un mecanismo para prevenir un ataque en SWGA. Confidencialidad: los objetos de un sistema han de ser accedidos únicamente por elementos autorizados a ello. Asegura el secreto de las comunicaciones contenidas en los mensajes. 4 5 6 7 Puerta trasera en un sistema informático es una secuencia especial dentro del código de programación mediante la cual se puede evitar los sistemas de seguridad del algoritmo (autentificación) para acceder al sistema. Son defectos del software, es el resultado de un fallo o deficiencia durante el proceso de creación de un sistema informático Consiste en la aplicación de barrera y procedimientos que resguarden el acceso a los datos y sólo se permite acceder a ellos a las personas autorizada para hacerlo. http://www.iso.org/iso/catalogue_detail?csnumber=39612 6 Integridad: los objetos sólo pueden ser modificados por elementos autorizados, y de una manera controlada. Hace referencia al hecho de que la información no pueda ser manipulada en el proceso de envío. Disponibilidad: los objetos del sistema tienen que permanecer accesibles a elementos autorizados. [6]. Las aplicaciones Web, por definición, permiten el acceso de usuarios a recursos centrales tal como al servidor Web y el cual permite el acceso a otros servidores de base de datos. Con los conocimientos y la implementación correcta de medidas de seguridad, se pueden proteger los recursos así como proporcionar un entorno seguro en el cual los usuarios trabajen cómodos con su aplicación. Una aplicación Web, especialmente que se ejecuta en Internet, es muy vulnerable a ataque de los hacker8 que una aplicación autónoma o cliente-servidor típica. Hay varias razones para esto: Disponibilidad y accesibilidad: Muchas aplicaciones Web están disponibles para los usuarios públicos en cualquier momento del día o de la noche. Como los servidores Web tienen que permitir el acceso a usuarios públicos y no tienen la protección completa de los cortafuegos típicos de una empresa. Familiaridad: La mayoría de los atacantes, incluso los menos sofisticados, conocen las interfaces Web. Un navegador Web es fácil de obtener y es uno de los programas de aplicación más comunes. El protocolo HTTP está bien definido, y existen muchas herramientas de hacking9 creados específicamente para ayudar a los atacantes a penetrar y comprometer las aplicaciones Web. Facilidad: La configuración de un servidor Web, contenedor Web y aplicación Web para uso público es extremadamente compleja. Los atacantes, frecuentemente, pueden aprovechar esta complejidad y explotar deficiencias en la configuración de la aplicación o del sistema. Publicidad: El ego de algunos hackers experimentados es la publicidad, la fama, o un simple deseo de probar que pueden hacer algo que pocas otras personas pueden hacer [7]. 8 Persona experta en la rama de la tecnología, especialmente en la informática, que se dedica a intervenir y/o realizar alteraciones técnicas con la finalidad de conocer como funciones los sistemas informáticos. 9 Técnicas y procedimientos utilizados por un hacker para cumplir un determinado objetivo. Suele asociarse esta palabra a procedimientos ilegales o malignos. 7 Tabla 1. 10 principales problemas de seguridad en aplicaciones Web, publicadas por OWASP en el año 2007 y 2010 OWASP Top 10-2007 (Previous) A2 Injection Flaw A1 Cross site scripting (XSS) A7 Broken authentication and session management A4 Insecure direct object reference A5 Cross site request forgery (CSRF) <was T10 2004 A10 – Insecure configuration management> A8 Insecure cryptographic storage A10 Failure restrict URL access A9 Insecure communications <not in T10 2007> OWASP Top 10-2010 (New) A1 Injection SQL A2 Cross site scripting (XSS) A3 Broken authentication and session management A4 Insecure direct object reference A5 Cross site request forgery (CSRF) A6 Security Misconsfiguration (NEW) A7 Insecure cryptographic storage A8 Failure restrict URL access A9 Insufficient transport layer protection A10 Unvalidated redirects and forward (NEW) A3 Malicious file execution <dropped from T10 2010> A6 Information leakage and improper error <dropped from T10 2010> handing 2.1.2. Características Generales de los SWGA Al tratarse de aplicaciones Web estamos tratando con un término muy extenso, debido a la amplia gama de aplicaciones una de ellas son los SWGA y son sistemas que han sido desarrollados para ser utilizados por distintas unidades o áreas académicas, tomando como referencia dos ejemplos, la Universidad del País Vasco usa el sistema GAUR10 en sus diferentes campus ubicados en las ciudades de Vizcaya, Bilbao o San Sebastián o la Universidad Nacional de Loja11 usa el SGA.12 Estos sistemas Web se encargan de los procesos en el ámbito académico como administrativo y adaptan las funcionalidades de acuerdo con los procesos que desarrollan cada dependencia (alumnos, profesores, administrativos), es decir cada una carga solo los datos que le competen y todo va a una base de datos integrada que permite que no haya duplicidad de información y que el responsable de administrar la información sea quien la cargue al sistema. Toda la información es compartida por las diferentes sedes en forma online. 10 Gestión Académica Universitaria Renovada http://gestion.ehu.es/gaur La Universidad Nacional de Loja, UNL, es una Institución de Educación Superior, laica, autónoma de derecho público, situada en la provincia de Loja, al sur del Ecuador 12 Sistema de Gestión Académica http://unl.edu.ec 11 8 Ahora es necesario centrarnos en la gestión académica y dentro de esta parte del sistemas es importante considerar la gestión estudiantil es considerada como una parte esencial del proceso de aprendizaje de los estudiantes porque gran parte del servicio que se presta a los estudiantes dependerá de la manera en la que se administre los aspectos esenciales que intervienen una gestión académica integral tal como la información personal del estudiante, sus calificaciones de cada periodo académico e incluso su asistencia. Este tipo de sistemas establece un vínculo entre el docente y el estudiante manteniendo una gestión apropiada para la notificación de novedades, eventos académicos, publicación de notas, asistencias que puedan surgir en el transcurso del periodo académico. Por otra parte la complejidad de los procesos que manejan las instituciones educativas, conllevan a emplear una gran cantidad de tiempo y dinero en la realización de tareas repetitivas, lo que implica que los usuarios experimenten una baja competitividad en los servicios que prestan al los usuarios y docentes ya que ya que es susceptible a perdida de la información y errores humanos. En la siguiente tabla se especifica los procesos que comúnmente se realizan en los sistemas GAUR y SGA. Tabla 2. Modulos y procesos que se realizan en los SWGA GESTIÓN ACADÉMICA Y ADMINISTRATIVA Administración de Horarios Crear Paralelos Crear Plan de Estudio Asignar Plan de Estudios Admisión y Matrícula Solicitar Matricula Asentar Matricula Facturación y Cobros Generar Papeleta de Pago Pagar Matricula Registro de Notas y Asistencia Ingresar Notas y Asistencias Publicar Notas y Asistencias Notificar Notas y Asistencias Administración de Carrera Crear carrera Seguimiento Académico Gestionar datos Verificar estado académica 9 Para poder ir delimitando las seguridades informáticas es necesario especificar que la gestión académica es aquella que se refiere a los datos relacionados con los alumnos y su currículum universitario. De este modo podríamos enumerar ciertos contenidos que pueden ser considerados información académica como los datos personales, datos académicos13 y datos logísticos14. No se considerará como información académica aquella que esté relacionada con los alumnos, como puede ser los importes de la matriculación y créditos cursados, los datos de la domiciliación bancaria, el importe de becas que le hayan sido concedidas. Este tipo de datos del alumno se ubicará dentro del entorno administrativo. En España, el Reglamento 994/199915 establece las medidas de seguridad para la protección de la información académica [8]. Al conocer los procesos que se realizan en estos sistemas podemos entender que los principales atacantes son por lo general los mismos usuarios que interactúan con el sistema. Un ejemplo de ello es un posible estudiante desea modificar sus notas o asistencias, por ello trata de encontrar alguna vulnerabilidad y poder modificar los datos académicos de su expediente académico. Otra vulnerabilidad puede nacer desde los propios docentes como por ejemplo corregir alguna nota o asistencia mal ingresada. Como hemos analizado, este tipo de vulnerabilidades son típicos ataques que se realizan con el fin de modificar los datos de los repositorios de almacenamientos, como consecuencia una ataque de Inyección SQL es un ataque común para este tipo de sistemas, por tal motivo estos ataques se comunes a los ataques descritos en la tabla 1 2.2. Políticas de seguridad. El término política de seguridad se suele definir como un conjunto de requisitos definidos por los responsables de un sistema, que indica en términos generales que está y que no está permitido en el área de seguridad durante la operación general del sistema Web [9]. La evolución de Internet y su gran desarrollo en la década de 1990 planteó la importancia de las políticas de seguridad para las transacciones a distancia. Los datos sensibles tuvieron que ser protegidos, y los nodos de la Internet tenían que ser protegidos de accesos no deseados. Se incluye toda la información referente al historial académico de alumno, donde consta, entre otros datos, las asignaturas que ha cursado y sus correspondientes calificaciones. 14 Nos indica a qué grupo ha asistido dentro de una asignatura, cuál era su horario de clases, qué profesores impartían los créditos a los que estaban matriculados. 15 Real Decreto 994/1999-Boletín Oficial del Estado http://www.boe.es/boe/dias/1999/06/25/pdfs/A2424124245.pdf. 13 10 La mayoría de errores involuntarios de seguridad se dan en el código de la misma aplicación Web, independiente de la tecnología usada en la implementación de seguridad en los servidores Web. Según Scott D. y Sharp R. [10] afirma que la aplicación de una política de seguridad a través de una aplicación Web es difícil debido a: La aplicación se puede escribir en una variedad de idiomas. En este caso, no hay manera fácil de abstractos relacionados con la seguridad de código. Los lenguajes utilizados para el desarrollo Web no siempre son favorables a la escritura relacionada con la seguridad (en especial del código en tiempo de compilación). Un sitio Web puede estar formada por cientos si no miles, de direcciones URL. El rendimiento es un factor crítico. Es importante ser capaz de evitar el procesamiento excesivo y ser capaz de imponer comprobaciones suficientes cuando sea necesario para garantizar la seguridad de la aplicación. Las aplicaciones Web a menudo contienen componentes de terceros. Ya que no puede ser viable para modificar la fuente de dichos componentes. La política se refleja en una serie de normas, reglamentos y protocolos a seguir, donde se definen las medidas a tomar para proteger la seguridad del sistema; pero ante todo, una política de seguridad es una forma de comunicarse con los usuarios Siempre hay que tener en cuenta que la seguridad comienza y termina con personas y debe: Ser holística, es decir cubrir todos los aspectos relacionados con la seguridad. No tiene sentido proteger el acceso con una puerta blindada si a esta no se la ha cerrado con llave. Adecuarse a las necesidades y recursos. Ser atemporal. El tiempo en el que se aplica no debe influir en su eficacia y eficiencia. Definir estrategias y criterios generales a adoptar en distintas funciones y actividades, donde se conocen las alternativas ante circunstancias repetidas. Una política de seguridad ha de contemplar los elementos claves antes mencionados como son: la Integridad, Disponibilidad, Privacidad y, adicionalmente, Control, Autenticidad y Utilidad [11]. La política de seguridad de una organización es algo así como las normas, reglas o leyes que rigen la vida de la organización en cuanto a qué se puede hacer y que no se puede hacer. 11 Toda política de seguridad debe tener normas sobre uso aceptable, que definan el uso apropiado de los recursos informáticos de la organización. Los usuarios deberían leer y firmar tales normas, como parte del proceso de petición de cuentas de trabajo. Debe establecer claramente la responsabilidad de los usuarios con respecto a la protección de la información almacenada en sus cuentas. Debe señalar que permisos pueden tener los usuarios sobre ficheros. Debe estipular el uso aceptable del acceso Web y de todo tipo de acceso a Internet, así como discutir los usos aceptables, no relacionados con el objeto de la organización, de los recursos informáticos. En la siguiente tabla se presenta otro ejemplo de la relación entre una determinada política de seguridad. Tabla 3. Ejemplo de política de seguridad informática. Política Procedimiento Actualización del software del servidor Web Protección del servidor Web de la UNL Revisión de los contra accesos registros de no autorizados actividad del servidor. Tareas a realizar Revisión de los parches publicados por el fabricante. Seguimiento de las noticias sobre posibles fallos de seguridad Revisión semanal de los “logs” del servidor para detectar situaciones anómalas Configuración de alertas de seguridad que permitan reaccionar de forma urgente ante determinados tipos de ataques e intentos de instrucción Ahora es necesario centrarnos en las políticas de seguridad orientado a los SWGA y a la protección de los datos. Para ello se debe redactar un documento donde se detallen las normas a seguir para la obtención de los datos académicos y debe contener la descripción de todos los procedimientos y tareas a realizar como muestra la tabla 2. Además cada centro educativo tiene que asegurar la identificación y autenticación de usuarios para que el acceso de los datos académicos sólo sea para aquellas personas que estén habilitadas para ello. El mecanismo se basa en la existencia de nombre de usuario y contraseñas. Se acostumbra a adoptar un conjunto de normas como por ejemplo: No se deben permitir usuarios genéricos. Así pues el usuario “profesor” no sería válido ya que permitiría el acceso al sistema de diversas personas y no permitiría saber quien está accediendo a la información. Se debe activar la caducidad de la contraseña y se fuerza al usuario a que cambie su contraseña de manera mensual o bimensual y así limitar el uso de contraseñas que hayan podido ser sustraídas. 12 Guardar un histórico de contraseñas, con el fin de evitar repeticiones en los cambios y obligar al usuario a cambiar realmente la palabra de paso. Bloquear la cuenta del usuario a partir de ciertos número fallidos, con el objeto de limitar posible acceso no autorizados de forma reiterada No permitir contraseña con datos obvios del usuario como ser sus iniciales, fechas de nacimiento, nombres de familiares cercanos, etc. Otro punto importante dentro de las políticas de seguridad es el control de acceso. Esta medida determinará que el usuario solo tendrá acceso a los datos académicos que le sean necesarios para desempeñar su trabajo. Así que un usuario profesor solo tendrá acceso a los datos académicos de sus alumnos y a su asignatura. Para el control de acceso es necesario establecer un grupo de usuario con sus respectivos roles, especificar que tareas van a realizar y documentar esta información. El control de accesos descrito hasta el momento se lo denomina como control lógico [8]. La privacidad de la información es importante en cualquier para cualquier sistemas Web y en España existe un decreto16 que protege la privacidad de la información. Este decreto, establece tres niveles de protección de datos que son: Básico, Medio y Alto. Nivel Básico: Todos los ficheros que contengan datos personales, circunstancias sociales, académicas, profesionales, laborables, comerciales o económicas. Nivel Medio: Cuando los datos se refieren a infracciones administrativas o penales, Hacienda Pública, servicios financieros o solvencia patrimonial o de crédito. Nivel Alto: Los ficheros que contengan datos especialmente protegidos como los relacionados con la ideología, religión, creencias, origen racial, vida sexual, salud y datos recabados para fines policiales [12]. Según el decreto, esta seguridad es aplicable a todos los datos, el reglamento define medidas de seguridad concretas que van desde cosas básicas como un registro de incidencias y asegurar la correcta identificación y autenticación de los usuarios que accedan a los datos personales, medidas de nivel medio como auditorías y control de acceso físico hasta medidas de nivel alto como el cifrado de las comunicaciones o un registro de acceso detallado que guarda cómo mínimo la identificación del usuario, la fecha y hora en que se realizó, el fichero accedido, el tipo de acceso y si ha sido autorizado o denegado. 16 Articulo 18.4 de la Constitución Española establece “la ley limitará el uso de la informática para garantizar el honor y la intimidad personal y familiar de los ciudadanos en pleno ejercicio de sus derecho” 13 El responsable del sistema debe elaborar el documento de seguridad que recogerá las medidas de índole técnica y organizativa acordes a la normativa de seguridad vigente que será de obligado cumplimiento para el personal con acceso a los sistemas de información. 2.3. Ataques informáticos. Un ataque informático consiste en aprovechar alguna debilidad o falla en el software, en el hardware, e incluso, en las personas que forman parte de un ambiente informático; a fin de obtener un beneficio, por lo general de índole económico, causando un efecto negativo en la seguridad del sistema, que luego repercute directamente a una organización. Para minimizar el impacto negativo provocado por ataques, existen procedimientos y mejores prácticas que facilitan la lucha contra las actividades delictivas y reducen notablemente el campo de acción de los ataques. Uno de los pasos más importantes en seguridad, es la educación. Comprender cuáles son las debilidades más comunes que pueden ser aprovechadas y cuáles son sus riesgos asociados, permitirá conocer de qué manera se ataca un sistema informático ayudando a identificar las debilidades y riesgos para luego desplegar de manera inteligente estrategias de seguridad efectivas [13]. EC-Council17 ha identificado las fases mediante la cual los atacantes de redes y sistemas Web realizan sus intrusiones, ésta contempla un conjunto de 5 pasos para obtener y mantener los accesos a los sistemas Web y son: Reconocimiento. Esta etapa involucra la obtención de información con respecto a una potencial víctima que puede ser una persona u organización. Por lo general, durante esta fase se recurre a diferentes recursos de Internet como Google, entre tantos otros, para recolectar datos del objetivo. Exploración. Esta etapa se utiliza la información obtenida en la fase de reconocimiento y tratar de obtener datos como direcciones IP, nombres de host, datos de autenticación, entre otros. Obtener acceso. En esta instancia comienza a materializarse el ataque a través de la explotación de las vulnerabilidades y defectos del sistema descubiertos durante las fases de reconocimiento y exploración. Mantener el acceso. Una vez que el atacante ha conseguido acceder al sistema, buscará implantar herramientas que le permitan volver a acceder en el futuro desde cualquier lugar donde tenga acceso a Internet. Borrar huellas. Una vez que el atacante logró obtener y mantener el acceso al sistema, intentará borrar todas las huellas que fue dejando durante la intrusión 17 Consejo Internacional de Comercio Electrónico, http://www.eccouncil.org/ 14 para evitar ser detectado por el profesional de seguridad o los administradores de la red. En consecuencia, buscará eliminar los archivos de registro (log) [14]. 2.3.1 Ataques vía Web. Los ataques a las páginas Web de una organización son casi siempre los más vistosos, en cuestión de minutos piratas de todo el mundo se enteran de cualquier problema de una página Web principal. Por supuesto, la noticia de la modificación salta inmediatamente a los medios, que gracias a ella pueden rellenar alguna cabecera sensacionalista sobre los piratas de la red, y así se consigue que la imagen de la empresa atacada caiga notablemente y la del grupo de piratas suba entre la comunidad nacional o internacional. La mayor parte de estos ataques tiene éxito gracias a una configuración incorrecta del servidor, errores de diseño del mismo, al código de la propia aplicación Web, en organizaciones grandes estos ataques suelen ser bastante complejos(alta disponibilidad, balanceo de carga, sistemas propietarios de actualización de contenidos...) y difíciles de administrar correctamente, mientras que si la empresa es pequeña es muy posible que haya elegido un servidor Web simple en su instalación y administración pero en el cual es casi imposible garantizar una mínima seguridad. Sea por el motivo que sea, la cuestión es que cada día es más sencillo para un pirata ejecutar órdenes de forma remota en una máquina, o al menos modificar contenidos de forma no autorizada, gracias a los servidores Web que un sistema pueda albergar. Cualquier analizador de vulnerabilidades18 que podamos ejecutar contra nuestros sistemas es capaz de revelar información que nos va a resultar útil a la hora de reforzar la seguridad de nuestros servidores Web. En cualquier servidor Web es muy importante el usuario bajo cuya identidad se ejecuta el demonio httpd, ese usuario no debe ser nunca el root del sistema, pero tampoco un usuario genérico como nobody, se ha de tratar siempre de un usuario dedicado y sin acceso real al sistema. Por supuesto, las páginas HTML nunca deben ser de su propiedad, y mucho menos ese usuario ha de tener permiso de escritura sobre los mismos, con un acceso de lectura es más que suficiente en la mayoría de los casos. Hemos de tener en cuenta que si el usuario que ejecuta el servidor puede escribir en las páginas Web, y un pirata consigue ejecutar órdenes bajo la identidad de dicho usuario, podría modificar las páginas Web sin ningún problema. 18 Nessus, ISS Security Scanner, NAI CyberCop Scanner 15 Una característica importante de la detección de ataques vía Web es que no suelen generar muchos falsos positivos, por lo que la configuración de la base de datos inicial es rápida y sencilla, OWASP afirma que las amenazas para las aplicaciones Web cambian constantemente. Los factores clave en esta evolución son los avances hechos por los atacantes, la liberación de nueva tecnología, así como la instalación de sistemas cada vez más complejos. Los atacantes pueden potencialmente usar muchas diferentes rutas a través de su aplicación para causar daño en su negocio u organización. Cada una de estas rutas representa un riesgo que puede, o no, ser lo suficientemente serio como para merecer atención. A veces, estas rutas son triviales de encontrar y explotar y a veces son extremadamente difíciles. De manera similar, el daño causado puede ir de ninguno hasta incluso sacarlo del negocio. Para determinar el riesgo para su organización, puede evaluar la probabilidad asociada con cada agente de amenaza, vector de ataque19 y debilidad de seguridad y combinarla con una estimación del impacto técnico y de negocios en su organización. Juntos, estos factores determinan el riesgo total. Agentes de amenaza Vectores de ataque Debilidades de seguridad Ataque Debilidad Control Debilidad Control Ataque Ataque Controles de seguridad Impactos técnicos Impactos al negocio Recurso Impacto Recurso Debilidad Debilidad Control Recurso Impacto Impacto Figura 1: Riesgos de seguridad en aplicaciones Web OWASP enfoca los riesgos más serios y más comunes para un amplio tipo de organizaciones incluyendo los SWGA. Estos riesgos fueron publicados en el 2007 y se basó en los datos de la lista CVE20, que durante 5 años has estado siguiendo los tipos de errores que conllevan a vulnerabilidades en los sistemas Web. El resumen de resultados estableció que en el año 2005 y 2006 que XSS fue la vulnerabilidad más crítica con el 18,5%, y Inyección SQL fue la segunda con 13.6% [15]. Inyección SQL y XSS permiten a los atacantes el acceso no autorizado a datos (leer, insertar, modificar o borrar), acceder a las cuentas de base de datos, a 19 20 Es un punto donde se puede atacar un sistema donde hay problemas de seguridad Es una lista ampliamente aceptada que contienen vulnerabilidades de aplicaciones Web. Es organizado por la Corporación MITRE, http://cve.mitre.org/ 16 suplantar a otro usuario (por ejemplo, el administrador), imitan a las aplicaciones web para obtener el acceso con el servidor web, etc. José Fonseca y Marco Vieira realizaron la evaluación de 6 aplicaciones Web, y concluyeron que XSS y Inyección SQL son las vulnerabilidades que mas existen a nivel mundial, en la tabla 3 se muestran los resultados obtenidos [16]. Figura 2: Distribución XSS e Inyección SQL La vulnerabilidad Inyección SQL se presente en la incorrecta validación de las variables de entrada del usuario y las que contiene sentencias SQL. Con el propósito de atacar a los servidores web o base de datos, los hackers utilizan códigos maliciosos en los formularios web o URL para construir sentencias SQL a través de una vulnerabilidad de inyección SQL. Es una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o script. El código siguiente ilustra un tipo de vulnerabilidad de Inyección SQL: Sentencia = SELECT*FROM usuario where nombre=' + nombreUsuario + ''' ; '' El “usuario” es la variable en la cual el usuario debe ingresar datos, y una vez que los hacker explotan esta variable (un ejemplo 'a'='a), la sentencia sql se verá en la obligación de ejecutarla. Jone';DROP TABLE usuario; SELECT * FROM infoUsuario WHERE 'a' = 'a Esta sentencia eliminará la tabla “usuario” y revela la información de los usuarios. En la figura 3 muestra la forma de detectar vulnerabilidades de Inyección SQL a través de rastreadores Web (Web Crawler) y estos a su vez interactúan con las aplicaciones Web, simulan el ataque. Mediante el análisis de la información recogida por Web Crawler, el motor de detección construye un código y lo envía a los servidores web. El motor de detección de espera la respuesta y el análisis que, una vez que las palabras claves especificadas, puede detectar los datos de respuesta e identificar la vulnerabilidad 17 Web crawler Reunir información web Simular ataque Construir petición Enviar petición Analzar Respuesta Respuesta Web Identificar vulnerabilidades Figure 3: Detección de Vilnerabilidades de Inyeción SQL usando un simulador de códigos de ataques. Se ha logrado detectar 30 tipos de ataque de código21. La siguiente imagen muestra algunos tipos de ataques. [17] Tabla 4. Ejemplo de algunos códigos Inyección SQL. 1 „ÓR 1=12 „%22 3 „)OR 4 „ 5 %3B ………. … Si analizamos, el atacante cuando construye una sentencia SQL, por lo general suele usar espacios, comillas simples, comillas dobles o guiones y por lo general, es necesario hacer un análisis por separado de la sentencia SQL y la Inyección SQL y separar la cadena SQL a través de un arreglo. Tabla 5. Resultado del análisis de una consulta SQL 0 1 2 3 4 Select * from tabla where atributo= Entrada del usuario Ahora si se le agrega un ataque (inyección SQL) a una sentencia SQL, veremos su forma de construir dicho ataque. 21 http://www.unixwiz.net/techtips/sql-injection.html 18 Tabla6. Ataque con una consulta de inyección SQL 0 1 2 3 4 5 6 7 8 Select * from tabla where atributo= Entrada del usuario or 1 = 1 Por otra parte, los ataques de tipo XSS son ataques contra aplicaciones Web en los que el atacante toma el control sobre el navegador de un usuario con el objetivo de ejecutar código o script malicioso dentro de un entorno de confianza del sitio Web asociado a la aplicación final. Si dicho código es ejecutado satisfactoriamente, el atacante puede obtener acceso, de forma activa o pasiva, a recursos de los navegadores Web asociados con la aplicación, tales como los cookies e identificadora de sesión [18]. Existen tres tipos conocidos de secuencias de comandos en sitios cruzados: reflejado, almacenado e inyección DOM. XSS reflejado es el más fácil para explotar una página reflejara información suministrada por el usuario: Echo $_REQUEST[„entradaUsuario‟] El XSS almacenado toma la información, la almacena en un fichero, una base de datos, u otro sistema de almacenamiento, y luego en una etapa posterior, muestra dicha información sin filtrado alguno. Esto es extremadamente peligroso en sistemas de administración de contenidos, blogs, o foros, donde un gran número de usuarios accederá a la información introducida por otros usuarios. Con ataques basados en inyección DOM, el código JavaScript del sitio Web y sus variables son manipulados, en lugar de los elementos HTML. Alternativamente, los ataques pueden ser una mezcla o un híbrido de los tres tipos mencionados anteriormente. El peligro con la secuencia de comandos en sitios cruzados no es el tipo de ataque, sino la posibilidad del mismo. Un comportamiento inesperado del navegador Web puede introducir sutiles vectores de ataque. Los ataques son implementados generalmente en JavaScript, que es un poderoso lenguaje de secuencia de comandos. JavaScript permite a los atacantes manipular cualquier aspecto de la página mostrada, incluyendo agregar nuevos elementos, manipular cualquier aspecto del árbol interno DOM, y borrar o cambiar la manera en la cual una página es visualizada. JavaScript permite la utilización de XmlHttpRequest22, el cual es utilizado en sitios con tecnologías 22 Es un interfaz empleada para realizar peticiones http y https a servidores Web 19 23 AJAX, incluso si el sitio de la víctima no utiliza AJAX actualmente. Algunas veces es posible evadir la política que indica al navegador Web enviar la información a su origen utilizando XmlHttpRequest y por lo tanto reenviar la información de la victima a sitios hostiles, y crear complejos gusanos y virus maliciosos que se mantendrán activos mientras el navegador Web se encuentre abierto. Ahora es necesario verificar que todos los parámetros en la aplicación sean validados y/o codificados antes de ser incluidos en páginas HTML, vamos a exponer dos tipos de verificaciones que son: Verificación automatizada: herramientas automáticas de testeo de penetración son capaces de detectar XSS reflejado a través de inyección de parámetros, pero generalmente fallan a la hora de encontrar XSS persistente, particularmente si la salida del vector XSS inyectado es restringida a través de pruebas de autorización. Herramientas automáticas de escaneo de código fuente pueden encontrar APIs débiles o peligrosas pero normalmente no pueden determinar si la validación o codificación se ha realizado, lo cual puede resultar en falsos positivos. Ninguna herramienta es capaz de encontrar XSS basado en DOM, lo cual significa que las aplicaciones basadas en Ajax frecuentemente se encontrarán en riesgo si sólo se ha realizado una verificación automatizada. Verificación manual: si se ha utilizado un mecanismo centralizado de validación y codificación, la manera más eficiente de controlar la seguridad es revisando el código. Si en cambio, se ha utilizado una implementación distribuida, entonces la verificación tomará considerablemente mucho más tiempo. El testeo toma mucho tiempo ya que la superficie de ataque en la mayoría de las aplicaciones es muy amplia. La mejor protección para XSS es una combinación de validación de listas blancas (“whitelists”) de toda la información entrante y una apropiada codificación de la información saliente. La validación permite la detección de ataques, y la codificación previene cualquier inyección de secuencia de comandos de ejecutarse exitosamente en el navegador. Prevenir XSS en una aplicación entera requiere una solución de arquitectura consistente en: Validación de entrada: utilizar un mecanismo estándar de validación de entrada para validar toda la información entrante contra longitud, tipo, sintaxis, y reglas de negocio antes de permitir que la información sea visualizada o almacenada. Utilizar una estrategia de validación de “aceptar solo lo bueno”. Rechazar la información inválida en lugar de rehabilitar posible información hostil. No olvidar que los mensajes de errores pueden también contener información inválida. 23 Acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML). Es una técnica de desarrollo Web para crear aplicaciones interactivas. 20 Codificación fuerte de salida: asegurar que toda la información suministrada por el usuario sea apropiadamente codificada antes de devolver la página, mediante la codificación de todos los caracteres a excepción de un pequeño subgrupo. También, configurar la codificación de caracteres para cada página de salida, lo cual reducirá la exposición a algunas variantes. Especificación de la codificación de salida: no permitir que el atacante elija esto en nombre de los usuarios. No utilizar la validación de lista negra “blacklist”: para detectar XSS en la entrada o para validar la salida. Buscar y reemplazar solo algunos caracteres (“<” “>” y otros caracteres similares o frases tales como “script”) es una técnica débil y ha sido atacada satisfactoriamente con anterioridad. Incluso una etiqueta “<b>” sin verificar es inseguro en algunos contextos. XSS tiene un sorprendente número de variantes que hacen sencillo evitar la validación de listas negras. Cuidado con los errores canónicos: Los valores de entrada deben ser decodificados y canonizados a la representación interna de la aplicación antes de ser validados. Asegurarse que la aplicación no decodifique la misma entrada dos veces. Tales errores pueden ser usados para evadir los esquemas de listas blancas “whitelists” introduciendo entradas peligrosas luego de haber sido controladas [19]. 21 3 Políticas de Seguridad Informática en los SWGA En la sección 2, se observó el estado de arte relacionado con el proyecto en donde se presentan los conceptos importantes sobre seguridad informática, políticas de seguridad y los ataques informáticos que se dan en las aplicaciones Web tomando como referencia el ataque más habitual según OWASP que es la Inyección SQL. El objetivo de esta sección es seleccionar las políticas de seguridad informática más adecuado para los SWGA, para ello se ha tomado como referencia el trabajo de Canaleta X, y Vernet D.[8], quienes hacen un análisis de la gestión de datos y definen al entorno académico como los datos relacionados con el alumno y su currículum académico y de esta manera se podría enumerar ciertos contenidos que se podrían ser considerados como información académica y establece algunas medidas de seguridad de nivel básico para los ficheros académicos. Pero hay que tomar en cuenta, que para establecer una política de seguridad es necesario tener en claro que la inversión en seguridad debe ser proporcional al valor de la información y los elementos a proteger. Las áreas de normalización que tomaremos en cuenta son el técnico y la humana. 3.1 Documento de seguridad. Se debe redactar un documente donde se detalle las normas a seguir por todo el personal que tenga acceso a los datos en los SWGA con el propósito de garantizar integridad y confidencialidad de la información, así mismo este documento también debe de contener la descripción de todos los procedimientos y tareas exigidos en el estándar internacional ISO/IEC 17799. Todo documento de política de seguridad debe ser aprobado por la parte gerencial o ejecutiva de una institución para posteriormente comunicar y socializar por todos los usuarios. 3.2 Manual de Políticas de Seguridad para SWGA 3.2.1 Responsabilidades Los siguientes entes son responsables, en distintos grados, de la seguridad de los sistemas Web: 22 El Administrador de Sistemas: es la persona responsable de implantar y velar por el cumplimento de las políticas, normas, y procedimientos de seguridad a lo largo de toda la organización. También es responsable de evaluar, adquirir e implantar productos de seguridad informática, y realizar las demás actividades necesarias para garantizar un ambiente informático seguro. Además debe ocuparse de proporcionar apoyo técnico y administrativo en todos los asuntos relacionados con la seguridad. El Jefe de Seguridad: es la persona responsable de dirigir las investigaciones sobre incidentes y problemas relacionados con la seguridad, así como recomendar las medidas pertinentes. Analista Programador: es la persona responsable de la parte operacional las cuales constan del análisis, diseño e implementación de los sistemas web tomando en cuenta las normas relacionada con la seguridad del código de la aplicación (Ver en anexos A). También es responsable de realizar el soporte y mantenimiento de los sistemas web. Los usuarios son las personas responsables del uso y manipulación de los SWGA, hacen uso de la información que reposan en los servidores y son los que deben cumplir con todas las políticas del Seguridad, aquí enumeramos algunas de sus funciones: Conocer y aplicar las políticas y procedimientos apropiados en relación al manejo de la información y de los sistemas informáticos. No divulgar información confidencial del Sistema Web a personas no autorizadas. No permitir y no facilitar el uso de los sistemas Web a personas no autorizadas. No utilizar los recursos informáticos (hardware, software o datos) y de telecomunicaciones (teléfono, fax) para otras actividades que no estén directamente relacionadas con el trabajo del sistema Web. Proteger meticulosamente su contraseña y evitar que sea vista por otros en forma inadvertida. Seleccionar una contraseña robusta que no tenga relación obvia con el usuario, sus familiares, el grupo de trabajo, y otras asociaciones parecidas. Reportar inmediatamente a su jefe inmediato o a un funcionario de Seguridad Informática cualquier evento que pueda comprometer la seguridad de la Institución y sus recursos informáticos. 23 3.2.2 Políticas para los usuarios Es esta sección se recogen algunas normas, recomendaciones y compromisos que tiene que adoptar el usuario al momento de usar los SWGA. Tabla 7. Políticas de seguridad para el registro de incidencias Política Procedimiento Tareas a realizar Los respaldos de los archivos se realizarán Ejecutar el gestor de respaldo de Realizar respaldo en dos bases de datos, una de testeo y otra diariamente al finalizar la jornada de datos (scritp de respaldo). de la base de datos principal. trabajo. Verificar los respaldos en los discos auxiliares Se debe realizar la recuperación de los Ejecutar el gestor de recuperación Verificar integridad de la información datos en cualquier evento de crashing24 del de datos (ejecutar sgbd). Introducir disco auxiliares y cargar los datos sistema o caída de la energía Tabla 8. Políticas de seguridad para las comunicaciones Política La navegación de internet con fines personales no debe hacerse a expensas del tiempo y recursos de la institución. Procedimiento Establecer permisos de navegación y acceso a los contenidos de internet Motivar a los usuario sobre el uso de internet Tareas a realizar Monitoreo de la red Agregar las ip privadas de la red en el DNS Charlas de uso de internet, sus beneficios y repercusiones. Se prohíbe el uso de aplicaciones y/o Monitoreo de cuellos de botella y Ejecución de programas que monitorean el estado de la red. 24 Se entiende que es la condición en la cual una aplicación informática deja de funcionar. 24 herramientas no permitidas que saturen los saturación de la red canales de comunicación del Sistema Web. Bloqueo de ip que generen buffer. Tabla 9. Políticas de seguridad para proteger la confidencialidad y privacidad Política Procedimiento No debe enviarse a través de Internet Encriptar la mensajes con información confidencial a confidencial menos que estén cifradas Se guardarán datos estadísticos sobre el uso de los SWGA Tareas a realizar Revisión semanal de los avances de métodos de encriptación información Encriptar los datos en la transmisión de redes y los datos que reposan en las bases de datos Grabar en una bitácora las ip que accedieron al SWGA Configurar las accesos y registrar los datos de solicitante de los servicios a los SWGA Tabla 10. Políticas de seguridad de identificación y autentificación de usuarios. Política Procedimiento La solicitud de una nueva cuenta o el Gestionar cuentas de usuario cambio de privilegios deben ser hecha por escrito y debe ser debidamente aprobada Cuando un usuario recibe una nueva Elaborar un documento de entrega cuenta, debe firmar un documento donde y recepción de cuenta declara conocer las políticas y procedimientos de seguridad, y acepta sus responsabilidades con relación al uso de esa cuenta Tareas a realizar Receptar solicitud de cuenta. Verificación de datos del solicitante Aprobación de solicitud Reunión con el usuario y socializar el documento. Establecer claramente las responsabilidades de usuario con respecto a la protección de la información almacenadas por sus cuentas Establecer permisos de usuario Establecer acuerdos y compromisos y firmar el documento 25 No debe concederse una cuenta a personas Crear cuenta con su debida que no sean empleados de la institución, a autorización y establecer los menos que estén debidamente autorizados permisos respectivos Receptar solicitud de cuenta que expire automáticamente al cabo de un lapso de 30 días Verificación de datos del solicitante Aprobación de solicitud Los privilegios especiales, tal como Establecer grupos de usuarios modificar o borrar los archivos de otros usuarios, sólo deben otorgarse a aquellos directamente responsable de la administración o de la seguridad de los sistemas Web Establecer actividades de los usuario Establecer roles de usuarios Asociar los roles de usuario con cada grupo de usuarios Se prohíbe el uso de cuentas anónimas o Establecer identidad de cuentas de invitado y los usuarios deben entrar al sistema mediante cuentas que indiquen claramente su identidad El nombre de la cuenta estará compuesta por su nombre y sus apellidos La cuenta de usuario será compuesto por la primera letra de su primer nombre, más su apellido paterno, más la primera letra de su apellido materno y finalmente le agregamos en “+1” el número de cuentas que coincidan creado con la cuenta recién creada, ej. Titular de la cuenta: Edwin René Guamán Quinche Usuario: eguamanq001 Toda cuenta queda automáticamente Establecer suspendida después de un cierto periodo inactivo de inactividad. El periodo recomendado es de 45 días una Registrar el último ingreso de la cuenta al SWGA Calcular el tiempo de inactividad de la cuenta Deshabilitar la cuenta Los privilegios del sistema concedidos a Establecer un cuenta como seguimiento de El Administrador de Sistemas debe revocar (una hora) 26 los usuarios deben ser ratificados cada 6 usuarios en funciones meses. rápidamente la cuenta o los privilegios de un usuario cuando reciba una orden de un superior Revisar la lista de usuarios en funciones Revocar la cuenta de usuario a los empleados que renuncien antes que dejen su cargo Tabla 11. Contraseñas y el control de acceso Política Procedimiento Tareas a realizar No guardar la contraseña en una forma Reglas de cómo evitar la revelación Crear listado ¿qué no se debe hacer con su contraseña? legible, en archivos, en disco, y tampoco de contraseñas. Evitar usar contraseñas con significados de fechas de debe escribirla en papel y dejarla en sitios nacimiento, números telefónicos, nombre de familiares donde pueda ser encontrada. etc. Evitar usar contraseñas compuestas con nombres propios en cualquier idioma. No escribir nuestras contraseñas en un papel y menos dejarlo en un lugar accesible como al lado del teclado, pantalla o en el escritorio. No se debe enviar nuestras contraseñas por email, Messenger, skype, facebook, etc. No debemos emplear la misma contraseña para todo como el correo, redes sociales, etc. Nunca debemos responder ningún email donde nos soliciten nuestras contraseñas o datos que comprometan nuestras cuentas. Nunca debe compartirse la contraseña, Motivar a los usuarios el uso de revelarla a otros o el uso de contraseñas de contraseñas seguras y la importancia Charlas y consejos del uso de la clave de acceso y repercusiones sobre la divulgación de las contraseñas de 27 grupo. de la confidencialidad contraseña de la acceso La contraseña inicial emitida a un nuevo Administrar contraseñas usuario sólo debe ser válida para la primera sesión. En ese momento, el usuario debe escoger otra contraseña Crear un historial de contraseñas Crear una contraseña predefinida generada por el sistemas usando su DNI y forzar en su modificación Bloquear el acceso con el uso de la clave inicial Restringir el uso de contraseñas menores a 8 caracteres. Forzar al usuario que no vuelva a usar una contraseña usada anteriormente. El acceso al sistema por medio de la Construir un mecanismo de seguridad cuenta del usuario queda limitado a 3 para la autentificación de usuarios intentos infructuosos de introducir la contraseña, luego de lo cual la cuenta involucrada quedará suspendida y se alertará al Administrador del sistema. Agregar a la cuenta del usuario un estado activo. Establecer un contador de número de accesos infructuosos y verificar el número de acceso infructuosos Modificar el estado de la cuenta a bloqueado Notificar por medio de correo o alerta de seguridad al administrador del sistema. Si no ha habido ninguna actividad en el Configurar el tiempo de inactividad SWGA durante un cierto periodo de de la cuenta de usuario. tiempo, el sistema debe automáticamente suspender la sesión. Configurar el identity en cada sesión. Guardar los eventos relevantes realizados Gestión de logs en el sistema a través de archivos de bitácoras (logs). Crear una bitácora para registrar eventos (quién, qué, cuándo, dónde y por qué) en el sistema. La bitácora debe tener como campos el número de evento, la operación realizada en el sistemas, fecha de transacción, titular de la cuenta 28 3.2.3 Guía para la implementación de código para sistemas web El análisis, diseño e implementación de los sistemas Web requiere un entendimiento básico de los principios de seguridad informática. Como ya se ha mencionado el objetivo principal de la seguridad informática es mantener la confidencialidad, integridad y disponibilidad de los recursos de la información. Los ataques informáticos se han dado por lo general en la capa de aplicación. Un estudio revela que el ataque contra aplicaciones web constituye el 60 % de los intentos observado en internet. Por tal motivo es necesario comprender que se entiende por riesgo, con el fin de proteger muestras aplicaciones de amenazas inaceptables. Hay que tener en cuenta que un equipo de desarrollo por lo general se acerca a una aplicación basada en lo que se pretende hacer. En otras palabras, se está diseñando una aplicación para realizar tareas específicas basadas en los requisitos funcionales y documentado los casos de uso. Un atacante, por el contrario, está más interesado en lo que una aplicación se puede hacer y funciona bajo el principio de que "cualquier acción que no se negó específicamente, está permitido". Para solucionar esto, algunos elementos adicionales deben ser integrados en las primeras etapas del ciclo de vida del SWGA. Por tal motivo OWASP ha creado una guía (ver en anexos A) para el desarrollo seguro titulada como “Secure Coding Practices Quick Reference Guide”, la misma que pone a disposición un elemento clave para identificar los requisitos de seguridad que deben aplicarse en el desarrollo de aplicaciones Web El objetivo de esta guía es de minimizar las vulnerabilidades de los sistemas Web más comunes. Es mucho menos costoso construir sistema Web seguro que corregir errores o problemas una vez que el mismo se haya completado o entregado. 29 4 Aplicación de las políticas de seguridad Desde finales de los 90‟s, los atacantes han conseguido realizar múltiples ataques en las aplicaciones Web a través de Internet aunque éstas estén protegidas mediante técnica de seguridad en redes tradicionales como firewall25, IDS26 y mecanismos criptográficos como podemos observar en la figura 4. Pero es necesario implementar nuevos esquemas que no solo permitan proteger al cliente desde su navegador, un servidor web y de correo electrónico. Hay que comprender que la seguridad de un sistema informático y en especial los SWGA engloba todo su ciclo de vida, desde su análisis hasta la fase de montaje o mantenimiento. RED SIMPLE CLIENTE IDS IDS Eliminar cookies Detener script No guardar contraseñas Servidor Web IDS Red Privada Correo Figura 4: Esquema básico de seguridad en un sistema de red e informático Por lo tanto, es importa integrar todas las técnicas existentes como son las de desarrollo seguro, modelos de programación segura para detectar anomalías o mecanismos genéricos de validación de entradas. En este proyecto nos vamos a centrar en un esquema de análisis de contenido para intentar solucionar ataques tanto de Inyección SQL y XSS. Este análisis básico puede ser fácilmente implementado definiendo una lista de caracteres no aceptables, luego, el proceso de análisis simplemente rechaza todo lo que está incluido en dicha lista para mejorar el proceso de filtrado de una petición realizado por el usuario. De todas maneras, consideramos que esta estrategia es básica, demasiada limitada y fácil de evadir por algún atacante 25 También llamado cortafuegos y es parte de una red o sistema que está diseñada para boquear accesos no deseados. 26 Es un sistema de detección de intrusos usado para detectar accesos no autorizados a un computador o una red. 30 experto. Scott, D [20] proponen un servidor proxy que se situaría en el servidor de la aplicación Web con la finalidad de filtrar el flujo de datos de entrada y salida. Dicho proceso de filtrado tiene en cuenta un conjunto de políticas de seguridad diseñada por los desarrolladores de las aplicaciones Web. En consecuencia, la falta de análisis sobre las estructuras de un SWGA puede ser utilizada por atacantes expertos para evadir sus mecanismos de detección y realizar peticiones maliciosas. El simple uso de expresiones regulares (código de Inyección SQL) puede ser utilizado para evadir estos filtros. Hay que tener en cuenta que todo análisis que se realice hay que evitar los falsos positivos. La aplicación de las políticas de seguridad no solo se debe aplicar y ejecutar de forma aislada, sino se debe aplicar desde un entorno general, esto signifique, que cada etapa del ciclo de vida de un sistema Web debe ser evaluado para evitar en lo más mínimo las fallas de seguridad. RED SIMPLE CLIENTE IDS DS Red Privada IDS Eliminar cookies Detener script No guardar contraseñas IDS Seguridad . Web S e r v i d o r Correo Figura 5: Esquema de seguridad aplicando un servidor de seguridad de red o sistema informático En conclusión podemos observar en la Figura 5 que el diagrama del modelo clásico de seguridad ha cambiado ligeramente, se ha agregado un servidor de seguridad, el mismo que se encargará y se hará responsable del manejo de las políticas de seguridad, los códigos de diseño de un conjunto de restricciones de validación y las peticiones de entrada que los analistas programadores hayan ingresado o configurado. Además dentro de las restricciones de validación es necesario imponer restricciones en los datos de las cookies, los parámetros URL. En el algoritmo 1 ilustramos un ejemplo de filtrado de entradas. 31 Algoritmo 1. Adaptación del algoritmo de detección de Inyección de Kang S.[21] <?php $nombre = $_POST["usuario"]; $clave = $_POST["password"]; $query1 = "SELECT * FROM usuario WHERE cedula='cedula' and password='clave';"; $query2 = "SELECT * FROM usuario WHERE cedula= '".$nombre."' and password='".$clave."';"; $tokens1 = split("[\\s']|(--)", $query1); $tokens2 = split("[\\s']|(--)", $query2); if(count($tokens1) != count($tokens2)){ echo $msj . "<br/>"; ?> <script language="javascript">alert('Es una Inyección SQL'); //aquí me envía error de sintaxis </script> <?php }else{ ?> //aquí se debería hacer el enlace de nuevo a la aplicación web <script language="javascript">alert('NO es una inyección SQL'); </script> <?php } ?> Para terminar esta apartado, los usuarios de los sistemas Web se preguntarán cómo un atacante puede acceder a la información que almacenan los sistemas Web. Tomemos como ejemplo un servidor de base de datos que se encuentra detrás de una serie de seguridades de redes clásicas como Firewall, IDS u otros mecanismos de protección, existe un canal de comunicación entre el servidor Web y el servidor de base de datos y por la cual el atacante utiliza para llegar hasta los datos guardados en la base de datos. Ahora hay que entender la naturaleza o arquitectura que comúnmente tiene un sistema Web, existen tres niveles claramente definidos, el primero de ellos es la vista o interfaz de usuario y es el encargado de la interacción entre los usuarios y el sistema. El GAUR y el SGA son aplicaciones típicas de los SWGA. El segundo de los niveles es donde reside la lógica de la aplicación. Esta correrá sobre los servidores Web, los de correo electrónico y los de aplicación. Y el tercer nivel tendremos el almacén de datos, es decir, el repositorio de la información de una institución universitaria, que podría ser la UPV o la UNL. Cada nivel existe una conexión. Un escenario para un ataque en un SWGA lo mostraremos en el siguiente ejemplo. 32 Para poder ingresar al SGA hay que iniciar una sesión como se puede observar en la figura 6. Figura 6: Interfaz de autenticación de usuarios Normalmente un usuario para ingresar a este sistema, introduce su DNI y su contraseña en los campos respectivos de la aplicación. Al seleccionar la opción “Ingresar” el usuario a través del navegador envían una petición al Servidor de Seguridad, el mismo que se encarga de analizar y evaluar la petición realizada por el navegador Web Cliente. Si no existe código malicioso, es enviada al servidor de base de datos para que la sentencia SQL sea ejecutada. Pero si el usuario es un atacante, el ingresará en uno de sus campos de la aplicación una inyección como por ejemplo „or„1‟=„1 y si el sistema Web no valida correctamente esta vulnerabilidad, se concatena el código ingresado con la sentencia SQL para poder ser ejecutada a posteriori. Al enviarse la petición entra en acción el servidor se seguridad, recepta la petición y analiza su contenido y si encuentra código incrustado o código malicioso, rechaza la petición, enviado una respuesta de error al navegador cliente como podemos observar en la figura 7 Figura 7: Mensaje de Error “Es una Inyección SQL” 33 4 Conclusiones En este trabajo se ha estudiado los ataques más comunes que afectan a los sistemas Web. En concreto los ataques estudiados son la Inyección SQL y XSS. Además se ha revisado ampliamente la literatura sobre políticas de seguridad con el fin de tener una visión general de las principales normas, reglamentos y protocolos a seguir para proteger los sistemas Web. Concluimos que los ataques más comunes que son objeto los SWGA son los de Inyección SQL y XSS debido a que los procesos y características de estos sistemas permiten incrustar código malicioso en la URL o en la entrada de datos para efectuar fraude en las notas, asistencias de los estudiantes o robo de las credenciales de los estudiantes o profesores. La definición de un documento de políticas de seguridad tanto para el usuario como para los desarrolladores es necesario e importante porque nos permite establecer los roles y compromisos entre todos las personas que interactúan con los sistemas Web, Además la aplicación de políticas de seguridad no solo debe quedar en un documento firmado sino que es necesario diseñar e implementar una solución eficiente y completa para prevenir ataques de Inyección SQL y XSS. La importancia del diseño propuesto es factible en las instituciones educativas de nivel superior debido a que el coste económico de un servidor de gama media en la actualidad [Septiembre 2011] no sobrepasa los 7000 € y con un promedio de vida útil de 5 años. Si tomamos en cuenta esta referencia el coste anual no supera los 1500€ lo que lo hace económicamente viable. Desde el punto de vista técnico, este diseño está basado en un analizador de peticiones de Web oculta para mejorar la capacidad de detección de las cadenas de datos que se envían a través de las peticiones de entrada Los diseños, arquitecturas o soluciones deben encargarse de verificar las seguridades tanto en el lado del cliente como del servidor. En el cliente se debe realizar un conjunto de acciones sobre los recursos del navegador pertenecientes a la aplicación Web como validaciones de filtrado de datos dentro de las aplicaciones usando tecnología Ajax para evitar saturar con demasiadas peticiones al servidor. El objetivo no es sólo prevenir ataques de Inyección SQL y XSS, sino también otras tecnologías y lenguajes utilizados en las aplicaciones Web y que pueden ser potencialmente peligrosos para la protección de recursos desde el navegador hacia el servidor. 34 En el futuro, es necesario analizar también el código de las aplicaciones Web. Con estos resultados será posible construir un modelo realista para prevenir no solo los del tipo Inyección SQL o XSS sino agregar más funcionalidad para prevenir las ocho vulnerabilidades de la lista presentada por OWASP. Esto nos ayudará a extender nuestro diseño para completar una arquitectura de seguridad y sería usado para evaluar todas las peticiones, script disponible en un dominio público. Cita de referencias para trabajos futuros 1. Ke W., Preventing SQL Injection Attacks in Store Procedure, IEEE, United State (2006) 2. Gollmann D., Computer security, John & Sons, Inc, Germany, (2010) 3. Zhang Y., Web Services Security Policy, IEEE, International Conference on Multimedia Information Networking and Security, China, (2010) 4. Lavarack T., A Web Service Security Policy Assistant, IEEE, Internet Technology Transactions (ICITST), South Africa, (2010) 5. James D., Security Models for Web-Based Applications, Communications of the ACM, United Stated, (2001) 6. Bracho D y otros., Técnicas de Seguridad en Acceso a Web: Criticas de Esquemas Actuales y Propuesta de Mejora, Venezuela, (2008) Esta línea de trabajo tiene una importancia potencial considerando también la extensión de la conectividad a todo tipo de dispositivos móviles (smartphones, tabletas, etc.) que se prevé para el corto o mediano plazo. 35 Agradecimientos Destino este espacio para agradecer a todas aquellas personas que de alguna manera me apoyaron durante el desarrollo de este proyecto, quienes con sus recomendaciones, correcciones y voces de aliento me impulsaron a concluir este proceso de investigación. A mi director de tesis José Miguel Blanco por su dirección y asesoramiento, gracias a los cuales ha sido posible la realización de este proyecto. A mi tutor Alberto Lafuente asimismo quiero agradecer su apoyo y la estrecha colaboración que hemos mantenido durante este tiempo. A mi familia, en especial a mis padres, mi hijo, y mis hermanos. Sin su apoyo hubiera sido imposible terminar este proyecto. A mis compañeros de Máster por hacerme sentir uno más del grupo. A la Universidad Nacional de Loja, por confiar en mí al concederme la carta de auspicio. A la Universidad del País Vasco por acogerme en sus aulas durante este año formándome como un profesional integral y permitiéndome compartir con personas de elevadísimo nivel académico y de excelentes cualidades profesionales. A la Dirección del Máster por la completa predisposición a colaborar con los estudiantes del Máster. A la Senescyt por su confianza otorgada hacia mí al financiarse mis estudios. Por último agradecer a todas aquellas personas que directa o indirectamente me han ayudado o me han apoyado en este proyecto. 36 Referencias 1. WBGLinks, La historia completa del Hacking, http://www.sindominio.net/suburbia/spip.php?article33 (2003), Accedido el 13 de Junio de 2010 2. Furnell, S..: Vulnerability Exploitation: the Problem of Protecting our Weakest Links, Computer&Fraud, United Kingdom (2003) 3. Gómez, A., Seguridad Informática Básica, España, 1ª Edición (2010) 4. Mathew, P..: What do Mean by “Information Security”, Computer&Fraud, United Kingdom (2004) 5. Bustos, S. Seguridad y Software Libre. http://www.kriptopolis.org/seguridad-ysoftware-libre, Kriptópolis (2002), Accedido el 01 de Junio de 2010 6. International Organization for Standarizadion, Estandar ISO/IEC International 17799 ISO/IEC 17799:2005 2da edition (2005) 7. Saura, J., Implantación de seguridad en entornos Web, Universidad Politécnica de Cartagena, Colombia, 165pp (2006) 8. Canaleta, X., Gestión académica y protección de datos, Universidad Ramón Llull, España, Abril (2010) 9. Huerta, A., Villalón. Seguridad en Unix y redes, Capítulo 16, Página 259, España (2002) 10. Scott. D., Sharp. R., Specifying and Enforcing Application-Level Web Security Policies, IEEE Knowledge and Data Engineering, United Kingdom (2003) 11. Segu-Info, http://www.seguinfo.com.ar/politicas/polseginf.htm (2008), Accedido el 11 de Juno de 2010 12. Protección de datos. http://protecciondedatos.org/info.php, Accedido el 09 de Junio de 2010 13. Mieres, J., Ataques informáticos. Debilidades de Seguridad Comúnmente Explotas, Evil Finger, (2009) 14. International Council Of Electronic Commerce Consultants, Ethical Hacking. Official Course Material, OSB, http://www.eccouncil.org/ (2004) 15. Steve, C., Martin, R., "Vulnerability Type Distributions in CVE", http://cwe.mitre.org/documents/vuln-trends/index.html#summary (2007), Accedido el 13 de Junio de 2010 16. Fonseca, J., Vieira, M., Mapping Software Faults with Web Security Vulnerabilities, IEEE, International Conference on Dependable Systems&Networks, Alaska (2008) 17. AlfaroWang Xin, otros, Hidden Web Crawling For Inyeción SQL Detection, IEEE, China (2010) 18. Garcia, A., Prevención de ataques de Cross-Site Scripting en aplicaciones Web, Universidad Autónoma de Barcelona (2007) 19. Wang Xin, otros, Hidden Web Crawling For Inyeción SQL Detection, IEEE, China (2010) 20. Scott, D. and Sharp, R. Abstracting application-level web security. 11th Internation Conference on the WWW, (2002) 37 Anexos Anexos A: Políticas de Seguridad para la implementación de código en sistemas web. Tabla 12. Validación de entrada. Política de Validación de entrada Llevar a cabo las validaciones de datos en el cliente. La validación en el cliente mejora el tiempo de respuesta, reduce la carga del servidor y libera ancho de banda para otras aplicaciones Identificar todas las fuentes de datos y clasificarlos como confiables y no confiables. Validar todos los datos de fuentes no confiables No debe ser una rutina de validación de entrada centralizado para la aplicación Especificar un formato de codificación de caracteres, como UTF-8, para todas las fuentes de entrada Codificar los datos en un conjunto de caracteres comunes antes de la validación Todos los errores de validación deben resultar como un rechazo de entrada efectuada por el usuario Validar todos los usuarios antes de procesar los datos proporcionados, incluyendo todos los parámetros, las direcciones URL y el contenido de cabeceras HTTP (por ejemplo, nombres de cookies y valores). Asegúrese de incluir los mensajes de JavaScript, Flash o cualquier otro código incrustado. Verificar que los valores de cabecera tanto en las peticiones y respuestas sólo contengan caracteres ASCII. Validar los datos de redirecciones (Un atacante puede enviar contenido malicioso directamente en el destino de la redirección, eludiendo así la lógica de aplicación y la validación realizada antes de la redirección) Validar rango, la longitud y tipos de datos Si hay caracteres potencialmente peligrosos se debe permitir como entrada, e implementar controles adicionales como la codificación de salida, las API de seguridad y tareas específicas de contabilidad para la utilización de esos datos a través de la aplicación. Ejemplos de caracteres comunes peligrosos incluyen: <> "'% () & + \ \" \ ". Si la rutina de validación de normas no puede abordar las siguientes entradas, entonces se debe revisar discretamente, comprobar bytes nulos (% 00), comprobar los caracteres de nueva línea (% 0d,% 0a, \ r \ n) 38 Tabla 13. Codificación de salida Política de codificación de salida Llevar a cabo toda la codificación en un sistema de confianza (por ejemplo, el servidor) Utilizar una rutina estándar para la prueba de cada tipo de codificación de salida Codificar todos los datos que se devuelve al cliente que se originó fuera de los límites de confianza de la aplicación. Codificar todos los caracteres a no ser que se sabe que son seguros para el intérprete Desinfectar todas las salidas no fiable de datos para consultas de SQL, XML, LDAP Desinfectar todas las salidas no fiable de datos a los comandos del sistema operativo Tabla 14. Autenticación y administración de contraseñas Política de autentificación de contraseñas Requerir la autenticación de todas las páginas y recursos, excepto los destinados específicamente a ser pública Establecer y utilizar estándares, servicios de prueba, siempre que sea posible la autenticación Usar una aplicación centralizada para todos los controles de autenticación, incluidas las bibliotecas que llaman a los servicios de autenticación externa Separar la lógica de autenticación de los recursos que se solicita y el uso de la redirección desde y hacia el control de autenticación centralizada Todas las funciones administrativas y de gestión de cuentas debe ser al menos tan seguro como el mecanismo de autenticación primaria. Si la aplicación administra un registro de datos, debe asegurarse que las contraseñas estén bien encriptadas y que sean almacenadas en tablas o archivos Validar los datos de autenticación sólo al término de todas las entradas de datos, especialmente para las implementaciones de autenticación secuencial Las respuestas de error de autenticación no debe indicar que parte de los datos de autenticación es incorrecta. Por ejemplo, en lugar de "nombre de usuario válido" o "Contraseña no válida", sólo tiene que utilizar "nombre de usuario válido y/o la contraseña" para ambos. Las respuestas de error debe ser realmente idénticos en ambos pantalla y el código fuente Utilizar autenticación para las conexiones a sistemas externos que involucran información sensible o funciones. Las credenciales de autenticación puedan acceder a servicios externos de la aplicación debe ser codificada y almacenada en un lugar protegido en un sistema de confianza (por ejemplo, el servidor). El código fuente no es un lugar seguro Use solamente las peticiones HTTP POST para transmitir las credenciales de autenticación Enviar contraseñas a través de una conexión encriptada o como datos cifrados, como por ejemplo en un mensaje cifrado. Hacer cumplir los requisitos de complejidad de contraseñas establecidas por la política de seguridad. Las credenciales de autenticación debería ser suficiente para resistir los 39 ataques en el entorno implementado. (Por ejemplo, que requieren el uso de caracteres alfabéticos y numéricos, o caracteres especiales) Cumplir los requisitos de longitud de contraseña establecida por la política de seguridad. Ocho caracteres se usa comúnmente, pero 16 es mejor o considerar el uso de frases de varias palabras Las contraseñas de entrada debe ser oscurecida en la pantalla del usuario. (Por ejemplo, en los formularios web utilizan el tipo de entrada "password") Bloquear la cuenta después de un número establecido de intentos de acceso no válido (por ejemplo, cinco intentos es común). La cuenta debe ser inhabilitada por un periodo de tiempo suficiente para disuadir al posible ataque de las credenciales. Restablecer la contraseña y las operaciones de cambio y requiere el mismo nivel de controles, como la creación de cuentas y autenticación Las preguntas de restablecimiento de contraseña deben ser apoyadas por respuestas suficientemente aleatorias. (Por ejemplo, "libro favorito" es una mala pregunta, porque "La Biblia" es una respuesta muy común) Se debe enviar un correo electrónico a una dirección previamente registrado con un enlace temporal para restablecer la cuenta de acceso. Las contraseñas temporales y los enlaces deben tener un tiempo de vencimiento Aplicar el cambio de contraseñas temporales en el momento del ingreso al sistema por parte del usuario. Notificar a los usuarios cuando se produce un restablecimiento de contraseña Prevenir la reutilización de contraseña. Si se utiliza un código de terceros para la autenticación, inspeccionar el código con cuidado para asegurarse de que no se ve afectado por algún código malicioso Aplicar los cambios de contraseña basado en los requisitos establecidos en la política de seguridad. Los sistemas críticos pueden requerir cambios más frecuentes. Desactivar la funcionalidad "Recordar" de los campos de contraseña Implementar el monitoreo para identificar los ataques contra varias cuentas de usuario, utilizando la misma contraseña. Este patrón de ataque se usa para evitar bloqueos de nivel, cuando los identificadores de usuario pueden ser cosechadas o adivinado. Cambiar todas las contraseñas que ofrece el proveedor por defecto y los ID de usuario o desactivar las cuentas asociadas Re-autenticar a los usuarios antes de realizar las operaciones críticas El uso de múltiples factores de autenticación para las cuentas de valor altamente sensibles o de las transacciones Tabla 15. Administración de sesiones Política de administración de sesiones Usar el servidor en los controles de gestión de sesiones. La aplicación sólo debe reconocer estos identificadores válidas de sesión La creación de un identificador siempre debe hacerse en un sistema de confianza (por ejemplo, el servidor) Establecer el dominio y la ruta de las cookies que contienen identificadores de sesión autenticado a un valor apropiado para el sitio restringido La funcionalidad “Salir” debe estar disponible en todas las páginas Establecer un tiempo de espera de inactividad de la sesión. En la mayoría de los casos, 40 debe ser no más de 15 minutos. No permitir conexiones persistentes y hacer cumplir las terminaciones periódicas, incluso cuando la sesión está activa. Especialmente para aplicaciones que soportan conexiones en red o la conexión a los sistemas críticos. Los tiempos de terminación deben apoyar los requerimientos del negocio y el usuario debe recibir una notificación suficiente para mitigar los impactos negativos Si la sesión se estableció antes de inicio de sesión, cierre la sesión y establecer una nueva sesión después de un inicio de sesión Generar un nuevo identificador de sesión en cualquier re-autenticación No permitir conexiones simultáneas con el mismo ID de usuario No exponga los identificadores de sesión en los mensajes de las direcciones URL de error. Los identificadores de sesión sólo se encuentra en el encabezado de cookie HTTP. Proteger al servidor de datos de la sesión del acceso no autorizado, por otros usuarios, mediante la implementación de controles de acceso adecuados en el servidor Generar un nuevo identificador de sesión y desactivar el viejo periódicamente. Generar un nuevo identificador de sesión si los cambios de seguridad de conexión de HTTP a HTTPS, como puede ocurrir durante la autenticación. Dentro de una aplicación, se recomienda utilizar siempre HTTPS en lugar de cambiar de HTTP a HTTPS. Implementa un suplemento de gestión de sesiones estándar para las operaciones altamente sensibles o críticas mediante la utilización de cada petición, en lugar de cada sesión Establecer el atributo "secure" para las cookies transmitidas a través de una conexión TLS27 Fijar cookies con el atributo HttpOnly, a menos que específicamente requieren scripts del lado del cliente dentro de su aplicación para leer o establecer el valor de una cookie Tabla 16. Control de Acceso Política de control de acceso Use un solo sitio para comprobar la autorización de acceso. Esto incluye las bibliotecas que requieren la autorización de servicios externos Denegar el acceso si la solicitud no puede acceder a su información de configuración de seguridad Hacer cumplir los controles de autorización en cada solicitud, incluyendo las realizadas por secuencias de comandos del servidor, "incluye" las peticiones del lado del cliente como las tecnologías AJAX y Flash Separar la lógica privilegiada de otro código de aplicación Restringir el acceso a los archivos u otros recursos, incluidos los que están fuera del control directo de la aplicación, que sólo los usuarios autorizados Restringir el acceso a URLs, a funciones protegidas, referencias directas, a los servicios y a los datos de aplicación sólo a usuarios autorizados 27 Seguridad de capa de transporte, son protocolos criptográficos que proporcionan comunicaciones seguras por una red, comúnmente Internet 41 Restringir el acceso a los atributos de usuario y los datos y la información de la política utilizada por los controles de acceso Restringir el acceso relevantes para la seguridad de la información de configuración sólo a los usuarios autorizados Si los datos del estado deben ser almacenados en el cliente, usar el cifrado y comprobación de integridad en el lado del servidor para el estado manipulación Limitar el número de transacciones de un solo usuario o dispositivo puede realizar en un período determinado de tiempo. Las operaciones /hora debe estar por encima de las necesidades operativas reales, pero lo suficientemente bajo como para impedir los ataques automatizados El uso de la cabecera "referer" como un control adicional única, que nunca debe ser la comprobación de autorización única, ya que se puede falsificar Para sesiones de larga duración se debe periódicamente revalidar la autorización del usuario para asegurarse de que sus privilegios no han cambiado Implementar la auditoría de cuentas y hacer cumplir la desactivación de las cuentas no utilizadas (por ejemplo, después de no más de 30 días a partir de la expiración de la contraseña de una cuenta.) La aplicación debe ser compatible con la desactivación de las cuentas y terminar sesiones cuando se deja de autorización (por ejemplo, cambios en sus funciones, la situación laboral, procesos de negocios, etc) Se debe implementar el servicio de cuentas o cuentas de apoyo a las conexiones hacia o desde sistemas externos debe tener el mínimo privilegio posible Crear una política de control de acceso a los documentos, las reglas de una aplicación de negocios, tipos de datos y los criterios de autorización de acceso y procesos para que el acceso puede estar bien aprovisionado y controlada. Esto incluye la identificación de los requisitos de acceso a los recursos tanto de los datos y el sistema Tabla 17. Prácticas de la criptografía. Política de prácticas de la criptografía Todas las funciones de cifrado utilizadas para proteger los secretos de la aplicación del usuario debe ser implementado en un sistema de confianza (por ejemplo, el servidor) Proteger secretos principales del acceso no autorizado Implementar módulos criptográficos para posibles fallas de filtrado de información Todos los números, los nombres de archivo y las cadenas deben ser generado mediante el módulo criptográfico Establecer y utilizar una política de seguridad que permita establecer como será administrado el proceso del cifrado de claves Tabla 18. Gestión de Errores y Registro. Política de gestión de errores y Logging. No divulga la información en las respuestas de error, incluyendo detalles del sistema, los identificadores de sesión o de información de la cuenta Use controladores de errores que no se muestren la depuración o información de seguimiento de la pila Implementar mensajes de error genéricos y el uso de páginas de error 42 La aplicación debe manejar los errores de aplicación y no depender de la configuración del servidor La memoria se asignara correctamente libre cuando las condiciones de error se producen La lógica de manejo de errores asociados con los controles de seguridad deben negar el acceso por defecto Todos los controles de registro debe ser implementado en un sistema de confianza Garantizar las entradas de registro que incluyen datos no fiable y que no se ejecuta el código en la interfaz de visualización de registro Restringir el acceso a los registros sólo las personas autorizadas Utilizar una rutina maestra para todas las operaciones de identificación No almacene información confidencial en los registros, incluyendo los detalles del sistema innecesarios, los identificadores de sesión o contraseñas Asegúrese de que existe un mecanismo para llevar a cabo el análisis de registros Registrar todos los errores de validación de entrada, todos los intentos de autenticación, sobre todo las fallas de control de acceso, todos los eventos de aparente manipulación, incluyendo cambios inesperados en los datos del estado, los intentos de conectar con los tokens de sesión no válidos o caducados y todas las excepciones del sistema Registrar todas las funciones administrativas, incluyendo cambios en los ajustes de configuración de seguridad Registrar todos los fallos backend de conexión TLS El uso de una función criptográfico hash para validar la integridad de registro de entrada Tabla 19. Protección de datos. Política de protección de datos. Implementar el privilegio “impedir” a los usuarios de acuerdo a su funcionalidad, datos y sistemas de información que se requiere para realizar sus tareas Proteger de todas las copias en caché o temporal de los datos sensibles almacenados en el servidor del acceso no autorizado y purgar los archivos temporales de trabajo un momento en que ya no son necesarios Cifrar la información almacenada altamente sensible, como datos de verificación de autenticación, incluso en el lado del servidor Proteger del lado del servidor el código fuente y evitar que lo puedan descargar usuarios no autorizados No almacenar las contraseñas, las cadenas de conexión u otra información confidencial en un texto plano o de cualquier manera no criptográficamente en el lado del cliente. Esto incluye la incorporación de formatos de la inseguridad como: MS viewstate, flash de Adobe o el código compilado Eliminar los comentarios en el código de producción accesible para el usuario que puede revelar el sistema backend u otra información confidencial Quitar aplicaciones innecesarias y documentación del sistema, ya que puede revelar información útil para los atacantes No incluya información confidencial en los parámetros de la petición HTTP GET Deshabilitar características de auto completo sobre las formas que contienen 43 información confidencial, incluyendo la autenticación Desactivar almacenamiento en caché del lado del cliente en las páginas que contengan información sensible. Cache-Control: no-store, puede ser usado en conjunto con la cabecera HTTP de control "Pragma: no-cache", que es menos eficaz, pero es compatible HTTP/1.0 La aplicación deben apoyar la eliminación de información personal que ya no es necesario. (Por ejemplo, información personal o ciertos datos financieros) Implementar controles de acceso adecuados para los datos sensibles almacenados en el servidor. Esto incluye los datos almacenados en caché, ficheros temporales y datos que deben ser accesibles sólo para los usuarios específicos del sistema Tabla 20.Seguridad en las comunicaciones. Política de seguridad en las comunicaciones. Implementar el cifrado para la transmisión de toda la información sensible. Esto debe incluir TLS para proteger la conexión y puede ser complementado por la encriptación de archivos confidenciales o no conexiones basado en HTTP Los certificados TLS deben ser válido y tener el nombre de dominio correcto, no debe estar vencida, y se instala con los certificados intermedios cuando sea necesario Los errores de conexiones TLS no debe caer de nuevo a una conexión no segura Utilizar conexiones TLS para todos los contenidos que requieren un acceso autenticado y para toda la información sensible Utilizar TLS para las conexiones a sistemas externos que involucran información sensible o funciones Utilizar una implementación de un solo estándar de TLS que está configurado correctamente Especificar codificaciones de caracteres para todas las conexiones Filtrar los parámetros que contengan información confidencial de la HTTP referer, cuando se enlaza a sitios externos Tabla 21. Configuración del sistema. Política de configuración del sistema Asegurar los servidores, los marcos y los componentes del sistema se está ejecutando la última versión aprobada Asegurar los servidores, los marcos y los componentes del sistema tienen todos los parches emitidos para la versión en uso Restringir el servidor web, el proceso y las cuentas de servicio a los menos privilegios posibles Quitar todas las funciones y archivos innecesarios Quitar el código de prueba o cualquier otra funcionalidad no destinados a la producción, antes de la implementación Impedir la revelación de la estructura de directorios en el archivo robots.txt mediante la colocación de directorios no destinados a la indexación del público en un directorio padre. A continuación, No permitir que todo el directorio padre en el archivo robots.txt en lugar de no permitiendo que todos los directorios individuales Definir cuáles son los métodos HTTP, GET o POST, la solicitud de apoyo y si se 44 manejan de manera diferente en distintas páginas de la aplicación Si el servidor web maneja HTTP 1.0 y 1.1, asegúrese de que ambos están configurados en una casa de similares o asegurar que usted entiende cualquier diferencia que pueda existir (por ejemplo, manipulación de la ampliación de los métodos HTTP) Quitar la información innecesaria de las cabeceras de respuesta HTTP relacionados con el sistema operativo, servidor web y los marcos de la versión de aplicación El registro de configuración de seguridad para la aplicación debe ser capaz de generarse en un formato legible para apoyar la auditoría Implementar un sistema de gestión de activos y registro de los componentes del sistema y el software en el mismo Aislar entornos de desarrollo de la red de producción y facilitar el acceso autorizado sólo para el desarrollo y los grupos de prueba. Entornos de desarrollo son a menudo menos segura que los entornos de producción y los atacantes pueden utilizar esta diferencia para descubrir debilidades compartidas o como una vía para la explotación Implementar un cambio del software del sistema de control para administrar y registrar los cambios en el código tanto en el desarrollo y la producción Tabla 22. Base de Datos. Política de Base de Datos Utilizar consultas con parámetros con establecimiento inflexible Utilizar la validación de entrada y codificación de salida y asegúrese de hacer frente a los caracteres. Si esto no funciona, no se debe ejecutar el comando de base de datos La aplicación debe utilizar el menor nivel posible de privilegios para acceder a la base de datos Las cadenas de conexión no debe ser codificado dentro de la aplicación. Las cadenas de conexión se debe almacenar en un archivo de configuración independiente en un sistema de confianza y deben ser cifrados El uso de procedimientos almacenados para el acceso de datos abstractos y permitir la eliminación de permisos a las tablas base de la base de datos Cierra la conexión tan pronto como sea posible Quitar o cambiar todas las contraseñas por defecto de base de datos administrativa. Utilizar contraseñas seguras Apague todas las funciones de base de datos innecesarios (por ejemplo, procedimientos almacenados o servicios innecesarios, paquetes de servicios públicos, instalar sólo el conjunto mínimo de características y opciones necesarias) Quitar contenido innecesario del proveedor por defecto Desactivar todas las cuentas por defecto que no están obligados a soportar los requerimientos de negocio La aplicación debe conectarse a la base de datos con credenciales diferentes 45 Tabla 23. Administración de archivos. Política de administración de archivos Utilizar la entrada y salida para datos no fiable Cuando se utiliza funciones que aceptan un número de bytes a copiar, como strncpy(), tenga en cuenta que si el tamaño del búfer de destino es igual al tamaño de búfer de origen, es posible que no NULL-termina la cadena Compruebe los límites de búfer si llama a la función en un bucle y asegurarse de que no hay peligro de escribir más allá del espacio asignado Truncar todas las cadenas de entrada de un plazo razonable antes de pasarlos a la copia y funciones de concatenación En concreto cerca de los recursos, no se basan en la recolección de basura. (por ejemplo, los objetos de conexión, identificadores de archivos, etc) Evite el uso de funciones conocidas (por ejemplo, printf, strcat, strcpy, etc) Tabla 24. Prácticas de codificación. Políticas de prácticas de codificación Inicializar todas las variables y otros registros de datos, ya sea durante la declaración, o justo antes del primer uso. En los casos en que la aplicación debe ejecutarse con privilegios elevados, elevar privilegios lo más tarde posible, y dejar los privilegios tan pronto como sea posible. Evite errores de cálculo mediante la comprensión de la representación subyacente del lenguaje de programación y cómo interactúa con el cálculo numérico. Hay que tener cuidado a las discrepancias de tamaño en bytes, de precisión, las distinciones firmado/unsigned, el truncamiento, la conversión y la conversión entre tipos "no un número" cálculos, hay que tener en cuenta que el lenguaje de programación maneja los números que son demasiado grandes o demasiado pequeños para su representación interna No pasar los datos suministrados por el usuario a cualquier función de la ejecución dinámica. Restringir a los usuarios de la generación de nuevo código o modificar el código existente. Revisar todas las aplicaciones secundarias de código, de terceros y bibliotecas para determinar las necesidades del negocio y validar la funcionalidad de seguridad, ya que pueden introducir nuevas vulnerabilidades Implementar la actualización de seguridad. Si la aplicación utilizará las actualizaciones automáticas, a continuación, utilizar firmas criptográficas para el código y garantizar a sus clientes descargar verificar las firmas. El uso de canales cifrados para transferir el código del servidor host 46 Anexos B: Indice de Figuras Figura 1 Riesgos de seguridad en aplicaciones Web 15 Figura 2 Distribución XSS e Inyección SQL 16 Figure 3 Detección de Vilnerabilidades de Inyeción SQL usando un simulador de códigos de ataques 17 Esquema básico de seguridad en un sistema de red e informático 29 Esquema de seguridad aplicando un servidor de seguridad de red o sistema informático 30 Figura 6 Interfaz de autenticación de usuarios 32 Figura 7 Mensaje de Error “Es una Inyección SQL” 32 Figura 4 Figura 5 47 Anexos C: Indice de Tablas Tabla 1 10 principales problemas de seguridad en aplicaciones Web, publicadas por OWASP en los años 2007 y 2010 7 Tabla 2 Modulos y procesos que se realizan en los SWGA 8 Tabla 3 Ejemplo de política de seguridad informática. 11 Tabla 4 Ejemplo de algunos códigos de Inyección SQL 17 Tabla 5 Resultado del análisis de una consulta SQL 17 Tabla 6 Ataque con una consulta de inyección SQL 18 Tabla 7 Políticas de seguridad para el registro de incidencias 23 Tabla 8 Políticas de seguridad para las comunicaciones 23 Tabla 9 Políticas de seguridad para proteger la confidencialidad y privacidad 24 Tabla 10 Políticas de seguridad de identificación y autentificación de usuarios. 24 Tabla 11 Contraseñas y el control de acceso 26 Tabla 12 Validación de entrada. 37 Tabla 13 Codificación de salida 38 Tabla 14 Autenticación y administración de contraseñas 38 Tabla 15 Administración de sesiones 39 Tabla 16 Control de Acceso 40 Tabla 17 Prácticas de la criptografía 41 Tabla 18 Gestión de Errores y Registro 41 Tabla 19 Protección de datos. 42 Tabla 20 Seguridad en las comunicaciones 43 Tabla 21 Configuración del sistema 43 Tabla 22 Base de Datos 44 Tabla 23 Administración de archivos 45 Tabla 24 Prácticas de codificación 45