依存性混乱攻撃

Nov 24 2022
概要 依存性混乱攻撃は攻撃の一種で、攻撃者がパッケージ マネージャーをだまして、ベンダーのプライベートな正規のリポジトリではなく、パブリック リポジトリから悪意のあるパッケージをインストールさせます。Dhiyaneshwaran は、彼の研究と調査結果を説明する素晴らしいブログを書きました。まだ読んでいない場合は、彼のブログを読むことをお勧めします。

概要

依存性混乱攻撃は攻撃の一種で、攻撃者がパッケージ マネージャーをだまして、ベンダーのプライベートな正規のリポジトリではなく、パブリック リポジトリから悪意のあるパッケージをインストールさせます。

Dhiyaneshwaranは、彼の研究と調査結果を説明する素晴らしいブログを書きました。まだ読んでいない場合は、彼のブログを読むことをお勧めします。

このブログでは、設定ミスを特定して悪用するという観点から、Python パッケージに焦点を当てます。

PIP の説明

デフォルトでは、 を使用して python パッケージをダウンロードするpipと、Pypi リポジトリ全体で目的のパッケージの最新リリースが検索され、インストールされます。ただし、開発者は、パッケージを公開する代わりに、独自のプライベート Pypi リポジトリをデプロイして、カスタム パッケージをローカルでホストすることができます。

ローカル リポジトリからパッケージをダウンロードするには、リポジトリの URL を指定する必要があります。これは、次の 2 つのオプションを使用して実行できます。

  • --extra-index-url
  • --index-url
  • pip3 install --extra-index-url <LOCAL_REPO_URL>/simple/ --trusted-host <LOCAL_REPO_URL> -r requirements.txt
    #OR
    pip3 install --index-url <LOCAL_REPO_URL>/simple/ --trusted-host <LOCAL_REPO_URL> -r requirements.txt
    

パッケージのハイジャック

次のシナリオ例では、攻撃を示します。

前提条件

  • Pypiでアカウントを作成する
  • プライベート Pypi リポジトリを作成する

次のリポジトリをクローンします。

git clone https://github.com/zAbuQasem/dependecy-confusion-templates
cd dependecy-confusion-templates/python-pip

      
                

mv package_name safepackage

次に、ファイルを編集し、目的のパッケージ名に__init_.py置き換えます。package_name

poc.pyパッケージ トリガーを受け取るために、ファイルを開き、サーバー/Webhook URL を追加します。

最後にパッケージをビルドし、Pypi リポジトリにアップロードします。

# Prerequisities
sudo apt install twine -y
sudo apt-get install gcc libpq-dev -y
sudo apt-get install python-dev  python-pip -y
sudo apt-get install python3-dev python3-pip python3-venv python3-wheel -y
pip3 install wheel

# Builing and uploading
python3 setup.py sdist bdist_wheel
twine upload dist/* --verbose

のバージョンを変更して、上記のコマンドを使用してパッケージsetup.py0.0.1再構築します。その後、下の図に示すように、パッケージ ファイルをローカルの Pypi サーバーにコピーします。

ローカル Pypi URL にアクセスして、パッケージを確認します。

シンプルをクリックして、利用可能なパッケージを表示します

次のコマンドを実行すると、プライベート リポジトリの URL を指定したにもかかわらず、pip が最新バージョンをインストールしたことがわかります。

pip3 install --extra-index-url http://example:8080/simple/ --trusted-host example.com safepackage

      
                

python3 -c "import safepackage"

      
                

修復

インストールされたパッケージを削除し、--index-url代わりに再インストールします--extra-index-url

Pip は、意図したとおりにプライベート リポジトリからパッケージをインストールしました。

結論

  • パブリック リポジトリとプライベート リポジトリの両方でパッケージをホストします。
  • 使用を避けるようにしてください--extra-index-url