Opción para usar la cadena de bloques de criptomonedas como medio de transmisión de comandos para elementos de botnet

Me gustaría desarrollar el pensamiento mencionado en el artículo "Siga el dinero: cómo el grupo RTM comenzó a ocultar las direcciones de los servidores de C&C en una billetera criptográfica " , que los incluyó en el número de satoshi enumerados para dos transacciones en una dirección criptográfica específica. El malware, habiendo solicitado la transferencia de datos a dicha dirección desde el navegador blockchain, asignó la IP del nuevo servidor de C&C mediante simples manipulaciones.

Omitiremos y condenaremos las intenciones criminales de este grupo y nos detendremos precisamente en los principios y el proceso de transmisión de comandos a elementos de la botnet (EBS).

En mi humilde opinión, este método tiene ciertos inconvenientes: el ancho de banda de este método (en términos de la cantidad de información por transferencia) es pequeño, y cualquiera que conozca dicha dirección de cifrado puede enviarle una cierta cantidad y sincronizar la botnet, obligándola a contactar a un "confiable »Para ellos al servidor.

Sin embargo, los comandos EBS ocultos pueden enviarse no a una dirección separada, sino a una dirección separada A, a priori confiable para ellos. En este caso, nadie (excepto una persona que tenga una clave privada) puede realizar dicha operación.

El conjunto de comandos se puede ampliar enviando cantidades a las direcciones generadas por el administrador de la botnet, en cuyo nombre se codifica / codifica la información de control necesaria.

En este caso, un comando de hasta 20 bytes (letras, números, caracteres especiales) se convierte (texto a hexadecimal) a hexadecimal y luego a una dirección criptográfica válida B. En este caso, el comando en sí puede codificarse / cifrarse.

Déjame darte un ejemplo de fantasía. Para mayor claridad (PoC), utilicé una serie de servicios en línea disponibles.

1. Desde una dirección confiable A, una cierta cantidad se transfiere a la dirección válida generada B.

Ejemplo de generación de dirección B: es necesario enviar información sobre el servidor 82.192.95.175 al EBS, desde el cual es posible recibir el comando de actualización del servidor del módulo # 68, el tiempo de activación / desactivación del módulo, así como la clave de cifrado (o la dirección del navegador adicional de blockchain, el comando de ejecución a más tardar en la fecha de transmisión, una nueva dirección de cifrado confiable, clave, etc., etc. (la clave se puede coser en el agente de usuario y transferir solo si es necesario cambiarla, ahorrando así 7 bytes del campo de comando)).

Es posible convertir IP de cien maneras, por ejemplo 082.192.095.175> 08.21.92.09.51.75 + 32 a cada número (evite caracteres ASCII ilegibles).

Total 40.53.124.41.83.107 = (5 |) Sk representa en ASCII (6 bytes);
Equipo 68 = D;

El tiempo de activación del módulo es 601234 = en tiempo Unix , donde el primer dígito 1 es redundante, no lo transmitiremos (es por defecto, ya que un cambio a 2 solo será en 2033), los tres dígitos inferiores también son por defecto 000, porque . realmente no importa, es + - 15 minutos.

Tiempo de activación - 1601234000 = 27 de septiembre de 2019 13.13.20 GMT

A continuación, cuatro dígitos, hasta qué hora debe ejecutarse el módulo: 0365 (días) a partir del tiempo de activación.

Eso es 6012340365 = 01665D088Dh = AAHpKn en ASCII. Supongamos también que la clave anterior era Key0001.

Total (5 |) SkDAAHpKnKey0002 usando RC4 y Key0001 da en hexadecimal: DD F6 B8 16 2A B6 71 97 0F 9F A2 68 79 11 8C B6 31 DA FE 43.

Convertimos esta dirección hash a una dirección btc heredada (es posible a las direcciones de otras criptomonedas dash, ltc, dogecoin, etc., no importa, los algoritmos para generar direcciones criptográficas están abiertos, la transferencia será más barata y más rápida).

Obtenemos la dirección B (heredada): 1MEdtjmGtqaGPaoYAQn43dkZxiSrSD8gmD.
(Le recuerdo que delante de él se agrega un "1" - un signo de byte, al final - control 4 bytes).

Este recurso permite ver de primera mano el proceso de conversión paso a paso (inserte DDF6 ... en la línea 3 (RIPEMD-160 Hash de 2)).



Sin embargo, para no sobresalir del conjunto de direcciones del formato segwit ya estándar, presentemos nuestra línea como (ver aquí ).



