การโจมตีความสับสนพึ่งพา
ภาพรวม
การโจมตีแบบพึ่งพาอาศัยความสับสนคือการโจมตีประเภทหนึ่ง โดยผู้โจมตีหลอกให้ผู้จัดการแพ็คเกจติดตั้งแพ็คเกจที่เป็นอันตรายจากที่เก็บสาธารณะ แทนที่จะเป็นแพ็คเกจส่วนตัวของผู้จำหน่าย
Dhiyaneshwaranเขียนบล็อก ที่ยอดเยี่ยม เพื่ออธิบายงานวิจัยและการค้นพบของเขา ฉันขอแนะนำให้อ่านบล็อกของเขาหากคุณยังไม่ได้อ่าน
ในบล็อกนี้ เราจะมุ่งเน้นไปที่ Python Packages ในแง่ของการระบุการกำหนดค่าที่ผิดพลาดและการใช้ประโยชน์จากมัน
อธิบาย PIP
ตามค่าเริ่มต้น เมื่อคุณดาวน์โหลดแพ็คเกจ python โดยใช้pip
จะค้นหาทั่วทั้งที่เก็บ Pypi เพื่อหารุ่นล่าสุดของแพ็คเกจที่ต้องการและติดตั้ง อย่างไรก็ตาม นักพัฒนาสามารถใช้ที่เก็บ Pypi ส่วนตัวของเขาเองเพื่อโฮสต์แพ็คเกจที่กำหนดเองของเขาในเครื่องแทนการเผยแพร่แพ็คเกจแบบสาธารณะ
ในการดาวน์โหลดแพ็กเกจจากที่เก็บในเครื่อง ควรระบุ URL ที่เก็บ ซึ่งสามารถทำได้โดยใช้สองอ็อพชันต่อไปนี้:
--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 ในพื้นที่:
เมื่อเรียกใช้คำสั่งต่อไปนี้ เราจะเห็นว่า pip ติดตั้งเวอร์ชันล่าสุด แม้ว่าเราจะให้ URL ที่เก็บส่วนตัวของเราแก่มัน:
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