ETH Kipu
  • Ethereum Developer Pack
  • Módulo 1
    • Intro a Smart Contracts
      • Fundamentos de Blockchain
        • Antecedentes
        • Bitcoin
        • Qué es Blockchain
        • Conceptos Clave en Blockchain
        • Cómo funciona la Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • El nuevo Internet
        • Web 3
        • Elementos Fundamentales
        • Impacto de Ethereum en Diversos Sectores
      • Wallets
        • Componentes de una wallet
        • Tipos de Wallet
        • Códigos mnemónicos
      • Ethereum 101
        • Smart Contracts
        • Cuentas
          • Tipos de cuentas
          • Contenido de cuentas
        • Transacciones
          • Componentes
          • Ciclo de vida
        • Gas
        • Solidity
        • EVM
          • La máquina de estados
          • Opcodes
          • Cómo funciona la EVM
          • Clientes de ejecución
          • DApps
      • Blockchain Explorer
        • Funciones de un blockchain explorer
        • Beneficios de utilizar un blockchain explorer
      • Remix
        • Características de Remix
        • Workspaces o espacios de trabajo
        • Cargar y compilar un contrato
        • Desplegar en la máquina virtual de Remix (Remix VM)
        • Interactuando con funciones
        • Desplegar en una red pública
      • Crea tu primer Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Datos
      • Funciones
      • Variables
        • Ejercicio 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • Ejercicio 3
      • Convenciones de nomenclatura
      • Tipos de almacenamiento para variables
      • Estructuras de Control
        • Ejercicio 4
      • Modificadores
      • Eventos
        • Ejercicio 5
      • Tipos de Referencia
        • Arrays
          • Ejercicio 6
        • Mappings
          • Ejercicio 7
        • Structs
          • Ejercicio 8
      • Address Payable
      • Cómo reciben Ether los contratos y funciones
      • Transferencias de Ether
      • Conceptos Avanzados
        • Codificación ABI
        • Hashing
        • This
        • Herencia
        • Abstract
        • Interface
        • Llamadas entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • Estándares, Librerías y Patrones
      • Buenas Prácticas de Diseño
      • Patrones de Diseño
      • EIP y ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crea un Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Toolkit para desarrollo en Ethereum
      • Requisitos para el módulo 4
        • Terminal
        • Git y Github
        • Node.js y npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • Ejercicio
        • Hardhat
          • Despliegue de un contrato en Hardhat
          • Despliegue de un contrato en una red pública
        • Scaffold-ETH
          • Características
          • Cómo instalar Scaffold-ETH
  • Módulo 5
    • Seguridad, Pruebas y Auditoría
      • Pruebas
        • Importancia de realizar pruebas
        • Métodos para probar contratos inteligentes
          • Pruebas automatizadas
          • Pruebas manuales
        • Conceptos importantes en testing
        • Herramientas para testing
        • Testing con Hardhat
        • Recursos adicionales
      • Seguridad
        • Una mentalidad distinta de diseño
        • Principais vulnerabilidades em contratos inteligentes
          • Ataque de reentrância (Reentrancy attack)
          • Ataque de repetição (Replay attack)
          • Manipulação de Oráculos de Preços (Price Oracle Manipulation)
          • Falta de Controle de Acesso (Missing Access Control)
          • Manipulação de Recompensas (Reward Manipulation)
          • Falha na Inicialização (Failure to Initialize)
          • Front-running
          • Invariant Breaks (Ruptura de invariantes)
          • Mishandling of ETH (Mal manejo de ETH)
          • Denial of Service (DoS - Denegación de Servicio)
          • Integer overflow and underflow (desbordamiento y subdesbordamiento de enteros)
          • Phishing y Typosquatting
        • Recursos adicionales
      • Auditoría de smart contracts
        • Proceso de Auditoría
        • Herramientas
        • Cómo prepararse para una auditoría
        • El test Rekt
        • Retos
        • Recursos adicionales
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page

Was this helpful?

  1. Módulo 5
  2. Seguridad, Pruebas y Auditoría
  3. Seguridad
  4. Principais vulnerabilidades em contratos inteligentes

Manipulação de Recompensas (Reward Manipulation)