Dirección B (segwit) - bc1qmhmts932kecewrul5f58jyvvkcca4ljrrgmpcd

2. Enviamos una transferencia de varios cientos / mil satoshi a esta dirección desde A. confiable. El monto de la transferencia también puede llevar información (por ejemplo, verificación adicional sobre una base acordada, un símbolo de comando para la destrucción incondicional / apagado temporal de la botnet sin la necesidad de leer el comando transmitido en la dirección, etc.).
Prestaré especial atención al hecho de que, al enviar, se debe tener en cuenta que la dirección de entrega debe ser la misma que la dirección de entrega, o registrar la dirección de correo electrónico para la entrega como una nueva de confianza.
Una transacción se confirma en promedio varios minutos (sujeto al pago de una cantidad suficiente de comisión flotante dependiendo de la carga de la red).

El costo de transferir una cantidad de mil satoshi será de 7 rublos. (más comisión de 2-3 rublos). Repito que con otras criptomonedas puede ser más rápido y más barato decenas / cientos de veces.

3. Por parte de EBS, hay una encuesta periódica de los navegadores blockchain (por API) de la lista disponible (los navegadores se presentan en una amplia variedad) sobre la transferencia de A.
Al descubrir el hecho de enviar una nueva transacción con A (y su confirmación), la información contenida en la dirección del destinatario a la que se realizó la transferencia es descifrada (decodificada) por la clave recibida y aceptada para su ejecución.

Supongamos que la dirección de confianza es bc1qsj0gm0r2c3hzq9yzfewl34yk2r760hy5za4x3q (formato segwit).
En esta dirección, la última transacción saliente (aproximadamente, no la última, sino esta ) pasó a dos direcciones: bc1qmhmts932kecewrul5f58jyvvkcca4ljrrgmpcd y el cambio fue el mismo que la dirección de envío.
La cantidad transferida - 666 Satoshi - decidimos que este es un comando condicional para realizar la decodificación.



Decodifica nuestra dirección de nuevo a DDF6 ...
Convierta a la forma (5 |) SkD34 ,, +! Key0002 y descifre con Key0001 (la clave cambia a Key0002).

Descargue el módulo del servidor (el acceso al servidor se puede implementar utilizando la misma clave) y espere la fecha de lanzamiento del módulo.

Observo que es necesario usar al menos varios navegadores (pueden desconectar o restringir solicitudes de algunos países, como bitflyer.jp , restringir desde ruso y comenzar desde IP japonés).


La información recibida se puede verificar al menos en uno / dos. La elección de los navegadores es excelente, solo en la lista de tipos de Electrum hay más de una docena: blockchair.com, smartbit.com.au, bitupper.com, chain.so y muchos otros. otro



Tenga en cuenta que no todos los navegadores admiten el formato segwit. Por lo tanto, debe elegir un término medio, utilizar la dirección de confianza de los formatos antiguos o nuevos.

Un ejemplo de envío desde una dirección de confianza en el formato antiguo 186A8D7vdAHpFWdSAFHzZGfi44pPcwtZNc a la dirección heredada generada en bruto



y dirección segwit



El uso de varios navegadores blockchain enfatiza su diversidad.
Recuerdo que un mensaje oculto en una dirección de una transacción que se falsificará para que se confirme es imposible por definición.

Ventajas del algoritmo


  1. No hay servidor C2, las llamadas van a los navegadores blockchain.
  2. Los comandos para EBS son incondicionalmente confiables.
  3. El medio para enviar comandos es blockchain, que no permite bloquear el envío / envío de comandos.
  4. Blockchain es un sistema extremadamente estable (esto no se aplica a la volatilidad de la criptomoneda).
  5. Bajo costo de proporcionar trabajo.
  6. Implementación de algoritmo simple (código fuente y datos de código abierto).
  7. No es necesario generar transacciones o descargar blockchain.

Características del algoritmo


  1. Comunicación simple.
  2. Dependencia de la estabilidad de los navegadores.
  3. Ciertos (aunque mínimos) costos financieros.

Creo que algunos de los puntos dados aquí son útiles para los expertos en seguridad de la información.

Sería interesante aumentar la estabilidad de la botnet, además de los observadores, para atraer las capacidades de nodos completos o nodos de billeteras populares como electrum, así como organizar la comunicación dúplex generando las transacciones necesarias en el lado del sistema de banca electrónica. Agradecería las reflexiones sobre este tema, así como las críticas y sugerencias razonables.

Source: https://habr.com/ru/post/466609/


All Articles