Download Sin título de diapositiva

Document related concepts
no text concepts found
Transcript
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 de Seguridad
4. Instalar un Controlador de Seguridad
5. Gestor de seguridad en RMI
1
Bibliografía
Tutoriales Sun:
http://java.sun.com/docs/books/tutoria
l/security/index.html
http://java.sun.com/javase/6/docs/tec
hnotes/guides/security/index.html
2
1 . Introducción a los Controladores de Seguridad
Seguridad en Java



El controlador de seguridad actúa como un
guardia de seguridad a tiempo completo.
La clase SecurityManager del paquete
java.lang es una clase abstracta que
proporciona el interface de programación y
una implementación parcial para todos los
controladores de seguridad de Java.
Una aplicación debe crear e instalar su
propio controlador de seguridad.
3
1 . Introducción a los Controladores de Seguridad
Seguridad en Java


Los navegadores y los visualizadores
de applets crean su propio
controlador de seguridad cuando
arrancan.
Un applet está sujeto a las
restricciones de acceso.
4
1 . Introducción a los Controladores de Seguridad
Seguridad en Java

Para obtener el controlador de seguridad actual:
getSecurityManager() de la clase System

getSecurityManager() devuelve null si no hay ningún controlador
de seguridad actual en la aplicación.

Una vez se tiene el controlador de seguridad, se pueden permitir o
prohibir ciertas operaciones.

Por ejemplo, el método System.exit(), que finaliza el interprete
Java, utiliza el método checkExit() del controlador de seguridad
para aprobar la operación de salida:
SecurityManager security = System.getSecurityManager();if (security !=
null) { security.checkExit(status);
5
1 . Introducción a los Controladores de Seguridad
Seguridad en Java


Si el controlador de seguridad aprueba
la operación de salida, el checkExit()
retorna normalmente.
Si el controlador de seguridad prohibe
la operación, el checkExit() lanza
una SecurityException.
6
1 . Introducción a los Controladores de Seguridad
Seguridad en Java


El conjunto de métodos checkXXX()
representa el conjunto de operaciones de
las clases de los paquetes Java y el sistema
de ejecución de Java que ya están sujetos a
la protección del controlador de seguridad.
Si se escribe el propio controlador de
seguridad, se puede tener que sobreescribir
los métodos checkXXX() de
SecurityManager para modificar la política
de seguridad de las operaciones específicas.
7
2 . Decidir qué Métodos Sobreescribir del SecurityManager
Métodos para sobreescribir



Podrías tener que sobreescribir varios
métodos checkXXX() del SecurityManager
.
La primera columna de la siguiente tabla
son objetos sobre los que se pueden realizar
varias operaciones.
La segunda columna lista los métodos de
SecurityManager que aprueban las
operaciones de los objetos de la primera
columna.
8
2 . Decidir qué Métodos Sobreescribir del SecurityManager
Métodos para sobreescribir
9
3 . Escribir un Controlador de Seguridad
Ejemplo


Para escribir tu propio controlador de seguridad, debes crear
una subclase de la clase SecurityManager.
Esta subclase sobreescribe varios métodos de
SecurityManager para personalizar las verificaciones y
aprobaciones necesarias para una aplicación Java.

El ejemplo restringe la lectura y escritura en el sistema de
ficheros.

Un método que abra un fichero para leer invoca uno de los
métodos checkRead() de SecurityManager

Un método que abre un fichero para escribir invoca a uno de
los métodos checkWrite() se SecurityManager.
10
3 . Escribir un Controlador de Seguridad
Ejemplo



La política implementada por nuestro ejemplo le
pide al usuario una password cuando la aplicación
intenta abrir un fichero para leer o escribir. Si la
password es correcta se permite el acceso.
Todos los controladores de seguridad deben ser una
subclase de SecurityManager. Así, nuestra
PasswordSecurityManager desciende de
SecurityManager.
class PasswordSecurityManager extends
SecurityManager { . . .}
11
3 . Escribir un Controlador de Seguridad
Ejemplo


Luego, PasswordSecurityManager declara un
ejemplar de la variable privada password
para contener el password que el usuario
debe introducir para poder permitir el
acceso al sistema de ficheros restringido.
La password se selecciona durante la
construcción.
PasswordSecurityManager(String password) {
super(); this.password = password;}
12
3 . Escribir un Controlador de Seguridad
Ejemplo
private boolean accessOK() {
int c;
DataInputStream dis = new DataInputStream(System.in);
String response;
System.out.println("What's the secret password?");
try {
response = dis.readLine();
if (response.equals(password)) return true;
else return false; }
catch (IOException e) { return false; }}
13
3 . Escribir un Controlador de Seguridad
Ejemplo
public void checkRead(FileDescriptor filedescriptor) {
if (!accessOK()) throw new SecurityException("Not a Chance!");}
public void checkRead(String filename) {
if (!accessOK()) throw new SecurityException("No Way!");}
public void checkRead(String filename, Object executionContext) {
if (!accessOK()) throw new SecurityException("Forget It!");}
public void checkWrite(FileDescriptor filedescriptor) {
if (!accessOK()) throw new SecurityException("Not!");}
public void checkWrite(String filename) {
if (!accessOK()) throw new SecurityException("Not Even!");
SecurityException es una excepción en tiempo de ejecución, y no
necesita ser declarada en la clausula throws de estos métodos.
14
3 . Escribir un Controlador de Seguridad
Ejemplo



Por defecto, la clase SecurityManager prohíbe todas las
operaciones que están sujetas a las restricciones de
seguridad.
Por lo que podrías encontrar que tienes que sobreescribir
muchos métodos checkXXX() para obtener el
comportamiento deseado.
Todos los métodos checkXXX() de la clase SecurityManager
operan de la misma forma.
– Si el acceso está permitido, el método retorna.
– Si el acceso no está permitido, el método lanza una
SecurityException.

Asegúrate de que implementas de esta forma tus métodos
checkXXX() sobreescritos.
15
4 . Instalar un Controlador de Seguridad

Para instalar el controlador de
seguridad unicamente debes ejecutar
el método:
System.setSecurityManager()

Ver el ejemplo que se adjunta.
16
5 . Gestor de seguridad en RMI
SM RMI



Por defecto el gestor de seguridad de RMI
es muy restrictivo: no permite acceso a los
ficheros y solo permite conexiones a la
máquina de origen (similar a de las applets ver siguiente tema).
No permite descarga de resguardo (Stub) ni
permite a un objeto cliente de RMI
contactar con el registro RMI.
Por lo tanto deberemos extender la clase
RMISecurityManager o modificar el fichero
de políticas de seguridad java para RMI
(java.policy).
17
5 . Gestor de seguridad en RMI
Enlaces de interés

Permisos en java:
http://download.oracle.com/javase/1.4.2/do
cs/guide/security/permissions.html


Fichero java.policy:
http://download.oracle.com/javase/1.5.0/do
cs/guide/security/PolicyFiles.html
Seguridad en java:
http://www.uv.es/sto/cursos/seguridad.java
/html/sjava.html#toc6
18