Logo
Nuevos usuarios de RPC: 35% de descuento el primer mesVer oferta
OnFinality Learn
Infraestructura y Operaciones11 min de lectura

¿Qué es la seguridad Web3? Un modelo práctico para auditar, probar y monitorear sistemas on-chain

Una definición operativa de la seguridad Web3, el modelo de amenazas por capas que la sustenta y procedimientos reproducibles para auditar, probar y monitorear contratos inteligentes, dApps y la infraestructura RPC de la que dependen.

TL;DR

La seguridad Web3 es la práctica de proteger activos on-chain, contratos inteligentes, billeteras y la infraestructura que conecta a los usuarios con las blockchains frente a pérdidas, manipulación y control no autorizado. A diferencia de la seguridad de aplicaciones tradicional, debe tener en cuenta despliegues inmutables, mempools públicas, economías adversariales y límites de confianza que se extienden a proveedores RPC y puentes. Este artículo define la disciplina, la desglosa en capas y ofrece procedimientos reproducibles para auditar código, probar un despliegue y monitorear la ruta RPC de la que depende cada transacción. Separa el comportamiento documentado de las recomendaciones y de las mediciones que debe ejecutar en su propia pila.

Una definición operativa y alcance

La seguridad Web3 es el conjunto de controles, revisiones y prácticas de monitoreo que protegen los sistemas basados en blockchain contra accesos no autorizados, extracción de valor e interrupción del servicio. Abarca contratos inteligentes, aplicaciones descentralizadas (dApps), billeteras y material de claves, puentes y oráculos, y la infraestructura de nodos y RPC que transporta las lecturas y escrituras a la cadena.

El alcance difiere de Web2 en tres aspectos. Primero, los contratos desplegados a menudo son inmutables o solo actualizables mediante gobernanza, por lo que un error no siempre se puede parchear rápidamente. Segundo, todo el estado y los datos de llamada son públicos, lo que significa que los atacantes pueden simular exploits contra el estado en vivo antes de comprometer capital. Tercero, el límite de confianza no termina en su servidor: el endpoint RPC que utiliza su frontend puede censurar, retrasar o informar mal los datos si está comprometido o mal configurado.

Este artículo trata la seguridad Web3 como un ciclo de vida: revisión de diseño, auditoría de código, pruebas adversariales, endurecimiento del despliegue y monitoreo continuo. No sustituye una auditoría profesional; le proporciona el modelo mental y los pasos de diagnóstico para prepararse para una y verificar su propio entorno.

  • En alcance: contratos, frontends de dApps, billeteras, claves, oráculos, puentes, nodos, acceso RPC.
  • Fuera de alcance aquí: cumplimiento legal y regulatorio, diseño de economía de tokens y seguridad física.
  • Supuesto: usted controla o puede inspeccionar los contratos y la ruta RPC utilizada por su aplicación.

El modelo de amenazas por capas

Una forma útil de razonar sobre la seguridad Web3 es separarla en capas, porque cada capa tiene atacantes diferentes, modos de falla diferentes y métodos de verificación diferentes. Tratar la 'seguridad Web3' como un solo problema lleva a los equipos a invertir en exceso en una capa, generalmente auditorías de contratos inteligentes, mientras dejan desatendida la gestión de claves o la disponibilidad de RPC.

Las capas a continuación son un modelo mental, no un estándar formal. Mapee su propio sistema sobre ellas y anote qué capas puede probar directamente y cuáles dependen de terceros.

  • Protocolo y consenso: corrección a nivel de cadena, supuestos de finalidad y comportamiento de reorganización.
  • Lógica de contratos inteligentes: control de acceso, aritmética, reentrancia, entradas de oráculos, autoridad de actualización.
  • Diseño económico: exposición a préstamos flash, incentivos de liquidación, superficies de manipulación de precios.
  • Cliente y billetera: flujos de firma, simulación de transacciones, resistencia al phishing, almacenamiento de claves.
  • Infraestructura: salud del nodo, confianza en el proveedor RPC, límites de velocidad, conmutación por error y registro.
  • Operacional: respuesta a incidentes, rotación de claves, runbooks de despliegue y alertas de monitoreo.

Por qué las auditorías no equivalen a seguridad

Una auditoría de contrato inteligente es una revisión puntual del código frente a clases de vulnerabilidad conocidas y el comportamiento previsto del proyecto. Es valiosa, pero responde a una pregunta limitada: ¿encontraron los revisores problemas en este código en este commit? No prueba la ausencia de errores, no cubre su frontend ni su ruta RPC, y no protege contra el compromiso de claves o ataques de gobernanza.

El alcance documentado de la auditoría generalmente enumera el hash del commit, los archivos revisados y los supuestos sobre contratos externos. Lea ese alcance antes de tratar una auditoría como garantía. Si su despliegue difiere del commit auditado, o si agregó una ruta de actualización después de la auditoría, la garantía no se transfiere automáticamente.

