Sobre el modelo de seguridad de las carteras de software | Libro mayor

Sobre el modelo de seguridad de las carteras de software | Libro mayor

Nodo de origen: 2671485

Podemos distinguir dos tipos predominantes de monederos: monederos de software y monederos de hardware. Cumplen la misma función, pero de forma diferente. Las billeteras de software se consideran más simples de usar: un solo programa es suficiente para crear, validar y firmar transacciones. Con una billetera de software, no es necesario crear la transacción en el software y confirmarla en un dispositivo de hardware.

Hace dos semanas, Historias prohibidas dio a conocer un ataque dirigido contra miles de personas en todo el mundo. Este ataque aprovechó vulnerabilidades en Android e iOS para instalar software espía desarrollado por el Grupo NSO: Pegasus. Este malware es capaz de monitorear toda la actividad del dispositivo y filtrar información personal: SMS, conversaciones de WhatsApp y Signal, llamadas telefónicas, etc. Este artículo explica cómo, en estas condiciones, dicho malware podría extraer toda la secretos de las billeteras de software y las diferencias desde el punto de vista de la seguridad entre las billeteras de software en teléfonos móviles y computadoras de escritorio.

Este artículo pretende ser no muy técnico. Para mantenerlo relativamente simple, solo se discutirán las características básicas.

Protegiendo secretos

¿Qué se almacena en una billetera criptográfica?

Las billeteras en realidad no almacenan las criptomonedas de los usuarios: solo almacenan los secretos, en particular las claves privadas, que permiten acceder a las criptomonedas y la capacidad de gastarlas. Estas claves privadas son en su mayoría claves privadas ECC (criptografía de curva elíptica) en diferentes curvas según la cadena de bloques. Las curvas más comunes son secp256k1 (Bitcoin, Ethereum…), Ed25519 (Monero), o BLS12-381 (Ethereum 2).

Estas claves se utilizan para firmar transacciones y, en general, para interactuar con los activos de la cadena de bloques.

El almacenamiento de estas claves depende del tipo de monedero: determinista o no. Una billetera determinista jerárquica (HD) permite la creación de un árbol de claves a partir de un único secreto maestro llamado semilla (cf. BIP44). Esta semilla a menudo se deriva de una secuencia mnemotécnica de 12, 18 o 24 palabras generadas aleatoriamente o elegidas por el usuario (cf.BIP39). Estos mnemotécnicos permiten limitar el número de claves que se almacenarán: se pueden volver a calcular en cualquier momento a partir de la semilla. Las billeteras HD solo almacenan este mnemotécnico o la semilla.

Las billeteras no deterministas generan una nueva clave para cada uso y deben almacenarlas todas. Las billeteras no deterministas no se pueden migrar fácilmente a otra billetera ya que las copias de seguridad no son compatibles.

Las principales características de seguridad de una billetera consisten en generar, almacenar y usar estos secretos de manera adecuada. Existen diferentes niveles de seguridad frente a diferentes tipos de amenazas:

  • Protección contra los ataques de la “doncella malvada”: Un atacante con acceso temporal a la billetera no debe poder agregar una puerta trasera dentro de la billetera que permita robar el PIN o los secretos de protección de la contraseña.
  • Material criptográfico seguro: Las claves y los nonce generados por la billetera nunca deben ser predecibles. Además, el conocimiento de los secretos (excepto la semilla) generados en algún momento no permitirá predecir el secreto que se generará en el futuro.
  • Protección en reposo : Si un atacante obtiene datos persistentes de una billetera de software, no debe poder extraer las claves.
  • Protección durante el uso secreto: Cuando la billetera está desbloqueada, las claves no deben ser accesibles por un atacante o un malware.
Carteras de hardware

El modelo de seguridad de una billetera de hardware tiene como objetivo obviar estas amenazas de seguridad. Las billeteras de hardware protegen contra malware por diseño. Son dispositivos independientes que firman transacciones por sí mismos. Los materiales criptográficos siempre permanecen dentro del dispositivo y nunca se envían a la aplicación de software a la que se comunican. La interfaz de comunicación siempre es simple, lo que reduce drásticamente la superficie de ataque. Puede ser USB, Micro SD o cámara + pantalla (mediante código QR), o Bluetooth Low Energy.

Además, las billeteras de hardware incorporan una pantalla directamente en el dispositivo que permite al usuario verificar las acciones que está a punto de realizar cuando interactúa con sus claves secretas. Estas comprobaciones manuales en los dispositivos son una contramedida muy eficaz contra el malware en el ordenador/móvil. Donde el malware en una computadora/dispositivo móvil podría acceder a los secretos (semilla o claves privadas) o incluso intercambiar/modificar direcciones o montos cuando el usuario realiza una transacción, esto no es posible con una billetera de hardware.

