{"id":21847,"date":"2020-01-14T15:56:38","date_gmt":"2020-01-14T13:56:38","guid":{"rendered":"https:\/\/www.kaspersky.de\/blog\/?p=21847"},"modified":"2020-01-15T12:16:29","modified_gmt":"2020-01-15T10:16:29","slug":"gemini-front-running","status":"publish","type":"post","link":"https:\/\/www.kaspersky.de\/blog\/gemini-front-running\/21847\/","title":{"rendered":"Gemini Dollar: Smart Contracts erm\u00f6glichen den Diebstahl von Antispam-Zahlungen"},"content":{"rendered":"<p>Die <a href=\"https:\/\/en.wikipedia.org\/wiki\/Winklevoss_twins\" target=\"_blank\" rel=\"noopener nofollow\">Winklevoss-Zwillinge<\/a> sind vor allem als angebliche Gr\u00fcndungsv\u00e4ter von Facebook bekannt und erhielten 2008 sogar eine Entsch\u00e4digung in <a href=\"https:\/\/www.law.com\/almID\/1202428141988\/\" target=\"_blank\" rel=\"noopener nofollow\">H\u00f6he von 65 Millionen US-Dollar<\/a> von Mark Zuckerberg. Im Jahr 2013 investierten sie dann stark in Bitcoin und kauften etwa 1% aller vorhandenen M\u00fcnzen f\u00fcr 120 USD pro St\u00fcck.<\/p>\n<p>Bald darauf er\u00f6ffneten die Br\u00fcder die Kryptow\u00e4hrungsb\u00f6rse <a href=\"https:\/\/en.wikipedia.org\/wiki\/Gemini_(company)\" target=\"_blank\" rel=\"noopener nofollow\">Gemini<\/a> und brachten 2018 die stabile Kryptow\u00e4hrung <a href=\"https:\/\/gemini.com\/dollar\/\" target=\"_blank\" rel=\"noopener nofollow\">Gemini Dollar<\/a> (GUSD) auf den <a href=\"https:\/\/medium.com\/gemini\/gemini-launches-the-gemini-dollar-62787f963fb4\" target=\"_blank\" rel=\"noopener nofollow\">Markt<\/a>. Eine stabile Kryptow\u00e4hrung (auch bekannt als <em>Stablecoin<\/em>) ist eine Kryptow\u00e4hrung, die sich durch einen Fixsatz auszeichnet (so kostet 1 GUSD-Token immer 1 US-Dollar). Stablecoins sind praktisch, um echtes Geld zu \u201edigitalisieren.\u201c Sie vereinfachen und beschleunigen den Geldfluss von Blockchains zwischen B\u00f6rsen. Die B\u00fcrgschaft f\u00fcr die Umrechnung in Dollar tr\u00e4gt das Unternehmen, das die W\u00e4hrung in Umlauf gebracht und an Sie weiterverkauft hat.<\/p>\n<p>Im Rahmen des <a href=\"https:\/\/www.kaspersky.de\/enterprise-security\/ico-sto-security\" target=\"_blank\" rel=\"noopener\">Smart Contract-Quellcode\u00fcberpr\u00fcfungsdienstes von Kaspersky<\/a> haben wir einen <a href=\"https:\/\/etherscan.io\/token\/0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd\" target=\"_blank\" rel=\"noopener nofollow\">Smart Contract<\/a> analysiert, der GUSD-Funktionen anbietet und dabei eine Sicherheitsl\u00fccke festgestellt.<\/p>\n<h2>Haftungsausschluss<\/h2>\n<p>Beachten Sie, dass der vorliegende Smart-Vertrag bereits <a href=\"https:\/\/gemini.com\/wp-content\/themes\/gemini\/assets\/img\/dollar\/gemini-dollar-trailofbits-audit.pdf\" target=\"_blank\" rel=\"noopener nofollow\">\u00fcberpr\u00fcft<\/a> wurde, obwohl wir nicht wissen, ob im Bericht irgendwelche Codefehler beschrieben wurden.<\/p>\n<p>Im Einklang mit unserer verantwortungsvollen Offenlegungspolitik haben wir das Sicherheitsteam von Gemini kontaktiert, um das Problem zu melden. Sie teilten uns mit, dass das Problem w\u00e4hrend der Entwurfsphase in Betracht gezogen wurde, jedoch kein Risiko f\u00fcr den GUSD darstellte.<\/p>\n<p>Eine einfache Erkl\u00e4rung zur Funktionsweise von Smart Contracts finden Sie in unserem <a href=\"https:\/\/www.kaspersky.de\/blog\/ethereum-ico\/14993\/\" target=\"_blank\" rel=\"noopener\">Beitrag zu Smart Contracts, Ethereum und ICOs.<\/a><\/p>\n<h2>Smart Contracts und Gemini Dollar<\/h2>\n<p>Wenn jemand neue Token basierend auf der Ethereum-Blockchain erstellen m\u00f6chte, schreibt er im Normalfall einen Smart Contract (ein Miniprogramm), der Folgendes festlegt:<\/p>\n<ol>\n<li>Daten (\u201eso viele Token befinden sich an dieser und jener Adresse\u201c),<\/li>\n<li>Methoden (\u201eBitte transferieren Sie meine Token an diese oder jene Adresse, etc.).\u201c<\/li>\n<\/ol>\n<p>Die Sch\u00f6pfer des Gemini-Dollarsystems haben au\u00dferdem die folgenden Verbesserungen <a href=\"https:\/\/gemini.com\/wp-content\/themes\/gemini\/assets\/img\/dollar\/gemini-dollar-whitepaper.pdf\" target=\"_blank\" rel=\"noopener nofollow\">implementiert<\/a> :<\/p>\n<ol>\n<li>Sie haben den Vertrag in drei Komponenten unterteilt: \u201eProxy\u201c (die permanente Schnittstelle, mit der Token-Inhaber interagieren und Vorg\u00e4nge ausf\u00fchren k\u00f6nnen), \u201eStore\u201c (die Zuordnung von Token-Inhabern zu ihren Guthaben) und \u201eImpl\u201c (die zugrunde liegende Logik);<\/li>\n<li>Die Logik-beschreibende Komponente kann aktualisiert und durch neue Funktionen wie das Einfrieren von Geldern erg\u00e4nzt werden. In der Zwischenzeit blieben Daten und Schnittstelle unver\u00e4ndert. Das Update ist f\u00fcr alle transparent.<\/li>\n<li>F\u00fcr die Aktualisierung und Kontrolle wird ein separater, intelligenter \u201eDepot\u201c -Vertrag verwendet, der von mehreren Personen (den Verm\u00f6gensverwaltern) als zus\u00e4tzlicher Schutz verwaltet wird. Wenn ein Verwalter eine Aktion vorschl\u00e4gt, m\u00fcssen die anderen Verwalter diese best\u00e4tigen, bevor die Aktion stattfinden kann.<\/li>\n<\/ol>\n<p>Die Verbesserungen sind solide und erh\u00f6hen die allgemeine Sicherheit und Flexibilit\u00e4t.<\/p>\n<h2>Antispam-Zahlungen<\/h2>\n<p>Wenn eine andere Person als der Prim\u00e4rverwalter ein Angebot in einem Verwaltungsvertrag einreicht, muss ein Anteil von 1 ETH bezahlt werden (ca. 200 USD zum aktuellen Wechselkurs). Wie in den <a href=\"https:\/\/github.com\/gemini\/dollar\/blob\/master\/Custodian.sol#L151\" target=\"_blank\" rel=\"noopener nofollow\">Kommentaren<\/a> zum Vertrag selbst vermerkt, soll diese Spam-Schutzma\u00dfnahme die Teilnehmer davon abhalten, zu viele Anfragen zu erstellen.<\/p>\n<p>Die Antispam-Zahlungen <a href=\"https:\/\/github.com\/gemini\/dollar\/blob\/master\/Custodian.sol#L264\" target=\"_blank\" rel=\"noopener nofollow\">gehen<\/a> letztendlich an eine Person: und zwar an diejenige Person, die die Genehmigung eines bestimmten Angebots \/ einer bestimmten Anfrage ank\u00fcndigt. Diese Implementierung mag nicht besonders fair aussehen, aber die Kommentare zeigen deutlich, dass ihre Sch\u00f6pfer sie so verstanden haben.<\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } else {<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (address(this).balance &gt; 0) {<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ reward sender with anti-spam payments<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ ignore send success (assign to \u02b9success\u02b9 but this will be overwritten)<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 success = msg.sender.send(address(this).balance);<\/strong><\/p>\n<p>\u00a0<\/p>\n<p>Wir empfehlen die Verwendung des <a href=\"https:\/\/solidity.readthedocs.io\/en\/v0.5.10\/common-patterns.html\" target=\"_blank\" rel=\"noopener nofollow\">Solidity Withdrawal<\/a> Pattern-Ansatzes.<\/p>\n<h2>Angreifer k\u00f6nnen alle Antispam-Zahlungen stehlen<\/h2>\n<p>Die Person, die \u00fcber die Genehmigung der Anfrage entscheidet, erh\u00e4lt somit auch alle Antispam-Zahlungen der ETH. Dazu ruft sie die Smart Contract-Funktion <strong>completeUnlock<\/strong> auf und \u00fcbergibt die Signaturen von zwei Verwaltern in die Parameter.<\/p>\n<p>Das Problem ist, dass Ethereum wie bei jeder anderen Blockchain Befehle zeitversetzt ausf\u00fchrt. Eine clientbasierte Transaktion (Geld \u00fcberweisen oder eine Funktion aufrufen) steht f\u00fcr eine Weile (normalerweise 15 Sekunden oder l\u00e4nger) in der Warteschlange. W\u00e4hrend dieser Zeit kann jeder die geplanten \u00dcberweisungen anderer Ethereum-Benutzer einsehen, einschlie\u00dflich Betr\u00e4gen, Empf\u00e4ngern und Parametern. Und der Schn\u00fcffler kann diese Informationen verwenden, um eine eigene Transaktion zu erstellen und diese nach vorne zu schieben, indem er dem Miner eine h\u00f6here Provision zahlt.<\/p>\n<p>Jeder Vorteil, der durch diese Art des Schn\u00fcffelns erzielt wird, wird als <a href=\"https:\/\/consensys.github.io\/smart-contract-best-practices\/known_attacks\/#front-running-aka-transaction-ordering-dependence\" target=\"_blank\" rel=\"noopener nofollow\"><em>Frontrunning<\/em><\/a> bezeichnet.<\/p>\n<p>Aus <a href=\"https:\/\/www.investopedia.com\/terms\/f\/frontrunning.asp\" target=\"_blank\" rel=\"noopener nofollow\">investopedia.com<\/a>:<\/p>\n<p>Es handelt sich um Frontrunning, wenn ein Broker oder eine andere Entit\u00e4t ein Gesch\u00e4ft eingeht, weil man vertrauliches Wissen \u00fcber eine gro\u00dfe, noch nicht \u00f6ffentlich gemachte Finanztransaktion besitzt, die den Wert von Anlagen stark beeinflussen kann. Dies tritt auch auf F\u00e4lle zu, wenn ein Broker oder Analyst Aktien f\u00fcr sein Privatkonto kauft oder verkauft, bevor ihr Unternehmen Kunden Kauf- oder Verkaufsempfehlungen gibt.<\/p>\n<p>In unserem Fall kann ein Au\u00dfenstehender einen Roboter zur \u00dcberwachung <a href=\"https:\/\/etherscan.io\/address\/0x9a7b5f6e453d0cda978163cb4a9a88367250a52d\" target=\"_blank\" rel=\"noopener nofollow\">des<\/a> <a href=\"https:\/\/etherscan.io\/address\/0x9a7b5f6e453d0cda978163cb4a9a88367250a52d\" target=\"_blank\" rel=\"noopener nofollow\">Contracts einsetzen.<\/a> Wenn festgestellt wird, dass jemand die Funktion <strong>completeUnlock<\/strong> aufgerufen hat (d. h. ein Depotverwalter interagiert mit Gemini-Dollar), kopiert er sofort alle Parameter und ruft die Funktion auf, um die dort angesammelten Ether zu extrahieren.<\/p>\n<p>Um einem solchen Angriff entgegenzuwirken, empfehlen wir erneut die Verwendung des beliebten <a href=\"https:\/\/solidity.readthedocs.io\/en\/v0.5.10\/common-patterns.html\" target=\"_blank\" rel=\"noopener nofollow\">Solidity Withdrawal Pattern-Ansatzes.<\/a><\/p>\n<p>Dar\u00fcber hinaus empfehlen wir, <a href=\"https:\/\/github.com\/gemini\/dollar\/blob\/master\/Custodian.sol#L233\" target=\"_blank\" rel=\"noopener nofollow\">Unbekannte<\/a> daran zu hindern, eine f\u00fcr Verwalter bestimmte Funktion aufzurufen.<\/p>\n<h2>Praktische Umsetzung eines Angriffs<\/h2>\n<p>Obwohl es theoretisch gef\u00e4hrlich klingt, ist die erkannte \u00a0Sicherheitsanf\u00e4lligkeit in der Praxis relativ harmlos. Und das aus folgenden Gr\u00fcnden:<\/p>\n<ol>\n<li>Antispam-Zahlungen sind f\u00fcr Depots eines so gro\u00dfen Unternehmens wie dem Gemini-Dollar von geringer Bedeutung. Die GUSD-Kapitalisierung (das Gesamtvolumen der ausgegebenen Token) \u00fcberschritt zu einem Zeitpunkt 100 Millionen USD. Selbst jetzt sind es mehr als 5 Millionen US-Dollar.<\/li>\n<li>Antispam-Zahlungen sind in <a href=\"https:\/\/etherscan.io\/address\/0x9a7b5f6e453d0cda978163cb4a9a88367250a52d\" target=\"_blank\" rel=\"noopener nofollow\">diesem Vertrag<\/a> noch nicht enthalten und es kann sein, dass sie auch niemals implementiert werden, da der Hauptverwalter in keiner Weise zur Hinterlegung verpflichtet ist (alle anderen sind dazu verpflichtet).<\/li>\n<li>Benutzer, die die Sicherheitsanf\u00e4lligkeit kennen, k\u00f6nnen die anf\u00e4llige Funktion einfach umgehen oder den Vertrag aktualisieren.<\/li>\n<li>W\u00e4hrend der \u00dcberpr\u00fcfung wurden keine Schwachstellen gefunden, die GUSD-Token bedrohen.<\/li>\n<\/ol>\n<p>Gemini best\u00e4tigt: \u201eWir haben uns f\u00fcr dieses Design entschieden, weil Gemini unter normalen Bedingungen keinen Ether einsetzen m\u00f6chte. Daher sind wir das Risiko eingegangen, die Komplexit\u00e4t unserer Codebasis nicht wesentlich zu erweitern, nur um den immateriellen Nutzen eines robusten Wiederherstellungsmechanismus f\u00fcr einen theoretischen und nominalen Spam-Schutz. Die Priorisierung von einem sicheren, einfachen Code bleibt die beste L\u00f6sung f\u00fcr den Gemini-Dollar und seine Benutzer. In Zukunft werden wir diese Entscheidung m\u00f6glicherweise erneut treffen, wenn sich das Risiko \u00e4ndert und ein teurerer und komplexerer Vertrag n\u00f6tig wird.\u201c<\/p>\n<p>Wir haben beschlossen, diesen Beitrag in Absprache mit Gemini zu ver\u00f6ffentlichen, da Spam-Schutz nur durch eine Kombination aus bestimmten und unwahrscheinlichen Umst\u00e4nden gef\u00e4hrdet ist und GUSD nicht gef\u00e4hrdet ist.<\/p>\n<p>Wir erinnern erneut an die Notwendigkeit eines ganzheitlichen Sicherheitsansatzes f\u00fcr ICOs und andere Aktivit\u00e4ten im Zusammenhang mit <a href=\"https:\/\/www.kaspersky.com\/enterprise-security\/ico-sto-security\" target=\"_blank\" rel=\"noopener nofollow\">Kryptow\u00e4hrungen und Blockchains<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Frontrunning-Analyse unter der Betrachtung der Antispam-Zahlungen des Gemini-Dollars.<\/p>\n","protected":false},"author":669,"featured_media":21849,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1848,3107,3108],"tags":[3467,2744,2632,3468,2870],"class_list":{"0":"post-21847","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"category-smb","10":"tag-ether","11":"tag-ethereum","12":"tag-kryptowahrung","13":"tag-stablecoin","14":"tag-tokens"},"hreflang":[{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/gemini-front-running\/21847\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/gemini-front-running\/18359\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/gemini-front-running\/15236\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/gemini-front-running\/20065\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/gemini-front-running\/18423\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/gemini-front-running\/16832\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/gemini-front-running\/20830\/"},{"hreflang":"it","url":"https:\/\/www.kaspersky.it\/blog\/gemini-front-running\/19597\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/gemini-front-running\/26060\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/gemini-front-running\/31924\/"},{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/gemini-front-running\/13850\/"},{"hreflang":"nl","url":"https:\/\/www.kaspersky.nl\/blog\/gemini-front-running\/24769\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/gemini-front-running\/25647\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/gemini-front-running\/25478\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.de\/blog\/tag\/kryptowahrung\/","name":"Kryptow\u00e4hrung"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/posts\/21847","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/users\/669"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/comments?post=21847"}],"version-history":[{"count":5,"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/posts\/21847\/revisions"}],"predecessor-version":[{"id":21922,"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/posts\/21847\/revisions\/21922"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/media\/21849"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/media?parent=21847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/categories?post=21847"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.de\/blog\/wp-json\/wp\/v2\/tags?post=21847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}