เหตุการณ์ XZ Backdoor - ผลการวิเคราะห์เบื้องต้น
(securelist.com)-
ลำดับเหตุการณ์:
- 2024.01.19: เว็บไซต์ XZ ถูกย้ายไปยัง GitHub Pages โดยผู้ดูแลคนใหม่ (jiaT75)
- 2024.02.15: เพิ่ม
build-to-host.m4ลงใน.gitignore - 2024.02.23: มีการเพิ่ม "ไฟล์ทดสอบ" สองไฟล์ที่บรรจุสเตจของสคริปต์อันตราย
- 2024.02.24: ออก XZ 5.6.0
- 2024.02.26: มีคอมมิตใน
CMakeLists.txtที่บ่อนทำลายฟีเจอร์ความปลอดภัย Landlock - 2024.03.04: แบ็กดอร์ก่อให้เกิดปัญหากับ Valgrind
- 2024.03.09: อัปเดต "ไฟล์ทดสอบ" สองไฟล์, แก้ไขฟังก์ชัน CRC, และ "แก้" ปัญหา Valgrind
- 2024.03.09: ออก XZ 5.6.1
- 2024.03.28: พบบั๊ก, แจ้ง Debian และ RedHat, Debian ย้อนกลับ XZ
- 2024.03.29: เผยแพร่อีเมลบน OSS-security mailing list, RedHat ยืนยันว่ามีการส่งมอบ XZ ที่ถูกฝังแบ็กดอร์
- 2024.03.30: Debian หยุดการบิลด์และเริ่มกระบวนการสร้างใหม่
- 2024.04.02: นักพัฒนาหลักของ XZ รับรู้เหตุการณ์แบ็กดอร์
-
ค่าแฮชของดิสทริบิวชัน XZ ที่มีแบ็กดอร์อันตรายรวมอยู่:
- xz-5.6.0: มีค่าแฮช MD5, SHA1, SHA256 ให้
- xz-5.6.1: มีค่าแฮช MD5, SHA1, SHA256 ให้
การวิเคราะห์การติดเชื้อเบื้องต้น
-
Stage 1 - สคริปต์ build-to-host ที่ถูกดัดแปลง:
- ไฟล์ซอร์สสำหรับรีลีสในตอนแรกไม่มีพิษภัย แต่เมื่อดาวน์โหลดจาก URL ที่แฮ็กเกอร์ควบคุม จะมีไฟล์
build-to-host.m4ที่รันโค้ดอันตรายรวมอยู่ด้วย - ไฟล์
.m4นี้จะถูกรันระหว่างการบิลด์ เพื่อแก้ไขและคลายการบีบอัดไฟล์แรกที่ถูกเพิ่มไว้ในโฟลเดอร์ทดสอบ
- ไฟล์ซอร์สสำหรับรีลีสในตอนแรกไม่มีพิษภัย แต่เมื่อดาวน์โหลดจาก URL ที่แฮ็กเกอร์ควบคุม จะมีไฟล์
-
Stage 2 - เชลล์สคริปต์ที่ถูกฉีดเข้าไป:
- สคริปต์อันตรายที่ถูกฉีดผ่านไฟล์
.m4จะตรวจสอบว่ากำลังรันอยู่ภายในกระบวนการบิลด์ที่ตั้งใจไว้บน Linux หรือไม่ - ใช้ไฟล์
good-large_compressed.lzmaเพื่อรันสเตจถัดไป โดยไฟล์นี้ถูกบีบอัดอย่างถูกต้อง แต่ภายในข้อมูลที่คลายแล้วมีข้อมูลขยะปะปนอยู่ - ดึงข้อมูล 33,492 ไบต์ด้วยคำสั่ง
head/tailและใช้คำสั่งtrเพื่อแทนที่ค่าพื้นฐานและถอดการทำให้อ่านยาก
- สคริปต์อันตรายที่ถูกฉีดผ่านไฟล์
-
Stage 3 - การดึงแบ็กดอร์ออกมา:
- เชลล์สคริปต์ในขั้นสุดท้ายจะทำการตรวจสอบหลายอย่างว่าโปรแกรมกำลังรันอยู่ในสภาพแวดล้อมที่คาดไว้หรือไม่
- ดึงโค้ดไบนารีของแบ็กดอร์ที่ซ่อนอยู่ในออฟเซ็ตอื่นของไฟล์
good-large_compressed.lzmaเดียวกันออกมา - ใช้เครื่องมือ XZ ดึงไฟล์และใช้การเรียก
headต่อเนื่องหลายครั้งเพื่อถอดรหัสข้อมูลไบนารีด้วยอัลกอริทึมคล้าย RC4 - คลายไฟล์ที่บีบอัดด้วย XZ ลบไบต์ช่วงต้นออกโดยเริ่มจากค่า predefined แล้วบันทึกเป็น
liblzma_la-crc64-fast.o - แก้ไขฟังก์ชัน
is_arch_extension_supportedของcrc_x86_clmul.hเพื่อเปลี่ยนการเรียก__get_cpuidเป็น_get_cpuid
การวิเคราะห์แบ็กดอร์ระดับไบนารี
-
สถานการณ์การโหลดแบบซ่อนตัว:
- XZ ใช้ฟังก์ชัน
lzma_crc32,lzma_crc64สำหรับคำนวณ CRC และถูกเก็บในตาราง ELF symbol ด้วยชนิด IFUNC - มีการใช้ IFUNC เพื่อเลือกแบบเวอร์ชันที่เหมาะสมที่สุดแบบไดนามิก
- แบ็กดอร์ถูกเก็บเป็นไฟล์อ็อบเจ็กต์ และเป้าหมายหลักคือให้ถูกลิงก์เข้ากับไฟล์ปฏิบัติการ
mainระหว่างคอมไพล์ - ไฟล์อ็อบเจ็กต์มี symbol
_get_cpuidอยู่ และด้วยการลบขีดล่างหนึ่งตัวออกจากซอร์สต้นฉบับ เมื่อโค้ดเรียก_get_cpuidจริง ๆ แล้วจะไปเรียกเวอร์ชันของแบ็กดอร์แทน
- XZ ใช้ฟังก์ชัน
-
การวิเคราะห์โค้ดแบ็กดอร์:
- โค้ดแบ็กดอร์เริ่มต้นถูกเรียก 2 ครั้ง และพฤติกรรมอันตรายจริงจะเริ่มเมื่อ
lzma_crc64IFUNC เรียก_get_cpuid - ค้นหาที่อยู่ GOT เพื่อหาตำแหน่งของพอยน์เตอร์
cpuidแล้วแทนที่ด้วยพอยน์เตอร์ของฟังก์ชันอันตรายหลัก - เป้าหมายสำคัญคือการ hook ฟังก์ชันบางตัวเพื่อให้สามารถเฝ้าดูการเชื่อมต่อทั้งหมดไปยังระบบที่ติดเชื้อได้
- โค้ดแบ็กดอร์เริ่มต้นถูกเรียก 2 ครั้ง และพฤติกรรมอันตรายจริงจะเริ่มเมื่อ
-
การทำงานหลัก:
- กำหนดเป้าหมาย hook ไปที่ฟังก์ชัน
RSA_public_decrypt,EVP_PKEY_set1_RSA,RSA_get0_keyของlibcrypto - ตรวจสอบว่ากระบวนการปัจจุบันตรงตามเกณฑ์การทำงานหรือไม่ และตรวจสอบการมีอยู่ของ kill switch
- ใช้โครงสร้าง Trie ในการดำเนินการกับสตริง
- ใช้ symbol resolver routine มากกว่า 3 แบบเพื่อค้นหาตำแหน่งของโครงสร้าง ELF Symbol
- ใช้ประโยชน์จากฟีเจอร์
rtdl-auditในทางที่ผิดเพื่อ hijack symbol resolving routine และทำให้เกิดการ hook ฟังก์ชัน
- กำหนดเป้าหมาย hook ไปที่ฟังก์ชัน
ความเห็นของ GN⁺
-
บทความนี้แสดงให้เห็นกรณีการโจมตีที่ซับซ้อนอย่างมาก ซึ่งมีการฉีดมัลแวร์เข้าไปในซอฟต์แวร์โอเพนซอร์ส และเป็นบทเรียนว่าจุดแข็งของโอเพนซอร์สก็อาจถูกนำไปใช้ในทางกลับกันได้
-
การโจมตีทางไซเบอร์และแบ็กดอร์ที่มุ่งเป้าไปยังระบบ Linux กำลังซับซ้อนขึ้นเรื่อย ๆ โดยเฉพาะการโจมตีผ่านเซิร์ฟเวอร์ SSH ที่อาจเป็นภัยคุกคามด้านความปลอดภัยร้ายแรง
-
อีกด้านหนึ่ง เหตุการณ์นี้ก็แสดงให้เห็นถึงความสามารถในการชำระตัวเองของระบบนิเวศโอเพนซอร์ส สุดท้ายแบ็กดอร์ก็ถูกค้นพบโดยชุมชนและมีการตอบสนองอย่างรวดเร็ว ความโปร่งใสคือหัวใจสำคัญ
-
การใช้เทคนิคอย่างโครงสร้างข้อมูล Trie ขั้นสูง, Symbol Resolver, และการ hook ผ่าน
dl_auditแสดงให้เห็นถึงวิวัฒนาการทางเทคนิคของมัลแวร์บน Linux และย้ำว่าจำเป็นต้องระมัดระวังเรื่องความปลอดภัยของระบบ Linux เป็นพิเศษ -
เมื่อองค์กรนำซอฟต์แวร์โอเพนซอร์สมาใช้ ไม่ใช่แค่เรื่องไลเซนส์เท่านั้นที่ต้องตรวจสอบ แต่การตรวจสอบด้านความปลอดภัยก็เป็นสิ่งจำเป็นด้วย ควรพิจารณาให้แน่ใจว่าเป็นแหล่งแจกจ่ายที่เชื่อถือได้หรือไม่ และมีการเฝ้าติดตามโค้ดอย่างต่อเนื่องหรือไม่
1 ความคิดเห็น
ความเห็นจาก Hacker News
สรุป: