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