Las billeteras de hardware también están diseñadas para protegerse contra los ataques de la "criada malvada" y contra un atacante con acceso físico. Dependiendo de la billetera de hardware, tienen diferentes niveles de seguridad, pero en todos los casos están diseñados para protegerse contra estas amenazas. Se puede encontrar una descripción detallada de los modelos de amenazas de Ledger Nano esta página.

Carteras de software

Las billeteras de software regulares protegen los secretos con medios regulares: mecanismos de seguridad del sistema operativo en el que se ejecutan y, a veces, un control de acceso basado en un PIN o una contraseña.

A continuación, se consideran las carteras de escritorio (Windows, macOS, Linux) y las carteras móviles. Las principales diferencias entre ellos se basan principalmente en los mecanismos de seguridad que ofrece el sistema operativo.

Carteras de software en una computadora

Varias billeteras populares, como Electrum, Exodus, Atomic o Bitcoin core, se ejecutan en computadoras.

En una computadora, los mecanismos de seguridad que ofrece el sistema operativo para aislar un proceso de billetera de otros procesos son limitados. La mayoría de las aplicaciones las ejecuta el mismo usuario, y las aplicaciones pueden leer los datos de otras aplicaciones.

La seguridad de estas carteras de software se basa principalmente en la seguridad de la contraseña que las protege, y también en el hecho de que no se ejecuta ningún malware en el sistema operativo (lo cual es bastante difícil de garantizar, consulte las noticias recientes sobre Pegasus).

La mayoría de las veces, la semilla se almacena en un contenedor encriptado protegido por una contraseña. Un ataque sencillo consiste, para un malware o una herramienta de administración remota, en recuperar este contenedor encriptado y enviárselo al atacante. Luego, la contraseña puede ser de fuerza bruta u obtenida mediante el uso de un keylogger.

En un escenario en el que un atacante solo logra acceder al contenedor cifrado (el atacante encuentra una llave USB que contiene una billetera o instala malware en una computadora, pero la víctima nunca abre su aplicación de billetera), el atacante tiene que forzar la contraseña.

La mayoría de las contraseñas son malos. Hay miles de millones de contraseñas que se filtraron en la web y muchas personas tienden a reutilizar sus contraseñas para varios servicios. Las herramientas listas para usar le permiten recuperar contraseñas para billeteras de criptomonedas, como btcrecover or hashcat. Las contraseñas pueden ser complejas, pero detrás de cada billetera hay dinero real, por lo que los atacantes no dudarán en invertir recursos para descifrar dichas contraseñas.

Dos principios básicos de seguridad para mantener sus contraseñas seguras son usar un administrador de contraseñas y nunca reutilizar su contraseña para diferentes propósitos.

La amenaza más preocupante para las billeteras de software son el malware y los ladrones dedicados, desarrollados específicamente para drenar sus fondos. Tal malware, como KPOT o ElectroRAT, ni siquiera tienen que aplicar fuerza bruta a su contraseña: pueden capturarla directamente cuando la ingresa, descifrar los datos de configuración de la billetera y filtrar la semilla.

Aquí hay una aplicación de juguete, desarrollada para este artículo, que apunta a la billetera Electrum (aunque podría haber sido otra billetera de software). Simula un malware que roba la contraseña del usuario cuando la víctima la ingresa. Luego, la contraseña se usa para descifrar los datos de la billetera y mostrar la semilla:

Como puede ver, incluso si la contraseña es compleja, la aplicación puede recuperarla ya que la huele directamente en la memoria.

Este ejemplo es muy similar al reciente Malware .SCR campañas utilizadas para robar criptomonedas. Los delincuentes utilizaron técnicas de ingeniería social para engañar a los usuarios para que descargaran un protector de pantalla malicioso. Este protector de pantalla en realidad estaba robando información de la víctima de la computadora, incluida la información de la billetera y el intercambio de criptomonedas.

Para concluir sobre las carteras de software que se ejecutan en computadoras:

  • En la mayoría de los casos, las carteras de software que se ejecutan en las computadoras protegen la semilla del usuario mediante una contraseña.
  • El control de acceso a estos archivos de billetera se basa principalmente en la seguridad de la computadora. En la práctica, es difícil proteger las computadoras del malware y, a medida que las criptomonedas se generalicen, los ataques contra las billeteras se volverán cada vez más sofisticados.
  • Usar billeteras de software de este tipo para proteger los activos digitales no es una buena idea. Cualquier malware especializado podrá obtener los archivos de la billetera y encontrar las contraseñas fuera de línea, u obtener la contraseña a través de un registrador de teclas.
