contratos inteligentes inteiro overflow vulnerabilidade: medidas de proteção detalhadas

robot
Geração de resumo em curso

Vulnerabilidade de overflow de inteiro e sua proteção

A sobrecarga de inteiros é um problema comum na programação. Na maioria das linguagens de programação, os valores inteiros são armazenados em uma memória de comprimento fixo. Os inteiros são divididos em dois tipos: sem sinal e com sinal, diferenciando-se pelo uso do bit mais significativo como bit de sinal. Por exemplo, 32 bits de memória podem armazenar um inteiro sem sinal no intervalo de 0 a 4.294.967.295 (uint32), ou um inteiro com sinal no intervalo de -2.147.483.648 a 2.147.483.647 (int32).

Quando o resultado do cálculo excede o intervalo que o tipo inteiro pode representar, ocorre um estouro. A maioria das linguagens de programação e compiladores não verifica esse tipo de erro, mas simplesmente executa a operação de módulo ou gera comportamentos indefinidos. Isso pode levar a resultados inesperados na execução do programa. Na redação de contratos inteligentes de blockchain, especialmente no campo das finanças descentralizadas, cálculos inteiros são comuns, portanto, é necessário ter atenção especial às vulnerabilidades de estouro de inteiros.

A sobrecarga de inteiros pode ser dividida em dois casos: sobrecarga superior e sobrecarga inferior.

  1. Overflow: o resultado do cálculo excede o valor máximo que o tipo pode representar. Por exemplo, 0xFFFFFFFF de uint32 mais 1 torna-se 0x00000000.

  2. Underflow: o resultado do cálculo é menor que o valor mínimo que o tipo pode representar. Por exemplo, 0 menos 1 em uint32 se torna 0xFFFFFFFF.

Em abril de 2018, o contrato do token BeautyChain(BEC) foi atacado devido a uma vulnerabilidade de estouro inteiro, resultando na obtenção de uma grande quantidade de tokens pelo atacante. A vulnerabilidade estava presente na função batchTransfer, onde a falta de verificação de estouro de multiplicação permitiu que uma grande quantidade de tokens fosse transferida com um saldo de token muito pequeno.

Para evitar o estouro de inteiros, podem ser adotadas as seguintes medidas:

  1. Configurar opções de compilação do Rust para verificar estouro de inteiros e ativar panic no modo release.

  2. Utilizar o pacote uint para suportar tipos de inteiros maiores, como U256, U512, etc.

  3. Utilize funções de conversão do tipo uint para detectar overflow, como as_u128().

  4. Utilize funções Safe Math como checked_add() para verificar se houve estouro nos cálculos.

Através destes métodos, é possível evitar de forma eficaz as vulnerabilidades de estouro de inteiros, melhorando a segurança dos contratos inteligentes. Ao escrever contratos que envolvem cálculos de grandes números, é imperativo lidar com o problema do estouro de inteiros com cautela.

SAFE-1.99%
MATH-9.43%
Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • 5
  • Partilhar
Comentar
0/400
AirdropHunterXiaovip
· 13h atrás
Overflow? Vai ser Cupões de Recorte.
Ver originalResponder0
gas_guzzlervip
· 14h atrás
Antes de desenvolver, lembrem-se de ajustar o transbordamento, irmãos.
Ver originalResponder0
0xInsomniavip
· 14h atrás
O estouro prejudicou tantos idiotas.
Ver originalResponder0
AirdropHunterZhangvip
· 14h atrás
A onda é a onda, quem não paga tem dor de cabeça.
Ver originalResponder0
0xOverleveragedvip
· 14h atrás
A esposa da rede de novo já não está.
Ver originalResponder0
  • Pino
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)