สรุปสั้น
นักวิจัยของบริษัท VulnCheck เปิดเผยรายละเอียดของสิ่งที่เรียกว่า “แบ็กดอร์ที่ติดมาจากโรงงาน” ซึ่งฝังอยู่ในเราเตอร์ของบริษัท Zbtlink ผู้ผลิตจีน อย่างน้อย 20 รุ่น โดยตัวฝังนี้ปรากฏอยู่ในไฟล์เฟิร์มแวร์ทั้ง 21 ไฟล์ที่เปิดให้ดาวน์โหลดจากเว็บไซต์ของบริษัท ครอบคลุมช่วงเวลากว่า 2 ปี ไม่ใช่กรณีเฟิร์มแวร์รุ่นใดรุ่นหนึ่งที่หลุดรอด
ตัวฝังถูกตั้งชื่อรหัสว่า ENDLESSDOORS ออกแบบให้เริ่มทำงานเองโดยอัตโนมัติเมื่อเปิดเครื่อง และพยายามติดต่อกลับไปยังโครงสร้างพื้นฐานสั่งการ (C2) ในจีนถี่ถึงทุก 35 วินาที มันปลอมตัวเป็นเธรดของเคอร์เนล Linux แต่แท้จริงเป็นโปรเซสฝั่งผู้ใช้ที่รันด้วยสิทธิ์ root และกลมกลืนไปกับโปรเซส kworker ของจริงที่มีอยู่แล้วในระบบ
จุดที่อันตรายที่สุดคือช่องทางสื่อสารนี้ไม่มีการจับมือ ไม่มีการเจรจา และไม่มีการยืนยันตัวตนใดๆ ทั้งสิ้น เมื่อเราเตอร์ส่งข้อความทักทายออกไปแล้ว มันจะรันทุกอย่างที่เซิร์ฟเวอร์ตอบกลับมา ผลคือใครก็ตามที่อยู่บนเส้นทางเครือข่าย หรือควบคุมการแปลงชื่อโดเมนปลายทางได้ สามารถแย่งการสื่อสารนั้นแล้วเปิดเชลล์ root แบบโต้ตอบบนเราเตอร์ได้ทันที โดยไม่จำเป็นต้องเข้าถึงตัวเราเตอร์จากอินเทอร์เน็ตเลย ปัจจุบัน Zbtlink ถอดเฟิร์มแวร์ที่ได้รับผลกระทบออกจากหน้าดาวน์โหลดชั่วคราวแล้ว และชี้แจงว่าฟีเจอร์นี้ “มีไว้เพื่อการบำรุงรักษาหลังการขายเท่านั้น”
รายละเอียดข่าว
เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 6 สิงหาคม 2569 ว่า รายงานฉบับใหม่ของ VulnCheck ระบุว่าแกนกลางของ ENDLESSDOORS คือเครื่องมือขนาดเล็กชื่อ rctl ซึ่งย่อมาจาก remote control linux โดยนาย Jacob Baines ประธานเจ้าหน้าที่ฝ่ายเทคโนโลยีของ VulnCheck อธิบายว่า “มันถูกอัปโหลดขึ้น GitHub เมื่อวันที่ 14 มกราคม 2558 และไม่เคยถูกแตะต้องอีกเลย ที่เก็บโค้ดที่แทบไม่มีใครรู้จักนี้ทำหน้าที่เป็นไคลเอนต์และเซิร์ฟเวอร์สั่งการอย่างง่าย” และเสริมว่า “ฝั่งเซิร์ฟเวอร์เปิดรอที่พอร์ต 7000 ให้ไคลเอนต์เชื่อมต่อเข้ามา มันส่งคำสั่งเชลล์ทีละคำสั่งให้ไคลเอนต์ได้ หรือจะสั่งให้ไคลเอนต์เปิด reverse bash shell ก็ได้”
VulnCheck วิเคราะห์รุ่น Zbtlink AX3000 เป็นตัวอย่าง และพบว่าโปรเซสที่ใช้ชื่อว่า kworker บนเครื่องนั้นคือ rctl เวอร์ชันที่ถูกดัดแปลง ตั้งค่าให้ติดต่อไปยังไอพี 47.107.224[.]89 และโดเมน rbdg4nzqadui[.]wikaba[.]com นอกจากนี้เฟิร์มแวร์ทุกไฟล์ที่อยู่บนหน้าดาวน์โหลดของ zbtlink.com ล้วนฝังตัว rctl ไว้ และเรียกให้ทำงานตั้งแต่ตอนบูตด้วยสคริปต์ init.d ที่ชื่อ skworker ซึ่งเป็นการตั้งชื่อที่จงใจให้กลืนไปกับชื่อโปรเซสระบบของจริง
ต่อมาผู้ที่เข้าไปยังหน้าดาวน์โหลดเฟิร์มแวร์ของ Zbtlink จะพบข้อความแจ้งว่าบริษัทตรวจพบช่องโหว่ด้านความปลอดภัยในเฟิร์มแวร์บางรุ่น จึงถอดเวอร์ชันที่ได้รับผลกระทบออกจากช่องทางดาวน์โหลดเป็นการชั่วคราวเพื่อความปลอดภัย โดยทีมวิศวกรกำลังเร่งพัฒนาและตรวจสอบเฟิร์มแวร์ที่แก้ไขแล้ว และจะแจ้งให้ทราบทันทีเมื่อพร้อม
เมื่อ The Hacker News ติดต่อไปขอความเห็น โฆษกของผู้ผลิตเราเตอร์รายนี้ตอบว่าฟีเจอร์ดังกล่าว “มีไว้เพื่อการบำรุงรักษาหลังการขายเพียงอย่างเดียว” และไม่ได้มีวัตถุประสงค์อื่น พร้อมเสริมว่า “โดยทั่วไปมันจะถูกคงไว้เฉพาะในเครื่องตัวอย่างเพื่อช่วยลูกค้าในการดีบักซอฟต์แวร์ บริษัทของเราเชี่ยวชาญด้านบริการ OEM และ ODM แบบสั่งทำ” และว่า “ลูกค้าของเราใช้ซอฟต์แวร์ที่พัฒนาขึ้นเอง ไม่ได้ใช้เฟิร์มแวร์ค่าเริ่มต้นของ ZBT” พร้อมยืนยันว่าบริษัทให้ความสำคัญกับรายงานนี้อย่างจริงจัง อย่างไรก็ตาม คำชี้แจงนี้ขัดกับสิ่งที่ VulnCheck พบ เพราะตัวฝังปรากฏอยู่ในเฟิร์มแวร์ทุกไฟล์ที่เผยแพร่สู่สาธารณะบนหน้าดาวน์โหลด ไม่ได้จำกัดอยู่แค่เครื่องตัวอย่างตามที่กล่าวอ้าง
วิธีการโจมตี
โปรโตคอลของ ENDLESSDOORS เรียบง่ายจนน่าตกใจ เมื่อตัวฝังส่งข้อความ hello พร้อมที่อยู่ MAC ของฝั่ง LAN ไปยังเซิร์ฟเวอร์แล้ว มันถูกออกแบบให้รันทุกอย่างที่เซิร์ฟเวอร์ส่งกลับมาโดยไม่ตรวจสอบอะไรเลย นาย Jacob Baines อธิบายว่า “มีสตริงสงวนหนึ่งตัวคือ rctlbash ซึ่งสั่งให้ตัวฝังเปิดการเชื่อมต่อที่สองไปยังพอร์ต 7001 จองเทอร์มินัลเสมือน สร้างโปรเซส /bin/sh แล้วเชื่อมทั้งสองเข้าด้วยกัน นั่นคือเชลล์ root แบบโต้ตอบสดๆ”
เขาสรุปลักษณะของโปรโตคอลนี้ไว้ว่า “คำศัพท์ทั้งหมดของโปรโตคอลนี้มีสองประโยค คือ รันสิ่งนี้ด้วยสิทธิ์ root และ ขอเชลล์ root ให้ฉันหน่อย ใครก็ตามที่อยู่บนเส้นทางเครือข่ายสามารถแย่งการสื่อสารระหว่างไคลเอนต์กับเซิร์ฟเวอร์ได้ ใครก็ตามที่ควบคุมการแปลงชื่อ rbdg4nzqadui.wikaba[.]com หรือควบคุมที่อยู่ที่ชื่อนั้นชี้ไป ก็ควบคุมตัวฝัง ENDLESSDOORS ทุกตัวที่พยายามติดต่อกลับได้”
จุดนี้คือสิ่งที่ทำให้ช่องโหว่รุนแรงกว่าแบ็กดอร์ทั่วไป เพราะโดยปกติผู้โจมตีต้องเข้าถึงเราเตอร์จากอินเทอร์เน็ตให้ได้ก่อน แต่ในกรณีนี้ตัวเราเตอร์เป็นฝ่ายวิ่งออกไปหาเซิร์ฟเวอร์เองทุก 35 วินาที ผู้โจมตีจึงเพียงแค่ต้องอยู่ในตำแหน่งที่ดักหรือชี้ทางการสื่อสารขาออกนั้นได้ ไม่ว่าจะเป็นผู้ให้บริการเครือข่ายกลางทาง ผู้ควบคุมเซิร์ฟเวอร์ DNS หรือผู้ที่จดโดเมนต่อเมื่อโดเมนเดิมหมดอายุ
รุ่นที่ได้รับผลกระทบตามรายงานของ VulnCheck ได้แก่ CPE2801, WE1026-5G-WD, WE1326, WE2007, WE2008-DSIM, WE2416, WE3326, WE5927, WE5931, WE5931AC, WE826-T3-DSIM, WG108, WG1602, WG1608-DSIM, WG209, WG2105, WG2107, WG259, WG3526 และ Z8102AX-2DSIM โดยทุกรุ่นถูกพบว่าติดต่อไปยังปลายทางหลักและปลายทางสำรองชุดเดียวกัน 4 แห่ง
ผลกระทบ
ผู้ได้รับผลกระทบไม่ได้จำกัดอยู่แค่คนที่ซื้อเราเตอร์ยี่ห้อ Zbtlink โดยตรง เพราะบริษัทระบุเองว่าเชี่ยวชาญงาน OEM และ ODM ซึ่งหมายความว่าฮาร์ดแวร์และเฟิร์มแวร์ชุดเดียวกันอาจถูกขายภายใต้แบรนด์อื่นอีกจำนวนมาก ผู้ใช้ปลายทางจึงอาจมีอุปกรณ์ที่ได้รับผลกระทบอยู่โดยไม่รู้ว่าต้นทางคือผู้ผลิตรายนี้ และนี่คือจุดที่ทำให้ประเมินขอบเขตความเสียหายที่แท้จริงได้ยาก
เราเตอร์เป็นอุปกรณ์ที่อยู่ตรงจุดที่มองเห็นทราฟฟิกทั้งหมดของเครือข่าย การมีเชลล์ระดับ root บนเราเตอร์จึงเท่ากับความสามารถในการดักจับข้อมูล เปลี่ยนการตั้งค่า DNS เพื่อนำผู้ใช้ไปยังเว็บปลอม เปิดช่องทางเข้าสู่เครือข่ายภายใน หรือใช้อุปกรณ์นั้นเป็นจุดพักในการโจมตีเป้าหมายอื่น รุ่นที่ปรากฏในรายการหลายรุ่นเป็นอุปกรณ์ประเภท CPE และเราเตอร์ที่รองรับซิม ซึ่งมักถูกนำไปใช้ในสาขาย่อย จุดติดตั้งภาคสนาม และงาน IoT ที่ไม่ค่อยมีคนดูแลเป็นประจำ
ในเชิงการประเมิน มีข้อจำกัดที่ควรระบุให้ชัดคือ VulnCheck ไม่ได้รายงานว่ามีการนำแบ็กดอร์นี้ไปใช้โจมตีจริงแล้วหรือยัง ไม่มีตัวเลขจำนวนอุปกรณ์ที่ติดตั้งใช้งานอยู่ และไม่มีข้อสรุปว่าใครเป็นผู้ควบคุมโครงสร้างพื้นฐาน C2 ปลายทาง คำอธิบายของผู้ผลิตที่ว่าเป็นเครื่องมือดีบักหลังการขายจึงยังเป็นคำชี้แจงฝ่ายเดียวที่ขัดกับข้อเท็จจริงเรื่องการปรากฏในเฟิร์มแวร์สาธารณะทุกไฟล์ แต่ก็ยังไม่มีหลักฐานที่ยืนยันเจตนาร้ายเช่นกัน
คำแนะนำ
ตรวจสอบว่าอุปกรณ์ในองค์กรตรงกับรุ่นในรายการหรือไม่ และอย่าดูแค่ยี่ห้อบนกล่อง ควรตรวจหมายเลขรุ่นบนตัวเครื่องและในหน้าจัดการ เพราะอุปกรณ์ที่ผลิตแบบ OEM อาจติดแบรนด์อื่น
บนอุปกรณ์ที่สงสัย ให้ตรวจรายการโปรเซสที่กำลังทำงาน และสแกนระบบไฟล์หาไฟล์ตามที่ VulnCheck ระบุ ได้แก่ /usr/sbin/kworker, /usr/lib/librctl.so, /etc/kworker.cfg และ /etc/init.d/skworker โดยเฉพาะชื่อ kworker ที่ปรากฏในตำแหน่งเหล่านี้ถือเป็นสัญญาณผิดปกติชัดเจน เพราะ kworker ของจริงเป็นเธรดในเคอร์เนล ไม่ใช่ไฟล์ที่วางอยู่ใน /usr/sbin
บล็อกปลายทางขาออกทั้ง 4 แห่งที่ระบุในตาราง IoC บนไฟร์วอลล์หรืออุปกรณ์ต้นทางเหนือขึ้นไป เพราะแบ็กดอร์อาศัยการติดต่อออกเป็นหลัก การตัดทางออกจึงเป็นมาตรการบรรเทาที่ได้ผลทันทีระหว่างรอเฟิร์มแวร์ที่แก้ไขแล้ว พร้อมทั้งบล็อกการติดต่อออกไปยังพอร์ต 7000 และ 7001 จากอุปกรณ์เครือข่ายด้วย
ในระยะยาว ควรวางเราเตอร์ประเภทนี้ไว้ในเครือข่ายที่แยกส่วน ไม่ให้เข้าถึงระบบภายในที่สำคัญได้โดยตรง และรวมอุปกรณ์เครือข่ายเข้าไปในบัญชีทรัพย์สินที่ต้องติดตามเฟิร์มแวร์ เช่นเดียวกับที่ทำกับเซิร์ฟเวอร์และเครื่องผู้ใช้ เพราะกรณีนี้แสดงให้เห็นว่าความเสี่ยงอาจมาพร้อมอุปกรณ์ตั้งแต่วันแรกที่แกะกล่อง ไม่ใช่เกิดจากการตั้งค่าผิดของผู้ใช้
Indicators of Compromise (IoCs)
หมายเหตุ: ตัวบ่งชี้ด้านล่างถูก defang แล้วเพื่อความปลอดภัย หากนำไปใช้ต้องแปลงกลับเป็นรูปแบบปกติก่อน
| ตัวบ่งชี้ | ประเภท | คำอธิบาย |
|---|---|---|
zbtctl.epplink[.]net (47.100.190[.]96) | โดเมน / ไอพี | ปลายทาง C2 ที่อุปกรณ์ติดต่อออกไป |
47.107.224[.]89 | ไอพี | ปลายทาง C2 ที่พบในรุ่น AX3000 |
online-string[.]com (45.32.81[.]152) | โดเมน / ไอพี | ปลายทาง C2 สำรอง |
rbdg4nzqadui[.]wikaba[.]com (43.248.136[.]125) | โดเมน / ไอพี | ปลายทาง C2 ที่ใครควบคุมการ resolve ได้ ก็ควบคุมตัวฝังได้ |
/usr/sbin/kworker | ไฟล์ | ตัวฝัง ENDLESSDOORS ปลอมชื่อเป็นเธรดเคอร์เนล |
/usr/lib/librctl.so | ไฟล์ | ไลบรารีของ rctl |
/etc/kworker.cfg | ไฟล์ | ไฟล์ตั้งค่าของตัวฝัง |
/etc/init.d/skworker | ไฟล์ | สคริปต์เรียกตัวฝังให้ทำงานตอนบูต |
| TCP 7000 / 7001 | พอร์ต | ช่องสั่งการ และช่องเปิดเชลล์ root แบบโต้ตอบ |
