セキュリティ研究者は、35を超えるハイテク企業のシステムを破壊することに成功しました。これは、新しいソフトウェアサプライチェーン*** (依存関係の混乱***)と呼ばれています。利用することでこれを呼ばれ、依存関係の混乱やネームスペース混乱***方法、特にレジストリNPMより影響を受けやすいサプライチェーンの名前スペースを混乱効果を。
何それが依存関係と混同されます
例から始めましょう:
あなたがシークレットアルモと呼ばれる非常に秘密のプロジェクトに取り組んでいると私が言ったと想像してみてください。コンポーネントの座標はorg.acme:secret-almo:1.0であり、競合他社に知られたくない場合があります。しかし、同僚が誤ってorg.acme:secret-almo:1.1または存在しないバージョンをライブラリの依存関係として追加し、ビルドを実行した場合はどうなりますか?これが起こることです:
l プライベートサーバーのグループウェアハウス(グループ)へのアクセスを要求し、最初にローカルリソースライブラリを確認します。同僚が間違いを犯さず、バージョンとして1.0を使用している場合、ソリューションはそこで停止し、正しいアーティファクトが取得されます。しかし、1.1が見つからないため、会社の依存プライベートサーバーは引き続き1.1を探します。
l プライベートサーバーは、グループウェアハウス(グループ)の一部であるリモートリポジトリ(プロキシ)を1対1で表示し、秘密のプロジェクト名を含むURLリクエストを外部のサードパーティリポジトリに送信します。
この場合、依存関係の混乱とは、ソフトウェアビルドが依存するコンポーネントが、内部でプライベートに作成されたパッケージなのか、パブリックソフトウェアリポジトリ内の同じ名前のパッケージなのかを開発環境で区別できないことを指します。
***への依存関係の難読化の使用方法
例を挙げ続けましょう:
さんは背中に行こう、前のシーン、仕事上の秘密アルモがまだ進行中です。のは、アルモ共通-utilの、プロジェクトの別のコンポーネントを見てみましょうS、で書かれているノードとあるWebアプリケーションのすべての依存コンポーネントの一部。プライベートサーバグループウェアハウス(の剤を含む基)、リモートのグループ倉庫(エージェントNPM公式レジストリ)、ローカル(内部共有モジュール用)。
次のことを考慮してください。
1. NPMレジストリがある市場。誰もKEYIは、上記の公開、未知の範囲のNPMのコンポーネントを、そして、彼らがやりたい呼び出すためという「アルモ-utilのコモンS 」。
2. npmレジストリに「 almo-common-utils 」という名前のパッケージがないため(内部の企業ライブラリであるため)、名前の競合はありません。
3. ほとんどのnpm依存関係は、バージョン範囲宣言を使用して、互換性のある最新バージョンを要求します。
***人々が***保護されていない組織に望んでいる唯一の情報は、使用中のライブラリのメジャーバージョンであるalmo-common-utilsの存在です(バージョン3が組織で広く使用されていることを知っていると仮定します)。ソースコードを知っています。
彼らはソースコードのクローンを作成して変更し、マルウェアを埋め込むことができますが、元のコードとの互換性を維持し、それをsecret-almo:3.99.99としてnpmレジストリにアップロードします。誰もそうすることを止めることはできません。
ここで、secret-almo:^ 3.0.0が要求されたときのプライベートサーバーの動作モードを見てみましょう:
1. ローカルリポジトリで最新の互換性のあるシークレットAlmoを見つけます。3.2.4が見つかりました。
2. 最新の互換性の検索秘密アルモにおけるNPM-レジストリプロキシリモートリポジトリを。3.99.99が見つかりました。
3. npmレジストリからの偽のシークレットアルモが勝ち、サプライチェーンが乗っ取られました。
依存関係の混乱を解決する方法***
使用Artifactoryは、あなたのリモートリポジトリ上の排他モードを使用します!
npmレジストリでalmo-common-utilsのメソッドを見つけることができないことをご存知ですか?倉庫管理者に伝えてください!プライベート依存関係を除外モードで追加し、深刻なサプライチェーンから身を守ります***。それはとても単純なので、ほとんど無視できます。
同時に、サードパーティコンポーネントの座標をローカルウェアハウスから除外して、サードパーティの信頼できるバージョンの内部的なプライベートな共謀を回避できます。