原文标题:《Nulles slāņa apiešana: kāpēc izolēta drošība nav droša》
Autors: Krzysztof Urbański, L2BEAT komandas biedrs
Sastādījis: Babywhale, Foresight News
Kopš darbības sākuma L2BEAT ir ieguldījis ievērojamas pūles, lai analizētu un izprastu ar 2. slāņa protokoliem saistītos riskus. Mēs vienmēr rīkojamies savu lietotāju un ekosistēmas interesēs un darām visu iespējamo, lai būtu objektīvs, neatkarīgs pārraugs, neļaujot mūsu personīgajām vēlmēm attiecībā uz projektiem vai saistītām komandām ietekmēt faktus. Tāpēc, lai gan mēs cienām laiku un pūles, ko projekta komanda iegulda projektā, mēs varam "izsaukt trauksmi" vai norādīt uz savām bažām par iespējamo risku, kas saistīts ar noteiktiem protokoliem. Agrīnas ar drošību saistītas diskusijas ļauj visai ekosistēmai būt labāk sagatavotai iespējamiem riskiem un agrāk reaģēt uz jebkuru aizdomīgu rīcību.
Šodien mēs vēlētos apspriest kopīgu drošības modeli starpķēžu lietojumprogrammām. Pašlaik ir divi drošības modeļi: kopīga drošība un neatkarīga lietojumprogrammu drošība. Koplietotā drošība ir līdzīga visiem apkopojumiem. Atsevišķu lietojumprogrammu drošību galvenokārt izmanto "omnichain" projekti, kas galvenokārt izmanto LayerZero.
Kopīga drošība pret neatkarīgu drošību

Koplietotā drošība attiecas uz konkrētu pilnvaru vai lietojumprogrammu, kas darbojas noteiktā infrastruktūrā, un tā vietā, lai brīvi izvēlētos drošības modeli, tām ir jāievēro visas infrastruktūras noteiktās drošības prasības. Piemēram, Optimistiskie apkopojumi parasti nosaka 7 dienu pēdējo periodu — lietojumprogramma, kas darbojas šādos apkopojumos, nevar vienkārši ignorēt vai saīsināt šo periodu. Lai gan tas var šķist šķērslis, tam ir iemesls. Šis periods sniedz lietotājiem drošības garantijas, ka neatkarīgi no lietojumprogrammas iekšējās drošības politikas, kas ir jāievēro, lietojumprogramma var tikai stiprināt apkopojumu drošību, nevis to vājināt.
Neatkarīga drošība nozīmē, ka katra lietojumprogramma ir atbildīga par savas drošības definēšanu un to nekādā veidā neierobežo infrastruktūra. Sākumā tā var šķist laba ideja, galu galā lietotnes izstrādātājs vislabāk zina, kādi drošības pasākumi lietotnei var būt nepieciešami. Taču tajā pašā laikā tas uzliek gala lietotājam atbildību par risku novērtēšanu, kas saistīti ar katras lietojumprogrammas drošības politiku. Turklāt, ja lietotņu izstrādātāji var brīvi izvēlēties drošības politikas, viņi var tās jebkurā laikā mainīt. Tāpēc nepietiek, ja katram lietojumam tiek novērtēts risks, tas ir jānovērtē katru reizi, kad mainās lietojumprogrammas politikas.
Problēmas

Mēs uzskatām, ka neatkarīgs drošības modelis, kurā katra lietojumprogramma var brīvi noteikt savu drošības politiku, rada nopietnas drošības problēmas. Pirmkārt, tas palielina risku galalietotājiem, jo viņiem ir jāpārbauda katras lietojumprogrammas risks, ko viņi plāno izmantot.
Atsevišķa drošība arī palielina riskus lietotnēm, kas izmanto šo modeli, piemēram, pievienojot papildu riskus saistībā ar drošības politikas izmaiņām — ja uzbrucējs mainītu lietotnes drošības modeli, viņš to var arī vienkārši atspējot, tādējādi zaudējot naudu vai riskējot ar to. uzbrukt citos veidos. Lietojumprogrammai nav papildu drošības līmeņu, lai novērstu uzbrukumus.
Turklāt, tā kā drošības politikas var mainīties jebkurā laikā un lidojuma laikā, ir gandrīz neiespējami uzraudzīt lietojumprogrammas reāllaikā un informēt lietotājus par riskiem.