A manipulação de recompensas ocorre quando um invasor explora falhas na lógica de um contrato inteligente para obter ganhos indevidos ou desproporcionais. Essa vulnerabilidade é particularmente relevante em protocolos DeFi, jogos em blockchain e sistemas que distribuem recompensas com base na participação ou contribuição dos usuários.

Exemplo: Considere um contrato inteligente que distribui recompensas em tokens para usuários que fazem staking em um pool. As recompensas são proporcionais ao tempo de permanência dos tokens no staking.

Um invasor pode tentar manipular esse sistema realizando depósitos e retiradas rápidas com grandes quantidades de tokens, explorando falhas na lógica de cálculo das recompensas. Se o contrato não estiver corretamente estruturado, o invasor pode acumular recompensas excessivas sem uma participação real proporcional.

contract RewardPool {
    mapping(address => uint) public stakedAmount;
    mapping(address => uint) public rewardDebt;
    uint public totalStaked;
    uint public rewardRate;

    function stake(uint _amount) external {
        // Actualiza las recompensas pendientes antes de cambiar el estado
        updateRewards(msg.sender);
        stakedAmount[msg.sender] += _amount;
        totalStaked += _amount;
    }

    function withdraw(uint _amount) external {
        updateRewards(msg.sender);
        stakedAmount[msg.sender] -= _amount;
        totalStaked -= _amount;
    }

    function updateRewards(address _user) internal {
        uint pendingReward = stakedAmount[_user] * rewardRate;
        rewardDebt[_user] += pendingReward;
    }

    function claimRewards() external {
        updateRewards(msg.sender);
        uint reward = rewardDebt[msg.sender];
        rewardDebt[msg.sender] = 0;
        // Lógica para transferir la recompensa al usuario
    }
}

Neste exemplo, um atacante poderia depositar e retirar tokens rapidamente para maximizar o valor de pendingReward na função updateRewards, explorando uma vulnerabilidade na lógica de cálculo e acumulação das recompensas.

Mitigação:

  1. Implementar Medidas Anti-Sybil: Uma técnica comum é limitar a frequência das interações dos usuários com o contrato, como definir um período mínimo entre depósitos e retiradas (locking period), ou aplicar taxas sobre transações que desencorajem comportamentos de entrada e saída repetitiva.

  2. Cálculos Baseados em Tempo e Períodos Contínuos: É fundamental que as recompensas sejam calculadas de forma contínua, levando em consideração o tempo em que os tokens permaneceram em staking, e não apenas eventos isolados de depósito ou saque. Isso evita que invasores obtenham recompensas indevidas ao realizar múltiplas transações em curto intervalo.

    function updateRewards(address _user) internal {
        uint timeStaked = block.timestamp - lastUpdateTime[_user];
        uint pendingReward = stakedAmount[_user] * rewardRate * timeStaked;
        rewardDebt[_user] += pendingReward;
        lastUpdateTime[_user] = block.timestamp;
    }
  3. Aplicar um Processo de Slashing: Introduzir penalidades (slashing) para retiradas antes de um tempo mínimo de permanência em staking. Isso desincentiva ataques baseados em depósitos e saques rápidos com o objetivo de explorar o sistema de recompensas.

  4. Auditorias de Segurança: Conduzir auditorias completas para identificar e corrigir falhas na lógica de recompensas. As auditorias devem incluir testes de estresse e simulações de uso malicioso para revelar possíveis vetores de ataque.

  5. Monitoramento e Ajuste de Parâmetros Dinâmicos: Implantar mecanismos automáticos que monitorem o comportamento dos usuários e ajustem dinamicamente taxas de recompensa, limites de retirada, ou regras de participação em resposta a atividades suspeitas ou fora do padrão.

  6. Mecanismos de recompensa baseados no histórico do usuário: em vez de calcular as recompensas apenas com base no saldo atual, considerar todo o histórico do usuário, incluindo quanto tempo ele esteve participando e a quantidade total de participação durante esse período.

PreviousFalta de Controle de Acesso (Missing Access Control)NextFalha na Inicialização (Failure to Initialize)

Last updated 25 days ago

Was this helpful?