HACONTI: Desafios dasegurança cibernética em Smart Contracts
07/11/2024
Por Juan Schällibaum, Application Security Engineer em Ualá
Introdução
Os contratos inteligentes (ou Smart Contracts) estão transformando a forma como fazemos transações e gerenciamos ativos digitais na blockchain de Ethereum. No entanto, como qualquer produto de software, eles apresentam problemas de segurança. Um exemplo claro disso foi o DAO Hack em 2016, em que um invasor aproveitou uma vulnerabilidade para roubar 3,54 milhões de Ether, destacando a importância de manter uma segurança robusta nesses contratos.
Neste artigo, exploraremos algumas das vulnerabilidades mais comuns que afetam os contratos inteligentes. Apresentaremos também o HACONTI, uma plataforma gratuita que oferece desafios de segurança cibernética em contratos inteligentes, projetada para ajudar os desenvolvedores a melhorarem a segurança de seus contratos, e os especialistas em segurança a treinarem na avaliação desses sistemas críticos.
Vulnerabilidades em Smart Contracts
Existem vários tipos de vulnerabilidades que afetam os contratos inteligentes. Entre os mais importantes estão os seguintes:
- Reentrancy: Permite que um invasor execute repetidamente uma função dentro do contrato antes que a primeira execução termine, manipulando o comportamento do contrato.
- Estouro de inteiros: Ocorre quando uma operação aritmética excede o intervalo de um tipo de dados, causando um comportamento inesperado.
- Denegação de Serviço (DoS): Um ataque de DoS pode bloquear o acesso a funções críticas ou esgotar o gás do contrato, impedindo o seu bom funcionamento.
- Falhas nos controles de acesso: Permite que usuários não autorizados acessem funções que deveriam ser restritas, comprometendo a integridade do sistema.
- Informações privadas na Blockchain: As informações armazenadas na blockchain são públicas e a confidencialidade pode ser comprometida se não forem devidamente criptografadas.
Chamadas inseguras para contratos externos: O uso de delegatecall() com contratos não confiáveis, pode permitir que o estado interno do contrato que faz a chamada seja manipulado.
HACONTI – Desafios da segurança cibernética
HACONTI (Hackeie o contrato não tão inteligente) é uma plataforma web que oferece desafios de segurança cibernética baseados em contratos inteligentes desenvolvidos em Solidity. Cada nível ou desafio da plataforma consiste em um contrato inteligente com alguma vulnerabilidade que deve ser explorada para sua resolução.
A plataforma possui um total de trinta níveis, agrupados em três categorias diferentes, cada um com uma dificuldade associada. Duas das características mais notáveis de HACONTI são a abundante informação contextual fornecida sobre as vulnerabilidades dos níveis e o sistema de pontos inovador que apresenta.
Menu principal de HACONTI
Categorias dos desafios
- Categoria 1 (Introdutória): Níveis projetados para familiarizar os jogadores com Ethereum e contratos inteligentes, e fornecer habilidades básicas para implantar e interagir com contratos em Solidity sem experiência anterior.
- Categoria 2 (Vulnerabilidades simples): Níveis focados no ensino sobre vulnerabilidades específicas, associadas a um SWC (Smart Contract Weakness Classification) e/ou SCSVS (Smart Contract Security Verification Standard) determinado.
- Categoria 3 (Vulnerabilidades complexas e encadeadas): Níveis mais difíceis que combinam várias vulnerabilidades simples, que devem ser exploradas em cadeia para completá-los, testando as habilidades adquiridas na resolução dos níveis anteriores.
Informações contextuais dos desafios
Cada nível indica seu estado (resolvido ou não), sua dificuldade e categoria associada, e inclui uma lista de objetivos de realização e o código-fonte do contrato vulnerável com o qual deve haver interação para passar de nível.
Vista do nível “Reentrada”
Além disso, os níveis da Categoria 1 incluem um tutorial detalhado para sua resolução, e os níveis das Categorias 2 e 3 incluem:
- Descrição: Detalhes sobre o desafio.
- Hints: Pistas desbloqueáveis com pontos.
- Hints adicionais: Pistas extra que requerem mais pontos.
- SWC e SCSVS: Informações sobre vulnerabilidades e listas de verificação associadas, desbloqueáveis com pontos adicionais.
Informações do nível “Ponteiro”
Do outro lado, uma vez resolvido um nível também é desbloqueado:
- Informações adicionais: Detalhes técnicos sobre a resolução do nível.
- Casos reais: Exemplos de incidentes do mundo real em que invasores roubaram milhões de Ether devido a vulnerabilidades semelhantes às do nível resolvido.
- Código corrigido: Código-fonte corrigido do contrato, demonstrando como remediar a vulnerabilidade. Pode haver mais de uma versão da remediação.
- As Hints, Hints adicionais e as informações de SWC e SCSVS associadas ao nível resolvido são desbloqueadas automaticamente, independentemente do número de pontos do jogador.
Informações desbloqueáveis do nível “NomeConstrutor”
Sistema de pontos de HACONTI
Os pontos são concedidos ao resolver níveis. A distribuição dos pontos de acordo com a dificuldade dos níveis é a seguinte:
- Muito Fácil: 50 pontos
- Fácil: 100 pontos
- Normal: 150 pontos
- Difícil: 200 pontos
- Muito Difícil: 300 pontos
Esses pontos permitem que os jogadores subam em um ranking público, além de serem necessários para desbloquear hints, hints adicionais, e detalhes sobre vulnerabilidades (SWC e SCSVS). Também, podem ser usados para personalizar o perfil do jogador, como estabelecer um nick (200 pontos), escolher uma bandeira (500 pontos) e adicionar informações de contato como e-mail, site e redes sociais, com mais pontos acumulados.
Ranking de HACONTI
As opiniões expressas pelos autores deste blog são próprias e não refletem necessariamente as opiniões de LACNIC.