Mēs uzskatām, ka tas ir līdzīgs viedā līguma jaunināšanai, par ko esam brīdinājuši vietnē L2BEAT. Mēs informējam lietotājus par apkopošanas un pārrobežu ķēžu tiltiem, kuru viedajos līgumos ir jaunināšanas mehānismi, kā arī par precīziem jaunināšanas pārvaldības mehānismiem katrā gadījumā. Tas jau ir diezgan sarežģīti, un, izmantojot atsevišķus drošības modeļus, skaits tiek reizināts, padarot to gandrīz neiespējamu efektīvi izsekot.
Tāpēc mēs uzskatām, ka atsevišķs drošības modelis ir drošības risks pats par sevi, un mēs pieņemam, ka katra lietojumprogramma, kas pēc noklusējuma izmantos šo modeli, ir jāuzskata par riskantu, kamēr nav pierādīts pretējais.
Pierādiet, ka pastāv drošības ievainojamības
Mēs nolēmām pārbaudīt savu hipotēzi galvenajā tīklā. LayerZero ietvars tika izvēlēts eksperimentiem, jo tas ir viens no populārākajiem atsevišķiem uz drošību vērstiem risinājumiem. Mēs izvietojām drošu omnichain pilnvaru un vēlāk atjauninājām drošības konfigurāciju, lai atļautu ļaunprātīgu marķiera izņemšanu. Marķiera kods ir balstīts uz LayerZero sniegtajiem piemēriem, un tas ir ļoti līdzīgs vai identisks daudziem citiem universālās ķēdes marķieriem un lietojumprogrammām, kas izvietotas reālajā dzīvē.
Bet, pirms iedziļināmies detaļās, īsi apskatīsim, kā izskatās LayerZero drošības modelis.

