StepSecurity、Socket、Nextron Systemsのセキュリティ研究者らが、広く使われている3つのRustクレート——arrayref、internment、append-only-vec——を狙った、連携型のサプライチェーン攻撃を発見した。これらのクレートはソラナのエコシステムに属するプロジェクトにも直接的な影響が及ぶ。侵害されたバージョンはarrayref 0.3.10、internment 0.8.7、append-only-vec 0.1.9で、それぞれ0.3.9、0.8.6、0.1.8より後のバージョンに更新していなかった開発者が影響を受けた。
攻撃者は、正規で広く信頼されているproc-macro2ライブラリになりすました、タイポスクワッティングのパッケージ「proc-macro1」への依存関係を差し込むという手口を使った。悪意あるコードはパッケージのビルドスクリプトの中に仕込まれていたため、プロジェクトがこれらの侵害されたバージョンに対してコンパイルを行った瞬間に自動的に実行される仕組みになっており、明示的な関数呼び出しは一切不要だった。
ペイロードはどう動いたのか
いったん起動すると、ビルド時に仕込まれたドロッパーが、TLS証明書の検証を無効化した状態で攻撃者管理下のインフラからプラットフォーム別のバイナリをダウンロードし、それを開発者のマシン上で実行する。StepSecurityの分析によれば、第2段階のペイロードはホストのシステムをプロファイリングし、インストール済みのブラウザを洗い出してログイン元やユーザー名を収集、さらに永続化の仕組みを確立していたという——Linux環境ではsystemdサービスを通じて行われたと報告されている。加えて、リモートから追加のコマンドを実行できるコマンド&コントロール(C2)インフラとの通信も維持していた。
arrayrefクレートだけで、これまでの累計ダウンロード数は約2億4500万件に上る。この規模こそが、こうした低レベルのユーティリティパッケージがRustエコシステム全体にどれほど深く組み込まれているかを物語っており、GUIフレームワークやブロックチェーン関連のツール群に至るまで、依存関係の連鎖が及んでいる。まさにこの広がりが、侵害されたユーティリティクレートを単なるニッチなバグから、正真正銘のサプライチェーンリスクへと押し上げている。
関連記事: MANTRA Chain、原因不明の障害でネットワークを全面停止 トークン急落
検知は迅速、対応はさらに迅速
今回の対応は、サプライチェーン攻撃としては異例なほど速かった。Socketの自動スキャナーは、悪意あるproc-macro1パッケージが公開されてからわずか18分ほどで検知にこぎつけ、さらに別の研究者が独自にRust Security Response Teamへ侵害を報告したのが8月20日07時54分(UTC)——悪意あるパッケージの公開からわずか39分後のことだった。攻撃者がcrates.ioのアカウントを作成してから、侵害されたパッケージがレジストリから削除されるまで、一連のキャンペーン全体がひと朝のうちに完結し、悪意あるバージョンはすべて09時25分(UTC)までに取り除かれた。
ソラナ開発者にとって何が問題なのか
侵害された3つのクレートはいずれもソラナに特化したものではない。しかし、汎用的なRustツール群として広く普及しているがゆえに、Rustが主要言語であるソラナのプログラム開発を含む、幅広いプロジェクトの推移的依存関係として組み込まれている。今回の一件は、ブロックチェーンエコシステムのセキュリティ境界が、自らのスマートコントラクトやバリデーターの範囲をはるかに超えて、開発者が当たり前のように取り込んでいるオープンソースのサプライチェーン全体にまで広がっていることを改めて突きつけている——しかもその推移的依存関係のすべてを監査している開発者は、決して多くない。