JavaScript >> Javascript-Tutorial >  >> Tags >> npm

npm installiert aktuelle Malware

Müssen Sie alle Ihre Systemanmeldeinformationen für einen einfachen Zugriff auf eine öffentliche Webseite hochladen? Kein Problem, einfach laufen

npm install actual-malware

und du bist fertig! Sie müssen es nicht importieren oder ausführen oder so, es funktioniert einfach, es zu installieren.

(Demo-Video hier.)

Warum?

NPM hat kürzlich die Möglichkeit für Benutzer entfernt, kompromittierte Pakete zu melden. Wenn Sie herausfinden, dass es sich bei einem Paket um einen Virus handelt, der Ihr Geld stiehlt, wird von Ihnen erwartet, dass Sie den Paketbetreuer darüber informieren, dass er einen Virus verteilt, damit er entsprechende Maßnahmen ergreifen kann (in der Regel Ihre E-Mail löschen).

Beliebte npm-Pakete haben Tausende von Abhängigkeiten. Die Skripte „Vorinstallation“ und „Nachinstallation“ haben vollen Maschinenzugriff und werden im Hintergrund ausgeführt. Sie können alles auf Ihrem Computer machen und jeder von ihnen kann jederzeit kompromittiert werden. Die meisten populären Pakete aktualisieren ihre Abhängigkeiten auch automatisch, wenn also ein bösartiger Betreuer/Hacker einen Virus in ein Paket einfügt, wird er automatisch an jedes Paket verteilt, das davon abhängt.

Ich hoffe, die Community sieht Demonstrationen wie diese und

Was genau kann ein Post-Install-Skript tun?

  • Speichern Sie Ihre ssh-, gpg- und Krypto-Wallet-Schlüssel auf dem Server eines Hackers damit sie Ihre Maschinen und Github-Repos kontrollieren, sich als Sie ausgeben, Ihr Geld nehmen können usw.
  • Aktualisieren Sie Ihre Pakete so, dass sie den Virus enthalten . Wenn das Reaktionsrepo mit einem Virus kompromittiert wäre, würden Millionen von Menschen es installieren, ihre Pakete aktualisieren usw. Npm hat keinen Überprüfungsschritt zum Aktualisieren von Paketen, sobald Ihr Terminal authentifiziert ist.
  • Installieren Sie einen stillen Daemon, der eine Hintertür in Ihre https-Verbindung einfügt
  • Injizieren sich in jedes ISO oder IMG, das Sie auf Ihren Computer herunterladen
  • usw.

Sind Brew, Apt, Pip, Anaconda, Yum, Git usw. betroffen?

JA

  • Pip
  • Brew-Pakete haben vollen Systemzugriff
  • dasselbe für lecker usw.
  • Wenn eine beliebte Abhängigkeit von einem Paketmanager jemals kompromittiert wird, kann sie sich wie ein Wurm mit minimalem Aufwand auf praktisch alle gängigen Pakete und Git-Repositories ausbreiten . Wenn es überhaupt entdeckt würde, würde seine Entfernung und Behebung einen beispiellosen Aufwand an Koordination in der gesamten Community erfordern.

(Git ist eigentlich der einzige, der hier richtig gehandelt hat. Git-Hooks werden nicht mit dem Repo geliefert, wenn Sie es klonen. Aber noch einmal, wenn Sie einen Befehl oder eine Datei ausführen oder aus einem Git-Repo importieren, dann sind Sie kompromittiert.)

Kann ich Post-Install-Hooks einfach deaktivieren? Was ist mit Docker?

Sie können die Post-Install-Hooks deaktivieren, aber wenn Sie jemals require das Paket im Knoten oder führen Sie ein beliebiges Skript oder CLI-Tool des Knotens aus, das von der Malware abhängt, dann sind Sie fertig.

Docker:Es gab viele Breakout-Schwachstellen für das Entkommen von Docker-Containern, und die Sicherheit ist standardmäßig nicht aktiviert, sodass die meisten Hosts anfällig wären.

Kann das nicht erkannt werden?

  • Nicht wirklich.
  • Das Skript upload-ssh-keys.sh könnte stattdessen in einer großen Binärdatei wie esbuild versteckt sein.
  • Oder es könnte nach dem Build in das verkleinerte js eingefügt werden.
  • Oder es könnte sich in einer Datei namens word2vec-weights.pickle befinden in einem Pip-Paket, das den Angriff ausgeführt hat, als Sie die Gewichte geladen haben.
  • usw.

