viernes, 15 de diciembre de 2017

Mamá, mi web me mina !!!



By @RaulRenales

Estos días se está hablando mucho de unas 5000 webs que al visitarlas minan a favor de los dueños de las mismas. Se estima que existen unos 1.65 millones de equipos afectados por esta práctica. El objetivo de este artículo es revisar los aspectos técnicos que rodean a esta situación y poner un poco de luz sobre el asunto.


Disclaimer: Este post es meramente didáctico-divulgativo y se utilizará para impartir formación, cualquier mal uso que se de sobre su contenido estará bajo la responsabilidad de la persona que lo mal utilice.


¿Que es y porque minan con mi CPU?


Minar una criptomoneda es un concepto algo complicado para explicar en pocas líneas dado que es un proceso criptológico complejo pero por definirlo rápidamente, el minado es el intento que infinidad de máquinas realizan por resolver un problema matemático que se plantea cada 10 minutos y que además crece en complejidad a medida que se liberan nuevos problemas matematicos. A estos problemas se les denomina bloques.

A cambio de resolver estos problemas matemáticos los mineros obtienen recompensas en forma de criptomoneda o partes de ella si se unen en un pool para intentar colaborar en la resolución de los problemas que cada vez son más complejos.

El principal problema de los mineros es el coste de luz, que básicamente es la gasolina que hace funcionar los equipos que resuelven los retos matemáticos, se estima que la minería en criptomonedas consume más que la comunidad autónoma de Madrid en todo un año. Siendo el coste aproximado de la obtención de un bitcoin de unos 1000 dolares (y subiendo) de energía eléctrica por unidad.

Es en este punto donde la gente agudiza más el ingenio, no es raro tener que hacer un trabajo de mantenimiento en algun equipo de una oficina y encontrarte software de minería instalado, que los usuarios del equipo utilizan durante su jornada laboral para sacar unos decimales de alguna criptomoneda.
En este sentido los propietarios de webs con muchas visitas han visto en el minado una manera de obtener ingresos extra, donde además se elude el principal problema que es el coste de la electricidad.

Recientemente he leido en Adslzone.net que las webs principales de streaming, con 990 millones de visitantes al mes, podría haber recaudado algo más de 325.000 dólares a través de este método.

¿Porque Monero y no Bitcoin?

La moneda que minan estas webs es Monero. Esta cryptomoneda utiliza un algoritmo llamado cryptonight que fue diseñado para ser utilizado principalmente por CPUs y no por tarjetas graficas. De todas las monedas que se pueden minar bajo este algoritmo, Monero es la más rentable.

Monero a veces es empleado por los usuarios de Bitcoin para romper el vínculo entre las transacciones, con bitcoins convertidos primero a Monero, luego, después de un poco de retraso, reconvertidos y enviados a una dirección no relacionada con los utilizados antes. Los investigadores han informado que los operadores detrás del incidente global de ransomware WannaCry han convertido sus ganancias en Monero.

La razón de no minar Bitcoin, pese a su alto valor, reside en que es imposible obtener beneficios utilizando los recursos que piratea el script, para obtener resultados medianamente óptimos se tienen que utilizar mineros especializados y diseñados para esta tarea en exclusiva. Es imposible minar bitcoin utilizando el algoritmo cryptonight.

¿Y técnicamente como lo hacen?

Si analizamos la carga de cpu de nuestra computadora al entrar en Marca veremos que inicialmente sube la carga de su trabajo, pero que una vez abierta, la carga de cpu disminuye y cae a valores insignificantes:


Haciendo la misma prueba con una de las web implicadas en el asunto de la minería web fraudulenta, el resultado es diferente:





Como vemos en la imagen, la cpu se pone al 100% y no disminuye tras la carga de la web, esto se
debe al uso que el script de minado está realizando.


Analizando el código de la segunda web vemos rápida y claramente que está motivando este trabajo:



Justo antes de cerrar la cabecera encontramos el script que arranca el minero que apunta a CoinHive,
servicio utilizado por la práctica totalidad de las web que minan (Sin permiso) via web.


Coinhive ofrece un minero de JavaScript para Monero que puedes insertar en tu sitio web.
Básicamente la idea es ofrecer a los usuarios de una web que desaparezca la publicidad a
cambio de ceder un porcentaje de proceso del microprocesador para el minado de monero.


Analizando un poco el código tanto en coinhive como en algunas webs veo referencias a otras
webs donde se alojan los javascripts necesarios como por ejemplo authedmine.com, propiedad
de Coinhive.


Básicamente Coinhive ha creado una API en javascript que permite realizar la minería desde un
navegador de una manera sencilla, utilizando el potencial de los usuarios en un pool que
sumando las fuerzas de minado individuales aumenta las posibilidades de obtener recompensas
al propietario de la web.