Kā LayerZero norāda savā baltajā grāmatā, tā “neuzticamā starpķēžu komunikācija” balstās uz diviem neatkarīgiem dalībniekiem (orākuliem un pārraidītājiem), kas darbojas kopā, lai nodrošinātu protokola drošību.
LayerZero savā vietnē norāda, ka tā pamatjēdziens ir "lietotāja lietojumprogrammas, kurās darbojas ULN (UltraLightNode), konfigurējami ķēdes termināļi". LayerZero ķēdes komponents paļaujas uz diviem ārējiem ārpus ķēdes komponentiem, lai pārraidītu ziņojumus starp ķēdēm - orākuliem un relejiem.
Ikreiz, kad kāds ziņojums M tiek nosūtīts no ķēdes A uz ķēdi B, notiek šādas divas darbības:
Pirmkārt, orākuls gaida, līdz tiek pabeigts transakcija, kas nosūta ziņojumu M ķēdē A, un pēc tam ieraksta attiecīgo informāciju ķēdē B, piemēram, ķēdes A bloka galvenes jaucējvērtību, kas satur ziņojumu M (precīza vērtība starp dažādām ķēdēm/orākuliem Formāts var atšķirties).
Pēc tam relejs nosūta "pierādījumu" (piemēram, Merkle Proof) ķēdei B, pierādot, ka saglabātā bloka galvenē ir ziņojums M.
LayerZero pieņem, ka releji un orākuli ir neatkarīgi, godīgi dalībnieki. Tomēr LayerZero arī baltajā grāmatā norādīja, ka gadījumā, ja šis pieņēmums netiek izpildīts, piemēram, relejs un orākuls sadarbojas, kā rezultātā "gan orākula nodrošinātā bloka galvene, gan releja sniegtais darījuma pierādījums ir nederīgs, bet joprojām atbilst."
LayerZero apgalvo, ka "LayerZero dizains novērš slepenas vienošanās iespēju." Bet patiesībā šis apgalvojums ir nepareizs (mēs to pierādām tālāk redzamajos eksperimentos), jo katra lietotāja lietojumprogramma var definēt savus relejus un orākulus. LayerZero negarantē, ka šie komponenti ir neatkarīgi un nevar slepeni sadarboties, drīzāk šīs garantijas ir jāsniedz lietotāja lietojumprogrammai. LayerZero nav mehānisma, lai apturētu lietotnes, ja tās izvēlas tās sabojāt.
Turklāt pēc noklusējuma visas lietotāju lietojumprogrammas var jebkurā laikā mainīt relejus un orākulus, pilnībā mainot drošības pieņēmumus. Tāpēc nepietiek ar konkrētas lietojumprogrammas drošības pārbaudi tikai vienu reizi, jo pēc pārbaudes tā jebkurā laikā var mainīties, kā to parādīsim savos eksperimentos.
eksperimentālais dizains
Eksperimentiem mēs nolēmām izveidot vienkāršu omnichain marķieri CarpetMoon, kas darbojas gan Ethereum, gan Optimism un izmanto LayerZero, lai sazinātos starp abām ķēdēm.
Mūsu marķieris sākotnēji izmanto noklusējuma drošības modeli, ko nodrošina LayerZero, padarot to identisku lielai (varbūt ne visām) pašlaik izvietotajām LayerZero lietojumprogrammām. Tāpēc tā parasti ir tikpat droša kā jebkura cita monēta, izmantojot LayerZero.
Pirmkārt, mēs izvietojam mūsu marķiera līgumu par Ethereum un Optimism:
https://ethtx.info/mainnet/0xf4d1cdabb6927c363bb30e7e65febad8b9c0f6f76f1984cd74c7f364e3ab7ca9/
https://optimistic.etherscan.io/tx/0xf41389d71fa3942de5225efb067072728c6c6de56c241574187781db7c73d221
Pēc tam mēs iestatām maršrutēšanu, lai LayerZero zinātu, kurš līgums kuram atbilst abās ķēdēs.
https://ethtx.info/mainnet/0x19d78abb03179969d6404a7bd503148b4ac14d711f503752495339c96a7776e9/
https://optimistic.etherscan.io/tx/0x037b1bad33faa5607bb5835460a1d5caaf3a147dc3a09762ac7703befcdb3c3c
Marķieris ir izvietots, un tas izskatās tieši tāpat kā jebkurš cits omnichain marķieris, kas izmanto LayerZero, izmantojot noklusējuma konfigurāciju, un tajā nav nekā sarežģīta.

Mēs nodrošinājām 1 miljardu CarpetMoon marķieru vietnē Ethereum mūsu “testa lietotājam” Alisei.
https://ethtx.info/mainnet/0x7e2faa8426dacae92830efbf356ca2da760833eca28e652ff9261fc03042b313/

Tagad Alise izmanto LayerZero, lai šos marķierus savienotu ar optimismu.
Mēs bloķējam žetonus darījuma līgumā Ethereum:
https://ethtx.info/mainnet/0xe4dc3757b86bfda8e7baddc088fb1a599e083ed77034c29e5dd8bd11f1e17771/.
Ziņojums, kas satur darījumu, tiek nodots Optimism, izmantojot LayerZero:
https://layerzeroscan.com/101/address/0xc6005ccc1de4b300d538903b74848bff881d5dc5/message/111/address/0x201fe0d843b546f2e24d4c844431d/0x24d4c844431d

Cross-chain žetoni tiek kalti vietnē Optimism, un Alisei tagad pieder 1 miljards MoonCarpet žetonu vietnē Optimism:
https://optimistic.etherscan.io/tx/0x5388ced88cf562acafff82d6798f791b0b38b90ee106df9bf91c0d86306ec302.
Viss darbojas, kā paredzēts, Alise sakārto žetonus un redz, ka darījuma līgumā Ethereum ir 1 miljards MoonCarpet žetonu un viņas Optimism kontā ir 1 miljards MoonCarpet žetonu. Bet, lai pārliecinātos, ka viss ir kārtībā, viņa pārsūtīja pusi no saviem žetoniem atpakaļ uz Ethereum.

