Blaze Blog /

Auditoria de segurança de smart contract da Jury.Online

Security
Apr 30, 2018
6min read
Ilustração de um mago conversando com um orc sobre código

Introdução

Este artigo apresenta os resultados de uma auditoria de segurança de um contrato inteligente realizada pela Blaze Information Security, divulgada em nome do cliente Jury.Online. Esta publicação contém as mesmas informações e descobertas presentes no relatório publicado no final de março de 2018.

A auditoria foi realizada por Victor Farias (líder do projeto) e Julio Fort, da Blaze Information Security.

Isenção de responsabilidade: Este documento apresenta as descobertas de uma revisão de segurança dos contratos inteligentes sob o escopo da auditoria. Por ser um exercício com prazo determinado e realizado com o melhor esforço possível, não garante a ausência de outros problemas de segurança no contrato inteligente. Os resultados desta auditoria não devem ser interpretados como aconselhamento de investimento.

Relatório

Este documento apresenta os resultados de uma Revisão de Segurança de Contrato Inteligente para a Jury.Online. Este trabalho teve como objetivo verificar se o contrato inteligente executa apenas as funções pretendidas e descobrir vulnerabilidades de segurança que poderiam afetar negativamente o projeto antes que o contrato fosse implantado na rede blockchain.

A Jury.Online visa criar uma plataforma para facilitar acordos entre diferentes partes. A plataforma atua como intermediária em um negócio, funcionando como um serviço de custódia (escrow); ela media uma determinada transação e, se todas as partes estiverem satisfeitas com o resultado do acordo, a transação é concluída com sucesso. Como serviço de custódia, também media disputas entre as partes envolvidas.

A Jury.Online proporciona a interação entre juízes, árbitros e as partes de um acordo para a resolução de disputas. Utiliza um token baseado no padrão ERC20 da Ethereum e os contratos foram escritos em Solidity. Detalhes sobre a Jury.Online estão no whitepaper.

A análise concentrou-se em vulnerabilidades relacionadas à implementação e em problemas causados por erros de arquitetura e design, bem como em inconsistências entre a documentação e o código.

Para cada padrão de código em desacordo com o padrão de token da Ethereum ou com a especificação do contrato, desvio de boas práticas e vulnerabilidade descoberta durante a avaliação, a Blaze Information Security atribuiu uma classificação de gravidade de risco e, sempre que possível, validou a existência da vulnerabilidade com um código de exploração funcional.

Os principais objetivos da avaliação foram os seguintes:

  • Identificar os principais problemas de segurança presentes no contrato inteligente
  • Avaliar o nível das práticas de codificação segura presentes no projeto
  • Obter evidências para cada vulnerabilidade e, se possível, desenvolver um exploit funcional
  • Descreva, de forma clara e fácil de reproduzir, todos os procedimentos utilizados para replicar o problema
  • Recomende fatores de mitigação e correções para cada defeito identificado na análise
  • Forneça contexto com um cenário de risco real baseado em um modelo de ameaças realista

Resumo executivo

O trabalho foi realizado em um período total de 6 dias úteis, incluindo a redação do relatório. A revisão de segurança do contrato inteligente começou em tempo parcial em 05 de março de 2018 e terminou em 16 de março de 2018, finalizando com a versão preliminar deste relatório.

Em 23 de março de 2018, todas as descobertas relatadas pela Blaze Information Security foram corrigidas adequadamente pela Jury.Online. Os problemas não estão mais presentes no código dos contratos e foram corrigidos no commit 3f5f707cfeec36e174702b46be0c8f6850e6a12b.

A auditoria foi realizada com o auxílio de ferramentas automatizadas e também submetida a uma revisão manual. O código EVM gerado não foi inspecionado nesta avaliação.

Foi descoberto apenas um problema menor nos contratos auditados neste trabalho. Acreditava-se que esse problema não trazia um risco imediato aos contratos, mas deve ser considerado como um conselho para melhorar sua segurança e torná-los preparados para o futuro.

A revisão dos contratos sob escopo não revelou vulnerabilidades que pudessem levar à perda de tokens, ao viés de jurados ou a problemas com potencial para causar um impacto significativo nas operações pretendidas da Jury.Online.

A Jury.Online possuía padrões de codificação de segurança defensiva e seguiu muitas boas práticas recomendadas de programação em Solidity. No geral, a qualidade do código foi considerada muito boa, pois estava clara, bem comentada e fácil de entender.

Escopo

O escopo desta revisão de segurança é composto por contratos inteligentes escritos em Solidity.

  • Nome do projeto: juryonline
  • Commit: 986aca6ca9c666a34632e4e0ed10d2c78d1fa245

Nome do arquivo / Linhas de código:

  • ERC20Token.sol / 237
  • JuryOnlineExchanger.sol / 28
  • JuryOnlineICOContract.sol / 204
  • JuryOnlineInvestContract.sol / 226
  • Migrations.sol / 23
  • Pullable.sol / 38

