/
Ransomware Containment

Desmitificando las técnicas de ransomware usando ensamblajes .Net: 5 técnicas principales

Los ataques de ransomware prosperan al evadir la detección y luego cifrar los datos en un sistema. En el análisis luego de un ataque de ransomware, a menudo leemos sobre cómo el ataque empleó una combinación de diferentes tipos de archivos junto con una variedad de técnicas.  

Entonces, ¿qué significa todo esto realmente? En este serial, lo desglosaremos todo empleando el marco de software .Net para mostrar cómo se hacen posibles estas capacidades de ransomware.

En mi serial anterior de tres partes sobre cargas útiles de malware y balizas, la atención se centró en el marco de pruebas de penetración de Metasploit . Usamos su carga útil de malware meterpreter lista para usar para mostrar varias técnicas de atacantes. El primer artículo examinó cómo se inician las comunicaciones maliciosas, la infraestructura del atacante y el análisis forense de un ataque. El segundo artículo analizó las categorías y los tipos de cargas útiles junto con algunas técnicas de manipulación en memoria. La parte final de ese serial se centró en las técnicas de evasión y mitigación.

En este serial, crearemos nuestros propios archivos de carga útil individuales (también conocidos como ensamblados) aprovechando el marco de software .Net pero con un enfoque en el ransomware. Comenzaremos desglosando las capacidades de ransomware y malware en técnicas de ejemplo individuales para comprender cómo funcionan por sí solas. Algunas de estas técnicas individuales son, en última instancia, lo que se combina en una sola carga útil de ransomware malicioso con un efecto a menudo devastador.

Técnica 1: Descargadores, cuentagotas y cargadores

Comenzamos observando cómo el ransomware o el malware pueden conectarse desde una red infectada. Esta es la capacidad de conectarse a un sistema remoto, descargar cargas útiles adicionales, soltarlo en el sistema comprometido y ejecutarlo (es decir, cargarlo en la memoria).

A continuación se muestra un ejemplo de una aplicación de línea de comandos .Net (consola) que:

  • Actúa como un descargador descargando otra aplicación ejecutable remota (putty.exe) de Internet
  • Coloca la aplicación descargada en una carpeta temporal en el disco de la computadora
  • Cambia el nombre de la aplicación a putty_new.exe
  • Ejecuta automáticamente la aplicación descargada en la computadora para que se cargue en la memoria

Cuando se emplea el staging de la carga útil, lo que significa tener varios archivos maliciosos haciendo cosas diferentes, el Stager (pequeña carga útil inicial) puede convertir tanto en el descargador como en el dropper del Stage (carga útil principal más grande). También podría ser el cargador del escenario. Las técnicas empleadas dependerán de la evaluación del riesgo de detección por parte del actor de amenazas, también conocidas como consideraciones de seguridad operativa.

Un descargador es responsable de extraer una carga útil de una fuente remota, como un servidor sitio web o un servidor FTP. Esto suele ser a través de Internet. Por lo tanto, un descargador requerirá que se intente alguna conexión de red para llegar a la fuente remota.

Un cuentagotas, por otro lado, es el principal responsable de entregar o dejar caer una carga útil en un sistema víctima. Por lo tanto, un descargador también puede ser un dropper, pero un dropper puede no ser necesariamente un downloader porque un dropper ya puede tener la carga maliciosa incrustada en él como archivos ejecutables portátiles (PE) o DLL. Estos tipos de archivos se discutirán más adelante. Los droppers se usan comúnmente en ataques; ejemplos populares son los ataques a la cadena de suministro de Solarwinds y Kaseya. Ambos involucraron el uso de software de agente de proveedor comprometido empleado como droppers para cargas útiles maliciosas. Este último es empleado por el grupo de ransomware REvil .

Un cargador es responsable de configurar el sistema de la víctima para ejecutar otra carga maliciosa, especialmente en el caso de cargas útiles de solo memoria. Aquí, la configuración significa garantizar la asignación de espacio de memoria necesaria, a menudo mediante la inserción de una DLL en el espacio de memoria de otro proceso y luego la configuración de las licencias de memoria correctos. A continuación, el cargador inicia la carga útil o ejecuta los subprocesos necesarios.

Técnica 2: Carga EXE de un archivo DLL

