Šis raksts ir kopienas ieguldījums. 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.

Kopsavilkums

Blokķēdes tilti ir ļoti svarīgi, lai panāktu sadarbspēju blokķēdes telpā. Tāpēc jūsu drošība ir ārkārtīgi svarīga. Dažas no visbiežāk sastopamajām tilta drošības ievainojamībām ir vāja ķēdes un ārpus ķēdes validācija, nepareiza vietējo marķieru apstrāde un nepareizas konfigurācijas. Lai nodrošinātu stabilu verifikācijas loģiku, ieteicams pārbaudīt tiltu pret visiem iespējamiem uzbrukuma vektoriem.

Ievads

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 darbībā Ethereum tīklā, blokķēdes tilts ļauj to izdarīt, nepārdodot savu Bitcoin. 

Blokķēdes tilti ir ļoti svarīgi, lai panāktu sadarbspēju blokķēdes telpā. Tie darbojas, izmantojot dažādas ķēdes un ārpus ķēdes validācijas, tāpēc tām ir dažādas drošības ievainojamības.

Kāpēc tilta drošība ir būtiska? 

Parasti tilts satur marķieri, ko lietotājs vēlas pārsūtīt no vienas ķēdes uz otru. Tilti, kas bieži tiek īstenoti kā viedie līgumi, satur ievērojamu daudzumu marķieru, jo uzkrājas starpķēžu pārskaitījumi, padarot tos par ienesīgiem hakeru mērķiem. 

Turklāt blokķēdes tiltiem ir liela uzbrukuma virsma, jo tie ietver vairākus komponentus. Paturot to prātā, ļaunprātīgi dalībnieki uzskata, ka starpķēžu lietojumprogrammas ir galvenais mērķis lielu līdzekļu nozagšanai. 

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

Izplatītas tiltu drošības ievainojamības

Lai uzlabotu tiltu drošību, ir vērtīgi izprast to izplatītākās ievainojamības un pārbaudīt tās pirms palaišanas. Šīs ievainojamības var iedalīt šādās četrās jomās. 

Vāja ķēdes validācija

Vienkāršu tiltu gadījumā, īpaši tiem, kas paredzēti konkrētiem DApps, ķēdes validācija tiek samazināta līdz minimumam. Š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, savukārt visa pārbaude tiek veikta ārpus ķēdes.

Turpretim cita veida tilti izmanto viedos līgumus, lai apstiprinātu ziņojumus un veiktu ķēdes pārbaudes. Šādos gadījumos, kad lietotājs iemaksā ķēdē, viedais līgums ģenerē parakstītu ziņojumu un atgriež parakstu darījumā. Paraksts kalpo kā depozīta pierādījums un tiek izmantots, lai pārbaudītu lietotāja izņemšanas pieprasījumu citā ķēdē. Šim procesam ir jāspēj novērst dažāda veida drošības uzbrukumus, tostarp atkārtotus uzbrukumus un depozītu ierakstu viltošanu. 

Tomēr, ja ķēdes validācijas procesā ir ievainojamība, uzbrucējs var radīt būtisku kaitējumu. Piemēram, ja tilts izmanto Merkle koku, lai apstiprinātu darījuma ierakstu, uzbrucējs var ģenerēt viltotas kvītis. Tas nozīmē, ka, ja validācijas process ir ievainojams, uzbrucējs var apiet kupona validāciju un izveidot savam kontam jaunus marķierus.

Daži tilti īsteno jēdzienu "iesaiņoti žetoni". Piemēram, kad lietotājs pārsūta DAI no Ethereum uz BNB ķēdi, DAI tiek ņemta no Ethereum līguma un līdzvērtīga iesaiņota DAI tiek izsniegta BNB ķēdē. 

Tomēr, ja darījums nav pareizi apstiprināts, uzbrucējs var izvietot ļaunprātīgu līgumu, lai novirzītu iesaiņotos marķierus no tilta uz nepareizo adresi. 

Uzbrucējiem arī ir vajadzīgi upuri, lai apstiprinātu tilta līgumu, lai viņi varētu pārsūtīt marķierus, izmantojot funkciju "transferFrom" un tādējādi iztukšotu līdzekļus no tilta līguma. 

Diemžēl to pasliktina fakts, ka daudziem tiltiem ir nepieciešams bezgalīgs pilnvaru apstiprinājums no DApp lietotājiem. Tā ir izplatīta prakse, kas samazina maksu par gāzi, bet rada papildu riskus, ļaujot viedajam līgumam piekļūt neierobežotam daudzumam žetonu no lietotāja maka. Uzbrucēji var izmantot validācijas trūkumu un pārmērīgu apstiprinājumu, lai pārsūtītu tokenus no citiem lietotājiem sev.

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. Šoreiz pievērsīsimies depozīta darījumu pārbaudei. 

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

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

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

  3. Darījuma jaucējfunkcijai tiek veiktas vairākas servera pārbaudes. 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 pilnvaro lietotāju izņemt 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 viltojums. Šis aizmugursistēmas serveris nosaka, vai lietotājs var izņemt marķierus mērķa ķēdē, un tāpēc tas ir ļoti pieprasīts kibernoziedznieku uzbrukuma mērķis.

Aizmugursistēmas serverim ir jāapstiprina darījuma emitētā notikuma struktūra, kā arī līguma adrese, kas izdeva notikumu. Ja pēdējais tiek ignorēts, uzbrucējs var izmantot ļaunprātīgu līgumu, lai viltotu depozīta notikumu ar tādu pašu struktūru kā likumīgajam depozīta notikumam. 