Mēs sākam ar darījumu par Optimism, kas sadedzināja 500 miljonus žetonu:
https://optimistic.etherscan.io/tx/0x118a57106488ad0bae1f3b920b1fd98b187752ad966f3a901fc53cff47f2097f.
Informācija par darījumu tiek nodota Ethereum:
https://layerzeroscan.com/111/address/0x201fe0d843b546f2e24d4c8444318d1c71b7d10d/message/101/address/0xc6005ccc1de4b300d538903bff81/538903b748n
Kā gaidīts, 500 miljoni MoonCarpet žetonu tiek atgriezti no darījuma līguma uz Alises adresi:
https://etherscan.io/tx/0x27702e07a65a9c6a7d1917222799ddb13bb3d05159d33bbeff2ca1ed414f6a18.
Pagaidām viss darbojas labi un tieši tā, kā paredzēts. Alise ir pārbaudījusi, vai viņa var šķērsot ķēdes žetonus no Ethereum uz Optimism un atpakaļ, viņai nav iemesla uztraukties par saviem MoonCarpet žetoniem.
Taču hipotētiskiem gadījumiem ir savas problēmas — piemēram, komanda, kas veido mūsu pilnvaru, saskaras ar problēmām, un sliktais puisis Bobs iegūst piekļuvi mūsu lietotnes LayerZero konfigurācijai.

Tādā veidā Bobs var mainīt orākulus un relejus no noklusējuma komponentiem uz viņa kontrolētajiem komponentiem.
Jāņem vērā, ka šis ir mehānisms, kas paredzēts katrai lietojumprogrammai, kas izmanto LayerZero, un sakņojas LayerZero arhitektūrā. Tas nav nekāda veida aizmugures durvis, bet gan standarta mehānisms.
Tāpēc Bobs maina orākulu uz EOA, kas atrodas viņa kontrolē:
https://ethtx.info/mainnet/0x4dc84726da6ca7d750eef3d33710b5f63bf73cbe03746f88dd8375c3f4672f2f/.
Tiek mainīts arī atkārtotājs:
https://ethtx.info/mainnet/0xc1d7ba5032af2817e95ee943018393622bf54eb87e6ff414136f5f7c48c6d19a/.
Tagad notiek kaut kas dīvains. Tā kā orākuls un stafete tagad ir pilnībā Boba kontrolē, viņš var nozagt Alises žetonus. Lai gan attiecībā uz Optimismu netika veiktas nekādas darbības (MoonCarpet žetoni joprojām bija Alises makā), Bobs spēja pārliecināt MoonCarpet viedo līgumu Ethereum (izmantojot LayerZero mehānismu), ka viņš iznīcināja otrā ķēdes žetonus un varēja izņemiet žetonus no MoonCarpet marķiera vietnē Ethereum.

Pirmkārt, viņš atjaunina Ethereum bloka hash, izmantojot viņa kontrolēto orākulu:
https://ethtx.info/0xde2edee2cc7f070120e96c9df90d86696970befcfc221e18c6ac4168bb5b1d92/.

Tagad viņš var izņemt atlikušos žetonus no darījuma līguma:
https://ethtx.info/0xda695f374b375d5372efeca37aae4c5a17f114d5a76db1e86edebb0924bcdcc7/.

