Guerra abierta para evitar la minería no autorizada de criptodivisas cuando navegamos

lunes, 18 de diciembre de 2017

Un reciente informe de CheckPoint señalaba hace unas semanas que las aplicaciones que utilizaban la CPU de los usuarios para minar la criptodivisa Monero supusieron la sexta amenaza más importante del mes de octubre. Este repunte tiene lugar semanas después de que se empezara a identificar sitios web de tráfico relevante que ponen en práctica este método de financiación alternativo. Pero, ¿entendemos lo que conlleva la proliferación de este tipo de prácticas?

¿Qué es la minería en el ámbito de las criptodivisas?
El proceso de minería es una tarea propia de la tecnología Blockchain. En Bitcoin, por ejemplo, se utiliza para distribuir aleatoriamente entre los nodos de la red el privilegio de añadir un nuevo bloque de transacciones a la cadena de bloques y, por tanto, de recibir la recompensa por ese trabajo. La tarea de minería consiste en hashear la serie de datos de entrada que se incorporarán en el bloque hasta dar con un hash con unas características muy concretas: que empiece por un determinado número de ceros. El primer nodo en conseguirlo, añadirá este nuevo bloque y se pondrá a trabajar en el siguiente bloque tras informar al resto de la red de que lo ha conseguido.

Si los nodos trabajaran de forma aislada (solo-mining) las posibilidades de conseguir añadir un bloque recaerán en la suerte: tendrán más posibilidades de encontrar un hash con esas características cuanto mayor sea su capacidad para generarlos. Es por eso que en la jerga de las criptodivisas se suele hablar de cifras como hashes por segundo (H/s), kilohashes por segundo (miles de hashes por segundo, KH/s) o megahashes por segundo (millones de hashes por segundo). Un equipo doméstico sin personalizar, podría realizar operaciones de este tipo a velocidades de 50-100 megahashes por segundo. Por tener una referencia, la capacidad de cómputo actual de la red de Bitcoin ronda los 13.000 millones de gigahashes por segundo, lo que haría que minando de forma aislada con una capacidad de un gigahash por segundo, las posibilidades de ser el agraciado del próximo turno sería de una entre 13 000 millones (1/13.000.000.000) cada diez minutos.

Imagen Tasa de hashes por segundo de la red de Bitcoin desde 2009 hasta diciembre de 2017.

Figura 1. Tasa de hashes por segundo de la red de Bitcoin desde 2009 hasta diciembre de 2017. Fuente: blockchain.info.

Por este motivo, los mineros no suelen minar solos sino que se alían con otros mineros en lo que se conocen como pools de minería con el fin de minimizar el impacto del factor suerte y poder al menos recaudar una parte del trabajo realizado. En estos pools, la carga de trabajo se reparte entre diferentes personas que contribuyen entre sí. El administrador del pool gestiona la carga de trabajo entre sus workers y se encarga de llevar a cabo las tareas de reparto y distribución de los beneficios, a cambio, eso sí, de comisiones que pueden rondar entre menos del 1% y el 30% en función del pool y de la criptodivisa que se mina.

Precisamente por estos motivos, la minería tiene un gasto energético elevado. Una estimación reciente del consumo anual de la red de Bitcoin ya superaba el consumo de 159 países del mundo, de acuerdo a un estudio realizado por Digiconomist en base a las estimaciones actuales de energía necesaria para el mantenimiento de la red de Bitcoin. Ese coste energético para mantener las máquinas funcionando tiene que ser afrontado por los propios mineros en sus máquinas y puede llegar a ser superior al beneficio dependiendo del país y de la tarifa energética.

Sin embargo, algunos optan por el camino corto. ¿Cómo reducir la tarifa energética a la que hacer frente? Una de las opciones es el uso de los ciclos de computación sin consentimiento del usuario. La existencia de esta amenaza como tal no es nueva y son varias las familias de malware que ya han intentado explotar esta forma de monetizar la infección incorporando capacidades de minería a los binarios maliciosos.

