{"id":8705,"date":"2022-03-19T16:36:01","date_gmt":"2022-03-19T14:36:01","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=8705"},"modified":"2022-12-12T20:03:59","modified_gmt":"2022-12-12T18:03:59","slug":"npm-paket-node-ipc-enthaelt-malware-und-zerstoert-daten-als-protest-gegen-den-ukraine-krieg","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/npm-paket-node-ipc-enthaelt-malware-und-zerstoert-daten-als-protest-gegen-den-ukraine-krieg\/","title":{"rendered":"NPM-Paket node-ipc enth\u00e4lt Malware und zerst\u00f6rt Daten als Protest gegen den Ukraine-Krieg"},"content":{"rendered":"<p>Der Krieg in der Ukraine findet l\u00e4ngst nicht mehr &#8222;nur&#8220; auf dem Schlachtfeld vor Ort statt. <a href=\"https:\/\/u-labs.de\/portal\/it-armee-und-hacker-im-russland-ukraine-krieg-welche-rolle-spielen-aktivisten-im-cyberkrieg\/\" title=\"IT-Armee und Hacker im Russland-Ukraine Krieg: Welche Rolle spielen Aktivisten im Cyberkrieg?\">K\u00fcrzlich hatte ich \u00fcber diesen digitalen Krieg berichtet, er wird parallel zum physischen Krieg gef\u00fchrt<\/a>. Rund um den Globus beteiligen sich verschiedene Menschen, daher reichen seine Auswirkungen auch weit \u00fcber die Landesgrenzen von Russland\/Ukraine aus. Nun ist der Krieg im Node.js-\u00d6kosystem angekommen. Dort sind allerdings Unbeteiligte ebenfalls betroffen.<\/p>\n<h2 class=\"wp-block-heading\">Das NPM-Paket node-ipc<\/h2>\n<p>JavaScript ist eine Skriptsprache, die urspr\u00fcnglich f\u00fcr Internetbrowser entwickelt wurde. Durch die Laufzeitumgebung Node.js kann man JS auch au\u00dferhalb des Browsers verwenden. Der Paketmanager NPM soll es erm\u00f6glichen, Programmcode in Form von Modulen anderen zur Verf\u00fcgung zu stellen. Davon hat der Entwickler RIAEvangelist Gebrauch gemacht und bietet <a href=\"https:\/\/riaevangelist.github.io\/node-ipc\/#basic-examples\" title=\"mit seinem Paket node-ipc\" target=\"_blank\" rel=\"nofollow\">mit seinem Paket node-ipc<\/a> eine Bibliothek zur Interprozesskommunikation: Verschiedene Prozesse k\u00f6nnen dadurch Daten miteinander austauschen. Ein einfaches Beispiel f\u00fcr solchen Datenaustausch ist die Pipe in Linux:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nps -ax | grep apache\n<\/pre>\n<\/div>\n<p>Der Befehl <strong>ps<\/strong> liefert eine Liste aller laufenden Prozesse, leitet sie per Pipe (|) an den zweiten Befehl <strong>grep<\/strong>, wo dann wiederum diese Daten eingelesen und gefiltert werden. Mit node-ipc kann man solche Transfers zwischen verschiedenen Prozessen in seine Anwendung integrieren. Auch sind komplexere Szenarien m\u00f6glich, etwa die \u00dcbertragung \u00fcber das Netzwerk zu einem anderen System.<\/p>\n<h2 class=\"wp-block-heading\">&#8222;peacenotwar&#8220;-Paket: Friedlicher Protest \u00fcber Software-Abh\u00e4ngigkeiten?<\/h2>\n<p>Am 07. M\u00e4rz hat der Entwickler (auf GitHub unter dem Name RIAEvangelist aktiv) <a href=\"https:\/\/snyk.io\/blog\/peacenotwar-malicious-npm-node-ipc-package-vulnerability\/\" title=\"sein Paket aktualisiert und dort Malware eingebaut\" target=\"_blank\" rel=\"nofollow\">sein Paket aktualisiert und dort Malware eingebaut<\/a>. Entgegen des Artikels war dies laut meinen Recherchen bereits am 07. und nicht erst am 08. M\u00e4rz der Fall. Nur wenig sp\u00e4ter <a href=\"https:\/\/github.com\/RIAEvangelist\/node-ipc\/issues\/233\" title=\"entdeckte der Nutzer MindSpike das Paket peacenotwar\" target=\"_blank\" rel=\"nofollow\">entdeckte der Nutzer <em>MindSpike <\/em>das Paket <em>peacenotwar<\/em><\/a>, welches eine Meldung ausgibt, die sich gegen den Krieg in der Ukraine ausspricht. Das <a href=\"https:\/\/github.com\/RIAEvangelist\/peacenotwar\" title=\"peacenotwar NPM\" target=\"_blank\" rel=\"nofollow\">peacenotwar NPM<\/a> Paket soll friedlich gegen den Krieg demonstrieren und aufzeigen, warum es wichtig ist, seine Node-Module zu kontrollieren. Beides soll ausdr\u00fccklich rein friedlich geschehen, ohne Schaden anzurichten. Es legt eine Textdatei namens <em>WITH-LOVE-FROM-AMERICA.txt<\/em> auf dem Desktop an. F\u00fcr Windows-Nutzer die OneDrive verwenden, wird eine weitere Kopie in ihre Microsoft-Cloud gespeichert. Die Datei kritisiert in verschiedenen Sprachen, welchen Schaden Kriege verursachen und dass sie daher niemals eine L\u00f6sung darstellen k\u00f6nnen. <\/p>\n<p>RIAEvangelist hat sein peacenotwar-Modul als Abh\u00e4ngigkeit in seine anderen Projekte eingebaut. <a href=\"https:\/\/github.com\/RIAEvangelist\/node-ipc\/issues\/233#issuecomment-1063557929\" target=\"_blank\" rel=\"nofollow\">Der Entwickler begr\u00fcndet seinen Schritt damit<\/a>, dass diese \u00c4nderungen gut dokumentiert sind und in einer eigenen Hauptversion durchgef\u00fchrt wurden &#8211; wer die Abh\u00e4ngigkeit nicht m\u00f6chte, k\u00f6nne das Update auf betroffene Versionen entsprechend unterlassen. Au\u00dferdem sah er sich in der Verantwortung, etwas gegen den Krieg zu unternehmen, damit daraus kein dritter Weltkrieg entsteht.<\/p>\n<p>Wer ein Paket von ihm nutzt und dies, aktualisiert ohne zumindest die Changelogs zu lesen oder gar den Code zu pr\u00fcfen, dessen eigenes Programm erstellt dadurch automatisch diese Textdatei bei den Nutzern. Da das NPM-\u00d6kosystem ist allerdings bekannt ist, oft viele Abh\u00e4ngigkeiten \u00fcber mehrere Ecken aufzuweisen. Daher sind zahlreiche Projekte betroffen, die das node-ipc Modul gar nicht kennen &#8211; aber \u00fcber verschiedene Abh\u00e4ngigkeiten nutzen. <a href=\"https:\/\/github.com\/vuejs\/vue-cli\/issues\/7054\" title=\"Ein bekanntes Beispiel ist das JavaScript-Framework Vue.js\" target=\"_blank\" rel=\"nofollow\">Ein bekanntes Beispiel ist das JavaScript-Framework Vue.js<\/a>. Dort hat man offensichtlich Updates eingespielt, ohne die \u00c4nderungen in den Abh\u00e4ngigkeiten zu pr\u00fcfen.<\/p>\n<h2 class=\"wp-block-heading\">Die Geschichte der Malware in node-ipc<\/h2>\n<p>Doch das ist noch nicht alles. Neben dem peacenotwar-Modul hat RIAEvangelist <a href=\"https:\/\/github.com\/RIAEvangelist\/node-ipc\/blob\/847047cf7f81ab08352038b2204f0e7633449580\/dao\/ssl-geospec.js\" title=\"in einem inzwischen gel\u00f6schten Commit eine weitere Datei direkt in node-ipc eingebaut\" target=\"_blank\" rel=\"nofollow\">in einem inzwischen gel\u00f6schten Commit eine weitere JavaScript-Datei direkt in node-ipc eingebaut<\/a>. Sie ist obfuscated und minified &#8211; also bewusst unleserlich gemacht, damit es schwieriger ist, seine Funktion zu verstehen. Die zumindest Formatierte Datei findet man <a href=\"https:\/\/security.snyk.io\/vuln\/SNYK-JS-NODEIPC-2426370\" title=\"in diesem Eintrag einer Schwachstellen-Datenbank\" target=\"_blank\" rel=\"nofollow\">in diesem Eintrag einer Schwachstellen-Datenbank<\/a>. Zeichenketten wurden mit Base64 maskiert:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&gt; Buffer.from(&quot;Y291bnRyeV9uYW1l&quot;, &quot;base64&quot;).toString()\n&#039;country_name&#039;\n&gt; Buffer.from(&quot;cnVzc2lh&quot;, &quot;base64&quot;).toString()\n&#039;russia&#039;\n&gt; Buffer.from(&quot;YmVsYXJ1cw==&quot;, &quot;base64&quot;).toString()\n&#039;belarus&#039;\n<\/pre>\n<\/div>\n<p>Der Code pr\u00fcft anhand von Zufallszahlen, ob er Ausgef\u00fchrt wird.  Ist das der Fall, sendet er eine HTTP-Anfrage an eine Schnittstelle von ipgeolocation.io. Sie liefert Informationen zur IP-Adresse des abrufenden Internetanschlusses, unter anderem das zugeordnete Land. Wird erkannt, dass sich die IP un Russland oder Belarus befindet, \u00fcberschreibt der Code den Inhalt aller Dateien im aktuellen und \u00fcbergeordneten Verzeichnissen mit einem Herz-Smiley.<\/p>\n<p>Auf NPM sind nicht mehr alle Versionen verf\u00fcgbar und auch auf GitHub hat der Eigent\u00fcmer bereits versucht, Beweise zu zensieren oder l\u00f6schen. <a href=\"https:\/\/github.com\/vuejs\/vue-cli\/issues\/7054#issuecomment-1068371234\" title=\"Hier leugnet er etwa\" target=\"_blank\" rel=\"nofollow\">Hier leugnet er etwa<\/a>, dass sein Code \u00fcberhaupt Schaden anrichten kann. Nachdem andere Community-Mitglieder seine Behauptungen mit Beweisen widerlegen, gesteht er seine Manipulation &#8211; aber nur Teilweise per Salamitaktik. Beispielsweise <a href=\"https:\/\/github.com\/vuejs\/vue-cli\/issues\/7054#issuecomment-1068443888\" title=\"gesteht er im sp\u00e4teren Verlauf der Diskussion ein\" target=\"_blank\" rel=\"nofollow\">gesteht er im sp\u00e4teren Verlauf der Diskussion ein<\/a>, dass sein Code die Daten l\u00f6scht, wenn die IP aus Russland oder der Ukraine stammt. Behauptet aber, die Erkennung w\u00fcrde nicht funktionieren, weil der daf\u00fcr notwendige API-Schl\u00fcssel ung\u00fcltig ist. Laut Aussagen anderer Mitglieder war der Schl\u00fcssel zum Zeitpunkt ihrer Tests jedoch g\u00fcltig &#8211; er wurde anscheinend erst im Nachhinein zur\u00fcckgezogen.<\/p>\n<p>Soweit es sich rekonstruieren l\u00e4sst, ist Version 10.1.1 von node-ipc die erste Version, welche die destruktive Malware (L\u00f6schen von Dateien) enth\u00e4lt. Kurz darauf folgte 10.1.2, worin sie ebenfalls enthalten ist. In Version 10.1.3 wurde diese Malware wieder entfernt und eine neue Hauptversion 11.0.0 ver\u00f6ffentlicht.<\/p>\n<h2 class=\"wp-block-heading\">Auswirkungen dieses sogenannten &#8222;Lieferketten-Angriffs&#8220;<\/h2>\n<p>Diese Malware ist in mehrerer Hinsicht problematisch: Die verwendete Geo-IP Zuordnung ist nicht 100% exakt. Es wird m\u00f6glicherweise eine IP Russland zugeordnet, die von wo anders stammt. Auch VPNs und Proxys verf\u00e4lschen dies. Deren Nutzung wird in letzter Zeit wohl zugenommen haben, da aufgrund von Zensur auf beiden Seiten nicht mehr alle Medien zugreifbar sind. Wer Beispielsweise Propagandavorw\u00fcrfe in Russischen Medien aus erster Hand pr\u00fcfen m\u00f6chte, kommt aufgrund von Verboten etwa nicht mehr ohne VPN\/Proxy auf die Seite von RT.<\/p>\n<p>Abgesehen davon: Die Malware unterscheidet nicht, ob sich jemand am Krieg beteiligt oder sich gar dagegen ausspricht. Sie trifft am Ende z.B. zivile Entwickler, die sich damit ihren Lebensunterhalt finanzieren &#8211; und durch die L\u00f6schung ihrer Daten im schlimmsten Falle in ihrer Existenz gef\u00e4hrdet sind. Gem\u00e4\u00df Gie\u00dfkannen-Prinzip wird jeder aus Russland bestraft. In wie weit das den Krieg beendet statt weiter zu eskalieren, ist doch sehr fraglich.<\/p>\n<p>Unabh\u00e4ngig von der Motivation handelt es sich bei dem Vorfall um einen sogenannten Lieferketten-Angriff: Da node-ipc <a href=\"https:\/\/www.npmjs.com\/browse\/depended\/node-ipc\" title=\"in hunderten anderen Paketen verwendet wird\" target=\"_blank\" rel=\"nofollow\">in hunderten anderen Paketen verwendet wird<\/a>, waren und sind viele wohl \u00fcber mehrere Ecken davon betroffen &#8211; somit eine Art Lieferkette. Das Vue.js Framework hatte ich zuvor bereits als Beispiel erw\u00e4hnt: Alleine deren Paket <a href=\"https:\/\/www.npmjs.com\/package\/@vue\/cli-ui\" title=\"@vue\/cli-ui erreicht \u00fcber 131.000 Downloads pro Woche\" target=\"_blank\" rel=\"nofollow\">@vue\/cli-ui erreicht \u00fcber 131.000 Downloads pro Woche<\/a>. Selbst wenn darin nur f\u00fcr wenige Tage eine Schadsoftware enthalten ist, kann man sich das Ausma\u00df vorstellen. Und das wie gesagt nur in einem dieser F\u00e4lle. Es gibt unterschiedliche Gr\u00fcnde f\u00fcr solche Angriffe. Andere sind nicht politischer Natur, sondern finanziell motiviert. Unabh\u00e4ngig davon haben sie massive Auswirkungen gemeinsam, da sich aufgrund der hohen Abh\u00e4ngigkeit der Angriff auf ein einziges Projekt direkt oder indirekt auf dutzende weitere auswirkt.<\/p>\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n<p>Das ist ein Problem, vor allem wenn gro\u00dfz\u00fcgig und leichtsinnig mit Abh\u00e4ngigkeiten umgegangen wird. Wenngleich ich die Vorgehensweise von node-ipc, dies mit politisch motivierten destruktiven Angriffen nicht gut hei\u00dfe &#8211; unabh\u00e4ngig davon, gegen wen sie sich richten. Ich kann daher an dieser Stelle nur ein weiteres mal davon abraten, dies nachzuahmen oder anderweitig Selbstjustiz im Krieg zu \u00fcben. Im vorherigen Beitrag zum Cyberwar in der Ukraine hatte ich das ausf\u00fchrlicher begr\u00fcndet, warum ich der Meinung bin, dass die (potenziellen) Gefahren dem m\u00f6glichen Nutzen \u00fcberwiegen.<\/p>\n<p>Generell sollten wir vorsichtiger damit umgehen, fremden Code in eigene Projekte einzubinden. Und zwar ohne s\u00e4mtliche Entwickler unter Generalverdacht anzuprangern. Die gro\u00dfe Mehrheit davon hat keine b\u00f6sen Absichten. Allerdings gibt es Szenarien, die realistisch ausgenutzt werden k\u00f6nnen. <a href=\"https:\/\/u-labs.de\/portal\/das-bsi-warnt-vor-kaspersky-was-das-bedeutet-und-welche-alternativen-es-gibt\/\" title=\"Das BSI warnt vor Kaspersky: Was das bedeutet und welche Alternativen es gibt\">Kaspersky k\u00f6nnte selbst Malware \u00fcber Updates ausliefern, gewollt oder ungewollt<\/a>. Das ist aber nur die Spitze vom Eisberg, viele andere k\u00f6nnten das ebenfalls. Es ist <a href=\"https:\/\/www.zdnet.de\/88396972\/starke-angriffe-auf-software-lieferketten\/\" title=\"nicht der erste Angriff dieser Art\" target=\"_blank\" rel=\"nofollow\">nicht der erste Angriff dieser Art<\/a> und es wird wohl kaum der letzte bleiben, unabh\u00e4ngig davon, wie sich die Lage in der Ukraine entwickelt. Produkte zu wechseln wird daf\u00fcr nicht ausreichen, da die Probleme tiefer liegen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Krieg in der Ukraine findet l\u00e4ngst nicht mehr &#8222;nur&#8220; auf dem Schlachtfeld vor Ort statt. K\u00fcrzlich hatte ich \u00fcber diesen digitalen Krieg berichtet, er wird parallel zum physischen Krieg gef\u00fchrt. Rund um den Globus beteiligen sich verschiedene Menschen, daher reichen seine Auswirkungen auch weit \u00fcber die Landesgrenzen von Russland\/Ukraine aus. Nun ist der Krieg &#8230;<\/p>\n","protected":false},"author":5,"featured_media":8706,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[85],"tags":[817,1032,359],"class_list":["post-8705","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicherheit","tag-nodejs","tag-npm","tag-schadsoftware"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=8705"}],"version-history":[{"count":2,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8705\/revisions"}],"predecessor-version":[{"id":8709,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8705\/revisions\/8709"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/8706"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=8705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=8705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=8705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}