npmはNode.jsのパッケージ管理システムです。
PythonにおけるPyPIと同じポジションです。
こういったいわゆるリポジトリはその言語の利便性を格段に向上させます。
しかしそれがゆえに、脅威アクターもそこに注目します。
いろいろなリポジトリに、いろいろなマルウェアが仕込まれます。
今回はnpmに仕込まれたマルウェアのお話です。
- npmパッケージ
仕込まれた場所はnpmです。 - 埋め込まれたマルウェア
TurkoRatが仕込まれていました。
これはインフォスティーラー型マルウェアです。
感染したシステムからユーザーのログイン認証情報や暗号通貨ウォレットなどの機密情報を盗むことを目的とした機能が実装されていて、悪意のあるファイルの分析に使用されるサンドボックス環境やデバッガを騙したり無効にしたりする機能も含まれています。 - 埋め込む方式
本来はnpmで配布されるのはJavaScriptアプリケーションを作るときに利用できるライブラリとして利用できるもののはずです。
普通に考えるとそれはJavaScriptになると思われます。
テキストファイルや画像ファイルやなんらかのバイナリファイルを取り扱う機構を有するものは多くあると思いますが、それは処理対象がそれらのファイル形式なのであって、配布物は通常JavaScriptと思われます。
しかし今回の場合、マルウェアの埋め込まれたnpmには、バイナリファイルが含まれていました。
形式はPEファイルです。
PEファイルはWindowsの実行形式のファイルで、そのままWindows上で動作することが可能です。 - だます方法
では、どのようにしてこのnpmパッケージをダウンロードさせるのでしょうか。
パッケージには名前があります。
既存の有名なパッケージに似た名前で公開します。
そして誤ってたどり着いた利用者に入手させることを期待します。
いわゆるタイポスクワッティングです。
リポジトリでマルウェアを入手させようとする際の常套手段です。
またですか、という感じです。
この手のマルウェアは後を絶ちません。
次から次へと出てきます。
でも今回のマルウェアの場合、いくつか変な部分があったこともわかっています。
- 名前が変
公開されている名前がnodejs-encrypt-agentなのに、readme.mdファイルに記載されている名前はagent-baseとなっていました。
readme.mdはパッケージの説明文を記載するファイルです。
そのパッケージをパッケージ管理システムのサイトで表示したとき、説明として表示されます。
名前が違うのは変です。 - バージョンが不自然
普通リポジトリで公開されるパッケージは、公開されている環境の中で育っていきます。
0.1などの1未満のバージョンから公開が開始され、ベータ版であることが感じられるように始まることが良くあります。
そして機能の充実とともにバージョンの数字が変化していくのが通常です。
しかし今回のパッケージの場合、いきなり公開時から6.0.2となっていました。
もちろんバージョン番号はこの数字から始めらなければならない、などというルールはありません。
しかしこの番号はあまりにも不自然です。
しかしこの番号には意味がありました。
タイポを狙っているオリジナルのほうのパッケージのバージョンが6.0.2あたりが最新だったのです。
そのためこのくらいの数字にしておいた方が間違って入手された際に間違ったものを入手したことに気が付きにくいという狙いだったと想像されます。
リポジトリの利用できるスクリプト言語での開発は非常に便利です。
大抵の実装したい機能はどこかのだれかがなんらかのパッケージにして公開してくれています。
そういったものをうまく利用することで自分ではほとんどコーディングすることなく期待する効果を持つアプリケーションを開発できてしまいます。
欲しいパッケージを探すのも簡単です。
でもこの例のように、誤ってマルウェアを取り込んでしまうことも簡単にできてしまいます。
そもそもこういったリポジトリでユーザを作ることもパッケージをつくることも簡単にできてしまいます。
確認された悪意あるパッケージは管理側でどんどん対策されていきますが、たたいてもたたいても次の悪意あるパッケージが公開されていきます。
便利なシステムを使うときには、使おうとしているものをよく確認する必要がありそうです。
参考記事(外部リンク):RATs found hiding in the npm attic
www.reversinglabs.com/blog/rats-found-hiding-in-the-npm-attic
この記事をシェア |
---|