พบ Backdoor ใน XZ Utils อาจสร้างผลกระทบกับระบบ Linux ทั้งโลก

เมื่อวันศุกร์ที่ผ่านมา (29 มีนาคม 2024) นักพัฒนาจาก Microsoft สร้างความตกตะลึงให้กับผู้ดูแลระบบทั้งโลก เมื่อเปิดเผยว่าค้นพบแบ็คดอร์ใน xz Utils ซึ่งเป็นโอเพ่นซอร์สยูทิลิตี้ที่ใช้ในการบีบอัดข้อมูล ซึ่งมีให้ใช้งานบนระบบปฏิบัติการ Linux เกือบทั้งหมด และระบบปฏิบัติการที่คล้ายกับ Unix อื่น ๆ

โดยผู้ที่อยู่เบื้องหลังน่าจะใช้เวลาหลายปีกับโครงการนี้ ซึ่งเกือบจะสามารถทำให้เวอร์ชันที่มีแบ็คดอร์ดังกล่าวถูกรวมเข้ากับ Debian และ Red Hat ซึ่งเป็นสอง Distributions ที่ใหญ่ที่สุดของ Linux ก่อนที่นักพัฒนาซอฟต์แวร์ของ Microsoft จะสังเกตเห็นบางอย่างที่น่าสงสัย

Filippo Valsorda วิศวกรซอฟต์แวร์ และการเข้ารหัสระบุว่า "นี่อาจเป็นการโจมตีแบบ supply chain attack ครั้งใหญ่ที่สุดที่เคยถูกพบ เนื่องจากมีการใช้ส่วนประกอบที่เป็นอันตรายในไลบรารีที่มีการใช้กันอย่างแพร่หลาย"

XZ Util คืออะไร?

xz Utils ถูกใช้งานบน Linux เป็นจำนวนมากในการบีบอัดข้อมูล รวมถึงบนระบบปฏิบัติการที่คล้ายกับ Unix เกือบทั้งหมด รวมถึง Linux xz Utils ยังมีฟังก์ชันที่สำคัญสำหรับการบีบอัดข้อมูลทุกประเภท ซึ่ง xz Utils ยังรองรับรูปแบบ .lzma format อีกด้วย ทำให้ยิ่งได้รับความนิยมมากยิ่งขึ้น

นักวิจัยพบอะไร?

ในเริ่มแรก Andres Freund นักพัฒนา และวิศวกรที่ทำงานเกี่ยวกับ PostgreSQL ของ Microsoft พบปัญหาด้านประสิทธิภาพจากการใช้งาน SSH บนระบบ Debian ซึ่ง SSH เป็นโปรโตคอลที่ใช้กันอย่างแพร่หลายที่สุดสำหรับการเข้าสู่ระบบจากระยะไกล โดยเขาพบว่าการเข้าสู่ระบบด้วย SSH ใช้ CPU มากผิดปกติ และเกิด error ขึ้นที่ valgrind ซึ่งเป็นยูทิลิตี้สำหรับมอนิเตอร์หน่วยความจำบนคอมพิวเตอร์

ด้วยความระมัดระวัง และความรอบคอบของ Freund เขาพบว่าปัญหามาจากการอัปเดต xz Utils เมื่อวันศุกร์ที่ผ่านมา (29 มีนาคม 2024) Freund จึงเริ่มตรวจสอบ Open Source Security List เพื่อหาข้อมูลเพิ่มเติมจากการอัปเดต ทำให้พบว่ามีคนจงใจวางแบ็คดอร์ไว้ในใน xz Utils ดังกล่าว

ยังค่อนข้างยากที่ระบุเป้าหมาย และการทำงานทั้งหมดของแบ็คดอร์ โดย Thomas Roccia นักวิจัยของ Microsoft เผยแพร่ infographic ที่ช่วยให้เห็นภาพขอบเขตของความพยายามที่เกือบจะประสบความสำเร็จในการแพร่กระจายแบ็คดอร์ ซึ่งอาจจะเป็นการโจมตีครั้งใหญ่กว่าเหตุการณ์ SolarWinds supply chain attack ในช่วงปี 2020

แบ็คดอร์ทำอะไรบ้าง?

