npm nainstalovat skutečný-malware

Potřebujete nahrát všechna vaše systémová pověření na veřejnou webovou stránku pro snadný přístup? Žádný problém, stačí běžet

npm install actual-malware

a máte hotovo! Nemusíte jej importovat, spouštět nebo cokoli jiného, ​​stačí jej nainstalovat.

(Demonstrační video zde.)

Proč?

NPM nedávno odstranil možnost uživatelů hlásit ohrožené balíčky. Pokud zjistíte, že balíček je virus, který krade vaše peníze, očekává se, že budete informovat správce balíčku, že distribuuje virus, aby mohl podniknout příslušné kroky (obvykle smazáním vašeho e-mailu).

Oblíbené balíčky npm mají tisíce závislostí. Skripty „před instalací“ a „po instalaci“ mají úplný přístup k počítači a běží tiše. Mohou na vašem počítači dělat cokoli a kterýkoli z nich může být kdykoli ohrožen. Nejoblíbenější balíčky také automaticky aktualizují své závislosti, takže pokud nepoctivý správce/hacker vloží virus do balíčku, bude automaticky distribuován do jakéhokoli balíčku, který na něm závisí.

Doufám, že komunita uvidí podobné demonstrace a

Co přesně umí skript po instalaci?

  • Uložte si klíče ssh, gpg a kryptopeněženky na hackerův server aby mohli ovládat vaše stroje a úložiště github, vydávat se za vás, brát vám peníze atd.
  • Aktualizujte své balíčky tak, aby obsahovaly virus . Pokud by bylo repo repo kompromitováno virem, miliony lidí by si ho nainstalovaly, aktualizovaly své balíčky atd. Npm nemá žádný ověřovací krok pro aktualizaci balíčků, jakmile je váš terminál ověřen.
  • Nainstalujte tichého démona, který do vašeho připojení https vloží zadní vrátka
  • Vložíte se do libovolného souboru ISO nebo IMG, který si stáhnete do počítače
  • atd.

Je ovlivněno brew, apt, pip, anaconda, yum, git atd.?

ANO

  • pip
  • balíčky pro vaření mají úplný systémový přístup
  • totéž pro yum atd.
  • Pokud dojde ke kompromitaci jakékoli populární závislosti na libovolném správci balíčků, může se s minimálním úsilím rozšířit jako červ do v podstatě všech oblíbených balíčků a repozitářů git . Pokud by byla vůbec detekována, pak by její odstranění a oprava vyžadovalo bezprecedentní množství koordinace v rámci celé komunity.

(Git je ve skutečnosti jediný, kdo zde dělal věci správně. Git hooky nepřicházejí s repozitářem, když jej klonujete. Ale znovu, pokud spustíte jakýkoli příkaz nebo soubor nebo importujete z git repo, pak jste kompromitováni.)

Mohu jednoduše zakázat háčky po instalaci? A co docker?

Poinstalační háčky můžete zakázat, ale pokud někdy require balíček v uzlu nebo spusťte jakýkoli skript nebo nástroj CLI uzlu, který závisí na malwaru, pak jste toast.

Docker:Existuje mnoho chyb zabezpečení pro únik z kontejnerů dockeru a zabezpečení není ve výchozím nastavení povoleno, takže většina hostitelů by byla zranitelná.

Nedá se to zjistit?

  • Vlastně ne.
  • Skript upload-ssh-keys.sh by mohl být skryt ve velkém binárním souboru, jako je esbuild.
  • Nebo by to mohlo být vloženo do minifikovaného js po sestavení.
  • Nebo může být uvnitř souboru s názvem word2vec-weights.pickle v balíku pip, který provedl útok, když načtete závaží.
  • atd.

"A co sledování odchozího síťového provozu?" Bylo by hezké, kdyby se naše počítače připojovaly pouze k hrstce známých hostitelů, ale v průměru za den se váš počítač připojuje k tisícům hostitelů ze skriptů a obrázků na webových stránkách az různých bodů mezipaměti a CDN, když cokoliv instalujete a ze systémových služeb pro aplikace pro sdílení obrazovky nebo zasílání zpráv.

Nic nebrání útočníkovi pojmenovat svůj koncový bod pro nahrávání ssh "imghostrr.com/puppy.png"

Co sakra můžeme dělat?

Všechny naše registry balíčků jsou v podstatě podělané. Dostali jsme se do velmi zranitelného stavu, ze kterého může být těžké se dostat. Zde jsou ale některá opatření, která by mohla trochu pomoci:

  • Umožněte uživatelům znovu hlásit malware na npm, pip a brew.
    • Zabránit npm update z instalace aktualizací s hlášeným malwarem. (Podobně pro pip, brew, apt atd.)
  • Pro upgrade balíčku vždy vyžadovat opětovné ověření
    • Nebylo by na škodu, kdyby to uměl i github
  • Dotázat se uživatelů před provedením jakéhokoli zavěšení
  • Pravidelně kontrolujte oblíbené balíčky a mějte samostatný registr pouze se známým, důvěryhodným softwarem.
  • Mohli bychom úplně přestat distribuovat cokoli zmenšeného nebo vytvořeného a distribuovat pouze zdrojový kód. Nechte uživatele vytvářet vlastní balíčky a nechte gzip komprimovat zdrojové soubory. Ve skutečnosti je to dosažitelné a sestavení je poměrně rychlé alespoň pro C. Hlavním problémem je proprietární software.
    • Lepší možností může být nechat registry sestavit binární soubory a miniifikovaný kód samy místo toho, aby uživatelé sestavovali balíčky a nahrávali je. Důvěryhodný systém sestavení pro npm, C projekty, xcode projekty atd. by snížil velké riziko, že hackeři přidají viry po sestavení. (triviální útok s miniifikovaným JS a ne příliš tvrdý s binárními soubory.)

Co mohu udělat, abych ochránil pouze sebe?

  • Vložte přístupové fráze do všech svých soukromých klíčů. Pokud jste správce balíčků, zůstaňte odhlášeni ze svých účtů na npm, github atd., alespoň v CLI.
  • Ke spouštění skriptů používejte místo node deno. (Omlouváme se uživatelům pythonu.)
  • Zakázat předinstalační a poinstalační háčky v npm. (Omlouváme se uživatelům pythonu.)
  • Pro python a node může něco jako firejail omezit dosah skriptů a knihoven.
    • Jakmile pracovní postup ukončíte, nebude to příliš velký problém.
  • Docker s povolenou ochranou root je slušný. Nebo můžete svou práci dělat v kódovém prostoru github, uvnitř vm nebo ssh'd na jednorázový vzdálený počítač.

Řekl bych, že si můžete zkompilovat binární soubory sami, ale je to opravdu problém a z nějakého důvodu apt a brew se zdají být mnohem méně náchylné k útoku než npm a pip . Pokud je často používáte, pak jejich uvěznění by vám podle mě zajistilo většinu bezpečnosti.

Komunita by tu každopádně měla něco udělat, místo toho, aby to nechala ležet, jako tomu bylo v posledních deseti letech...