Šis raksts ir kopienas ieguldījums. Autors ir Minži He, CertiK auditors.
Šajā rakstā izteiktie viedokļi ir līdzstrādnieka/autora viedokļi, un tie ne vienmēr atspoguļo Binance akadēmijas uzskatus.
Īsumā
Blockchain tilti ir pamats sadarbspējas sasniegšanai blokķēdes sektorā. Tāpēc tiltu nostiprināšana ir ļoti svarīga. Dažas izplatītas tilta drošības ievainojamības ir vāja ķēdes un ārpus ķēdes autentifikācija, nepareiza vietējo marķieru apstrāde un nepareizas konfigurācijas. Tilts ir jāpārbauda, lai nodrošinātu, ka tas var izturēt visus uzbrukuma vektorus un nodrošināt pareizu verifikācijas loģiku.
Iepazīstināt
Blokķēdes tilts ir protokols, kas savieno divas blokķēdes, lai nodrošinātu mijiedarbību starp tām. Ja jums pieder bitcoin, bet vēlaties piedalīties DeFi aktivitātēs Ethereum tīklā, blokķēdes tilts ļaus jums to izdarīt, nepārdodot savu bitcoin.
Blokķēdes tilti ir būtiski, lai blokķēdes sektorā panāktu savietojamību. Tie darbojas, izmantojot dažādas ķēdes un ārpus ķēdes autentifikācijas, un tādējādi tām ir atšķirīgas drošības ievainojamības.
Kāpēc tilta drošība ir svarīga?
Tiltos parasti ir marķieri, kurus lietotāji vēlas pārsūtīt no vienas ķēdes uz otru. Tilti, kas bieži tiek izmantoti kā viedie līgumi, glabā ievērojamu daudzumu marķieru, jo uzkrājas pārskaitījumi starp ķēdēm, padarot tos par ienesīgiem hakeru mērķiem.
Turklāt blokķēdes tiltiem ir liela uzbrukuma virsma, jo tie ietver daudzas sastāvdaļas. Ņemot vērā šo raksturu, ļaunprātīgie dalībnieki ir ļoti motivēti izmantot starpķēžu lietojumprogrammas, lai izņemtu lielas līdzekļu summas.
Saskaņā ar CertiK aplēsēm tiltu uzbrukumi 2022. gadā radīja zaudējumus vairāk nekā 1,3 miljardu dolāru apmērā, kas veido 36% no kopējiem gada zaudējumiem.
Izplatītas savienošanas ievainojamības
Lai uzlabotu tiltu drošību, ir vērtīgi izprast tiltu izplatītās ievainojamības un pārbaudīt tiltus pirms to palaišanas. Šīs ievainojamības var iedalīt četros veidos šādi.
Vāja ķēdes autentifikācija
Vienkāršiem tiltiem, īpaši tiem, kas paredzēti konkrētiem DApps, ķēdes validācija bieži ir minimāla. Šie tilti balstās uz centralizētu aizmugursistēmu, lai veiktu pamata darbības, piemēram, kalšanu, dedzināšanu un marķieru pārsūtīšanu, kamēr visa pārbaude tiek veikta ārpus ķēdes.
Turpretim cita veida tilti izmanto viedos līgumus, lai apstiprinātu ziņojumus un veiktu ķēdes verifikāciju. Šajā gadījumā, kad lietotājs iemaksā naudu ķēdē, viedais līgums ģenerē parakstītu ziņojumu un atgriež parakstu darījumā. Šis paraksts kalpo kā depozīta apliecinājums, ko izmanto, lai pārbaudītu lietotāja izņemšanas pieprasījumu citā ķēdē. Šis process spēs novērst dažādus drošības uzbrukumus, tostarp atkārtotus uzbrukumus un viltotus depozīta ierakstus.
Tomēr, ja ķēdes autentifikācijas procesā ir ievainojamības, uzbrucējs var radīt nopietnus bojājumus. Piemēram, ja tilts izmanto Merkle koku, lai autentificētu darījumu ierakstus, uzbrucējs var izveidot viltotus pierādījumus. Tas nozīmē, ka viņi var apiet pierādījuma autentifikāciju un savos kontos ievietot jaunus marķierus, ja autentifikācijas process ir neaizsargāts.
Daži tilti īsteno "iesaiņotu žetonu" jēdzienu. Piemēram, kad lietotājs pārsūta DAI no Ethereum uz BNB ķēdi, viņa DAI tiek ņemta no Ethereum līguma un līdzvērtīgs daudzums iesaiņotās DAI tiek atbrīvots BNB ķēdē.
Tomēr, ja šis darījums nav pareizi autentificēts, uzbrucējs var izvietot ļaunprātīgu līgumu, lai novirzītu iesaiņotos marķierus no tilta uz nepareizu adresi, manipulējot ar funkcionalitāti.
Uzbrucējiem arī ir nepieciešams, lai upuris apstiprinātu tilta līgumu, lai pārsūtītu marķierus, izmantojot funkciju “transferFrom”, lai izņemtu līdzekļus no tilta līguma.
Diemžēl tas pasliktinās, jo daudziem tiltiem ir nepieciešams neierobežots marķiera apstiprinājums no DApp lietotājiem. Šī ir populāra metode, kas samazina maksu par gāzi, bet rada papildu risku, ļaujot viedajam līgumam piekļūt neierobežotam skaitam žetonu no lietotāja maka. Uzbrucēji var izmantot autentifikācijas trūkumu un pārmērīgus apstiprinājumus, lai pārsūtītu tiem marķierus no citiem lietotājiem.
Vāja ārpusķēdes autentifikācija
Dažās tiltu sistēmās ārpus ķēdes aizmugursistēmas serveriem ir svarīga loma no blokķēdes nosūtīto ziņojumu likumības pārbaudē. Šajā gadījumā mēs koncentrējamies uz depozīta darījumu pārbaudi.
Blokķēdes tilts ar ārpusķēdes autentifikāciju darbojas šādi:
Lietotāji mijiedarbojas ar DApp, lai deponētu marķierus viedā līgumā avota ķēdē.
Pēc tam šī DApp nosūta depozīta transakcijas jaukšanas virkni uz aizmugursistēmas serveri, izmantojot API.
Darījuma jaucējvirkne ir pakļauta noteiktai servera validācijai. Ja tas tiek uzskatīts par likumīgu, parakstītājs paraksta ziņojumu un nosūta parakstu atpakaļ uz lietotāja interfeisu, izmantojot API.
Saņemot parakstu, DApp to pārbaudīs un ļaus lietotājiem izņemt savus marķierus no mērķa ķēdes.
Aizmugursistēmas serverim ir jānodrošina, ka tā apstrādātais depozīta darījums patiešām ir noticis un nav bojāts. Šis aizmugursistēmas serveris nosaka, vai lietotāji var izņemt marķierus mērķa ķēdē, un tāpēc tas ir vērtīgs uzbrucēju mērķis.
Aizmugursistēmas serverim ir jāapstiprina darījuma izstarotā notikuma struktūra, kā arī līguma adrese, kas emitēja notikumu. Ja pēdējais tiek ignorēts, uzbrucējs var izvietot ļaunprātīgu līgumu, lai viltotu depozīta notikumu ar tādu pašu struktūru kā likumīgam depozīta notikumam.
Ja aizmugursistēmas serveris nepārbauda, kura adrese izdevusi notikumu, tas uzskata to par derīgu darījumu un paraksta ziņojumu. Pēc tam uzbrucējs var nosūtīt darījuma jaucējfunkciju aizmugursistēmai, apejot verifikāciju un ļaujot izņemt marķierus no mērķa ķēdes.
Nepareiza vietējo žetonu apstrāde
Tiltiem ir dažādas pieejas vietējo un lietderības marķieru apstrādei. Piemēram, Ethereum tīklā vietējie marķieri ir ETH, un lielākā daļa utilītu marķieru atbilst ERC-20 standartam.
Kad lietotāji plāno pārsūtīt savu ETH uz citu ķēdi, viņiem tas vispirms ir jāiekļauj tilta līgumā. Lai to panāktu, lietotājiem darījumam vienkārši jāpievieno ETH, un ETH summu var iegūt, izlasot darījuma lauku “msg.value”.
ERC-20 marķieru nosūtīšana būtiski atšķiras no ETH sūtīšanas. Lai noguldītu ERC-20 marķieri, lietotājiem vispirms ir jāautorizē tilta līgums, lai iztērētu savus marķierus. Kad viņi to ir apstiprinājuši un ielikuši marķierus pārejas līgumā, līgumā tiks ierakstīti lietotāja marķieri, izmantojot funkciju "burnFrom()", vai arī lietotāja marķieri tiks pārsūtīti uz līgumu, izmantojot funkciju "transferFrom(("). )" .
Viena no metodēm, kā to atšķirt, ir izmantot if-else paziņojumu tajā pašā funkcijā. Cita pieeja ir izveidot divas atsevišķas funkcijas, lai risinātu katru situāciju. Mēģinot noguldīt ETH, izmantojot ERC-20 depozīta funkciju, šie līdzekļi var tikt zaudēti.
Apstrādājot ERC-20 depozīta pieprasījumus, lietotāji parasti norāda marķiera adreses kā ievadi depozīta funkcijai. Tas rada ievērojamu risku, jo darījuma laikā var rasties neuzticami ārējie zvani. Baltā saraksta ieviešana, kurā ir iekļauti tikai tilta atbalstīti marķieri, ir populārs veids, kā mazināt risku. Kā argumentus drīkst nodot tikai baltajā sarakstā iekļautās adreses. Tas novērš ārējos zvanus, jo projekta komanda ir filtrējusi marķiera adreses.
Tomēr problēmas var rasties arī tad, ja tilti apstrādā vietējo pilnvaru pārsūtīšanu starp ķēdēm, jo vietējiem marķieriem nav adreses. Adreses numurs 0 (0x000...0) apzīmē sākotnējo marķieri. Tas var būt problemātiski, jo adreses 0 nodošana funkcijai var apiet baltā saraksta verifikāciju, pat ja tā ir ieviesta nepareizi.
Kad tilta līgums izsauc "transferFrom", lai pārsūtītu lietotāja īpašumus uz līgumu, ārējais izsaukums uz nulles adresi atgriež nepatiesu, jo nulles adresē nav ieviesta funkcija "transferFrom". Tomēr darījums joprojām var notikt, ja līgumā netiek atbilstoši apstrādāta atdeves vērtība. Tas rada iespēju uzbrucējiem veikt darījumus, nenododot nekādus marķierus uz līgumu.
Nepareiza konfigurācija
Lielākajā daļā blokķēdes tiltu priviliģēta loma ir atbildīga par marķieru un adrešu iekļaušanu baltajā vai melnajā sarakstā, parakstītāju piešķiršanu vai mainīšanu un citām svarīgām konfigurācijām. Ir ļoti svarīgi nodrošināt, lai visas konfigurācijas būtu pareizas, jo pat šķietami nelielas kļūdas var radīt ievērojamus zaudējumus.
Faktiski radās problēma, kad uzbrucējs nepareizas konfigurācijas dēļ veiksmīgi apieta pārsūtīšanas ieraksta verifikāciju. Projekta komanda dažas dienas pirms uzlaušanas veica protokola jaunināšanu, kas ietvēra mainīgā lieluma maiņu. Mainīgais, ko izmanto, lai attēlotu uzticama ziņojuma noklusējuma vērtību. Šo izmaiņu rezultātā visi ziņojumi tiek automātiski uzskatīti par pierādītiem, tādējādi ļaujot uzbrucējam nosūtīt patvaļīgu ziņojumu un apiet verifikācijas procesu.
Kā uzlabot tilta drošību
Iepriekš aprakstītās četras kopīgās pārejas ievainojamības parāda problēmas, kas saistītas ar drošības nodrošināšanu savstarpēji savienotā blokķēdes ekosistēmā. Ir svarīgi apsvērumi, lai novērstu katru no šīm ievainojamībām, un nav vienas rokasgrāmatas, kas attiektos uz visām ievainojamībām.
Piemēram, vispārīgu vadlīniju sniegšana, lai nodrošinātu verifikācijas procesu bez kļūdām, ir izaicinājums, jo katram tiltam ir savas verifikācijas prasības. Visefektīvākā pieeja, lai novērstu verifikācijas apiešanu, ir rūpīgi pārbaudīt tiltu pret visiem iespējamiem uzbrukuma vektoriem un nodrošināt pareizu verifikācijas loģiku.
Rezumējot, ir svarīgi veikt stingru testēšanu pret iespējamiem uzbrukumiem un īpašu uzmanību pievērst visbiežāk sastopamajām tiltu drošības ievainojamībām.
kopsavilkums
Lielās vērtības dēļ šķērsķēžu tilti jau sen ir bijuši uzbrucēju mērķis. Izstrādātāji var palielināt savu tiltu drošību, veicot rūpīgu testēšanu pirms izvietošanas un izmantojot trešās puses, lai piedalītos auditā, lai samazinātu ievainojamību risku, kas pēdējos gados ir skāruši tiltus. Tilti ir ļoti svarīgi komponenti daudzu ķēžu pasaulē, taču drošībai ir jābūt galvenajai problēmai, izstrādājot un veidojot efektīvu Web3 infrastruktūru.
Lasīt vairāk:
Kas ir Blockchain tilts?
Kas ir starpķēžu sadarbspēja?
Trīs populāri kriptovalūtu tilti un kā tie darbojas
Kas ir iesaiņoti žetoni?
Atruna un brīdinājums par risku: šis saturs jums tiek piedāvāts "tāds, kāds tas ir" tikai vispārīgai informācijai un izglītojošiem nolūkiem, bez jebkāda veida pārstāvniecības vai garantijas . To nevajadzētu interpretēt kā finansiālu, juridisku vai citu profesionālu padomu, kā arī tas nav paredzēts kā ieteikums iegādāties kādu konkrētu produktu vai pakalpojumu. Jums pašam jālūdz padoms pie atbilstošiem profesionāliem konsultantiem. Gadījumos, kad rakstus ir pievienojuši trešo pušu līdzautori, lūdzu, ņemiet vērā, ka izteiktie viedokļi pieder trešās puses līdzautoram un ne vienmēr atspoguļo Binance Academy uzskatus. Lūdzu, izlasiet mūsu pilno atrunu šeit, lai iegūtu sīkāku informāciju. Digitālo aktīvu cenas var svārstīties. Jūsu ieguldījuma vērtība var gan kristies, gan pieaugt, un jūs, iespējams, neatgūsit ieguldīto summu. Jūs esat pilnībā atbildīgs par saviem ieguldījumu lēmumiem, un Binance Academy nav atbildīgs par jebkādiem zaudējumiem, kas jums var rasties. Šo materiālu nevajadzētu uzskatīt par finansiālu, juridisku vai citu profesionālu padomu. Lai iegūtu papildinformāciju, skatiet mūsu lietošanas noteikumus un brīdinājumu par risku.
