El que juega con fuego termina quemándose

Intentando salir de pobres.

Situación: la de siempre, insomnio, aburrimiento, un !qué se yo! un ¡vaya usted a saber!

Tema elegido: Criptomonedas. A ver si salimos de pobres y nos vamos a las Fiji.

Escenario: The Planet

Medio: Shodan

Ya pedimos perdón a los analistas y entendidos en este tema, nosotros sólo somos unos aficionados con inquietudes tontas, con ganas de juerga y de pasar un rato divertido.

Primera toma de contacto

¿Qué hacemos hoy, bro? pues intentar salir de pobres. Entonces, probemos:

Shodan: ethereum

Interesante la búsqueda, de los 4572 resultados, la mayoría tienen el mismo puerto 8545 y casi todos con el mismo servicio, Ethereum RPC enabled. Tras empaparnos de algo de documentación, toca el juego. Juguemos con la información que nos devuelve este protocolo.

Por ejemplo, queremos que nos devuelva el número de bloque más reciente:

proxychains curl -s -X POST http://target:8545 -H “Content-Type: application/json” — data ‘{“jsonrpc”:”2.0",”method”:”eth_blockNumber”,”params”:[],”id”:1}’

Result: {“jsonrpc”:”2.0",”result”:”secret",”id”:1}

y si ahora pedimos el número de transacciones para ese bloque:

proxychains curl -s -X POST http://target:8545 -H “Content-Type: application/json” — data ‘{“jsonrpc”:”2.0",”method”:”eth_getBlockTransactionCountByNumber”,”params”:[“secret”],”id”:1}’

Result: {“jsonrpc”:”2.0",”result”:”0x79",”id”:1} (121 transacciones )

!Umm! Ysi dejamos esta criptomoneda y probamos otra que mola más … Monero :D

Segunda toma de contacto, esto se pone interesante

Shodan: monero

Ya en el resultado nos indica que vamos por buen camino.

Lo primero que vemos no es el decremento de los resultados, llama más la atención el cambio de país y que casi todos tengan el mismo proveedor de servicios en la nube. Si queréis buscadlo, nosotros no vamos a dar datos.

El siguiente y, sin duda el más importante, es el servicio más usado: docker. ¿Qué es un Docker? al final del artículo lo explicamos.

Acotando la búsqueda en aquellos servicios que sean contenedores, los resultados ya toman un matiz más que interesante, vemos claramente que hay un docker usado para hacer minería, ahh! Antoñito donde nos metes!

resultados del docker usado para minería

Esta vez echamos mano de la API de Shodan para descargarnos los resultados y analizarlos con tranquilidad. Lo primero que nos encontramos es una shellscript usada para …

Analizando un script. No lo hagas … lo llevas claro

Bro!, ya estamos tardando en descargarlo, ¡quién ha dicho miedo! :D

Vemos URLs a pastebin, las cuales no nos hemos descargado.

Una de esas no descargas es un fichero binario. ¡Alaaaa! ¡ahora toca hacer ingeniería inversa! ¡qué pereza! :-/ ¡probemos con un strings!

El texto del strings nos indica que se trata del docker minero. También “no” nos hemos descargado el fichero de configuración del docker, con que lanza el minero, es decir, “no” tenemos el hash del usuario, la clave, la conexión al pool ...

Una cosa muy importante a tener en cuenta, es que el nombre del fichero binario está camuflado con el nombre de un proceso muy común en los servidores, práctica habitual que se suele hacer cuando quieres ocultar algo importante.

Seguimos analizando. Por los comandos que ejecuta, comandos que sólo el superuser es capaz de hacer, podemos decir que hay una escalada de privilegios, ¡vamos que es root!.

Crea usuarios y les da acceso a sudoers con permiso de root. Modifica el fichero de configuración del servicio ssh, habilitando el acceso con el usuario root y permitiendo el acceso con autenticación por medio de clave pública. Reinicia el servicio. Copia las claves en el directorio home del usuario creado y de root ( ~/.ssh/authorized_keys ). Modifica el crontab de root para que cada 10 minutos se descargue y ejecute algo. Esto no nos lo hemos podido bajar, aunque nos hemos quedado con las ganas de conectarnos a algún server y obtenerlo :D