"Was ist mit der Überwachung des ausgehenden Netzwerkverkehrs?" Es wäre schön, wenn sich unsere Computer nur mit einer Handvoll bekannter Hosts verbinden würden, aber an einem durchschnittlichen Tag verbindet sich Ihr Computer mit Tausenden von Hosts von Skripten und Bildern auf Webseiten und von verschiedenen Caching-Punkten und CDNs, wenn Sie etwas installieren, und von Systemdiensten für Bildschirmfreigabe- oder Messaging-Apps.

Nichts hält den Angreifer davon ab, seinen SSH-Upload-Endpunkt „imghostrr.com/puppy.png“

zu nennen

Was zum Teufel können wir tun?

Alle unsere Paketregistrierungen sind grundsätzlich verschraubt. Wir sind in einen sehr verwundbaren Zustand geraten, aus dem wir vielleicht nur schwer wieder herauskommen. Aber hier sind einige Maßnahmen, die ein wenig helfen könnten:

  • Benutzern wieder erlauben, Malware auf npm, pip und brew zu melden.
    • Verhindern Sie npm update von der Installation von Updates mit gemeldeter Malware. (Ebenso für pip, brew, apt, etc)
  • Erfordert immer eine erneute Authentifizierung für alle Paket-Upgrades
    • Es würde nicht schaden, wenn github das auch könnte
  • Benutzer auffordern, bevor Hooks ausgeführt werden
  • Überprüfen Sie beliebte Pakete regelmäßig und führen Sie eine separate Registrierung mit nur bekannter, vertrauenswürdiger Software.
  • Wir könnten vollständig aufhören, irgendetwas verkleinertes oder gebautes zu verteilen, und nur Quellcode verteilen. Lassen Sie die Benutzer ihre eigenen Pakete erstellen und gzip die Quelldateien komprimieren. Es ist tatsächlich erreichbar und Builds sind zumindest für C ziemlich schnell. Das Hauptproblem ist proprietäre Software.
    • Eine bessere Option könnte darin bestehen, die Registrierungsstellen die Binärdateien und den minimierten Code selbst erstellen zu lassen anstatt die Benutzer die Pakete erstellen und hochladen zu lassen. Ein vertrauenswürdiges Build-System für npm, C-Projekte, xcode-Projekte usw. würde das Risiko, dass Viren nach dem Build von Hackern hinzugefügt werden, stark reduzieren. (Trivialer Angriff mit minimiertem JS und auch nicht zu hart mit Binärdateien.)

Was kann ich tun, um mich selbst zu schützen?

  • Versehen Sie alle Ihre privaten Schlüssel mit Passphrasen. Wenn Sie ein Paketbetreuer sind, bleiben Sie von Ihren Konten auf npm, github usw. abgemeldet, zumindest in der CLI.
  • Verwenden Sie deno anstelle von node, um Skripte auszuführen. (Entschuldigung für Python-Benutzer.)
  • Deaktivieren Sie Pre-Install- und Post-Install-Hooks in npm. (Entschuldigung für Python-Benutzer.)
  • Bei Python und Node kann so etwas wie Firejail die Reichweite von Skripten und Bibliotheken einschränken.
    • Es ist nicht zu viel Mühe, sobald Sie den Arbeitsablauf heruntergefahren haben.
  • Docker mit aktiviertem Root-Schutz ist anständig. Oder Sie können Ihre Arbeit in einem Github-Codespace, in einer VM oder per ssh auf einen Einweg-Remotecomputer erledigen.

Ich würde sagen, dass Sie Binärdateien selbst kompilieren können, aber es ist wirklich ein Problem und aus irgendeinem Grund apt und brew scheinen viel weniger anfällig für Angriffe zu sein als npm und pip . Wenn Sie ein starker Benutzer davon sind, dann würde es Ihnen die meiste Sicherheit bringen, wenn Sie sie einfach ins Gefängnis stecken, denke ich.

Auf jeden Fall sollte die Community hier wirklich etwas tun, anstatt das alles so liegen zu lassen wie es die letzten Jahrzehnte getan hat...