1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos...

18
1 TEMA 5. TEMA 5. Seguridad en Java Seguridad en Java 1. 1. Introducción a los Controladores Introducción a los Controladores de Seguridad de Seguridad 2. 2. Decidir qué Métodos Decidir qué Métodos Sobreescribir del Sobreescribir del SecurityManager SecurityManager 3. 3. Escribir un Controlador de Escribir un Controlador de Seguridad Seguridad 4. 4. Instalar un Controlador de Instalar un Controlador de Seguridad Seguridad 5. 5. Gestor de seguridad en RMI Gestor de seguridad en RMI

Transcript of 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos...

Page 1: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

11

TEMA 5.TEMA 5.Seguridad en JavaSeguridad en Java

1.1. Introducción a los Controladores Introducción a los Controladores de Seguridad de Seguridad

2.2. Decidir qué Métodos Decidir qué Métodos Sobreescribir del Sobreescribir del SecurityManagerSecurityManager

3.3. Escribir un Controlador de Escribir un Controlador de SeguridadSeguridad

4.4. Instalar un Controlador de Instalar un Controlador de SeguridadSeguridad

5.5. Gestor de seguridad en RMIGestor de seguridad en RMI

Page 2: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

22

BibliografíaBibliografía

Tutoriales Sun: Tutoriales Sun: http://java.sun.com/docs/books/tutorial/shttp://java.sun.com/docs/books/tutorial/security/index.htmlecurity/index.html

http://java.sun.com/javase/6/docs/tehttp://java.sun.com/javase/6/docs/technotes/guides/security/index.htmlchnotes/guides/security/index.html

Page 3: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

33

El controlador de seguridad actúa como El controlador de seguridad actúa como un guardia de seguridad a tiempo un guardia de seguridad a tiempo completo. completo.

La clase SecurityManager del paquete La clase SecurityManager del paquete java.lang es una clase abstracta que java.lang es una clase abstracta que proporciona el interface de programación proporciona el interface de programación y una implementación parcial para todos y una implementación parcial para todos los controladores de seguridad de Java. los controladores de seguridad de Java.

Una aplicación debe crear e instalar su Una aplicación debe crear e instalar su propio controlador de seguridad. propio controlador de seguridad.

1 . Introducción a los Controladores de Introducción a los Controladores de SeguridadSeguridad

Seguridad en Java

Page 4: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

44

Los navegadores y los Los navegadores y los visualizadores de applets visualizadores de applets creancrean su propio controlador de su propio controlador de seguridad cuando arrancan. seguridad cuando arrancan.

Un applet está sujeto a las Un applet está sujeto a las restricciones de acceso. restricciones de acceso.

1 . Introducción a los Controladores de Introducción a los Controladores de SeguridadSeguridad

Seguridad en Java

Page 5: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

55

Para obtener el controlador de seguridad actual: Para obtener el controlador de seguridad actual:

getSecurityManager()getSecurityManager() de la clase System de la clase System

getSecurityManager()getSecurityManager() devuelve null si no hay ningún devuelve null si no hay ningún controlador de seguridad actual en la aplicación.controlador de seguridad actual en la aplicación.

Una vez se tiene el controlador de seguridad, se pueden Una vez se tiene el controlador de seguridad, se pueden permitir o prohibir ciertas operaciones. permitir o prohibir ciertas operaciones.

Por ejemplo, el método Por ejemplo, el método System.exit()System.exit(), que finaliza el , que finaliza el interprete Java, utiliza el método interprete Java, utiliza el método checkExit()checkExit() del del controlador de seguridad para aprobar la operación de controlador de seguridad para aprobar la operación de salida: salida:

