¿Escribir malware en java?

6

Para mí, parecía que el malware nunca podría escribirse en java. Aquellos que me enseñaron Java dijeron que era "seguro" y no permitieron el "acceso de bajo nivel" como c, c ++.

Pero, descubrí que se puede hacer - enlace

notas sobre lo mismo - enlace

Aquí está mi pregunta - ¿Podemos usar java para realizar TODAS las "cosas malas / tareas que necesita el malware" que c, c ++ pueden hacer?
Si ese es el caso, ¿podemos decir que Java también es bueno para la escritura de malware? Después de todo, la mayoría de los criminales quieren que su malware sea multiplataforma.

    
pregunta FirstName LastName 08.01.2013 - 17:27
fuente

4 respuestas

8

El código Java puede invocar código nativo (por ejemplo, código escrito en C o lo que sea, y compilado en una secuencia de códigos de operación de la CPU) a través de un estándar interfaz . Java puede realmente escribir un archivo DLL en algún lugar (como un grupo de bytes) y cargarlo, así que todo lo que el código nativo puede hacer, también lo puede hacer Java.

Java también cuenta con una rica biblioteca estándar que le permite leer y escribir archivos de manera arbitraria.

Las partes difíciles para el malware basado en Java son:

  1. Se necesita una máquina virtual Java. Java no se instala de forma predeterminada en muchos sistemas operativos modernos.
  2. La VM de Java tiende a los applets de Java de sandbox. Para ejecutar código nativo o acceder a archivos arbitrarios, un applet de Java debe solicitar permiso, lo que implica firmas digitales y certificados que pueden rastrearse hasta el autor. O se debe explotar un error de escape específico de la caja de arena; estos errores se descubren con regularidad, pero también están parchados con una rapidez encomiable.
  3. Las implementaciones de Java VM existentes son grandes. Están optimizados para aplicaciones grandes que, de todos modos, utilizarán una gran cantidad de RAM, por lo que cualquier código Java tiene una gran huella de memoria mínima. El malware suele preferir la discreción.
  4. Las implementaciones de Java VM vienen con extensas herramientas de depuración que permiten conectarse a una VM en ejecución e inspeccionar lo que sucede en ella. Esto puede ayudar a limpiar una infestación de malware basada en Java.

Estas son las razones por las que Java no se verá como el mejor lenguaje para los creadores de malware. Además, incluso si Java es nominalmente portátil, el malware multiplataforma es un objetivo difícil de alcanzar, porque el malware tiende a hacer las cosas a un nivel bastante bajo, es decir, un nivel que es muy específico del sistema operativo. Modificar el archivo /etc/passwd es una cosa muy mala de hacer en un sistema similar a Unix; pero no tendría ningún impacto en Windows, que no tiene un archivo /etc/passwd . Por lo tanto, hay pocos incentivos para que los autores de malware utilicen Java.

(Todo esto se aplicaría casi sin cambios a una pregunta sobre cómo escribir malware en C # / .NET + SilverLight).

    
respondido por el Thomas Pornin 08.01.2013 - 18:55
fuente
6

El malware viene en muchas formas y tamaños, esta pregunta es difícil de responder. Escribir malware en Java es tan fácil como;

(new File("/path/to/important/file")).delete();

¿Puedo escribir una aplicación java que robe tus datos? Fácilmente. ¿Puedo escribir un rootkit de Linux en Java? Es casi seguro que no, pero eso no me impide hacer todas las cosas que puedo hacer con los permisos con los que se ejecuta la JVM.

Entonces, en ese sentido, sí, puede escribir malware en Java, pero sería algo más limitado que si estuviera escribiendo en un lenguaje de sistemas como C; un keylogger es mucho más difícil de escribir en Java que en C, y ocultarlo bien es probablemente imposible.

    
respondido por el lynks 08.01.2013 - 18:21
fuente
4

Quizás no entiendas lo que significaba cuando escuchaste que Java era más seguro. ¿Significaron que su aplicación es más segura o que no se puede escribir malware en este idioma?

En el pasado, se descubrieron varias vulnerabilidades en la api de java (y, desde entonces, parcheadas) que permitían a un programa java ejecutar código malicioso sin el consentimiento del usuario. Esto ocurre a menudo a través de applets ya que muchos navegadores habilitan java.

Consulte la base de datos CVE donde puede encontrar algunas vulnerabilidades de Java anteriores.

Sin embargo, tal vez esa gente quiso decir que sus aplicaciones pueden escribirse para estar más seguros de los piratas informáticos. En este sentido es parcialmente cierto. Por ejemplo, las aplicaciones java (normalmente) no pueden ser explotadas a través de ataques de desbordamiento de búfer ya que la pila es administrada por el jvm. Creo que esto es lo que se quería decir cuando te dijeron que Java es más seguro.

Aquí hay más información sobre por qué la programación en Java podría estar seguro

    
respondido por el KDEx 08.01.2013 - 17:47
fuente
4

Una pieza de malware de Java probablemente puede realizar la mayoría, si no todas, de la funcionalidad que una pieza de malware de C puede realizar.

Sin embargo, hay algunas características del lenguaje Java que probablemente hacen que los autores de malware se inclinen hacia los gustos de C.

Java Virtual Machine Required

Un programa Java no se puede ejecutar en una computadora a menos que una Java Virtual Machine (JVM) esté instalada en esa computadora. Escribir su malware en Java lo limita automáticamente a cualquier objetivo que no ejecute una JVM.

Esto es diferente de C u otros idiomas que pueden compilarse en un ejecutable nativo que se ejecutará en el sistema de destino sin ningún software adicional.

Sin embargo, esto no descarta por completo a Java como un lenguaje de programación elegido para los que escriben malware, especialmente si planeaban propagarse a través de uno de los muchos Vulnerabilidades del entorno de ejecución de Java

Limitaciones de la máquina virtual Java

Este requisito de JVM también puede hacer que sea mucho más difícil que una aplicación Java maliciosa se oculte. Se basa en la JVM instalada del usuario; todo lo que deben hacer es eliminar eso y detendrán el malware en sus pistas.

La compatibilidad multiplataforma no es tan simple

A estas alturas, puedes estar pensando "Sí, pero ¿no vale la pena hacerlo para que tu malware funcione mágicamente en todas las plataformas?"

Si bien Java es compatible con varias plataformas (siempre que haya una JVM disponible), esto no significa necesariamente lo que crees que significa.

Por ejemplo, una característica común del malware es la capacidad para que se inicie cuando se inicie el sistema operativo. Java no proporciona un método multiplataforma startWhenComputerStarts . Por lo tanto, esto aún debería implementarse por separado para cada plataforma.

Una gran cantidad de malware utilizará errores o funciones específicos de la plataforma para ocultarse, lanzarse en el inicio y en los datos de usuario de snarf. ¡Así que el autor todavía tendría que hacer este trabajo para cada plataforma!

Además, no olvidemos que el código C se puede compilar en múltiples plataformas diferentes. La ventaja de Java sobre C es que puede compilarse una vez y ejecutarse en cualquier lugar, pero el mismo código C aún puede ejecutarse en diferentes plataformas, solo con 1 paso adicional.

Si lo piensas bien, considerando que el malware a menudo es recogido a través de firmas, tendría más sentido para el autor escribir piezas individuales de malware para cada plataforma. Hacer que la detección sea menos probable.

    
respondido por el Andy Smith 08.01.2013 - 18:26
fuente

Lea otras preguntas en las etiquetas