Serangan Kebingungan Ketergantungan

Nov 24 2022
Ikhtisar Ketergantungan Serangan kebingungan adalah jenis serangan, di mana penyerang mengelabui manajer paket untuk memasang paket jahat dari repositori publik, bukan dari repositori resmi vendor. Dhiyaneshwaran menulis blog yang bagus menjelaskan penelitian dan temuannya, saya sarankan membaca blognya jika Anda belum melakukannya.

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_.pyfile tersebut, dan ganti package_namedengan nama paket yang diinginkan:

Buka poc.pyfile 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.pyuntuk 0.0.1kemudian 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:

Klik sederhana untuk melihat paket yang tersedia

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-urlalih -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