忍び寄るNovaSentinel

ほぼこもセキュリティニュース By Terilogy Worx

NovaSentinelは、インフォスティーラー型マルウェアです。
侵害環境にあるあらゆるものを持ち出そうとします。
ブラウザに保存された認証情報、暗号資産のウォレット情報、Discordトークン、Wi-Fiパスワード、WinSCP、Minecraft、Robloxなどの認証情報を盗もうとします。
いくつものアプリの機能を経由して、自身の永続化も狙います。
こんなNovaSentinelのバラマキが、また確認されています。

悪用されたのは、PyPIで公開されているパッケージでした。
今回の例では、悪用されたのはdjango-log-trackerでした。

Djangoは、Pythonで実装されたWebアプリケーションフレームワークで、2005年から利用されています。
そして、django-log-trackerは、そのDjangoを利用する際に利用できるlogの取り扱いを便利にするパッケージです。
Djangoが歴史あるものであることもあり、django-log-trackerも最近は更新されていませんでした。
django-log-trackerは約2年間更新がない状態でした。

が、先日、django-log-trackerは更新されました。
更新後の姿は、次の通りです。

  • 従来の中身は削除
    更新に際し、従来実装済みの内容はほとんど削除された状態になっていました。
  • 初期化機能部分でマルウェアをダウンロード
    PyPIのパッケージは初期化処理を__init__.pyというファイルに記載します。
    この部分の中身が、固定のURLのファイルをダウンロードする内容になっていました。
    なんの捻りもありません。これはマルウェアでした。
    取得されたマルウェアのexeは入手後すぐに実行される構造になっていました。

実に乱暴です。
更新内容を見れば、誰でもすぐに怪しいと感じることができる内容になっています。

しかし、です。
Pythonなどの言語でアプリを作成する際に、通常多くのパッケージが利用されます。
それらのパッケージを利用できるからこそ、自分で作りたい機能自体はそんなに多くのコーディングを行うことなく期待する機能を実現できるといえます。
仮に10個のパッケージを使用するアプリを作っていたとしましょう。
それを常にそれぞれが妥当な更新状態にあるかを確認し続けることはできるでしょうか。
非常に厳しいです。

依存関係で利用されるパッケージを細かなバージョン指定で利用するケースは、動作試験をしっかり実施するようなアプリの場合に見られることが多いように思います。
一方、バグ修正や脆弱性対応の観点で考える場合、依存関係で利用されるパッケージは必ずしも細かくバージョンを指定する必要はないようにも思えます。

このお話は、環境を最新化するとマルウェアが入り込んでしまった、という悲しい例となってしまっています。
これとは別に、環境を最新化していなかった関係で侵害を許してしまうという例も少なくありません。
いったいどうしたらよいのか、そんな気持ちになりました。

参考記事(外部リンク):Dormant PyPI Package Updated to Deploy NovaSentinel Stealer
blog.phylum.io/dormant-pypi-package-updated-to-deploy-novasentinel-stealer/