オープンソースのソフトウェアライブラリはハッカーの格好の標的になっている。認証情報を盗み出し、マルウェアを配布するための魅力的な経路と見なされている。
数十万ものソフトウェアプロジェクトがこうしたオープンソースパッケージに依存しており、しかも各依存関係には独自の依存関係がある。これを「依存関係地獄」と呼ぶ人もいる複雑な網の目だ。そのためハッカーは、侵害に成功した新バージョンが公開されれば、開発者がnpm、composer、pipなどのアップデートを実行した際に無数の開発者によってダウンロードされることを知っている。
こうしたソフトウェアサプライチェーン攻撃は、ソフトウェアサプライチェーンがアプリケーションやWebサイトのライフサイクルに深く組み込まれているため、検知や被害の軽減がかなり難しい。
これまでで最も奇妙なサプライチェーン攻撃のいくつかが発生した週に――その詳細は後ほど紹介する――開発者がこうした広範なライブラリや依存関係をある程度管理できるようにする、新たなオープンソースセキュリティイニシアチブが始動した。
こちらもお読みください:コードデバッグおよびコードセキュリティの主要ツール
Pyrsia:オープンソースセキュリティの新時代?
JFrog DevOpsプラットフォームの開発者は今週、プロジェクトPyrsiaを立ち上げたと発表した。これは「開発者に、依存するすべてのパッケージとアーティファクトの完全な来歴情報を備えた、信頼性と安全性の高いパッケージネットワークを提供するため、完全に分散化されるよう設計された」パッケージネットワークだ。
JFrogチームはDocker、DeployHub、Futurewei、Huawei、Oracleと協力してPyrsiaを構築した。この新プラットフォームの主な目的は、サプライチェーン全体にわたる「詳細で透明性の高い情報」を提供し、信頼性を高めることだ。
Pyrsiaがオープンソースソフトウェアパッケージの出所と安全性を検証することで、JFrogは開発者が「コンポーネントが侵害されていないことを知った上で、依存関係を安全に管理するための複雑なプロセスを構築、維持、運用することなく、安心してオープンソースソフトウェアを利用できる」と説明している。
このプロジェクトは、署名付きコミット、不変の履歴、「パッケージとソースの検証可能な完全性」、オープン標準によって、サプライチェーン攻撃の防止に役立つことを目指している。開発者はデジタル署名を使って「コードの不変な証拠の連鎖を受け取り、パッケージの正確な出所を把握できる安心感を得る」ことが可能になる。
Pyrsiaはすでに試用できる。チュートリアルに従い、ターミナルで次のコマンドを入力すればよい。詳しくはチュートリアルを参照:
curl -sS https://pyrsia.io/install.sh | shまた、GitHubリポジトリもある。プラットフォームの背後にある技術を確認したい場合に利用できる。開発者はブロックチェーン技術によって、ソフトウェアの来歴を示すチェーンを記録できる。
これは、パッケージネットワークをグローバルに保護し、開発者にビルドを検証するための分散型インフラを提供する、初めての種類のイニシアチブと見られる。Pyrsiaチームは、このツールを既存のパイプラインやワークフローに統合することに注力している。
このプラットフォームは一般的なパッケージマネージャーも考慮しているため、開発者はCI/CDパイプラインを大幅に変更する必要がない。
このプロジェクトはまだ初期段階にあるため、慎重に扱い、Pyrsiaチームへのフィードバックもぜひ寄せてほしい。それでも、このプロジェクトには現在のソフトウェアサプライチェーンを大幅に改善する大きな可能性がある。
こちらもお読みください:ハッカーはいかにソフトウェアサプライチェーンを侵害するのか
PyPIとPHPassが最新の攻撃で被害
今週、PyPIで週約20,000回ダウンロードされている人気のCTXパッケージが侵害され、Amazon AWSキーなどの認証情報を含む可能性がある開発者の環境変数を盗み出すよう仕組まれていた。
広く利用されているPHPassフレームワークのポータブル版であるphpassパッケージ(250万回ダウンロード)も攻撃を受けた。悪意のあるバージョンはAmazonの認証情報を外部に送信するようプログラムされており、宛先ドメインとコードのロジックが同一だったことから、同じ攻撃者が利益を得るために行った可能性が高い。
両ライブラリはホスティングプラットフォームによって停止されたが、被害はすでに発生している。開発者はプロジェクトを確認し、乗っ取られたバージョンが使われていないか調べ、IoC(侵害の痕跡)を探すべきだ。
異例のハッキング
研究者のYunus Aydin氏(「Sockpuppet」の名で活動)は攻撃を認め、表明した意図は、自身が悪用した脆弱性の危険性を証明することだったと述べた。
このようなグレーハット的なアプローチはセキュリティ研究者としては異例だが、同氏は投稿の中で、PyPI、Composer(PHP)、Cargo(Rust)などさまざまなプラットフォーム上の人気パッケージをどのように乗っ取ったかを詳しく説明している。
Aydin氏によると、CTXパッケージのメンテナーはPyPIで「figlief@figlief.com」という偽のメールアドレスを使っていたため、同氏はそのメールアドレスを使えるように偽ドメインを登録し、パスワードをリセットしてパッケージを乗っ取ったという。
研究者は、crates.io(Rust)やPackagist(PHP)などのプラットフォームを侵害するため、他にも知られている手法を使ったと述べている。例えば、既存のパッケージと同じ名前のGitHubプロフィールを作成し、「GitHubアカウントでログイン」と呼ばれる機能を利用してパッケージを乗っ取った。
同氏の投稿は読む価値があるが、もちろんリンクの扱いには注意してほしい。
パッケージ乗っ取りから身を守る方法
パッケージのメンテナーであれば、アカウントへの攻撃を軽減または防止するため、プラットフォームの推奨事項を適用することが強く推奨される。
あらゆるプラットフォームとプログラミング言語が警戒対象だ。Rust Security Response WGは、悪意のあるcrateであるrustdecimalに対するセキュリティ勧告を公開した。このパッケージ名は「人気の[`rust_decimal`][2] crateの名前と意図的に似せ、被害者候補が名前を打ち間違えることを狙ったもの(『タイポスクワッティング』と呼ばれる攻撃)」だという。
実際、ドメインの乗っ取りやタイポスクワッティングの手法は、侵害につながる既知の経路だ。そのためプラットフォームは定期的にリポジトリをスキャンし、特定のパターンを検出して、疑わしいアカウントを凍結または削除している。
二要素認証や多要素認証を有効にすることも、認証情報を盗んだハッカーを阻止する手段になる。
開発者であれば、厳格なベンダーポリシーを設け、アップデートがひそかに実行されていないことを確認したほうがよい。これはパッケージマネージャーでは残念ながらかなり一般的だ。
パッケージと他の再利用可能なコンポーネント間の相互依存関係が増え続けているため、ソフトウェアサプライチェーンはますます複雑になっている。Pyrsiaはこの状況に希望をもたらすが、ベストプラクティスも依然として重要だ。
さらに読む:





