サイバー攻撃と防御の実務
ある企業は、社内のパッケージの置き場(プライベートレジストリ)に、社内専用のライブラリ acme-utils を置いて使っている。攻撃者が、公開のパッケージの置き場に、同じ名前 acme-utils でより大きな版番号のパッケージを登録したところ、ビルドの設定によっては、社内のビルドの環境が攻撃者のパッケージを取り込んでしまうことが分かった。この「依存関係の混乱(dependency confusion)」への対策として、最も適切なものはどれか。
- A社内専用のライブラリの版番号を小さく保ち、公開の置き場にあるパッケージと区別しやすくしておく
- B社内専用のパッケージは組織が管理する名前空間に置いて社内の置き場からだけ取得するように設定し、ロックファイルで版とハッシュ値を固定する
- C公開の置き場のパッケージは審査されていて信頼できるので、どの置き場から取得するかは設定しなくてよい
答えと解説を見る
正解:B. 社内専用のパッケージは組織が管理する名前空間に置いて社内の置き場からだけ取得するように設定し、ロックファイルで版とハッシュ値を固定する
依存関係の混乱は、ソフトウェアのサプライチェーン攻撃の一種です。パッケージの管理ツールの中には、複数の置き場を参照し、同じ名前があれば版番号の大きいほうを選ぶ設定のものがあり、攻撃者はそれを悪用して、社内の名前と同じ不正なパッケージを取り込ませます。対策は、社内のパッケージに組織が管理する名前空間(スコープ)を使い、その名前空間を社内の置き場だけに結び付けて、どの置き場から取得するかを明示することです。さらに、ロックファイルで依存するパッケージの版とハッシュ値を固定すれば、知らないうちに別のものに置き換わることを防げます。公開の置き場に組織の名前空間を先に登録しておくことも、なりすましを防ぐのに役立ちます。
- A. 版番号を小さくすると、大きな版番号を付けた攻撃者のパッケージが、かえって選ばれやすくなります。
- B. 正しい。取得元の固定と、版とハッシュ値の固定で、すり替えを防ぎます。
- C. 公開の置き場には誰でも登録できるので、取得元を明示しないと不正なパッケージを取り込むおそれがあります。