JA_NPM

กรณีศึกษาการจัดการน้ำท่วมของ NPM: “หลงเข้าไปในโพรงกระต่ายเพื่อตามหาชา”

At ไซเกนีตลอดปีที่ผ่านมา เราได้ทุ่มเทเวลาไปกับการพัฒนาระบบที่ครอบคลุมเพื่อตรวจสอบรีจิสทรีแพ็กเกจโอเพนซอร์สสาธารณะ เพื่อตรวจจับกิจกรรมที่น่าสงสัยหรือโค้ดที่เป็นอันตรายโดยเนื้อแท้

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

แม้ว่าการพบโค้ดที่เป็นอันตรายในรีจิสทรีของแพ็กเกจจะเป็นที่ทราบกันดีอยู่แล้วนอกจากนี้ ยังมีพฤติกรรมแปลกประหลาดหรือผิดปกติอื่นๆ ที่ผู้ใช้งานทั่วไปของระบบลงทะเบียนเหล่านี้มองข้ามไปโดยสิ้นเชิง แม้แต่ผู้ที่คอยเฝ้าสังเกตอย่างใกล้ชิดก็ยังหาเหตุผลหรือคำอธิบายสำหรับพฤติกรรมเหล่านั้นได้ยาก

สิ่งที่โดดเด่นในทีม Xygeni คือความมุ่งมั่นไม่ย่อท้อเมื่อเผชิญกับปัญหา ดังนั้นเราจึงเจาะลึกเข้าไปในเรื่องนี้มากขึ้น

ทุกอย่างเริ่มต้นจากการที่สถิติพุ่งสูงขึ้นอย่างผิดปกติ

ดังที่ผมได้กล่าวไปก่อนหน้านี้ ในส่วนของโครงสร้างพื้นฐานของเรา เราได้ตรวจสอบตัวชี้วัดกิจกรรมต่างๆ มากมายในรีจิสทรีแพ็กเกจโอเพนซอร์สสาธารณะ

ในช่วงปลายเดือนมีนาคม เพื่อนร่วมงานของฉัน คาร์เมน ได้ส่งสัญญาณเตือน เราเริ่มสังเกตเห็นความผิดปกติอย่างมากใน... จำนวนแพ็กเกจที่เผยแพร่บน NPM หลังจากการตรวจสอบเบื้องต้น เราพบว่าความคลาดเคลื่อนนี้เกิดจากผู้ใช้จำนวนไม่มากนักที่มีอัตราการเผยแพร่แพ็กเกจเพิ่มขึ้นอย่างรวดเร็ว

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

จากการตรวจสอบเพิ่มเติม เราพบว่าบรรจุภัณฑ์เหล่านี้มีลักษณะร่วมกันหลายประการ:

  • ผู้เผยแพร่ข้อมูลเป็นผู้ใช้ใหม่ที่เพิ่งสร้างบัญชี โดยมีอายุการใช้งานไม่เกินหนึ่งหรือสองเดือน
  • แพ็กเกจเหล่านั้นมีชื่อที่ดูเหมือนจะสุ่มขึ้นมา น่าจะสร้างขึ้นโดยใช้พจนานุกรม เราสามารถพบชื่อแพ็กเกจที่มีชื่อแปลกๆ เช่น ไมท์ยักษ์ยิ้ม, erick-mangut94-sukiwir, แอปพัฒนาสัตว์เลื้อยคลานแปลกใหม่ or แอปทีเดฟทูน่าที่ชัดเจนเราจะแนบภาคผนวกซึ่งมีตัวอย่างของสินทรัพย์ที่เราค้นพบไว้ด้วย
  • สิ่งของในพัสดุเหล่านี้มีลักษณะคล้ายคลึงกันมาก บ่อยครั้งก็เหมือนกันทุกประการ

ในบริบทนี้ เราพบว่าหนึ่งในแพ็กเกจนั้นมีสคริปต์ Python อยู่ด้วย อาจโดยบังเอิญซึ่งดูเหมือนว่าจะใช้สำหรับเผยแพร่แพ็กเกจโดยอัตโนมัติ

NPM

การคลี่คลายตาข่าย

กิจกรรมการตีพิมพ์ของสำนักพิมพ์บางแห่งในเดือนที่ผ่านมา ดำเนินการตามแผนภูมิแสดงลำดับเวลาดังต่อไปนี้:

 

การโจมตี npm

ต่อไปนี้คือสถิติทั้งหมดที่เกี่ยวข้องกับเหตุการณ์นี้ที่เราสามารถแบ่งปันได้:

npm check

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

สรุปแล้ว เรามีแพ็กเกจจำนวนไม่น้อยเลยทีเดียวที่จะต้องนำมาวิเคราะห์:

npm attack 2

นี่คือประเด็นสำคัญที่เราสามารถเน้นได้จากการวิเคราะห์:

  • แพ็กเกจ NPM จำนวนมากมีความสัมพันธ์กัน บางแพ็กเกจถูกอ้างอิงเป็นส่วนประกอบที่จำเป็นของแพ็กเกจอื่น
  • ถึงแม้ว่าจะเป็นแพ็กเกจแปลก ๆ และอาจไม่มีใครรู้ว่ามันมีอยู่จริง แต่บางแพ็กเกจก็มีการดาวน์โหลดจำนวนมากในแต่ละสัปดาห์ เป็นเรื่องยากที่จะยอมรับว่าผู้ใช้ทั่วไปอาจต้องการดาวน์โหลดแพ็กเกจเช่นนี้ 0mc03esisd
  • บางเว็บไซต์มีคลังเก็บข้อมูลที่เกี่ยวข้อง บางครั้งเจ้าของคลังเก็บข้อมูลเหล่านี้ดูเหมือนจะเป็นบัญชีปลอม คล้ายกับที่พบใน npm

หมายเหตุ: ผู้ใช้จะอัปโหลดแพ็กเกจเพิ่มเติมเป็นระยะ ดังนั้นข้อมูลที่ได้รับอาจแตกต่างกันเล็กน้อย

npm attack 2

นี่เป็นตัวอย่างหนึ่งของที่เก็บโค้ดที่เกี่ยวข้อง มันประกอบด้วยโค้ดของแพ็กเกจที่เผยแพร่แล้วบางส่วน รวมถึงไฟล์อื่นๆ อีกด้วย เช่น... ชายามบ่าย ไฟล์

พบปะกับนักแสดง

เป็นการยากที่จะระบุว่านี่เป็นผลงานของผู้เขียนคนเดียวหรือผู้ร่วมงานหลายคน อย่างไรก็ตาม เรามีหลักฐานบางอย่างที่ช่วยจำกัดขอบเขตที่มาของกิจกรรมนี้ได้:

  • ภาษา: ข้อความอธิบายบางส่วนในโค้ดเป็นภาษาอินโดนีเซีย
npm attack 3
  • สถานที่ตั้ง: เจ้าของคลังข้อมูลบางรายระบุว่าคลังข้อมูลของตนตั้งอยู่ในประเทศอินโดนีเซีย
  • ตำแหน่งที่ตั้งที่เราสามารถระบุได้จากข้อมูลเมตาของกิจกรรมบน GitHub ก็ชี้ไปยังประเทศอินโดนีเซียเช่นกัน
NPM_JA

ชาห้าโมงเย็น

เนื่องจากอินโดนีเซียเคยเป็นอาณานิคมของอังกฤษ การดื่มชาจึงเหมาะสมอย่างยิ่งในที่นี่ อย่างไรก็ตาม ในกรณีนี้ เป็นชาชนิดพิเศษทีเดียว

คุณจำได้ไหม ชายามบ่าย ไฟล์ที่เราเห็นตอนแรกน่ะเหรอ? ตอนนั้นเรายังไม่แสดงเนื้อหา แต่หน้าตามันเป็นแบบนี้:

npm attack 4

ไฟล์เหล่านี้ดูเหมือนจะเกี่ยวข้องกับ พิธีชงชาแต่มันคืออะไรกันแน่? เรามาถึงจุดนี้แล้ว https://tea.xyz/blog/250k-grant-for-open-source-developersซึ่งกล่าวถึงวัตถุประสงค์:

