Web3 Smart Contract Securityn testaus ja virallinen vahvistus

Web3 Smart Contract Securityn testaus ja virallinen vahvistus

Testaus ja virallinen vahvistus Web3 Smart Contract Security PlatoBlockchain Data Intelligencelle. Pystysuuntainen haku. Ai.

Lukeaika: 9 pöytäkirja

Kuvittele laskuvarjohyppyä. Ennen kuin hyppäät pois koneesta, tarkistat laskuvarjosi sata kertaa, eikö niin? Tarkastus ja testaus ovat olennainen osa turvallisuutta; ajattele mitä tahansa turvallisuuteen liittyvää asiaa. Todennäköisesti jälkikäteen testataan mekanismi, olipa kyseessä CCTV:n asennus tai musteen tarkistaminen kynästä ennen kirjallista koetta koulussa, me kaikki noudatamme turvatoimia. Mitä suurempi riski siihen liittyy, sitä enemmän testaamme asioita. Ja kun puhumme älykkäistä sopimuksista, riski on SUURI. Et voi olla huolimaton älykkäiden sopimusten turvallisuuden suhteen.

1. Turvallisuutta tarvitaan aina.

Voit varmasti lukita oven kahdesti tai kolmesti, sillä ei ole väliä. Voitko olla varma, ettei taloasi voida ryöstää, kun olet poissa? Et voi, koska et tiedä, mitä rosvo saattaa tehdä murtautuakseen taloon – sama pätee kaikkiin turvatoimiin, joita toteutamme. Ei ole olemassa täysin turvallista menetelmää, joka takaa turvallisuuden. Silti toimintamme nopeasti lisää mahdollisuuksiamme olla turvassa, mitä peli on. Haluamme lisätä turvallisuuden todennäköisyyttä erilaisilla toimenpiteillä.

Web3:n maailma ei ole erilainen. Ei ole turvallista tapaa pelastaa itsesi, mutta QuillAuditsin kokeneiden auditoijien käyttö voi lisätä protokollasi turvallisuuden todennäköisyyttä valtavasti ja varmistaa ajantasaisen tietoturvasi. Web3:ssa on kaksi tärkeää mekanismia, jotka auttavat sinua ymmärtämään, kuinka suojattu olet tekemällä joitain testejä protokollallesi: -

  1. Älykäs sopimustestaus
  2. Älykkäiden sopimusten virallinen todentaminen

Ymmärrämme niitä yksityiskohtaisesti ja opimme kuinka ne auttavat meitä tietämään sopimukseemme heikkoudet tai haavoittuvuudet.

2. Älykäs sopimustestaus

Kokenut kehittäjä osaa selittää työn koneelle koodilla. Silti joskus kone ei kuvaa tarkkaa mekanismia, jota kehittäjä oli mielessään koodin virheen tai loogisen virheen vuoksi. Testaus on prosessi, joka auttaa tunnistamaan, missä koodimme epäonnistuu ja mitä voidaan tehdä, jotta se vastaa toimintoa, jonka tarvitsemme sen suorittamaan.

Älykäs sopimustestaus on kehityssyklin vaihe, jossa suoritamme yksityiskohtaisen analyysin sopimuksistamme ja yritämme selvittää, missä ja miksi koodimme epäonnistuu. Lähes kaikki älykkäät sopimukset käyvät läpi tämän vaiheen. Älykkäiden sopimusten testaus voidaan tehdä kahdella tavalla. Tutkitaanpa niitä.

2.1 Automatisoitu

Kuten nimestä voi päätellä, tätä älykkäiden sopimusten testausmenetelmää käytetään komentosarjatestauksen suorittamiseen. Se sisältää automaattisen ohjelmiston, joka suorittaa toistuvia testejä löytääkseen älykkäiden sopimusten haavoittuvuuksia ja vikoja. Nämä automaattiset testaustyökalut voidaan konfiguroida testitiedoilla ja odotettavissa tuloksilla. Tämän jälkeen todellista tulosta verrataan odotettuihin, jotta tarkistetaan, toimiiko sopimus kunnolla. Automaattinen testaus voidaan jakaa kolmeen luokkaan.

2.1.1. Toiminnallinen testaus

Oletetaan, että kirjoitat ohjelman, joka ottaa kaksi numeroa, a ja b, ja palautat sitten molempien lukujen summan. Joten ohjelman tarkistamiseksi annat 2 ja 8 ja syötät odotetuksi tulokseksi 10. Nyt kun ohjelma suoritetaan, sen pitäisi myös palauttaa 10. Jos toimii, se toimii hyvin ja koodimme on oikea, mutta jos se on ei, koodissamme on virhe. 