Eksperimentālie rezultāti
Alise pat nezina, kāpēc un kad radās kļūda. Pēkšņi viņas MoonCarpet žetons vietnē Optimism vairs netika atbalstīts ar žetoniem vietnē Ethereum.
Viedais līgums nav jaunināms un darbojas, kā paredzēts. Vienīgā aizdomīgā darbība ir orākula un releju izmaiņas, taču tas ir parasts mehānisms, kas iebūvēts LayerZero, tāpēc Alise pat nezina, vai šīs izmaiņas ir tīšas. Pat ja Alise uzzina par pārmaiņām, ir par vēlu – uzbrucējs var iztērēt līdzekļus, pirms viņa paspēj reaģēt.
LayerZero neko nevar darīt — tās visas ir efektīvas viņu mehānismu ieviešanas, kuras viņi nevar kontrolēt. Teorētiski lietojumprogrammas pašas var neļaut mainīt orākulus un relejus, taču, cik mums zināms, neviena izvietotā lietojumprogramma to nav izdarījusi.
Mēs veicām šo eksperimentu, lai pārbaudītu, vai kāds to pamanīja, bet, kā mēs gaidījām, neviens to nedarīja. Ir gandrīz neiespējami efektīvi pārraudzīt visas lietojumprogrammas, kas izveidotas ar LayerZero, lai pārbaudītu, vai to drošības politikas ir mainījušās, un brīdinātu lietotājus, kad tas notiek.
Pat ja kāds spēs laikus atklāt, ka orākuli un releji ir mainījušies un radījuši drošības risku, būs par vēlu. Tā kā jauni orākuli un releji tagad var brīvi izvēlēties, kurus ziņojumus piegādāt vai vienkārši atspējot starpķēžu saziņu, lietotāji parasti nevar darīt daudz. Mūsu eksperimenti skaidri parāda, ka pat tad, ja Alise pamana lietojumprogrammas konfigurācijas izmaiņas, viņa neko daudz nevar darīt ar saviem šķērsķēžu marķieriem — jaunie orākulu un releji vairs netiek pieņemti sākotnējā saziņas ķēdes ziņojumā, tāpēc ziņojums netiks atgriezts Ethereum. .
noslēgumā

Kā mēs redzam, lai gan mūsu marķieris tika izveidots ar LayerZero un izmantoja tā mehāniku, kā paredzēts, mēs varējām nozagt līdzekļus no marķiera darījuma. Protams, tā ir aplikācijas (mūsu gadījumā CarpetMoon marķiera) vaina, nevis pats LayerZero, taču tas pierāda, ka LayerZero pats nesniedz nekādas drošības garantijas.
Kad LayerZero apraksta savu drošības modeli attiecībā uz orākuliem un relejiem, viņi pieņem, ka lietojumprogrammas īpašnieks (vai tas, kam ir privātā atslēga) nedarīs neko nepamatotu. Taču pretrunīgā vidē šis pieņēmums ir nepareizs. Turklāt lietotājiem ir jāuzticas lietotnes izstrādātājam kā uzticamai trešajai pusei.
Tāpēc praksē nevar izdarīt nekādus pieņēmumus par to lietojumprogrammu drošību, kuras ir izveidotas ar LayerZero - katra lietojumprogramma ir jāuzskata par riskantu, kamēr nav pierādīts pretējais.
Patiesībā viss stāsts sākās ar sabiedrisko attiecību, ka mēs plānojām iekļaut visus omnichain marķierus L2BEAT vietnē — mums bija grūti izdomāt, kā novērtēt to risku. Analizējot riskus, mums radās ideja par eksperimentu.
Ja L2BEAT sāktu darboties, mums būtu jāievieto brīdinājumi par katru lietojumprogrammu, kas izveidota ar LayerZero, lai brīdinātu par iespējamiem drošības riskiem. Taču mēs vēlējāmies plašāku diskusiju par drošības modeļiem, jo uzskatām, ka atsevišķa drošība ir modelis, no kura būtu jāizvairās, jo īpaši mūsu jomā.
Mēs uzskatām, ka neatkarīgie drošības modeļi, piemēram, LayerZero, kļūst arvien populārāki, arvien vairāk projektu tos izmantos ļaunprātīgi, radot milzīgus zaudējumus un palielinot nenoteiktību visā nozarē.