นักวิจัยพบว่าโค้ดอันตรายที่ถูกเพิ่มมาใน xz Utils เวอร์ชัน 5.6.0 และ 5.6.1 ได้มีการแก้ไขวิธีการทำงานของซอฟต์แวร์บางอย่าง โดยมันจะเข้าควบคุม sshd ซึ่งเป็นไฟล์ปฏิบัติการที่ใช้สำหรับสร้างการเชื่อมต่อของ SSH ซึ่งใครก็ตามที่เข้าถึง encryption key จะสามารถซ่อน code ใด ๆ ก็ตามที่ต้องการไว้ใน SSH login certificate ได้ สามารถอัปโหลดโค้ด และเรียกใช้งานบนอุปกรณ์ที่ถูกติดตั้งแบ็คดอร์ได้ นักวิจัยยังไม่เห็นโค้ดที่ถูกอัปโหลดจริง ๆ ดังนั้นจึงไม่ทราบว่าผู้โจมตีวางแผนที่จะเรียกใช้โค้ดใด แต่ตามทฤษฎีแล้วโค้ดนี้สามารถทำอะไรได้เกือบทุกอย่าง รวมถึงการขโมยคีย์เข้ารหัส หรือการติดตั้งมัลแวร์เพิ่มเติมได้

ทำไม compression utility สามารถจัดการ process ที่มีความสำคัญอย่าง SSH ได้?

ปกติแล้วไลบรารีใด ๆ ก็ตาม สามารถยุ่งเกี่ยวกับการทำงานภายในของไฟล์ปฏิบัติการใด ๆ ที่เกี่ยวข้องกันได้ เนื่องจากบ่อยครั้งที่ผู้พัฒนาไฟล์ปฏิบัติการจะสร้างลิงก์ไปยังไลบรารีที่จำเป็นสำหรับการทำงานอย่างถูกต้อง ซึ่ง OpenSSH เป็น sshd ที่ได้รับความนิยมมากที่สุดไม่ได้เชื่อมโยงกับไลบรารี liblzma แต่ Debian และ Linux อื่น ๆ จำนวนมาก เพิ่มแพตช์เพื่อเชื่อมโยง sshd กับ systemd ซึ่งใช้ในการโหลด services ต่าง ๆ ระหว่างการบูทระบบ ในทางกลับกัน Systemd จะมีการลิงก์ไปยัง liblzma ดังนั้นจึงทำให้ xz Utils สามารถเข้าควบคุม sshd ได้

แบ็คดอร์เกิดขึ้นได้อย่างไร?

ดูเหมือนว่าแบ็คดอร์นี้ใช้เวลาหลายปีในการเตรียมการ ในปี 2021 ผู้ใช้ชื่อ JiaT75 ได้ทำการสร้างโค้ดในโครงการโอเพ่นซอร์สเป็นครั้งแรก โดยหากเมื่อตรวจสอบย้อนกลับไปโปรเจ็กต์ libarchive ของเค้าก็ถือว่าน่าสงสัย เนื่องจากมีการแทนที่ฟังก์ชัน safe_fprint ด้วยตัวแปรที่ถูกรายงานมานานแล้วว่ามีความปลอดภัยน้อยกว่า แต่ยังไม่มีใครสังเกตเห็นในเวลานั้น

ในปีต่อมา JiaT75 ส่งแพตซ์ใน xz Utils mailing list และพบว่ามีสมาชิกที่ไม่เคยเห็นมาก่อนชื่อ Jigar Kumar ระบุว่า Lasse Collin ผู้ดูแล xz Utils มายาวนานนั้น ไม่ได้ทำการอัปเดตซอฟต์แวร์บ่อยครั้ง หรือรวดเร็วพอ ทำให้ Kumar, Dennis Ens และคนอื่น ๆ อีกหลายคน(ที่ไม่เคยมีชื่ออยู่ในรายชื่อมาก่อน) ได้กดดันให้ Collin หานักพัฒนาเพิ่มเติมเพื่อมาดูแลโครงการนี้

