Auditoria e segurança | Bootcamp #EthereumRio | Robson Silva

Bootcamp Ethereum Rio (2023) · 29 Dec 2022 · 31:40

Smart contract security is presented as layered defence rather than a single audit, because deployed contracts cannot be patched like web software and professional audits start around fifteen thousand dollars. Cheap unit tests form the front line, followed by integration tests that mock external contracts, coverage tooling that reveals untested branches, documentation, fuzzing and static analysis. Risk is framed as the probability of an event times its impact, so teams that cannot afford many layers of prevention are advised to limit impact with deposit caps and an emergency stop function. Free challenges and a scanning tool are recommended for practice.

Speakers

Topics

From Bootcamp Ethereum Rio (2023), hosted by Ethereum Brasil.

Transcript

beleza gente é eu vou falar o tema agora então é segurança eu vou falar 20 minutos não vai ser dessa vez não vai ter prática porque eu acho que é mais importante conceito dá um Geral de segurança e aí depois eu dou Aonde vocês vão treinar porque hoje já tem uns lugares legais para treinar segurança é um tema bem mais chato que na FT eu tô até sem graça aqui de falar de segurança depois o show do Jeff Mas vamos lá importante eu quero apresentar para vocês o Fábio Rio Grande brasileiro também não pode estar aqui vale a pena seguir ele ele foi auditor de segurança muito tempo e ele que me dá uma inspiração de um

texto que eu escrevi sobre segurança e ele tem esse texto que ele explica como que no High que é um concorrente do dai uma outra não concorrente não gosto como Jeff que são públicos diferentes ele explica como que ele pensou na segurança do protocolo é um texto muito legal já fica aí a indicação e eu vou usar a foto aqui na verdade para começar a minha palestra né que é desse castelo com as camadas né que eu acho que em cripto a gente tava vindo com conceito de que segurança era auditoria é isso a segurança auditoria e não é a verdade é segurança ele é todo é desde como você

senta na cadeira para começar a acordar o seu mindset né Essa palavra vibe de como que você vai programar eu vou programar para fazer um negócio rápido aqui não isso já não tenha pegado de segurança Mas tirando o meu chapéu de desenvolvedor e colocando chapéu de empreendedor também tipo não dá para você também falar assim ah eu vou fazer teste desde o começo vou fazer no meu cartão vou fazer teste não não faz sentido é muito caro então também a gente aprendeu na raça isso lá na Pods a gente fez passou por três auditorias em um ano e pouco é muito caro para vocês terem noção assim uma auditoria de código de smart quase

todos os contratos famosos tem auditoria auditoria ela começa em 15 mil dólares o processo de tão contrato de cinco contratos ali é isso você vai pagar já vai lá para casa quase dos mil reais então é um negócio assim caríssimo Então como que uma Startup vai ter dinheiro eu sou um projeto projeto de raca Tom como que eu vou ter dinheiro para fazer isso né o bom então não te pede aqui não mas brincadeira é dá para ter outras técnicas você não precisa confiar totalmente o seu o seu segurança do projeto numa auditoria então o que que são essas camadas né eu gosto de fazer

uma analogia que eu jogava jogo né eu jogava aí of Empires quando eu era menor e para mim segurança ela é como se fosse montar um exército do Wade porque você não vai ali você não vai para guerra e você só vai com canhão que seria auditoria você precisa montar algumas defesas e aí o que que são essas defesas vou apresentar rapidamente para vocês o que que você tem que pensar quando vocês forem criar seus Smart contra e vocês forem amadurecer um pouco a ideia essa aula que ela é um pouco mais intermediário já assim não é um negócio que ah eu ainda tô aprendendo a deploiar tal você já tá me falando de segurança É por que que eu tô falando de

segurança é aquilo que eu comentei ontem para vocês que quando você tava na web 2 era o lema do Facebook era build Fast breakings né você faz um jeito mais rápido possível para você ter um produto prático para você levar para o mercado só que se você fizer isso no smart contratualmente você vai ser hackeado E aí você vai pegar vai perder tudo a sua credibilidade no mercado Além do dinheiro dos seus clientes então como eu falei ontem isso é legal bater na tecla que o Fábio falava isso para mim quando eu comecei que criar Smart contra quiser