Recomendación: trate las auditorías como un control entre varios, y combínelas con pruebas y monitoreo continuos. La medición que debe ejecutar es si su bytecode desplegado coincide con la fuente auditada y si su monitoreo detectaría una salida anómala de fondos.

Requisitos previos para una revisión de seguridad reproducible

Antes de ejecutar cualquier procedimiento a continuación, confirme que cuenta con lo siguiente. Estos son supuestos, no garantías, y debe registrarlos para que los resultados puedan reproducirse.

Mantenga una nota breve del entorno con el ID de cadena, el número de bloque, las direcciones de los contratos y las versiones de las herramientas. Los hallazgos de seguridad solo son significativos en relación con un estado específico.

  • Un RPC_URL de fork local o testnet que usted controle, no un endpoint público compartido.
  • El hash de commit exacto y la configuración del compilador utilizados para el despliegue.
  • Acceso de lectura al bytecode desplegado y al código fuente verificado en un explorador de bloques.
  • Una clave separada de bajo valor para cualquier transacción que transmita durante las pruebas.
  • Un destino de registro para las mediciones de latencia y errores de RPC.

Procedimiento: verificación del código desplegado y control de acceso

La primera verificación reproducible es si el contrato desplegado coincide con lo que auditó y quién posee roles privilegiados. Ejecute esto contra un fork o nodo de archivo para que los resultados sean estables.

El script a continuación lee el bytecode y los captadores de roles comunes. No asume un estándar de contrato específico; ajuste los selectores de funciones a su ABI. Reemplace RPC_URL y CONTRACT_ADDRESS con sus propios valores.

import json, urllib.request

RPC_URL = "RPC_URL"
CONTRACT_ADDRESS = "0xYourContract"

def rpc(method, params):
    body = json.dumps({"jsonrpc":"2.0","id":1,"method":method,"params":params}).encode()
    req = urllib.request.Request(RPC_URL, data=body, headers={"Content-Type":"application/json"})
    with urllib.request.urlopen(req, timeout=10) as r:
        return json.loads(r.read())["result"]

code = rpc("eth_getCode", [CONTRACT_ADDRESS, "latest"])
print("bytecode length:", len(code))

# owner() selector 0x8da5cb5b
owner = rpc("eth_call", [{"to": CONTRACT_ADDRESS, "data": "0x8da5cb5b"}, "latest"])
print("owner():", owner)

# Compare the returned bytecode hash to the audited build artifact offline.
print("compare this bytecode to your audited artifact before trusting the deployment")

Procedimiento: pruebas adversariales con un fork

Las pruebas de penetración en Web3 se centran en si un atacante con privilegios limitados puede mover valor o cambiar el estado. Un fork le permite reproducir el estado en vivo e intentar exploits sin gastar fondos reales. El objetivo no es enumerar cada vulnerabilidad sino probar los supuestos específicos de los que depende su diseño: que solo el propietario puede retirar, que los precios de los oráculos no pueden empujarse dentro de un bloque y que las protecciones de reentrancia cubren cada llamada externa.

Utilice un framework como Foundry o Hardhat contra un RPC_URL bifurcado. El ejemplo a continuación es un esbozo de prueba estilo Foundry; es ilustrativo y debe adaptarse a las interfaces de su contrato.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "forge-std/Test.sol";

interface IVault {
    function deposit() external payable;
    function withdraw(uint256 amount) external;
    function owner() external view returns (address);
}

contract VaultForkTest is Test {
    IVault vault = IVault(0xYourContract);
    address attacker = address(0xBEEF);

    function setUp() public {
        vm.createSelectFork("RPC_URL");
        vm.deal(attacker, 10 ether);
    }

    function test_nonOwnerCannotWithdraw() public {
        vm.prank(attacker);
        vm.expectRevert();
        vault.withdraw(1 ether);
    }

    function test_ownerIsExpectedAddress() public view {
        assertEq(vault.owner(), 0xExpectedOwner);
    }
}

Medición de la ruta RPC: latencia, errores y consistencia

Cada lectura y escritura de dApp pasa por un endpoint RPC, por lo que la ruta RPC es parte de su superficie de seguridad. Un endpoint lento o inconsistente puede causar saldos obsoletos, liquidaciones fallidas o transacciones que parecen confirmadas pero no lo están. No puede confiar en las afirmaciones del proveedor; mida su propia ruta.

Ejecute una pequeña sonda que registre la latencia y la tasa de errores para los métodos que su aplicación realmente utiliza, como eth_blockNumber, eth_getBalance y eth_call. Compare al menos dos endpoints, incluido uno de respaldo, y registre los resultados en una tabla con columnas para etiqueta del endpoint, método, latencia p50, latencia p95, recuento de errores y altura de bloque observada. No publique cifras que no haya medido usted mismo.

