Šis raksts ir kopienas iesniegums. Autors ir Minži He, CertiK auditors.

Šajā rakstā sniegtie viedokļi ir līdzstrādnieka/autora viedokļi, un tie ne vienmēr atspoguļo Binance Academy uzskatus.

TL;DR

Blokķēdes tilti ir būtiski, lai panāktu sadarbspēju blokķēdes telpā. Blockchain tiltu drošība ir ārkārtīgi svarīga. Dažas izplatītas tilta drošības ievainojamības ietver problēmas ar ķēdes un ārpus ķēdes validāciju, sliktu vietējo pilnvaru pārvaldību un nepareizas konfigurācijas. Ieteicams pārbaudīt tiltu pret visiem iespējamiem uzbrukuma vektoriem, lai nodrošinātu stabilu verifikācijas loģiku.

Ievads 

Blokķēdes tilts ir protokols, kas savieno divas blokķēdes, lai nodrošinātu mijiedarbību starp tām. Ja jums pieder bitkoīni, bet vēlaties piedalīties DeFi darbībā Ethereum tīklā, blokķēdes tilts ļauj to izdarīt, nepārdodot savus bitkoinus. 

Blokķēdes tilti ir būtiski, lai panāktu sadarbspēju blokķēdes telpā. Tie darbojas, izmantojot vairākas ķēdes un ārpus ķēdes validācijas, un tāpēc tām ir dažādas drošības ievainojamības.

Kāpēc tilta drošība ir kritiska? 

Parasti tiltā ir marķieris, ko lietotājs vēlas pārsūtīt no vienas blokķēdes uz citu. Tilti bieži tiek izvietoti kā viedie līgumi, un tajos ir ievērojams daudzums marķieru, jo uzkrājas starpķēžu pārskaitījumi, padarot tos par potenciāli ienesīgiem hakeru mērķiem. 

Turklāt blokķēdes tiltiem ir daudzi punkti, kas ir pakļauti uzbrukumiem, jo ​​tie ietver daudzas sastāvdaļas. Paturot to prātā, ļaunprātīgi lietotāji ir motivēti mērķēt uz starpķēžu lietojumprogrammām, mēģinot nozagt lielus daudzumus. 

Saskaņā ar CertiK aplēsēm 2022. gadā tiltu uzbrukumi radīja zaudējumus vairāk nekā 1,3 miljardu dolāru apmērā, kas veido 36% no gada kopējiem zaudējumiem. 

Kopējās tilta drošības ievainojamības

Lai palielinātu tiltu drošību, ir svarīgi saprast to kopīgās ievainojamības un pārbaudīt tās pirms izlaišanas. Šīs ievainojamības var iedalīt šādās č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 samazināta līdz minimumam. Šie tilti balstās uz centralizētu aizmugursistēmu, lai veiktu pamatdarbības, piemēram, marķiera izdošanu, ierakstīšanu un pārsūtīšanu, savukārt visas pārbaudes tiek veiktas ārpus ķēdes.

No otras puses, cita veida tilti izmanto viedos līgumus, lai apstiprinātu ziņojumus un veiktu ķēdes pārbaudes. Šajā scenārijā, kad lietotājs iemaksā līdzekļus blokķēdē, viedais līgums ģenerē parakstītu ziņojumu un atgriež parakstu attiecīgajā darījumā. Šis paraksts kalpo kā depozīta pierādījums un tiek izmantots, lai pārbaudītu lietotāja izņemšanas pieprasījumu citā blokķēdē. Šim procesam ir jāspēj novērst dažādus drošības uzbrukumus, tostarp atkārtotus uzbrukumus un viltotus depozīta ierakstus. 

Tomēr, ja ķēdes validācijas procesa laikā rodas ievainojamība, hakeris var radīt nopietnus bojājumus. Piemēram, ja tilts darījuma ieraksta apstiprināšanai izmanto Merkles koku, uzbrucējs var viltot viltotus pierādījumus. Tas nozīmē, ka, ja validācijas process ir neaizsargāts, viņi var apiet pierādījumu validāciju un savos kontos izveidot jaunus marķierus.

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 atsaukta no Ethereum līguma un BNB ķēdē tiek izsniegts līdzvērtīgs iesaiņotā DAI apjoms. 

Tomēr, ja šis darījums nav pareizi apstiprināts, hakeris var izvietot ļaunprātīgu līgumu un manipulēt ar funkciju, lai novirzītu iesaiņotos marķierus no tilta uz nepareizu adresi. 

