TL; DR
การขอ ทีมวิจัยด้านความปลอดภัย Xygeni ระบุ แพ็คเกจ npm ที่เป็นอันตราย, @dappaoffc/baileys-modเผยแพร่โดยแยกออกมาจากไลบรารี WhatsApp Web API ที่ใช้งานกันอย่างแพร่หลาย @whiskeysockets/baileys.
ตั้งแต่เวอร์ชัน 8.0.1 เป็นต้นไป แพ็กเกจ npm ที่เป็นอันตรายนี้มีช่องโหว่การแทรกโค้ดขณะรันไทม์อยู่ภายใน lib/Socket/newsletter.jsโค้ดที่ถูกแทรกเข้าไปนั้นจะทำการสมัครใช้งานช่องจดหมายข่าวที่ผู้โจมตีควบคุมโดยอัตโนมัติให้กับเซสชันบอท WhatsApp ที่ได้รับการรับรองความถูกต้องของนักพัฒนา
เพย์โหลดจะเริ่มทำงาน 80 วินาทีหลังจากโหลดโมดูล และดึงรายการเป้าหมายจาก GitHub แบบไดนามิก ทำให้พฤติกรรมนี้อัปเดตตัวเองได้ และยากต่อการตรวจจับผ่านการวิเคราะห์ในระหว่างการติดตั้ง
ภาพรวมทางเทคนิค
ระหว่างการตรวจสอบการพึ่งพาที่เพิ่งเผยแพร่ใหม่ตามปกติ ทีมวิจัยด้านความปลอดภัยของ Xygeni ตรวจพบพฤติกรรมที่ผิดปกติใน @dappaoffc/baileys-modต่อมาได้รับการยืนยันว่าเป็น แพ็คเกจ npm ที่เป็นอันตราย โดยมุ่งเป้าไปที่ระบบนิเวศของบอท WhatsApp
ไม่เหมือนกับเวิร์มที่ขโมยข้อมูลประจำตัวหรือมัลแวร์เรียกค่าไถ่ แพ็กเกจ npm ที่เป็นอันตรายนี้ใช้ประโยชน์จากความสัมพันธ์ด้านความไว้วางใจระหว่างนักพัฒนาและไลบรารีโอเพนซอร์สที่ถูกคัดลอกไปใช้งานกันอย่างแพร่หลาย
แพ็กเกจนี้แสดงตัวว่าเป็นเวอร์ชันที่ได้รับการดัดแปลงจาก Baileysซึ่งเป็นการใช้งาน WhatsApp Web API ที่ได้รับความนิยมและใช้กันอย่างแพร่หลายในการสร้างบอทอัตโนมัติ ภายในระบบนิเวศนั้น การติดตั้งเวอร์ชันที่ดัดแปลง (forks) เป็นเรื่องปกติ ดังนั้น ผู้โจมตีจึงใช้ประโยชน์จากโมเดลการแจกจ่ายที่สมจริง แทนที่จะใช้ประโยชน์จากช่องโหว่
ที่สำคัญ:
- การขอ สคริปต์ preinstall จะตรวจสอบเฉพาะเวอร์ชันของ Node.js เท่านั้น
- ไม่มีการขโมยข้อมูลประจำตัวเกิดขึ้นในระหว่างการติดตั้ง
- ไม่พบกิจกรรมหลังการติดตั้งที่น่าสงสัยใดๆ
- การฉีดจะทำงานเฉพาะในระหว่างการรันไทม์เท่านั้น
เนื่องจากการออกแบบเช่นนี้ โปรแกรมสแกนในระหว่างการติดตั้งจะไม่สามารถตรวจจับพฤติกรรมที่เป็นอันตรายได้
กลไกการแทรกโค้ดขณะรันไทม์ภายในแพ็กเกจ npm ที่เป็นอันตราย
ตรรกะที่เป็นอันตรายภายในแพ็กเกจ npm ที่เป็นอันตรายนี้อยู่ใน... lib/Socket/newsletter.jsฝังอยู่ภายในบริบทการทำงานของโมดูลโดยตรง
ผู้โจมตีได้ห่อบล็อกที่แทรกเข้าไปด้วยนิพจน์ฟังก์ชันที่เรียกใช้ทันที (Immediately Invoked Function Expression หรือ IIFE) ซึ่งรับประกันว่าจะดำเนินการทันทีที่โมดูลโหลดเสร็จ
อย่างไรก็ตาม แทนที่จะเริ่มทำงานทันที ข้อมูลที่ส่งเข้าไปจะนำเสนอกลไกการทำงานแบบหน่วงเวลา:
หลังจากระยะเวลาหน่วงหมดลง ข้อมูลที่ส่งไปยังระบบจะดำเนินการตามลำดับที่กำหนดไว้:
- ดึงข้อมูล JSON ไฟล์จาก URL เนื้อหาดิบของ GitHub
- วิเคราะห์รายการรหัสจดหมายข่าว WhatsApp
- วนลูปผ่านรายการ
- โทร
newsletterWMexQuery(id, QueryIds.FOLLOW)สำหรับแต่ละรายการ - ระบบจะเว้นระยะเวลาการส่งคำขอ 5 วินาที เพื่อลดการตรวจจับการจำกัดอัตราการส่ง
- ระงับข้อผิดพลาดขณะรันไทม์ทั้งหมดโดยไม่แจ้งให้ทราบล่วงหน้า
เนื่องจากโค้ดเรียกใช้ฟังก์ชันภายในไลบรารีแทนที่จะเรียกใช้สคริปต์ภายนอก การรับส่งข้อมูลที่เกิดขึ้นจึงดูไม่แตกต่างจากการกระทำที่ผู้ใช้เริ่มต้นอย่างถูกต้องตามกฎหมาย WhatsApp ของ จากมุมมองของโปรโตคอล บอทได้สมัครรับข้อมูลจากช่องเหล่านั้นโดยสมัครใจ
การเปรียบเทียบทางเทคนิค: พฤติกรรมที่ถูกต้องตามธรรมชาติ กับ พฤติกรรมที่ถูกแทรกเข้าไป
| ตัวแทน | พฤติกรรมที่ถูกต้องตามกฎหมาย | การฉีดที่เป็นอันตราย |
|---|---|---|
| ขั้นตอนการติดตั้ง | ตรวจสอบเฉพาะเวอร์ชัน Node.js เท่านั้น | ไม่พบพฤติกรรมที่เป็นอันตรายใดๆ ในระหว่างการติดตั้ง |
| การเริ่มต้นโมดูล | โรงงานผลิตซ็อกเก็ต WhatsApp สำหรับส่งออก | IIFE จะทำงานโดยอัตโนมัติเมื่อโหลดโมดูล |
| ระยะเวลาการดำเนินการ | ไม่มีพฤติกรรมล่าช้า | การเปิดใช้งานแบบหน่วงเวลา 80 วินาที |
| การสื่อสารผ่านเครือข่าย | สื่อสารผ่านโปรโตคอล WhatsApp WebSocket เท่านั้น | การดึงข้อมูลขาออกไปยังเนื้อหาดิบของ GitHub (ช่องทางการควบคุมแบบไดนามิก) |
| การดำเนินการจดหมายข่าว | คำขอสมัครสมาชิกที่เริ่มต้นโดยผู้ใช้ | การส่งคำขอติดตามอัตโนมัติผ่าน API ภายในไลบรารี |
| จัดการข้อผิดพลาด | แพร่กระจายข้อผิดพลาดในการปฏิบัติงาน | ระงับข้อยกเว้นทั้งหมดโดยไม่แจ้งให้ทราบล่วงหน้า |
ช่องทางการควบคุมแบบไดนามิกผ่าน GitHub
รายชื่อรหัสจดหมายข่าวอยู่ที่:
การออกแบบนี้มีข้อดีในการใช้งานหลายประการ:
- การอัปเดตเพย์โหลดแบบไดนามิกโดยไม่ต้องเผยแพร่เวอร์ชัน npm ใหม่
- จุดเชื่อมต่อ TLS ที่เชื่อถือได้ซึ่งกลมกลืนกับทราฟฟิกการพัฒนาซอฟต์แวร์ทั่วไป
- ไม่จำเป็นต้องมีโครงสร้างพื้นฐานที่ผู้โจมตีจัดการ
- ความต่อเนื่องของบอทที่ติดตั้งใช้งานไปแล้ว
เนื่องจากการฉีดทำงานภายในขอบเขตของโรงงาน จึงมีการนำส่วนปิดภายในกลับมาใช้ใหม่ เช่น newsletterWMexQuery และ delay โดยไม่ต้องนำเข้าโมดูลภายนอก ซึ่งช่วยลดขนาดพื้นที่ใช้งานและเพิ่มประสิทธิภาพในการพรางตัว
โดยพื้นฐานแล้ว GitHub ทำหน้าที่เป็นช่องทางการกระจายคำสั่งที่มีน้ำหนักเบา
ชื่อแทนการพึ่งพาและสัญญาณการระบุแหล่งที่มา
ข้อมูลเมตาของแพ็กเกจประกอบด้วยชื่อเรียกแทนการพึ่งพา (dependency alias) ดังต่อไปนี้:
การกระทำนี้จะเปลี่ยนเส้นทางการพึ่งพาการเข้ารหัสที่สำคัญไปยังขอบเขต npm ที่ผู้โจมตีควบคุมได้
นอกจากนี้ เมตาเดต้ายังปลอมตัวเป็นโครงการต้นทางโดยการอ้างอิงถึงผู้เขียนต้นฉบับและแหล่งเก็บข้อมูล ซึ่งจะช่วยเพิ่มความน่าเชื่อถือและลดการตรวจสอบอย่างละเอียดถี่ถ้วนในระหว่างการตรวจสอบแบบคร่าวๆ
สัญญาณเหล่านี้บ่งชี้ถึงการผสมผสานระบบนิเวศอย่างจงใจมากกว่า การดัดแปลงโดยฉวยโอกาส.
ตัวบ่งชี้การถูกบุกรุกสำหรับแพ็กเกจ npm ที่เป็นอันตรายนี้
ทีมรักษาความปลอดภัยที่ตรวจสอบแพ็กเกจ npm ที่เป็นอันตรายนี้ ควรประเมินสัญญาณต่อไปนี้:
สัญญาณเครือข่าย
- คำขอ GET ขาออกไปยัง
raw.githubusercontent.comจากกระบวนการบอทของ WhatsApp - การติดตามการทำงานของจดหมายข่าวเกิดขึ้นโดยไม่มีตรรกะของแอปพลิเคชันเป็นตัวกระตุ้น
สัญญาณแพ็คเกจ
@dappaoffc/baileys-modรุ่น 8.0.1 (และอาจรวมถึงเวอร์ชัน 8.0.0 ด้วย)- การเปลี่ยนเส้นทางนามแฝงการพึ่งพา
libsignal - การฉีด IIFE แบบเรียลไทม์ภายใน
newsletter.js
สัญญาณพฤติกรรม
- คำขอติดตามจะเว้นระยะห่างกันห้าวินาที
- ไม่มีการโต้ตอบใดๆ จากผู้ใช้ก่อนการสมัครรับจดหมายข่าว
- การระงับข้อผิดพลาดแบบเงียบๆ ภายในโค้ดไลบรารีหลัก
แตกต่างจากมัลแวร์แบบดั้งเดิม การโจมตีนี้ไม่จำเป็นต้องขโมยข้อมูลประจำตัว การโจมตีเกิดขึ้นภายในบริบทของเซสชันที่ได้รับการยืนยันตัวตนแล้วเท่านั้น
การตรวจจับและการลดผลกระทบด้วย Xygeni
กรณีนี้แสดงให้เห็นว่าเหตุใดการสแกนเฉพาะตอนติดตั้งจึงไม่เพียงพอ พฤติกรรมที่เป็นอันตรายจะทำงานหลังจากโหลดโมดูลแล้ว และซ่อนตัวอยู่ภายในตรรกะทางธุรกิจที่ถูกต้อง
ระบบเตือนภัยมัลแวร์ล่วงหน้าของ Xygeni (MEW) ตรวจพบพัสดุนี้โดยการเชื่อมโยงสัญญาณหลายตัวเข้าด้วยกัน แทนที่จะพึ่งพาสัญญาณบ่งชี้เพียงอย่างเดียว
การวิเคราะห์สถิตแบบซอร์สโค้ดเต็มรูปแบบ
MEW ตรวจสอบโครงสร้างซอร์สโค้ดของแพ็กเกจทั้งหมด ไม่ใช่แค่สคริปต์วงจรชีวิตเท่านั้น
ในกรณีนี้ สัญญาณตรวจจับประกอบด้วย:
- ไม่คาดคิด
fetch()โทรภายในโมดูลหลักของ WhatsApp - การสื่อสารขาออกไปยังเนื้อหาดิบของ GitHub
- รูปแบบการดำเนินการที่ล่าช้าซึ่งฝังอยู่ในตรรกะขณะรันไทม์
- การจัดการข้อผิดพลาดแบบเงียบซ้อน
โดยลำพังแล้ว รูปแบบเหล่านี้อาจดูไม่เป็นอันตราย อย่างไรก็ตาม การวิเคราะห์แบบรวมกันเผยให้เห็นพฤติกรรมที่ผิดปกติซึ่งไม่สอดคล้องกับรูปแบบ Baileys fork ที่ถูกต้อง
ความสัมพันธ์ของความเสี่ยงจากการพึ่งพา
การขอ libsignal การใช้ชื่อแทน (alias) ทำให้เกิดการตรวจสอบอย่างเข้มงวดมากขึ้น เนื่องจากเป็นการเปลี่ยนเส้นทางการพึ่งพาข้อมูลที่มีความละเอียดอ่อนไปยังขอบเขตที่ไม่ได้รับการตรวจสอบ
Xygeni มีความสัมพันธ์ดังนี้:
- สัญญาณชื่อเสียงของสำนักพิมพ์
- ความไม่สอดคล้องกันของการเป็นเจ้าของขอบเขต
- การเปลี่ยนเส้นทางการพึ่งพาไปยังไลบรารีการเข้ารหัส
- ตัวบ่งชี้การปลอมแปลงเมตาเดตา
การวิเคราะห์แบบหลายชั้นนี้ช่วยลดผลลัพธ์ที่ผิดพลาด (false positives) ในขณะเดียวกันก็ช่วยระบุการละเมิดความไว้วางใจได้
การควบคุมห่วงโซ่อุปทานที่คำนึงถึงเวลาการทำงาน
เนื่องจากแพ็กเกจ npm ที่เป็นอันตรายนี้ทำงานในระหว่างการทำงาน การป้องกันที่มีประสิทธิภาพจึงต้องอาศัยการวิเคราะห์ที่คำนึงถึงพฤติกรรม
Xygeni ประเมินว่า:
- กลไกการดำเนินการแบบหน่วงเวลา
- การใช้งาน API ภายในในทางที่ผิด
- การเรียกใช้งานเครือข่ายขาออกภายในโค้ดส่วนที่พึ่งพา
- การควบคุมการไหลที่ผิดปกติภายในไลบรารีของบุคคลที่สาม
นอกจากนี้ยังมี Guardrails นโยบายใน CI/CD สามารถ:
- ป้องกันการโทรออกที่ไม่คาดคิดระหว่างการสร้างโปรแกรม
- ตรวจจับการเปลี่ยนแปลงที่น่าสงสัยในกราฟความสัมพันธ์
- บังคับใช้ข้อจำกัดในการเปลี่ยนเส้นทางขอบเขต
- รูปแบบการดึงข้อมูลเพย์โหลดแบบไดนามิกของแฟล็ก
ดังนั้น การควบคุมจึงไม่ได้อาศัยเพียงแค่การลบข้อมูลในทะเบียนเท่านั้น
เหตุใดแพ็กเกจ npm ที่เป็นอันตรายนี้จึงมีความสำคัญต่อความปลอดภัยของห่วงโซ่อุปทาน
แพ็กเกจ npm ที่เป็นอันตรายนี้สะท้อนให้เห็นถึงการเปลี่ยนแปลงเชิงโครงสร้างในการละเมิดห่วงโซ่อุปทาน:
- การประมวลผลขณะรันไทม์ แทนที่จะเป็นการโหลดข้อมูลขณะติดตั้ง
- ช่องทางการควบคุมแบบไดนามิกที่โฮสต์อยู่บนแพลตฟอร์มที่เชื่อถือได้
- การใช้ API ภายในที่ถูกต้องในทางที่ผิด
- การปลอมแปลงเมตาเดต้าเพื่อเลียนแบบผู้ดูแลระบบต้นทาง
ผู้โจมตีไม่ได้ใช้ประโยชน์จากช่องโหว่ของซอฟต์แวร์ แต่ใช้ประโยชน์จากความเชื่อมั่นใน forks และการอัปเดต dependency แทน
ด้วยเหตุนี้ การตรวจจับจึงต้องอาศัยการตรวจสอบซอร์สโค้ดทั้งหมด การเชื่อมโยงความเสี่ยงด้านการพึ่งพา และการวิเคราะห์ที่คำนึงถึงเวลาการทำงาน ไม่ใช่แค่การสแกนสคริปต์เพียงอย่างเดียว