mais parecido com criar um hardware do que criar software então para quem é programador ele tá vindo de web 2 que faz back Angel você tem que ter um outro jeito de olhar para o código isso demora um pouco para você desenvolver essa Malícia como eu falei ontem você tem que colocar mais esforço antes eu trabalhei em Startup que a gente no front-end passou dois anos sem fazer um teste unitário não tinha teste na aplicação e é normal não frontiend para que se quebrar a gente vai lá sobe o botão conserta mas o Smart contra a gente não dá para ter essa mentalidade então é a arte de achar o meio do caminho

entre você não demorar demais para lançar o seu produto porque você fica noiado em segurança mas também não é para ir para mentalidade de web 2 porque não vai funcionar porque na web 2 primeira coisa né você consegue puxar desculpa que tá em inglês essa apresentação porque não deu tempo de traduzir eu fiz um outro não fiz um PowerPoint normal E aí eu tava difícil de traduzir mas eu vou falando aqui em português na web 2 você não consegue puxar a tomada porque no máximo se tiver um problema grande lá no seu software você fala assim para para tira a máquina na WS Vamos para o sistema bloqueio login aqui como a gente

já falou algumas vezes é imutável pelo menos você não fazer os contratos que é uma outra história não tem já foi uma vez que tá lá já estão usando o seu sistema você já não tem esse controle na web 2 você tem esse conceito do contínuos deploide né para quem é novo em programação contínuos deplint tipo eu lembro de ter visto um dado que o Facebook ele é deploiado Facebook eu já tô fazendo coisa de velha aqui né Pega sei lá ou alguma web 2 mais recente eles eram deploiados assim é centenas de vezes por dia ou no máximo nas dezenas Mas é por dia é o release é que você tá acontecendo por dia porque mudou uma

ficha mudou algum código que você às vezes não é na interface você nem tá vendo o WhatsApp web Quantas vezes a gente entra lá ele já mostra o pop-up ah você tem que dar um refresh na tela tá rolando um depoimento ali por trás na web3 Repara você não tem nesse APV 1.2.3 é uni soap para quem conhece né é unishop v1 passa um ano B2 Você tem uma ave vê um passa um ano V2 que é muito mais parecido com o celular você tem o Samsung Galaxy não você passa um ano é o Galaxy 22 é o Galaxy porque demora esse tempo de você fazer todo esse processo de segurança e aqui né a gente consegue consertar o

erro em produção na web3 se não tem isso então a mensagem grande dessa palestra que é o que eu falei ontem é pensa nisso não é mentalidade de web 2 totalmente não é um back Angel simples smart contradit tem que mudar um pouco essa forma de pensar para quando você tá no full steck é um pouco difícil isso porque aí você começa a ficar chato você faz você tá naquela mentalidade Ai meu Deus eu tenho que fazer um teste unitário aqui no solidget vocês volta Prontinho agora eu posso fazer qualquer coisa aí você volta ai meu Deus para quem foi que tem essa dificuldade de ficar navegando nesses dois mundos então vou falar rapidamente aqui do dessas camadas né O que que dá para fazer de segurança

que não precisa da auditoria antes de precisar chegar nos canhões né aqui tem uma lista de eu fiz um check list aqui do que que vocês podem fazer antes da auditoria né então vocês vão lá para o cartão semana que vem vocês fazem um código legal falar Putz quero levar essa ideia para frente ou nem que seja empreender quero ser contratado quero ser quero virar a sua e eu vou para o mercado vão te cobrar isso vamos te cobrar tipo ferramental tem que saber ferramental tem que saber remix tem que saber hard Hatch tem quer saber

um terceiro ferramenta tem que saber é o básico ali eu sei mexer nas ferramentas outra coisa que vão te cobrar segurança se você quer virar um solicite deve segurança é uma das verticais que você precisa aprender Tem uma parte também de performance muita diferença você saber na minha visão é mais importante saber o ferramental e saber segurança e otimização de gases já é bom de se ter essa aqui é uma listinha de alguns tópicos seria legais legal vocês terem mentes para fortalecer aí a jornada de um solidge de developer então teste unitário básico

