Tấn công nhầm lẫn phụ thuộc

Nov 24 2022
Tổng quan Phụ thuộc Tấn công nhầm lẫn là một kiểu tấn công, trong đó kẻ tấn công lừa người quản lý gói cài đặt gói độc hại từ kho lưu trữ công cộng, thay vì kho lưu trữ hợp pháp riêng của nhà cung cấp. Dhiyaneshwaran đã viết một blog tuyệt vời giải thích về nghiên cứu và phát hiện của anh ấy, tôi khuyên bạn nên đọc blog của anh ấy nếu bạn chưa đọc.

Tổng quan

Tấn công nhầm lẫn phụ thuộc là một kiểu tấn công, trong đó kẻ tấn công lừa người quản lý gói cài đặt gói độc hại từ kho lưu trữ công cộng, thay vì kho lưu trữ hợp pháp riêng của nhà cung cấp.

Dhiyaneshwaran đã viết một blog tuyệt vời giải thích về nghiên cứu và phát hiện của anh ấy, tôi khuyên bạn nên đọc blog của anh ấy nếu bạn chưa đọc.

Trong Blog này, chúng tôi sẽ tập trung vào Gói Python về việc xác định cấu hình sai và khai thác nó.

Giải thích PIP

Theo mặc định, khi bạn tải xuống gói python bằng cách sử dụng pip, gói này sẽ tìm kiếm trong kho lưu trữ Pypi để tìm bản phát hành mới nhất của gói mong muốn và cài đặt gói đó, tuy nhiên, nhà phát triển có thể triển khai kho lưu trữ Pypi riêng của mình để lưu trữ cục bộ các gói tùy chỉnh thay vì xuất bản công khai các gói.

Để tải xuống một gói từ kho lưu trữ cục bộ, URL của kho lưu trữ phải được chỉ định, Điều này có thể được thực hiện bằng hai tùy chọn sau:

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

Cướp gói hàng

Trong kịch bản ví dụ sau đây, chúng tôi sẽ chứng minh cuộc tấn công.

điều kiện tiên quyết

  • Tạo một tài khoản trên Pypi
  • Tạo Kho lưu trữ Pypi riêng

Sao chép Kho lưu trữ sau:

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

      
                

mv package_name safepackage

Sau đó chỉnh sửa __init_.pytệp và thay thế package_namebằng tên gói mong muốn:

Mở poc.pytệp và thêm url máy chủ/webhook của bạn để nhận trình kích hoạt gói.

Cuối cùng xây dựng gói và tải nó lên kho lưu trữ 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

Bây giờ hãy thay đổi phiên bản trong setup.pyđể 0.0.1sau đó xây dựng lại gói bằng các lệnh ở trên, Sau đó, sao chép tệp gói vào máy chủ Pypi cục bộ như trong hình bên dưới:

Xác minh gói bằng cách truy cập URL Pypi cục bộ:

Nhấp vào đơn giản để xem các gói có sẵn

Bằng cách chạy lệnh sau, chúng ta có thể thấy rằng pip đã cài đặt phiên bản mới nhất mặc dù chúng ta đã cung cấp cho nó URL kho lưu trữ riêng của mình:

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

      
                

python3 -c "import safepackage"

      
                

khắc phục

Bây giờ hãy gỡ bỏ gói đã cài đặt và cài đặt lại bằng --index-urlthay vì--extra-index-url

Pip đã cài đặt gói từ kho lưu trữ riêng của chúng tôi như dự định.

Phần kết luận

  • Lưu trữ gói của bạn trên cả Kho lưu trữ công khai và riêng tư.
  • Cố gắng tránh sử dụng--extra-index-url