Saugumo sumetimai viršija visas kitas programinės įrangos ir konkrečiai „blockchain“ aplinkybes. Jei apsauga nepavyksta, nieko kito nesvarbu. „Blockchain“ įrodo, kad decentralizuoti, nepatikimi sandoriai veikia, tačiau vis tiek lieka daugybė „blockchain“ saugumo spragų.

Saugumo priemonės egzistuoja projektavimo ir architektūros lygiu, kodavimo ir eksploatavimo etape. Ir jei jums kilo klausimas, taip, „blockchain“ galima nulaužti.

„Blockchain“ saugumo pažeidžiamumas – nuo čia iki amžinybės

Deimantai amžinai, o išmaniosios sutartys gyvuoja tol, kol toliau naudojama blokinė grandinė, kurioje jie yra dislokuoti. Taigi visos klaidos ir „blockchain“ saugumo spragos taip pat veikia tol, kol galioja sutartis.

Paprastai kiekviena blokų grandinė pateikia savo programavimo kalbą, kad įgyvendintų išmaniąsias sutartis. Pažvelkime atidžiau.

Protingos sutarties kalbos

„Blockchain“ aplinka apima savo kalbas kuriant pažangias sutartis.

Pavyzdžiui, „Ethereum“ platformoje yra „Solidity“ kalba, skirta rašyti išmanioms sutartims. Kūrėjai sukūrė „Solidity“ kaip pilną Tiuringo kalbą.

Turingo kalba iš esmės leidžia programuotojui įgyvendinti viską, ką sugeba pagrindinė sistema. Vadinasi, tai suteikia programuotojams tokių sugebėjimų kaip kodo kilpų diegimas, o tai gali sukelti „blockchain“ saugumo spragas.

Turingo išbaigtumas

Kuriant visas kalbas iš prigimties yra sudėtingumo, o sudėtingumas sukelia klaidų ir pažeidžiamumų.

„Bitcoin“ tinkle taip pat yra programavimo kalba, kurią jis vadina scenarijumi. Scenarijus nėra tikslus, kad padidintų saugumą.

Kuo mažiau galimybių suteikiama programuotojui, tuo mažesnė tikimybė, kad „blockchain“ saugos pažeidžiamumai pateks į sistemą.

Siekdami sumažinti riziką sugadintą kodą paleisti į laisvę, programuotojai turi suprasti įprastas spragas ir antimalius modelius, būdingus sumaniam sutarčių programavimui. (Anti-modeliai rodo blogą programavimo praktiką).

DAO „Hack“: „Reentrancy“ problema

„blockchain“ saugos pažeidžiamumų vaizdas

„DAO Hack“

Pakartotinio įstojimo problema tikriausiai yra aukščiausia tarp „blockchain“ saugumo pažeidžiamumų, kuriuos programuotojai užkodavo išmaniose sutartyse. „Reentrancy“ ištuština sąskaitą per kelias išlaidas tam pačiam sandoriui. Grąžinamųjų išmokų apdorojimo atvejis yra tinkamas šiam išnaudojimui, tačiau šis trūkumas turi įtakos bet kokiam sandoriui, jei į jį neatsižvelgiama projektavimo ir kodavimo etape..

Vienos iš liūdniausių kriptovaliutų išpuolių iki šiol DAO įsilaužėliai išnaudojo grįžimą. Nė vienas organizacijos vadovas nenurodė, kaip valdyti DAO (arba decentralizuotą autonominę organizaciją), o DAO pasiūlė suteikti vartotojams galimybę balsuoti dėl projektų, į kuriuos galėtų investuoti.

Per pirmą mėnesį jis surinko daugiau nei 150 milijonų dolerių finansavimą. 2016 m. Birželio 17 d. Hakeriai iš organizacijos išleido 50 mln. Dėl kietos šakutės nuo „Ethereum Classic“ (ETC) iki „Ethereum“ (ETH) buvo stengiamasi išspręsti problemas, kurias sukėlė šis įsilaužimas..