Toiminnallinen testaus edellyttää ymmärrystä, miten sopimuksesi tulee toimia tietyissä olosuhteissa. Voimme testata sitä suorittamalla laskennan valituilla arvoilla ja vertaamalla palautettua tulosta. Toiminnallisessa testauksessa on kolme luokkaa:

  1. Yksikkötestaus:- Tämä koskee älykkään sopimuksen yksittäisten komponenttien oikeellisuuden testaamista. Se on vakuuttava tai vaatii lausekkeita muuttujista.
  1. Integraatio testing: – Nämä käsittelevät useiden yksittäisten komponenttien testaamista yhdessä. Integraatiotestaus on korkeampi taso hierarkiassa kuin yksikkötestaus. Se auttaa meitä määrittämään eri toimintojen vuorovaikutuksesta aiheutuvat virheet, jotka voivat olla osa muita älykkäitä sopimuksia.
  1. järjestelmä testing: – Tämä on hierarkian korkein. Tässä testaamme koko sopimusta yhtenä täysin integroituna järjestelmänä nähdäksemme, toimiiko se tarpeidemme mukaisesti. Se tehdään käyttäjän näkökulmasta, ja paras tapa tehdä se on ottaa se käyttöön testiverkkoihin.

2.1.2. Staattinen analyysi

Staattinen analyysi voidaan tehdä ilman ohjelman suorittamista. Se sisältää älykkään sopimuksen lähdekoodin tai tavukoodin analyysin ennen suoritusta. Näin ollen staattinen analyysi voi johtaa joidenkin yleisten haavoittuvuuksien havaitsemiseen.

2.1.3. Dynaaminen analyysi

Toisin kuin staattinen analyysi, dynaaminen analyysi suoritetaan älykkäiden sopimusten ajon aikana koodin ongelmien tunnistamiseksi. Dynaamiset koodin analysaattorit tarkkailevat sopimuksen käynnissä olevaa tilaa ja luovat yksityiskohtaisen raportin haavoittuvuuksista ja omaisuusrikkomuksista. Fuzzing kuuluu dynaamisen analyysin alle. Fuzzing on virheellisen tai haitallisen syötteen syöttäminen, joka aiheuttaa tahattoman koodin suorittamisen.

2.2-käsikirja

Kuten nimestä voi päätellä, tämä älykkäiden sopimusten testausmenetelmä sisältää säännöllisen vuorovaikutuksen ihmisen kehittäjän kanssa. Kooditarkastukset, joissa kehittäjät käyvät läpi koodirivejä, kuuluvat älykkäiden sopimusten testauksen manuaaliseen tilaan.

Manuaalinen tila vaatii huomattavasti aikaa, taitoa, rahaa ja vaivaa. Silti tulos on usein sen arvoinen, koska sen avulla tunnistamme haavoittuvuuksia, jotka saattavat jäädä huomaamatta automaattisessa testauksessa. On olemassa kaksi olennaista manuaalista testaustyyppiä: -

2.2.1 Kooditarkastukset:- 

Paras tapa testata, toimiiko turvatoimesi oikein, on yrittää rikkoa se. Jos esimerkiksi haluat tarkistaa, toimiiko autosi lukko kunnolla, yritä rikkoa se. Nyt voit kysyä, että taitava autovaras voi helposti murtautua autooni. En ehkä, joten ratkaisu on palkata joku, joka on taitava murtautumaan sisään, jotta hän voi opastaa sinua!

 Kyllä, puhun QuillAuditsista. Olemme joukko ammattitaitoisia tarkastajia, jotka voivat opastaa sinua. Kooditarkastukset vaativat hyökkääjän ajattelutavan löytääkseen kaikki mahdolliset haavoittuvuudet lähdekoodista. Kooditarkastus on älykkään sopimuksen koodin yksityiskohtainen arviointi mahdollisten haavoittuvuuksien ja puutteiden paljastamiseksi.

2.2.2 Bug Bounty:-

Jos epäilet, että lähdekoodissasi saattaa olla tietoturvapuutteita (jotka useimmiten ovat) etkä löydä niitä, voit ulkoistaa tämän työn freelancereille luomalla palkitsemisjärjestelmän. Se on enemmän kuin palkinnon ilmoittaminen kaikille, jotka voivat hakkeroida älykkään sopimuksen. Tekemällä tämän opit älysopimuksessasi olevasta haavoittuvuudesta, jotta voit suojata sitä paremmin ja säästää käyttäjiäsi menettämiseltä.

