2. novembrī Axion Network palaida savu jauno marķieri, kas pazīstams kā AXN. Projektā aktīvs tika reklamēts kā jauns ieguldījumu instruments, apgalvojot, ka tas līdz šim būs visizdevīgākais šāda veida blokķēde. Pagaidu ievadīšanas laikā uz AXN lidmašīnu piecas atsevišķas komandas, iespējams, pārbaudīja marķiera kodu; nozares mīļie, piemēram, CertiK un Hacken, bija vieni no tiem, kas veica revīzijas.
Dažas īsas stundas pēc protokola atsaukšanas notikuma kļuva skaidrs, ka kaut kas ir nogājis greizi. Neatļauts aktieris negaidīti izkala 79 miljardus AXN un izkrāva tos tirgū. Cena sabruka, pārsniedzot 99%, uzbrucējiem dodot atdzist 1300 ETH – publicēšanas brīdī aptuveni 500 000 USD vērtībā.
Turpmākajās stundās projekta Axion komanda mudināja dalībniekus turēties prom no tirdzniecības vai mijiedarbības ar aktīvu, izmantojot platformas oficiālo Telegram kanālu:
“Nepērciet AXN tieši tagad, nekontaktējieties ar informācijas paneli,”
Axion tīkla Twitter kontā turpināja publicēt atjauninājumus, tostarp:
Mēs joprojām esam šeit.
Tiks ieskaitīti visi AXN / HEX2T cilvēki, kuri bija ekspluatācijas brīdī.
Mēs izveidosim likviditātes atlīdzības portālu, lai palielinātu arī likviditāti.
Mēs cītīgi strādājam, lai pēc iespējas ātrāk atsāktu AXN darbību.
– Axion (@axion_network) 2020. gada 2. novembris
Neskatoties uz šīm pārliecībām, CertiK soli uz priekšu, lai sabiedrībai piedāvātu skaidrāku skaidrojumu par to, ko viņi uzskata par nepareizu, un ieskatu, kā līdzīgus uzbrukumus varētu novērst nākotnē. Cointelegraph pa e-pastu sazinājās ar Džeku Durdenu, kurš mums tika raksturots kā Axion Network izpilddirektors, taču nekavējoties nesaņēma atbildi. Neviens komandas loceklis nav norādīts projekta baltajā grāmatā vai vietnē, un vārds “Džeks Durdens” tiek dalīts ar neredzēto stāstītāju no filmas Fight Club.
Ņemiet vērā, ka šī raksta atlikums tiek reproducēts vārds pa vārdam, pateicoties CertiK kā valsts dienestam, lai izglītotu lasītājus par revīzijas grupas izpratni par notikušo. Cointelegraph nav veicis kodeksa revīziju, tāpēc turpmāk izklāstītie viedokļi ir tikai CertiK viedokļi.
CertiK darbinieku ziņojums par Axion cenu avāriju
2020. gada 2. novembrī plkst aptuveni plkst. 11:00 + UTC hakerim izdevās izkalt aptuveni 80 miljardus AXN žetonu, izmantojot Axion Staking līguma neatņemto funkciju.
Hakeris turpināja marķierus izmest AXN Uniswap apmaiņā pret Ether, atkārtojot šo procesu, līdz Uniswap birža tika iztukšota un marķiera cena tika novirzīta uz 0.
Pēc notikušā uzbrukuma mūs informēja dažu minūšu laikā, un mūsu drošības analītiķi nekavējoties sāka novērtēt situāciju.
Mēs esam secinājuši, ka uzbrukums, visticamāk, tika plānots no iekšpuses, iekļaujot ļaunprātīga koda injekciju koda izvietošanas laikā, mainot kodu no OpenZeppelin atkarībām.
Izmantotā funkcija nebija daļa no mūsu veiktās revīzijas, jo tā tika pievienota pēc Axion koda savienošanas ar OpenZeppelin kodu, izmantojot “saplacināšanu” un ievadīšanu OpenZeppelin kodā pirms izvietošanas.
Plānošana
Hakeris izmantoja anonīmus līdzekļus, kas iegūti no tornado.kash dienu pirms uzlaušanas, mājiens uz iepriekš meditētu uzbrukumu. Iespējams, lai ietaupītu dažus līdzekļus, ja uzbrukums neizdodas, 2,1 ēteris tika atkārtoti izplatīts tornado.cash tūlīt pēc tam, kad konts saņēma līdzekļus.
Lai pabeigtu uzbrukuma iestatīšanu, hakeris iegādājās apkārtni ~ 700k HEX2T žetonu no apmaiņas Uniswap. Tomēr šie līdzekļi galu galā nebija uzbrukuma daļa un kalpoja kā dūmu aizsegs attiecībā uz uzbrukuma gaitu.
Uzstādīt
Hakeris sāka savu uzbrukumu, izveidojot “tukšu” akciju Axion Network Staking līgumam, izsaucot likmes funkciju ar 0 summu un 1 dienas likmes ilgumu plkst. aptuveni plkst. 9:00 + UTC. Tas uzbrucējam izveidoja sesijas ierakstu ar 0 summu un 0 daļu vērtību sesijas ID 6.
Pēc tam uzbrucējs iepriekš apstiprināja neierobežotu daudzumu AXN Uniswap biržā, gaidot, ka uzbrukums būs veiksmīgs. Līdz ar to viņi apstiprināja Axion NativeSwap līgumu par naudas summu, ko viņi plānoja konvertēt uz AXN žetoniem.
Viņi izmantoja NativeSwap līguma depozīta funkciju vietnē aptuveni plkst. 10:00 + UTC, tomēr hakeris nekad nav izsaucis līguma atsaukšanas funkciju, lai pieprasītu savu nomainīto AXN, kā tas ir redzams NativeSwap līguma swapTokenBalanceOf funkcijā. Pēc tam viņi pirms uzbrukuma veikšanas veica vēl vienu neizdevušos depozīta funkcijas izsaukumu.
Izpilde
Šie darījumi bija tikai dūmu aizsegs, lai uzzinātu, kā faktiski tika veikts uzbrukums. Tā kā uzbrucēja veiktie darījumi neizmainīja sesijasDataOf kartēšanu, mēs secinājām, ka tas bija vairāku adrešu uzbrukums.
Mēs izpētījām līguma avota kodu GitHub krātuvē, kas tika kopīgots ar mums, lai identificētu kļūdu, kas varētu ietekmēt sesijasDataOf kartēšanu..
Mēs nevarējām atklāt nevienu norīkojumu tai vai dalībniekiem ārpus likmes funkcijām, kas mums lika apšaubīt, vai līgumu izvietošana tika veikta pareizi.
Uzbrukuma vektors
Pēc izvietotā Staking līguma avota koda analīzes mēs precīzi norādījām koda ievadīšanu AccessControl OpenZeppelin bibliotēkā starp L665-L671 izvietotais pirmkods no Staking līguma. Saistītā checkRole funkcija nav daļa no OpenZeppelin v3.0.1 ieviešana, kas projekta GitHub krātuvē tika uzskaitīta kā atkarība.
Funkcijā checkRole pastāv šāds montāžas bloks:
Šī konkrētā funkcija ļauj konkrētai adresei patvaļīgi ierakstīt līgumu, pamatojoties uz ievades mainīgajiem lielumiem, kurus tā papildina, izmantojot zema līmeņa zvanus. Anotēts, montāžas bloks izskatīsies šādi:
Šī funkcija tika injicēts izvietošanas laikā tā kā tā nepastāv OpenZeppelin AccessControl ieviešanā, tas nozīmē, ka Axion tīkla dalībnieki, kas bija iesaistīti marķiera izvietošanā, rīkojās ļaunprātīgi.
Secinājums
Uzbrukumā tika izmantots kods, kas tika apzināti ievadīts pirms protokola izvietošanas. Šis incidents nav saistīta ar CertiK veiktajām revīzijām un par uzbrukumu atbildīgā persona bija persona, kura, šķiet, bija iesaistīta Axion tīkla līgumu izvietošanā.
Kā papildu drošības pakāpi revīzijas ziņojumos vajadzētu standartizēt, iekļaujot izvietotās viedo līgumu adreses, kuru pirmkods ir pārbaudīts kā revidētais..
The Drošības Oracle kalpo kā ķēdes drošības izlūkošanas dienests, veicot drošības pārbaudes, kas ietver izvērsto viedo līgumu pārbaudi, lai tie atbilstu pārbaudītajām versijām.