Las cargas útiles de ransomware pueden tener la forma de un archivo EXE o un archivo DLL. A continuación, veremos cómo un archivo ejecutable de Windows, también conocido como archivo EXE, puede cargar lo que se conoce como un archivo de biblioteca de vínculos dinámicos (DLL) para aprovechar el código que contiene.

EXE y DLL son dos tipos de ensamblados .Net que contienen instrucciones de código de programación de computadoras e información asociada (metadatos). Estas instrucciones y metadatos se ensamblan juntos en un único archivo resultante: ensamblado EXE o DLL .Net . Estos dos tipos de archivos permiten ejecutar código de programación de computadora (EXE) en un sistema Windows o almacenarlo como un archivo de biblioteca (DLL) que luego puede ser "prestado" y leído por otros archivos. En el caso de una DLL, este proceso es muy parecido a cómo varias personas pueden tomar prestado el mismo libro de una biblioteca en diferentes momentos para leer su contenido. En la segunda parte de este serial, exploraremos estos dos ensamblajes con más detalle en relación con .Net. marco de software.

Por ahora, aquí hay un ejemplo muy simple para demostrar el uso de estos dos tipos de ensamblados .Net : un ejecutable (EXE) que ejecuta su propio código y luego carga y lee código externo de un archivo DLL. A continuación, el ejecutable pasa alguna entrada al código DLL cargado. Por último, el archivo DLL usa la entrada recibida del archivo EXE para mostrar un mensaje al usuario que ejecuta la aplicación. A continuación se muestra el código en acción:

Esta sencilla aplicación también muestra la relación entre EXE y un archivo DLL .Net . Este tipo de relación es empleada legítimamente por muchas aplicaciones y sistemas operativos (bibliotecas compartidas), incluido el propio sistema operativo Windows. Windows empaqueta una gran cantidad de su propio código como DLL para que pueda ser compartido por diferentes aplicaciones.

En la imagen siguiente se muestra el código de programación para EXE y DLL en el ejemplo anterior. El código se escribe con el lenguaje de programación C#, que es uno de los lenguajes compatibles con .Net. En la imagen, las referencias de código DLL se resaltan para enfatizar:

Los archivos DLL son un medio eficaz para escribir un fragmento de código una vez de una manera que luego puede ser empleado muchas veces por diferentes ejecutables como una biblioteca compartida o dinámica. Como resultado de esto, también es muy empleado por muchas familias de malware y ransomware. Técnicas como la carga lateral de DLL y el secuestro de DLL son técnicas maliciosas comunes que aprovechan la relación entre estos ensamblados .Net .

Técnica 3: Reconocimiento y lanzamiento de binarios de vivir de la tierra

Continuamos con una combinación de técnicas importantes: la capacidad de recopilar información útil sobre un sistema objetivo (Discovery) y al mismo tiempo lanzar otros binarios o ejecutables en ese sistema (Spawning). En la imagen aquí, nuestro ejecutable personalizado inicial inicia un ejecutable nativo o binario en el sistema Windows de destino, mostrando un ataque living off the land (LotL).

En el ejemplo se muestra nuestra aplicación inicial de C# en ejecución y, a continuación, se procede a recopilar información útil sobre el sistema de destino, que se muestra en el texto verde de la salida. Observe la información de la unidad que se recopila. El ransomware puede aprovechar esta información para apuntar a los archivos en estas unidades y luego filtrar antes del cifrado para una demanda de rescate generalmente considerable.

La aplicación continúa iniciando un ejecutable del sistema externo: el símbolo del sistema de Windows (cmd.exe) ejecutable. A continuación, la aplicación personalizada pasa algunos comandos de Windows al proceso de cmd.exe de Windows para mostrar (que se muestra en texto rojo), en este caso la información de la versión del sistema Windows. Para obtener los beneficios de este artículo, la aplicación personalizada de C# muestra el resultado de las acciones que realiza, así como información sobre el proceso iniciado. Esta capacidad de iniciar otras aplicaciones externas también es útil para iniciar procesos de la víctima para eventualmente inyectar código malicioso.

Técnica 4: Codificación de datos

Otra técnica útil es la codificación de datos. Este es el proceso de usar un algoritmo para representar datos en una forma diferente. Por ejemplo, un tipo de codificación, base64, se usa legítimamente en algunas solicitudes sitio web para pasar datos de un lado a otro, como la autorización HTTP y la autenticación básica en las llamadas API. Sin embargo, el mismo ejemplo de codificación base64 también puede ayudar a ocultar cierto texto y comandos empleados por un programa malicioso o una carga útil. Se puede usar para ofuscar partes del código, como URL de devolución de llamada o un archivo. Esta técnica se muestra a continuación en nuestro programa independiente de C#.