SecurityManager security = System.getSecurityManager();if SecurityManager security = System.getSecurityManager();if (security != null) { (security != null) { security.checkExit(status); security.checkExit(status);

1 . Introducción a los Controladores de Introducción a los Controladores de SeguridadSeguridad

Seguridad en Java

Page 6: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

66

Si el controlador de seguridad Si el controlador de seguridad aprueba la operación de salida, el aprueba la operación de salida, el checkExit()checkExit() retorna retorna normalmente. normalmente.

Si el controlador de seguridad Si el controlador de seguridad prohibe la operación, el prohibe la operación, el checkExit()checkExit() lanza una lanza una SecurityException. SecurityException.

1 . Introducción a los Controladores de Introducción a los Controladores de SeguridadSeguridad

Seguridad en Java

Page 7: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

77

El conjunto de métodos El conjunto de métodos checkXXX()checkXXX() representa el conjunto de operaciones de representa el conjunto de operaciones de las clases de los paquetes Java y el las clases de los paquetes Java y el sistema de ejecución de Java que ya están sistema de ejecución de Java que ya están sujetos a la protección del controlador de sujetos a la protección del controlador de seguridad. seguridad.

Si se escribe el propio controlador de Si se escribe el propio controlador de seguridad, se puede tener que seguridad, se puede tener que sobreescribir los métodos sobreescribir los métodos checkXXX()checkXXX() de de SecurityManager para modificar la política SecurityManager para modificar la política de seguridad de las operaciones de seguridad de las operaciones específicas.específicas.

1 . Introducción a los Controladores de Introducción a los Controladores de SeguridadSeguridad

Seguridad en Java

Page 8: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

88

Podrías tener que sobreescribir varios Podrías tener que sobreescribir varios métodos métodos checkXXX()checkXXX() del del SecurityManager .SecurityManager .

La primera columna de la siguiente La primera columna de la siguiente tabla son objetos sobre los que se tabla son objetos sobre los que se pueden realizar varias operaciones. pueden realizar varias operaciones.

La segunda columna lista los métodos La segunda columna lista los métodos de SecurityManager que aprueban las de SecurityManager que aprueban las operaciones de los objetos de la operaciones de los objetos de la primera columna. primera columna.

2 . Decidir qué Métodos Sobreescribir del SecurityManagerDecidir qué Métodos Sobreescribir del SecurityManager

Métodos para sobreescribir

Page 9: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

99

2 . Decidir qué Métodos Sobreescribir del SecurityManagerDecidir qué Métodos Sobreescribir del SecurityManager

Métodos para sobreescribir

Page 10: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

1010

Para escribir tu propio controlador de seguridad, Para escribir tu propio controlador de seguridad, debes crear una subclase de la clase debes crear una subclase de la clase SecurityManager. SecurityManager.

Esta subclase sobreescribe varios métodos de Esta subclase sobreescribe varios métodos de SecurityManager para personalizar las verificaciones y SecurityManager para personalizar las verificaciones y aprobaciones necesarias para una aplicación Java. aprobaciones necesarias para una aplicación Java.

El ejemplo restringe la lectura y escritura en el El ejemplo restringe la lectura y escritura en el sistema de ficheros. sistema de ficheros.

Un método que abra un fichero para leer invoca uno Un método que abra un fichero para leer invoca uno de los métodos de los métodos checkRead()checkRead() de SecurityManager de SecurityManager

Un método que abre un fichero para escribir invoca a Un método que abre un fichero para escribir invoca a uno de los métodos uno de los métodos checkWrite()checkWrite() se se SecurityManager. SecurityManager.

3 . Escribir un Controlador de SeguridadEscribir un Controlador de Seguridad

Ejemplo

Page 11: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

1111

La política implementada por nuestro La política implementada por nuestro ejemplo le pide al usuario una password ejemplo le pide al usuario una password cuando la aplicación intenta abrir un fichero cuando la aplicación intenta abrir un fichero para leer o escribir. Si la password es para leer o escribir. Si la password es correcta se permite el acceso. correcta se permite el acceso.

Todos los controladores de seguridad deben Todos los controladores de seguridad deben ser una subclase de SecurityManager. Así, ser una subclase de SecurityManager. Así, nuestra PasswordSecurityManager desciende nuestra PasswordSecurityManager desciende de SecurityManager. de SecurityManager.

class PasswordSecurityManager extends class PasswordSecurityManager extends SecurityManager { . . .} SecurityManager { . . .}

3 . Escribir un Controlador de SeguridadEscribir un Controlador de Seguridad

Ejemplo

Page 12: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

1212

Luego, PasswordSecurityManager Luego, PasswordSecurityManager declara un ejemplar de la variable declara un ejemplar de la variable privada privada passwordpassword para contener el para contener el password que el usuario debe password que el usuario debe introducir para poder permitir el introducir para poder permitir el acceso al sistema de ficheros acceso al sistema de ficheros restringido. restringido.

La password se selecciona durante la La password se selecciona durante la construcción. construcción. PasswordSecurityManager(String password) PasswordSecurityManager(String password)

{ super(); this.password = password;} { super(); this.password = password;}

3 . Escribir un Controlador de SeguridadEscribir un Controlador de Seguridad

Ejemplo

Page 13: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

1313

private boolean accessOK() { private boolean accessOK() {

int c; int c;

DataInputStream dis = new DataInputStream dis = new DataInputStream(System.in); String response; DataInputStream(System.in); String response;

System.out.println("What's the secret password?"); System.out.println("What's the secret password?");

try { try {

response = dis.readLine(); response = dis.readLine();

if (response.equals(password)) return true; if (response.equals(password)) return true;

else return false; } else return false; }

catch (IOException e) { return false; catch (IOException e) { return false; }} }}

3 . Escribir un Controlador de SeguridadEscribir un Controlador de Seguridad

Ejemplo

Page 14: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

1414

public void checkRead(FileDescriptor filedescriptor) { public void checkRead(FileDescriptor filedescriptor) { if (!accessOK()) throw new SecurityException("Not a Chance!");}if (!accessOK()) throw new SecurityException("Not a Chance!");}

public void checkRead(String filename) { public void checkRead(String filename) { if (!accessOK()) throw new SecurityException("No Way!");}if (!accessOK()) throw new SecurityException("No Way!");}

public void checkRead(String filename, Object executionContext) { public void checkRead(String filename, Object executionContext) { if (!accessOK()) throw new SecurityException("Forget It!");}if (!accessOK()) throw new SecurityException("Forget It!");}

public void checkWrite(FileDescriptor filedescriptor) { public void checkWrite(FileDescriptor filedescriptor) { if (!accessOK()) throw new SecurityException("Not!");}if (!accessOK()) throw new SecurityException("Not!");}

public void checkWrite(String filename) { public void checkWrite(String filename) { if (!accessOK()) throw new SecurityException("Not Even!");if (!accessOK()) throw new SecurityException("Not Even!");

SecurityException es una excepción en tiempo de ejecución, y SecurityException es una excepción en tiempo de ejecución, y no necesita ser declarada en la clausula no necesita ser declarada en la clausula throwsthrows de estos de estos métodos. métodos.

3 . Escribir un Controlador de SeguridadEscribir un Controlador de Seguridad

Ejemplo

Page 15: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

1515

Por defecto, la clase SecurityManager prohíbe todas Por defecto, la clase SecurityManager prohíbe todas las operaciones que están sujetas a las restricciones las operaciones que están sujetas a las restricciones de seguridad. de seguridad.

Por lo que podrías encontrar que tienes que Por lo que podrías encontrar que tienes que sobreescribir muchos métodos sobreescribir muchos métodos checkXXX()checkXXX() para para obtener el comportamiento deseado. obtener el comportamiento deseado.

Todos los métodos Todos los métodos checkXXX()checkXXX() de la clase de la clase SecurityManager operan de la misma forma. SecurityManager operan de la misma forma. – Si el acceso está permitido, el método retorna. Si el acceso está permitido, el método retorna. – Si el acceso no está permitido, el método lanza una Si el acceso no está permitido, el método lanza una

SecurityException. SecurityException.

Asegúrate de que implementas de esta forma tus Asegúrate de que implementas de esta forma tus métodos métodos checkXXX()checkXXX() sobreescritos. sobreescritos.

3 . Escribir un Controlador de SeguridadEscribir un Controlador de Seguridad

Ejemplo

Page 16: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

1616

Para instalar el controlador de Para instalar el controlador de seguridad unicamente debes seguridad unicamente debes ejecutar el método: ejecutar el método:

System.setSecurityManager()System.setSecurityManager()

Ver el ejemplo que se adjunta. Ver el ejemplo que se adjunta.

4 . Instalar un Controlador de SeguridadInstalar un Controlador de Seguridad

Page 17: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

1717

Por defecto el gestor de seguridad de Por defecto el gestor de seguridad de RMI es muy restrictivo: no permite RMI es muy restrictivo: no permite acceso a los ficheros y solo permite acceso a los ficheros y solo permite conexiones a la máquina de origen conexiones a la máquina de origen (similar a de las applets ver siguiente tema).(similar a de las applets ver siguiente tema).

No permite descarga de resguardo No permite descarga de resguardo (Stub) ni permite a un objeto cliente (Stub) ni permite a un objeto cliente de RMI contactar con el registro RMI.de RMI contactar con el registro RMI.

Por lo tanto deberemos extender la Por lo tanto deberemos extender la clase RMISecurityManager o modificar clase RMISecurityManager o modificar el fichero de políticas de seguridad el fichero de políticas de seguridad java para RMI (java.policy).java para RMI (java.policy).

5 . Gestor de seguridad en RMIGestor de seguridad en RMI

SM RMI

Page 18: 1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.

1818

Permisos en java: Permisos en java: http://download.oracle.com/javase/1.4.http://download.oracle.com/javase/1.4.2/docs/guide/security/permissions.html2/docs/guide/security/permissions.html

Fichero java.policy: Fichero java.policy: http://download.oracle.com/javase/1.5.http://download.oracle.com/javase/1.5.0/docs/guide/security/PolicyFiles.html0/docs/guide/security/PolicyFiles.html

Seguridad en java: Seguridad en java: http://www.uv.es/sto/cursos/seguridad.http://www.uv.es/sto/cursos/seguridad.java/html/sjava.html#toc6java/html/sjava.html#toc6

5 . Gestor de seguridad en RMIGestor de seguridad en RMI

Enlaces de interés