Title: Seguridad Informtica
1Seguridad Informática
- Control de Acceso
- Java SE Security
- Micael.Gallego_at_urjc.es
2Índice Control Acceso
- Introducción
- Elementos del Control de Acceso
- Ficheros de Políticas
- Formato
- Policy Tool
- Aplicación de las políticas
- Permisos
3Introducción
- Inicialmente en Java 1.0
- Sólo había dos tipos de aplicaciones
- De confianza (trusted) Cargadas de disco
- Sin confianza (untrusted) Cargadas de la web,
applets - Tenían diferentes permisos de ejecución
- De confianza Control total sobre la máquina
- Sin confianza Caja de Arena (Sandbox) con
permisosn muy limitados - No acceso a disco
- Sólo acceso al servidor del que se descargan
4Introducción
- Desde Java 1.1 hasta ahora (Java SE 6)
- Cada aplicación puede tener unos permisos
específicos y controlados de forma muy precisa - Esos permisos se configuran dependiendo de
- La procedencia del código Disco, red
- Del usuario que está ejecutando el código
- De la entidad que firma (sign) el programa
- Se pueden tener aplicaciones locales con permisos
limitados o Applets con permisos totales (de una
Intranet)
5Introducción
- Dados los problemas de seguridad actuales, es muy
útil limitar o controlar de forma precisa lo que
puede hacer una aplicación que se ejecute en la
máquina - Java dispone de un sistema de control que permite
especificar permisos a niveles muy detallados y
permite configurar a qué aplicaciones se les
aplica - Tanto el usuario como el administrador pueden
decidir estas políticas al ejecutar cada
aplicación o pueden establecer una configuración
por defecto
6Índice Control Acceso
- Introducción
- Elementos del Control de Acceso
- Ficheros de Políticas
- Formato
- Policy Tool
- Aplicación de las políticas
- Permisos
7Elementos del Control de Acceso
- El sistema de Control de Acceso de Java está
formado por 5 elementos - Ficheros de Políticas de Acceso
- Permisos
- Origen del código
- Almacenes de claves
- Dominios de protección
8Elementos del Control de Acceso
- Ficheros de Política de Acceso (Policy Files)
- Configura los permisos que tiene cada parte del
código de una aplicación Java - Son ficheros de texto plano
- Existen varios ficheros de política de acceso
- Un fichero global para todo el sistema
- Un fichero por usuario
- Opcionalmente se puede usar un fichero por
aplicación - En el JDK existe la herramienta interactiva
policytool que permite crear ficheros de políticas
9Elementos del Control de Acceso
- Permisos (Permissions)
- Una acción que el código puede realizar
- Por ejemplo
- El fichero /home/pepe/receta.txt se puede leer
pero no modificar - Se puede leer del portapapeles
- Se puede abrir una conexión a www.google.com
- Se pueden leer las propiedades del sistema
(directorio temporal, directorio home)
10Elementos del Control de Acceso
- Origen del código (Code sources)
- Formado por
- Localización desde la que el código se ha cargado
(servidor web, disco), identificada por una URL
(codeBase) - La información del firmante del código, si es que
está firmado digitalmente (signedBy) - Se utiliza para
- Aplicar los permisos basándose en el la
localización, el firmante o ambos a la vez. - También se pueden aplicar los permisos ignorando
el origen del código
11Elementos del Control de Acceso
- Almacenes de claves (Keystores)
- Un código se firma para que el usuario de ese
código conozca que el código es el original y no
ha sido alterado. Es de quien dice ser. - El control de acceso puede permitir más permisos
a código de ciertas organizaciones de confianza
(trusted) - La firma del código depende de certificados de
clave pública / clave privada - Los certificados se guardan en almacenes de
claves (normalmente ficheros en disco) - Los desarrolladores usan certificados para firmar
código y los usuarios para comprobar la identidad
del desarrollador u organización
12Elementos del Control de Acceso
- Dominios de protección (Protection domains)
- Un dominio de protección es la asociación de un
conjunto de permisos a un origen de código - Por ejemplo
- Código descargado de www.gsyc.es puede imprimir
- Código firmado por la URJC tiene todos los
permisos - Los ficheros de política de acceso son un
conjunto de dominios de protección
13Índice Control Acceso
- Introducción
- Elementos del Control de Acceso
- Ficheros de Políticas
- Formato
- Policy Tool
- Aplicación de las políticas
- Permisos
14Ficheros de Políticas
- Los ficheros de políticas de acceso (Policy
files) son ficheros que configuran y especifican
lo que un código puede hacer - Cada fichero tiene un conjunto de permisos que se
aplican a un código dependiendo de su origen y su
firma
15Índice Control Acceso
- Introducción
- Elementos del Control de Acceso
- Ficheros de Políticas
- Formato
- Policy Tool
- Aplicación de las políticas
- Permisos
16Ficheros de PolíticasFormato
keystore "user.home/.keystore" grant
codeBase "http//www.oreilly.com/"
permission java.io.FilePermission "/tmp",
"read" permission java.lang.RuntimePermission
"queuePrintJob" grant signedBy "sdo",
codeBase "http//www.sun.com/" permission
java.security.AllPermission grant signedBy
"jra" permission java.net.SocketPermission
"1024-", "accept, connect, listen,
resolve" grant permission
java.util.PropertyPermission
"java.version", "read"
17Ficheros de PolíticasFormato
keystore "user.home/.keystore" grant
codeBase "http//www.oreilly.com/"
permission java.io.FilePermission "/tmp",
"read" permission java.lang.RuntimePermission
"queuePrintJob" grant signedBy "sdo",
codeBase "http//www.sun.com/" permission
java.security.AllPermission grant signedBy
"jra" permission java.net.SocketPermission
"1024-", "accept, connect, listen,
resolve" grant permission
java.util.PropertyPermission
"java.version", "read"
Ruta del almacén de claves. Aquí deben estar los
certificados con los que comprobar la firma del
código
18Ficheros de PolíticasFormato
keystore "user.home/.keystore" grant
codeBase "http//www.oreilly.com/"
permission java.io.FilePermission "/tmp",
"read" permission java.lang.RuntimePermission
"queuePrintJob" grant signedBy "sdo",
codeBase "http//www.sun.com/" permission
java.security.AllPermission grant signedBy
"jra" permission java.net.SocketPermission
"1024-", "accept, connect, listen,
resolve" grant permission
java.util.PropertyPermission
"java.version", "read"
Dominio de protección El código descargado de
www.oreilly.com tiene permiso para leer de la
carpeta /tmp y realizar impresiones
19Ficheros de PolíticasFormato
keystore "user.home/.keystore" grant
codeBase "http//www.oreilly.com/"
permission java.io.FilePermission "/tmp",
"read" permission java.lang.RuntimePermission
"queuePrintJob" grant signedBy "sdo",
codeBase "http//www.sun.com/" permission
java.security.AllPermission grant signedBy
"jra" permission java.net.SocketPermission
"1024-", "accept, connect, listen,
resolve" grant permission
java.util.PropertyPermission
"java.version", "read"
Dominio de protección El código descargado de
www.sun.com y firmado por sdo tiene todos los
permisos
20Ficheros de PolíticasFormato
keystore "user.home/.keystore" grant
codeBase "http//www.oreilly.com/"
permission java.io.FilePermission "/tmp",
"read" permission java.lang.RuntimePermission
"queuePrintJob" grant signedBy "sdo",
codeBase "http//www.sun.com/" permission
java.security.AllPermission grant signedBy
"jra" permission java.net.SocketPermission
"1024-", "accept, connect, listen,
resolve" grant permission
java.util.PropertyPermission
"java.version", "read"
Dominio de protección El código firmado por
jra tiene todos los permisos sobre las
conexiones a los puertos superiores o iguales a
1024 independientemente del host
21Ficheros de PolíticasFormato
Dominio de protección Todo el código
(independientemente de su procedencia y firma)
puede leer la propiedad del sistema que indica la
versión de Java
keystore "user.home/.keystore" grant
codeBase "http//www.oreilly.com/"
permission java.io.FilePermission "/tmp",
"read" permission java.lang.RuntimePermission
"queuePrintJob" grant signedBy "sdo",
codeBase "http//www.sun.com/" permission
java.security.AllPermission grant signedBy
"jra" permission java.net.SocketPermission
"1024-", "accept, connect, listen,
resolve" grant permission
java.util.PropertyPermission
"java.version", "read"
22Índice Control Acceso
- Introducción
- Elementos del Control de Acceso
- Ficheros de Políticas
- Formato
- Policy Tool
- Aplicación de las políticas
- Permisos
23Ficheros de PolíticasPolicy Tool
- Permite editar los ficheros de políticas
- Ruta java.home/bin/policytool.exe
- Ventana Inicial
24Ficheros de PolíticasPolicy Tool
- Policy Tool. Almacén de claves
25Ficheros de PolíticasPolicy Tool
- Policy Tool. Dominio de Protección
26Índice Control Acceso
- Introducción
- Elementos del Control de Acceso
- Ficheros de Políticas
- Formato
- Policy Tool
- Aplicación de las políticas
- Permisos
27Ficheros de PolíticasAplicación de las políticas
- La política de acceso por defecto del sistema
viene configurada en los ficheros - java.home/lib/security/java.policy
- Configura los permisos de cualquier aplicación
Java - user.home/.java.policy
- Configura los permisos de las aplicaciones que
ejecuta ese usuario - No se crea por defecto pero si está presente, se
utiliza - Básicamente sólo se permiten las conexiones de
red y no se permite el acceso a disco
28Ficheros de PolíticasAplicación de las políticas
- Una aplicación puede ejecutarse
- Sin ninguna política de acceso
- Con la política de acceso por defecto
- Con una política de acceso específica para la
aplicación - Cuando una aplicación se ejecuta con una política
de acceso se dice que está en una caja de arena
(sandbox) - Cuando desde el código se ejecute una acción para
la que no hay permisos, se elevará una excepción
java.lang.SecurityException y no se ejecutará la
acción
29Ficheros de PolíticasAplicación de las políticas
- En Java existen diferentes tipos de aplicaciones
- Aplicaciones locales
- Están almacenadas en el disco del usuario
- Se ejecutan desde línea de comandos o con un
acceso directo - Applets
- Se ejecutan al vistar una web
- Actualmente se comienzar a usar de nuevo con
JavaFX - Java Web Start
- Aplicaciones que se comportan como si fuesen una
aplicación local pero que se descargan e instalan
automáticamente desde la web
30Ficheros de PolíticasAplicación de las políticas
- Ejecución sin política de acceso (fuera del
sandbox) - Aplicaciones locales
- Por defecto
- Applets
- Si lo requieren y si el usuario acepta
expresamente conceder todos los permisos mediante
un cuadro de diálogo - Java Web Start
- Si lo requieren y si el usuario acepta
expresamente conceder todos los permisos mediante
un cuadro de diálogo
31Ficheros de PolíticasAplicación de las políticas
- Ejecución con la política por defecto (sandbox)
- Aplicaciones locales
- Applets
- por defecto
- Java Web Start
- por defecto
C\gtjava Djava.security.manager ltargsgt
32Ficheros de PolíticasAplicación de las políticas
- Ejecución con una política específica (sandbox)
- Aplicaciones locales
- El fichero de política se aplica a la vez que la
política por defecto - Sólo se aplica el fichero de política especificado
C\gtjava Djava.security.manager
Djava.security.policyltpolicyFilegt ltargsgt
C\gtjava Djava.security.manager
Djava.security.policyltpolicyFilegt ltargsgt
33Ficheros de PolíticasAplicación de las políticas
- Ejecución con una política específica (sandbox)
- Applets
- Especificando dicha política en el fichero de
descripción del applet (fichero JNLP) - Java Web Start
- Especificando dicha política en el fichero de
descripción de la aplicación JNLP
34Ficheros de PolíticasAplicación de las políticas
- Existen algunos permisos que se asignan al código
aunque no estén configurados en ningún fichero de
políticas - Código cargado de disco puede leer ficheros en el
directorio donde está y sus subdirectorios - Código cargado vía web puede establecer
conexiones con el servidor desde el que se ha
descargado
35Índice Control Acceso
- Introducción
- Elementos del Control de Acceso
- Ficheros de Políticas
- Formato
- Policy Tool
- Aplicación de las políticas
- Permisos
36Permisos
- Se pueden configurar muchos tipos de permisos
- Permisos de Ficheros
- Permisos de Sockets
- Permisos de Ejecución
- Permisos del Interfaz de Usuario
- Permisos de Red
-
- Un listado detallado se puede ver en
http//java.sun.com/javase/6/docs//technotes/guide
s/security/spec/security-spec.doc3.html19802
37Permisos
- Permisos de Ficheros
- Tipo java.io.FilePermission
- Nombre
- Especifica el fichero o directorio al que tiene
acceso la aplicación - Se pueden usar propiedades java.home
user.home - Se pueden usar ,-
- Se puede poner ltltALL FILESgtgt
- Acciones
- read, write, delete, execute
38Permisos
java.policy
grant // Se pueden leer todos los ficheros
permission java.io.FilePermission "ltltALL
FILESgtgt", "read" // Se puede
acceder a todos los ficheros del home
permission java.io.FilePermission
"user.home/-",
"read,write,delete,execute" // No se puede
ejecutar en c\data permission
java.io.FilePermission C\\data",
"read,write,delete"
39Permisos
- Permisos de Sockets
- Tipo java.net.SocketPermission
- Nombre nombreHostpuerto
- Se puede usar la IP o el nombre del host
- Se pueden usar comodines
- www.urjc.es
- localhost80
- .es4445
- Acciones
- accept, listen (puertos locales), connect, resolve
40Permisos
java.policy
grant // Se tiene acceso total a los sockets
sobre 1024 permission java.net.SocketPermission
"1024-", "accept,listen,connect,r
esolve" // Permite las conexiones a sun.com
permission java.net.SocketPermission
".sun.com1-", "connect,resolve"
41Permisos
- Permisos de Ejecución
- Tipo java.lang.RuntimePermission
- Nombre
- exitVM Permite al código forzar una salida
directa de la aplicación - loadLibrary.ltnamegt Permite la carga de la
librería nativa especificada - queuePrintJob Permite la impresión
-
42Permisos
java.policy
grant permission java.lang.RuntimePermission
"exitVM" permission java.lang.RuntimePermission
"loadLibrary.swt" permission
java.lang.RuntimePermission "queuePrintJob"
43Permisos
- Es posible especificar que se conceden todos los
permisos
java.policy
grant // Todos los permisos permission
java.security.AllPermission
44Ejercicio 1
- Implementa un programa que liste el contenido de
un directorio - Ejecuta el programa sin control de acceso y
comprueba que se ejecuta correctamente - Ejecuta el programa con el control de acceso por
defecto y comprueba que la operación no se permite
File dir new File("C\\") File files
dir.listFiles() if(files ! null) for(File
file files) System.out.println(file)
45Ejercicio 2
- Implementa un programa que muestre el contenido
de una URL por pantalla - Ejecuta el programa con las políticas de un único
fichero en el que no se tenga permiso para abrir
la conexión (sin usar las políticas por defecto) - Comprueba el funcionamiento al dar permisos de
conexión a www.google.es80
URL url new URL("http//www.google.es") URLConn
ection conn url.openConnection() BufferedReader
br new BufferedReader( new
InputStreamReader(conn.getInputStream())) String
line br.readLine() while(line ! null)
System.out.println(line) line
br.readLine()