Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + tecnología especializada

Establecer Política de Seguridad Por GUI

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en Java al establecer políticas de seguridad a través de la interfaz gráfica manteniendo el principio de mínimo privilegio, permitiendo disminuir las posibles brechas de seguridad.

Necesidad

Establecer políticas de seguridad mediante interfaz gráfica en Java para mantener el principio del mínimo privilegio.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se está desarrollando una aplicación en Java.

  2. Se desea establecer una política de seguridad para mantener el principio del mínimo privilegio.

Solución

La plataforma Java fue diseñada con un fuerte énfasis en seguridad. En esencia, el lenguaje Java en sí es de tipo seguro y provee un recolector de basura automático, mejorando la robustez del código de la aplicación. Una carga de clases segura y un mecanismo de verificación aseguran que solo código legítimo se ejecute [1].

  1. De acuerdo al principio del mínimo privilegio, el código no puede tener más privilegios que aquellos que se tiene para ejecutar una determinada tarea. Debe limitarse el uso de secciones de código que requieran elevar privilegios y establecer políticas de seguridad sobre las clases de la aplicación [2].

  2. La arquitectura de Java permite establecer políticas de seguridad sobre funcionalidades potencialmente peligrosas, existen permisos sobre: audio, autenticación, entorno gráfico, delegación, manejo de archivos, registro de eventos, administración de red, credenciales, sockets, SSL, entre otros.

  3. En el siguiente diagrama se muestra la arquitectura de Java [3].

    arquitectura java
  4. Las clases pasan por un primer control donde se verifica que el bytecode esté bien formado. Luego, el cargador de clase busca y carga dinámicamente la clase si ésta existe, el programador puede usar el paquete de seguridad de Java para establecer permisos en tiempo de ejecución [4]. Finalmente, y antes de que se haga la llamada al sistema operativo, el administrador de seguridad y el controlador de acceso, verifican que la aplicación tenga los privilegios necesarios para ejecutar determinadas acciones.

  5. Este último filtro es definido por la política de seguridad que establece el navegador, la máquina virtual o el administrador del sistema [5].

  6. A continuación un pequeño ejemplo para evidenciar la política de seguridad.

  7. Empezamos importando las clases que pertenecen a la biblioteca io y definiendo el nombre de la clase principal.

    Politica.java
    1
    2
    3
    import java.io.*;
    
    public class Politica {
    
  8. Desarrollamos el método principal, el cual llama al método readFile, pasándole como ruta un archivo sensible que debería ser de solo lectura.

    1
    2
    3
    public static void main(String[] args) {
      readFile("D:\\fluid\\sensible.txt");
    }
    
  9. Construimos el método readFile e inicializamos los buffer de lectura y escritura.

    1
    2
    3
    public static void readFile(String path) {
      BufferedReader reader = null;
      BufferedWriter writer = null;
    
  10. Agregamos un bloque try-catch, para capturar las excepciones necesarias. Creamos el objeto file con la ruta del archivo sensible.

    1
    2
    try {
      File file = new File(path);
    
  11. Leemos el archivo y mostramos su contenido. Finalmente, y para la demostración, agregamos una línea con un nombre de usuario y contraseña.

    1
    2
    3
    4
    5
    writer.write("harold:admin\n");
    String text;
    while ((text = reader.readLine()) != null) {
       System.out.println(text);
    }
    
  12. Capturamos las excepciones necesarias, cerramos los recursos y terminamos el desarrollo de la aplicación:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
       }
       catch (FileNotFoundException e) {
         System.err.println("File not found");
       }
       catch (IOException e) {
         System.err.println("I/O Exception");
       }
       catch (SecurityException e) {
         System.err.println("Write Denied");
       }
       finally {
         try {
           if (reader != null) {
             reader.close();
           }
           if (writer != null) {
             writer.close();
           }
         }
       catch (IOException e) {
           System.err.println("I/O Exception");
         }
       }
      }
    }
    
  13. El contenido del archivo sensible es el mostrado a continuación.

    1
    2
    Este documento contiene informacion sensible
    dcorrea:123456
    
  14. Al ejecutar por consola la aplicación, nos muestra el contenido y finaliza normalmente.

    1
    2
    3
    4
    5
    java Politica
    
    Este documento contiene informacion sensible
    dcorrea:123456
    harold:admin
    
  15. El problema radica en que se ha escrito contenido en el archivo sensible harold:admin, y esto puede generar problemas de seguridad si la entrada de datos no es correctamente validada.

  16. Para eliminar el problema se establecerá la política de seguridad de solo lectura para el archivo sensible, para esto se usará la herramienta policytool que viene con el JDK ^[6].

  17. En el pantallazo inicial vamos a la opción archivo, y creamos un archivo que contendrá las políticas de seguridad.

    pantalla inicial
  18. El siguiente paso es agregar una entrada, para ello, damos clic en Agregar entrada de norma. La base de códigos es la ruta de las clases sobre las cuales aplicaremos la política de seguridad.

    agregar entrada
  19. Aplicaremos una política para el manejo de archivos FilePermission. El nombre de destino es la ruta del archivo o los archivos sobre los cuales la política tiene efecto, y las acciones read, write, delete, execute.

    permisos
  20. La nueva política de seguridad se ha creado con el siguiente contenido:

    1
    2
    3
    4
    /* AUTOMATICALLY GENERATED ON Wed Nov 30 10:39:30 COT 2011*/
    /* DO NOT EDIT */
    grant codeBase "file:/D:/Fluid-Attacks/" {
      permission java.io.FilePermission "D:\\Fluid-Attacks\\sensible.txt", "read";};
    
  21. Para ejecutar la aplicación con la política, se deben especificar los parámetros java.security.manager y java.security.policy.

    1
    java -Djava.security.manager -Djava.security.policy==politica.seguridad Politica
    
  22. El resultado tal como se esperaba es una violación de seguridad, se captura la excepción y se muestra el error:

    1
    Write Denied
    

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

Politica.java Archivo para mostrar como funciona las restricciones de seguridad.




Haz un comentario

Estado de los servicios - Términos de Uso