Seguridad en la Plataforma Java 2 JDK 1.2

Una forma en que la Plataforma Java proporciona protecci�n contra ataques de un virus, por ejemplo, es a trav�s del uso de un controlador de seguridad. Actualmente los c�digos del sistema del JDK llaman a los m�todos del controlador de seguridad para realizar chequeos del control de accesos a recursos.

La mayor�a de los navegadores instalan un controlador de seguridad, por eso los applets se ejecutan para el escrutinio de un controlador de seguridad. Ning�n applet tiene permitido el acceso a recursos a menos que expl�citamente se lo concedamos, mediante un permiso en la pol�tica de seguridad. En las plataformas Java que son compatibles con el JDK 1.2, los permisos deben ser concecidos mediante una entrada en un fichero de pol�tica.

Aqu� est� el c�digo fuente de un applet llamado WriteFile que intenta crear y escribir en un fichero llamado writetest en el directorio actual. El applet no podr� crear el fichero a menos que tenga un permiso expl�cito en el fichero de pol�tica.

Teclea este comando en tu ventana de comandos.

appletviewer http://java.sun.com/docs/books/tutorial/
security1.2/tour1/example-tour1/WriteFile.html

Teclealo en un sola l�nea, sin espacios en la URL.

Deber�as ver un mensaje sobre una excepci�n de seguridad, como se muestra en la siguiene figura. Este es el comportamiento esperado; el sistema captura al applet intentando acceder al recurso para el que no tiene permiso de acceso.

.�Configurar un Fichero de pol�tica para Conceder los Permisos Requeridos

Un fichero de pol�tica es un fichero de texto ASCII y puede ser editado por un editor de texto o la utilidad gr�fica Policy Toll demostrada en esta secci�n. La utilidad Policy Tool graba lo que hayamos tecleado y nos evita tener que aprendernos la s�ntaxis necesaria para los ficheros de pol�tica, as� se reducen los herrores.

Usaremos esta herramienta para crear un fichero de pol�tica, llamado myPolicy, en el que a�adiremos entradas de pol�tica que concedan al c�digo al c�digo del directorio donde se encuentra almacenado WriteFile.class permiso para escribir el fichero writetest. Estos pasos son los siguientes:

Nota para usuarios de UNIX:� Los pasos muestran la creacci�n de un fichero de pol�tica para un sistema Windows. Los pasos son exactamente los mismos si trabajas en un sistema UNIX. Donde el texto indica que almacene el fichero de pol�tica en el directorio C:\Test, tu puedes poner que lo almacene en otro directorio. Los ejemplos del paso "Ver los Efectos del Fichero de pol�tica" y de la lecci�n "Visi�n R�pida para Controlar Aplicaciones" asumen que has utilizado el directorio ~/test.

.�Arrancar la Utilidad Policy Tool

Para arrancar la utilidad Policy Tool, simplemente tenemos que teclear esto en la l�nea de comandos.

Policytool

Esto muestra la ventana de Policy Tool.

Siempre que arranca Policy Tool, intenta rellenar esta ventana con informaci�n de pol�tica proveniente de algo algunas veces referido como "el fichero de pol�tica del usuario". Ese fichero es por defecto uno llamado .java.Policy que se encuentra en nuestro directorio ra�z. Si Policy Tool no puede encontrar este fichero, reporta la situaci�n y muestra una ventana en blanco (es decir, una ventana con cabecera y botones pero sin datos), como se ve en la siguiente figura.

Entonces podemos proceder abriendo otro fichero de pol�tica o crear uno nuevo.

La primera vez que ejecutemos esta utilidad, veremos la ventana en blanco, ya que no existe el fichero de pol�tica del usuario. Podemos inmediatamente proceder a crear un nuevo fichero de pol�tica, como se describe en el siguiente paso.

.�Conceder los Permisos Requeridos

Para conceder permisos al applet WriteFile para que cree y escriba el fichero writetest, debemos crear una entrada de pol�tica concediendo este permiso. Para hacer esto, elegimos el bot�n Add Policy Entry en la pantalla principal de Policy Tool. Esto nos trae la caja de di�logo Policy Entry, como se muestra en la figura siguiente.

Una entrada de pol�tica especif�ca uno o m�s permisos para el c�digo de una fuente de c�digo - c�digo de una localizaci�n (URL= particular, c�digo firmado por una entidad particular, o ambos).

Las cajas de texto CodeBase y SignedBy se usan para especificar el c�digo al que queremos conceder los permisos.

  • Un valor CodeBase indica la localizaci�n del c�digo fuente; concedemos el permiso a todo el c�digo proveniente de esa localizaci�n. Un entrada CodeBase vac�a significa "cualquier c�digo" -- no importa de donde venga.
  • Un valor SignedBy indica el alias para un certificado almacenado en un keystore. La clave p�blica dentro del certificado es utilizada para verificar la firma digital del c�digo, concedemos el permiso al c�digo firmado con la clave privada correspondiente a la clave p�blica de la entrad del keystore especificada por el alias. La entrada SignedBy es opcional; omitirla significa "cualquier firmante" -- no importa si el c�digo est� firmado ni por qu�en.