Más recientemente se ha optado por otra opción. Utilizar el navegador como herramienta de minado e incorporar código Javascript que se encargue de esas tareas. Sin embargo, la capacidad de cómputo de una pestaña de navegador no es comparable con la que se podría alcanzar con hardware ad-hoc. ¿Por qué utilizar entonces Monero y no Bitcoin?

La apuesta por Monero y no por Bitcoin
El algoritmo de Proof-of-Work implementado por Bitcoin se centra en la realización de operaciones de hashing utilizando SHA256 lo que ha incentivado la aparición de hardware de minería muy especializado con dispositivos diseñados ad-hoc para optimizar ese proceso. Sin embargo, en el caso de Monero el peso de una CPU en el algoritmo utilizado para la prueba de trabajo (Cryptonight) es mucho más importante dado que necesita, al menos, dos megas de memoria RAM para funcionar, lo que encarece sustancialmente la creación de hardware muy especializado en este algoritmo y, como consecuencia, hace que el minado con hardware convencional siga siendo una práctica rentable.

Fruto de esta posibilidad, surgen diferentes librerías que pretenden atajar este nicho en el que la minería por CPU sigue siendo rentable. Los sitios web de coinhive.com o crypto-loot.com ofrecen pequeñas porciones de código Javascript. Ambos proyectos se presentan como una alternativa a la publicidad para la monetización de contenidos web aprovechando la capacidad de cómputo de los usuarios que visitan la web. Aunque las dos plataformas ofrecen la posibilidad de preguntar al usuario si desea ceder parte de su capacidad de cómputo a los usuarios, esta opción es opcional con lo que muchos usuarios podrían estar minando con el mero hecho de empezar a visitar la web.

Para un administrador, añadir esta funcionalidad es sencillo. En el caso de Coinhive, basta con añadir la librería de «coinhive.min.js» en el sitio web en donde se quiera que el usuario contribuya minando (o «authedmine.min.js», que solicita el permiso explícito del usuario como hacen plataformas como hashkiller.co.uk por ejemplo) e invocar el proceso «miner.start()» para que comience.

<script src="https://coinhive.com/lib/coinhive.min.js"></script>
<script>
    var miner = new CoinHive.Anonymous('YOUR_SITE_KEY', {throttle: 0.3});
    miner.start();
</script>


Estos minadores ofrecen la posibilidad de fijar la cantidad de CPU destinada a las labores de minería. En el caso de Coinhive para no llamar la atención del usuario bloqueando su equipo se pueden fijar límite máximos al uso de la CPU modificando el valor opcional throttle. También en ambos casos es necesario incluir un token en la llamada que invoca el proceso que arranca la tarea de minería en sí misma. Ese token es un identificador de a qué minero se le asignará la capacidad de cómputo de este usuario. Mediante este mecanismo las páginas que facilitan esa interfaz registran cuánta capacidad de cómputo está asociada a cada uno de sus colaboradores de cara a cargar en la cuenta correspondiente los beneficios correspondientes a su proceso de minado. Tanto Coinhive como Crypto-loot ofrecen plugins que se pueden incluir directamente en Wordpress con el objetivo de facilitar que un mayor número de webmasters opten por su solución.

El hecho de que estos sitios web centralicen las peticiones podría ser un punto de riesgo para el anonimato de quienes desarrollen aplicaciones de minería no autorizada basadas en sus librerías. Sin embargo, estas plataformas permiten sin problemas el acceso vía Tor y el registro de cuentas incluso empleando correos desechables con lo que las expectativas de cara a conseguir una atribución real se reducen de forma significativa, incluso con la colaboración de las plataformas.

En este sentido, las plataformas ofrecen estos servicios a cambio de una comisión en concepto de gestión. En el caso de coinhive.com, se reservan el 30 % de la capacidad de cómputo según los propios términos y condiciones y en el caso de crypto-loot.com, las comisiones ascienden hasta el 12 %. Por este motivo, sigue siendo un negocio provechoso para los propios administradores de estas plataformas que además retienen una comisión extra en el momento en el que los mineros solicitan el pago a su propia cuenta de Monero.

