Análise completa das vulnerabilidades de segurança em Finanças Descentralizadas: Guia de prevenção contra Empréstimos Flash, manipulação de preços e ataques de reentrada.
Finanças Descentralizadas comuns vulnerabilidades de segurança e medidas de prevenção
Recentemente, um especialista em segurança compartilhou tópicos relacionados à segurança das Finanças Descentralizadas com os membros da comunidade. O especialista revisitou os principais eventos de segurança que afetaram a indústria Web3 nos últimos mais de um ano, explorou as causas desses eventos e como evitá-los, resumiu as vulnerabilidades de segurança comuns dos contratos inteligentes e as medidas de prevenção, e deu algumas recomendações de segurança para as equipes de projeto 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 de funções de fallback, vulnerabilidades de lógica de negócios, vazamento de chaves privadas e ataques de reentrada. Este artigo foca nos empréstimos relâmpago, manipulação de preços e ataques de reentrada.
Empréstimo Rápido
O empréstimo relâmpago é uma inovação nas Finanças Descentralizadas, mas também é frequentemente utilizado por hackers. Os atacantes podem utilizar o empréstimo relâmpago para tomar emprestado grandes quantidades de fundos, manipulando preços ou atacando a lógica de negócios. Os desenvolvedores precisam considerar se a funcionalidade do contrato pode causar anomalias devido a grandes quantidades de fundos, ou se pode ser explorada em uma única transação interagindo com múltiplas funções para obter ganhos indevidos.
Muitos projetos de Finanças Descentralizadas parecem ter altos rendimentos, mas a qualidade dos desenvolvedores varia bastante. Mesmo que o código em si não tenha vulnerabilidades, podem ainda existir problemas lógicos. Por exemplo, alguns projetos distribuem recompensas em horários fixos com base na quantidade de tokens detidos, mas são explorados por atacantes que utilizam empréstimos relâmpago para comprar grandes quantidades de tokens, obtendo assim a maior parte das recompensas no momento da distribuição. Outros projetos que calculam preços através de Tokens também podem ser facilmente afetados por empréstimos relâmpago. Os desenvolvedores devem estar atentos a esses problemas.
Manipulação de Preços
O problema da manipulação de preços está intimamente relacionado com os empréstimos relâmpago, principalmente devido ao fato de que certos parâmetros podem ser controlados pelo usuário durante o cálculo do preço. Existem duas situações comuns:
Utilizar dados de terceiros ao calcular preços, mas de forma incorreta ou com verificações em falta, leva a que os preços sejam manipulados maliciosamente.
Usar o saldo de Token de certos endereços como variáveis de cálculo, e a quantidade de Token desses endereços pode ser aumentada ou diminuída temporariamente.
Ataque de Reentrada
Um dos principais riscos de chamar contratos externos é que eles podem assumir o controle do fluxo, fazendo alterações inesperadas nos dados. Por exemplo:
solidity
mapeamento (endereço => uint) saldo privado do usuário;
function withdrawBalance() public {
uint amountToWithdraw = userBalances[msg.sender];
(bool sucesso, ) = msg.sender.call.value(quantidadeParaRetirar)("");
require(success);
userBalances[msg.sender] = 0;
}
Devido ao fato de que o saldo do usuário só é definido como 0 no final da função, a segunda e as chamadas subsequentes ainda terão sucesso e poderão retirar o saldo repetidamente.
Os ataques de reentrada têm várias formas, podendo envolver diferentes funções do mesmo contrato ou funções de múltiplos contratos. Ao resolver o problema de reentrada, deve-se ter em atenção:
Não apenas previne o problema da reentrada de uma única função
Seguir o padrão Checks-Effects-Interactions na codificação
Usar um modificador anti-reentrada verificado
É melhor evitar reinventar a roda, devendo-se utilizar as melhores práticas de segurança já consolidadas na indústria. As "rodas" recém-criadas carecem de validação adequada, e a probabilidade de problemas é frequentemente maior do que a de soluções testadas ao longo do tempo.
Sugestões de Segurança
Sugestões de segurança para o projeto
Seguir as melhores práticas de segurança no desenvolvimento de contratos
Projetar contratos atualizáveis e pausáveis: ajuda a identificar e reduzir rapidamente as perdas por ataques.
Utilizar um bloqueio temporal: proporcionar um período de amortecimento para descobrir e lidar com potenciais problemas
Aumentar o investimento em segurança, estabelecer um sistema de segurança completo: a segurança é um trabalho sistemático, não se limita apenas à auditoria de contratos.
Aumentar a consciência de segurança de todos os funcionários: muitos ataques exploram as fraquezas humanas, estar alerta pode evitar muitos problemas.
Prevenir a má conduta interna, ao mesmo tempo em que se aumenta a eficiência e se reforça o controle de riscos: como a adoção de mecanismos de múltiplas assinaturas, bloqueios de tempo, etc.
Introduzir terceiros com cautela: realizar verificações de segurança em toda a cadeia, especialmente em contratos não abertos.
Métodos para usuários/LP avaliarem a segurança de contratos inteligentes
Verifique se o contrato é de código aberto: não participe de projetos que não são de código aberto.
Confirmar se o Owner utiliza uma multi-assinatura descentralizada.
Ver a situação das transações existentes do contrato: tempo de implementação, número de interações, etc.
Verifique se o contrato é um contrato de proxy, se é atualizável e se possui um bloqueio de tempo.
Confirme se o contrato foi auditado por várias instituições, se os direitos do Owner são excessivos.
Atenção à confiabilidade dos oráculos: oráculos líderes são mais seguros, oráculos de construção própria ou de baixo custo devem ser usados com cautela.
Em suma, os participantes na área das Finanças Descentralizadas devem permanecer atentos, as equipes dos projetos devem considerar a segurança de forma abrangente, e os usuários devem avaliar cuidadosamente a segurança do projeto antes de tomar decisões.
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.
12 Curtidas
Recompensa
12
5
Compartilhar
Comentário
0/400
HackerWhoCares
· 13h atrás
O capital é emprestado, a segurança não pode ser emprestada.
Ver originalResponder0
SurvivorshipBias
· 20h atrás
Outra vez a história de lágrimas e sangue dos idiotas que foram feitos de parvas.
Ver originalResponder0
MetaMaskVictim
· 20h atrás
Outra vez alguém a fazer as pessoas de parvas... Quem é que perdeu, diga-me.
Análise completa das vulnerabilidades de segurança em Finanças Descentralizadas: Guia de prevenção contra Empréstimos Flash, manipulação de preços e ataques de reentrada.
Finanças Descentralizadas comuns vulnerabilidades de segurança e medidas de prevenção
Recentemente, um especialista em segurança compartilhou tópicos relacionados à segurança das Finanças Descentralizadas com os membros da comunidade. O especialista revisitou os principais eventos de segurança que afetaram a indústria Web3 nos últimos mais de um ano, explorou as causas desses eventos e como evitá-los, resumiu as vulnerabilidades de segurança comuns dos contratos inteligentes e as medidas de prevenção, e deu algumas recomendações de segurança para as equipes de projeto 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 de funções de fallback, vulnerabilidades de lógica de negócios, vazamento de chaves privadas e ataques de reentrada. Este artigo foca nos empréstimos relâmpago, manipulação de preços e ataques de reentrada.
Empréstimo Rápido
O empréstimo relâmpago é uma inovação nas Finanças Descentralizadas, mas também é frequentemente utilizado por hackers. Os atacantes podem utilizar o empréstimo relâmpago para tomar emprestado grandes quantidades de fundos, manipulando preços ou atacando a lógica de negócios. Os desenvolvedores precisam considerar se a funcionalidade do contrato pode causar anomalias devido a grandes quantidades de fundos, ou se pode ser explorada em uma única transação interagindo com múltiplas funções para obter ganhos indevidos.
Muitos projetos de Finanças Descentralizadas parecem ter altos rendimentos, mas a qualidade dos desenvolvedores varia bastante. Mesmo que o código em si não tenha vulnerabilidades, podem ainda existir problemas lógicos. Por exemplo, alguns projetos distribuem recompensas em horários fixos com base na quantidade de tokens detidos, mas são explorados por atacantes que utilizam empréstimos relâmpago para comprar grandes quantidades de tokens, obtendo assim a maior parte das recompensas no momento da distribuição. Outros projetos que calculam preços através de Tokens também podem ser facilmente afetados por empréstimos relâmpago. Os desenvolvedores devem estar atentos a esses problemas.
Manipulação de Preços
O problema da manipulação de preços está intimamente relacionado com os empréstimos relâmpago, principalmente devido ao fato de que certos parâmetros podem ser controlados pelo usuário durante o cálculo do preço. Existem duas situações comuns:
Utilizar dados de terceiros ao calcular preços, mas de forma incorreta ou com verificações em falta, leva a que os preços sejam manipulados maliciosamente.
Usar o saldo de Token de certos endereços como variáveis de cálculo, e a quantidade de Token desses endereços pode ser aumentada ou diminuída temporariamente.
Ataque de Reentrada
Um dos principais riscos de chamar contratos externos é que eles podem assumir o controle do fluxo, fazendo alterações inesperadas nos dados. Por exemplo:
solidity mapeamento (endereço => uint) saldo privado do usuário;
function withdrawBalance() public { uint amountToWithdraw = userBalances[msg.sender]; (bool sucesso, ) = msg.sender.call.value(quantidadeParaRetirar)(""); require(success); userBalances[msg.sender] = 0; }
Devido ao fato de que o saldo do usuário só é definido como 0 no final da função, a segunda e as chamadas subsequentes ainda terão sucesso e poderão retirar o saldo repetidamente.
Os ataques de reentrada têm várias formas, podendo envolver diferentes funções do mesmo contrato ou funções de múltiplos contratos. Ao resolver o problema de reentrada, deve-se ter em atenção:
É melhor evitar reinventar a roda, devendo-se utilizar as melhores práticas de segurança já consolidadas na indústria. As "rodas" recém-criadas carecem de validação adequada, e a probabilidade de problemas é frequentemente maior do que a de soluções testadas ao longo do tempo.
Sugestões de Segurança
Sugestões de segurança para o projeto
Seguir as melhores práticas de segurança no desenvolvimento de contratos
Projetar contratos atualizáveis e pausáveis: ajuda a identificar e reduzir rapidamente as perdas por ataques.
Utilizar um bloqueio temporal: proporcionar um período de amortecimento para descobrir e lidar com potenciais problemas
Aumentar o investimento em segurança, estabelecer um sistema de segurança completo: a segurança é um trabalho sistemático, não se limita apenas à auditoria de contratos.
Aumentar a consciência de segurança de todos os funcionários: muitos ataques exploram as fraquezas humanas, estar alerta pode evitar muitos problemas.
Prevenir a má conduta interna, ao mesmo tempo em que se aumenta a eficiência e se reforça o controle de riscos: como a adoção de mecanismos de múltiplas assinaturas, bloqueios de tempo, etc.
Introduzir terceiros com cautela: realizar verificações de segurança em toda a cadeia, especialmente em contratos não abertos.
Métodos para usuários/LP avaliarem a segurança de contratos inteligentes
Verifique se o contrato é de código aberto: não participe de projetos que não são de código aberto.
Confirmar se o Owner utiliza uma multi-assinatura descentralizada.
Ver a situação das transações existentes do contrato: tempo de implementação, número de interações, etc.
Verifique se o contrato é um contrato de proxy, se é atualizável e se possui um bloqueio de tempo.
Confirme se o contrato foi auditado por várias instituições, se os direitos do Owner são excessivos.
Atenção à confiabilidade dos oráculos: oráculos líderes são mais seguros, oráculos de construção própria ou de baixo custo devem ser usados com cautela.
Em suma, os participantes na área das Finanças Descentralizadas devem permanecer atentos, as equipes dos projetos devem considerar a segurança de forma abrangente, e os usuários devem avaliar cuidadosamente a segurança do projeto antes de tomar decisões.