11 คะแนน โดย GN⁺ 2024-03-30 | 8 ความคิดเห็น | แชร์ทาง WhatsApp
  • พบอาการผิดปกติบางอย่างที่เกี่ยวข้องกับ liblzma (ส่วนหนึ่งของแพ็กเกจ xz) ในการติดตั้ง Debian sid เช่น การใช้ CPU เพิ่มขึ้นระหว่างล็อกอิน SSH และข้อผิดพลาดของ valgrind
  • พบว่าสาเหตุของปัญหาคือรีโพซิทอรีต้นน้ำและ tarball ของ xz ติดแบ็กดอร์ โดยบางส่วนของแบ็กดอร์มีอยู่เฉพาะใน tarball ที่เผยแพร่เท่านั้น
  • สคริปต์ที่รวมอยู่ใน tarball จะถูกรันที่ท้ายขั้นตอน configure และเมื่อเข้าเงื่อนไขบางอย่าง จะทำการแก้ไข $builddir/src/liblzma/Makefile เพื่อแทรกโค้ดอันตราย

แบ็กดอร์ภายในรีโพซิทอรี

  • ส่วนหลักของแบ็กดอร์อยู่ในรูปแบบเข้ารหัสภายในไดเรกทอรี tests/files ของรีโพซิทอรี
  • ไฟล์เหล่านี้ไม่ได้ถูกใช้ในการทดสอบของเวอร์ชัน 5.6.0 และในเวอร์ชัน 5.6.1 มีความพยายามแก้ไขข้อผิดพลาด valgrind และการแครชที่เกิดจากแบ็กดอร์

ระบบที่ได้รับผลกระทบ

  • สคริปต์แบ็กดอร์จะถูกเรียกครั้งแรกหลัง configure และจะปรับเปลี่ยนกระบวนการบิลด์เฉพาะเมื่อเข้าเงื่อนไขบางอย่างเท่านั้น (เช่น ระบบ Linux x86-64, ใช้ gcc และ gnu linker, ระหว่างการบิลด์แพ็กเกจ Debian หรือ RPM)

ผลกระทบต่อเซิร์ฟเวอร์ openssh

  • เมื่อใช้ liblzma ที่ติดตั้งแบ็กดอร์ การล็อกอินผ่าน SSH จะช้าลง
  • openssh ไม่ได้ใช้ liblzma โดยตรง แต่บางดิสทริบิวชันรวมถึง Debian ได้แพตช์ openssh เพื่อรองรับการแจ้งเตือนของ systemd และ libsystemd พึ่งพา lzma

การวิเคราะห์โค้ดที่ถูกฉีดเข้าไป

  • วิเคราะห์จากมุมมองของผู้สังเกตการณ์ที่ไม่ใช่นักวิจัยด้านความปลอดภัยหรือผู้เชี่ยวชาญด้าน reverse engineering
  • แบ็กดอร์ดักการทำงานผ่าน ifunc resolver และระหว่างการเริ่มต้นของ sshd จะทำการ resolve สัญลักษณ์แล้วเปลี่ยนสัญลักษณ์ RSA_public_decrypt ให้ชี้ไปยังโค้ดของตัวเอง

ผลกระทบต่อ sshd

  • RSA_public_decrypt@....plt ถูกเปลี่ยนให้ชี้ไปยังโค้ดแบ็กดอร์ ทำให้โค้ดแบ็กดอร์ถูกเรียกระหว่างการล็อกอินด้วยกุญแจสาธารณะ
  • คาดว่าสิ่งนี้อาจใช้เพื่อข้ามการยืนยันตัวตนหรือทำให้เกิดการรันโค้ดจากระยะไกลได้

การรายงานบั๊ก

  • ไม่ได้รายงานบั๊กเนื่องจากสงสัยว่ามีการเกี่ยวข้องจากรีโพซิทอรีต้นน้ำ
  • Red Hat ได้กำหนด CVE-2024-3094 ให้กับปัญหานี้

การตรวจจับการติดตั้งที่มีช่องโหว่

  • มีการจัดเตรียมสคริปต์สำหรับตรวจสอบว่าไบนารี ssh ของระบบมีความเสี่ยงหรือไม่

8 ความคิดเห็น

 
[ความคิดเห็นนี้ถูกซ่อน]
 
depth221 2024-03-30

ทุกสิ่งที่ผมรู้เกี่ยวกับ xz backdoor
เป็นบทความที่ Andres Freund ผู้ค้นพบ backdoor นี้เป็นผู้เขียน

 
edunga1 2024-04-01

น่าทึ่งที่มันถูกดำเนินการอย่างเป็นระบบมาก;; กระบวนการเหมือนละครเลยครับ

 
carnoxen 2024-03-30

สมควรถูกลงโทษอย่างสาสม

 
roxie 2024-03-31

ทำไมล่ะ?

 
keepworking 2024-04-01

เพราะมันเป็นการฝังแบ็กดอร์ลงในโอเพนซอร์สโดยเจตนา... ระหว่างนั้นยังมีพฤติกรรมอย่างการแอบปั่นกระแสความคิดเห็นด้วย
ก่อนหน้านี้ก็เคยมีกรณีจงใจใส่ช่องโหว่เข้าไปในลินุกซ์เคอร์เนลมาแล้ว รู้สึกขมขื่นเหมือนกัน

 
roxie 2024-04-01

