Šis raksts ir kopienas ziņa. 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 Academy uzskatus.
Kopsavilkums
Blockchain tilti ir svarīgi, lai panāktu sadarbspēju blokķēdes jomā. Tāpēc tilta drošība ir ļoti svarīga. Dažas izplatītas tiltu drošības ievainojamības ir vāja ķēdes un ārpus ķēdes validācija, nepareiza vietējo marķieru apstrāde un nepareiza konfigurācija. Lai nodrošinātu saprātīgu verifikācijas loģiku, ieteicams pārbaudīt tiltu pret visiem iespējamiem uzbrukuma vektoriem.
Ievads
Bridge blockchain ir protokols, kas savieno divas blokķēdes, lai nodrošinātu mijiedarbību starp tām. Ja jums ir bitkoini, bet vēlaties piedalīties DeFi aktivitātēs Ethereum tīklā, blokķēdes tilti ļauj to izdarīt, nepārdodot bitkoīnus.
Blockchain tilti ir būtiski, lai panāktu sadarbspēju blokķēdes jomā. Šis tilts darbojas, izmantojot dažādas ķēdes un ārpus ķēdes pārbaudes, tāpēc tam ir dažādas drošības ievainojamības.
Kāpēc tilta drošība ir svarīga?
Tiltos parasti tiek glabāti marķieri, kurus lietotāji vēlas pārsūtīt no vienas ķēdes uz otru. Tilti bieži tiek ieviesti kā viedie līgumi, un tajos tiek glabāti liels daudzums marķieru, jo uzkrājas starpķēžu pārskaitījumi, padarot tos par kārdinošiem hakeru mērķiem.
Turklāt blokķēdes tiltiem ir liela uzbrukuma atstarpe, jo tie ietver daudzas sastāvdaļas. Tāpēc noziedznieki ir ļoti motivēti izmantot starpķēžu lietojumprogrammas, lai iztukšotu lielas naudas summas.
Tiltu uzbrukumi 2022. gadā ir radījuši zaudējumus vairāk nekā 1,3 miljardu ASV dolāru apmērā, kas ir 36% no kopējiem zaudējumiem šajā gadā saskaņā ar CertiK aplēsēm.
Kopējās tiltu drošības ievainojamības
Lai uzlabotu tiltu drošību, ir svarīgi izprast tiltu kopējās drošības ievainojamības un pārbaudīt tiltus pirms palaišanas. Šīs ievainojamības var iedalīt četrās jomās.
Vāja ķēdes validācija
Vienkāršiem tiltiem, īpaši tiem, kas paredzēti konkrētiem DApps, ķēdes validācija ir minimāla. Tilts balstās uz centralizētu aizmugursistēmu, lai veiktu tādas pamatdarbības kā kalšana, dedzināšana un marķiera pārsūtīšana, kamēr visa verifikācija tiek veikta ārpus ķēdes.
Turpretim cita veida tilti izmanto viedos līgumus, lai apstiprinātu ziņojumus un veiktu ķēdes verifikāciju. Šādā situācijā, kad lietotājs nogulda līdzekļus ķēdē, viedais līgums ģenerēs parakstītu ziņojumu un atgriezīs parakstu darījumā. Šis paraksts kalpo kā depozīta apliecinājums un tiek izmantots, lai pārbaudītu lietotāju pieprasījumus citās ķēdēs. Šim procesam vajadzētu novērst dažādus drošības uzbrukumus, tostarp atkārtotus uzbrukumus un viltotus depozīta ierakstus.
Tomēr, ja ķēdes validācijas procesa laikā pastāv ievainojamība, uzbrucējs var radīt nopietnus bojājumus. Piemēram, ja tilts izmanto Merkle koku, lai apstiprinātu darījumu ierakstus, uzbrucējs var radīt nepatiesus pierādījumus. Tas nozīmē, ka viņi var apiet pierādījumu validāciju un savā kontā izveidot jaunus marķierus, ja validācijas process ir neaizsargāts.
Daži tilti īsteno “iesaiņota marķiera” koncepciju. 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 iesaiņotā DAI apjoms tiek izsniegts uzņēmumam BNB Chain.
Tomēr, ja šie darījumi nav pareizi apstiprināti, uzbrucējs var īstenot ļaunprātīgu līgumu, lai novirzītu iesaiņotos marķierus no tilta uz nepareizu adresi, manipulējot ar tā funkcionalitāti.
Uzbrucējs arī pieprasa, lai upuris piekristu tilta līgumam, 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 lielākajai daļai tiltu ir nepieciešams neierobežots marķiera apstiprinājums no DApp lietotājiem. Tā ir izplatīta prakse, kas samazina maksu par gāzi, bet rada papildu risku, ļaujot viedajiem līgumiem piekļūt marķieriem no neierobežota lietotāju maka skaita. Uzbrucēji var izmantot validācijas trūkumu un pārmērīgu apstiprinājumu, lai pārsūtītu marķierus no citiem lietotājiem sev.
Vāja ārpusķēdes validācija
Dažās tiltu sistēmās ārpusķēdes aizmugursistēmas serveriem ir svarīga loma no blokķēdes nosūtīto ziņojumu derīguma pārbaudē. Šajā gadījumā mēs koncentrējamies uz depozīta darījumu pārbaudi.
Veids, kā blokķēdes tilts darbojas ar ārpusķēdes validāciju, ir šāds:
Lietotāji mijiedarbojas ar DApp, lai deponētu marķierus viedos līgumos avota ķēdē.
Pēc tam DApp nosūta depozīta darījuma jaucējkodu uz aizmugursistēmas serveri, izmantojot API.
Darījumu jaucējkodiem ir nepieciešama servera pārbaude. Ja tas tiek uzskatīts par derīgu, parakstītājs paraksta ziņojumu un pēc tam nosūta parakstu atpakaļ uz lietotāja interfeisu, izmantojot API.
Pēc paraksta saņemšanas DApp to pārbauda un pēc tam ļauj lietotājam izņemt marķierus no mērķa ķēdes.
Aizmugursistēmas serverim ir jānodrošina, ka apstrādātais depozīta darījums patiešām ir noticis un nav viltots. Šis aizmugursistēmas serveris nosaka, vai lietotāji var izņemt marķierus mērķa ķēdē, padarot to par vērtīgu mērķi uzbrucējiem.
Aizmugursistēmas serverim ir jāapstiprina notikuma struktūra, kas izriet no darījuma, kā arī tā līguma adrese, kas ģenerēja notikumu. Ja līguma adrese tiek ignorēta, uzbrucējs var īstenot ļaunprātīgu līgumu, lai viltotu depozīta notikumu, izmantojot tādu pašu struktūru kā likumīgam depozīta notikumam.
Ja tas nepārbauda adresi, kas ģenerēja notikumu, aizmugursistēmas serveris var pieņemt, ka šis līgums ir derīgs, un parakstīt ziņojumu. Pēc tam uzbrucējs var nosūtīt darījuma jaucējfunkciju aizmugursistēmai, tādējādi apejot verifikāciju un ļaujot izņemt marķierus no mērķa ķēdes.
Nepareiza vietējo žetonu apstrāde
Bridge izmanto dažādas pieejas vietējo marķieru un utilītu marķieru apstrādei. Piemēram, Ethereum tīklā vietējais marķieris ir ETH, un lielākā daļa utilītu marķieru atbilst ERC-20 standartam.
Ja lietotājs plāno pārsūtīt savu ETH uz citu ķēdi, viņam tas vispirms ir jāiekļauj tilta līgumā. Lai to panāktu, lietotāji darījumam vienkārši pievieno ETH, un pēc tam ETH summu var izgūt, izlasot darījuma lauku “msg.value”.
ERC-20 žetonu noguldīšana ļoti atšķiras no ETH noguldīšanas. Lai noguldītu ERC-20 žetonus, lietotājiem vispirms ir jāļauj tilta līgumam izmantot savus marķierus. Kad viņš piekrīt un iemaksā marķierus tilta līgumā, līgums vai nu sadedzinās lietotāja marķierus, izmantojot funkciju "burnFrom()", vai pārsūtīs lietotāja marķierus uz līgumu, izmantojot funkciju "transferFrom()".
Viena pieeja, kā tos atšķirt, ir izmantot if-else paziņojumus vienā un tajā pašā funkcijā. Cita pieeja ir izveidot divas atsevišķas funkcijas, lai apstrādātu katru scenāriju. Mēģinot noguldīt ETH, izmantojot ERC-20 depozīta funkciju, var tikt zaudēti līdzekļi.
Apstrādājot ERC-20 depozīta pieprasījumu, lietotāji parasti norāda marķiera adresi kā ievadi depozīta funkcijai. Šī darbība rada ievērojamus riskus, jo darījumu laikā var rasties neuzticami ārējie zvani. Baltā saraksta ieviešana, kas ietver tikai tilta nodrošinātos marķierus, ir izplatīta prakse, lai samazinātu risku. Kā argumentus ir atļauts nodot tikai baltajā sarakstā iekļautās adreses. Tas novērš ārējos zvanus, jo projekta komanda jau filtrē marķiera adreses.
Tomēr problēmas rodas arī tad, ja tilts apstrādā vietējo marķieru pārsūtīšanu starp ķēdēm, jo vietējiem marķieriem nav adrešu. Adrese nulle (0x000...0) apzīmē sākotnējo marķieri. Tas var būt problemātiski, jo nulles adreses 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 līdzekļus uz līgumu, ārējais izsaukums uz nulles adresi atgriež vērtību “false”, jo nulles adresē nav ieviesta funkcija “transferFrom”. Tomēr darījumi joprojām var notikt, ja līgums nevar pareizi apstrādāt iegūto vērtību. Tas rada iespēju uzbrucējiem veikt darījumus, nepārsūtot marķierus uz līgumu.
Konfigurācijas kļūda
Lielākajā daļā blokķēdes tiltu priviliģētā pozīcija 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 precīzas, jo pat šķietami mazsvarīgas kļūdas var radīt lielus zaudējumus.
Faktiski vienā incidentā uzbrucējam izdevās apiet pārsūtīšanas ieraksta pārbaudi konfigurācijas kļūdas dēļ. Projekta komanda vairākas dienas pirms uzlaušanas ieviesa protokola jauninājumu, kas ietvēra mainīgā lieluma maiņu. Mainīgais tiek izmantots, lai attēlotu uzticamo ziņojumu noklusējuma vērtību. Šo izmaiņu rezultātā visi ziņojumi tiek uzskatīti par automātiski pierādītiem, ļaujot uzbrucējiem pēc vēlēšanās sūtīt ziņojumus un apiet verifikācijas procesu.
Kā uzlabot tilta drošību
Iepriekš aprakstītās četras kopīgās tiltu 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ērt, kā novērst katru no šīm ievainojamībām. Nav vienas vadlīnijas, kas attiecas uz visu.
Piemēram, ir grūti sniegt vispārīgas vadlīnijas, lai nodrošinātu verifikācijas procesu bez kļūdām, jo katram tiltam ir unikālas 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, ka verifikācijas loģikai ir jēga.
Rezumējot, ir svarīgi veikt stingru potenciālo uzbrukumu testēšanu un īpašu uzmanību pievērst bieži sastopamajām tiltu drošības ievainojamībām.
Noslēgšana
Lielās vērtības dēļ šķērsķēžu tilti jau sen ir bijuši uzbrucēju mērķis. Būvnieki var stiprināt tiltu drošību, pirms ieviešanas veicot rūpīgu testēšanu un trešo pušu auditus, lai samazinātu dārgu uzlaušanas risku, kas pēdējos gados ir skārusi tiltus. Tilti ir būtiski daudzu ķēžu pasaulē, taču, izstrādājot un veidojot efektīvu Web3 infrastruktūru, galvenā uzmanība jāpievērš drošībai.
Tālāka lasīšana
Kas ir tilta blokķēde?
Kas ir starpķēžu sadarbspēja?
Trīs populāri kriptogrāfijas tilti un to darbība
Kas ir iesaiņotie žetoni?
Atruna un brīdinājums par risku: šis saturs jums tiek piedāvāts “tāds, kāds tas ir” tikai vispārīgas informācijas un izglītošanas nolūkos bez jebkāda veida pārstāvniecības vai garantijas. Šo saturu nevajadzētu interpretēt kā finansiālu, juridisku vai citu profesionālu padomu, kā arī tas nav paredzēts, lai ieteiktu iegādāties kādu konkrētu produktu vai pakalpojumu. Jums vajadzētu lūgt padomu no atbilstošiem profesionāliem konsultantiem. Ja raksts ir trešās puses līdzautora ieguldījums, lūdzu, ņemiet vērā, ka izteiktie viedokļi ir trešās puses līdzstrādnieka viedokļi 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 būt nepastāvīgas. Jūsu ieguldījuma vērtība var kristies vai pieaugt. Jūs varat neatgūt ieguldīto summu. Jūs esat pilnībā atbildīgs par saviem investīciju lēmumiem. Binance Academy nav atbildīga 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, izlasiet mūsu lietošanas noteikumus un brīdinājumu par risku.

