NewsDevelopersEnterpriseBlockchain ExplainedEvents and ConferencesPressButlletins informatius
Subscriu-te al nostre butlletí.
Correu electrònic
Respectem la vostra privadesa
IniciBlogDesenvolupament de la cadena de blocs
La mentalitat de seguretat de contractes intel·ligents
5 principis de seguretat que tots els desenvolupadors d’Ethereum han de conèixer, a més de compensacions fonamentals. per ConsenSys, el 17 de juny de 2020 Publicat el 17 de juny de 2020
Per ConsenSys Diligence, el nostre equip d’experts en seguretat de blockchain.
Tot i que la indústria està madurant, el desenvolupament de contractes intel·ligents encara és un camp relativament nou i madur. Per tant, hauríeu d’esperar canvis constants en el panorama de la seguretat a mesura que es van descobrint nous errors i riscos de seguretat i a mesura que es desenvolupen noves pràctiques recomanades. Aprendre i seguir millors pràctiques és només el començament del treball de seguretat que haureu de fer com a desenvolupador de contractes intel·ligents.
La programació de contractes intel·ligents requereix una mentalitat d’enginyeria diferent a la que estem acostumats. El cost de la fallada pot ser elevat i els canvis poden ser difícils, cosa que el fa més similar a la programació de maquinari o la programació de serveis financers que el desenvolupament web o mòbil. Per tant, no n’hi ha prou amb defensar-se de les vulnerabilitats conegudes. En lloc d’això, haureu d’aprendre una nova filosofia de desenvolupament.
Prepareu-vos per al fracàs
Qualsevol contracte no trivial tindrà errors. Per tant, el vostre codi ha de poder respondre amb gràcia a errors i vulnerabilitats.
- Posar en pausa el contracte quan les coses van malament (“interruptor automàtic”).
- Gestioneu la quantitat de diners en risc (limitació de tarifes, ús màxim).
- Disposar d’un camí d’actualització eficaç per a la correcció d’errors i millores.
Llançament amb cura
Sempre és millor detectar errors abans d’una versió de producció completa.
- Proveu a fons els contractes i afegiu-hi proves quan es descobreixen nous vectors d’atac.
- Proporcionar recompenses d’errors a partir de les versions alpha testnet.
- Desenvolupament per fases, amb un ús i proves creixents en cada fase.
Mantingueu els contractes senzills
La complexitat augmenta la probabilitat d’errors.
- Assegureu-vos que la lògica del contracte sigui senzilla.
- Modularitzeu el codi per mantenir petits els contractes i les funcions.
- Utilitzeu eines o codis ja escrits quan sigui possible (per exemple, no feu servir el vostre propi generador de números aleatoris).
- Preferiu la claredat a l’actuació sempre que sigui possible.
- Utilitzeu la cadena de blocs només per a les parts del vostre sistema que requereixen descentralització.
Estigueu al dia
Feu un seguiment dels nous desenvolupaments de seguretat.
- Comproveu els vostres contractes si hi ha cap error nou tan aviat com es descobreixi.
- Actualitzeu a la versió més recent de qualsevol eina o biblioteca el més aviat possible.
- Adopteu noves tècniques de seguretat que semblin útils.
Estigueu al corrent de la idiosincràsia de l’EVM
Tot i que gran part de la vostra experiència de programació serà rellevant per a la programació d’Ethereum, hi ha algunes trampes que cal tenir en compte.
- Tingueu molta cura amb les trucades de contractes externs, que poden executar codi maliciós i canviar el flux de control.
- Compreneu que les vostres funcions públiques són públiques i que es poden anomenar de manera maliciosa i en qualsevol ordre. Tothom pot veure les dades privades dels contractes intel·ligents.
- Tingueu en compte els costos de gas i el límit de gasos.
- Tingueu en compte que les marques de temps no són precises en una cadena de blocs: els miners poden influir en el moment d’execució d’una transacció en un marge de diversos segons..
- L’atzar no és trivial a la cadena de blocs, la majoria d’enfocaments per a la generació de nombres aleatoris es poden jugar en una cadena de blocs.
Compensacions fonamentals
Hi ha diverses compensacions fonamentals a tenir en compte a l’hora d’avaluar l’estructura i la seguretat d’un sistema de contractes intel·ligents. La recomanació general per a qualsevol sistema de contractes intel·ligents és identificar el saldo adequat per a aquestes compensacions fonamentals.
Un sistema de contractes intel·ligents ideal a partir d’un biaix d’enginyeria de programari és modular, reutilitza el codi en lloc de duplicar-lo i admet components actualitzables. Un sistema de contractes intel·ligents ideal des d’un biaix d’arquitectura segura pot compartir aquesta mentalitat, especialment en el cas de sistemes de contractes intel·ligents més complexos.
Tot i això, hi ha importants excepcions en què és possible que les pràctiques recomanades de seguretat i enginyeria de programari no estiguin alineades. En cada cas, s’obté l’equilibri adequat identificant la combinació òptima de propietats al llarg de les dimensions del sistema contractual, com ara:
- Rígid vs. Actualitzable
- Monolític vs. Modular
- Duplicació vs. Reutilització
Rígid vs. Actualitzable
Tot i que diversos recursos, inclòs aquest, emfatitzen característiques de mal·leabilitat com ara patrons eliminables, actualitzables o modificables, hi ha un compromís fonamental entre la mal·leabilitat i la seguretat.
Els patrons de mal·leabilitat per definició afegeixen complexitat i superfícies d’atac potencials. La simplicitat és particularment eficaç per sobre de la complexitat en els casos en què el sistema de contractes intel·ligents realitza un conjunt de funcions molt limitat durant un període de temps limitat predefinit, per exemple, un sistema de contracte de venda de fitxes de marcs de temps finits sense governança.
Monolític vs. Modular
Un contracte monolític autònom manté tot el coneixement localment identificable i llegible. Tot i que hi ha pocs sistemes de contractes intel·ligents amb molta consideració que existeixen com a monòlits, hi ha un argument que cal argumentar per a la localització extrema de les dades i el flux, per exemple, en el cas d’optimitzar l’eficiència de la revisió del codi..
Com passa amb la resta de compensacions que es consideren aquí, les pràctiques recomanades en matèria de seguretat s’allunyen de les pràctiques recomanades en enginyeria de programari en contractes senzills de curta durada i es dirigeixen cap a les pràctiques recomanades en enginyeria de programari en el cas de sistemes de contractes perpetus més complexos.
Duplicació vs. Reutilització
Un sistema de contractes intel·ligents des d’una perspectiva d’enginyeria de programari vol maximitzar la reutilització quan sigui raonable. Hi ha moltes maneres de reutilitzar el codi de contracte a Solidity. L’ús de contractes comprovats desplegats prèviament que sou propietaris és generalment la manera més segura d’aconseguir la reutilització del codi.
Sovint es confia en la duplicació en els casos en què els contractes autònoms desplegats anteriorment no estiguin disponibles. Esforços com Biblioteca Solidity d’OpenZeppelin busqueu patrons de manera que el codi segur es pugui tornar a utilitzar sense duplicar-los. Les anàlisis de seguretat del contracte han d’incloure qualsevol codi reutilitzat que no hagi establert prèviament un nivell de confiança proporcional als fons en risc del sistema de contractes intel·ligents objectiu.
La creació i el llançament d’aplicacions a Ethereum és possiblement la frontera més emocionant per als enginyers de programari actuals, però requereix un modelatge continu d’amenaques, auditories de seguretat i planificació de la resposta a incidents..
L’equip de Diligence és aquí per ajudar-vos a estar vigilant i a confiar en els vostres desplegaments.
Reserveu una comprovació de seguretat de Blockchain
Les nostres revisions d’un dia us ajuden a incorporar seguretat al vostre codi blockchain des del principi per poder estalviar temps i diners a la llarga. Reserveu-vos avui Seguretat Contractes intel·ligents Butlletí d’informació Subscriviu-vos al nostre butlletí per obtenir les últimes novetats, solucions empresarials, recursos per a desenvolupadors i molt més sobre Ethereum. Adreça electrònica Contingut exclusiuSeminari web
Com es pot crear un producte Blockchain amb èxit
Seminari web
Com configurar i executar un node Ethereum
Seminari web
Com es crea la seva pròpia API Ethereum
Seminari web
Com es crea un testimoni social
Seminari web
Ús d’eines de seguretat en el desenvolupament de contractes intel·ligents
Seminari web