šŸ‡§šŸ‡·
Ethereum Developer Pack - PT
  • Ethereum Developer Pack - PT
  • Módulo 1
    • Introdução a Smart Contracts
      • Fundamentos de Blockchain
        • Histórico
        • Bitcoin
        • O que Ć© Blockchain
        • Conceitos-chave em Blockchain
        • Como funciona a Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • A nova Internet
        • Web 3
        • Elementos Fundamentais
        • Impacto do Ethereum em Diversos Setores
      • Wallets
        • Componentes de uma wallet
        • Tipos de Wallet
        • Códigos MnemĆ“nicos
      • Ethereum 101
        • Smart Contracts
        • Contas
          • Tipos de contas
          • ConteĆŗdo das contas
        • TransaƧƵes
          • Componentes
          • Ciclo de vida
        • GĆ”s
        • Solidity
        • EVM
          • A mĆ”quina de estados
          • Opcodes
          • Como funciona a EVM
          • Clientes de execução
          • DApps
      • Blockchain Explorer
        • FunƧƵes de um blockchain explorer
        • Beneficios de utilizar um blockchain explorer
      • Remix
        • CaracterĆ­sticas do Remix
        • Workspaces ou espaƧos de trabalho
        • Carregar e compilar um contrato
        • Implantar na mĆ”quina virtual do Remix (Remix VM)
        • Interagindo com funƧƵes
        • Deployar em uma rede pĆŗblica
      • Crie seu primeiro Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Dados
      • FunƧƵes
      • VariĆ”veis
        • ExercĆ­cio 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • ExercĆ­cio 3
      • ConvenƧƵes de nomenclatura
      • Tipos de armazenamento para variĆ”veis
      • Estruturas de Controle
        • ExercĆ­cio 4
      • Modificadores
      • Eventos
        • ExercĆ­cio 5
      • Tipos de Referencia
        • Arrays
          • ExercĆ­cio 6
        • Mappings
          • ExercĆ­cio 7
        • Structs
          • ExercĆ­cio 8
      • Address Payable
      • Como os contratos e funƧƵes recebem Ether.
      • TransferĆŖncias de Ether
      • Conceitos AvanƧados
        • Codificação de ABI
        • Hashing
        • This
        • HeranƧa
        • Abstract
        • Interface
        • Chamada entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • ERCs, Bibliotecas e PadrƵes de Desenvolvimento
      • Boas PrĆ”ticas de Desenvolvimento
      • PadrƵes de Desenvolvimento
      • EIP & ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crie um Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Kit de ferramentas para desenvolvimento na Ethereum
      • Requisitos para o módulo 4
        • Terminal
        • Git e Github
        • Node.js e npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • ExercĆ­cio
        • Hardhat
          • Implantação de um contrato no Hardhat
          • Implantação de um contrato em uma rede pĆŗblica
        • Scaffold-ETH
          • CaracterĆ­sticas do Scaffold-ETHCaracterĆ­sticas
          • Como instalar o Scaffold-ETH
  • Módulo 5
    • SeguranƧa, Testes e Auditorias
      • Testes
        • ImportĆ¢ncia de realizar testes
        • MĆ©todos para testar contratos inteligentes
          • Testes automatizados
          • Testes manuais
        • Conceitos importantes em testes
        • Ferramentas para testes
        • Testes com Hardhat
        • Recursos adicionais
      • SeguranƧa
        • Uma mentalidade diferente de design
        • Principais vulnerabilidades em contratos inteligentes
          • Reentrancy attack (ataque de reentrada)
          • Replay attack (ataque de repetición)
          • Price Oracle Manipulation (Manipulación de OrĆ”culos de Precios)
          • Missing Access Control (PĆ©rdida de Control de Acceso)
          • Reward Manipulation (Manipulación de Recompensas)
          • Failure to Initialize (Falla al Inicializar)
          • Front-running
          • Invariant Breaks (Quebra de Invariantes)
          • Mishandling of ETH (MĆ” gestĆ£o de ETH)
          • Denial of Service (DoS - Negação de ServiƧo)
          • Integer overflow and underflow (Overflow e Underflow de inteiros)
          • Phishing y Typosquatting
        • Recursos adicionais
      • Auditoria de smart contracts
        • Processo de Auditoria
        • Ferramentas
        • Como se preparar para uma auditoria
        • O teste Rekt
        • Desafios
        • Recursos adicionais
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page
  1. Módulo 5
  2. SeguranƧa, Testes e Auditorias
  3. SeguranƧa
  4. Principais vulnerabilidades em contratos inteligentes

Front-running