3. Älykkäiden sopimusten virallinen tarkastus

Muodollinen todentaminen on prosessi, jossa arvioidaan sopimuksen oikeellisuutta muodollisten eritelmien perusteella. Tämä tarkoittaa, että muodollinen todentaminen arvioi, tekeekö koodi sen, mitä on tarkoitettu. Muodollinen verifiointi käyttää muodollisia menetelmiä ohjelmien määrittelemiseen, suunnitteluun ja todentamiseen.

3.1 Mikä on virallinen eritelmä?

Älykkäissä sopimuksissa muodollisilla määritelmillä tarkoitetaan ominaisuuksia, joiden on pysyttävä ennallaan kaikissa mahdollisissa olosuhteissa. Nämä ovat "invariantteja" ominaisuuksia, koska ne eivät voi muuttaa ja edustaa loogisia väitteitä sopimuksen toteuttamisesta.

Muodollinen määrittely on kokoelma muodollisella kielellä kirjoitettuja lausuntoja. Erittelyt kattavat erilaisia ​​ominaisuuksia ja kuvaavat, miten sopimuksen ominaisuuksien tulee käyttäytyä muissa olosuhteissa. Muodolliset spesifikaatiot ovat kriittisiä, koska jos sopimuksissa ei ole muuttumattomia muuttujia tai ominaisuudet eivät muutu toteutuksen aikana, se voi johtaa mahdolliseen omaisuuden hyväksikäyttöön, mikä voi johtaa valtaviin menetyksiin.

Se voi auttaa meitä määrittämään, täyttääkö älykäs sopimus vaatimukset vai onko siinä odottamatonta toimintaa. Muodollinen vahvistus koostuu kolmesta osasta: spesifikaatiosta, mallista ja vahvistusmoottorista.

3.1.1 Erittely

Erittely on selkeä, yksiselitteinen ja täydellinen kuvaus älykkään sopimuksen vaatimuksista. Siinä tulee kuvata, mitä sopimuksen on tarkoitus tehdä ja mitä sen ei pitäisi tehdä. Tässä on esimerkkimäärittely yksinkertaiselle, älykkäälle sopimukselle, joka lisää kaksi numeroa:

// Specification: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public view returns (uint) {
// Implementation details are not relevant to the specification
// …
}

3.1.2-malli

Malli edustaa muodollisesti älykästä sopimusta, jonka avulla voidaan perustella sen käyttäytymistä. Yksi suosittu älykkäiden sopimusten malli on Solidity-ohjelmointikieli. Tässä on esimerkkimalli yllä kuvatusta lisäystoiminnosta:

// Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public view returns (uint) {
return a + b;
}

3.1.3 Varmistusmoottori

Varmennusmoottori on työkalu, joka voi analysoida mallin ja varmistaa sen oikeellisuuden tietyn spesifikaation suhteen. Älykkäille sopimuksille on saatavilla useita vahvistusmoottoreita, mukaan lukien:

Mythrill: avoimen lähdekoodin symbolinen suoritustyökalu, joka voi havaita monenlaisia ​​tietoturva-aukkoja Solidity älykkäissä sopimuksissa.

Remix IDE: integroitu kehitysympäristö, joka sisältää muodollisen varmennustyökalun, jolla voidaan varmistaa älykkäiden sopimusten oikeellisuus.

Certora Prover: kaupallinen työkalu, joka voi varmistaa älykkäiden sopimusten oikeellisuuden automaattisen matemaattisen päättelyn avulla. Tässä on esimerkki siitä, kuinka muodollista varmennusta voidaan käyttää älykkään sopimuksen oikeellisuuden tarkistamiseen Certora Proverin avulla:

pragma solidity 0.7.6; // Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint)
function add(uint a, uint b) public pure returns (uint) {
return a + b;
} // Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public pure returns (uint) {
return a + b;
} // Specification: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function test_add(uint a, uint b) public pure returns (bool) {
uint expected = a + b;
uint actual = add(a, b);
return expected == actual;
} // Verification: Verify the correctness of the add function contract TestAdd {
function test_add(uint a, uint b) public view returns (bool) {
return CertoraProver.verify(test_add, a, b);
}
}