ในเดือนมกราคม ปี 2023 JiaT75 เริ่มเกี่ยวข้องกับ xz Utils เป็นครั้งแรก หลายเดือนต่อมา JiaT75 ซึ่งใช้ชื่อ Jia Tan ได้เข้ามามีส่วนร่วมใน xz Utils มากขึ้น ตัวอย่างเช่น Tan ได้แทนที่ข้อมูลติดต่อของ Collins ด้วย oss-fuzz ซึ่งเป็นโปรเจ็กต์ที่จะสแกนซอฟต์แวร์โอเพ่นซอร์สเพื่อหาช่องโหว่ที่สามารถถูกโจมตีได้ โดย Tan ยังขอให้ oss-fuzz ปิดการใช้งานฟังก์ชัน ifunc ในระหว่างการทดสอบ ซึ่งเป็นการเปลี่ยนแปลงที่จะทำให้ไม่สามารถตรวจจับการเปลี่ยนแปลงที่เป็นอันตรายที่ Tan กำลังจะทำกับ xz Utils ในไม่ช้า

รายงานของบริษัทรักษาความปลอดภัย Tenable ระบุว่า ในเดือนกุมภาพันธ์ของปีนี้ Tan ได้ออก xz Utils เวอร์ชัน 5.6.0 และ 5.6.1 (ซึ่งถูกพบว่ามีการฝังแบ็คดอร์) และในสัปดาห์ต่อมา Tan และคนอื่น ๆ ได้แจ้งต่อนักพัฒนา Ubuntu, Red Hat และ Debian ให้รวมการอัปเดตของ xz Utils เข้ากับระบบปฏิบัติการของพวกเขา

ปัจจุบันเหตุการณ์ดังกล่าวของ xz Utils ได้รับหมายเลข CVE-2024-3094 (คะแนน CVSS 10/10 ความรุนแรงระดับ Critical) โดยถือว่าเป็นช่องโหว่การ injection code ที่เป็นอันตราย ในไลบรารี xz เวอร์ชัน 5.6.0 และ 5.6.1

Tenable ได้ออกรายงานระบุ Linux ที่ได้รับผลกระทบจากช่องโหว่ดังกล่าว ได้แก่

  • Fedora Rawhide
  • Fedora 40 Beta
  • Fedora 41
  • Debian testing, unstable and experimental distributions versions 5.5.1alpha-0.1 to 5.6.1-1.
  • openSUSE Tumbleweed and openSUSE MicroOS
  • Kali Linux
  • Arch Linux

Linux ที่ได้ไม่ได้รับผลกระทบจากช่องโหว่ดังกล่าว ได้แก่

  • Fedora Linux 40
  • Red Hat Enterprise Linux (RHEL)
  • Debian
  • Amazon Linux
  • SUSE Linux Enterprise and Leap
  • Alpine Linux
  • Gentoo Linux
  • Ubuntu

แนะนำให้กลับไปใช้ XZ เวอร์ชัน 5.4.x ใน Fedora Beta

CISA, Kali Linux, openSUSE และ Arch Linux ได้ให้คำแนะนำนักพัฒนา และผู้ใช้ทำการดาวน์เกรดย้อนกลับเป็น XZ version ที่ไม่มีช่องโหว่ (เช่น 5.4.6 Stable) และให้ค้นหาพฤติกรรมที่เป็นอันตราย หรือน่าสงสัยในระบบของตน

ทั้งนี้ผู้ดูแลระบบสามารถตรวจสอบว่า XZ version ที่ติดตั้งอยู่ในระบบของตนเป็นเวอร์ชันใด โดยการเรียกใช้คำสั่ง

strings which xz` | egrep '\(XZ Utils\)

และ

strings `which xz` | grep '5\.6\.[01]'

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

for xz_p in $(type -a xz | awk '{print $NF}' | uniq); do strings "$xz_p" | grep "xz (XZ Utils)" || echo "No match found for $xz_p"; done

shell script ดังกล่าว จะถูกใช้ผ่าน 'strings' command บนอินสแตนซ์ทั้งหมดของไฟล์ปฏิบัติการ xz และรายงานข้อมูลเวอร์ชันของ xz การใช้คำสั่งนี้ทำให้สามารถระบุเวอร์ชันของ xz ได้โดยไม่ต้องเรียกใช้โปรแกรมปฏิบัติการแบบ backdoor

ที่มา:  bleepingcomputer