no hard Hatch você consegue fazer teste unitário ali em javas Você já faz o teste unitário em Solid code esses termos vou explicando uma aqui é você fazer a mensurar quantos testes tem no seu sistema todas as possibilidades né por exemplo se eu tenho um infielce num sistema Eu Já Tenho duas possibilidades Será que eu testei o if e testei o elsy o Code cover é uma ferramenta que ele vai lá e varre todas as possibilidades do seu smart contra a gente fala ó tem vários trechos dessa árvore que você não testou ainda você

testou um if aqui mas faltou aquele alce e às vezes naquele else tinha um problema se você cria um teste unitário para aquele a gente passou por isso às vezes Deixou passar ali um trecho você tem um Infiel que vai incluir fiel você vai você não testou o quarto ramo Ali era ali que tinha um erro e ali que seu contrato pode ser implementado teste de integração Qual que é a diferença do teste unitário para o teste de integração o teste unitário muitas vezes está testando a função função de depósito função de retirada você faz um teste só para aquela situação ali o teste de integração você já começa a e você Mooca né o termo é mocá então por exemplo se eu tô fazendo um teste de depósito que

na função do teste de depósito eu passo pelo contrato da unisuap depois eu volto para o meu contrato eu não vou testar não vou ver se op tá vai funcionar como deveria eu moco que que é Mooca eu fiz uma resposta aqui tá então na minha função de depósito eu tô testando depósito aí passa por um fingimento e volto para a função de depósito no teste de integração não aí você vai testar cara deixa eu ver se realmente o meu contrato com o contrato nisso up tá funcionando é um segundo nível beleza documentação cara documentação é desde você comentar o seu código eu ouvi em algum alguém de

vocês no primeiro dia eu ouvi falando de nata speak ali Falou você fez né então já o que que o netspec ele tem um formato no solidite de você documentar que dá erro até no compilador então se você não fez uma documentação correta o compilador vai te avisar e falar Opa essa documentação aqui tem alguma coisa faltando tá documentação vai desde documentar o seu código até documentar o que que o seu sistema faz isso é importante para você estar preparado tanto para auditoria quanto para o cliente final você tem que ter isso em mente é você quer um diagrama ali de estado do seu contrato a essas são as possibilidades é você criar um texto mesmo que explica de uma forma um pouco mais relevo

é documentar algo para alguém você passar uma mensagem que você não vai direto no detalhe ali né Por exemplo no nosso up né Você não vai falar assim ó dá liquidez e tal não a gente para falar a gente começou e vai é isso a Sol falou ó tinha os olhos de books centralizados aqui tem uma opção e liquidez Então você vai fazendo um caminho não é você já ir lá direto o meu código faz isso não você dá um contexto é muito importante é você passar no seu time né lá na pontes a gente tem até uma não é nosso a gente pega de outros projetos que que os

projetos mais profissionais fazem quem escreve o código não testa eu escrevi a função de depósito do Smart Control escreve o teste da função de depósito isso é bem comum nos times de mais profissionais nem sempre dá mas a gente tenta quem testa não é a pessoa que cria isso é legal então se vocês quiserem então num time com bastante gente tem gente que quer colocar a mão pô tem dois duas pessoas quer colocar a mão na massa em solidite mas nem tem espaço no contrato para duas pessoas fazerem Ah então divide aí não faz o teste você já aprende o teste o outro faz o código é legal essa daqui eu vou comentar só para vocês

terem no repertório mas avançado mais para frente aí eu lembro que ele comentou análise estática eu vou mostrar uma ferramenta ela ela tem na no banco de dados dela digamos assim várias vulnerabilidades já conhecidas de Smart Control passa lá seu código vai lendo e ele vai buscando no seu smart contracheque atual tem alguma vulnerabilidade que já foi conhecida tem vários famosos e ele faz essa análise para você eu vou indicar uma ferramenta gratuita bem recente Então o negócio bem Cara vocês quem usar aí vai tá usando a ponta da tecnologia que isso aqui não tinha isso

