Der Hack, der am 12. Mai 2016 stattfand, um 7.218 Ether von Patrick zu stehlen, betrifft nur Miner, bei denen:
geth
;geth
läuft mit --rpc
aktivierten Parametern; undgeth
Computer verwendet und zum Senden einer Transaktion verwendet, bei der das geth
Konto für einen Zeitraum von 2 Sekunden entsperrt werden muss.Der Hacker hat einen kontinuierlichen Stream (alle 2 Sekunden) von sendTransaction(...)
Anfragen an Patricks IP-Adresse auf Port 8545 gesendet, und diese Anfrage wurde an die geth
Instanz weitergeleitet. Als Patrick das Ethereum-Wallet zum Senden einer Transaktion benutzte, entsperrte das Ethereum-Wallet Patricks Konto für 2 Sekunden und die Transaktion des Hackers gelang es, Patricks Ether auf das Konto des Hackers zu verschieben.
Benutzer Patrick im DAOHub-Forum hat die Nachricht gestern mit dem Betreff [Urgent]Buying DAO using Mist has hacked gepostet .
Patrick nutzte die Ethereum Wallet, um 1 Ether zu überweisen, um den Kauf von TheDAO- Token auf seinem Mining-Computer zu testen . Als (bisher scheint es, dass) die Ethereum-Brieftasche seine geth
Brieftasche für 2 Sekunden entsperrte (über die IPC-API, nicht dem Internet ausgesetzt), kam ein Bot, der seine geth
Brieftaschenaktivität beobachtete, herein, um eine Überweisungsanweisung an geth
(über JSON-RPC , dem Internet ausgesetzt) und überwies seine verbleibenden 7218 Ether auf das Konto des Hackers.
Hier ist Patricks Konto, das die 1 Ether-Überweisung zeigt, bevor sein Restguthaben ~ 17 Sekunden später entfernt wird ( 0x95a3ba0aabc6296cbbe3862a889ecb37979da493 ):
Hier ist das Konto des Hackers, das zeigt, dass die 7.218 Ether in viele Fragmente von 97,54489533580829 Ether-Transaktionen aufgeteilt wurden ( 0xc5d431ee2470484b94ce5660aa6ae835346abb19 ):
Hier ist der Code aus Ethereum Wallet mist/interface/client/templates/popupWindows/sendTransactionConfirmation.js #228 , der das geth
Konto für 2 Sekunden entsperrt:
web3.personal.unlockAccount(Session.get('data').from, pw || '', 2, function(e, res){
Die 1. ETH-Transaktion fand am 2016-05-12 03:12:57 statt. Die 7218.368874849814 ETH-Transaktion fand am 2016-05-12 03:29:03 statt, ~ 17 Sekunden nach der 1. ETH-Transaktion, was dem 2-Sekunden-Fenster + der durchschnittlichen ~ 15-Sekunden-Blockzeit von Ethereum entspricht.
Nach dem Hack führte Patrick einige Analysen auf seinem Computer durch und fand alle paar Sekunden Netzwerkkommunikation über den geth
RPC-Port 8545, der die folgenden Befehle ausführte:
eth_accounts
- um die Konten auf der geth
Instanz aufzulisteneth_mining
- um die Mining-Aktivität auf dem Knoten herauszufindenminer_setEtherBase
- zu versuchen, ein geth
Etherbase-Konto einzurichten, aber dies ist fehlgeschlageneth_getBalance
- um den Saldo von Patricks Konten zu finden
Es stellt sich die Frage, warum der RPC-Port 8545 aktiviert wurde, damit RPC-Kommunikationen aus dem Internet an den geth
Computer weitergeleitet werden.
Patrick führt GPU-Miner außerhalb seines Netzwerks aus und aktivierte die Portweiterleitung für Port 8545 für seine GPU-Miner außerhalb seines Netzwerks, da er wusste, dass sein Konto für 99,99 % der Zeit gesperrt bleiben würde. Alles, was es brauchte, war ein 2-Sekunden-Fenster.
Wie @tayvano unten aufgeführt hat, dokumentiert Holy shit my eth accounts been hacked einen weiteren Exploit über das RPC-Protokoll.
Beachten Sie auch, dass ein Hacker mit Zugriff auf den lokalen Rechner geth
während dieser 2-Sekunden-Entsperrzeit auch auf die IPC-Kommunikation von zugreifen kann, um betrügerische Transaktionen zu senden.
Welche Schritte können unternommen werden, um die Wahrscheinlichkeit zu verringern, dass dies auftritt?
(Bitte bearbeiten Sie mich. Ich bin ein Community-Wiki)
geth
werden--rpc
ohne zu überprüfen, ob nur Ihre GPU-Mining-Computer auf TCP-Port 8545 auf Ihrem Ethereum-Knotencomputer zugreifen geth
könnengeth
Computer aus.geth
Instanz weitergeleitet werden.Von blog.ethereum.org – Sicherheitswarnung – cpp-ethereum hält Konten entsperrt :
Betroffene Konfigurationen : cpp-ethereum (eth, AlethZero, …) Version 1.2.0 bis 1.2.5 (behoben in 1.2.6) Hinweis: Weder „geth“ noch „Mist“ noch das „Ethereum Wallet“ (sofern nicht ausdrücklich zusammen verwendet mit cpp-ethereum) davon betroffen sind, sperren sie Accounts wieder korrekt.
Schweregrad : Hoch
Mögliche Angriffe : Angreifer können Gelder von zuvor verwendeten Konten ausgeben, wenn sie Zugriff auf den lokalen Computer oder eine exponierte JSON-RPC-Schnittstelle haben.
Details : Aufgrund eines Fehlers in cpp-ethereum bleiben Konten entsperrt, sobald ihr Passwort eingegeben wurde, bis cpp-ethereum geschlossen wird. Dies schließt Konten ein, die mit dem beim Start eingegebenen „Master-Passwort“ oder einem beliebigen über Mist eingegebenen Passwort verschlüsselt sind. Dies bedeutet, dass ein Angreifer Geld von dem Konto ausgeben kann, sobald er Zugriff auf die RPC-Schnittstelle hat. Dazu benötigen sie entweder Zugriff auf das lokale Dateisystem oder die exponierte http-json-rpc-Schnittstelle (nicht die Standardeinstellung). Die Verwendung von Mist im „Mist-Modus“ (nicht die Standardeinstellung) und das Navigieren zu einer bösartigen Website bietet dieser Website auch Zugriff auf die RPC-Schnittstelle.
Vorgeschlagene vorübergehende Problemumgehung : Starten Sie eth nach jeder Transaktion neu, stellen Sie die json-rpc-Schnittstelle nicht über http bereit und aktualisieren Sie auf Version 1.2.6, sobald Binärdateien veröffentlicht werden. Ein Fix wurde bereits in den Entwicklungszweig gemergt.
Hier sind einige Schritte, um die Wahrscheinlichkeit zu verringern, dass Ihre Ethereum-Brieftasche gehackt wird.
Für die meisten Ethereum-Miner werden Sie geth
den Blockchain-Knoten ethminer
ausführen und die Mining-Berechnungen durchführen.
Wenn Sie nur eine geth
Instanz und die ethminer
s auf nur einem Computer ausführen, beschränken Sie Ihren RPC-Port darauf, nur auf dem lokalen Computer zu dienen. Die Option --rpcaddr 127.0.0.1
(die die Standardeinstellung ist) beschränkt Ihre RPC-Kommunikation auf genau diesen Computer.
Wenn Sie nur eine geth
Instanz auf einem Computer und ethminer
auf demselben Computer sowie ethminer
auf anderen Computern ausführen, die mit dieser einen Instanz kommunizieren müssen geth
, müssen Sie beispielsweise die lokale Netzwerk-IP Ihres Computers verwenden --rpcaddr 192.168.1.123
. In diesem Fall richten Sie am besten eine Firewall ein, um die Kommunikation über RPC nur geth
auf Ihre Mining-Rigs zu beschränken.
geth
-Node-Computer ausWenn Sie Mist auf Ihrem Mining-Knoten ausführen und eine Transaktion mit Mist senden, kommuniziert dieser über den IPC-Socket, um anzuweisen geth
, Ihr Konto für 2 Sekunden zu entsperren.
geth
Wenn Sie RPC aktiviert haben und dieser Port über das Internet zugänglich ist, können Skripte und Bots in der kurzen Zeit, in der Mist Ihre Konten entsperrt , Transaktionen auf Ihrem Knoten senden , um Ihre Münzen zu stehlen, wie es Patrick passiert ist.
Wenn Sie RPC ausgeschaltet haben und Ihr Mining-Computer kompromittiert wurde, kann jede lokal installierte Malware den IPC-Socket verwenden, um Ihre Münzen zu stehlen.
Führen Sie Mist nicht auf Ihrem Mining-Computer aus . Verwenden Sie es stattdessen auf einem separaten sicheren Computer.
$HOME/.ethereum/history
Ihre Datei und löschen Sie sie gegebenenfallsDer Verlauf der von Ihnen eingegebenen Befehle geth ... console
wird in gespeichert $HOME/.ethereum/history
. Folgendes zeigt, was ich gerade in die Konsole eingegeben habe:
> eth.mining
true
> personal.unlockAccount(eth.accounts[0], "invalidpassword", 2)
Decryption failed: MAC mismatch
at InvalidResponse (<anonymous>:-81662:-62)
at send (<anonymous>:-156322:-62)
at unlockAccount (<anonymous>:-133322:-62)
at <anonymous>:1:1
Und hier sind die letzten beiden Zeilen meiner $HOME/.ethereum/history
Datei:
eth.mining
personal.unlockAccount(eth.accounts[0], "invalidpassword", 2)
Überprüfen Sie den Inhalt Ihrer Verlaufsdatei mit dem folgenden Befehl:
user@Kumquat:~$ grep unlock $HOME/.ethereum/history
personal.unlockAccount(eth.accounts[0], "invalidpassword", 2)
Wenn Sie jemals den Befehl verwendet haben personal.unlockAccount(...)
, löschen Sie Ihre Verlaufsdatei:
rm $HOME/.ethereum/history
Standardmäßig ist das Verzeichnis, in dem sich Ihre History-Datei befindet, nur für Ihren eigenen Benutzer lesbar. Aber wenn Ihr Konto kompromittiert ist, befindet sich Ihr Passwort in Ihrer Verlaufsdatei:
user@Kumquat:~$ ls -al | grep .ethereum
drwx------ 9 user user 4096 May 14 00:28 .ethereum
Ihr Mining-Computer kommuniziert ständig mit anderen Programmen im Internet und ist einem höheren Risiko als gewöhnlich ausgesetzt, kompromittiert zu werden.
Hacker können Ethereum-Knoten im Internet leicht finden, und Ihr Computer kann das Ziel sein. Verschieben Sie Ihre Mining-Prämien auf ein sichereres Ethereum-Konto, um die Größe Ihrer Verluste zu reduzieren, wenn Sie gehackt werden.
Führen Sie nach Möglichkeit die Serverversion von Ubuntu Linux aus. Es ist etwas schwieriger zu installieren, insbesondere die GPU-Treiber, aber Sie haben eine geringere Chance, gehackt zu werden, da in dieser Version im Vergleich zur Desktop-Version weniger Dienste ausgeführt werden.
Ubuntu Desktop verfügt über viel mehr Software, die kontinuierlich mit exponierten Ports ausgeführt wird. Wenn Sie den Ubuntu-Desktop verwenden müssen, schalten Sie unnötige Dienste aus und installieren Sie keine nicht vertrauenswürdige Software. Möglicherweise möchten Sie die Datenschutzeinstellungen verwenden, um das Durchsickern von Informationen zu reduzieren:
/etc/default/appport
. Satzenabled=0
Macs und Windows telefonieren ständig nach Hause und haben sehr wahrscheinlich Hintertüren für Apple bzw. Microsoft. Auch wenn Apple und Microsoft wenig Anreiz haben, sich durch die Nutzung der Hintertüren zu offenbaren, macht es das ständige Geschwätz schwierig, abnormale Kommunikation zwischen Ihrem Server und anderen Computern zu erkennen.
geth
Instanz aktiviert haben, erlauben Sie nur die Kommunikation auf dem RPC-Port von Ihren Mining-Computern.root
(oder Benutzer mit Administratorrechten), um Ihre Miner auszuführenWenn Ihre mit dem Internet verbundenen Programme ( geth
) eine Schwachstelle aufweisen, kann ein Hacker größeren Schaden anrichten, wenn das Programm mit Administratorrechten ausgeführt wird.
Nur der Port 30303 für TCP- und UDP-Datenverkehr sollte von Ihrem Modem oder Ihrer Firewall an Ihren Knotencomputer weitergeleitet werden geth
. Port 8545 (oder was auch immer Sie für Ihren RPC-Port konfiguriert haben) sollte NICHT an Ihren Knotencomputer weitergeleitet geth
werden.
Meine Firewall-Regeln gelten für meine 2 Mining-Rigs (.120 hat die geth
Instanz, .121 ist nur ein GPU-Miner, .111.* ist meine DMZ):
* Allow Internet to DMZ geth machine TCP 30303
Protocol TCP, Source Any, Destination 192.168.111.120:30303
* Allow Internet to DMZ geth machine UDP 30303
Protocol UDP, Source Any, Destination 192.168.111.120:30303
* Allow Ethereum RPC 8545 traffic from GPU miner to geth machine
Protocol TCP, Source 192.168.111.121, Destination 192.168.111.120:8545
* Allow SSH traffic to mining rigs
Protocol TCP, Source 192.168.1.*, Destination 192.168.111.*:22
* Block everything else
Protocol *, Source Any, Destination 192.168.111.*:*
Verwenden Sie einen Dienst wie GRC, um nach offenen Ports auf Ihrer Internetverbindung zu suchen. Klicken Sie auf grc.com , klicken Sie auf Shields UP!! , dann klicke auf ShieldsUP! wieder. Lesen Sie den Text und klicken Sie auf Fortfahren.
Auf der unten gezeigten Webseite habe ich Ports eingegeben und auf User Specificed Custom Port Probe8545, 30303
geklickt :
Die Untersuchungsergebnisse werden unten gezeigt – Port 8545 ( geth
RPC) ist nicht für das Internet geöffnet, während Port 30303 (Ethereum P2P-Port) dies ist:
Es ist wahrscheinlich eine gute Idee, alle Service-Ports (Ports 0 bis 1055) gleichzeitig zu testen, um zu bestätigen, welche Ports Sie offen haben. Die folgenden Ergebnisse zeigen, dass ich nur Port 443 (HTTPS) offen habe:
Öffnen Sie nicht Ihren RPC-Port 8545, wenn Sie GPU-Miner außerhalb Ihres Netzwerks haben.
Ihre Alternativen, wenn Sie mit Ihrer geth
Instanz GPU-Miner außerhalb Ihres Netzwerks haben:
geth
lokal in jedem Ihrer GPU-Miner-Netzwerke, die bei Bedarf auf dasselbe Coinbase-Konto verweisen; oderether-pool
Komponente von open-ethereum-pool auszuführen . Sie müssen das Web-Frontend, das unlocking
oder die payout
Module nicht ausführen. Nur sichere Anweisungen von/zu den GPU-Minern zu/von geth
durchlaufen die Mining-Pool-Software. Ein Vorteil der Ausführung dieser Software besteht darin, dass Sie mit dem Stratum-Mining-Proxy-Protokoll eine bessere Leistung erzielen. Die Fähigkeit, mit einer bestimmten Coinbase (Auszahlungsadresse) abzubauen, ist nicht davon abhängig, dass der Mining-Knoten Zugriff auf die privaten Schlüssel der Coinbase hat; Sie können die Adresse und den privaten Schlüssel auf einem anderen Computer generieren und die Coinbase des Mining-Knotens auf die generierte Adresse setzen. Dies reduziert den Schaden durch einen kompromittierten Knoten: Vergangene Auszahlungen können nicht gestohlen werden, indem lediglich der Knoten kompromittiert wird.geth # rpc is disabled by default
eth # rpc is disabled by default
parity # rpc is disabled by default
geth --ipcdisable # ipc is enabled by default, turn it off
geth --no-ipc # ipc is enabled by default, turn it off
parity # parity has not ipc (yet)
Ich stelle mir vielleicht vor, dass Mist keine signierten Transaktionen verwendet, sondern das Konto entsperrt, um unsignierte Transaktionen zu senden. Das Senden signierter Transaktionen mit web3 auf einer NodeJS-Befehlszeilenkonsole oder mit einem Skript würde es also ermöglichen, eine Transaktion ohne das Risiko eines Angriffs zu senden. Dies setzt voraus, dass Konten beim Senden signierter Transaktionen niemals entsperrt werden, aber ich bin mir nicht sicher, ob dies der Fall ist.
Kommentare wären willkommen
Taywano
HodlDwon
eur10
Nicolas Massart
Nick Johnson
Datenschutz ist ein Menschenrecht.eth
geth
Computer aktiviert; 2) Patrick aktiviert versehentlich die Portweiterleitung für 8545 vom Internet zu seinemgeth
Computer; oder 3) Der Hacker hat irgendwie die Portweiterleitung für 8545 zu seinemgeth
Computer aktiviert. Ich habe das gerade getan, fragte ihn jetzt.Datenschutz ist ein Menschenrecht.eth
@Nick Johnson
, Patrick betrieb einen „Solo-Pool“ mit verteilten GPU-Minern außerhalb seinesgeth
Computernetzwerks über RPC und hielt seine Konten immer gesperrt, war aber unglücklich, dass das Zeitfenster von 2 Sekunden ausgenutzt wurde.SCBürgel