Hay alguien ahí fuera: protege tu cartera de bitcoins

miércoles, 29 de abril de 2015

Las pérdidas ocasionadas a las plataformas que operan con criptodivisas reflejan un interés creciente de los ciberdelincuentes hacia estos medios de pago. El éxito de estos ciberataques pone de manifiesto que las medidas de seguridad implementadas no siempre son proporcionales al valor de los activos que protegen. Vamos a ver qué tipo de carteras virtuales existen, y cuáles son sus medidas de seguridad.

Varios tipos de carteras

En el caso de Bitcoin, las eWallets son las herramientas que nos permiten realizar transacciones y acreditar ante la red la propiedad de los bitcoins utilizando un esquema criptográfico de clave pública para firmarlas (actualmente, ECDSA). En función de cómo se generen el par de direcciones y claves privadas, nos encontraremos ante diferentes tipos de carteras.


  • Las "carteras random" crean el par de claves a partir de un número pseudoaleatorio. Este proceso proporciona seguridad a la cartera al dificultar la generación de claves privadas asociadas a direcciones ya creadas. El inconveniente de esta aproximación es que impediría hacer uso de estos bitcoins en el supuesto de perder el fichero que contiene la clave privada, bien porque el soporte físico se encuentre dañado o porque perdamos las credenciales de acceso.
  • En el caso de las "carteras vanity", el usuario introduce el patrón que las direcciones creadas aleatoriamente deben satisfacer. Pese a que el tiempo de generación aumenta considerablemente, este procedimiento es utilizado por algunos servicios para conseguir direcciones más amigables y fáciles de identificar. Por tener una referencia, tardaríamos alrededor de diez minutos en encontrar una dirección con el patrón 1eleven usando un equipo de sobremesa.
  • Las "carteras mentales" generan la dirección y la clave privada a partir de una palabra conocida. Aunque su utilización no requiere un almacenamiento de claves porque estas podrían generarse en el momento de necesitarlas, cualquiera podría hacerlo si conociera que el input utilizado es, por ejemplo, ElevenPathsTelefonica.


Dirección de Bitcoin y clave privada asociada a la cartera generada con la palabra ElevenPathsTelefonica.

  • Dada la irreversibilidad de las transacciones de Bitcoin, podría darse el supuesto de que los propietarios de una misma cartera no llegaran a un acuerdo para retirar el dinero y fuera necesaria la intervención de un tercero confiable que ejerciera de árbitro. Por ello, las carteras multifirma, a diferencia de las anteriores, no están asociadas a una clave privada sino a un número determinado de direcciones que autorice las transacciones, lo que además aportan una seguridad adicional ante posibles transferencias ilegítimas.

¿Ataques a carteras en local?

Una vez escogido el tipo de cartera en el que depositar bitcoins, se pueden llevar a cabo diferentes aproximaciones para vulnerar los distintos sistemas de almacenamiento de claves. Para las carteras en local, cuyas claves son almacenadas en archivos bajo control del usuario, el primer paso sería identificar equipos que tengan corriendo nodos de Bitcoin, por ejemplo, en el puerto 8333.

Ejemplo de búsqueda de equipos que tienen corriendo un nodo de Bitcoin.

En el caso de que se consiguiera acceso a alguno de estos equipos, el siguiente paso sería identificar la ubicación del fichero de la cartera (wallet.dat, en el caso del cliente bitcoin-qt) y, en el supuesto de que el fichero no se encontrara protegido, se podrían exportar las claves privadas y efectuar transacciones hacia direcciones controladas por el atacante. Si, por el contrario, este fichero se encontrara cifrado, el atacante debería optar por realizar ataques dirigidos de fuerza bruta o de diccionario o bien capturar las contraseñas utilizando técnicas de keylogging cuando esta vaya a ser utilizada.

Otro tipo de amenaza contra este sistema es el denominado ataque por aislamiento. Un atacante que controlara la forma en la que la víctima se conecta a la red tendría la capacidad de servirle transacciones fraudulentas modificando, por ejemplo, la configuración del archivo peers.dat, en el caso de bitcoin-qt.

¿Ataques a carteras mentales?

En el caso de las carteras mentales, uno de los vectores de ataque consistiría en la creación de diccionarios para generar de forma automática posibles direcciones y sus respectivas claves privadas. De esta manera, todas aquellas direcciones que contuvieran monedas podrían ser sustraídas ya que el atacante contaría con la clave privada que firmaría las transacciones.

Para confirmar la viabilidad de este ataque y estimar qué cantidad de monedas habría estado expuesta, realizamos un experimento en el que se generaron las claves privadas y direcciones de más de cuatro millones de palabras diferentes presentes en 200 diccionarios genéricos en distintos idiomas. De los cuatro millones de direcciones generadas, pudimos observar que 17.902 direcciones realizaron operaciones y que en dichas cuentas llegaron a depositarse aproximadamente 19 bitcoins.

Representación temporal de las cantidades sustraídas en dólares y en bitcoins.

