L'hacker che ha rubato 165 ETH (32.000 dollari) da SpankChain ha accettato di restituire i loro guadagni illeciti. Il Ethereum - piattaforma di intrattenimento per adulti ha confermato questo in una serie di tweet oggi.
https://twitter.com/SpankChain/status/1050533900001243136
Qui, in pieno, è il suo post medio sulla violazione della sicurezza: «Alle 18:00 PST Sabato, un aggressore sconosciuto prosciugato 165.38 ETH (~ $38.000) dal nostro contratto intelligente canale di pagamento che ha anche portato a $4.000 valore di BOOTY sul contratto diventando immobilizzato. Del rubato/immobilizzato ETH/BOOTY, 34.99 ETH (~ $8.000) e 1271.88 BOOY appartiene agli utenti (~ $9.300 in totale), e il resto apparteneva a SpankChain.
Purtroppo, mentre eravamo nel mezzo di investigare altri bug smart contract, non ci siamo resi conto che l'hack era avvenuto fino alle 7:00 pm PST domenica, a quel punto abbiamo preso Spank.Live offline per evitare che eventuali fondi aggiuntivi vengano depositati nello smart contract canali di pagamento.
La nostra priorità immediata è stata quella di fornire rimborsi completi a tutti gli utenti che hanno perso fondi. Stiamo preparando un volo ETH per coprire tutti i $9.300 di ETH e BOOTY che appartenevano agli utenti. I fondi verranno inviati direttamente agli account SpankPay degli utenti e saranno disponibili non appena riavvieremo Spank.Live.
Il nostro piano è quello di tenere giù il camsite nei prossimi 2-3 giorni (ma forse di più) mentre noi:
- Ridistribuire lo smart contract del canale di pagamento con una patch per prevenire eventuali hacker futuri
- Aggiorna Spank.Live per utilizzare il nuovo contratto di canale di pagamento
- Airdrop ETH equivalente al 100% dell'ETH+BOOTY perso da ogni utente sui propri account SpankPay
- Correggi i bug che stavamo originariamente lavorando intorno all'aggiornamento BOOINS
Quando riavvieremo Spank.Live, tutti gli spettatori e gli esecutori avranno il 100% del valore totale in BOOTY+ETH che avevano nel loro SpankPay airdropped ai loro attuali indirizzi SpankPay, quindi gli utenti non hanno bisogno di fare nulla.
Il sito continuerà a funzionare esattamente come era prima con una sola eccezione - a causa del 4.000 BOOY attualmente immobilizzato, ridurremo temporaneamente il limite BOOTY per ogni spettatore a 10 BOOTY. Ciò significa che gli spettatori saranno in grado di dare solo 10 BOOTY alla volta, e dopo aver speso tutti e 10 BOOY, ricaricheranno automaticamente il loro 10 BOOY con qualsiasi ETH extra che hanno depositato, fino a esaurire completamente il loro saldo ETH.
Nei prossimi giorni la nostra squadra sta preparando un'indagine approfondita sull'attacco.
Ecco cosa sappiamo finora:
In breve, l'attacco capitalizzò un bug di «rientranza», proprio come quello sfruttato nel DAO. L'utente malintenzionato ha creato un contratto malevolo mascherato da token ERC20, in cui la funzione «transfer» ha richiamato più volte nel contratto del canale di pagamento, prosciugando alcuni ETH ogni volta.
Il contratto malevolo chiamò CreateChannel per configurare il canale, quindi chiamò LCopentimeout ripetutamente tramite reentrancy. Il LCopentimeout consente agli utenti di uscire rapidamente dai canali di pagamento che non sono ancora stati raggiunti dalla controparte.
Il LCopentimeout trasferisce all'utente il saldo di deposito ETH iniziale e il saldo di deposito token, entrambi inizialmente impostati nella funzione CreateChannel. Criticamente, la funzione LCopentimeout elimina solo i dati del canale sulla catena (che azzera i saldi di canale) dopo la funzione di trasferimento token. Ciò consente alla funzione di trasferimento del contratto malintenzionato di chiamare LcoPentimeout in un ciclo, ogni volta che invia all'utente malintenzionato ETH equivalente al proprio bilanciamento del canale.
Contratto di canale di pagamento: https://etherscan.io/address/0xf91546835f756da0c10cfa0cda95b15577b84aa7#code
Indirizzo dell'aggressore: https://etherscan.io/address/0xcf267ea3f1ebae3c29fea0a3253f94f3122c2199
Txs interni (rientranze) dall'account dell'utente malintenzionato: https://etherscan.io/address/0xcf267ea3f1ebae3c29fea0a3253f94f3122c2199#internaltx
Contratto dannoso dell'aggressore: https://etherscan.io/address/0xc5918a927c4fb83fe99e30d6f66707f4b396900e
Txs interni (reentranze) dal contratto malintenzionato dell'utente malintenzionato: https://etherscan.io/address/0xc5918a927c4fb83fe99e30d6f66707f4b396900e#internaltx
E' stata una nostra decisione di rinunciare a un controllo di sicurezza per il contratto del canale di pagamento. Abbiamo fatto condurre a Zeppelin un audit che è costato $17.000 per la libreria dei canali di pagamento unidirezionali precedenti. Lo consideravamo piuttosto costoso, dato che il maggior numero di fondi mai detenuti da quel contratto ha mai raggiunto solo 17.000 dollari in totale.
Per questo molto più sofisticato contratto di canale di pagamento non custodiale siamo stati quotati $30.000 - $50.000 per gli audit di sicurezza, ma tenendo conto sia del valore di percezione che del costo opportunità del tempo speso a reagire all'hack, ne sarebbe valsa la pena. Ciò è dovuto al nostro processo di sviluppo agile, al fatto che il sito è in fase beta e alla rapidità con cui abbiamo ripetuto e ridistribuito i contratti (di cui stiamo spingendo ogni 2-3 settimane). Questo ha identificato un problema nel nostro processo di sviluppo e distribuzione e apporteremo le modifiche appropriate per garantire che non si ripeta, pur continuando a innovare al ritmo con cui tutti hanno familiarità.
Man mano che andiamo avanti e cresceremo, intensificheremo le nostre pratiche di sicurezza e ci assicureremo di ottenere più audit interni per qualsiasi codice smart contract che pubblichiamo, così come almeno un audit esterno professionale.»
Disclaimer: The views and opinions expressed by the author should not be considered as financial advice. We do not give advice on financial products.