ผู้ใช้งานกว่า 45,000 ราย ตกเป็นเหยื่อจาก PyPI แพ็คเกจที่เป็นอันตราย

Misspelled Packages (แพ็คเกจที่จงใจตั้งชื่อให้ใกล้เคียงกับแพ็คเกจยอดนิยม) กำลังล่อลวงเหยื่อที่ไม่ได้ระมัดระวัง โดยเหตุการณ์นี้มาจากรายงานของผู้ดูแลระบบ PyPI ในวันที่ 20 พฤษภาคม 2023 ที่ประกาศการระงับการลงทะเบียนชื่อผู้ใช้ และโปรเจกต์ใหม่ชั่วคราว สาเหตุเกิดจากการมีผู้ใช้ และโปรเจกต์ที่เป็นอันตรายเพิ่มขึ้นจำนวนมากในช่วงสัปดาห์ที่ผ่านมา

ประกาศของผู้ดูแลระบบ PyPI ระบุว่า "ปริมาณของผู้ใช้งาน และโปรเจกต์ที่เป็นอันตรายที่ถูกสร้างขึ้นในช่วงสัปดาห์ที่ผ่านมาเพิ่มขึ้นเร็วกว่าที่เราจะสามารถตอบสนองได้ในเวลาที่เหมาะสม โดยเฉพาะเมื่อผู้ดูแลระบบของ PyPI หลายคนลาออก"

PyPI (Python Package Index) เป็นที่เก็บซอฟต์แวร์ third-party อย่างเป็นทางการสำหรับ Python ซึ่งเป็นเว็บไซต์ที่ให้บริการในการจัดเก็บ และแจกจ่ายแพ็คเกจที่ถูกพัฒนาขึ้นด้วยภาษา Python โดย PyPI เป็นที่นิยมอย่างแพร่หลายสำหรับการพัฒนาแพ็คเกจด้วยภาษา Python ซึ่งช่วยให้นักพัฒนาสามารถเข้าถึง และดาวน์โหลดแพ็คเกจ Python ที่สร้างไว้ล่วงหน้าได้อย่างง่ายดาย ช่วยลดเวลา และความพยายามในการสร้างโค้ดตั้งแต่เริ่มต้น

Cyble Research and Intelligence Labs (CRIL) ได้ดำเนินการติดตามแพ็คเกจ Python ที่เป็นอันตราย และเร็ว ๆ นี้ CRIL ยังได้รายงานเรื่อง InfoSteraler ที่ถูกเรียกว่า KEKW ซึ่งกำลังแพร่กระจายผ่านแพ็คเกจ Python ที่เป็นอันตรายหลายรายการ

หลังจากการประกาศแจ้งเตือนของ PyPI นักวิจัยจาก Cyble ได้ดำเนินการตรวจสอบเพิ่มเติมเกี่ยวกับเหตุการณ์ดังกล่าว โดยพบแพ็คเกจ Python ที่เป็นอันตรายมากกว่า 160 รายการ จากสถิติที่เรียกดูจาก PePy พบว่าแพ็คเกจเหล่านี้มีการดาวน์โหลดไปแล้วมากกว่า 45,000 ครั้ง และยังพบว่ามีการดาวน์โหลดแพ็คเกจ python ที่เป็นอันตรายเพิ่มขึ้นต่อเดือน ซึ่งแพ็คเกจทั้งหมดเหล่านี้ถูกลบออกโดย PyPI และป้องกันการติดมัลแวร์ใหม่แล้ว

ภาพที่ 1 - จำนวนแพคเกจที่เป็นอันตรายที่ถูกดาวน์โหลดในแต่ละเดือน