Si tenemos ambas, una entrada CodeBase y otra SignedBy, los permisos s�lo ser�n concedidos al c�digo que venga de esa localizaci�n y est� firmado por el alias correspondiente.

Para conceder el permiso que necesita WriteFile, podemos conced�rselo a todo el c�digo de la localizaci�n (URL) donde se encuentra WriteFile.class.

Teclea la siguiente URL en la caja de texto CodeBase en la caja de di�logo Policy Entry.

http://java.sun.com/docs/books/tutorial/security1.2/tour1/example-tour1/

Dejaremos la caja de texto SignedBy en blanco, ya que no necesitamos que el c�digo est� firmado.

Nota:� Si queremos conceder el permiso a cualquier c�digo (fichero .class) no s�lo del subdirectorio espec�ficado pr�viamente sino del directorio security1.2 y todos sus subdirectorios, podr�amos teclear la siguiente URL en la caja CodeBase.

http://java.sun.com/docs/books/tutorial/security1.2/-

Hemos especificado de d�nde viene el c�digo (el CodeBase), y que el c�digo no tiene porqu� estar firmado (ya que no hay valor en SignedBy). Ahora estamos listos para concederle permisos al c�digo:

Pulsamos el bot�n Add Permission para traer la caja de di�logo Permissions.

Hacemos lo siguiente para conceder al c�digo del CodeBase especificado el permiso para escribir (y por lo tanto crear) el fichero llamado writetest.

  1. Elegimos File Permission de la lista desplegable Permission. Aparecer� el nombre completo del tipo de permiso (java.io.FilePermission) en la caja de texto a la derecha de la lista desplegable.
  2. Tecleamos lo siguiente en el caja de texto a la derecha de la lista etiquetada Target Name para especificar el fichero writetest.
    writetest
    
  3. Especificamos acceso de escritura eligiendo la opci�n write de la lista desplegable Actions.

Ahora el di�logo Permissions se parecer� a esto:

Elegimos el bot�n OK. El nuevo permiso aparece en una l�nea en el di�golo Policy Entry. Por eso ahora el di�logo Policy Entry se parecer� a esto.

Ya hemos especificado la entrada de pol�tica, por eso elegimos el bot�n Done en el di�logo Policy Entry. Ahora la ventana de Policy Tool contiene una l�nea que representa la entrada de pol�tica, mostrando el valor CodeBase:.

.�Grabar el Fichero de pol�tica

Para grabar el fichero de pol�tica que hemos creado, elegimos el comando Save As del men� File. Esto muestra el di�logoSave As.

Los ejemplos de esta lecci�n y de "Visi�n R�pida para Controlar Aplicaciones" asumen que hemos almacenado el fichero de pol�tica en el directorio Test del disco C:.

Navegamos por la estructura de directorios hasta obtener �ste. Luego tecleamos el nombre del fichero myPolicy y pulsamos el bot�n Save. Entonces se graba el fichero de pol�tica y su nombre y path se muestran en la caja de texto etiquetada Policy File.

Salimos de Policy Tool eligiendo el comando Exit del men� File.

.�Ver los Efectos del Fichero de pol�tica

Ahora que hemos creado el fichero de pol�tica myPolicy deber�amos poder ejecutar con �xito el applet WriteFile para crear y escribir el fichero writetest, como se ve en la siguiente figura..

Siempre que ejecutemos un applet o una aplicaci�n con un controlador de seguridad, los ficheros de pol�tica que se cargan y se usan por defecto son los especificados en el fichero "security properties file", que est� localizado en uno de los siguientes directorios.

  Windows.
    java.home\lib\security\java.security 
  UNIX.
    java.home/lib/security/java.security

Observa que java.home indica el directorio en el que se instal� el JRE.

Las localizaciones de los ficheros de pol�tica se especifican como valores de propiedades cuyos nombres tienen la forma.

Policy.url.n

Donde n indica un n�mero. Especificamos cada uno de los valores en una l�nea con la siguiente forma.

Policy.url.n=URL

Donde URL es una especificaci�n de URL. Por ejemplo, los ficheros de pol�tica por defecto, algunas veces referidos como los ficheros de pol�tica del sistema y de usuario, respectivamente est�n definidos en el fichero de propiedades de seguridad como.

Policy.url.1=file:${java.home}/lib/security/java.Policy
Policy.url.2=file:${user.home}/.java.Policy

Nota: Usar la notaci�n ${propName} en el fichero de propiedades de seguridad es una forma de especificar el valor de una propiedad. As�, ${java.home} ser� reemplazado en el momento de la ejecuci�n por el valor real de la propiedad "java.home", que indica el directorio en el que se instal� el JRE, y ${user.home} ser� reemplazado por el valor de la propiedad "user.home", por ejemplo, C:\Windows.