La sonda curl a continuación es un punto de partida. Reemplace RPC_URL con su endpoint y repítala según una programación para construir una línea base.

for i in $(seq 1 20); do
  curl -s -o /dev/null -w "%{time_total}\n" \
    -X POST RPC_URL \
    -H "Content-Type: application/json" \
    -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
done

Resultados de verificación esperados

Después de ejecutar los procedimientos anteriores, debería poder afirmar, con evidencia, cuatro cosas: el hash del bytecode desplegado coincide con su artefacto auditado; los roles privilegiados están en manos de las direcciones que espera; sus pruebas adversariales pasan o producen un hallazgo documentado; y su sonda RPC arroja una línea base de latencia y errores que puede comparar más adelante.

Si alguno de estos no se puede confirmar, trátelo como un riesgo abierto en lugar de un aprobado. Una respuesta faltante de owner(), una discrepancia de bytecode o una sonda con errores intermitentes son señales para investigar antes del despliegue o antes de aumentar el valor en riesgo.

Solución de problemas comunes

La mayoría de las fallas durante una revisión de seguridad Web3 caen en unas pocas categorías. La guía a continuación separa los síntomas de las causas probables para que pueda diagnosticar sin adivinar.

Si sus pruebas de fork se comportan de manera diferente a la mainnet, verifique que el número de bloque del fork esté fijado y que el endpoint RPC admita estado de archivo. Si eth_call devuelve datos vacíos, verifique el selector de función y que el contrato exista en esa dirección en la cadena bifurcada. Si su sonda de latencia muestra alta varianza, pruebe si el endpoint le está limitando la velocidad o enrutando entre regiones.

Para la selección de endpoints y comparaciones de proveedores, utilice el Asistente RPC en lugar de codificar una elección en su runbook de seguridad. La decisión concreta del proveedor es independiente de la metodología.

  • Discrepancia de bytecode: confirme la versión del compilador, la configuración del optimizador y los argumentos del constructor.
  • La verificación de roles falla: confirme que está leyendo la cadena y el bloque correctos.
  • La prueba de fork se revierte inesperadamente: verifique las aprobaciones de tokens y los saldos en el bloque fijado.
  • Los errores de la sonda aumentan: inspeccione los códigos de estado HTTP y los encabezados de límite de velocidad antes de culpar a la cadena.

Limitaciones y compensaciones

Ningún control único cubre la seguridad Web3. Las auditorías están limitadas por el alcance y el tiempo; las pruebas de fork solo ejercitan las rutas que usted escribe; el monitoreo solo captura lo que usted instrumenta. La descentralización en sí misma introduce compensaciones: los contratos inmutables reducen el riesgo de actualización pero eliminan la capacidad de parchear rápidamente, mientras que los proxies actualizables agregan una clave de administrador que se convierte en un objetivo de alto valor.

La redundancia de RPC mejora la disponibilidad pero agrega complejidad de configuración y puede introducir problemas de consistencia si los endpoints se retrasan en alturas diferentes. La gestión de claves con firmantes de hardware mejora la seguridad pero ralentiza la respuesta a incidentes. Documente estas compensaciones explícitamente para que los revisores puedan cuestionarlas.

Finalmente, las mediciones son específicas del entorno. La latencia, las tasas de error y los costos de gas que observe en un proveedor o región no se transferirán sin cambios a otro. Vuelva a ejecutar los procedimientos cada vez que cambie la infraestructura.

Próximos pasos: de la revisión al monitoreo continuo

Una vez completada la revisión inicial, pase la seguridad de un evento único a un proceso continuo. Instrumente sus contratos para detectar salidas anómalas de fondos, monitoree los cambios de roles privilegiados y alerte sobre picos en la tasa de errores de RPC. Mantenga el commit auditado, el hash del bytecode desplegado y los titulares de roles actuales en un solo lugar para que la deriva sea visible.

Para el lado de la infraestructura, revise cómo los nodos dedicados y el RPC gestionado difieren en confianza y carga operativa en la guía de alojamiento de nodos blockchain, y compare las opciones de endpoints a través de las páginas de servicio RPC y precios de RPC. Si necesita una recomendación concreta de proveedor para una red específica, pregunte al Asistente RPC usando un slug como mejor proveedor RPC para proyectos Web3.

Finalmente, explore las redes compatibles para confirmar las cadenas de las que depende, y considere nodos dedicados cuando su modelo de seguridad requiera un rendimiento predecible y aislamiento del tráfico compartido.

Nunca te preocupes por la infraestructura nuevamente

OnFinality elimina la carga pesada de DevOps para que puedas construir de forma más inteligente y rápida.

Comenzar