Hakeriem ir nepieciešami upuri, lai apstiprinātu tilta līgumu, lai pārsūtītu marķierus, izmantojot funkciju “transferFrom”, un nozagtu līgumā paredzētos līdzekļus. 

Diemžēl šo problēmu saasina fakts, ka daudziem tiltiem ir nepieciešama neierobežota piekļuve (bezgalīgs pilnvaru apstiprinājums) DApp lietotāju marķieriem. Tā ir izplatīta prakse, kas samazina maksu par gāzi, bet rada papildu riskus, ļaujot viedajam līgumam piekļūt neierobežotam skaitam žetonu no lietotāja maka. Daži hakeri var izmantot validācijas trūkumu un neierobežotu piekļuvi, lai nozagtu žetonus no citiem lietotājiem.

Vāja ārpusķēdes validācija

Dažās tiltu sistēmās ārpusķēdes aizmugursistēmas serverim ir izšķiroša loma, pārbaudot no blokķēdes nosūtīto ziņojumu likumību. Šajā gadījumā mēs koncentrēsimies uz depozīta darījumu pārbaudi. 

Blokķēdes tilts ar ārpusķēdes validāciju darbojas šādi: 

  1. Lietotāji mijiedarbojas ar DApp, lai deponētu marķierus viedajā līgumā avota blokķēdē.

  2. Pēc tam DApp nosūta depozīta darījuma jaucējkodu uz aizmugursistēmas serveri, izmantojot API.

  3. Darījuma jaucējkods ir pakļauts vairākiem servera apstiprinājumiem. 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.

  4. Saņemot parakstu, DApp to pārbauda un ļauj lietotājam izņemt savus marķierus no avota blokķēdes.

Aizmugursistēmas serverim ir jānodrošina, ka apstrādātais depozīta darījums patiešām ir noticis un nav viltots. Šis serveris nosaka, vai lietotājs var izņemt marķierus mērķa blokķēdē. Tāpēc tas ir vērtīgs hakeru mērķis.

Aizmugursistēmas serverim ir jāapstiprina darījuma radītā notikuma struktūra, kā arī līguma adrese, kas izsūtīja šo notikumu. Ja pēdējais tiek atstāts novārtā, hakeris var izmantot ļaunprātīgu līgumu, lai viltotu depozīta notikumu ar tādu pašu struktūru kā likumīgam notikumam. 

Ja aizmugursistēmas serveris nepārbauda, ​​kura adrese izdeva notikumu, tas uzskatīs šo darījumu par derīgu un parakstīs ziņojumu. Hakeris var nosūtīt darījuma jaucējfunkciju aizmugursistēmai, apejot verifikāciju un ļaujot izņemt marķierus no blokķēdes.

Nepareiza vietējo marķieru pārvaldība

Tilti izmanto dažādas pieejas, lai apstrādātu vietējos marķierus un lietderības marķierus. Piemēram, Ethereum tīklā vietējais marķieris ir ETH, un lielākā daļa utilītu marķieru atbilst ERC-20 standartam. 

Kad lietotājs vēlas pārsūtīt ETH uz citu blokķēdi, viņam vispirms ir jāiemaksā marķieri tilta līgumā. Lai to izdarītu, lietotājs darījumam vienkārši pievieno ETH, un summu var izgūt, izmantojot funkciju “msg.value” darījuma laukā.

ERC-20 marķieru noguldīšana būtiski atšķiras no ETH noguldīšanas. Lai noguldītu ERC-20 marķieri, lietotājam vispirms ir jāļauj tilta līgumam iztērēt savus marķierus. Pēc marķieru apstiprināšanas un noguldīšanas tilta līgumā līgumā tiks vai nu ierakstīti lietotāja marķieri, izmantojot funkciju "burnFrom()", vai arī pārsūtīti marķieri 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 apstrādātu katru scenāriju. Mēģinot noguldīt ETH, izmantojot ERC-20 depozīta funkciju, var tikt zaudēti līdzekļi.

ERC-20 depozīta pieprasījumiem lietotāji parasti norāda marķiera adresi kā ievadi depozīta funkcijai. Šī darbība ir riskanta, jo darījuma laikā var rasties neuzticami ārējie zvani. Baltā saraksta ieviešana, kurā iekļauti tikai tilta atbalstītie marķieri, ir izplatīta prakse, lai samazinātu riskus. Tikai baltajā sarakstā iekļautās adreses tiek pieņemtas kā argumenti. Tas ļauj izvairīties no ārējiem zvaniem, jo ​​projekta komanda jau ir filtrējusi marķiera adresi.