Los ficheros, sin embargo, no tienen por qué ser cargados desde las páginas oficiales. A continuación se facilita información adicional sobre los ficheros en cuestión, tomando como referencia la información disponible en VirusTotal.

Imagen ficheros tomando como referencia la información disponible en VirusTotal.


En este sentido, Monero presenta otra ventaja para aquellos mineros que usen la capacidad de cómputo de la CPU y es que ha sido concebida para ser una criptodivisa anónima. En Monero, a diferencia de en Bitcoin o Litecoin, no se puede rastrear el saldo de una cuenta ni a qué otra cuenta se transfiere cada moneda. De esta manera, facilita también a los atacantes el proceso de anonimización al estar utilizando ya una criptodivisa que contempla el anonimato desde su propio diseño.

Las pestañas donde el usuario pasa más tiempo son las más atractivas… pero no las únicas

Por este motivo, los espacios más interesantes para incentivar el minado no autorizado son sitios web en los que la pestaña del usuario vaya a permanecer mucho tiempo abierta. En primer lugar, para que la carga del código Javascript de minado solo se efectúe una vez y, en segundo lugar, para mantener abierto el proceso de minado el mayor tiempo posible. Especialmente interesantes son los sitios de reproducción de contenidos audiovisuales. Tanto si se trata de contenidos pregrabados como contenidos emitidos en directo como emisiones pirata de partidos de fútbol y otros eventos deportivos que, por su duración, pueden llegar a concentrar a miles de usuarios simultáneamente durante varias horas.

Si nos centramos en el listado de los sitios más populares para Alexa, nos empezamos a encontrar sitios web que utilizan esta librería como mejortorrent.com, página 1.192 según Alexa a fecha de edición de este blog y que ya incorporaba el script de minería de Coinhive desde, al menos, el 11 de diciembre de 2017, como se podía comprobar en The Wayback Machine aquí. Por cierto, al no indicar valor de throttle, el proceso de minado en esta web alcanzaba el 100 % de CPU.

Iagen Captura de pantalla del primer snapshot archivado por The WayBack Machine

Figura 2. Captura de pantalla del primer snapshot archivado por The WayBack Machine en el que mejortorrent.com emplea el minador de coinhive.com.

Una búsqueda en Shodan de las cadenas de texto vinculadas al minero ha facilitado una gran cantidad de resultados, algunos de ellos vinculados, por ejemplo, con páginas de distribución de contenidos pornográficos, especialmente audiovisuales.

Si realizamos la misma búsqueda de páginas que carguen el archivo «coinhive.min.js» en censys.io, los resultados ascienden a 1.634, 897 de los cuales se encuentran entre el millón de dominios más populares en la red. Si ponemos el foco en el top 10000 de páginas hay al menos 9 sitios web que incluyen el script de «coinhive.min.js» literalmente. Además de la mencionada mejortorrent.com, se encuentran kickass.cd (compartición de archivos torrent), nnrdntrrjf.bid, shareae.com (sobre edición de contenidos multimedia), moonbit.co.in (un faucet de bitcoins que divide en dos Javascript diferentes el script de minería), sitios web de noticias como livetechnologynews.com (archivada aquí) y otras de compartición de contenidos audiovisuales relacionados con el anime y la distribución de películas.


Imagen resultados identificados en censys.io que incluyen una referencia a la cadena de texto de «coinhive.min.js»

Figura 3. Resultados identificados en censys.io que incluyen una referencia a la cadena de texto de «coinhive.min.js». 

Usando una búsqueda un poco más amplia, incluyendo las cadenas «miner.min.js» o «miner.start()» , el número de resultados asciende ligeramente, pero con resultados preocupantes. Un ejemplo de ello es el sitio web thepiratebay.red (no confundir con piratebay.red, que también carga un script de minería, pero proveniente de coinhive.com).


Imagen carga de un fichero de minado externo realizada en el sitio web thepiratebay.red

Figura 4. Carga de un fichero de minado externo realizada en el sitio web thepiratebay.red. El sitio web pudo ser identificado gracias a la presencia de la cadena de texto «miner.start()». Web archivada manualmente en The Wayback Machine aquí