Ocorre quando um atacante explora a ordem das transações pendentes no mempool para executar uma transação antes de outra que jÔ estÔ na fila, com o objetivo de obter uma vantagem indevida. Esse tipo de ataque é comum em plataformas DeFi, como exchanges descentralizadas (DEXs), onde o preço de um ativo pode ser impactado por grandes ordens de compra ou venda.

Exemplo:

Imagine que o usuÔrio A tenta comprar uma grande quantidade de um token em uma DEX. A transação do usuÔrio A é enviada para a rede e fica no mempool aguardando confirmação. Um atacante, monitorando o mempool, observa essa transação e percebe que a compra feita pelo usuÔrio A aumentarÔ o preço do token.

O atacante então envia uma transação com uma taxa de gas mais alta para comprar o token antes que a transação do usuÔrio A seja processada. Como os mineradores priorizam transações com taxas mais altas, a transação do atacante serÔ executada primeiro, comprando o token a um preço mais baixo. Quando a transação do usuÔrio A for finalmente executada, o preço do token terÔ subido, permitindo ao atacante vender o token adquirido por um valor mais alto e obter lucro imediato.

function swapTokens(uint amountIn, address tokenIn, address tokenOut) external {
    // CƔlculo del precio antes de ejecutar el intercambio
    uint priceBefore = getPrice(tokenOut);

    // Ejecuta el intercambio de tokens
    uint amountOut = executeSwap(amountIn, tokenIn, tokenOut);

    // CƔlculo del precio despuƩs del intercambio
    uint priceAfter = getPrice(tokenOut);

    // Potencialmente, un atacante podría observar y ejecutar una transacción antes de esta
}

Mitigação:

  1. Uso de esquemas Commit-Reveal: Esse esquema envolve dividir a transação em duas fases: um ā€œcommitā€, onde Ć© enviado um hash da transação, e um ā€œrevealā€, onde a transação completa Ć© revelada. Durante a fase de commit, o atacante nĆ£o tem acesso Ć s informaƧƵes completas da transação e, portanto, nĆ£o pode realizar um ataque de front-running.

    solidityCopiar código
    mapping(address => bytes32) public commitments;
    
    function commitSwap(bytes32 _commitment) external {
        commitments[msg.sender] = _commitment;
    }
    
    function revealSwap(uint amountIn, address tokenIn, address tokenOut, uint nonce) external {
        require(commitments[msg.sender] == keccak256(abi.encodePacked(amountIn, tokenIn, tokenOut, nonce)), "Invalid reveal");
        // Ejecutar el swap
    }
  2. Limite de Gas e Priorização de Transações: Contratos inteligentes podem definir limites de gas ou incluir regras que priorizam transações com base em fatores diferentes da taxa de gas, tornando mais difícil para um atacante simplesmente pagar mais para se adiantar na fila.

  3. TolerĆ¢ncia ao Slippage: Em exchanges descentralizadas (DEXs), os usuĆ”rios podem definir uma ā€œtolerĆ¢ncia ao slippageā€, que determina a variação mĆ”xima de preƧo aceitĆ”vel para a transação. Se o preƧo do ativo se mover alĆ©m desse limite devido a um possĆ­vel ataque de front-running, a transação serĆ” revertida automaticamente.

    function swapTokens(uint amountIn, address tokenIn, address tokenOut, uint minAmountOut) external {
        uint amountOut = executeSwap(amountIn, tokenIn, tokenOut);
        require(amountOut >= minAmountOut, "Slippage too high");
    }
  4. Mecanismos de Bloqueio Temporal: A introdução de atrasos controlados ou janelas de tempo durante as quais uma transação não pode ser confirmada imediatamente pode reduzir a capacidade de atacantes executarem transações em uma ordem vantajosa.

  5. Ordenação Aleatória de Transações: Em vez de processar as transações na ordem em que chegam ao mempool, elas podem ser ordenadas de forma aleatória ou utilizar sorteios (loterias) para determinar a ordem de execução, dificultando ataques de front-running.

  6. Flashbots e Proteção contra MEV: Ferramentas como o Flashbots permitem que os usuÔrios enviem transações diretamente aos validadores, sem passarem pela mempool pública, impedindo que fiquem visíveis para atacantes que tentam realizar front-running. Essa técnica ajuda a mitigar o risco de Maximal Extractable Value (MEV), que é o lucro que atacantes podem obter ao explorar a ordem de execução das transações.

PreviousFailure to Initialize (Falla al Inicializar)NextInvariant Breaks (Quebra de Invariantes)

Last updated 21 days ago