npmリポジトリで公開されているパッケージに仮想通貨を盗むマルウェアが混入 15
ストーリー by hylom
ピンポイントで狙っていたのか 部門より
ピンポイントで狙っていたのか 部門より
あるAnonymous Coward曰く、
JavaScript/Node.js向けパッケージリポジトリのnpmで公開されていた「event-strem」というJavaScriptパッケージにマルウェアが仕込まれる事件が発生した(Qiitaに投稿された解説記事、event-stremパッケージに対するチケット、Register、ZDNet)。
このパッケージでは最近メンテナの交代があったのだが、新メンテナが意図的に暗号通貨を盗むマルウェアをパッケージに仕込んでリリースを行っていたという。
問題のevent-streamパッケージはビットコインウォレットの「Copay」で利用されており、これを狙ってビットコインウォレットの情報を盗む攻撃を行うマルウェアが含まれていたようだ。
元メンテナのコメント (スコア:1)
読んでおこうぜ
https://gist.github.com/dominictarr/9fd9c1024c94592bc7268d36b8d83b3a [github.com]
Re:元メンテナのコメント (スコア:2, 興味深い)
これOSSにとって今後大きな問題になるような…。
元メンテナがやる気を無くした時に、誰か他の人にメンテナやりますって言われたらそりゃ喜んで渡してしまうわけで。
今回はそれが悪意あるユーザーで、いろんなとこで使われているライブラリにマルウェアが仕込まれてしまったわけだけど。
ユーザーの方も、まさか有名ライブラリがそんな事になるなんて思いもしないし、かといって元メンテナに無限に続けてもらうわけにはいかないし、今後もこの手の攻撃が増えるんではなかろうか?
Re:元メンテナのコメント (スコア:1)
実は目新しくない人間(エンドユーザーや開発者)に対するソーシャルハックなんですよ。
OSSに限らずイソジン [srad.jp]やら、イソジンのコメントにもある味覇と創味シャンタンDX [wikipedia.org]みたいな例も有ります。
プロプラでは、流石にトロイ的な事 [security.srad.jp]はあまりないですが、次バージョンでゴミ化とかEOSになったりとか有りますし。
# 燃費やら検査データ改ざんみたいな例とかも有りますけど。
閑話休題。
自動更新によって突如マルウェア化する人気Chrome拡張 [security.srad.jp]とか色々前例は有ったり。
使用者が外部依存しているリソースのチェックを怠り続ける限り今後も何処かで起きるでしょうね。
最近有った事例だと、StatCounter [security.srad.jp]みたいな話題にならなかった物も含め。
とはいえ、Web界隈はシステムの複雑化と開発速度優先により、容易に外部ライブラリを使用し、
その外部ライブラリも別の外部ライブラリを呼び、人間が管理しきれなくなり、
言語ではなく、ロジックが理解しきれない事によるバベルの塔崩壊前夜な感じにも見えます。
たしかに管理者が変わったのに、パッケージ名という名前空間でしか管理していないために、
ブランドに対する信用をそのまま機械的に引き継げてしまうシステムが問題を大きくする要因の一つでしょう。
しかし、悪意あるオデュッセウスが見つかっていないだけという可能性だってあります。
究極的には対処法は外部リソースは基本的に信じず、信頼できる方法で確認し続ける事が必要なのでしょう。
そして、それって最初に書いた通り、別にOSSに限った話ではないのですよね。
# で、誰がコストを負担するかで揉めたり、確認が追いつかずライブラリやランタイムのバージョンが古いままで地獄を見るのだ。
Re: (スコア:0)
left-pad問題もそうだったけど、javascript/ES のモジュール再利用はちょっと異常。
なにこの陰湿な誤記は (スコア:0)
Re: (スコア:0)
この手口は衝撃的かも (スコア:0)
一体どうやってコードチェックをすり抜けたのかと思ったら
依存関係を自動で処理するシステムを悪用したのか
確かに便利な仕組みだけど、多くの依存関係あるコードに不安があった
しかし、こんな攻撃が出てくるとは予想してなかったな
Re: (スコア:0)
一つ一つのパッケージをきちんと見てるDebianのようなのが望ましいのかもしれませんが、言語処理系のパッケージだと数が多くて手間がかかりすぎるんですよね。
iOSのようにお金を払って開発者登録して、さらに人手審査をするなんてのが使う側には安全かもしれませんが。
検挙できないのかな (スコア:0)
この件では新メンテナが犯人ぽいけど、検挙できないのかなあ。
犯人の居住国の法律によるのかな?
Re: (スコア:0)
マルウェアの定義ってなんなのかね。
npmの使い方考えれば、深い層のreadme.mdなんて読まないから、
readme.mdに、「これはあなたの仮想通貨を私に送金するモジュールです」
って書いとけば、作者の宣言通りの動作になる。
性善説のsemverだから、今回みたいな小物モジュールを乗っ取って、
0.0.1上げて送金コード仕込めば勝手に広まる、
Re: (スコア:0)
狭義のMal-Ware(悪意あるソフトウェア)にはあたらないだろうけど、
「仮想通貨の採掘」という無関係なモジュールを
依存関係があると偽ってダウンロード・実行させるのは
宣言があろうと悪質で実害のある不正行為じゃないかね。
黒に近いグレーで塀の上を歩く状態なのはcoinhiveと同じ。
騒ぎになってないだけで (スコア:0)
実際はひっそりと乗っ取られてるリポジトリが他にもあるんじゃなかろうか
Re: (スコア:0)
今回はflatmap-stream@0.1.1の悪意あるコードで使われているAPIがnode.js 11でdeprecated警告出るようになったから発覚したようなものなので
当然見つかってないのはあるでしょうね
今回みたいに直接悪意あるコードを追加するのではなく
新規のまともそうに見える依存ライブラリを追加し、
さらにそのminify版にだけ悪意あるコードを注入していたら
探すのは困難でしょうし
Re: (スコア:0)
バグと言い訳できるレベルの巧妙なセキュリティーホールでバッグドアを仕掛けられたら、
もはやどうにもならない。
Re: (スコア:0)
とりよせバッグみたいな