En él se pueden identificar minadores como el que sigue, que no es detectado aún por ninguna extensión de navegador ni tampoco identificado como tal por ningún software de seguridad en el momento en que reportamos el archivo a VirusTotal.

Líneas finales capturadas del archivo «min.js»
Figura 5. Líneas finales capturadas del archivo «min.js» cargado desde www.hashing.win. Se pueden observar diversas funciones de decodificación del contenido anterior. 


Que el procesador se ponga literalmente al 100 % de consumo de CPU es un buen indicador. Sin embargo, en el momento en el que observamos este incidente por primera vez no podía ser bloqueado si no era matando manualmente el proceso correspondiente a esa pestaña. El código fuente del Javascript cargado está ofuscado y, en este caso, la detección se ha podido realizar en relación a la aparición de la cadena sospechosa «miner.start()» que, en cualquier caso, también podría haber sido renombrada para evitar su identificación.

Recomendaciones
Hay que tener en cuenta que este tipo de aplicaciones no requieren que el usuario valide la tarea, por lo que es recomendable estar pendiente de la carga del procesador dado que las librerías de Javascript se podrían estar ejecutando en segundo plano. En este sentido, existen diversas extensiones de navegador que tratan de proteger al usuario. La extensión NoCoin por ejemplo (liberada bajo GPL por un desarrollador y cuyo código está disponible en Github) se encarga de avisar al usuario cuándo una página web ha intentado llevar a cabo actividades de minería conocidas. Ha sido diseñada por el desarrollador suizo Rafael Keramidas y se encuentra disponible para Chrome, Firefox y Opera. Puede ser un buen primer paso para identificar esas páginas que no deberían estar minando.

Sin embargo, estos esfuerzos no son suficientes. Por ejemplo, se ha podido identificar que el minero de crypto-loot ya había sido compartido en redes P2P como IPFS con el hash QmWoAATmahA2yd5CzqfiqNmUQSzneeSESaRvxAUh8huiBe, con lo que cualquier intento de carga del archivo bien a través de la red IPFS o a través de pasarelas a la red como ipfs.io (con URL del tipo https://ipfs.io/ipfs/QmWoAATmahA2yd5CzqfiqNmUQSzneeSESaRvxAUh8huiBe) debería ser considerado también un intento sospechoso de carga. Sin embargo, es necesario puntualizar que el cálculo del identificador del fichero en IPFS es un hash. Por tanto, bastaría con añadir un espacio para generar una versión de comportamiento idéntico pero con hash completamente diferente, con lo que las medidas propuestas aquí son meramente informativas sobre las posibilidades que ofrece IPFS como canal alternativo para la distribución de estos scripts de minería una vez visto que ya se podrían estar utilizando.

Por otro lado, a nivel corporativo también es interesante monitorizar este tipo de accesos. Las empresas y, especialmente, los equipos que están conectados de forma permanente son un buen objetivo para aplicaciones maliciosas que se intenten aprovechar de esta circunstancia o incluso para personal interno poco profesional que pudiera estar aprovechando los recursos energéticos de la empresa para minar a coste 0 en su propio beneficio. Una revisión de los accesos a este tipo de plataformas o el seguimiento de picos anómalos en la factura eléctrica pueden ser un buen indicador de actividad sospechosa.

Mientras la capacidad de cómputo siga siendo la responsable de dar soporte tecnológico a las funcionalidades de la cadena de bloques, el riesgo del uso energético no autorizado seguirá presente. Precisamente, el hecho de que mediante estas técnicas se pueda empezar a monetizar una infección de una forma casi inmediata y, aparentemente, inocua, lo convierte en un motivo que puede alimentar la proliferación de familias de malware con estas funcionalidades que pongan el foco, especialmente, en dispositivos de los que no estamos tan pendientes. Habrá que seguir la evolución del fenómeno.

Félix Brezo
Equipo de Innovación y Laboratorio de ElevenPaths
@febrezo

1 comentario: