Todos los applets y cualquier aplicacion invocada con un controlador de seguridad debe conceder permisos expl�citos para acceder los recursos locales del sistema apaerte del acceso de lectura en el directorio y subdirectorios desde donde se invoc� el programa. La plataforma Java proporciona permisos para permitir varios niveles de accesos a diferentes tiposde informaci�n local.
Como los permisos permiten a un applet o una aplicaci�n sobreescribir el polic�a de seguridad por defecto, deber�amos ser muy cuidadosos cuando asignemos permisos para no crear una antrada al c�digo malicioso para que ataque nuestro sistema.
Este ap�ndice describe los permisos disponibles y explica c�mo cada permiso puede crear una entrada para un ataque de c�digo malicioso. Una forma de usar esta informaci�n es ayudarnos a limitar los permisos dados a un applet o una aplicaci�n a s�lo los necesarios para su ejecuci�n. Otra forma de usar esta informaci�n es para aprender nosotros mismos las formas en que un permisi particular puede ser explotado por c�digo malicioso.
Como consejo, nunca creas en un applet o una aplicaci�n desconocidos. Siempre chequea el c�digo cuidadosamente con la informaci�n de este ap�ndice para asegurarte de que no ofreces permisos a codigo malicios que cause serios problemas en el sistema local.
�Introducci�n
Los permisos se le conceden a un programa con un ficheo de polic�a. Un fichero de polic�a conteine permisos para accesos espec�ficos. Un permiso consta de un nombre de permiso, una fuente, y en algunos casos, una lista de acciones separadas por comas.
Por ejemplo, la siguiente entrada de fichero de polic�a especifica un permiso java.io.FilePermission que concede acceso de read (la acci�n) a la fuente ${user.home}/text2.txt.
grant {
permission java.io.FilePermission
"${user.home}/text2.txt", "read";
};
Hay un fichero de polic�a de la instalaci�n de la plataforma Java (Sistema) y opcionalmente un fichero de polic�a por cada usuario. El fichero de polic�a del sistema est� en {java.home}/lib/security/java.policy, y el fichero de polic�a de usuario est� en cada directorio home de los usuarios. Los ficheros de polic�a de sistema y de usuario se combinan. Por eso por ejemplo, podr�a haber un fichero de polic�a con muy pocos permisos concedidos a todos los usuarios del sistema, y un fichero de polic�a individual concediendo permisos adicionales a ciertos usuarios.
Para ejecutar una aplicaci�n con el controlador de seguridad y un fichero de polic�a llamado polfile en el directorio home del usuario, tecleamos.
java -Djava.security.main -DJava.security.policy=polfile FileIO
Para ejecutar un applet en el aplletviewer con un fichero de polic�a llamando polfile en el directorio home del usuario, tecleamos.
appletviewer -J-Djava.security.policy=polfile fileIO.html
Cuando ejecutamos un applet en un navegador, este busca los ficheros de polic�a de usuario y del sistema para encontrar los permisos que necesita el applet para acceder a los recursos del sistema local en representaci�n del usuario que descarg� el applet.
�Conocer qu� Permisos
Cuando ejecutamos un applet o invocamos una aplicaci�n con un controlador de seguridad que necesita permisos, obtendremos un seguimiento de pila si no hemos proporcionado un fichero de polic�a con todos los permisos necesarios. El seguimiento de pila contiene la informaci�n que necesitamos para a�adir los permisos al fichero de polic�a que caus� el seguimiento de pila. Si el programa necesita permisos adicionales, seguiremos obteniendo el seguimiento d epila hasta que se a�adan todos los permisos requeridos al fichero de polic�a. El �nico inconveniente de esta aproximaci�n es que tenemos que probar cada posbiel path de c�digo de nuestra aplicaci�n.
Otra forma de determinar qu� permisos necesita nuestro programa es visitar Ap�ndice B: M�todos y Permisos. Este ap�ndice nos cuenta qu� m�todos de la plataforma Java 2 tienen impedida la ejecuci�n sin los permisos listados. La informaci�n del Ap�ndice B tambi�n es �til para los desarrolladores que quieran escribir su propio controlador de seguridad para personalizar las verificaciones y aprovaciones necesarias en un programa.
Aqu� tenemos un peque�o ejemplo que nos muestra como traducir el primer par de l�neas del seguimiento de pila en una entrada del fichero de polic�. La primera l�nea nos dice que el acceso est� denegado. Esto significa que el seguimiento de pila fue generado porque el programa intent� acceder a recursos del sistema sin el permiso apropiado. La segunda l�nea significa que necesitamos un java.net.SocketPermission que le de programa permiso para connect y para resolveel nombre de host para la direcci�n (IP) 129.144.176.176, puerto 1521.
java.security.AccessControlException: access denied
(java.net.SocketPermission
129.144.176.176:1521 connect,resolve)
Para volver esto en una entrada del fichero de polic�a, listamos el nombre del permiso, una fuente, u una lista de acciones donde java.net.SocketPermission es el nombre del permiso, 129.144.176.176:1521 es la fuente, y connect,resolve es la lista de acciones.
grant {
permission java.net.SocketPermission
"129.144.176.176:1521", "connect,resolve";
};
�Tipos de permisos
�AllPermission
java.security.AllPermission especifica todos los permisos en el sistema para todos los posibles fuentes y acciones. Este permiso s�lo deber�a usarse para pruebas ya que concede permiso para ejecutar con todas las restricciones de seguridad desactivadas, como si no hubiera controlador de seguridad.
grant {
permission java.security.AllPermission;
};
�AWTPermission
java.awt.AWTPermission concede permisos a las siguientes fuentes AWT. Las posibles fuentes se listan por nombre sin lista de acciones.
grant {
permission java.awt.AWTPermission
"accessClipboard";
permission java.awt.AWTPermission
"accessEventQueue";
permission java.awt.AWTPermission
"showWindowWithoutWarningBanner";
};
accessClipboard: Esta fuente concede permiso para poner informaci�n y para recuperarla desde el portapapeles del AWT. Conceder este permiso puede permitir a c�digo malicioso que comparta informacion potencialmente sensible o confidencial.
accessEventQueue: Esta fuente concede permiso para acceder a la cola de eventos del AWT. Conceder este permiso podr�a permitir a c�digo mailicioso que observe y elimine eventos del sistema, y ponga eventos falsos que podr�an causar que la aplicaci�n o el appler realizar�n acciones maliciosas.
listenToAllAWTEvents: Esta fuente concede permiso para escuvhar todos los eventos AWT a trav�s del sistema. Conceder este permiso podr�a permitir a c�digo malicios lea y explote entradas confidenciales del usuario como las passwords.
Cada oyente de evento AWT es llamado desde dentro del contexto EventDispatchThread de la cola de eventos, por eso si tambi�n est� activado el permiso accessEventQueue, c�digo malicioso podr�a modificar el contenido de la cola de eventos del AWT a trav�s del sistema, lo que podr�a causar que el applet o la aplicaci�n realizar�n acciones maliciosas.
readDisplayPixels: Esta fuente concede permiso para leer pixels desde la pantalla. Condeder este permiso podr�a permitir a interfaces como java.awt.Composite permitan examinar los pixels de la pantalla y fisgonee las actividades del usuario.
showWindowWithoutWarningBanner: Esta fuene concede permiso para mostrar una ventana sin mostrar el aviso de que la ventana fue creada por un applet. Sin este aviso, un applet podr�a mostrar ventanas si que el usuario supiera que pertenecen al applet. Esto podr�a ser un problema en entornos d�nde el usuario toma decisiones sensibles de seguridad b�sandose en a qui�n pertenece la ventana si a un applet o a una aplicaci�n. Por ejemplo, desactivar este aviso podr�a significar que el usuario introdujeta informaci�n sensile como el nombre de usuario y la password.
�FilePermission
java.io.FilePermission concede permiso para acceder a un fichero o directorior. La fuentes consisten en el pathname y una lista de acciones separadas por comas.
Este fichero de polic�a concede permisos de lectura, escritura, borrado y ejecuci�n para todos los ficheros.
grant {
permission java.io.FilePermission
"<<ALL FILES>>", "read, write, delete, execute";
};
Este fichero de polic�a concede permiso de lectura y escritura sobre text.txt en el directorio home del usuario.
grant {
permission java.io.FilePermission
"${user.home}/text.txt", "read, write";
};
Podemos usar los siguiente comodines para especificar al pathname de la fuente.
- Un pathname que termine en /*, donde /* es el car�cter separador de ficheros significa un directorio y todos los ficheros contenidos en ese directorio.
- Un pathname que termine con /- indica un directorio, y recursivamente, todos los ficheros y subdirectorios incluidos en ese directorio
- Un pathname que consista en un s�lo asterisco (*) indica todos los ficheros del directorio actual.
- Un pathname que consista en un s�lo gui�n (-) indica todos los ficheros del directorio actual, y recursivamente, todos los ficheros y subdirectorios contenidos en el directorio actual.
Las acciones son especificadas en una lista de palabras clave separadas por comas que tienen el siguiente significado.
- read: Permiso para leer un fichero o directorio.
- write: Permiso para escribir o crear un fichero o directorio.
- execute: Permiso para ejecutar o ficheo o buscar un directorio.
- delete: Permiso para borrar un fichero o directorio.
Cuando concedamos permisos de ficheros, siempre debemos pensar en las implicaciones de conceder permisos de lectura y especialmente de escritura a varios ficheros y directorios. El permiso <<ALL FILES>> con acci�n de escritura es especialmente peligroso porque concede permiso para escribir en todo el sistema de ficheros. Esto significa que el sistema binario puede ser reemplazado, lo que incluye el entorno de ejecuci�n de la m�quina virtual Java.
�NetPermission
java.net.NetPermission concede permisos a varias fuentes de red. Las posible fuentes se listan por el nombre sin lista de acciones.
grant {
permission java.net.NetPermission
"setDefaultAuthenticator";
permission java.net.NetPermission
"requestPasswordAuthentication";
};
setDefaultAuthenticator: Esta fuente concede permiso para seleccionar la forma en que informaci�n de autentificaci�n es recuperad cuando un proxy o un servidor HTTP piden autentificaci�n. Concedere ste permiso podr�a significar que c�digo mailicioso puede seleccinar un autentificador que monitorice y robe la entrada de autentificaci�n del usuario como si recuperar la informaci�n desde el usuario.
requestPasswordAuthentication: Esta fuente concede permiso para pedir al autentificador registrado con el sistema una password. Conceder este permiso podr�a significar que c�digo preciado podr�a robar la password.
specifyStreamHandler: Esta fuente concede permiso para especificar un manejador de stram cuando se construye una URL. Conceder este permiso podr�a significar que c�digo malicioso podr�a crear una URLK con recursos a los que normalmente no tendr�a acceso, o especificar un controlador de stream para obtener los bytes reales desde algun real al que tenga acceso. Esto significa que el c�digo malicios podr�a embaucar al sistema para crear una clase ProtectionDomain/CodeSource incluso aunque la clase realmente no venga de esa localizaci�n.
�PropertyPermission
java.util.PropertyPermission concede acceso a las propiedades del sistema. La clase java.util.Properties represetna selecciones persistentes como la localizaci�n del directorio de instalaci�n, el nombre de usuario o el directorio home del usuario.
grant {
permission java.util.PropertyPermission
"java.home", "read";
permission java.util.PropertyPermission
"os.name", "write";
permission java.util.PropertyPermission
"user.name", "read, write";
};
La lista de fuentes contiene el nombre de la propiedad, por ejemplo, java.home o os.name. La convenci�n de nombres para propiedades sigue la convenci�n de nombres hereditarios, e incluye comodines. Un asterisco al final del nombre de propiedad, despu�s de un punto (.), o en solitario, significa un comodin. Por ejemplo, java.* o * son v�lidos, pero *java o a*b no lo son.
Las acciones se especifican en una listra de palabras claves separadas por comas, que tienen este significado.
- read: Permiso para leer (obtener) una propiedad.
- write: Permiso para escribir (seleccionar) una propiedad.
Conceder permisos a propiedades puede dejar nuestro sistema abierto a la intrusi�n. Por ejemplo, conceder permiso para acceder a la propiedad java.home hace vulnerable a ataques el directorio de la instalaci�n, y conceder permiso de acceso a las propiedades user.name y user.home podr�a revelar el nombre de cuenta del usuario y el directorio home.
�ReflectPermission
java.lang.reflect.ReflectPermission concede permiso para varias operaciones reflectivas. Las posibles fuentes se listan por el nombre sin lista de acciones.
grant {
permission java.lang.reflect.ReflectPermission
"suppressAccessChecks";
};
suppressAccessChecks: Esta fuente concede permiso para acceder a los campos e invocar m�todos de una clase. Esto incluye campos y m�todos p�blicos, protegidos y privados. Conceder este permiso pidr�a revelar informaci�n confidencial y poner m�todos importantes al alcance del c�digo malicioso.
�RuntimePermission
java.lang.RuntimePermission concede permiso a varias fuentes del entorno de ejecuci�n, como el cargador de clases, la m�quina virtual Java y los threads. Las posibles fuentes se listan por el nombre sin lista de acciones.
grant {
permission java.lang.RuntimePermission
"createClassLoader";
permission java.lang.RuntimePermission
"getClassLoader";
permission java.lang.RuntimePermission
"exitVM";
permission java.lang.RuntimePermission
"setFactory";
permission java.lang.RuntimePermission
"setIO";
permission java.lang.RuntimePermission
"modifyThread";
permission java.lang.RuntimePermission
"modifyThreadGroup";
permission java.lang.RuntimePermission
"getProtectionDomain";
permission java.lang.RuntimePermission
"setProtectionDomain";
permission java.lang.RuntimePermission
"readFileDescriptor";
permission java.lang.RuntimePermission
"writeFileDescriptor";
permission java.lang.RuntimePermission
"loadLibrary.<library name>";
permission java.lang.RuntimePermission
"accessClassInPackage.<package name>";
permission java.lang.RuntimePermission
"defineClassInPackage.<package name>";
permission java.lang.RuntimePermission
"accessDeclaredMembers.<class name>";
permission java.lang.RuntimePermission
"queuePrintJob";
};
Las convenciones de nombrado para la fuente sigue la convenci�n de nombres hereditarios, e incluye comodines. Un asterisco al final del nombre de propiedad, despu�s de un punto (.), o en solitario, significa un comodin. Por ejemplo, loadLibrary.* o * son v�lidos, pero *loadLibrary o a*b no lo son.
createClassLoader: Esta fuente concede permiso para crear un cargador de clases. Conceder este permiso podr�a permitir a una aplicaci�n maliciosa que ejemplarize su propio cargador de clases y carge clases peligrosas en el sistema. Una vez cargado, el cargador de clases podr�a situar esas clases bajo cualquier dominio proegido d�ndoles total control sobre ese dominio.
getClassLoader: Esta fuene concede permiso para recuperar el cargador de clases para la clase llamante. Conceder este permiso podr�a permitir que c�digo malicioso obtuviere el cargador de clases para una clase particular y cargar clases adicionales.
setContextClassLoader: Esta fuente concede permiso para seleccionar el contexto del cargador de clases usado por un thread. El c�digo del sistema y las extensione susan este contexto para buscar recursos que podr�an no existir en el cargador de clases del sistema. Conceder este permiso permite cambiar el contexto del cargador de clases usado para un thread particular, incluyendo los threads del sistema. Esto podr�a causar problemas si el contexto del cargador de clases tiene c�digo malicioso.
setSecurityManager: Esta fuente concede permiso para seleccionar o reemplazar el controlador de seguridad. El controlador de seguridad es una clase que permite a la aplicaciones implementar un polic�a de seguridad. Conceder este permiso podr�a permitir al c�digo mailicioso instalar un controlador menos restrictivo, y por lo tanto, evitar los chequeos a los que se forzado el controlador de seguridad original.
createSecurityManager: Esta fuente concede permiso para crear un nuevo controlador de seguridad. Conceder este permiso podr�a darle al c�digo malicioso acceso a m�todo protegidos qie podr�an revelar informaci�n sobre otras clases o la pila de ejecuci�n.
exitVM: Esta fuente concede permiso para parar la m�quina virtual Java. Conceder este permiso podr�a permitir que c�digo malicioso a montar un ataque de denegaci�n de servicio forzando autom�ticamente a que se pare la JVM.
setFactory: Esta fuente concede permiso para seleccioanr una f�brica de socket usada por las clases ServerSocket o Socket, o la f�brica de manejadores de streams usada por la clase URL. Conceder este permiso permite al c�digo seleccionar la implementaci�n actual para la factor�a de socket, server socket, stream handler, o Remote Method Invocation (RMI). Un atacante podr�a seleccionar una implementaci�n que manejara los streams de datos.
setIO: Esta fuente concede permiso para cambiar los valores de los streams System.out, System.in, System.err. Conceder este permiso podr�a pemritir a un atancante cambiar el System.in para robar la entrada del usuario, o seleccionar System.err a un stream de salida null, lo que podr�a ocultar cualquier error enviado a System.err.
modifyThread: Esta fuente concede permiso para modicar los threads mediante llamadas a los m�todos stop, suspend, resume, setPriority, y setName de la clase Thread. Conceder este permiso podr�a permitir a un atancante arrancar o suspender cualquier tread e el sistema.
stopThread: Esta fuente concede permiso para parar threads. Conceder este permisos permtie al c�digo que pare cualquier thread en el sistema proporcionando el c�digo que ya tiene permiso para acceder a ese thread, EL c�digo malicioso podr�a corromper el sistema eliminado threads existentes.
modifyThreadGroup: Esta fuente concede permiso para modificar threads mediante llamadas a los m�todos destroy, resume, setDaemon, setmaxPriority, stop, y suspend de la clase ThreadGroup. Conceder este permiso podr�a permitir al atancante que cree un grupo de threadas y seleccionar su prioridad de ejecuci�n.
getProtectionDomain Esta fuente concede permiso para recuperar el ejemplar ProtectionDomain para una clase. Conceder este permiso pemite al c�digo obtener informaci�n de polic�a para ese c�digo fuente. Mientras que la obtenci�n de la informaci�n de polic�a no compromete la seguridad del sistema, si que le ofrece informaci�n adicional al atacante como los nombres de ficheros locales, por ejemplo.
readFileDescriptor: Esta fuente concede permiso para leer descriptores de ficheros. Conceder este permiso permite al c�digo leer el fichero particular asociado con el descriptor de fichero, que es peligroso si el fichero contiene datos confidenciales.
writeFileDescriptor: Esta fuente concede permiso para escribir descriptores de ficheros. Conceder este permiso permite al c�digo escribir el fichero asociado con el descriptor de fichero, lo que es peligroso si el descriptor apunta a un fichero local.
loadLibrary.{library name}: Este fichero concede permiso para enlazar din�micamente la librer�a especificada. Conceder este permiso podr�a ser peligroso porque la arquitectura de seguridad no est� dise�ada y no se extiende para las clases nativas cargadas mediante el m�todo java.lang.System.loadLibrary.
accessClassInPackage.{package name} Esta fuente concede permiso para acceder al paquete especificado mediante el m�todo loadClass del cargador de la clase cuando el cargador de la clase llama al m�todo SecurityManager.checkPackageAcesss. Conceder este permiso le da al c�digo acceso a las clases de paquetes a los que normalmente no tiene acceso. El c�digo mailicioso podr�a usar estas clases para ayudarse en su intento de comprometer la seguridad del sistema.
defineClassInPackage.{package name}: Esta fuente concede permiso para definir las clases del paquete especificado mediante un m�todo defineClass del cargador de clases cuando el cargador llama al m�todo SecurityManager.checkPackageDefinition. Conceder este permiso permite al c�digo definir una clase en un paquete particular, lo que podr�a ser peligroso porque el c�digo malicioso con este permiso podr�a definir clases peligrosas en paquetes verdaderos como java.security o java.lang, por ejemplo.
accessDeclaredMembers: Esta fuente concede permiso para acceder a miembros declarados de una clase. Conceder este permiso permite al c�digo solicitar una clase por sus campos y m�todos p�blicos, protegidos, por defecto (paquete) y privados. Aunque el c�digo podr�a tener acceso a los nombres de los campos y m�todos privados y protegidos, no podr� acceder a sus datos y no podr� invocar ning�n m�todo privado. A pesar de esto, el c�digo malicioso podr�a usar esta informaci�n para mejorar su ataque. Adem�s, el c�digo malicios podr�a invocar m�todos p�blicos o acceder a campos p�blicos de la clase, lo que podr�a ser peligroso.
queuePrintJob: Esta fuente concede permiso para inicializar una petici�n de trabajo de impresi�n. Conceder este permiso podr�a permitir al c�digo qe imprima informaci�n sensible en una impresora o que gaste papel maliciosamente.
�SecurityPermission
java.security.SecurityPermission conceder permiso ha varios par�metros de configuraci�n de seguridad. Las fuentes posibles se listan por el nombre sin lista de acciones. Los permisos de seguridad actualmente se aplican a m�todo llamados sobre los siguientes objetos.
- java.security.Policy, que representa la polic�a de seguridad del sistema para aplicaciones.
- java.security.Security, que centraliza todas las propiedades de seguridad y m�todos comunes. Maneja proveedores.
- java.security.Provider, que repesenta una implementaci�n de cosas como algoritmos de seguridad (DSA, RSA, MD5, or SHA-1) y generaci�n de claves.
- java.security.Signer, que maneja claves privadas. Aunque, Signer est� obsoleto, los permisos relacionados est�n disponibles por razones de compatibilidad.
- java.security.Identity, que maneja objetos del mundo real como son personas, compa�ias, y organizaciones, cuyas identidades pueden ser autentificadas usando sus claves p�blicas.
grant {
permission java.security.SecurityPermission
"getPolicy";
permission java.security.SecurityPermission
"setPolicy";
permission java.security.SecurityPermission
"getProperty.os.name";
permission java.security.SecurityPermission
"setProperty.os.name";
permission java.security.SecurityPermission
"insertProvider.SUN";
permission java.security.SecurityPermission
"removeProvider.SUN";
permission java.security.SecurityPermission
"setSystemScope";
permission java.security.SecurityPermission
"setIdentityPublicKey";
permission java.security.SecurityPermission
"setIdentityInfo";
permission java.security.SecurityPermission
"addIdentityCertificate";
permission java.security.SecurityPermission
"removeIdentityCertificate";
permission java.security.SecurityPermission
"clearProviderProperties.SUN";
permission java.security.SecurityPermission
"putProviderProperty.<provider name>";
permission java.security.SecurityPermission
"removeProviderProperty.SUN";
permission java.security.SecurityPermission
"getSignerPrivateKey";
permission java.security.SecurityPermission
"setSignerKeyPair";
};
getPolicy: Esta fuente concede permiso para recuperar el polic�a de seguridad del sistema. Conceder estep permiso revela qu� permisis seber�an concederse a una aplicaci�n o un applet dados. Mientras que la revelaci�n del polic�a no compromete la seguridad del sistema, proporciona al c�digo malicios informaci�n adicional que podr�a usar para un mejor ataque.
setPolicy: Esta fuente concede permiso para seleccionar el polic�a de seguridad del sistema. Conceder este permiso podr�a permitir al c�digo malicioso que se conceda a s� mismo todos los permiso para montar un ataque al sistema.
getProperty.{key}: Esta fuente concede permiso para recuperar la propiedad de seguridad especificada mediante {key}. Dependiendo de la clave particular para el que se concede el acceso, el c�digo podr�a tener accedo a una lista de proveedores de seguridad y la localizaci�n de las polic�as de seguridad del sistema y de usuario. Mientras que la revelaci�n de esta informaci�n no compromete la seguridad del sistema, si proporciona informaci�n adicional que podr�a usar para un mejor ataque.
setProperty.{key}: Esta fuente concede permiso para seleccionar la propiedad de seguridad especificada por {key}. Esto podr�a incluir la selecci�n de un proveedor de seguridad o definir la localizaci�n del polic�a de seguridad del sistema. El c�digo malicioso podr�a usar un proveedor maligno que robar� informaci�n confidencial como las claves privadas. Adem�s, el c�digo malicioso podr�a seleccionar con los permisos seleccionar la localizaci�n del polic�a de seguridad del sistema que podr�a apuntar a un polic�a de seguridad que conceda al atancante todos los permisos necesarios que requiera para montar el ataque al sistema.
insertProvider.{provider name}: Esta fuente concede permiso para a�adir un nuevo proveedor de seguridad especificado por {provider name}. Conceder este permiso permite la introducci�n un proveedor posiblemente malicioso que podr�a desubrir cosas como las claves provadas que se les pasa. Esto es posible porque el objeto Security, que maneja todos los proveedores instaladore, no cheque realmente la integridad o la autenticidad de un proveedor antes de adjuntarlo.
removeProvider.{provider name}: Esta fuente concede permiso para eliminar un proveedor de seguridad especificado por {provider name}. Conceder este permiso podr�a cambiar el comportamietno o desactivar la ejecuci�nde partes del programa. Si un proveedor solicitado por el programa ha sido eliminado, la ejecuci�n podr�a fallar.
setSystemScope: Esta fuente concede permiso para seleccionar el �mbito de identidad del sistema. Conceder este permiso podr�a permitir al atacante configurar el �mbito de seguridad del sistema con certificados que no deber�an ser creidos. Esto podr�a conceder al c�digo firmado cuyos privilegios certificados podr�an ser denegados por el �mbito de identidad original.
setIdentityPublicKey: Esta fuente concede permiso para seleccionar la clave p�blica de un objeto Identity. Si la identidad se marca como trusted, permite al atacante introducir su propia clave p�blica que no es verdadera mediante el �mbito de identidad del sistema. Esto podr�a conceder al c�digo firmado privilegios de clave p�blica que de otra forma ser�an denegados.
SetIdentityInfo: Esta fuente concede permiso para seleccionar un string de informaci�n general para un objeto Identity. Conceder este permiso permite al atancate seleccionar una descripci�n general para una identidad. Haci�ndolo podr�amos embaucar a las aplicaciones a usar una identidad diferente que evite a las aplicacioens encontrar una identidas particular.
addIdentityCertificate: Esta fuente concede permiso para a�adir un certificado para un objeto Identity. Conceder este permiso permite a los atacantes seleccionar un certificado para una clave p�blica de identidad haciendo que la clave p�blica sea verdadera a una audiencia mayor de la original.
removeIdentityCertificate: Esta fuente concede permiso para eliminar un certificado de un objeto Identity. Conceder este permiso permite al atacante eliminar un certificado para la clave p�blica de una identidad. Esto podr�a ser peligroso porque una clave p�blica podr�a ser considerada como menos verdadera de lo que podr�a ser.
printIdentity: Esta fuente concede permiso para imprimir el nombre de un prinicpal el �mbito en que se usa el principal, y cuando el principal es considerado como verdadero en este �mbito. El �mbito impreso podr�a ser un nombre de fichero, en cuyo caso podr�a robar informaci�n del sistema local. Por ejemplo, aqu� hay un ejemplo de impresi�n de un nombre de identidad carol, que est� marcado como verdadero en la base de datos de identidad del usario.
carol[/home/luehe/identitydb.obj][not trusted].
clearProviderProperties.{provider name} Esta fuente concede permiso para borrar un objeto Provider para que no contenga m�s propiedades usadas para buscar servicios implementados por el proveedor. Conceder este permiso desactiva los servicios de b�squeda implementados por el proveedor. Esto podr�a cambiar el comportamiento o desactivar la ejecuci�nde otras partes del programa que normalmente utiliar� el Provider, como se describe bajo el permiso removeProvider.{provider name} de arriba.
putProviderProperty.{provider name}: Esta fuente concede permiso para seleccionar propiedades del proveedor seleccionado. Cada propiedad del proveedor especifica el nombre y la localizaci�n de un servicio particular implementado por el proveedor. Conceder este permiso permite al c�digo reemplazar la especificaci�n de servicio con otro con una diferente implementaci�n y podr�a ser peligroso si la nueva implementaci�n tiene c�digo malicioso.
removeProviderProperty.{provider name}: Esta fuente concede permiso para eliminar propiedades del proveedor especificado. Conceder este permiso desactiva la b�squeda de servicios implementada por el proveedor haci�ndola inaccesible. Conceder este permiso a c�digo malicioso podr�a permitirle cambiar el comportamiento o desactivar la ejecuci�n de otras partes del programa que normalmente podr�an utilizar el objeto Provider, como se describe el permiso bajo removeProvider.{provider name}.
getSignerPrivateKey: Esta fuente concede permiso para recuperar la clave privada de un objeto Signer. Las calves privadas deber�an ser siempre secretas. Conceder este permiso podr�a permtir a c�digo malicioso utilizar la clave privada para firmar ficheros y reclamar que la firma venga del objeto Signer.
setSignerKeyPair: Esta fuente concede permiso para seleccionar la pareja de claves p�blica y privada para un objeto Signer. Conceder este pemriso podr�a permitir al atacante reemplazar la pareja de claves con una posible y peque�a pareja de claves. Esto tambi�n podr�a permitir a un atacante escuchar una comunicaci�n encriptada entre la fuente y sus pares. Los pares de la fuente podr�an envolver la sesi�n de encriptaci�n bajo la clave p�blica new, que podr�a el atacante (que posee la clave privada correspondiente) para desempaquetar la clave de sesi�n y desencriptar la comunicaci�n.
�SerializablePermission
java.io.SerializablePermission concede acceso a operaciones de serializaci�n. La fuentes posibles se listan por el nombre y no hay lista de acciones.
grant {
permission java.io.SerializablePermission
"enableSubclassImplementation";
permission java.io.SerializablePermission
"enableSubstitution";
};
enableSubclassImplementation: Esta fuente concede permiso para implementar una subclase de ObjectOutputStream o ObjectInputStream para sobreescribir la serializaci�n o deserializaci�n por defecto de objetos. Conceder este permiso podr�a permitir al c�digo usar esto para serializar o deserializar clases de una forma maliciosa. Por ejemplo, durante la serializaci�n, el c�digo malicioso podr�a almacenar campos privados confidenciales de una forma f�cilmente accesible para los atacantes; o durante la deserializaci�n el c�digo malicioso podr�a deserializar una clase con todos sus campos privados puestos a cero.
enableSubstitution: Esta fuente concede permiso para sustituir un objeto por otro durante la serializaci�n deserializaci�n. Conceder este permiso podr�a permitir a c�digo malicioso reemplazar el objeto real con otro que tenga datos incorrectos o malignos.
�SocketPermission
El permiso java.net.SocketPermission concede acceso a una red mediante sockets. La fuente es un nombre de host y la direcci�n del puerto, y la acci�nes una lista que especifica las formas de conexi�n con ese host. Las coneciones posibles son accept, connect, listen, y resolve.
Esta entrada de fichero de polic�a permite que una conexi�n acepte conexiones al puerto 7777 en el host puffin.eng.sun.com.
grant {
permission java.net.SocketPermission
"puffin.eng.sun.com:7777",
"connect, accept";
};
Esta entrada de fichero de policia permite a la conexi�n, aceptar conexiones para escuchar cualquier puerto entre el 1024 y el 65535 en el host local.
grant {
permission java.net.SocketPermission
"localhost:1024-",
"accept, connect, listen";
};
El host se expresa con la siguiente sintaxis como un nombre DNS, una direcci�n IP num�rica, o como localhost (para la m�quina local). El comodin asterisco (*) se puede incluir una vez en una especificaci�n de nombre DNS. Si se incluye dene est�r en la posici�n m�s a la izquierda, como en *.sun.com.
host = (hostname | IPaddress)[:portrange] portrange = portnumber | -portnumber | portnumber-[portnumber]
El puerto o rango de puertos es opcional. Una especificaci�n de puerto de la forma N-, donde N es un n�mero de puerto, significa todos los puertos numerados N y superiores, mientras que una especificaci�n de la forma -N indica todos los puertos numerados N e inferiores.
La acci�n listen es s�lo importante cuando se usa con el localhost, y resolve (resuelve la direcci�n del servicio host/ip) cuando cualquiera de las otras opcioones est� presente.
Conceder permiso al c�digo para aceptar o crear conexiones sobre host remotos podr�a ser peligroso porque c�digo malevolente podr�a m�s f�cilmente transferir y compartir datos confidenciales.
Nota: En plataformas Unix, s�lo el ra�z tiene permiso para acceder a los puertos inferiores a 1024.