Comprueba si existe algunos paquetes instalados, de no ser así se los descarga.

Algunos pastebin vienen cifrados, los cuales son descifrados ya que disponemos de la clave pública del usuario.

echo “algoquepuso” | base64 -d |openssl rsautl -inkey clave.pub -pubin

Modifica y añade puertos de otros mineros en el firewall local, iptables y/o ufw.

Por ultimo, el atacante, creo que ya podemos llamarle así, mata todos los procesos de minería que pudieran haber. No quiere competencia, ¡lógico!

Si has llegado hasta aquí tienes premio. Tuitéa el artículo con el hashtag #porquelovalgo y te invitaremos a un refresco, cerveza, café o vaso de agua.

Otro script encontrado

En análisis de las búsquedas en Shodan nos desvela otro script, que su análisis nos indica que no tiene nada que ver con lo expuesto anteriormente.

Resumiendo:

  • Descarga paquetes como systemd, masscan y iproute2.
  • Escanea los puertos 2375 y 2376 de la subred del servidor.
  • Lanza un docker

Esto nos indica que ahora no se va a tratar de hacer minería sino de buscar máquinas vulnerables. Con el escaneo de los puertos anteriores intenta encontrar una vulnerabilidad de docker que permite al atacante hacerse root.

Otro comando encontrado es:

swarm ….

Se trata de una solución nativa de clusterización para contenedores de Docker. Convierte un grupo de hosts de Docker en un único host virtual.

Datos obtenidos

  • pool de servidores de minería
  • clave usuario, hash.
  • clave publica del atacante…
  • Algunos servidores tenían instalado DockerUI. Haciéndonos la vida más fácil :D

Conclusión

“Nos hemos hecho” con un grupo de máquinas que se están dedicando a minar como locas, no lo hemos dicho pero el atacante pone la cpu al 100% ( — max-cpu-usage=100).

Sabemos por dónde nos han entrado, una vulnerabilidad de Docker que permite a un atacarte elevar privilegios y hacerse root.

Una cosa muy importante que hemos visto, es el uso de ngrok, con el que se crea un túnel a un servicio. Esto significa que el servicio que quería proteger es un servicio muy importante, puede ser su casa, una máquina donde tenga información importante…

Y todo esto con una simple consulta en Shodan en busca de criptomonedas con el único fin de hacernos ricos y dejar de trabajar, llegando a encontrar una red de servidores, asaltados y usados para hacer minería.

Tomamos nota de todo, ¿quién sabe? quizá algún día nosotros tengamos la necesidad urgente de dejar de trabajar.

Una noche de juego da para mucho. That’s all folks.

Espera, aún no hemos terminado. ¡Enhorabuena! has llegado hasta el final y lo tienes, #porfin como hashtags y tiene le bebida con la tapa de jamón ibérico y si no te gusta la carne te preparamos una ensalada :D

Gracias por vuestra atención.

Recomendaciones

  • Mantén tus servidores actualizados.
  • Filtra las conexiones hacia/desde tus servidores.
  • tanto a nivel de ip como a nivel de servicio.
  • Recoge logs del sistema para analizarlos, es una forma de ver lo que está ocurriendo en tu entorno.

¿Qué es un docker?

Docker es un opensource que permite crear y usar contenedores en Linux.

Vale, y un contenedor ¿qué es?. Pues es como una máquina virtual, ligera, modular y flexible.

Con un docker puedes separar procesos que pueden ser ejecutados de una manera independiente. Es muy importante la independencia de cada proceso porque permite tener más segura tu infraestructura.

En el apartado de referencias tenéis más documentación al respecto.

Referencias

https://es.wikipedia.org/wiki/Alibaba_Group

https://www.jsonrpc.org/

https://docs.pylonsproject.org/projects/webob/en/stable/jsonrpc-example.html

https://github.com/ethereum/wiki/wiki

https://github.com/xmrig/xmrig

https://hackernoon.com/bitcoin-core-bug-cve-2018-17144-an-analysis-f80d9d373362

https://github.com/taskcluster/docker-worker

https://hub.docker.com

https://www.exploit-db.com/exploits/42356

https://ngrok.com/

--

--