Carteras de software en un teléfono inteligente

Los teléfonos inteligentes con Android e iOS ofrecen funciones de seguridad predeterminadas que no se usan mucho en los sistemas operativos de escritorio.

Los sistemas operativos móviles ofrecen protección de datos de aplicaciones y usuarios. En particular, los entornos limitados de aplicaciones son obligatorios para todas las aplicaciones. Este no es el caso, por ejemplo, en Windows: por defecto, cualquier aplicación puede acceder a los datos del usuario.

Por lo tanto, una aplicación malintencionada no puede leer datos de otra aplicación, excepto si:

  • Encuentra una vulnerabilidad en esa aplicación.
  • O se las arregla para escalar los privilegios, por ejemplo, al explotar una vulnerabilidad del kernel que le permite obtener acceso de root al sistema.

Desafortunadamente, tales ataques existen. Son mucho más fáciles en versiones obsoletas de Android e iOS, y en dispositivos más antiguos o baratos donde el código de terceros suele ser menos seguro.

En un sistema operativo actualizado, estos ataques son más difíciles pero no remotamente inviables. Por ejemplo, Ian Beer mostró un ataque de clic cero extremadamente impresionante en iOS 13.5 en diciembre de 2020. Guang Gong presentó un cadena de explotación para rootear de forma remota una amplia gama de dispositivos Android basados ​​en Qualcomm en junio de 2020. Y, hace dos semanas, Historias prohibidas dio a conocer que NSO Group usó una cadena de explotación para apuntar a dispositivos iOS y Android recientes usando vulnerabilidades de día cero.

Los atacantes menos sofisticados pueden usar vulnerabilidades locales que les permiten extraer datos de billetera de una aplicación maliciosa. Corredores de vulnerabilidades como Zerodium pagan hasta $200,000 para una escalada de privilegios para rootear en Android e iOS, pero hasta $ 1,500,000 para ataques remotos.

Estudiamos un par de billeteras Android/iOS. Su seguridad depende de la propia aplicación, pero también de las funciones de seguridad del sistema operativo subyacente. Por supuesto, cuando se derrota la seguridad del sistema operativo, la aplicación deja de ser segura.

Comúnmente se utilizan dos métodos para proteger la semilla:

  • La protección de contraseña – los datos de la billetera están protegidos por una contraseña ingresada por el usuario. El diseño es el mismo que para las carteras de escritorio. En la práctica, los datos son más difíciles de extraer que de una computadora, ya que recuperar datos de una aplicación maliciosa es técnicamente más difícil, por las razones explicadas anteriormente. Sin embargo, recuperar la contraseña una vez que los datos han sido robados es en la práctica más fácil: ingresar contraseñas complejas en teléfonos móviles es tedioso, por lo que los usuarios tienden a elegir contraseñas más simples. Además, los mecanismos de derivación de claves (utilizados para crear una clave a partir de una contraseña) en los dispositivos móviles suelen ser más fáciles de descifrar, ya que suelen ser más ligeros por motivos de rendimiento.
  • Coinomi y Metamask son ejemplos de tales billeteras.

En el siguiente video, mostramos otra aplicación de juguetes desarrollada para este artículo. Es un malware disfrazado como un widget de teletipo de Bitcoin falso. El malware explota una vulnerabilidad conocida en un dispositivo sin parches para obtener un acceso de raíz en el dispositivo y filtrar la semilla cifrada a un servidor remoto. Luego, el servidor aplica fuerza bruta a la contraseña para descifrar la semilla.

Este método no es específico de una billetera. Se puede adaptar (más o menos) fácilmente a cualquier billetera protegida con contraseña. Aquí está el mismo ejemplo con Coinbase Wallet:

[Contenido incrustado]

  • Seguridad basada en Android Keystore (o iOS Keychain) – En este caso, los datos de la billetera se cifran con una clave de cifrado almacenada en el almacén de claves de Android (llavero de iOS). Estos servicios se diseñaron inicialmente para almacenar claves de cifrado de forma segura, y muchas aplicaciones las utilizan para generar una clave que cifrará todos los datos confidenciales del usuario. Las aplicaciones que utilizan Keystore implementan el siguiente mecanismo:
    • La aplicación le pide al almacén de claves que genere una clave de cifrado para un identificador determinado. Keystore genera la clave y la almacena de forma segura.
    • Cuando la aplicación quiere cifrar o descifrar un blob, envía el blob junto con el identificador de clave al almacén de claves.
    • Finalmente, el almacén de claves verifica si la aplicación tiene realmente los derechos para usar esta clave y luego envía los datos de salida a la aplicación.

