{"id":17870,"date":"2019-08-30T11:42:35","date_gmt":"2019-08-30T09:42:35","guid":{"rendered":"https:\/\/www.kaspersky.it\/blog\/?p=17870"},"modified":"2019-11-22T10:47:52","modified_gmt":"2019-11-22T08:47:52","slug":"integer-overflow-ethereum","status":"publish","type":"post","link":"https:\/\/www.kaspersky.it\/blog\/integer-overflow-ethereum\/17870\/","title":{"rendered":"Soldi a cambio di\u2026 nulla, con gli smart contract"},"content":{"rendered":"<p>Vi interessano gli smart contract? Sapete cos\u2019\u00e8 l\u2019integer overflow? In realt\u00e0, l\u2019integer overflow \u00e8 un problema che arriva dal mondo della programmazione, ma uno smart contract in sostanza \u00e8 un programma, quindi potreste voler capire di cosa si tratta.<\/p>\n<p>In parole povere, se un integer non firmato viene memorizzato in una singola cella di memoria di byte, pu\u00f2 avere solo valori che vanno da 0 a 255. Ci\u00f2 significa che, se non sono specificate altre condizioni, 255 + 1 = 0; o ancor pi\u00f9 preoccupante: \u00a00 \u2013 1 = 255. In questo modo la maggior parte dei processori moderni elaborano questi dati.<\/p>\n<p>In molti linguaggi di programmazione moderni, il programma stesso controlla se si \u00e8 verificato un overflow durante le operazioni aritmetiche. Se \u00e8 cos\u00ec, pu\u00f2 essere che non sia quello che il programmatore aveva in mente, quindi \u00e8 meglio interrompere il programma e assicurarsi che non provocher\u00e0 bug pi\u00f9 in l\u00e0.<\/p>\n<h2>Cosa hanno a che fare gli smart contract con tutto questo?<\/h2>\n<p>Questo tipo di controllo non \u00e8 previsto sugli smart contract per Ethereum, quando viene processato del denaro. In altre parole, se avete zero token e ne mandate uno ad un amico, riceverete un trilione di token. Ovviamente, il programma dovrebbe essere interrotto immediatamente e annullata la transazione erronea.<\/p>\n<p>Perch\u00e9 gli sviluppatori Ethereum abbiano implementato la loro aritmetica in questo modo \u00e8 un mistero. Ma per applicare le leggi universali della matematica umana agli smart contract, ogni loro programmatore deve aggiungere pi\u00f9 di 100 linee di codice contenenti le normali funzioni per l\u2019addizione, la moltiplicazione e cos\u00ec via.<\/p>\n<p>Altrimenti, con un trilione accreditato sul conto, non ci sono limiti. Un truffatore potrebbe accedere a una piattaforma di scambio di criptomonete e comprare tutti i bitcoin o l\u2019ether che vuole, a qualsiasi prezzo.<\/p>\n<p>Questo scenario non \u00e8 solo teorico, \u00e8 successo davvero svariate volte e con differenti tipi di valute. Generalmente, scopriamo il problema nel codice quando il <a href=\"https:\/\/etherscan.io\/tx\/0xfd2d1ab0bb7ca5df5228aa3ac714ba160f57e6bc153e10b490e92bf50dc9f566\" target=\"_blank\" rel=\"noopener nofollow\">cybercriminale ha gi\u00e0 messo in pratica questo trucco<\/a> ed \u00e8 sparito con le tasche piene. Dopodich\u00e9 non si pu\u00f2 pi\u00f9 fare niente, gli smart contract sono scolpiti nella pietra e non possono essere modificati o sistemati.<\/p>\n<h2>Overflow e Bitcoin<\/h2>\n<p>A dire il vero, il problema dell\u2019overflow non si limita solo a Ethereum. Bitcoin ha gi\u00e0 affrontato il problema molto prima.<\/p>\n<p>L\u2019integer overflow ha fatto s\u00ec che i wallet di bitcoin arrivassero a 184 miliardi di bitcoin il 15 agosto del 2010. \u00c8 superfluo dire che i fondatori (tra i quali Satoshi Nakamoto) non l\u2019hanno presa affatto bene: hanno modificato rapidamente il codice, corretto il bug e ripristinato la cronologia finanziaria come se non fosse successo niente.<\/p>\n<p>Per\u00f2 questo cosa significa? Facciamo un esempio: se quel giorno io avessi comprato bitcoin per il valore di 10 mila dollari, questo ripristino avrebbe fatto ritornare i bitcoin al venditore a differenza dei miei dollari, che non avrei riavuto indietro. Se invece il ripristino avvenisse ora e non nel 2010, le conseguenze sarebbero gravissime, dato che ogni giorno si muovono all\u2019incirca 5 miliardi di dollari in operazioni con bitcoin.<\/p>\n<p>Il precedente, come anche gli altri casi, dimostra che non possiamo cambiare la blockchain solo se tutto funziona come previsto. Altrimenti, si possono cambiare sia l\u2019idea, sia la blockchain.<\/p>\n<h2>Ritorniamo agli smart contract<\/h2>\n<p>La decisione degli sviluppatori di Ethereum risulta molto strana: \u00e8 come se stessero tendendo una trappola ai programmatori di smart contract. Dovrete essere molto esperti o molto attenti (o entrambe le cose) per evitare che voi o i vostri inversori non perdiate i vostri soldi dal giorno alla notte. Questo \u00e8 un altro dei motivi per il quale il codice degli smart contract esige un controllo accurato. Come parte del Kaspersky Token Offering Security, i nostri esperti analizzano il codice degli smart contract per individuare vulnerabilit\u00e0 e caratteristiche non documentate. Per saperne di pi\u00f9, visitate la nostra pagina <a href=\"https:\/\/www.kaspersky.it\/enterprise-security\/ico-sto-security\" target=\"_blank\" rel=\"noopener\">Token Offering Security<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Integer overflow: cos\u2019\u00e8 e perch\u00e9 dovreste conoscerlo? <\/p>\n","protected":false},"author":669,"featured_media":17871,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2364,2955],"tags":[1418,2608,2609],"class_list":{"0":"post-17870","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"tag-blockchain","10":"tag-ethereum","11":"tag-smart-contract"},"hreflang":[{"hreflang":"it","url":"https:\/\/www.kaspersky.it\/blog\/integer-overflow-ethereum\/17870\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/integer-overflow-ethereum\/16601\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/integer-overflow-ethereum\/13993\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/integer-overflow-ethereum\/18541\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/integer-overflow-ethereum\/16633\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/integer-overflow-ethereum\/15286\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/integer-overflow-ethereum\/19176\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/integer-overflow-ethereum\/28140\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/integer-overflow-ethereum\/28188\/"},{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/integer-overflow-ethereum\/12204\/"},{"hreflang":"pl","url":"https:\/\/plblog.kaspersky.com\/integer-overflow-ethereum\/11109\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/integer-overflow-ethereum\/20008\/"},{"hreflang":"nl","url":"https:\/\/www.kaspersky.nl\/blog\/integer-overflow-ethereum\/24216\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/integer-overflow-ethereum\/22060\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/integer-overflow-ethereum\/23322\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/integer-overflow-ethereum\/23233\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.it\/blog\/tag\/smart-contract\/","name":"smart contract"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts\/17870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/users\/669"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/comments?post=17870"}],"version-history":[{"count":3,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts\/17870\/revisions"}],"predecessor-version":[{"id":18397,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts\/17870\/revisions\/18397"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/media\/17871"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/media?parent=17870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/categories?post=17870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/tags?post=17870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}