„Anti-Pattern“ pažeidžiamas grįžimui

Pažeidžiama grįžtanti kodo logika atrodo taip:

funkcija apdoroti mokėjimą () {

(1) patikrinti operacijos galiojimą, gavėją ir sąskaitos likutį;

2) apdoroti sandorį;

(3) atnaujinti sistemos būseną, kad operacija būtų apdorota;

}

Iš pirmo žvilgsnio logika atrodo teisinga ir išsami, tačiau trūkumas yra toks, koks buvo atliktas 2 žingsnis prieš 3 žingsnį.

Pirmasis funkcijos iškvietimas tęsia 2 veiksmo apdorojimą, į kitą funkciją gali patekti kitas tos pačios operacijos skambutis. Kadangi būsenos informacija lieka pradine būsena ir dar neapdorota atliekant 3 veiksmą, antrasis skambutis patikrinamas kaip galiojanti apdorojama operacija.

Vadinasi, sistema antrą kartą išleidžia tą pačią prievolę. Piratai, norėdami tinkamai nustatyti valstybę, skubiai vykdo kelias operacijas.

Išgydyti iš naujo

Šis algoritmo pakeitimas ištaiso minėtą problemą:

funkcija apdoroti mokėjimą () {

(1) patikrinti operacijos galiojimą, gavėją ir sąskaitos likutį;

2) atnaujinti sistemos būseną, kad operacija būtų apdorota;

3) apdoroti sandorį;

}

Kodas turi atsižvelgti į visą būtiną išimčių tvarkymą ir į visas logines priklausomybes.

Perpildymas

Perpildymas yra dar vienas įprastas saugumo trūkumas, kurį programuotojai turi žinoti.

Kai kurios programavimo kalbos leidžia rašyti stipriai, o kitos – silpnai. Stipriai įvestos kalbos atsisako leisti programuotojams priskirti eilutės duomenis, pavyzdžiui, skaitiniam kintamajam, o silpnai įvestos kalbos leidžia tokius veiksmus.

Stipriai įvestos kalbos taiko diapazono apribojimus. Jei masyvas yra dešimt elementų, programuotojai negali bandyti pasiekti vienuoliktojo elemento. Silpnai įrašytos kalbos leidžia tokį elgesį, tačiau įvyksta strigčių. Jei didžiausia leistina vertė, kurią turi kintamasis, yra 99, o jūs priskiriate jai 100, žiūrėkite, kaip ji sudužo, kai ją paleisite!

Vadinasi, perpildymas yra išnaudojimas, kurį naudoja hakeriai. Jei įsilaužėlis pateikia parametrą išmaniajai sutarčiai, kuri nepatenka į diapazoną, kurį kodas gali apdoroti, įvyksta strigtis. Tokia avarija skatina daugybę išnaudojimų. Avarija gali sukelti paslaugų atsisakymo ataką (DDoS ataka), o svarbi informacija apie sistemos vidų kartais atsiskleidžia klaidų pranešimuose.

Interneto programose įsilaužėliai dažnai užpildo atmintį savo kenkėjišku kodu, todėl programai užstrigus ir patekus į atsitiktinę atminties vietą, kenkėjiškas kodas įvykdo.

Silpnai įvestos kalbos suteikia galią ir dinamišką lankstumą, tačiau joms taip pat reikalingas griežtesnis dizainas ir bandymai, kad būtų apsaugota nuo atakų.

Daugiagalvė hidra

„blockchain“ saugos pažeidžiamumų vaizdas

Daugybė saugumo problemų kankina programinės įrangos pasaulį. Atsiradus naujoms technologijoms, atsiranda naujų grėsmių. Be pirmiau minėtų išnaudojimų, šie žymūs trūkumai yra tik keli iš daugelio kitų „blockchain“ saugumo pažeidžiamumų.