Con este modelo, la aplicación no puede saber el valor de la clave, pero puede usarla. También es posible asociar controles de acceso adicionales a la clave: por ejemplo, el acceso a la clave puede estar condicionado a una autenticación del usuario (solicitud de PIN o patrón de desbloqueo).

Este mecanismo puede proporcionar seguridad adicional, en comparación con la protección basada en contraseña. De hecho, en los teléfonos recientes, Keystore está respaldado por un entorno de ejecución confiable (TEE) o, a veces, por un elemento seguro.

Eso significa que un atacante con privilegios de raíz no podrá extraer claves de cifrado del almacén de claves. No obstante, podrán utilizar Keystore como un oráculo de descifrado y cifrar o descifrar los datos que deseen.

Keystore ofrece cifrado, pero también servicios de firma. Entonces, ¿podría una billetera proteger sus claves de cifrado, haciéndolas difíciles de extraer? Lamentablemente, la respuesta es no: Las billeteras de software no usan Keystore para firmar transaccionesLa aplicación siempre manipula las claves privadas en texto sin formato.

Esto se debe a una sencilla razón: KeyStore y KeyChain ofrecen servicios genéricos de firma y cifrado, pero no admiten la criptografía utilizada en las criptomonedas. Por ejemplo, KeyStore implementa ECDSA Signature pero solo en curvas NIST definidas en FIPS 186-4 (P-224, P-256, P-384 y P-521). Bitcoin usa otra curva, secp256k1, que aún no es compatible.

En resumen, Keystore y Keychain son buenos servicios para proteger claves secretas y privadas. Pueden ofrecer cierta seguridad mediante el cifrado de datos confidenciales: algunas clases de vulnerabilidades (lectura arbitraria de archivos, por ejemplo) serán abordadas por el cifrado Keystore. Sin embargo, si una escalada de privilegios raíz no es suficiente para extraer los valores clave de un almacén de claves respaldado por hardware, es suficiente para descifrar datos confidenciales. Un atacante capaz de instrumentar la aplicación puede recuperar sus secretos.

Para concluir sobre las billeteras móviles:

  • El mecanismo de aislamiento entre aplicaciones proporcionado por iOS/Android eleva el nivel de seguridad en comparación con una billetera de software que se ejecuta en una computadora. El atacante necesita primero una escalada de privilegios para acceder a los datos de la aplicación. Esto es factible en dispositivos obsoletos. Los atacantes habilidosos (Ian Beer lo hizo solo en 6 meses pero... es Ian Beer) también pueden hacerlo en dispositivos parcheados recientes.
  • Los servicios de protección de claves (KeyStore, KeyChain) podrían agregar una capa adicional de seguridad para proteger los secretos en reposo. Sin embargo, como no admiten algoritmos criptográficos para aplicaciones de criptomonedas, aún se puede extraer la clave.
  • En todos los casos, un atacante con acceso de raíz puede recuperar la semilla en reposo, cuando se usa, o aprovechar los derechos del usuario para vaciar la billetera usando la billetera de software como un oráculo.

Aquí hay un último ejemplo de un spyware de juguete dirigido a la billetera Blockchain.com (aunque esto podría realizarse en muchas otras billeteras con la misma facilidad). Se instala de forma remota y monitorea la billetera. Una vez que el usuario se ha autenticado con su huella digital, la clave de cifrado se desbloquea y los datos de la billetera se descifran. El spyware instrumenta la aplicación para recuperar esta clave de cifrado. Luego extrae la clave y los datos de la billetera a un servidor remoto:

[Contenido incrustado]

Conclusión

Como conclusión, las billeteras de software tienen diferentes niveles de seguridad. Sin embargo, su modelo de amenaza no cubre el caso de un malware que se ejecuta en el sistema operativo con una escalada de privilegios. Esto es por diseño: la aplicación de billetera no puede ser más segura que el sistema operativo en el que se ejecuta.

  • El mecanismo de aislamiento entre aplicaciones proporcionado por iOS/Android eleva el nivel de seguridad en comparación con una billetera de software que se ejecuta en una computadora. El atacante necesita primero una escalada de privilegios para acceder a los datos de la aplicación.
  • Los servicios de protección de claves (KeyStore, KeyChain) podrían agregar una capa adicional de seguridad para proteger los secretos en reposo. Sin embargo, como no soportan algoritmos criptográficos para aplicaciones de criptomonedas, las claves deben manipularse directamente desde la aplicación, por lo que ofrecen una protección limitada.
  • En todos los casos, un atacante con acceso de raíz puede recuperar la semilla en reposo, cuando se usa, o aprovechar los derechos del usuario para vaciar la billetera usando la billetera de software como un oráculo.

Sello de tiempo:

Mas de Libro mayor