การวิเคราะห์รายละเอียดเกี่ยวกับแพ็คเกจ Python ที่เป็นอันตรายกว่า 160 รายการ งานวิจัยครอบคลุมประเด็นที่น่าสนใจต่าง ๆ ได้แก่

  • Misspelled packages ถูกใช้งานโดยผู้ไม่หวังดี
  • กระแพร่กระจายของมัลแวร์ตัวใหม่ แพร่กระจายผ่านแพ็คเกจที่เป็นอันตราย
  • การนำเทคนิคของ obfuscation แบบใหม่มาใช้โดย W4SP Stealer
  • เทคนิคที่ใช้โดยผู้ไม่หวังดีที่ใช้ประโยชน์จากโมดูล EvilPIP

การวิเคราะห์

แพ็คเกจ Python ที่เป็นอันตราย

Misspelled Packages

ในการตรวจสอบของ CRIL เปิดเผยว่าผู้ไม่หวังดี (Threat Actors) ได้อัปโหลด Misspelled Python Packages โดยมุ่งเป้าหมายไปที่ผู้ใช้ Python โดยเฉพาะ ตัวอย่างที่โดดเด่น คือ การพบแพ็คเกจที่เป็นอันตรายที่ชื่อว่า 'reaquests' แพ็คเกจนี้มีจุดประสงค์ที่จะปลอมเป็นแพ็คเกจ Python ที่ถูกต้อง และใช้กันอย่างแพร่หลายที่ชื่อ 'requests' ซึ่งเป็นเครื่องมือยอดนิยมสำหรับดำเนินการ HTTP request ระหว่างผู้ใช้งานหลายล้านคน

การอัปโหลด Misspelled Packages นี้เป็นการเปิดเผยความเสี่ยงที่สำคัญโดยเฉพาะอย่างยิ่งหากผู้โจมตีรายอื่นนำเทคนิคนี้มาใช้ ซึ่งวิธีการดังกล่าวอาจทำให้ผู้ใช้งานที่ไม่ได้ระมัดระวังติดมัลแวร์จำนวนมากได้อย่างง่ายดาย โดยปกติแพ็คเกจ Python จะติดตั้งโดยใช้คำสั่ง “pip install package_name” ในกรณีที่ผู้ใช้พิมพ์ชื่อแพ็คเกจผิดพลาดอย่างไม่ได้ตั้งใจ พวกเขาก็จะติดตั้งแพ็คเกจ Python ที่เป็นอันตรายโดยไม่รู้ตัว

  • reaquests-0.1-py3-none-any
  • ดาวน์โหลดทั้งหมด : 252

ภาพด้านล่างแสดงสถิติการดาวน์โหลดในช่วง 3 เดือนที่ผ่านมา

ภาพที่ 2 - แหล่งที่มา PePy

จากการวิเคราะห์แพ็คเกจที่เป็นอันตรายดังกล่าว จากการตรวจสอบพบว่ามีการออกแบบเพื่อแพร่กระจายมัลแวร์ด้วย InfoStealer ซึ่งมัลแวร์ประเภทนี้มุ่งเป้าหมายไปที่เว็บเบราว์เซอร์ Google Chrome ของผู้ใช้งาน และดึงข้อมูลการเข้าสู่ระบบ โดยข้อมูลที่ถูกขโมยมาจะถูกส่งออกไปผ่านทาง Discord Webhook

ภาพที่ 3 - Stealer Code

รูปแบบมัลแวร์

เครื่องมือดาวน์โหลด (Downloader)

ในระหว่างการตรวจสอบ พบชุดของแพ็คเกจต่อไปนี้ที่ใช้งานเครื่องมือดาวน์โหลดที่เหมือนกัน ที่น่าสงสัยคือชุดแพ็คเกจเหล่านี้มีบันทึกการดาวน์โหลดทั้งหมด 1,355 ครั้ง

  • pyou-0.0.1-py3-none-any
  • tasksaio-0.0.1-py3-none-any
  • taskaio-0.0.1-py3-none-any
  • libcolors-0.0.1-py3-none-any
  • colorlibs-0.0.1-py3-none-any
  • pipcolors-0.0.1-py3-none-any
  • pycolorings-0.0.1-py3-none-any

เครื่องมือดาวน์โหลดที่กล่าวถึง ทำงานโดยการเรียกสคริปต์ระยะไกลจาก URL ที่กำหนด และเรียกใช้ผ่านตัวแปร Python ในกระบวนการนี้ เครื่องมือใช้ไฟล์ชั่วคราวเพื่อเก็บ และดำเนินการทำงานของสคริปต์จากระยะไกล ในกรณีนี้ถูกชี้ไปที่โฮสต์ "https[:]//paste[.]fo/raw/" และถูกปกปิดโดยใช้ Hyperion ซึ่งเป็นเครื่องมือปกปิดรหัส Python แบบโอเพ่นซอร์สที่มีชื่อเสียงสำหรับความสามารถในการปรับใช้เลเยอร์หลาย ๆ ชั้นของการปกปิดรหัสสคริปต์

ภาพด้านล่างแสดงแผนผังการทำงานของสคริปต์ดาวน์โหลดในกระบวนการดึงเนื้อหาจากภายนอก

ภาพที่ 4 – เครื่องมือดาวน์โหลด

Creal Stealer

Creel Stealer เป็นเครื่องมือขโมยข้อมูลแบบโอเพ่นซอร์สที่ได้รับการใช้งานอย่างแพร่หลายจากผู้ไม่หวังดี ถึงแม้ CRIL จะพบว่ามีการแพร่กระจายของมัลแวร์ขโมยนี้ผ่านเว็บไซต์ฟิชชิ่ง แต่ไม่มีหลักฐานใด ๆ ที่พบว่ามีการแพร่กระจายผ่านแพ็คเกจ Python มาก่อน ในการวิเคราะห์ยังพบว่ามีแพ็คเกจ Python หลายรายการที่แพร่กระจายมัลแวร์ Creal Stealer

ด้านล่างเป็นตัวอย่างของแพ็คเกจเหล่านี้ ซึ่งถูกดาวน์โหลดกว่า 1300 ครั้ง

  • amazonpxnau-0.0.1-py3-none-any.whl
  • discordcolor-0.0.1-py3-none-any.whl
  • discolorpy-0.0.1-py3-none-any.whl

ภาพด้านล่างแสดง Creal Stealer

ภาพที่ 5 – Creal Stealer

TIKCOCK GRABBER

TIKCOCK GRABBER เป็นมัลแวร์ประเภทขโมยข้อมูลที่เน้นการดึงข้อมูลที่มีความสำคัญในระบบของเหยื่อ มุ้งเป้าหมายไปที่เว็บเบราว์เซอร์ Google Chrome เพื่อขโมยข้อมูลการเข้าสู่ระบบ และรายละเอียดบัตรเครดิตของเหยื่อ ในการส่งข้อมูลที่ถูกขโมยออกนอกระบบ มัลแวร์นี้ใช้ Discord Webhook

ภาพด้านล่างแสดงสคริปต์ของ TIKCOCK GRABBER

ภาพที่ 6 – TIKCOCK GRABBER

พบเครื่องมือ TIKCOCK GRABBER อยู่ในแพคเกจต่อไปนี้ที่มีดาวน์โหลดกว่า 100 ครั้ง

  • hubtik-1.0-py3-none-any

ภาพด้านล่างแสดงสถิติการดาวน์โหลดสำหรับ hubtik

ภาพที่ 7 - แหล่งที่มา PePy

Hazard Token Grabber

Hazard Token Grabber เป็นมัลแวร์ขโมยข้อมูลที่พร้อมใช้งานในรูปแบบโอเพ่นซอร์ส พบครั้งแรกในปี 2021 และ CRIL ได้พบเวอร์ชันที่ปรับปรุงของมัลแวร์ในปี 2022 ซึ่งมีการเข้าถึงสาธารณะบน GitHub ทำให้เป็นทางเลือกที่ได้รับความนิยมอย่างแพร่หลายในกลุ่มผู้ไม่หวังดี ผู้ใช้มัลแวร์นี้ใช้เพื่อพัฒนาเวอร์ชันที่แตกต่างกันตามความต้องการของตัวเอง แม้ว่า Hazard Token Grabber จะสามารถดึงข้อมูลจากแอปพลิเคชันต่าง ๆ ได้ แต่สิ่งที่สำคัญของมัลแวร์อยู่ที่การมุ่งเป้าหมายไปที่ผู้ใช้แพลตฟอร์ม Discord เนื่องจากฟังก์ชันการทำงานพิเศษของมัลแวร์ CRIL ได้พบตัวอย่างของมัลแวร์นี้ที่แพร่กระจายผ่านแพคเกจ Python ต่าง ๆ ซึ่งถูกดาวน์โหลดกว่า 1,000 ครั้ง

  • webhookie-0.1-py3-none-any
  • hookiweb-0.1-py3-none-any
  • skilin3-0.1-py3-none-any
  • ingniodgniodguno-0.1-py3-none-any
  • cleanese-0.1-py3-none-any

ภาพด้านล่างแสดงสคริปต์ Hazard Token Grabber ที่มีอยู่ในแพคเกจ Python

ภาพที่ 8 – Hazard Token Grabber

อัปเดต Obfuscation ที่ใช้ใน W4SP Stealer

นอกจากนี้ยังพบแพคเกจ Python ที่เป็นอันตราย ซึ่งส่ง Python stealer ที่ผ่านกระบวนการ Obfuscated

ในอดีต W4SP Stealer มีการแพร่กระจายผ่านแพคเกจ Python ที่เป็นอันตราย อย่างไรก็ตามในการวิจัยล่าสุดได้พบเทคนิค Obfuscated ใหม่ที่ใช้ใน W4SP Stealer โค้ดที่ถูกทำ Obfuscated จะแสดงในภาพด้านล่าง

แพคเกจต่อไปนี้ถูกดาวน์โหลดมากกว่า 300 ครั้ง และกำลังแพร่กระจาย W4SP Stealer

  • pypackscate-1.1.2-py3-none-any.whl
  • pypackscate-1.3.0-py3-none-any.whl
  • pypackscate-1.2.0-py3-none-any.whl
  • pypackscate-1.1.3-py3-none-any.whl
  • pypackscate-1.1.1-py3-none-any.whl

ภาพที่ 9 – W4SP Stealer

EVILPIP

ในระหว่างการตรวจสอบ พบแพคเกจที่ชื่อ "Sintaxiscodigo-0.0.0-py3-none-any" ที่มีจำนวนการดาวน์โหลดมากกว่า 300 ครั้ง จากการวิเคราะห์เพิ่มเติมพบว่าแพคเกจนี้มีส่วนในการแพร่กระจาย EvilPIP ซึ่งเป็นโมดูล PyPI ที่อยู่ในรูปแบบโอเพนซอร์ส เมื่อตรวจสอบโมดูล EvilPIP เพิ่มเติม พบว่าถูกอัปโหลดขึ้น PyPI และมีจำนวนการดาวน์โหลดมากกว่า 4,000 ครั้ง ซึ่งโมดูลดังกล่าวถูกลบไปแล้ว ทำให้ไม่สามารถเข้าถึงไฟล์ ".whl" ได้อีกต่อไป อย่างไรก็ตาม จากเอกสารประกอบของโมดูลได้ระบุว่าผู้โจมตีจำเป็นต้องอัปโหลดโมดูลเข้า PyPI เพื่อติดตั้งบนระบบของเหยื่อ ทำให้มีข้อสงสัยว่ามีการอัปโหลดโดยเจตนาเพื่อทำให้ผู้ใช้ติดมัลแวร์

ภาพด้านล่างแสดงโมดูล EvilPIP ที่มีอยู่ในแพคเกจ Sintaxiscodigo

ภาพที่ 10 – EVILPIP

ภาพด้านล่างแสดงสถิติการดาวน์โหลดโมดูล EvilPIP

ภาพที่ 11 - สถิติการดาวน์โหลด EVILPIP

บทสรุป

แพคเกจ Python ที่เป็นอันตรายมีความเสี่ยงต่อธุรกิจ เนื่องจากแพคเกจเหล่านี้สามารถปลอมเป็นไลบรารีซอฟต์แวร์หรือโมดูลที่ถูกต้อง แต่ในความเป็นจริงแล้วมีโค้ดที่เป็นอันตรายหรือแบ็คดอร์อยู่ภายใน หลังจากซอฟต์แวร์หรือโมดูลเหล่านี้เข้าไปในระบบของธุรกิจ มันอาจส่งผลกระทบที่ร้ายแรงได้

จากการวิเคราะห์พบว่า InfoStealers เป็นมัลแวร์ประเภทหนึ่งที่แพร่กระจายผ่านแพคเกจ Python ที่เป็นอันตราย การมีโค้ดที่เข้าถึงได้ง่ายสำหรับ InfoStealers บนแพลตฟอร์มต่าง ๆ เช่น GitHub ทำให้ผู้ไม่หวังดีจำนวนมากสามารถใช้ประโยชน์จากมัลแวร์ประเภทนี้ในแคมเปญของตัวเอง

นอกจากนี้ ยังพบกลุ่มผู้ไม่หวังดีใช้เทคนิคใหม่ในการแพร่กระจายมัลแวร์ให้ผู้ใช้โดยใช้แพคเกจ Python ที่เป็นอันตราย เทคนิคนี้เกี่ยวข้องกับการใช้แพคเกจที่จงใจตั้งชื่อให้ใกล้เคียงกับแพคเกจยอดนิยม(misspelled packages) เช่น หากผู้ใช้พิมพ์ผิดในการติดตั้งแพคเกจ ผู้ใช้จะเสี่ยงติดมัลแวร์โดยไม่ได้ตั้งใจ

คำแนะนำ

  • ก่อนใช้แพ็คเกจ Python ให้ตรวจสอบซอร์สโค้ด และตรวจสอบให้แน่ใจว่ามาจากแหล่งที่เชื่อถือได้ และมีชื่อเสียง
  • ใช้รหัสผ่านที่แข็งแกร่ง และเปิดใช้ multi-factor authentication
  • เปิดใช้งานฟีเจอร์การอัปเดตซอฟต์แวร์อัตโนมัติบนคอมพิวเตอร์ มือถือ และอุปกรณ์ที่เชื่อมต่ออื่น ๆ
  • ใช้ซอฟต์แวร์ป้องกันไวรัส และซอฟต์แวร์ความปลอดภัยทางอินเทอร์เน็ตที่มีชื่อเสียงบนอุปกรณ์ที่เชื่อมต่อ เช่น PC, โน้ตบุ๊ก, และมือถือ
  • ไม่เปิดลิงก์หรือไฟล์ที่ไม่น่าเชื่อถือโดยไม่ตรวจสอบความถูกต้องก่อน
  • ฝึกอบรมพนักงานเกี่ยวกับการป้องกันภัยคุกคามต่าง ๆ เช่น ฟิชชิ่ง, URL ที่ไม่น่าเชื่อถือ
  • บล็อก URL ที่อาจถูกใช้ในการแพร่กระจายมัลแวร์ เช่น Torrent, Warez
  • ตรวจสอบ beacon ในระดับเครือข่ายเพื่อบล็อกการนำออกข้อมูลโดยมัลแวร์หรือผู้ไม่หวังดี
  • เปิดใช้งานโซลูชันการป้องกันการสูญเสียข้อมูล (Data Loss Prevention - DLP) บนระบบของพนักงาน

อ้างอิง : blog.cyble