- ผู้โจมตีที่ใช้ชื่อว่า "Jia Tan" ทำตัวเป็นผู้มีส่วนร่วมที่ขยันและมีประสิทธิภาพกับไลบรารีบีบอัด xz มานานกว่า 2 ปี จนในที่สุดได้รับสิทธิ์ commit และสิทธิ์ผู้ดูแลระบบ
- จากนั้นใช้สิทธิ์ดังกล่าวติดตั้ง backdoor ที่ซ่อนอย่างแนบเนียนและระมัดระวังมากไว้ใน
liblzma ซึ่งเป็นส่วนหนึ่งของ xz และยังเป็น dependency ของ OpenSSH sshd บน Debian, Ubuntu, Fedora และระบบ Linux อื่น ๆ ที่ใช้ systemd
- backdoor นี้คอยเฝ้าดูช่วงเริ่มต้นของเซสชัน SSH ว่าผู้โจมตีส่งคำสั่งลับมาหรือไม่ ทำให้ผู้โจมตีสามารถรันคำสั่งใดก็ได้บนระบบเป้าหมายโดยไม่ต้องล็อกอิน เป็นการโจมตี remote code execution กับเป้าหมายที่ไม่ต้องยืนยันตัวตน
- การโจมตีนี้ถูกเปิดเผยต่อสาธารณะเมื่อวันที่ 29 มีนาคม 2024 และดูเหมือนจะเป็นการโจมตีซัพพลายเชนครั้งใหญ่ครั้งแรกต่อซอฟต์แวร์โอเพนซอร์สที่ถูกใช้อย่างแพร่หลาย
- นี่เป็นเหตุการณ์สำคัญที่จะกลายเป็นจุดเปลี่ยนของความปลอดภัยในซัพพลายเชนโอเพนซอร์ส
- โพสต์นี้คือไทม์ไลน์อย่างละเอียดของมิติด้าน social engineering ของการโจมตีครั้งนี้ ซึ่งดูเหมือนจะย้อนกลับไปได้ถึงปลายปี 2021
บทนำ
- ช่วงปี 2005-2008 Lasse Collin ร่วมกับความช่วยเหลือจากผู้อื่น ออกแบบฟอร์แมตไฟล์
.xz โดยใช้อัลกอริทึมบีบอัด LZMA ซึ่งบีบไฟล์ได้เหลือราว 70% เมื่อเทียบกับ gzip
- เมื่อเวลาผ่านไป ฟอร์แมตนี้ถูกใช้อย่างแพร่หลายในการบีบอัดไฟล์ tar, อิมเมจเคอร์เนล Linux และอื่น ๆ
การปรากฏตัวของ Jia Tan และบรรดาผู้สนับสนุน
- 2021-10-29: Jia Tan ส่งแพตช์แรกที่ไม่เป็นอันตรายไปยัง mailing list ของ xz-devel
- 2021-11-29: Jia Tan ส่งแพตช์ที่ไม่เป็นอันตรายฉบับที่สอง
- 2022-04-19: Jia Tan ส่งแพตช์ที่ไม่เป็นอันตรายอีกฉบับ
- 2022-04-22: "Jigar Kumar" แสดงความไม่พอใจว่าแพตช์ของ Jia Tan ยังไม่ได้ถูก merge
- 2022-05-19: "Dennis Ens" สอบถามสถานะการดูแล XZ for Java
- 2022-05-19: Lasse Collin ขอโทษที่ตอบช้า และตอบว่า "Jia Tan กำลังช่วย XZ Utils นอก mailing list และอย่างน้อยก็น่าจะรับบทบาทที่ใหญ่ขึ้นใน XZ Utils ได้"
- 2022-05-27: Jigar Kumar ส่งอีเมลกดดันในเธรดแพตช์
- 2022-06-07: Jigar Kumar ส่งอีเมลกดดันในเธรด Java
- 2022-06-08: Lasse Collin ตอบว่าเขาไม่ได้หมดความสนใจ แต่มีข้อจำกัดจากปัญหาสุขภาพจิต
- 2022-06-10: Lasse Collin merge commit แรกที่ Jia Tan เขียน
- 2022-06-14: Jugar Kumar ส่งอีเมลกดดันอีกฉบับ
- 2022-06-21: Dennis Ens ส่งอีเมลกดดันโดยเสนอให้ส่งต่อภาระการดูแลไปยังคนอื่น
- 2022-06-22: Jigar Kumar ส่งอีเมลกดดันในเธรดแพตช์ C
- 2022-06-29: Lasse Collin ตอบโดยบอกเป็นนัยว่า "Jia Tan อาจรับบทบาทที่ใหญ่ขึ้นในโปรเจ็กต์"
Jia Tan กลายเป็นผู้ดูแล
- ดูเหมือนว่า Lasse เริ่มทำงานใกล้ชิดกับ Jia Tan มากขึ้น ขณะที่ Jigar Kumar และ Dennis Ens มีแนวโน้มสูงว่าจะเป็นตัวตนปลอม
- 2022-09-27: Jia Tan ให้สรุปรีลีส 5.4.0
- 2022-11-30: Lasse Collin เปลี่ยนอีเมลรายงานบั๊กจากที่อยู่ส่วนตัวไปเป็น alias ที่แชร์กับ Jia Tan
- 2022-12-30: Jia Tan merge commit แรกเข้า repository ของ xz โดยตรง
- 2023-01-11: Lasse Collin ติดแท็กและ build รีลีสสุดท้ายของตนคือ v5.4.1
- 2023-03-18: Jia Tan ติดแท็กและ build รีลีสแรกของตนคือ v5.4.2
- 2023-03-20: Jia Tan อัปเดตการตั้งค่า Google oss-fuzz ให้ส่งบั๊กมาหาตนเอง
- 2023-06-22: Hans Jansen ส่งแพตช์คู่ที่ใช้ความสามารถ "GNU indirect function" ซึ่ง Lasse Collin นำไปปรับแก้แล้วให้ Jia Tan เป็นผู้ merge
- 2023-07-07: Jia Tan ปิดการรองรับ ifunc ระหว่างการ build ของ oss-fuzz
- 2024-01-19: Jia Tan ย้ายเว็บไซต์ไปยัง GitHub Pages และเข้าควบคุมหน้าเว็บ XZ Utils
การเริ่มต้นของการโจมตี
- 2024-02-23: Jia Tan merge โค้ดไบนารีของ backdoor ที่ซ่อนอยู่ไว้ในไฟล์อินพุตทดสอบ
- 2024-02-24: Jia Tan ติดแท็ก v5.6.0 และเผยแพร่แพ็กเกจ
xz-5.6.0.tar.gz ที่มี build-to-host.m4 อันตรายรวมอยู่
- 2024-02-24: Gentoo เริ่มพบการแครชใน 5.6.0
- 2024-02-26: Debian เพิ่ม
xz-utils 5.6.0-0.1 เข้า unstable
- 2024-02-28: Debian เพิ่ม
xz-utils 5.6.0-0.2 เข้า unstable
- 2024-02-29: บน GitHub ผู้ใช้
@teknoraver ส่ง pull request เพื่อไม่ให้เชื่อม liblzma เข้ากับ libsystemd
- 2024-02-28: Jia Tan เพิ่มการสะกดผิดแบบแนบเนียนในโปรแกรม C ที่ใช้ตรวจสอบการรองรับ Landlock ทำให้การตรวจจับ Landlock ของสคริปต์
configure พัง
- 2024-03-04: ดิสทริบิวชันของ RedHat เริ่มพบข้อผิดพลาด Valgrind ที่
_get_cpuid ของ liblzma
- 2024-03-05: PR ของ
libsystemd ถูก merge และ liblzma ถูกนำออก
- 2024-03-05: Debian เพิ่ม
xz-utils 5.6.0-0.2 เข้า testing
- 2024-03-05: Jia Tan commit การแก้บั๊ก ifunc
- 2024-03-08: Jia Tan commit การแก้ไขสำหรับ Valgrind
- 2024-03-09: Jia Tan commit อัปเดตไฟล์ backdoor
- 2024-03-09: Jia Tan ติดแท็ก v5.6.1 และเผยแพร่ดิสทริบิวชัน xz 5.6.1
- 2024-03-20: Lasse Collin ส่งชุดแพตช์ไปยัง LKML เพื่อเพิ่มทั้งตนเองและ Jia Tan เป็นผู้ดูแลโค้ดบีบอัด xz ในเคอร์เนล
- 2024-03-25: Hans Jansen เปิดบั๊กของ Debian เพื่ออัปเดต
xz-utils เป็น 5.6.1
- 2024-03-28: Jia Tan เปิดบั๊กของ Ubuntu เพื่อให้
xz-utils ใน Debian อัปเดตเป็น 5.6.1
การตรวจพบการโจมตี
- 2024-03-28: Andres Freund พบบั๊กและแจ้ง Debian กับ
distros@openwall แบบไม่เปิดเผยต่อสาธารณะ RedHat กำหนดรหัส CVE-2024-3094
- 2024-03-28: Debian ย้อนกลับจาก 5.6.1 และนำ
5.6.1+really5.4.5-1 มาใช้
- 2024-03-29: Andres Freund โพสต์คำเตือนเรื่อง backdoor ไปยังลิสต์สาธารณะ
oss-security@openwall โดยบอกว่าพบมันมา "ในช่วงไม่กี่สัปดาห์ที่ผ่านมา"
- 2024-03-29: RedHat ประกาศว่า xz ที่มี backdoor ถูกแจกจ่ายใน Fedora Rawhide และ Fedora Linux 40 beta
- 2024-03-30: Debian หยุดการ build และสร้างเครื่อง build ใหม่โดยใช้ Debian stable
ความเห็นของ GN⁺
- เหตุการณ์นี้จะเป็นจุดเปลี่ยนสำคัญต่อการโจมตีซัพพลายเชนของซอฟต์แวร์โอเพนซอร์ส เพราะผู้ร่วมขบวนการใช้แนวทาง social engineering ระยะยาวเพื่อสร้างความไว้วางใจและเข้าถึงสิทธิ์ ก่อนแอบฝัง backdoor ลงในไลบรารีแกนหลักที่ถูกใช้อย่างกว้างขวาง
- จำเป็นต้องทบทวนกระบวนการกำกับดูแลและการถ่ายโอนสิทธิ์ของโปรเจ็กต์โอเพนซอร์ส อาจควรพิจารณาโมเดล governance แบบกระจายมากขึ้น เพื่อไม่ให้ชะตาของโปรเจ็กต์ขึ้นอยู่กับสถานการณ์ส่วนตัวของเมนเทนเนอร์หลัก
- การตรวจสอบความปลอดภัยและ code review สำหรับโปรเจ็กต์โอเพนซอร์สสำคัญ ๆ จะยิ่งมีความสำคัญมากขึ้น รวมถึงต้องมีเครื่องมือตรวจสอบอัตโนมัติเพื่อจับการเปลี่ยนแปลงที่น่าสงสัยและป้องกันการใช้อำนาจในทางที่ผิด เช่น การเตือนเมื่อมีการเพิ่มข้อมูลไบนารี
- จำเป็นต้องมีทั้งมาตรการทางเทคนิคและเชิงสถาบันที่ช่วยคัดกรองผู้มีส่วนร่วมที่มุ่งร้ายและหยุดการโจมตีได้ตั้งแต่เนิ่น ๆ โดยไม่ทำลายข้อดีของแนวทางโอเพนซอร์สที่พัฒนาอย่างเปิดเผยและให้ทุกคนมีส่วนร่วมได้
- โปรเจ็กต์โอเพนซอร์สที่ใช้ภาษาหรือเครื่องมือซึ่งมีจุดอ่อนด้านความปลอดภัยจะยิ่งมีความเสี่ยงสูงขึ้น จึงต้องยกระดับความปลอดภัยในหลายมิติ เช่น memory safety, static analysis, Fuzzing พร้อมกับการเปลี่ยนผ่านไปใช้เครื่องมือสมัยใหม่
- ผู้คนจะจับตาผลการวิเคราะห์เชิงลึกเรื่องเงื่อนไขการเปิดใช้งาน backdoor ที่ซ่อนไว้ เส้นทางการแพร่กระจาย และขอบเขตผลกระทบ เพื่อให้ได้บทเรียนสำหรับป้องกันการโจมตีลักษณะคล้ายกันในอนาคต
7 ความคิดเห็น
เรื่องนี้ทำให้กังวลขึ้นมาว่า..
อาจจะแฮ็กพีซีของนักพัฒนาโอเพนซอร์ส หรือไม่ก็ลักพาตัว/กักขังไว้ แล้วก็ซื้อตัวด้วยเงินเพื่อฝังมัลแวร์ลงไป..
พอนึกถึงเรื่องเงิน ก็อดคิดไม่ได้ว่านักพัฒนาโอเพนซอร์สเขาอยู่ดีกินดีไหมเหมือนกันนะ?
ผมทำงานสายความปลอดภัยอยู่ เวลารีวิวโค้ดแล้วเจอบั๊ก ก็จะมีมุกประมาณว่า "เข้ามาทำงานที่นี่ตั้งแต่ 5 ปีก่อนก็เพื่อฝังโค้ดนี้ใช่ไหม?" ฮ่าๆ
Collin ผู้น่าสงสารคงลำบากมากในหลายด้านเลยนะ...
ใช่ archlinux แพตช์ไปนานแล้ว~ เข้ามาสิ เข้ามาเลย ใช่ แบ็กดอร์ออกไป latest arch เจ๋งสุดๆ~
pacman -SyuLasse Collin ได้เขียนบทความสรุปเหตุการณ์นี้ไว้แล้ว
https://tukaani.org/xz-backdoor/
ความคิดเห็นจาก Hacker News
เป็นสรุปเหตุการณ์ที่ยอดเยี่ยมและรวมลิงก์ทั้งหมดไว้ในที่เดียว จึงเป็นแหล่งข้อมูลที่เหมาะอย่างยิ่งสำหรับคนที่อยากเรียนรู้ว่าการโจมตีด้วยวิศวกรรมสังคมเกิดขึ้นจริงอย่างไร
มีการชี้ให้เห็นว่าไทม์ไลน์ของ Fedora ถูกตกหล่น
มีความเห็นว่าเราไม่ควรยอมรับโค้ดที่เข้าใจได้ยากภายในระบบอีกต่อไป
เรื่องนี้อาจเป็นหนึ่งในผลลัพธ์เชิงบวกที่ทำให้ท่าทีต่อการอัปเกรดมีความระมัดระวังมากขึ้น
มีข้อเสนอว่าในชุมชน FOSS อาจเกิดการแบนผู้ใช้ที่หยาบคายอย่างเป็นระบบ หรือเกิดการเปลี่ยนแปลงทางวัฒนธรรมที่ทำให้ชุมชนตระหนักมากขึ้นและตอบโต้พฤติกรรมหยาบคายอย่างจริงจังยิ่งขึ้น
มีการชี้ว่าข้อสังเกตเกี่ยวกับรูปแบบอีเมลแอดเดรสไม่ถูกต้อง
มีการแสดงความกังวลว่าความกดดันทางสังคมสามารถทำให้ผู้คนยอมสละการควบคุมได้ง่ายเพียงใด
ในฐานะผู้ดูแลโครงการ มีการเน้นว่ายิ่งผู้มีส่วนร่วมหรือผู้ใช้เร่งเร้าหรือกดดันมากเท่าไร ก็ยิ่งมีโอกาสน้อยลงที่จะยอมรับคำขอนั้น
มีการอ้างความเห็นของ Joe Cooper และแบ่งปันมุมมองของเขาเกี่ยวกับแรงกดดันที่มีต่อผู้ดูแลโครงการ
มีการอธิบายว่าโค้ดไบนารีแบ็กดอร์ที่ซ่อนอยู่ถูกซ่อนอย่างแนบเนียนภายในไฟล์อินพุตทดสอบแบบไบนารี และเนื่องจากไฟล์เหล่านี้ส่วนใหญ่ถูกสร้างขึ้นด้วยมือผ่าน hex editor ตัวไฟล์เองจึงเป็น "ซอร์สโค้ด" ที่ดีที่สุด