En este ejemplo de aplicación específica, el código toma un texto que en este caso es la URL "https://listener.malware.bad", lo convierte en una matriz de bytes de computadora y, a continuación, ejecuta el algoritmo de codificación base64 en los bytes para convertirlo en el texto ASCII alfanumérico de "aHR0cHM6Ly9saXN0ZW5lci5tYWx3YXJlLmJhZA==" que se muestra en la sección del codificador de la pantalla de la aplicación anterior. Este proceso se puede revertir mediante programación para recuperar el texto original como se muestra en la sección del decodificador. Al hacerlo, la URL se oculta a simple vista y no se puede determinar de inmediato lo que es: una URL maliciosa.

Técnica 5: Cifrado

Finalmente, analizamos el cifrado. Cifrar archivos en un sistema comprometido es de lo que el ransomware se convirtió en sinónimo. Esta es nuevamente una capacidad legítima para proteger los datos en reposo que, como la mayoría de las otras técnicas, se empleó con fines maliciosos en el ransomware.

En el siguiente ejemplo, tenemos una aplicación de cifrado de C#. Primero hace una copia del archivo destinado al cifrado y luego cifra la copia, dejando el original intacto.

Aquí, el contenido original del archivo original, Data1.txt, se copia en otro archivo, Data1-Encrypted.txt, y luego se encripta este nuevo archivo.

El cifrado es una de las principales técnicas empleadas por el ransomware y constituye la base para pedir un rescate a los sistemas comprometidos. También puede ser útil para ocultar cargas útiles de malware o cargadores en tránsito o en reposo para evadir la detección.

Lea la parte 2 del serial el 22 de mayo

El próximo artículo explorará el marco de software .Net de Microsoft y el lenguaje de programación C # asociado como referencia para algunas de las tácticas y técnicas que se muestran aquí y cómo se facilitan en última instancia.

Obtenga más información sobre cómo Illumio Zero Trust Segmentation puede ayudarlo a contener las infracciones de ransomware.

Temas relacionados

No items found.

Artículos relacionados

Desmitificando las técnicas de ransomware mediante ensamblajes .Net: un ataque de varias etapas
Ransomware Containment

Desmitificando las técnicas de ransomware mediante ensamblajes .Net: un ataque de varias etapas

Aprenda los fundamentos de un ataque de carga útil de varias etapas empleando un conjunto de cargas útiles por etapas.

Hive Ransomware: Cómo limitar su picadura con la segmentación de Illumio Zero Trust
Ransomware Containment

Hive Ransomware: Cómo limitar su picadura con la segmentación de Illumio Zero Trust

Obtenga más información sobre el ransomware Hive y cómo Illumio puede ayudar a mitigar el riesgo que representa para su organización.

Reducción de ransomware 101: Movimiento lateral entre endpoints
Ransomware Containment

Reducción de ransomware 101: Movimiento lateral entre endpoints

Obtenga más información sobre cómo se propaga el ransomware a través del movimiento lateral entre los endpoints y cómo la microsegmentación de Zero Trust puede contener el radio de explosión.

Cargas útiles de malware y balizas: tipos de cargas útiles maliciosas
Cyber Resilience

Cargas útiles de malware y balizas: tipos de cargas útiles maliciosas

Comprender los distintos tipos de cargas útiles y revisar un ejemplo de código malicioso que pueden emplear.

Cargas útiles de malware y balizas: cómo comienzan las comunicaciones maliciosas
Cyber Resilience

Cargas útiles de malware y balizas: cómo comienzan las comunicaciones maliciosas

Las balizas de malware son la forma en que un atacante puede ejecutar malware a través de un script. Reconocerlos ayuda a desarrollar estrategias de detección y contención.

Cargas útiles de malware y balizas: técnicas para mitigar el impacto
Cyber Resilience

Cargas útiles de malware y balizas: técnicas para mitigar el impacto

En la parte final de este serial, nos centramos en algunas de las técnicas de ofuscación empleadas para disfrazar las cargas útiles de malware y examinamos las técnicas de mitigación que pueden emplear las organizaciones.

Asumir incumplimiento.
Minimizar el impacto.
Aumentar la resiliencia.

¿Listo para obtener más información sobre la segmentación de confianza cero?