Slijede razlike između dviju inačica stranice.
Starije izmjene na obje strane Starija izmjena Novija izmjena | Starija izmjena | ||
racfor_wiki:blockchain:forenzika_pametnih_ugovora_na_ethereum_blockchainu [2020/01/09 16:28] dlatecki [Višestruko izvlačenje sredstava] |
racfor_wiki:blockchain:forenzika_pametnih_ugovora_na_ethereum_blockchainu [2024/12/05 12:24] (trenutno) |
||
---|---|---|---|
Redak 1: | Redak 1: | ||
===== Sažetak ===== | ===== Sažetak ===== | ||
+ | |||
+ | Blockchain tehnologija omogućuje transparentnu i neporecivu komunikaciju koja ima mnoge primjene, od kojih su jedna od njih pametni ugovori. Ethereum platforma pruža fleksibilnost i jednostavnost pri pisanju pametnih ugovora, ali je zbog toga programerima teže na vrijeme uočiti potencijalne sigurnosne propuste. Zbog toga je potrebno upoznati se s čestim potencijalnim programskim greškama i alatima koji mogu pomoći kod sigurnosne analize pri pisanju pametnih ugovora. | ||
+ | |||
+ | **Ključne riječi:** Ethereum; blockchain; pametni ugovori | ||
+ | |||
===== Uvod ===== | ===== Uvod ===== | ||
Blockchain tehnologija znatno se razvila u zadnjih desetak godina. Prve primjene blockchaina su uglavnom bile decentralizirane value kao što su Bitcoin, Litecoin i mnoge druge. Naknadno su počele nastajati i druge blockchain platforme koje su počele primjenjivati tu tehnologiju za naprednije koncepte, kao što su pametni ugovori. Jedna od tih platformi je Ethereum, koja je danas uvjerljivo vodeća platforma za pametne ugovore. Iako blockchain pruža određenu razinu anonimnosti, | Blockchain tehnologija znatno se razvila u zadnjih desetak godina. Prve primjene blockchaina su uglavnom bile decentralizirane value kao što su Bitcoin, Litecoin i mnoge druge. Naknadno su počele nastajati i druge blockchain platforme koje su počele primjenjivati tu tehnologiju za naprednije koncepte, kao što su pametni ugovori. Jedna od tih platformi je Ethereum, koja je danas uvjerljivo vodeća platforma za pametne ugovore. Iako blockchain pruža određenu razinu anonimnosti, | ||
- | |||
===== Ethereum platforma ===== | ===== Ethereum platforma ===== | ||
Redak 21: | Redak 25: | ||
**Bez diskriminacije i bez cenzure: **protokol ne smije aktivno ograničavati i blokirati određene kategorije primjene. Programeru treba biti dozvoljeno da čak pokrene beskonačnu petlju unutar pametnog ugovora, dokle got je spreman plaćati za njegovo kontinuirano izvršavanje. | **Bez diskriminacije i bez cenzure: **protokol ne smije aktivno ograničavati i blokirati određene kategorije primjene. Programeru treba biti dozvoljeno da čak pokrene beskonačnu petlju unutar pametnog ugovora, dokle got je spreman plaćati za njegovo kontinuirano izvršavanje. | ||
- | |||
- | |||
===== Računi i pametni ugovori ===== | ===== Računi i pametni ugovori ===== | ||
Redak 66: | Redak 68: | ||
Navedeni primjer pametnog ugovora implementira jednostavnu kriptovalutu s centralnim izdavateljem. Korisnici mogu slati valutu samo ako posjeduju barem vrijednost koju žele poslati. | Navedeni primjer pametnog ugovora implementira jednostavnu kriptovalutu s centralnim izdavateljem. Korisnici mogu slati valutu samo ako posjeduju barem vrijednost koju žele poslati. | ||
- | |||
===== Česti propusti kod pisanja pametnih ugovora ===== | ===== Česti propusti kod pisanja pametnih ugovora ===== | ||
Redak 86: | Redak 87: | ||
</ | </ | ||
- | U ovom primjeru, '' | + | U ovom primjeru, '' |
- | ===== Prelijev cijelih brojeva ===== | + | |
+ | ==== Preljev cijelih brojeva ==== | ||
- | ===== Chapter 4 ===== | + | Pri oduzimanju ili dodavanju brojeva u pametnom ugovoru, mogu se premašiti definirane granice brojevnih varijabli. To može uzrokovati neželjeno ponašanje. Na primjer, ako pri korištenju tipa '' |
+ | < | ||
+ | uint8 myNumber | ||
- | ===== Chapter 5 ===== | + | function increment(uint _number) public returns (uint) { |
+ | _number += _number; | ||
+ | return _number; | ||
+ | } | ||
+ | |||
+ | uint newNumber | ||
+ | </ | ||
+ | |||
+ | Kada se izvrši navedeni kod, vrijednost '' | ||
+ | |||
+ | |||
+ | ==== Napad uskraćivanja usluge | ||
+ | |||
+ | Pri pisanju pametnih ugovora treba imati na umu da adrese koje pristupaju ugovoru ne moraju nužno biti adrese vanjski posjedovanih računa - pametni ugovori mogu pozivati druge pametne ugovore. To ima posljedicu da pametni ugovori mogu uskratiti uslugu drugim ugovorima. Glavni razlog tome je taj što napadačev pametni ugovor može odbiti primanje sredstava usred izvršavanja glavnog ugovora, te se time može dogoditi beskonačna petlja koja će paralizirati pametni ugovor. Najbolji način za obranu od ovakvog tipa napada jest odvajanje poslovne logike pametnog ugovora od logike plaćanja. | ||
+ | |||
+ | |||
+ | ==== Pozivanje vanjskih ugovora koristeći delegatecall() ==== | ||
+ | |||
+ | Pametni ugovori mogu pozivati druge pametne ugovore preko poziva funkcije '' | ||
+ | |||
+ | |||
+ | ===== Sigurnosna analiza pametnih ugovora ===== | ||
+ | |||
+ | Metode analize pametnih ugovora na Ethereum platformi možemo svrstati u tri kategorije: statička analiza, dinamička analiza i formalna verifikacija. Za bilo koju od navedenih metoda nam je potreban programski kod pametnog ugovora. Njega možemo pronaći koristeći //Etherscan //unosom adrese željenog pametnog ugovora. Na // | ||
+ | |||
+ | **Statičkom analizom** provjeravamo sigurnost koda prije samog izvršavanja. Ova vrsta analize provjerava programski kod i pokušava naći potencijalne sigurnosne propuste provjerom svih ponašanja u programskom kodu i slabosti koje bi mogle nastati pri izvršavanju koda. Za statičku analizu postoje alati kao što su //OYENTE//, //ZEUS//, //GASPER//, //Vandal//, //Ethir, Securify i MAIAN.// Svaki od navedenih alata detektira različite sigurnosne propuste, tako da je preporučeno koristiti više njih kako bi se osigurala veća razina sigurnosti pametnog ugovora. | ||
+ | |||
+ | **Dinamička analiza** provjerava ispravnost pametnog ugovora dok se on izvršava. Time se oponaša način na koji bi napadač tražio sigurnosne propuste u pametnom ugovoru. Sigurnosni propusti koji bi se identificirali kao lažno negativni u statičkoj analizi se mogu uspješno identificirati uz pomoć dinamičke analize. Dinamička analiza se također može koristiti kao metoda validacije rezultata statičke analize. | ||
+ | |||
+ | **Formalna verifikacija** koristi dokazivače teorema ili formalne metode iz matematike kako bi se dokazala određena svojstva pametnog ugovora, kao što su funkcijska ispravnost, sigurnost pri izvođenju koda, pouzdanost, itd. Alati za formalnu verifikaciju pametnih ugovora koriste postojeće dokazivače teorema, kao što su //Coq//, // | ||
- | ===== Chapter 6 ===== | ||
===== Zaključak ===== | ===== Zaključak ===== | ||
- | zaključak. | + | Zbog neporecivosti blockchain tehnologije nije moguće promijeniti programski kod postojećih pametnih ugovora, pa je zbog toga potrebni pri pisanju samih ugovora jako paziti na ispravnost i sigurnost. To se može postići upoznavanjem s čestim programskim propustima, korištenjem standardnih biblioteka, uz pomoć alata za statičku i dinamičku analizu, te formalnom verifikacijom programskog koda pametnog ugovora. |
===== Izvori ===== | ===== Izvori ===== | ||
- | [1] [[http://books.google.hr/books? | + | [1] [[https://github.com/ |
+ | |||
+ | [2] [[https:// | ||
+ | |||
+ | [3] [[https:// | ||
- | [2] [[http://www.google.com/books? | + | [4] [[https://ethereumdev.io/ |
- | [3] [[http://www.cogtech.usc.edu/publications/kirschner_Sweller_Clark.pdf|Kirschner, P. A, Sweller, J. and Clark, R. E. Why minimal guidance during instruction does not work: An analysis of the failure of constructivist, discovery, problem-based, experiential, | + | [5] [[https://arxiv.org/pdf/1908.08605.pdf|Security Analysis Methods on Ethereum Smart Contract Vulnerabilities — A Survey, Purathani Praitheeshan, Lei Pan, Jiangshan Yu, Joseph Liu, Robin Doss, 2019.]] |