
BlockChain Security Construction
En este artículo, presentamos principalmente varios aspectos de la auditoría de cadenas públicas que merecen atención. Para los auditores de seguridad y los desarrolladores de cadenas públicas, este es un proyecto digno de referencia y reflexión.
Antes de presentar la construcción del sistema de cadena pública, veamos la arquitectura de blockchain:
Era Blockchain 1.0:
Arquitectura: como se muestra en la siguiente figura
Productos representativos: bitcoin, reborn coin, dogcoin, Leyte coin, MasterCard coin, etc.

Era Blockchain 2.0:
Arquitectura: como se muestra en la siguiente figura
Productos representativos: Ethereum, lisk, hyperledger, etc.
Principales cambios:

Era Blockchain 2.0
Arquitectura: como se muestra en la siguiente figura
Productos representativos: EOS, VaR, AE, ash, ELA, dfinity
Principales cambios: los escenarios de aplicación de blockchain en todos los ámbitos fuera de la industria financiera pueden satisfacer una lógica de negocio más compleja

A continuación, haremos una breve introducción a los problemas que merece la pena considerar en la construcción de la seguridad de la cadena pública de blockchain, de acuerdo con la arquitectura de blockchain. Aproximadamente el 75% de los problemas han causado problemas de seguridad en la cadena pública, que también son algunos de los puntos que merecen atención en la auditoría de seguridad de la cadena pública. Aquí, los presentamos en forma de preguntas para suscitar nuestra reflexión. Si desea profundizar en el debate, puede hacerlo directamente en issue:
La capa de datos es la tecnología de nivel inferior, y sus funciones principales son el almacenamiento de datos, la implementación de cuentas y transacciones y la seguridad. El almacenamiento de datos se basa principalmente en el árbol de Merkle, que se realiza mediante la estructura de bloques y cadena. La mayoría se persisten mediante bases de datos kV, como bitcoin y leveldb adoptados por Ethereum.
La capa de datos plantea los siguientes puntos dignos de reflexión:
El objetivo principal de la capa de red es realizar la interacción de información entre los nodos de la red blockchain. La esencia de blockchain es una red entre pares (P2P). Cada nodo puede recibir información y también producir información. Los nodos mantienen la comunicación manteniendo una blockchain común. En la red blockchain, cada nodo puede crear un nuevo bloque. Una vez creado el nuevo bloque, se notificará a otros nodos mediante difusión. A su vez, otros nodos verificarán el nodo. Cuando más del 51% de los usuarios de la red blockchain superen la verificación, el nuevo bloque se añadirá a la cadena principal.
Hay varios puntos que merece la pena considerar sobre la capa de red:
¿Es razonable el diseño del algoritmo de descubrimiento de nodos de la cadena pública?
¿Es razonable el diseño de los nodos de la cadena pública?
¿Es razonable el diseño del mecanismo de sanción?
¿Es razonable el diseño del protocolo de comunicación?
¿Es razonable el diseño de procesamiento de solicitudes de los nodos de la cadena pública?
¿Hay un límite en el tamaño del paquete de procesamiento de solicitudes?
¿Es razonable el diseño del mecanismo de comunicación de transacciones de la cadena pública?
¿Es razonable el mecanismo de sincronización de datos de bloque?
¿Es razonable el diseño de la lógica de procesamiento de transacciones?
La capa de consenso permite que nodos altamente dispersos alcancen un consenso sobre la validez de los datos de bloque en un sistema descentralizado. Cada blockchain en funcionamiento necesita un algoritmo de consenso para garantizar la validez y el orden de salida de los bloques. Los algoritmos de consenso comunes incluyen pow, POS, dpos, Poa, POC, etc.
A nivel de consenso, debemos considerar los siguientes puntos:
¿Es seguro el diseño del algoritmo de consenso de la cadena pública?
¿Es razonable el diseño de la verificación de consenso de la cadena pública?
¿Es razonable el diseño de la confiscación por consenso de la cadena pública?
¿Es razonable el diseño de la tarifa de servicio de la cadena pública?
¿Es razonable el diseño de la minería de la cadena pública?
¿Es razonable el diseño de ajuste dinámico de la dificultad del bloque?
¿Es razonable el diseño de la lógica de verificación de la dificultad del bloque?
¿Diseño de reorganización de cadena, restablecimiento de cadena, bifurcación de cadena, etc.?
El propósito de la capa de incentivos de la cadena pública es proporcionar ciertas medidas de incentivo para animar a los nodos a participar en la verificación de seguridad de la blockchain, y garantizar el equilibrio y el desarrollo saludable del ecosistema blockchain. En la cadena común descentralizada, es necesario establecer el mecanismo de incentivo correspondiente para animar a los nodos contables participantes que cumplen las reglas, y establecer el mecanismo de sanción para castigar a los nodos contables participantes que no cumplen las reglas. La capa de incentivos de blockchain introduce factores económicos en el sistema tecnológico de blockchain, lo que mejora la eficiencia de la cooperación organizativa y el intercambio de valor dentro del ecosistema. El mecanismo de incentivos de la cadena pública es un mecanismo importante para garantizar el desarrollo virtuoso de blockchain.
Hay varios puntos que merecen nuestra consideración sobre el nivel de incentivos:
¿Es razonable el diseño del mecanismo de emisión de la cadena pública?
¿Es razonable el diseño del mecanismo de sanción de la cadena pública?
La capa de contratos encapsula varios tipos de códigos de script y algoritmos del sistema blockchain, así como los contratos inteligentes más complejos que se generan a partir de ellos. Si los tres niveles de datos, red y consenso, como "máquina virtual" subyacente de la blockchain, asumen respectivamente las funciones de representación de datos, difusión de datos y verificación de datos, la capa de contratos es la lógica de negocio y los algoritmos basados en la máquina virtual de blockchain, que es la base para lograr la programación flexible y la operación de datos del sistema blockchain. La mayoría de las criptomonedas digitales, incluido bitcoin, utilizan código de script simple no Turing completo para programar y controlar el proceso de transacción, que también es el rudimento del contrato inteligente. Con el desarrollo de la tecnología, hay lenguajes de script Turing completos como Ethereum que pueden realizar contratos inteligentes más complejos y flexibles. Blockchain puede soportar muchas aplicaciones de sistemas financieros y sociales macro.
Debemos considerar los siguientes puntos sobre la capa de contratos:
¿Diseño de seguridad de la máquina virtual de contratos?
¿Despliegue/ejecución/interfaz de contratos?
¿Seguridad relacionada con los contratos inteligentes?
La capa de aplicación encapsula varios escenarios de aplicación y casos de uso de blockchain, similar a varios programas de software en los ordenadores. Es un producto que los usuarios comunes pueden usar realmente de forma directa, y también puede entenderse como el navegador de los productos de arquitectura B/S.
Debemos considerar los siguientes puntos sobre la capa de aplicación (solo cadena pública, no billeteras App/Exchange/DEFI, etc.):
¿Diseño de la lógica CRUD de la cuenta de billetera?
¿Comprobar los permisos de importación y exportación de la billetera?
¿Diseño de la complejidad de la contraseña de la billetera?
¿Comprobar la validez de la dirección de la cuenta de la billetera?
¿La interfaz RPC pública necesita una red pública externa?
¿Están claramente divididos los permisos de la interfaz RPC de la cadena pública?
¿La interfaz RPC pública tiene operaciones de clase sensible?
¿La interfaz RPC pública maneja excepciones?
¿El límite máximo de procesamiento de datos de la interfaz RPC de la cadena pública?
¿Codificación y decodificación de datos de solicitudes de la interfaz RPC de la cadena pública?
¿Está habilitado SSL para el procesamiento de solicitudes RPC de la cadena pública?
¿Diseño del procesamiento de solicitudes de alta concurrencia en la cadena pública?
¿Establecer el número máximo de conexiones?
¿La interfaz Web UI de la cadena pública permite el acceso remoto?
¿Hay una vulnerabilidad de tipo web en la interfaz webui de la cadena pública?
¿La interfaz webui de la cadena pública permite almacenar información de contraseñas localmente?
Es cierto que no existe una "capa de código" en la cadena pública. Aquí, el autor la propone principalmente para clasificar los problemas que pueden necesitar considerarse en el proceso de desarrollo de la cadena pública:
Características del lenguaje de desarrollo de la cadena común, como readall (), características de append en la lectura de datos del lenguaje go
Versión del lenguaje de desarrollo de la cadena pública, por ejemplo, algunas versiones del lenguaje go tienen ejecución remota de comandos
Codificación de especificaciones de desarrollo de la cadena pública, como puntero nulo, segmentación, manejo de excepciones y otras operaciones
Procesamiento de cifrado y descifrado de la cadena pública, como codificación y decodificación de alta complejidad sin verificación de longitud
Procesamiento de conversión de tipos de datos, como hextobyte, integer. Parseint(), etc.
Diseño de lógica de negocio básica, por ejem
Además de los problemas anteriores dignos de consideración a nivel de arquitectura de blockchain, también debemos considerar los siguientes problemas de seguridad:
¿Están cifrados los datos almacenados?
¿Son razonables los permisos de archivo?
¿Es seguro el entorno de ejecución?
¿El nodo no se inicia como root?
¿Hay algún servicio web vulnerable en el lado del nodo?
¿Hay alguna configuración insegura en el lado del servidor del nodo?
¿Hay una vulnerabilidad de acceso no autorizado en el lado del servidor del nodo?
¿Se ha filtrado la contraseña de la cuenta SSH en el lado del servidor del nodo?
Ataque del 51%
Bifurcación dura de la cadena común
Secuestro de cómputo (gusanos infectan máquinas mineras)
Si se utilizan bibliotecas de terceros con vulnerabilidades, como Jackson databind, fastjson, etc.
Uso de middleware vulnerable, como versiones inferiores de tendermint
¿El modo de cadena cruzada es fiable y apropiado?
¿Esquema de implementación de cadena cruzada isomórfica y cadena cruzada heterogénea?
Repetir los problemas de seguridad de la sección anterior
Participa directamente en la discusión de los problemas relacionados en issue.