En el paso anterior no modificamos ninguno de estos ficheros de pol�tica. Creamos uno nuevo llamado myPolicy. Aqu� tenemos dos posibles formas de hacer que el fichero myPolicy sea considerado como parte de la pol�tica general, adem�s de los ficheros de pol�tica especificados en el fichero de propiedades de seguridad. Podemos especificar el fichero de pol�tica adicional en una propiedad pasada al sistema de ejecuci�n, como se describe en "Aproximaci�n 1", o a�adir una nueva l�nea al fichero de propiedades de seguridad, como se describe en "Aproximaci�n 2".

Nota: En un sistema UNIX , debemos tener DNS configurado para que el programas WriteFile sea descargado desde una site p�blica como en los comandos de ejecuci�n mostrados abajo. Necesitamos tener dns en la lista de servicios para host en nuestro fichero /etc/nsswitch.conf, como.

    hosts:    dns files nis

Tambi�n necesitaremos un fichero /etc/resolv.conf con una lista de nombres de servidores. Consulta con tu administrador de sistemas para m�s informaci�n.

.�Aproximaci�n 1

Podemos usar un argumento de la l�nea de comandos para el appletviewer, -J-Djava.security.Policy, para especificar un fichero de pol�tica que deber�a ser usado adem�s de los especificados en el fichero de propiedades de seguridad. Para ejecutar el applet WriteFile con el fichero de pol�tica myPolicy incluido, debemos teclear lo siguiente, en el directorio en el que tengamos almacenado a myPolicy.

appletviewer -J-Djava.security.Policy=myPolicy  
 http://java.sun.com/docs/books/tutorial/security1.2/tour1/
 example-tour1/WriteFile.html

Nota:

  • Esto debe ser tecleado como un s�la l�nea, con un espacio entre myPolicy y la URL y sin espacios en la URL. Aqu� hemos usado m�ltiples l�neas para facilitar su lectura.
  • Si esta l�nea de comandos es mayor que el m�ximo n�mero de caracteres que tienes permitidos, haz lo siguiente. Crea un fichero de texto que contenga el comando completo, y llamado con una extensi�n .bat, por ejemplo, wf.bat. Luego, en tu ventana de comandos s�lo tienes que teclear el nombre del fichero .bat. Esto resulta en la ejecuci�n del comando completo.

Si el applet muestra alg�n error, es que hay algo mal en el fichero de pol�tica. Usa la herramienta Policy Tool para abrir el fichero myPolicy y chequear las entradas de pol�tica que acabamos de crear en el paso anterior, "Configurar un Fichero de pol�tica para Conceder los Permisos Requeridos".

Para ver o editar una entrada de pol�tica existente, se selecciona la l�nea para esa entrada en el ventana principal de Policy Tool, y se pulsa el bot�n Edit Policy Entry. Tambi�n se puede hacer doble click sobre la l�nea de esa entrada.

Esto muestra el mismo di�logo de Polciy Entry que apareci� cuando a�adimos una nueva entrada, excepto en que ahora est� lleno con la informaci�n de la entrada existente. Para cambiar la informaci�n, simplemente tecleamos el valor correcto en el campo de texto adecuado.

.�Aproximaci�n 2

Podemos especificar un n�mero de URLs (incluyendo de la forma "http://") en las propiedades Policy.url.n en el fichero de propiedades de seguridad, y todos los ficheros designados se cargar�n.

Por eso una forma de hacer que nuestro fichero de pol�tica myPolicy sea considerado por el appletviewer es a�adir una entrada especificando el fichero de pol�tica al fichero de propiedades de seguridad.

Importante:� Si estas ejecutando tu propia copia del JDK, puedes f�cilmente editar tu fichero de propiedades de seguridad. Si est�s ejecutando una versi�n compartida con otros, s�lo podr�s modificarlo si tienes acceso de escritura, o si pides al admistrador que modifique el fichero de la forma apropiada. Sin embargo, no es apropiado realizar modificaciones en un fichero de seguridad para todo el sistema s�lo para probar este tutorial. Te sugerimos que leas los pasos siguiente para ver c�mo se hace o que te instales tu propia versi�n privada del JDK para usar con las lecciones del tutor.

Para modificar el fichero de propiedades de seguridad, �brelo en un fichero capaz de editar ficheros ASCII. Luego a�ade la siguiente l�nea despu�s de la l�nea que empieza con Policy.url.2.

  Windows.
    Policy.url.3=file:/C:/Test/myPolicy
  UNIX.
    Policy.url.3=file:${user.home}/test/myPolicy

En un sistema UNIX tambi�n puedes especificar tu directorio home como

Policy.url.3=file:/home/susanj/test/myPolicy

Ahora deber�as poder ejecutar esto con �xito.

appletviewer http://java.sun.com/docs/books/tutorial/
security1.2/tour1/example-tour1/WriteFile.html

Importante: El fichero myPolicy tambi�n se utiliza en la lecci�n Visi�n R�pida para Controlar Aplicaciones. Si no vas a seguir esa lecci�n, probablemente querr�s borrar la l�nea que acabamos de a�adir al fichero de propiedades de seguridad, ya que no querr�s que el fichero myPolicy sea incluido cuando no est�s ejecutando las lecciones del tutor.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR