Vulnerabilidade de Overflow de Inteiro e sua Proteção
A sobrecarga de inteiros é um problema comum de programação, especialmente em desenvolvimento de contratos inteligentes em blockchain, que requer atenção especial. Quando o resultado de um cálculo ultrapassa o intervalo que o tipo de inteiro pode representar, ocorre uma sobrecarga de inteiros.
A sobrecarga de inteiros divide-se em duas situações: sobrecarga e subcarga. A sobrecarga refere-se ao resultado que excede o valor máximo, por exemplo, o valor máximo do tipo uint32, 4.294.967.295, mais 1 torna-se 0. A subcarga refere-se ao resultado que é inferior ao valor mínimo, por exemplo, 0 do tipo uint32 menos 1 torna-se 4.294.967.295.
Tomando como exemplo o token BEC da BeautyChain, um atacante conseguiu obter uma grande quantidade de tokens utilizando uma vulnerabilidade de estouro de inteiros. Na sua função batchTransfer, amount = cnt * _value pode sofrer um estouro, fazendo com que a instrução require que verifica o saldo falhe.
Para evitar o estouro de inteiros, ao desenvolver contratos inteligentes em Rust, podem ser tomadas as seguintes medidas:
Configurar a verificação de estouro de inteiro no modo release em Cargo.toml.
Use o crate uint para suportar tipos de inteiros maiores, como U256, U512, etc.
Use a função de conversão do tipo uint para detectar estouro, como as_u128().
Utilize funções Safe Math como checked_add(), checked_sub(), etc. para operações seguras.
Realizar o unwrap ou expect nos resultados de Option retornados pela função Safe Math.
Através destes métodos, é possível evitar efetivamente os riscos de segurança associados ao estouro de inteiros. No desenvolvimento de contratos inteligentes, deve-se estar sempre alerta para o problema do estouro de inteiros e tomar as medidas de proteção necessárias.
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.
14 gostos
Recompensa
14
5
Partilhar
Comentar
0/400
CompoundPersonality
· 07-15 00:43
O problema do overflow está chato.
Ver originalResponder0
MEVSandwichMaker
· 07-14 16:58
O bug de overflow é um menu indispensável para Veteranos da Criptografia.
Ver originalResponder0
CommunityWorker
· 07-13 17:55
Esse bug tem que ser resolvido, tsk tsk.
Ver originalResponder0
GasFeeCrybaby
· 07-13 17:50
Hidratou, hidratou, o gás está tão caro que ainda transborda.
Ver originalResponder0
DegenMcsleepless
· 07-13 17:34
Detectar problemas de transbordo cedo e tratá-los.
Segurança dos contratos inteligentes: Análise das estratégias de proteção contra vulnerabilidades de estouro de inteiros
Vulnerabilidade de Overflow de Inteiro e sua Proteção
A sobrecarga de inteiros é um problema comum de programação, especialmente em desenvolvimento de contratos inteligentes em blockchain, que requer atenção especial. Quando o resultado de um cálculo ultrapassa o intervalo que o tipo de inteiro pode representar, ocorre uma sobrecarga de inteiros.
A sobrecarga de inteiros divide-se em duas situações: sobrecarga e subcarga. A sobrecarga refere-se ao resultado que excede o valor máximo, por exemplo, o valor máximo do tipo uint32, 4.294.967.295, mais 1 torna-se 0. A subcarga refere-se ao resultado que é inferior ao valor mínimo, por exemplo, 0 do tipo uint32 menos 1 torna-se 4.294.967.295.
Tomando como exemplo o token BEC da BeautyChain, um atacante conseguiu obter uma grande quantidade de tokens utilizando uma vulnerabilidade de estouro de inteiros. Na sua função batchTransfer, amount = cnt * _value pode sofrer um estouro, fazendo com que a instrução require que verifica o saldo falhe.
Para evitar o estouro de inteiros, ao desenvolver contratos inteligentes em Rust, podem ser tomadas as seguintes medidas:
Configurar a verificação de estouro de inteiro no modo release em Cargo.toml.
Use o crate uint para suportar tipos de inteiros maiores, como U256, U512, etc.
Use a função de conversão do tipo uint para detectar estouro, como as_u128().
Utilize funções Safe Math como checked_add(), checked_sub(), etc. para operações seguras.
Realizar o unwrap ou expect nos resultados de Option retornados pela função Safe Math.
Através destes métodos, é possível evitar efetivamente os riscos de segurança associados ao estouro de inteiros. No desenvolvimento de contratos inteligentes, deve-se estar sempre alerta para o problema do estouro de inteiros e tomar as medidas de proteção necessárias.