Bloga kriptografija sukelia daug galvos skausmo. Kriptografija užtikrina privatumą, o sugadinus privatumą, viskas sugenda. IOTA komanda padarė klaidą pradinėje savo produkto versijoje parašydama savo kriptografinę biblioteką nuo nulio. Jūsų pačios kriptografijos kūrimo problema yra ta, kad visoje sudėtingoje programinėje įrangoje yra klaidų, todėl garantuotai turėsite klaidų kriptografiją.

Įkurtos kriptografinės bibliotekos išgyvena akademikų patikrinimą ir laikui bėgant yra patikimos per gyvenimą laukinėje gamtoje.

Piniginių pasaulyje atsitiktinių skaičių generavimas turi būti tikrai atsitiktinis. Ypač ankstyvomis kriptovaliutos dienomis kai kurios piniginės neatitiko šio reikalavimo.

Kriptovaliutų adresams reikalingi adresai, kurie turi būti unikalūs. Unikalumas kyla iš atsitiktinių skaičių generatoriaus, o atsitiktinių skaičių generatoriui reikia pradžios, kad būtų galima pradėti procesą. Jei sėkla nėra tikrai atsitiktinė, sistema sugenda.

Vienas netinkamo atsitiktinumo rezultatas reiškia, kad tas pats adresas sukuriamas kelis kartus. Paveikslėlis scenarijus, kai piniginė priskiria adresą X asmeniui A, o vėliau vėliau priskiria adresą X asmeniui B. Kai mokėjimas eina adresu X, jis eina tik vienam asmeniui. Kuris asmuo gauna pinigus?

Kita blogo atsitiktinumo problema iškyla, kai įsilaužėlis išsiaiškina algoritmą, naudojamą pradinei medžiagai sukurti. Hakeris regeneruoja sėklą sau ir turi sistemą.

Kelias eina amžinai, o partija niekada nesibaigia

Saugumas yra nesibaigiantis mūšis, ir net jei programuotojai, architektai ir testuotojai pašalina visas kodo spragas, operaciniai trūkumai lieka.

Darbo įrodymo aplinkoje, jei blogi veikėjai valdo 51% tinklo, vientisumas sunaikinamas. Žaidimo teorija numato šią ataką. Nauja rizikinga šiai atakai yra nauja kriptovaliuta su mažu tinklu. Bet 51% išpuolis sunaikina valiutos vertę, todėl užpuolikai tiesiog save žaloja.

„Blockchains“ gyvena internete ir dalijasi ta pačia įsilaužėlių įtaka kaip ir internetas. Pavyzdžiui, tarkime, kad monetas perkate iš biržos, esančios svetainėje. Vyrauja injekcijos atakos, skirtingų svetainių scenarijai, sukčiavimo atakos ir visi kiti tradiciniai svetainių įsilaužimai.

Paskutinės mintys

Kaip programuotojai saugo nuo klaidų, programuotojai turi atsižvelgti į savo plėtrą. Yra keletas įrankių, padedančių programuotojams atlikti užduotį, tačiau programuotojai pirmiausia turi suprasti savo pažeidžiamumą, kad apsisaugotų.

Decentralizuotas programų saugos projektas (DASP) siekia būti „blockchain“ saugumo informacijos ir išteklių saugykla. Jie šiek tiek modeliuoja save Atviras žiniatinklio programų saugos projektas (OWASP). Kasmetiniame „OWASP Top 10“ yra neabejotinai išvardyti pagrindiniai šiuo metu egzistuojantys interneto programų pažeidžiamumai. „DASP Top 10“ tikisi suteikti lygiavertį „blockchain“ šaltinį.

Ne visos atakos yra žinomos iš anksto. Nulinės dienos išnaudojimas apibrėžia išnaudojimą, kurį įsilaužėliai žino dar prieš tai darant. Taigi programuotojai, projektuodami ir diegdami programinę įrangą, turi galvoti kaip užpuolikai. Jei nerandate pažeidžiamumo kode, tikėkitės, kad įsilaužėlis ieškos pelno.