Tomēr problēmas var rasties arī tad, ja tilti apstrādā vietējo pilnvaru pārsūtīšanu starp ķēdēm, jo ​​vietējam marķierim nav adreses. Nulles adrese (0x000...0) atspoguļo vietējo pilnvaru. Tas var būt problemātiski, jo, nododot funkcijai nulles adresi, tā var apiet baltā saraksta pārbaudi, pat ja tā ir ieviesta nepareizi. 

Kad tilta līgums izsauc funkciju “transferFrom”, lai pārsūtītu aktīvus no lietotāja uz līgumu, ārējais izsaukums uz nulles adresi atgriež vērtību “false”, 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 hakeriem veikt darījumu, 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ā un melnajā sarakstā, parakstītāju piešķiršanu vai mainīšanu un citiem svarīgiem iestatījumiem. Ir ļoti svarīgi nodrošināt, lai visi iestatījumi būtu precīzi, jo pat šķietami nenozīmīgas kļūdas var radīt ievērojamus zaudējumus.

Faktiski notika incidents, kad urķim nepareizas konfigurācijas dēļ izdevās apiet pārsūtīšanas žurnāla verifikāciju. Dažas dienas pirms uzbrukuma projekta komanda ieviesa protokola atjauninājumu, kas ietvēra mainīgā lieluma maiņu. Mainīgais tika izmantots, lai attēlotu uzticamā ziņojuma noklusējuma vērtību. Šo izmaiņu dēļ visi ziņojumi tika automātiski uzskatīti par pārbaudītiem, ļaujot uzbrucējam nosūtīt patvaļīgu ziņojumu un iziet verifikācijas procesu.

Kā uzlabot tilta drošību

Četras visizplatītākās tiltu ievainojamības, kas izskaidrotas iepriekš, izceļ problēmas, kas saistītas ar drošības nodrošināšanu savstarpēji savienotā blokķēdes ekosistēmā. Ir svarīgi apsvērumi, kā rīkoties ar katru no šīm ievainojamībām, un nav viena ceļveža, kas attiektos uz visām šī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, ka verifikācijas loģika ir stabila un konsekventa. 

Īsāk sakot, 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.  

Nobeiguma apsvērumi 

To augstās vērtības dēļ uz šķērsķēžu tiltiem jau ilgu laiku ir bijuši hakeri. Izstrādātāji var uzlabot savu tiltu drošību, veicot pirmsizvietošanas testēšanu un trešo pušu auditus, samazinot tādu postošu hakeru uzbrukumu risku kā pēdējos gados. Tilti ir būtiski pasaulē, kurā ir vairākas blokķēdes, taču drošībai ir jābūt prioritātei, izstrādājot un attīstot efektīvu Web3 infrastruktūru.

Tālāk lasāmviela

Kas ir Blockchain tilts?

Kas ir starpķēžu sadarbspēja?

Trīs populāri kriptogrāfijas tilti un to darbība

Kas ir iesaiņoti žetoni?

Brīdinājums par risku un atruna: šis saturs jums tiek piedāvāts “tāds, kāds ir” tikai informatīviem un izglītojošiem nolūkiem, bez jebkādas garantijas. Saturu nedrīkst interpretēt kā finansiālu, juridisku vai profesionālu padomu, un tas nav paredzēts, lai ieteiktu iegādāties kādu konkrētu produktu vai pakalpojumu. Jums vajadzētu meklēt savu padomu no profesionāliem konsultantiem. Ja ieguldījumus un rakstus ir iesnieguši trešo pušu līdzstrādnieki, lūdzu, ņemiet vērā, ka izteiktie viedokļi ir attiecīgā autora viedokļi un ne vienmēr atspoguļo Binance Academy uzskatus. Lai iegūtu sīkāku informāciju, lūdzu, izlasiet mūsu paziņojumu šeit. Digitālo aktīvu cenas var būt nepastāvīgas. 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 jūsu iespējamiem zaudējumiem. Šo materiālu nevajadzētu uzskatīt par finansiālu, juridisku vai profesionālu padomu. Lai iegūtu papildinformāciju, lūdzu, skatiet mūsu lietošanas noteikumus un brīdinājumu par risku.