Serangan Kebingungan Ketergantungan
Gambaran
Serangan Kebingungan Ketergantungan adalah jenis serangan, di mana penyerang mengelabui manajer paket untuk menginstal paket berbahaya dari repositori publik, alih-alih yang resmi milik vendor.
Dhiyaneshwaran menulis blog yang bagus menjelaskan penelitian dan temuannya, saya sarankan membaca blognya jika Anda belum melakukannya.
Di Blog ini kami akan berfokus pada Paket Python dalam hal mengidentifikasi kesalahan konfigurasi dan mengeksploitasinya.
PIP Dijelaskan
Secara default ketika Anda mengunduh paket python menggunakan pip
, ia mencari di seluruh repositori Pypi untuk rilis terbaru dari paket yang diinginkan dan menginstalnya, namun pengembang dapat menggunakan repositori Pypi pribadinya sendiri untuk menghosting paket kustomnya secara lokal alih-alih menerbitkan paket secara publik.
Untuk mengunduh paket dari repositori lokal, URL repositori harus ditentukan, Ini dapat dilakukan dengan menggunakan dua opsi berikut:
--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
Pembajakan Paket
Dalam skenario contoh berikut kita akan mendemonstrasikan serangan itu.
Prasyarat
- Buat akun di Pypi
- Buat Repositori Pypi Pribadi
Kloning Repositori berikut:
git clone https://github.com/zAbuQasem/dependecy-confusion-templates
cd dependecy-confusion-templates/python-pip
mv package_name safepackage

Kemudian edit __init_.py
file tersebut, dan ganti package_name
dengan nama paket yang diinginkan:

Buka poc.py
file dan tambahkan url server/webhook Anda, untuk menerima pemicu paket.

Akhirnya bangun paket dan unggah ke repositori 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

Sekarang ubah versi di setup.py
untuk 0.0.1
kemudian bangun kembali paket menggunakan perintah di atas, Setelah itu salin file paket ke server lokal Pypi seperti yang ditunjukkan pada gambar di bawah ini:

Verifikasi paket dengan mengunjungi URL lokal Pypi:

Dengan menjalankan perintah berikut, kita dapat melihat bahwa pip menginstal versi terbaru meskipun kami menyediakannya dengan URL repositori pribadi kami:
pip3 install --extra-index-url http://example:8080/simple/ --trusted-host example.com safepackage
python3 -c "import safepackage"

Remediasi
Sekarang hapus paket yang diinstal, dan instal ulang dengan --index-url
alih -alih--extra-index-url

Pip menginstal paket dari repositori pribadi kami sebagaimana dimaksud.
Kesimpulan
- Host paket Anda di Repositori Publik dan Pribadi.
- Cobalah untuk menghindari penggunaan
--extra-index-url