En este artículo presentamos una nueva e innovadora forma de abordar algunos de los problemas de seguridad que aparecen en las redes de blockchain. Es evidente que el blockchain ofrece seguridad, nadie puede manipular los datos, pero hay “huecos” de seguridad que aparecen cuando los nodos se exponen sin consideraciones. Para lograr ese propósito es posible escribir contratos inteligentes que mantengan un estado actualizado de los nodos permitidos para conectarse y utilizar esa información, actualizando automáticamente nuestras reglas de firewall casi en tiempo real.
Vamos a ir analizando de lo particular a lo general. Empezaremos con la implementación más básica para automatizar las reglas del firewall, a través de contratos inteligentes en un nodo simple. Finalmente tendremos un enfoque general sobre cómo plantear la seguridad a nivel de administración (proveedores de la nube/en local). Este enfoque no pretende sustituir los esquemas actuales utilizados por las organizaciones para asegurar sus entornos, sino que es una contribución para mejorar la seguridad aprovechando la confianza que ofrecen las redes blockchain.
Aunque todo lo mencionado hasta aquí es un concepto casi general, ejemplificaremos la automatización de reglas de firewall a través de contratos inteligentes escritos en Ethereum y también explicaremos un componente intermedio entre la red Ethereum y las reglas de firewall.
Vamos a delimitar nuestro viaje centrándonos en las redes de Ethereum. Las redes con permisos añaden una capa de seguridad a nivel de aplicación, ya que permiten controlar quién puede unirse a la red.
Las implementaciones de clientes de Ethereum como Parity y Hyperledger Besu tienen dos formas de crear una red con permisos:
El análisis de las redes actuales con permisos muestra que los nodos son accesibles a nivel de aplicación, por lo que cualquier otro nodo, aunque no esté en el contrato inteligente, puede alcanzar los puertos del nodo P2P e intentar atacarlo. Incluso cuando el nodo no acepta conexiones distintas a las registradas en el contrato inteligente, los malos actores pueden realizar ataques de spam en los puertos expuestos P2P.
Para proteger el acceso a nuestros nodos se puede optar por utilizar reglas de firewall, lo que añade una capa de seguridad para que sólo los nodos autorizados puedan llegar a nuestros nodos de Ethereum.
Las reglas del firewall se pueden aplicar en:
Las reglas de firewalls añaden más seguridad, pero también más complejidad a nuestra configuración, ya que tienen que ser actualizadas manualmente.
Controlar las reglas del firewall manualmente puede hacer que se pierda la sincronización en algunos protocolos de consenso, por ejemplo, IBFT2.0 requiere un número mínimo de validadores activos (>=2/3 de los validadores de la lista), para poder seguir añadiendo bloques. La comunicación entre esos validadores debe estar garantizada. En este caso, si se añaden nuevos validadores a la red y las reglas del firewall de otros validadores no se han actualizado para permitir la conexión con esos nuevos, la red podría detenerse debido a un fallo de comunicación entre ellos.
Desde nuestro punto de vista, tener redes con permisos no es suficiente en términos de seguridad. Por otra parte, utilizar reglas de firewall manualmente tiene sus propios problemas.
Los nodos deberían tener una forma de protegerse de una variedad de ataques que podrían realizarse cuando actores maliciosos llegan a nuestros nodos a través de agujeros de seguridad. Podría ser útil tener una forma dinámica de manejar las reglas del firewall.
Hasta ahora, hemos analizado las redes con permisos y las reglas de firewall. En esta sección vamos a mostrar cómo utilizar los contratos inteligentes permissioning para aumentar la seguridad a nivel de administrador del sistema, para garantizar el alivio del servicio de Ethereum y aumentar la protección a nuestro nodo. Para conseguir este propósito es posible automatizar las reglas del firewall a través de contratos inteligentes. En este escenario los nodos pueden utilizar el contrato inteligente como fuente de confianza a la hora de modificar las reglas. En la siguiente sección vamos a aplicar contratos inteligentes (a través de eventos emitidos), para actualizar automáticamente las reglas del firewall.
El siguiente diagrama muestra cómo los administradores de una red con permisos pueden actualizar los nodos permitidos para unirse a una red.
Hasta aquí hemos visto diagramas generales, ahora vamos a comprobar una implementación particular. En este diagrama el servicio daemon es notificado por medio de eventos emitidos por el contrato inteligente de permisos. Tan pronto como esos eventos llegan el servicio daemon actualiza las reglas del firewall en la máquina de alojamiento donde vive el Node.x. Si tienes curiosidad por saber cómo se ha implementado este caso en particular, puedes revisar el código aquí.
El diagrama anterior puede ampliarse. Por ejemplo, en lugar de actualizar únicamente las reglas del Firewall de la máquina de alojamiento local, el servicio daemon puede actualizar directamente las reglas del Firewall de la nube/en las instalaciones. De esta manera, te aseguras de que tu nodo está conectado a nodos de confianza en la red. Cualquier actor malicioso no podrá llegar a tus nodos de Ethereum, porque los nodos están protegidos a un nivel superior.
En este artículo hemos mostrado cómo es posible automatizar las reglas del firewall aprovechando las tecnologías blockchain y los contratos inteligentes como fuente de confianza para la seguridad.
También hemos analizado cómo podemos tener nodos asegurados y seguir pudiendo interactuar con otros nodos de confianza (otras organizaciones).
Por último, ya no es necesario preocuparse por las reglas del firewall, porque éstas pueden ser actualizadas automáticamente por la red de blockchain.