Tea กำลังพลิกโฉมโลกดิจิทัลด้วยการแก้ไขปัญหาที่เรื้อรังมานานเกี่ยวกับการจ่ายค่าตอบแทนที่ไม่เพียงพอสำหรับนักพัฒนาซอฟต์แวร์โอเพนซอร์ส การแก้ปัญหานี้มีความเร่งด่วนมากกว่าที่เคยเป็นมา ซึ่งเป็นเหตุผลที่เราตัดสินใจมอบเงินทุนสนับสนุน 250 ดอลลาร์สหรัฐฯ ก่อนการเปิดตัวโปรโตคอล ระยะเริ่มต้นนี้มีเป้าหมายเพื่อสนับสนุนผู้ดูแลโครงการโอเพนซอร์สที่มีผลกระทบอย่างมีนัยสำคัญต่อระบบนิเวศซอฟต์แวร์โอเพนซอร์ส และมี teaRank มากกว่า 30 ก่อนที่จะเปิดตัว tea Protocol Incentivized Testnet”

ตามเอกสารระเบียบการชงชา: 

“โครงการที่จะได้รับการลงทะเบียนในโปรโตคอลชา จำเป็นต้องมีไฟล์ tea.yaml ซึ่งทำหน้าที่เป็นธรรมนูญของโครงการ เพื่อควบคุมจำนวนผู้มีส่วนร่วมและจำนวนคะแนนเสียงที่จำเป็นในการดำเนินการบางอย่าง”

 

หลังจากเข้าถึงเครือข่ายชาแล้ว เราพยายามค้นหาบรรจุภัณฑ์ชิ้นหนึ่งที่เราสงสัยว่ากำลังได้รับชื่อเสียงเกินจริง และเราก็พบมัน:

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

บทสรุปและความคิดสุดท้าย

แม้ว่าจะไม่พบหลักฐานของโค้ดที่เป็นอันตรายในแพ็กเกจ NPM เหล่านี้ และพวกเขาอาจไม่ได้ตั้งใจให้ใครใช้ แต่แพ็กเกจเหล่านี้อาจละเมิดข้อกำหนดในการให้บริการ (TOS) ของ NPM, GitHub หรือสมาคมชาได้หลายข้อ อย่างไรก็ตาม เรื่องนี้อยู่นอกขอบเขตงานของเรา (แต่เราได้แจ้งให้พวกเขาทราบแล้ว และจะดำเนินการตามที่พวกเขาเห็นว่าเหมาะสม) การใช้แพลตฟอร์มเหล่านี้ในทางที่ผิดจะส่งผลกระทบต่อเราและองค์กรของเราในบางทาง

สิ่งที่ชัดเจนคือ แพ็กเกจโอเพนซอร์สที่ดูเหมือนไม่มีพิษภัยใดๆ อาจซ่อนพฤติกรรมที่ยากจะเข้าใจได้หากปราศจากข้อมูลบริบทที่ครบถ้วน

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

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

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

ภาคผนวก: ระบุรายการสินทรัพย์ที่เกี่ยวข้องที่จะรวมไว้ในบทความฉบับสุดท้าย

ผู้ใช้งาน NPM ที่เกี่ยวข้องมากขึ้นจะพิจารณาจากจำนวนแพ็กเกจที่เผยแพร่: vndra, wanzaty, artknight404, seblakkuah, Mikrositer, kellyman17

ตัวอย่างเล็กๆ น้อยๆ ของแพ็กเกจที่เกี่ยวข้อง: ไมโครซิเตอร์, ครินเด็กซ์, ศิลปะ-ดาว, เซบลัคคูอาห์, vndrabnb, vndrave, เดปฟิฟ, เดปซิก, เดเปยต์, เดปนิน, โดปอน, โครงการเคลลี่มานทีส

ตัวอย่างคลังเก็บข้อมูล GitHub ที่เกี่ยวข้องซึ่งมีไฟล์ tea.yml:

sca-tools-software-composition-analysis-tools
จัดลำดับความสำคัญ แก้ไข และรักษาความปลอดภัยความเสี่ยงด้านซอฟต์แวร์ของคุณ
สมัครบัญชีฟรีได้เลย
ไม่ต้องใช้บัตรเครดิต

รักษาความปลอดภัยให้กับการพัฒนาและส่งมอบซอฟต์แวร์ของคุณ

ด้วยชุดผลิตภัณฑ์ Xygeni