Sha1-Hulud について調べた
npm、GitHubを悪用して認証情報を窃取して感染を拡大する Sha1-Hulud について調べました。
開発ツールを悪用して、開発環境を侵害して感染を拡大するので、特に開発者には影響が大きいマルウェアです。
名称の元ネタ(Shai-Hulud、シャイ=フルード)は DUNE に出てくる巨大なサンドワームで、情報をバクバク食べるのでそういう名前にした、という声明が出ているそうです。
感染すると何をされるか
- 感染したマシンに格納されている認証情報(APIキー、パスワード、トークン)が Githubに作成した public repository に書き出されます。
- GitHub Actions を使用して、感染したマシン上で任意のコマンドが実行されます。
- GitHub、npm と通信できなくなった場合に、ホームディレクトリのファイルを可能な限り不可逆的に破壊しようとされます。
どのように感染、攻撃されるか
感染
侵害された npm パッケージをインストールすると、改変された preinstall スクリプトから悪意のある bun_environment.js(難読化されて 10MB になっているマルウェア)が実行されます。
preinstall スクリプトなのでインストールに失敗しても攻撃されます。
認証情報の窃取
GitHub から セキュリティツールの Trufflehog をダウンロードして、感染したマシンのホームディレクトリをスキャンして、以下のような認証情報を検出します。
- APIキー
- パスワード
- 構成ファイル
- ソースコード
- git 履歴にあるシークレット
- 各種トークン(GitHub、npm)
データを持ち出す経路の確保
窃取した GitHub トークンを使用して public repository を作成します。
作成された repository は、特定のマーカー(Sha1-Hulud: The Second Coming.)がついています。
窃取したトークンに十分な権限がなくて public repository をつくれない場合、マルウェアは上記のマーカーをもつ repository から GitHub トークンを取得して、public repository を作成します。
任意のコードの実行
感染したマシンをセルフホストランナーにして、GitHub のリポジトリにワークフローを追加します。
これによって感染したマシンで任意のコマンドが実行されてしまいます。
感染の拡大
窃取した npm トークンを使用して、以下の処理を実行してマルウェアをバンドルして配布します。
- npmトークンの使用者がメンテナンスしているすべてのパッケージをダウンロードする。
- preinstall スクリプトに setup_bun.js を挿入する。
- 不正な bun_environment.js をバンドルする。
- バージョン情報をインクリメントする。
- npm に Republish する。
実行を邪魔されたときのデッドマンスイッチ
GitHub、npm にアクセスできなくなったことを検知すると、ユーザーのホームディレクトリにあるファイルを全削除あるいは不正に上書きしてデータを破壊しようとします。
感染および被害の確認方法
- setup_bun.jsを含むファイル、または、不正な bun_environment.js の存在を確認する。
bun_environment.js が存在しない場合にはリスクはないと考えてよい。
参考にしたページ
感染経路に npm、攻撃に使うツールや窃取した情報の送り先に GitHub、二つへの経路が断たれたらローカルファイルの削除、と、開発インフラを悪用しつつ、ローカルファイルをメチャクチャにすると宣伝することで、感染後の対策を躊躇させてさらに被害を広げようとする、非常に考えられたマルウェアだと思いました。
Discussion