Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Smart Contracts - Aspectos técnicos e principais vulnerabilidades

Smart Contracts - Aspectos técnicos e principais vulnerabilidades

Nesta talk apresentada no The Developer's Conference (Porto Alegre) de 2017 apresentei aspectos técnicos dos Smart Contracts e as principais vulnerabilidades apresentadas por eles. Também abordei os casos mais conhecidos de ataques hackers aos Smart Contracts.

Rafael Calixto

November 08, 2017
Tweet

More Decks by Rafael Calixto

Other Decks in Programming

Transcript

  1. pen4education About me Rafael Calixto Ferreira de Araújo MBA Ciência

    de Dados (Big Data) Especialista em criptomoedas e Big Data https://www.linkedin.com/in/rafael-calixto-9a11936b/ github.com/rafaelcalixto/ [email protected]
  2. pen4education • Empresa sediada em Porto Alegre • Parceira MongoDB,

    Hortonworks e IBM no Brasil • Atua com consultoria, arquitetura, implementação, serviços continuados e treinamentos em: • Bancos NoSQL • Hadoop • Data Science • Mais informações e cases: http://propus.science
  3. pen4education Agenda • Propriedades do Smart Contract • Padrões •

    Validações • Vulnerabilidades https://www.draglet.com/blockchain-applications/smart-contracts
  4. pen4education Propriedades • Deploy na blockchain • (não é possível

    alterar ou apagar, função suicide) • Apenas o EVM bytecode é registrado • (A linguagem escolhida influencia no tempo, custo e vulnerabilidades) • Transações em diferentes unidades de valor • (Gas, Ethereum, Wei e Tokens) • Solidity é a linguagem mais utilizada no momento
  5. pen4education Solidity • Características básicas • Orientada ao Contrato •

    Alto nível • Baseado em JavaScript • Tipos de variáveis • bool, uint, address, mapping • Objetos • block, now, tx, msg
  6. pen4education ERC20 • totalSupply( ) • Retorna o total de

    Tokens (msg.sender) • balanceOf( address _owner ) • Retorna o balanço de outra conta • tranfer( address _to, uint256 _value ) • Transfere uma quantidade definida dos seus Tokens para uma outra conta
  7. pen4education ERC20 • transferFrom( address _from, address _to, uint256 _value

    ) returns ( bool success ) • Envia uma quantidade definida de Tokens do endereço A para o endereço B • approve( address _spender, uint256 _value ) returns ( bool success ) • Permite a uma carteira definida realizar saques de Tokens em um valor definido
  8. pen4education ERC20 • allowance( address _owner, address _spender ) constant

    returns ( uint256 remaining ) • Retorna o saldo de Tokens ainda disponível na carteira A para ser retirado pela carteira B • event Tranfer( address indexed _from, address indexed _to, uint256 _value ) • Executado quando Tokens são transferidos • event Approval( address indexed _owner, address indexed _spender, uint256 _value ) • Executado sempre que a função approve é chamada
  9. pen4education Validações (já adaptado para o Metropolis) • Função require

    ( bool ) • (mais comum, usado no início da função, não desfaz a transação, debug) • Função assert ( bool ) • (casos específicos, usado no final da função, desfaz a transação, poderia ter sido usado para evitar o hack da DAO) • Função modifier • (executada antes de todas as funções, útil para criar validações)
  10. pen4education Vulnerabilidades • Reentrancy • The DAO Attack • Keeping

    Secrets • Multi-player Games • Immutable Bugs • Rubixi https://eprint.iacr.org/2016/1007.pdf http://www.seethewhizard.com/blog/were-not-ready-for-smart-homes/
  11. pen4education Vulnerabilidades • Call to the unknown • Dynamic Libraries

    • delegatecall( ) https://blog.zeppelin.solutions/on-the-parity-wallet-multisig-hack-405a8c12e8f7
  12. pen4education Vulnerabilidades • Ferramentas • https://securify.ch/ • Oyente (script em

    python) - https://github.com/ethereum/oyente • Consultorias • Fóruns e Comunidades • https://ethereum.stackexchange.com/