Finanças Descentralizadas comuns vulnerabilidades de segurança e medidas preventivas
Recentemente, um especialista em segurança discutiu, em uma conferência online, os principais eventos de segurança que a indústria Web3 enfrentou nos últimos mais de um ano, analisando as razões para a ocorrência desses eventos e como evitá-los. Ele também resumiu as vulnerabilidades de segurança comuns em contratos inteligentes e medidas de prevenção, além de fornecer algumas recomendações de segurança para desenvolvedores de projetos e usuários comuns.
Os tipos comuns de vulnerabilidades em Finanças Descentralizadas incluem empréstimos relâmpago, manipulação de preços, problemas de permissões de funções, chamadas externas arbitrárias, problemas com funções fallback, vulnerabilidades de lógica de negócios, vazamento de chaves privadas e ataques de reentrada, entre outros. Dentre eles, empréstimos relâmpago, manipulação de preços e ataques de reentrada são alguns dos mais típicos.
Empréstimo Relâmpago
Os empréstimos relâmpago são uma inovação dentro das Finanças Descentralizadas, mas também são frequentemente utilizados por hackers. Os atacantes emprestam grandes quantidades de fundos através de empréstimos relâmpago para manipular preços ou atacar a lógica de negócios. Os desenvolvedores precisam considerar se as funcionalidades do contrato podem resultar em anomalias devido a grandes quantidades de fundos, ou se podem ser usadas para interagir com várias funções em uma única transação para obter lucros indevidos.
Nos últimos dois anos, muitos projetos de Finanças Descentralizadas foram atacados devido a problemas com empréstimos relâmpago. Alguns projetos distribuem recompensas em momentos fixos com base na quantidade de tokens mantidos, mas foram explorados por atacantes que utilizaram empréstimos relâmpago para comprar grandes quantidades de tokens, obtendo a maior parte dos lucros no momento da distribuição das recompensas. Outros projetos que calculam preços com base em tokens também são suscetíveis a influências de empréstimos relâmpago.
Manipulação de Preços
O problema de manipulação de preços está intimamente relacionado com os empréstimos relâmpago, existindo principalmente dois tipos:
Ao calcular o preço, utiliza-se dados de terceiros, mas a forma de utilização é incorreta ou a verificação está em falta, levando a que o preço seja manipulado de forma maliciosa.
Utilizar a quantidade de tokens de certos endereços como variável de cálculo, sendo que o saldo de tokens desses endereços pode ser temporariamente aumentado ou diminuído.
Ataque de Reentrada
Um dos principais riscos de chamar contratos externos é que eles podem assumir o controle do fluxo e fazer alterações inesperadas nos dados. Um exemplo típico de ataque de reentrada é o seguinte:
solidez
mapeamento (endereço => uint) saldoPrivado de userBalances;
function withdrawBalance() public {
uint amountToWithdraw = userBalances[msg.sender];
(bool success, ) = msg.sender.call.value(amountToWithdraw)("");
require(success);
userBalances[msg.sender] = 0;
}
Como o saldo do usuário só é definido como 0 no final da função, chamadas repetidas ainda podem extrair o saldo com sucesso.
Para resolver o problema da reentrada, é necessário ter em conta:
Não só previne a reinicialização de uma única função
Seguir o padrão Checks-Effects-Interactions
Usar um modificador de prevenção de reentrada verificado
Recomendações de segurança para o projeto
Seguir as melhores práticas de segurança no desenvolvimento de contratos
Implementar funcionalidades de atualização e suspensão de contratos
Adotar um mecanismo de bloqueio de tempo
Aumentar o investimento em segurança, estabelecer um sistema de segurança completo
Aumentar a consciência de segurança de todos os funcionários
Prevenir comportamentos maliciosos internos, ao mesmo tempo em que se melhora a eficiência e se reforça o controle de riscos.
Introduza terceiros com cautela, supondo que tanto a montante como a jusante não são seguros.
Métodos para os usuários avaliarem a segurança dos contratos inteligentes
Confirme se o contrato é de código aberto
Verifique se o Owner utiliza uma multi-assinatura descentralizada.
Verifique a situação das transações existentes no contrato
Confirme se o contrato é atualizável e se tem um bloqueio temporal.
Verifique se foram auditadas por várias instituições, se as permissões do Owner são excessivas.
Atenção ao uso de oráculos
Em suma, a segurança das Finanças Descentralizadas é um problema sistêmico que requer a atenção conjunta dos projetos e dos usuários, adotando medidas de segurança abrangentes para efetivamente reduzir os riscos.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
20 Curtidas
Recompensa
20
5
Compartilhar
Comentário
0/400
ForkThisDAO
· 07-12 07:12
A auditoria de código é muito importante.
Ver originalResponder0
NewPumpamentals
· 07-12 05:08
Por favor, defina rigorosamente a auditoria de contratos.
Análise completa das vulnerabilidades de segurança comuns em Finanças Descentralizadas e medidas de prevenção
Finanças Descentralizadas comuns vulnerabilidades de segurança e medidas preventivas
Recentemente, um especialista em segurança discutiu, em uma conferência online, os principais eventos de segurança que a indústria Web3 enfrentou nos últimos mais de um ano, analisando as razões para a ocorrência desses eventos e como evitá-los. Ele também resumiu as vulnerabilidades de segurança comuns em contratos inteligentes e medidas de prevenção, além de fornecer algumas recomendações de segurança para desenvolvedores de projetos e usuários comuns.
Os tipos comuns de vulnerabilidades em Finanças Descentralizadas incluem empréstimos relâmpago, manipulação de preços, problemas de permissões de funções, chamadas externas arbitrárias, problemas com funções fallback, vulnerabilidades de lógica de negócios, vazamento de chaves privadas e ataques de reentrada, entre outros. Dentre eles, empréstimos relâmpago, manipulação de preços e ataques de reentrada são alguns dos mais típicos.
Empréstimo Relâmpago
Os empréstimos relâmpago são uma inovação dentro das Finanças Descentralizadas, mas também são frequentemente utilizados por hackers. Os atacantes emprestam grandes quantidades de fundos através de empréstimos relâmpago para manipular preços ou atacar a lógica de negócios. Os desenvolvedores precisam considerar se as funcionalidades do contrato podem resultar em anomalias devido a grandes quantidades de fundos, ou se podem ser usadas para interagir com várias funções em uma única transação para obter lucros indevidos.
Nos últimos dois anos, muitos projetos de Finanças Descentralizadas foram atacados devido a problemas com empréstimos relâmpago. Alguns projetos distribuem recompensas em momentos fixos com base na quantidade de tokens mantidos, mas foram explorados por atacantes que utilizaram empréstimos relâmpago para comprar grandes quantidades de tokens, obtendo a maior parte dos lucros no momento da distribuição das recompensas. Outros projetos que calculam preços com base em tokens também são suscetíveis a influências de empréstimos relâmpago.
Manipulação de Preços
O problema de manipulação de preços está intimamente relacionado com os empréstimos relâmpago, existindo principalmente dois tipos:
Ao calcular o preço, utiliza-se dados de terceiros, mas a forma de utilização é incorreta ou a verificação está em falta, levando a que o preço seja manipulado de forma maliciosa.
Utilizar a quantidade de tokens de certos endereços como variável de cálculo, sendo que o saldo de tokens desses endereços pode ser temporariamente aumentado ou diminuído.
Ataque de Reentrada
Um dos principais riscos de chamar contratos externos é que eles podem assumir o controle do fluxo e fazer alterações inesperadas nos dados. Um exemplo típico de ataque de reentrada é o seguinte:
solidez mapeamento (endereço => uint) saldoPrivado de userBalances;
function withdrawBalance() public { uint amountToWithdraw = userBalances[msg.sender]; (bool success, ) = msg.sender.call.value(amountToWithdraw)(""); require(success); userBalances[msg.sender] = 0; }
Como o saldo do usuário só é definido como 0 no final da função, chamadas repetidas ainda podem extrair o saldo com sucesso.
Para resolver o problema da reentrada, é necessário ter em conta:
Recomendações de segurança para o projeto
Métodos para os usuários avaliarem a segurança dos contratos inteligentes
Em suma, a segurança das Finanças Descentralizadas é um problema sistêmico que requer a atenção conjunta dos projetos e dos usuários, adotando medidas de segurança abrangentes para efetivamente reduzir os riscos.