aqui essas duas aqui ainda é muito obscuro é bem difícil de fazer não tem um negócio fácil que nem o remix mas aqui já tá começando a ter tão começando a entrar os produtos no mercado que faz isso aqui de forma mais fácil e fazer teste treina um outra que tem um outra que chama análise formal eu vou comentar fazer teste é o seguinte às vezes se inscrever um teste unitário você escreve um teste para uma situação por exemplo vou escrever um teste de depósito ou Hobby depositou 10 Então tem que aparecer no smart contrate 10 eu não faço para todas as possibilidades eu só faço para uma 10 às vezes eu faço para os extremos 10 número negativo número

muito grande eu crio três cenários de teste para tentar varrer ali mas eu não crio várias uva fazer teste esse fase Você programa o teste para uma outro nível Beleza vou depositar 10 cara você vai depositar todos os números inteiros aí você vai lá ele fica um dia rodando ele vai ficar rodando um dois três quatro e testar as possibilidades para ver se alguma coisa quebra ali no meio ele tem uns fuziers né que a gente fala que eles só até inteligentes se eles vê por exemplo ele está testando 1 2 3 4 5 6 ele testou um número primo 13 aí ele deu alguma coisa diferente no código aí ele para de testar todo o resto ele vai para o 13 e ele começa a testar 13 com

combinações Então as ferramentas de Fuzzy elas são muito boas tem duas no mercado geralmente elas são criadas pelas próprias auditorias a Trail Of bits que é uma auditoria famosa é ela é criadora de um fãs e fãs e bem famoso aí Beleza então essa é a lista de coisas que vocês podem estudar para complementar sua formação de desenvolvedor solidit e caso vocês tenham um projeto que queira levar para a frente do rakaton tem um em mente que isso aí é um lugar de Line aí de do que fazer cada uma vou passar bem rápido porque

não é o ponto mas cada uma tem um nível de dificuldade um tempo né Por exemplo fazer teste de integração é bem mais difícil de fazer um teste unitário Então você faz menos faz mais para depois você não precisa fazer desde o começo só para vocês terem uma noção então cada um é também legal que cada um pega um tipo de erro diferente né então isso são as camadas o teste unitário é o guerreiro ali da frente ele é um cara que se joga de Monte é fácil rápido de fazer barato então eu considero ele ali a linha de frente rápido e barato tem que fazer gente

teste unitários sequer entrar se você veio da web 2 e tem e não gosto de fazer teste muda mentalidade se quer entrar nesse mercado para sempre teste de integração já é um pouco mais cavalaria e já Um pouco mais complexo um pouco mais caro de fazer você não faz tanto você pode deixar para depois o covard para mim é a ferramenta que mensura a quantidade de teste que você tem no sistema para mim ele não é um tipo de soldado ele é mais a casa de máquinas lá que melhora os seus soldados é um negócio no meu dia a dia a gente

cria o teste junto com a ferramenta que já vai mensurando então aí você já você já vai assim você criou um Smart Counter roda a ferramenta de teste ele já vai te mostrar todos os infiéus que você tem que testar E aí em cima da ferramenta você já vai montando os seus testes com base na ferramenta eu até mostro aqui rapidamente o hard Hatch também tem um plugin assim como do éter que eu mostrei hoje cedo ele tem um plugin a mesma coisa adiciona ele numa linha roda o roda mpm rádio e ele já vai criar um HTML bonitinho para você olhando seus

Smart Contra Eles vendo todas as possibilidades de teste do caminho vale a pena vocês experimentarem complementando se você quiser ainda deixar público você fala Putz quero deixar ainda público a minha lista de covard que é impressionar o recrutador e falar caramba sabe as provinhas de programação que você vai fazer para entrar na empresa cara que é impressionar o cara você faz o Smart contra que faz o teste dele roda o cover de para mostrar para o cara que você sabe que tem uma mensurar quantidade de teste e ainda bota o upload do cover Rose que eu grave Caramba esse cara sabe entende de segurança um pouco

ferramenta legal gratuita se o repositório no github é público E aí enfim Isso aqui é uma dica só para você ainda quiser deixar de forma automática no github Toda vez que você muda o contrato ele já roda o teste boa do covard e posta o resultado tem um github Actions aí para o teste também documentação para mim é igual os padres da época do Ed lá que era ela serve mais de novo como enember ele não é um soldado ele é para você melhorar a comunicação ali de todo mundo