Yllä olevassa esimerkissä määritämme Solidity-älysopimuksen, joka sisältää lisäystoiminnon mallin, funktion spesifikaation ja vahvistusmoottorin (Certora Prover), joka voi tarkistaa toiminnon oikeellisuuden. Määrittelemme myös testifunktion (test_add), jolla voidaan varmistaa funktion oikeellisuus.

3.2 VS:n muodollisen todentamisen testaus

Kuten keskustelimme, testaus palauttaa odotetun tuloksen joillekin syötetietobotille, jota siltä puuttuu, koska emme voi sanoa tiedoista, joilla sitä ei ole testattu. Sitä on käytännössä mahdotonta tarkistaa kaikilla mahdollisilla tuloilla. Emme siis ole varmoja sen "toiminnallisesta oikeellisuudesta". Siellä muodollinen todentaminen tulee esiin. Muodolliset vahvistusmenetelmät käyttävät tiukkoja matemaattisia tekniikoita ohjelmistojen tai älykkäiden sopimusten määrittämiseen ja tarkistamiseen.

3.3 Muodollisen todentamisen tekniikat

Muodollisella todennuksella on laaja valikoima tehostamistekniikoita älykäs sopimusten turvallisuus. Blogin tässä osassa tutkimme muutamaa erikseen.

3.3.1 Mallin tarkistus

Kun keskustelimme siitä, mitä muodollinen eritelmä on, tarkistamme älykkään sopimuksen sen spesifikaatioiden suhteen tässä muodollisessa varmennustekniikassa. Nämä älykkäät sopimukset esitetään tilasiirtymäjärjestelminä, ja ominaisuudet määritellään ajallisen logiikan avulla. 

Tätä tekniikkaa käytetään ensisijaisesti arvioimaan ajallisia ominaisuuksia, jotka kuvaavat älykkäiden sopimusten käyttäytymistä ajan kuluessa. Kulunvalvontaominaisuus (järjestelmänvalvojan kutsu itsetuho) voidaan kirjoittaa muodolliseksi logiikaksi. Sitten mallintarkistusalgoritmi voi tarkistaa, täyttääkö sopimus tämän muodollisen varmuuden.

Mallin tarkistuksessa käytetään State Space exploration -nimistä tekniikkaa, joka pohjimmiltaan kokeilee kaikkia mahdollisia tiloja, joissa älykäs sopimuksemme voi olla, ja sitten tarkistaa, johtaako jokin niistä omaisuusrikkomukseen. Tämä voi kuitenkin johtaa äärettömän moniin tiloihin; Tästä syystä mallintarkistajat luottavat abstraktiotekniikoihin tehdäkseen älykkäiden sopimusten tehokkaan analyysin mahdolliseksi.

3.3.2 Lauseen todistaminen

Lauseen todistaminen on matemaattista päättelyä ohjelmien oikeellisuudesta. Se käsittelee loogisen vaikutelman luomista sopimuksen järjestelmästä ja spesifikaatiosta sekä lausuntojen välisen "loogisen vastaavuuden" tarkistamista. Looginen ekvivalenssi on matemaattinen suhde, joka sanoo, että väite A on tosi, jos ja vain jos lause B on tosi.

Kuten mallintarkistustekniikassa opimme, mallinnamme sopimuksia äärellistiloisina siirtymäjärjestelminä. Lauseen todistaminen pystyy analysoimaan äärettömän tilan järjestelmiä. Automaattinen lauseen todistaja ei kuitenkaan voi aina tietää, onko looginen ongelma ratkaistava; siksi usein tarvitaan ihmisen apua ohjaamaan lauseiden todistajaa johtamaan oikeellisuustodistuksia.

4. Päätelmä

Testaus ja virallinen todentaminen ovat molemmat olennaisia ​​osa älykkäiden sopimusten kehittämistä. Näillä menetelmillä älykkäät sopimukset tehdään turvallisiksi ja ne auttavat saamaan sopimukset käyttöön. Mutta kuten tiedät, turvallisuus ei koskaan riitä. Monet älykkäät sopimukset hakkeroitiin vain siksi, että ei ollut asianmukaista testausta. Nyt enemmän kuin koskaan web3-yhteisö tarvitsee turvallisempia protokollia. 

Me QuillAuditsilla pyrimme suojaamaan protokollasi. Osaavan ja kokeneen tiimimme avulla varmistamme, ettei yksikään haavoittuvuus jää huomaamatta. Vieraile verkkosivuillamme ja varmista Web3-projektisi!

28 Näyttökerrat

Aikaleima:

Lisää aiheesta Quillhash