Utilizando un proxy para analizar las conexiones y sesiones que hace la web se ve claramente
3 conexiones abiertas hacia CoinHive:


Aqui podemos ver los WebSockets y la información enviada, la web se autentica utilizando su
código de web y Coinhive le responde con el job_id que asigna al worker para realizar el minado:


¿Puede minar mi web sin que yo lo sepa?

Uno de los problemas que pueden darse es que una web de mi propiedad este minando utilizando
sus visitantes sin que ni ellos ni yo como propietario lo sepa.

No se trata de un problema nuevo, existe la posibilidad de insertar el código que hemos visto al inicio
de este artículo en webs vulnerables a inyecciones de código (XSS).
Cross-site scripting (XSS) es un ataque de inyección de código que permite a un atacante ejecutar
JavaScript malicioso en el navegador de otro usuario.
El atacante no ataca directamente a su víctima. En cambio, explota una vulnerabilidad en un sitio
web que la víctima visita, con el fin de lograr que el sitio web le entregue el JavaScript malicioso.
Para el navegador de la víctima, el JavaScript malicioso parece ser una parte legítima del sitio web,
y el sitio web ha actuado como un cómplice involuntario para el atacante.

¿Solo web o puedo estar afectado por otras vías?


Aunque el medio de realizar la ejecución del javascript que inicia el proceso de minado siempre es
una web, existen casos en los que acceder a una wifi abierta o privada afectada con un MITM puede
ser suficiente para ponerse a minar para un tercero.

Recientemente lei un articulo sobre la wifi de una mítica cafetería en la que al conectarte a su Wifi tu
dispositivo se ponía a minar. En el caso de Buenos Aires el script estaba en el portal cautivo, pero se
podria inyectar el código en todas las peticiones web que se hicieran sobre esta wifi intervenida por el
MITM.

La verdad es que puede parecer complejo el tema, pero se puede inyectar el código javascript usando
un simple teléfono móvil y una aplicación tipo cSploit.




Al injectar este script usando esta herramienta todas las peticiones que se realicen sobre web
recibirán como añadido el script de minado, poniendo los equipos a minar a favor del inyector del
script.

¿Y si me usan para minar qué riesgos tengo?



Básicamente el riesgo que supone que utilicen tu equipo es la merma del mismo, un uso prolongado
de los procesadores a porcentajes elevados hacen bajar mucho la vida de los dispositivos, que incluso
si son móviles pueden llegar a dañarse en muy corto plazo de tiempo.


Nuestras CPUs suelen tener una vida útil en condiciones normales de 20 a 30 años, esto depende de
los transistores de silicio que poseen.


Es difícil calcular el impacto del minado, pero lo que sí sabemos por la experiencia de empresas como
AMD o Intel que un procesador con cargas muy continuadas del 100% puede llegar a datar su vida útil
entre 3 y 4 años, como demuestran las pruebas de estrés que estas compañías realizan sobre sus
procesadores antes de sacarlos al mercado.


El alto uso de la CPU provoca que la temperatura suba y esto genera un riesgo añadido para el
procesador. Las temperaturas normales de los procesadores deben estar entre los 20 y los 30 grados
en reposo, entre 40 y 60 grados en carga y no tener picos de más de 70 grados con carga máxima.
Si entramos en los 80 grados debemos empezar a preocuparnos.


¿Como puedo protegerme?

Básicamente el primer paso es detectar que esto nos esta pasando y como hemos visto la mejor
manera es revisar el uso de CPU de nuestro equipo. En este sentido existen dos opciones.


Opción A: el consumo de CPU baja al cerrar la página, el minado se produce solo durante la visita a
la misma.


Opción B: el consumo de CPU no baja al cerrar la página con lo que el minado habra lanzado una
ventana tipo popup y estará minimizada o escondida en algún lugar del escritorio, conviene revisar
las ventanas abiertas o usar este truco que explica la gente de Xataka. También puede darse el caso,
en navegadores iexplorer que el script continúa ejecutándose como un script zombie.


Una vez detectado aqui van un par de soluciones:

Solución 1: bloquear la actividad utilizando los típicos adblockers, o alguno especialmente dirigido a
esta tarea como NoCoin. Aqui os dejo un ejemplo con la web anterior:


Solución 2: bloquear el tráfico utilizando el archivo host de nuestro equipo, para ello se ha diseñado
un script llamado Halt-and-Block-Mining que podeis consultar en el github de ruvelro.


Y hasta aquí esta breve descripción del problema del minado en web, que según se ve parece
extenderse como la pólvora al calor de sacar cuatro perras con esto.

Nos vemos en la próxima.

2 comentarios:

  1. Muy, muy bueno el artículo, hasta ahora el más completo que he leído sobre el tema (y eso que lo acortáis a propósito), ¡felicitaciones!

    ResponderEliminar