é para o que a gente chama de diex né em cripto em blockchain esse a gente fala de ex incrível tem muito diex porque quem são os clientes do Up tem as pessoas que usam a interface no shopping mas grandes dos clientes desenvolvedores é o dieex ou de vela por xperience tem que pensar nisso para mim cara ela sabe o que é isso é muito fácil implementar eles estão o tempo todo pensando nesse diex né E se você tá querendo Smart contra ti Você às vezes não tá só para o cliente final porque depois esse Smart contra a gente faz não sei o quê você tá ali com deve do outro lado e a

documentação ajuda nisso também o fã de teste para mim são as torres as paredes porque eles vão cobrir todo a superfície né como eu falei Você vai testar todas as possibilidades para os testes aqui eu dou umas dicas de auditoria Mas não é para vocês agora eu quero falar disso aqui o que que é risco insegurança né a gente fala muito de segurança é risco ela é uma equação de probabilidade do evento acontecer e do impacto que aquilo tem que causar

problema por exemplo Qual que é a probabilidade de um site ficar fora do ar pode ser muito alta dependendo se você tem que nenhum servidor que não aguenta muito request mas o impacto é baixo porque não é que você tá perdendo dinheiro da conta dos seus clientes você vai ficar ali fora do ar se aperta um botão voltou então é um evento de probabilidade de probabilidade de alta com impacto baixo em cripto geralmente Impacto é alto E aí a gente tenta trabalhar aqui o máximo de reduzir a probabilidade sempre tem você tem contratos aí de dois anos que nunca tinha dado um bug e de repente então o que que a gente faz às vezes

em vez de você focar em reduzir a probabilidade do evento com teste com tudo que eu tô falando aqui tem também uma alternativa que aí entra lá Fiz um projeto de rakaton e eu não tenho dinheiro para pagar não levantei dinheiro não tem não tenho capital para pagar essa auditoria que eu tô falando 100 mil reais tá maluco então foca aqui então vamos reduzir o impacto como que você reduz o impacto em cripto coloca uma função de travar eu tento depositar 10 héteros Se eu tentar depositar 11 o contrato reverte é cap né que a gente fala é uma função o que que outra coisa que você pode fazer eu sei que é descentralizado e a

gente tá todo mundo nesse caminho mas eu acredito pessoalmente no caminho para descentralização coloca uma função de emergência Stop no seu contrato no seu smart contracheque precisa de cinco pessoas se dá um problemão você consegue travar o sistema ali contratos famosos tem essa função de trava de Emergência com uma multiga ou às vezes até que a governança o meio quer dar por exemplo se não me engano os donos do mkr que conseguem voltar e aí o sistema para enfim mas essa ideia deles de emergência Stop de cap é aqui para tentar reduzir o impacto em vez de você tentar reduzir a probabilidade do evento com todas as camadas de segurança

então também tenho isso em mente aí formas de reduzir isso tem perguntas tá eu lembro que antes uma entrevista de emprego que eu fiz de blockchain deve o entrevistador me perguntou assim como que você protege o que você faz para proteger Você não vai falar só teste pode até falar mas a resposta que o cara vai querer a resposta mais completa falar cara segurança depende do tamanho do seu contrato isso é um protocolo que você tem cinco anos você tem um bilhão em valor locado é um outro tipo de segurança o que momento da empresa você tá então você já começa a misturar até que com entender um pouco de Tech Business aqui

né Ah tá beleza dado o seu tamanho risco é uma função de probabilidade de evento Impacto que que a gente pode mexer aqui a gente pode reduzir Impacto a gente pode reduzir a probabilidade de evento para reduzir a probabilidade de evento tem teste unitário e aí você vai falando você vai falando só arsenal de coisas de segurança que você já sabe que tem ali então dicas aí de como se um dia tiverem fazendo uma entrevista de emprego de perguntar de segurança não é só teste não é eu tomo cuidado eu presto atenção é todo esse ar sinal de coisas aí que você pode falar de risco beleza

e aí para finalizar eu queria mostrar Aonde vocês vão treinar se vocês querem melhorar sua Skill de segurança nem sei quem é exatamente lá criou essas provinhas o eternalti aqui eu não tenho como é só teórico não tem um pé de leite só mas depois eu coloquei algum ele tem 23 25 eles atualizam de vez em quando eles têm 25 provas de segurança de smart contrate que é muito bom para aprender