อ๋อ ตอนนี้เหมือนผมจะเข้าใจนัยนั้นแล้ว ขอบคุณครับ

 
GN⁺ 2024-03-30
ความคิดเห็นจาก Hacker News
  • ลิงก์ที่เกี่ยวข้อง:

  • สรุป:

    • ผู้เขียนแบ็กดอร์พยายามผลักดันให้เพิ่ม xz 5.6.x เข้าไปใน Fedora 40 และ 41 โดยสื่อสารต่อเนื่องเป็นเวลาหลายสัปดาห์ มีการร่วมมือกันเพื่อแก้ปัญหา valgrind ที่เกิดจากแบ็กดอร์นี้ แต่สุดท้ายก็พบว่าแบ็กดอร์เองเป็นต้นตอของปัญหา หลังช่วงห้ามเปิดเผยข้อมูลถูกทำพังโดยไม่ตั้งใจ จึงต้องเร่งจัดการปัญหาอย่างฉุกเฉิน
    • หนึ่งในผู้เขียนแบ็กดอร์ได้ปิดการทำงานของฟีเจอร์ใน oss-fuzz ที่พึ่งพาแบ็กดอร์โดยตรง เพื่อป้องกันการถูกค้นพบโดยบังเอิญ
    • ผู้เขียนแบ็กดอร์ได้เพิ่มไฟล์ SECURITY.md เข้าไปในโปรเจกต์ xz-java ซึ่งมีแนวทางว่าหากพบช่องโหว่ด้านความปลอดภัย ไม่ควรเปิดเผยต่อสาธารณะ แต่ให้รายงานแบบส่วนตัวแทน หากมองอีกมุมหนึ่ง ก็อาจตีความได้ว่าเป็นความพยายามซื้อเวลาเพื่อปรับแต่ง exploit ของตนเองและใช้ประโยชน์จากเป้าหมาย
    • openssh ไม่ได้ใช้ liblzma โดยตรง แต่ Debian และดิสโทรอื่นอีกหลายตัวได้แพตช์ openssh เพื่อรองรับ systemd notifications ทำให้ libsystemd ไปพึ่งพา liblzma และเพิ่ม dependency เข้าไปในเดมอนที่มีความสำคัญด้านความปลอดภัยอย่าง openssh ซึ่งเพิ่มความเสี่ยงจากการโจมตีซัพพลายเชน
    • ประเด็นหลักสำหรับคนที่กำลังตื่นตระหนกและควรตรวจสอบ:
      • ใช้ liblzma5 เวอร์ชันใหม่ (5.6.0 หรือ 5.6.1) ซึ่งถูกเพิ่มเข้ามาในช่วงประมาณหนึ่งเดือนที่ผ่านมา
      • ใช้ลินุกซ์ดิสโทรสาย Debian หรือ RPM ซึ่งดูเหมือนเป็นความพยายามทำให้การ reverse engineering ยากขึ้น
      • รัน OpenSSH sshd ภายใต้ systemd โดย OpenSSH ที่ถูกแพตช์ในบางดิสโทรจะใช้ libsystemd สำหรับการล็อก และนั่นจะดึง liblzma5 ที่มีช่องโหว่เข้ามา
      • Debian testing มีเวอร์ชัน '5.6.1+really5.4.5-1' แล้ว ซึ่งจริง ๆ คือการนำเวอร์ชันเก่า 5.4 มาห่อใหม่ให้ดูเป็นเวอร์ชันใหม่
    • ถ้าต้องการซ่อนอะไรน่าสงสัยไว้ใน GNU autoconf ก็จะเลือกซ่อนตรงนั้นมากกว่าสคริปต์แบบ "curl | sh" ผู้ที่ปล่อยเหตุการณ์นี้เคยรับผิดชอบการออกรีลีสมาก่อน และเริ่มคอมมิตมาตั้งแต่ปี 2022 มีคอมมิตจำนวนมากที่เป็นการเปลี่ยนแปลงจริง รวมถึงคอมมิตในโปรเจกต์ที่เกี่ยวข้องอย่าง libarchive ด้วย แสดงให้เห็นว่าต้องใช้ความพยายามอย่างมากในการฝังแบ็กดอร์นี้
    • หลายปีก่อนมีคนเขียนไลบรารี Go ที่ห่อโค้ด C ของ xz เพื่อให้สามารถทำ xz compression จาก Go ได้ และเมื่อราวหนึ่งสัปดาห์ก่อน เขาได้รับ PR แรกที่ขออัปเกรดเป็น 5.6.1 ในเรโปนั้น ซึ่งมาจากบัญชี GitHub คนละบัญชีกับ upstream
    • เขาชอบที่ผู้มีส่วนร่วมซึ่งไม่ใช่นักวิจัยด้านความปลอดภัยหรือ reverse engineer เป็นคนเขียนบทความเชิงเทคนิค รายงานสรุปการค้นพบของเขาถูกมองว่าเป็นเทมเพลตที่ยอดเยี่ยมสำหรับผู้มีส่วนร่วมที่อยู่นอกโลกการดีบักกระแสหลักซึ่งมักลังเลที่จะแชร์
    • หากจินตนาการถึงความพยายามฝังแบ็กดอร์ใน xz(1) ที่แยบยลกว่านี้ ก็คงไม่ถูกพบได้เร็วขนาดนี้ xz ถูกใช้อยู่แทบทุกที่ เป็นไปได้ที่จะสร้าง xz ที่เลือกแก้ไขเฉพาะบางส่วนเล็ก ๆ ของไฟล์อย่าง .tar.xz ซึ่งถูกใช้เป็นพื้นฐานในบาง build process โดยมุ่งเป้าไปที่ tarball ที่แจกจ่ายไบนารีที่คอมไพล์ไว้ล่วงหน้า ไม่ใช่ source code tarball