O código auditado é de código aberto e pode ser encontrado em https://github.com/juryonline/contracts/tree/playground (branch Playground).

Revisão de segurança de smart contracts

Nossa revisão de segurança de smart contracts segue uma metodologia organizada com o objetivo de identificar o maior número possível de vulnerabilidades nos contratos sob análise, sob a perspectiva de um adversário motivado, tecnicamente capaz e persistente.

Damos atenção especial a áreas críticas do smart contract, como a queima de tokens e o funcionamento da assinatura múltipla (multi-sig). Nosso processo também investiga outros problemas comuns de implementação que levam a falhas como reentrância, estouros e subfluxos matemáticos, negação de serviço relacionada a gas, entre outros.

A metodologia de revisão de smart contracts da Blaze envolve técnicas de auditoria automatizadas e manuais. As aplicações são submetidas a uma rodada de análise dinâmica utilizando ferramentas como linters, profilers de programas e scanners de segurança de código-fonte.

O código-fonte dos contratos é inspecionado manualmente em busca de falhas de segurança. Esse tipo de análise tem a capacidade de detectar problemas que passam despercebidos por scanners automatizados e analisadores estáticos, pois consegue descobrir casos extremos e problemas relacionados à lógica de negócio.

Resumo técnico

Descrição dos smart contracts

  • ERC20Token.sol: Contrato com o token padrão ERC20, modificado com melhorias de segurança como SafeMath e approve_fixed, este último criado para prevenir uma conhecida condição de corrida (race condition) do ERC20 que pode causar saques duplicados.
  • JuryOnlineICOContract.sol: Responsável pela arrecadação de fundos. Este contrato define as metas de financiamento para cada marco, o esforço total a ser despendido e a duração do projeto.
  • JuryOnlineInvestContract.sol: Este contrato é responsável por gerenciar potenciais conflitos de interesses entre as partes. Um investidor pode abrir um caso de disputa contra um desenvolvedor sobre um marco do projeto, por exemplo, e isso será votado pelos jurados para decidir se os recursos e fundos devem ou não ser alocados para a continuação do projeto.
  • Pullable.sol: Este contrato possui métodos auxiliares usados no InvestContract para realizar transferências assíncronas.

Vulnerabilidades

1. Ausência de verificações de underflow e overflow aritmético em partes do contrato

Pontos afetados: JuryOnlineICOContract.sol e JuryOnlineInvestContract.sol
Corrigido no commit 3f5f707cfeec36e174702b46be0c8f6850e6a12b
Severidade: Baixa

Durante a auditoria, observou-se que o contrato implementa uma série de medidas em relação a operações matemáticas para prevenir e mitigar efetivamente underflows e overflows aritméticos de variáveis uint32.

No entanto, a Blaze Information Security notou que algumas partes do contrato em JuryOnlineICOContract.sol e JuryOnlineInvestContract.sol não aplicavam essas contramedidas, tornando as variáveis e funções que realizam operações matemáticas nesses contratos potencialmente suscetíveis a esse tipo de ataque.

O código abaixo ilustra a ausência de SafeMath ou outras funções e bibliotecas para prevenir overflows e underflows aritméticos:

Vulnerable code in Jury.Online smart contract with no SafeMath

Embora não tenham sido encontradas evidências de um cenário de exploração viável usando underflow ou overflow nesses contratos durante esta avaliação, é importante implementar a mitigação antecipadamente para tornar esse tipo de ataque impossível, mesmo que sejam descobertos no código ou acionados por casos extremos.

Referências:

Solução: Como uma boa prática geral e para manter a consistência com as mesmas contramedidas de segurança já presentes no projeto, recomenda-se aplicar a mesma mitigação implementada em outras partes do contrato aos arquivos Solidity mencionados.

Considere usar a SafeMath da OpenZeppelin, por ser a biblioteca mais popular com verificações de segurança aprimoradas para operações matemáticas seguras. Entende-se, no entanto, que adicionar essas salvaguardas aritméticas ao contrato pode aumentar o consumo de gás.

Conclusão

O objetivo final de uma avaliação de segurança é proporcionar a oportunidade de ilustrar melhor o risco de uma organização e ajudá-la a compreender e validar sua postura de segurança contra ameaças potenciais ao seu negócio.

Com isso em mente, a Blaze Information Security fornece as seguintes recomendações que acreditamos deveriam ser adotadas como próximos passos para aprimorar ainda mais a postura de segurança dos contratos inteligentes:

  • Corrigir o único problema pendente apresentado no relatório, levando em consideração o desenvolvimento futuro do projeto
  • Contratar outro provedor de segurança de TI terceirizado para a segunda rodada de auditoria
  • Considerar o estabelecimento de um programa de recompensa por bugs (bug bounty), uma prática cada vez mais comum entre empresas no campo de contratos inteligentes e blockchain

A Blaze Information Security gostaria de agradecer à equipe da Jury.Online pelo apoio e assistência durante todo o trabalho.

Do you have questions? Let's talk.

Get in touch with our cybersecurity experts

Read More