Ja aizmugursistēmas serveris nepārbauda, ​​kura adrese izdeva notikumu, tas var uzskatīt to par derīgu darījumu un parakstīt ziņojumu. Pēc tam uzbrucējs varētu nosūtīt darījuma jaucējkodu uz aizmugursistēmu, apejot verifikāciju un veiksmīgi noņemot marķierus no mērķa ķēdes.

Nepareiza vietējo žetonu apstrāde

Tilti izmanto dažādas pieejas vietējo pilnvaru 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 mēģina pārsūtīt savu ETH uz citu ķēdi, viņam tas vispirms ir jāiemaksā tilta līgumā. Lai to paveiktu, lietotājs darījumam vienkārši pievieno ETH, un ETH summu var izgūt, nolasot darījuma lauku "msg.value".

ERC-20 žetonu noguldīšana ļoti 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 apstiprināšanas un marķieru ievietošanas tilta līgumā līgums vai nu sadedzinās lietotāja marķierus, izmantojot funkciju "burnFrom()", vai arī pārsūtīs lietotāja marķieri uz līgumu, izmantojot funkciju "transferFrom()". 

Viens no veidiem, kā to atšķirt, ir izmantot nosacījuma paziņojumu tajā pašā funkcijā. Vēl viens veids 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ījumus, lietotāji parasti norāda marķiera adresi kā ievadi depozīta funkcijai. Tas rada būtisku risku, jo darījuma laikā var rasties neuzticami ārējie zvani. Baltā saraksta ieviešana, kurā ir iekļauti tikai tilta atbalstītie marķieri, ir izplatīta prakse, lai samazinātu šo risku. Kā argumentus var nodot tikai baltajā sarakstā iekļautās adreses. Tas novērš ārējos zvanus, jo projekta komanda jau ir nopludinājusi marķiera adresi.

Tomēr problēmas var rasties, 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) apzīmē vietējo pilnvaru. Tas var būt problemātiski, jo nulles adreses nodošana funkcijai var apiet baltā saraksta pārbaudi, pat ja tā ir ieviesta pareizi. 

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ž vērtību "false", jo nulles adresē nav ieviesta funkcija "transferFrom". Tomēr darījums joprojām var notikt, ja līgumā netiek pareizi apstrādāta atgrieztā vērtība. Tas rada iespēju uzbrucējiem veikt darījumu, nenododot nekādus marķierus uz līgumu.

Nepareiza konfigurācija

Lielākajā daļā blokķēdes tiltu personai, kas ir atbildīga par marķieru un adrešu iekļaušanu baltajā vai melnajā sarakstā, parakstītāju piešķiršanu vai maiņu un citiem svarīgiem iestatījumiem, ir priviliģēta loma. Ir ļoti svarīgi nodrošināt, lai visi iestatījumi būtu precīzi, jo pat šķietami niecīgas pārlaidības var radīt ievērojamus zaudējumus.

Faktiski bija viens gadījums, kad uzbrucējs nepareizas konfigurācijas dēļ veiksmīgi apieta pārsūtīšanas žurnāla verifikāciju. Projekta komanda dažas dienas pirms uzlaušanas ieviesa protokola atjauninājumu, un šis atjauninājums 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 rezultātā visi ziņojumi tika automātiski klasificēti kā pārbaudīti, ļaujot uzbrucējam nosūtīt patvaļīgu ziņojumu un apiet verifikācijas procesu.

Kā uzlabot tilta drošību

Četras visizplatītākās līdz šim izskaidrotās tilta ievainojamības parāda problēmas, ar kurām saskaras drošības nodrošināšana savstarpēji savienotā blokķēdes ekosistēmā. Apstrādājot katru no šīm ievainojamībām, ir jāņem vērā būtiski apsvērumi, un nav universāla risinājuma, kas derētu visiem. 

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 iespējamiem uzbrukuma vektoriem un nodrošināt, ka verifikācijas loģika ir pareiza. 

Īsāk sakot, ir svarīgi veikt stingras pārbaudes pret iespējamiem uzbrukumiem un īpašu uzmanību pievērst visbiežāk sastopamajām tiltu drošības ievainojamībām.  

Secinājumi 

To augstās vērtības dēļ šķērsķēžu tilti jau sen ir bijuši uzbrukuma mērķi. Izstrādātāji var stiprināt savu tiltu drošību, veicot plašu pirmsizvietošanas testēšanu un piedaloties trešo pušu auditos, tādējādi samazinot postošo uzlaušanas risku, kas pēdējos gados ir skārusi tiltus. Tilti ir ļoti svarīgi daudzu ķēžu pasaulē, taču drošībai ir jābūt prioritātei, izstrādājot un veidojot efektīvu Web3 infrastruktūru.

Tālāka lasīšana

Kas ir blokķēdes tilts?

Kas ir starpķēžu sadarbspēja?

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

Kas ir iesaiņotie žetoni?

Juridisks paziņojums un brīdinājums par risku: šis saturs tiek pasniegts "tāds, kāds ir" tikai vispārīgiem informatīviem 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, lai ieteiktu iegādāties kādu konkrētu produktu vai pakalpojumu. Jums vajadzētu lūgt privātu padomu no piemērotiem profesionāliem konsultantiem. Tā kā šis raksts ir trešās puses ieguldījums, lūdzu, ņemiet vērā, ka šeit izteiktie viedokļi ir trešās puses līdzstrādnieka viedokļi un ne vienmēr atspoguļo Binance Academy uzskatus. Lai iegūtu plašāku informāciju, lūdzu, izlasiet visu mūsu juridisko paziņojumu šeit. Digitālo aktīvu cenas var būt nepastāvīgas. Ieguldījuma vērtība var gan kristies, gan pieaugt, un jūs varat neatgūt ieguldīto summu. Jūs esat atbildīgs par saviem ieguldījumu 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, lūdzu, skatiet mūsu lietošanas noteikumus un brīdinājumu par risku.