Anatomie der Kryptominer: Mining-Botnets abschalten
Inhalt
Einführung
Willkommen zum letzten Teil unserer Blogserie Anatomie der Kryptominer:
In unserem ersten Beitrag ging es um die Grundlagen von Kryptowährungen, um ihre unterschiedlichen Eigenschaften und um die Frage, warum einige von ihnen für Cyberkriminelle besonders interessant sind.
Im zweiten Teil haben wir verschiedene Kryptomuster analysiert, bei denen wir festgestellt hatten, dass sie verschiedene Mining-Topologien missbrauchten.
In diesem dritten und letzten Blogbeitrag der Serie werden wir zwei neuartige proaktive Techniken erkunden, die zur Bekämpfung von Kryptominern eingesetzt werden können.
Zusätzlich zu diesen Blogbeiträgen haben wir mehrere Analysetools veröffentlicht, die in unserem Repository zu finden sind.
Jeder weiß, dass Angriff die beste Verteidigung ist. Aufgrund der verteilten Natur von Kryptominer-Kampagnen kann es sehr schwierig sein, diese zu stören.
In diesem Blogbeitrag zeigen wir, wie dieses Problem durch die Nutzung des Entwurfs gängiger Mining-Topologien gelöst werden kann, um den Mining-Prozess effektiv zum Erliegen zu bringen. Obwohl die von uns beschriebenen Techniken verwendet wurden, um Monero-Kryptominer anzuvisieren, können die gleichen Prinzipien auch für andere Kryptowährungen gelten.
Kryptominer-Aktivitäten werden heruntergefahren
Wenn bösartige Kryptomining-Aktivitäten erkannt werden, gibt es derzeit zwei Möglichkeiten, um diese zu beenden:
Wir können den Pool-Service auffordern, das Angreiferkonto zu sperren
Wir können versuchen, andere Dienste in der Infrastruktur des Angreifers zu zerstören, um die Kampagne zu stören
Das Problem bei diesen Optionen besteht darin, dass sie aufgrund der Abhängigkeit von Drittanbietern recht komplex werden und lange Zeit in Anspruch nehmen können.
Wir haben eine bessere Möglichkeit gefunden.
Wir haben zwei Techniken entwickelt, indem wir Mining-Topologien und Pool-Richtlinien nutzen, die es uns ermöglichen, die Effektivität eines Kryptominer-Botnets so weit zu reduzieren, dass es komplett abgeschaltet wird. Dies zwingt den Angreifer, seine Infrastruktur radikal zu ändern oder sogar die gesamte Kampagne aufzugeben.
Beide Techniken basieren darauf, Stratum-Kommunikation auf eine Weise zu nutzen, die es ermöglicht, wichtige Komponenten wie Proxys oder Wallets zu verbieten, die mit den Mining-Konten verbunden sind.
Von 3,3 Millionen auf Null
Wir haben eine bösartige Kryptomining-Operation ins Visier genommen, die seit sechs Jahren aktiv ist. Indem wir den Mining-Proxy des Angreifers sperrten, einen zentralen Point of Failure in der Mining-Topologie, konnten wir seine Hashrate von 3,3 Millionen Hashes pro Sekunde auf Null reduzieren (Abbildung 1).
So einfach wie die Angreifer Geld verdienten, konnten wir die möglichen jährlichen Einnahmen des Angreifers innerhalb weniger Sekunden auflösen. Mit einem einfachen Laptop haben wir dafür gesorgt, dass der Kryptominer-Betreiber mit der abstürzenden Hashrate seine 26.000 US-Dollar pro Jahr starke Cash Cow verlor.
Das Video in Abbildung 2 zeigt diese Technik, die wir als „Bad Shares“ bezeichnet haben. Es zeigt ein Opfer eines Kryptominers, das mit einem bösartigen Mining-Proxy verbunden ist. Durch die Ausführung von „Bad Shares“ konnten wir den Mining-Proxy auf dem Netzwerk sperren – so wurden die Mining-Aktivitäten heruntergefahren und die CPU-Nutzung des Opfers von 100 % auf 0 % reduziert.
Abb. 2: Anwendung der Methode „Bad Shares“ in unserem Labor
Wenn du sie nicht besiegen kannst, banne sie
Das Kryptomining über einen Pool basiert auf der Übermittlung gültiger Hash-Berechnungen, die als Shares bezeichnet werden. Um Erträge zu generieren, ist ein Kryptominer erforderlich, der Shares (Anteile) an den Mining-Pool abgibt. Nach Erhalt eines Shares validiert der Mining-Pool das Hash-Ergebnis und den Schwierigkeitsgrad.
Die Validierung von Shares ist eine der schwersten Aufgaben, die der Pool-Server bewältigen muss, insbesondere bei ungültigen Shares. Wie bei allem im Leben sind Fehler möglich. Beispielsweise kann ein Hardwarefehler dazu führen, dass falsche Shares an den Pool gesendet werden.
Die Bearbeitung ungültiger Shares verbraucht viele Ressourcen, daher müssen sich Pools davor schützen, unter einer großen Anzahl von Übermittlungen ungültiger Shares zusammenzubrechen. Wenn also ein übermittelter Share die Servervalidierung nicht besteht, verhängen die meisten Pools eine Strafe für den Miner, in der Regel in Form einer temporären Sperre.
Diese Interaktion kann sehr interessant sein, wenn man versucht, einen böswilligen Mining-Vorgang abzuschalten. Wenn wir einen Backend-Knoten oder einen Pool erstellen können, um angreifende Miner (die Opfer) zu verbieten, können wir die Ressourcenausnutzung der Kryptominer stoppen und die Opfer befreien.
In den folgenden Abschnitten demonstrieren wir dieses Konzept, indem wir zwei Mining-Kampagnen anvisieren, die wir zuvor untersucht haben. Jede dieser Kampagnen steht für eine andere Mining-Topologie: einen Mining-Proxy und eine direkte Verbindung zu einem öffentlichen Pool.
Verwenden von „Bad Shares“, um den Mining-Proxy eines Angreifers zu bannen
Eine der beliebtesten Mining-Topologien, die von böswilligen Kryptominern verwendet werden, ist ein Mining-Proxy (Abbildung 3). Diese Vorgehensweise verbessert den Datenschutz, indem sowohl das Backend als auch die Wallet-Adresse der Angreifer verborgen werden. Dadurch werden ihre Identitäten geschützt und die Rückverfolgbarkeit innerhalb des Netzwerks verringert.
Mining-Proxys stellen eine einzigartige Herausforderung für die Netzwerkerkennung dar, da sie den Zielpool „verbergen“, mit dem der Miner eine Verbindung herstellt, der normalerweise durch die Netzwerkprüfung erkannt werden kann. Außerdem verbergen sie die Wallet-Adresse, wodurch der erkennbare Fußabdruck des Miners weiter verringert wird. Wir haben jedoch herausgefunden, dass Mining-Proxys die Achillesferse des Kryptominers sind.
Beim Mining mit einem Proxy sind alle Opfer mit einem einzigen Server verbunden, was bedeutet, dass eine Beeinträchtigung des Proxys den gesamten Mining-Vorgang zum Stillstand bringen kann. Wir haben eine Technik entwickelt, mit der wir genau das erreichen können.
Die Idee ist einfach: Wenn wir uns als Miner mit einem schädlichen Proxy verbinden, können wir ungültige Mining-Ergebnisse – fehlerhafte Shares – übermitteln, die die Proxyvalidierung umgehen und an den Pool weitergeleitet werden. Aufeinanderfolgende fehlerhafte Shares führen schließlich dazu, dass der Proxy gebannt wird, was den Mining-Betrieb für das gesamte Kryptomining-Botnetz effektiv stoppt.
Kommunikation mit dem Proxy
Der Kryptominer muss sich zuerst mit der Stratum-Anmeldemethode mit dem Proxy verbinden. Wenn keine andere Konfiguration festgelegt wurde, wird der Miner standardmäßig als x im XMRig-Proxyserver identifiziert (Abbildung 4).
Wenn die Verbindung erfolgreich ist, bedeutet dies, dass ein Listener am Proxyende vorhanden ist. Wir können sicherstellen, dass es sich tatsächlich um einen Mining-Proxy handelt, indem wir die Antwort analysieren. Eine gültige Antwort ist ein JSON-Dokument, das dem Stratum-Protokoll entspricht, und das Ergebnis ist ein Job.
Obwohl der gesamte Mining-Prozess komplex ist (wie in Zero to Monero beschrieben), ist die Herstellung eines nutzerdefinierten Share relativ einfach. Es müssen nur einige Werte aus der Proxy-Antwort extrahiert werden: Die Worker-ID, die job id und nicehash nonce. Alle drei sind erforderlich, um einen bestimmten Mining-Job zu verfolgen. Wenn wir also möchten, dass der Proxy unsere fehlerhaften Shares akzeptiert, müssen wir diese Felder korrekt ausfüllen (Abbildung 5).
Wenn ein Share von einem Miner empfangen wird, leitet der Proxy ihn fast wie besehen an den Pool weiter, mit einem wichtigen Unterschied – er wird unter der Wallet-Adresse des Angreifers gesendet. Aus diesem Grund konnten wir das Wallet oder andere Informationen über das Konto oder den Pool des Angreifers niemals aus der Kryptominer-Probe kennen.
XMRogue
Es ist nicht schwer, das Kryptominer-Botnet als eines der Opfer zu infiltrieren. In der Regel gibt es keine spezielle Autorisierung – und in vielen Fällen werden Standardanwendungen wie XMRig als Miner und XMRig-proxy als Mining-Proxy verwendet.
Dies führte uns zur Entwicklung von XMRogue. XMRogue ist ein Tool, mit dem wir uns als Miner ausgeben, eine Verbindung zu einem Mining-Proxy herstellen, aufeinanderfolgende fehlerhafte Shares übermitteln und den Mining-Proxy schließlich aus dem Pool sperren können (Abbildung 6).
Eine wichtige Überlegung ist die Share-Validierung auf Proxy-Ebene. Da unsere fehlerhaften Shares vom Proxy an den Pool weitergeleitet werden, hat er die Möglichkeit, sie zu identifizieren und zu löschen.
Beispielsweise wird die beliebte Software XMRig-proxy die nicehash-Nonce, die mit dem Job bereitgestellt wird, mit der Schwierigkeit des Ergebnisses validieren. Wenn die Nonce oder der Schwierigkeitsgrad falsch sind, wird die fehlerhafte Share nicht an den Backend-Pool weitergeleitet. In Abbildung 7 sehen Sie die Validierung innerhalb des Codes, bei der Shares mit Hashes mit geringem Schwierigkeitsgrad oder falschen nicehash-Werten verworfen werden.
Wir können diese Validierungen überwinden, indem wir die Jobanforderung analysieren und sorgfältig ein fehlerhaftes Jobergebnis erstellen, das vom Stellvertreter als gültig erachtet wird, sodass unsere Shares an den Pool weitergeleitet werden.
Testen der Theorie
Um unsere Technik zu testen, wählten wir eine der Mining-Kampagnen, die wir in Teil 2 dieser Serie identifiziert haben. Wir konnten die Adressen aller Mining Proxys extrahieren, die von der ausgewählten Kampagne verwendet wurden. So erhalten wir eine Menge Informationen zum Testen. Beispielsweise können wir sehen, dass der Proxy des zentralen Angreifers – kreativ „Proxy“ genannt – eine maximale Bewertung von Nanopool hat, was auf eine erweiterte Nutzung hinweist (Abbildung 8).
Dieser Proxy generiert 3 Millionen Hashes pro Sekunde, was ungefähr einem Umsatz von 3 US-Dollar pro Stunde oder 26.000 US-Dollar pro Jahr entspricht. Indem wir diesen Proxy mit XMRogue ins Visier genommen haben, konnten wir ihn schnell vom Pool sperren lassen und so das Mining aller Opfer stoppen, die mit ihm in Verbindung standen. Wenn wir die Hashrate des Proxys prüfen, sehen wir, dass er ganz auf Null gefallen ist (Abbildung 9).
Wenn wir die Auswirkungen von XMRogue auf die gesamte Kampagne des Angreifers betrachten, können wir einen erheblichen Rückgang der Rentabilität feststellen. Als wir diese Kampagne zum ersten Mal dokumentierten, generierte sie jährlich fast 50.000 US-Dollar. Nachdem wir sie unterbrochen und aus dem Gleichgewicht gebracht hatten, sank der Jahresumsatz der Kampagne um 76 % auf 12.000 US-Dollar. Durch das Anvisieren zusätzlicher Proxys könnte der Umsatz möglicherweise auf Null gefallen sein. Diese Art von Auswirkungen könnte die Angreifer leicht dazu zwingen, ihre Kampagne endgültig abzubrechen oder das Risiko einzugehen, bei Änderungen, die überwacht werden, identifiziert zu werden.
Nutzen von andere Mining-Pool-Richtlinien
Angreifer nutzen nicht immer einen Proxy. In vielen Fällen werden Opfer direkt mit dem Pool verbunden. Das bedeutet, dass die vorherige Technik nicht anwendbar ist. Durch das Einreichen von fehlerhaften Shares wird unsere IP-Adresse einfach vom Pool gesperrt, ohne den Mining-Betrieb zu beeinträchtigen.
Als wir den Quellcode des Mining Pools inspizierten, kam uns eine andere Option in den Sinn, nämlich die Wallet-Adresse. Während die vorherige Richtlinie für fehlerhafte Shares auf Miner-IP-Adressen abzielte, haben wir eine zusätzliche Richtlinie identifiziert, die auf der Wallet-Ebene durchgesetzt wird: Der Pool bannt die Adresse des Wallets für eine Stunde, wenn er mehr als 1.000 Worker hat.
Bei der Verwendung von Proxy-Mining kann ein Angreifer seine Wallet-Adresse ausschließlich auf dem Proxyserver einbetten, sodass er sie effektiv maskieren kann. Aber in Situationen, in denen direktes Mining durchgeführt wird, muss die Wallet-Adresse auf dem betroffenen Gerät vorhanden sein, damit wir sie extrahieren können.
Die Sperrung des Angreifers ist in diesem Fall ganz einfach: Wir senden einfach mehr als 1.000 Anmeldeanfragen gleichzeitig über das Wallet des Angreifers, wodurch der Pool das Wallet des Angreifers sperren muss. Diese Technik wurde dem XMRogue-Tool als Betriebsmodus hinzugefügt.
Um diese Idee zu veranschaulichen, haben wir eine weitere Kampagne genutzt, die den öffentlichen Pool MoneroOcean verwendet. Der ursprüngliche Status der Kampagne war eine Hashrate von 22 kH/s (Abbildung 11). Diese Kampagne ist viel kleiner als die, die wir oben besprochen haben, aber die Technik selbst sollte eine breitere Palette von Krypto-Kampagnenkonfigurationen abdecken.
Nach dem Start unseres Skripts, das sofort Tausende von Anmeldungen einleitet, sahen wir, dass die Mining-Rate abstürzte und schließlich vollständig einbrach (Abbildung 12).
Breiteres Netz, flacherer Fang
Diese Taktik könnte weitere Mining-Aktivitäten unterbrechen, ist aber keine dauerhafte Lösung. Nachdem wir die Verbindungen mit mehrfachen Anmeldeversuchen gestoppt haben, konnte die Hashrate der Kampagne wiederhergestellt werden (Abbildung 13).
Zusammenfassung
Die oben dargestellten Techniken zeigen, wie Verteidiger schädliche Kryptominer-Kampagnen effektiv herunterfahren können, ohne den legitimen Poolbetrieb zu unterbrechen, indem sie Pool-Richtlinien zu ihrem Vorteil nutzen. Ein legitimer Miner kann sich schnell von dieser Art von Angriff erholen, da er seine IP oder sein Wallet einfach lokal ändern kann.
Diese Aufgabe wäre für einen böswilligen Kryptominer viel schwieriger, da das gesamte Botnet geändert werden müsste. Für weniger fortschrittliche Miner könnte diese Verteidigung das Botnet jedoch vollständig deaktivieren.
Abschluss der Serie
Dieser Beitrag schließt unsere Serie „Anatomie der Kryptominer“ ab. Wir haben die Grundlagen der Kryptomining behandelt und die Einstellung der Angreifer anhand der Jagd nach aktiven Kampagnen erforscht, die verschiedene Mining-Topologien implementieren.
Wir glauben, dass die Bedrohung durch Kryptominer mit der Zeit weiter zunehmen wird. Aber jetzt können wir uns wehren und den Betrieb des Angreifers unterbrechen. Das macht es viel schwieriger, Kryptominer effektiv zu monetarisieren.