Una vez conocida la facilidad de monitorizarlas, el siguiente paso fue preguntarnos si de verdad había alguien dedicado a sustraer bitcoins que se depositasen en carteras mentales. Para ello, generamos tres direcciones que no habían recibido transacciones hasta la fecha a partir de palabras conocidas. Tras transferirles pequeñas cantidades de dinero, solamente tuvimos que esperar diez segundos hasta confirmar que alguien estaba operando con las dos primeras direcciones.

Pero, ¿qué ocurrió con la tercera dirección? A diferencia de las dos primeras en las que solamente se realizó un intento de transacción, desde la tercera dirección se solicitaron hasta tres intentos de transacción simultáneos hacia tres cuentas diferentes.

Para entender cómo la red resuelve este tipo de conflictos, es necesario comprender cómo son añadidas las transacciones a la cadena de bloques. Los bloques son conjuntos de transacciones que se añaden cada 10 minutos aproximadamente. El criterio de selección de quién añadirá un nuevo bloque se realiza a partir de la resolución de un problema matemático de dificultad ajustable. En este caso, Bitcoin opta por el cómputo de un hash cuya complejidad varía en función de la capacidad de cómputo total de la red.

Será el nodo que añada el bloque el que recolecte las comisiones de las transacciones incluidas y una cantidad de BTC determinada por la cesión de su capacidad de cómputo. Aunque los criterios de adición son configurables, la propuesta más aceptada se basa en dos premisas: comisiones y prioridad. Las comisiones son cantidades elegidas por los usuarios para favorecer que su transacción sea añadida más rápidamente. Por su parte, la prioridad de añadir una transacción viene determinada por el volumen (BTC_i, en Satoshis) y antigüedad (Age_i, en número de confirmaciones) de las cantidades transferidas y el tamaño de la operación (s_t, en bytes).


En el ejemplo que llevamos a cabo, tres direcciones con características diferentes reclamaron nuestro dinero. La primera sin comisión, la segunda con una pequeña comisión y la tercera incluía la transacción como parte de una transacción mayor en la que se transferían dos inputs diferentes hacia otra cuenta, la cantidad que nosotros transferimos y cerca de 75 BTC. Cinco horas después, la red aceptó la transacción dirigida hacia esta última dirección.

La cuestión es: ¿qué habría pasado si un tercero hubiera confiado en alguna de las otras transacciones antes de esas cinco horas? En ese caso, se habría incurrido en un fenómeno de triple gasto y cualquier operación derivada de estas no habría tenido efecto real alguno.

¿Ataques a carteras en la nube?

Por último, nos encontramos con las carteras en la nube. Desde finales de 2013 y principios de 2014, hemos podido comprobar que, a partir de la información cedida por la compañía Blueliv, cuando el precio del Bitcoin se encontraba en su punto más alto de cotización se intensificó el robo de credenciales de plataformas de Bitcoin. La realidad es que si las plataformas no tienen implementadas sistemas de autenticación robustos tanto para el acceso como para la emisión de transacciones, la información procedente de una botnet destinada al robo de credenciales podría ser más que suficiente para sustraer el dinero de las cuentas.

Recomendaciones

Después de analizar diferentes ataques a las carteras, no es recomendable la generación de claves privadas a partir de carteras mentales, ni la utilización de plataformas que no dispongan de sistemas de verificación en dos pasos como Latch. En cambio, y a pesar de que solamente se utilicen actualmente en el 1% de las transacciones, las carteras multifirma son las más aconsejables desde el punto de vista de la seguridad. Además de los ataques específicos que se pudieran perpetrar contra el funcionamiento teórico de las criptodivisas, los atacantes podrán replicar los métodos utilizados contra el sector bancario adecuando la funcionalidad de familias de malware como ZeuS e intensificando las campañas de phishing para el robo de criptodivisas.

Por ello, las empresas de seguridad pueden encontrar en el mundo de las criptodivisas un nuevo target al que destinar sus productos basados en la detección de campañas de phishing, malware o aplicaciones móviles sospechosas. En este último aspecto, herramientas de investigación como Tacyt serán útiles para la identificación de abusos contra los usuarios de aplicaciones en dispositivos móviles. Asimismo, a medida que estas monedas vayan consolidándose como medios de pago, serán necesarios productos destinados a la reducción de tiempos de espera con el fin de evitar transacciones potencialmente fraudulentas y al ofrecimiento de servicios de arbitraje para la resolución de conflictos aprovechando las posibilidades de las carteras multifirma.

* El contenido de este artículo hace referencia a la ponencia titulada How I met your eWallet presentada en RootedCON 2015 cuya presentación junto con más información se encuentra disponible en: http://es.slideshare.net/mobile/elevenpaths/how-i-met-your-ewallet-rooted-2015

3 comentarios:

  1. Yo participo en la comunidad bitcoin (foros, reddit, irc...) desde hace más de dos años y es la primera vez que veo ha alguien utilizar el término "eWallet"...

    ResponderEliminar
    Respuestas
    1. De hecho el termino wallet esta incorrecto y aun asi se utiliza, deberia llamarse keychain o llavero, pues solo almacena llaves, mientras que los bitcoins estan en la blockchain y no en la cartera.

      Eliminar
  2. Excelente información Chema, Gracias¡¡¡

    ResponderEliminar