que ele vai explicar reentrância o guias comentou na ontem cara tem coisas que assim eu gravo estado antes eu faço transfer depois faz diferença isso a ordem né Você pode cair numa reentrância enfim todas as os mais famosos aqui ele vai te falando passo a passo para você testar e aprender e melhorar sua Skill de segurança mas para frente né Isso não é muito para rakaton mas é se vocês quiserem aprofundar seus estudos em lote em solidite então eternalti fica aí a dica não acho que no repositório do github eles têm as respostas também tem

também o canal do discord deles que você a gente pode sempre perguntar o link desse canal está lá no médico acabei de colocar no final do pé de 5 Então beleza e a última coisa também é legal uma outra forma de aprender e de testar que é o análise estática que eu comentei com vocês essa ferramenta é super nova eu acho que ela tem três meses ela chama e que que ela faz ela tá tem um Trail gratuito eu vou até conversar eu conheço o cara é

bem legal o cara que criou isso daqui ele é um indiano que ele ganhou o buggy balde de tudo assim Google Facebook já achou hack em todos os projetos ele resolveu criar isso aqui é muito legal eu vou até comentar para ele de ter tipo um framew aí para o pessoal para né Sistema empresa de um são desenvolvedores estudante deveria ser de graça Total mas por enquanto ele tem um trailer você pode rodar não sei três smartphones vai ser cria uma nova conta aí você fica criando e-mail novo lá sei lá vai entrando como eu tinha comentado com vocês eu criei eu tenho no meu github depois eu nem passei para vocês depois no meu no meu

Git tem lá um curso também de flash enfim vale a pena você seguir em pessoas que vão querer o Fábio riode que eu falei com o brasileiro que fala de segurança Esse é um cara bom para seguir aqui é bem fácil você faz a conta você adiciona um projeto para adicionar um projeto por enquanto você não consegue fazer o upload você tem que pôr no Git ou público e jogar o link dele aqui e aí ele vai rodar uma análise estática deixa eu fechar aqui ele vai isso aqui para estudar ele vai respondendo um monte de pergunta por

exemplo a pergunta de Ah posso deixar o pragma com Chapeuzinho que foi a pergunta do dia de ontem aqui já fala não pode e ele te explica porque ou ele não ele te fala primeiro Qual que é o nível do Qual que é o problema não deixar o pragmar travado é crítico não é não é problema não mas é um probleminha que é um problema louco e ele dá que a descrição de porque Qual que é o problema que você pode ter tendo o pragma não preso não fixo então você lê aqui então isso aqui é uma boa forma de estudo formas alternativas de aprender né que não seja curso e vídeo no YouTube e

blog post Isso aqui é uma forma legal de aprender fez um Smart contra a gente lá no akaton Ah vamos jogar aqui no solidificando só para ver se tem vulnerabilidade eu já pego pelo menos as críticas esse aqui por exemplo esse aqui é engraçado eu joguei um contrato aqui que ele tem um transferir ele tem um depósito de dieta mas eu não fiz uma em nenhum lugar do contrato eu fiz uma função de wifdrol E aí eu joguei aqui depois eu pus aqui ele pegou e ele fala Opa eu vi uma função payble Então ela aceita hétero Mas eu não achei nenhuma função de transfer com o velho que joga entre para fora do contrato

então ele já te mostra Opa isso aqui parece crítico aqui eu já tinha consertado eu tinha tirado isso tinha dado aqui na verdade tem mas enfim é um exemplo de forma de aprender Então você joga o contrato lá ele vai te falar vulnerabilidades e aí você vai aprendendo com os erros né Então essa é uma outra ferramenta que eu queria falar então treinar problemas de segurança eternalti eu acho que esse é o melhor que eu vi até agora quem fizer ele inteiro quiser um negócio ainda mais avançado manda mensagem para mim tem um negócio ainda das auditorias lá desafio de segurança tal que eu mando e sou digh Scan Fica aí uma ferramenta

legal para vocês joga o contrato fez um contrato Joga lá vê se tem vulnerabilidade não entendeu a vulnerabilidade pergunta para a gente e é isso eu acho que era isso que eu queria dar de uma metralhadora de seguro de informação de segurança para vocês