PlusMagi's Blog By Pitt Phunsanit Backend,Cloud Computing เจาะลึก XZ Utils Backdoor (CVE-2024-3094) และปฏิบัติการแทรกซึมของ “Jia Tan”

เจาะลึก XZ Utils Backdoor (CVE-2024-3094) และปฏิบัติการแทรกซึมของ “Jia Tan”

ในช่วงปลายเดือนมีนาคม ปี 2024 วงการไอทีและความมั่นคงปลอดภัยไซเบอร์ทั่วโลกเกือบเผชิญกับหายนะครั้งใหญ่ที่สุดครั้งหนึ่งในประวัติศาสตร์ เมื่อมีการค้นพบประตูลับ (Backdoor) ระดับวิกฤตที่ถูกแอบฝังลงในโครงการโอเพนซอร์สพื้นฐานของระบบปฏิบัติการ Linux อย่างเงียบเชียบมานานนับปี เหตุการณ์นี้รู้จักกันในชื่อ XZ Utils Backdoor (บันทึกในระบบความปลอดภัยสากลภายใต้รหัส CVE-2024-3094 ด้วยระดับความรุนแรงสูงสุด CVSS 10.0)

หากการโจมตีนี้ไม่ถูกค้นพบและหลุดรอดเข้าสู่ระบบปฏิบัติการรุ่นเสถียร (Stable Release) ขององค์กรทั่วโลก แฮกเกอร์จะมี “กุญแจผี” (Master Key) ที่สามารถควบคุมเครื่องเซิร์ฟเวอร์ ธนาคาร คลาวด์ และโครงสร้างพื้นฐานระดับประเทศนับล้านเครื่องได้จากระยะไกลโดยไม่ต้องใช้รหัสผ่านและไม่ทิ้งร่องรอยใด ๆ




จุดกำเนิดและจุดเปราะบาง: มรดกโอเพนซอร์สบนบ่าของคนคนเดียว

ระบบนิเวศของ Linux ขับเคลื่อนด้วยปรัชญาโอเพนซอร์ส (Open Source) ที่นำซอฟต์แวร์และไลบรารีขนาดเล็กนับพันชิ้นมาต่อเข้าด้วยกันเป็นโครงสร้างพึ่งพา (Dependencies) เพื่อให้ระบบทำงานได้

หนึ่งในไลบรารีที่จำเป็นอย่างยิ่งคือ XZ Utils (และไลบรารีหลักภายในชื่อ liblzma) ซึ่งทำหน้าที่บีบอัดและคลายไฟล์ข้อมูลแบบไม่สูญเสียความละเอียด (Lossless Compression) ด้วยอัลกอริทึม LZMA ที่มีประสิทธิภาพสูงกว่า ZIP ทั่วไปมาก ทำให้เกือบทุกการแจกจ่าย (Distribution) ของ Linux นำมันไปเป็นส่วนหนึ่งของระบบตั้งแต่ปี 2009

ทว่า โครงการที่เป็นกระดูกสันหลังระดับโลกนี้ กลับถูกดูแลโดยโปรแกรมเมอร์อาสาสมัครชาวฟินแลนด์เพียงคนเดียวชื่อ Lasse Collin ตลอดเวลาร่วม 20 ปี เขาปรับปรุง พัฒนา และดูแลความเข้ากันได้ของระบบโดยไม่ได้รับค่าจ้างหรือการสนับสนุนจากบริษัทเทคโนโลยียักษ์ใหญ่ที่นำโค้ดของเขาไปสร้างกำไรเลย




ปฏิบัติการแทรกซึมระยะยาว: Social Engineering ของ “Jia Tan”

ประมาณปี 2021 แฮกเกอร์ที่ใช้นามแฝงว่า Jia Tan (บัญชี GitHub: JiaT75) ได้เริ่มปฏิบัติการแทรกซึมที่มีการวางแผนมาอย่างยาวนานกว่า 2-3 ปี:

  1. สร้างแรงกดดันทางจิตวิทยา (Sockpuppet Pressure):มีกลุ่มบัญชีนิรนามกลุ่มหนึ่ง (คาดว่าเป็นบัญชีหลุมที่สร้างขึ้นมา) เข้าไปรุมส่งอีเมลกดดัน Lasse Collin บน Mailing List อย่างดุดัน กล่าวหาว่าเขาเพิกเฉย ไม่ยอมรวมโค้ด (Merge) ใหม่ ๆ และปล่อยให้โปรเจกต์ล่าช้า จนทำให้ Lasse เผชิญกับภาวะหมดไฟ (Burnout) และยอมรับว่าสุขภาพจิตของตนเองกำลังย่ำแย่
  2. เปิดตัวในฐานะ “ผู้ช่วยแสนดี”:ในขณะที่ Lasse กำลังเหนื่อยล้า Jia Tan ได้ปรากฏตัวเข้ามาช่วยตรวจโค้ด เขียนแพตช์ที่เป็นประโยชน์ และแก้ปัญหาต่าง ๆ อย่างขยันขันแข็งและมีมารยาทดีเยี่ยม
  3. ยึดสิทธิ์ผู้ดูแล (Maintainer Status):ด้วยความช่วยเหลืออย่างต่อเนื่องตลอดหลายเดือน ทำให้ Lasse ไว้วางใจและค่อย ๆ ส่งต่อสิทธิ์การดูแลโครงการ (Commit Rights และ Release Access) ให้แก่ Jia Tan ในที่สุด



ผ่ากลไกทางเทคนิคของ XZ Utils Backdoor: ความซับซ้อนระดับรัฐสนับสนุน

เป้าหมายสูงสุดของ Jia Tan ไม่ใช่โปรแกรมบีบอัดไฟล์ แต่คือ OpenSSH (sshd) ซึ่งเป็นโปรโตคอลหลักที่ผู้ดูแลระบบทั่วโลกใช้เพื่อรีโมตล็อกอินเข้าไปสั่งการเซิร์ฟเวอร์

แม้ OpenSSH จะเป็นระบบที่ปลอดภัยและถูกตรวจสอบโค้ดอย่างเข้มงวดที่สุดตัวหนึ่งในโลก แต่ในระบบปฏิบัติการตระกูล Linux บางตัว (เช่น Debian, Ubuntu, Fedora) OpenSSH ได้ถูกปรับแต่งให้เรียกใช้งานไลบรารี libsystemd เพื่อรองรับการแจ้งเตือนสถานะ และตัว libsystemd นี้เองที่มีการเชื่อมโยง (Dependency) ไปยัง liblzma ของ XZ Utils ทำให้เกิด “สะพานเชื่อมทางอ้อม” ที่ทำให้โค้ดของ XZ ถูกโหลดเข้าไปทำงานอยู่ในโปรเซสของ OpenSSH ทันทีที่เซิร์ฟเวอร์เปิดใช้งาน

Jia Tan จึงออกแบบการโจมตีผ่าน 3 ขั้นตอนที่แยบยล




ขั้นที่ 1: ม้าโทรจันในไฟล์ทดสอบ (Binary Blobs)

ในระบบควบคุมเวอร์ชันของ GitHub ทุกคนสามารถตรวจดูความเปลี่ยนแปลงของโค้ดได้ หากใส่โค้ดอันตรายลงไปตรง ๆ จะถูกจับได้ทันที Jia Tan จึงนำเพย์โหลดอันตรายไปซ่อนและแปลงสภาพไว้ใน ไฟล์ไบนารีสำหรับทดสอบการบีบอัด (Test Files) ซึ่งปกติดูเหมือนไฟล์ขยะสุ่มที่ไม่มีใครเปิดอ่าน จากนั้นเขาแอบแก้ไขไฟล์สคริปต์การคอมไพล์ (M4 / Autoconf scripts) เพื่อสั่งให้ระบบแตกไฟล์และฉีดโค้ดอันตรายเข้าไปในระหว่างการสร้างไฟล์แพ็กเกจ (Source Tarball) เท่านั้น ทำให้โค้ดประตูลับนี้ไม่เคยปรากฏอยู่บน GitHub ให้ใครเห็น




ขั้นที่ 2: ช่วงเวลาทองคำ (The Goldilocks Zone)

เป้าหมายของโค้ดคือการเข้าแทรกแซงฟังก์ชันตรวจสอบการเข้ารหัส RSA_public_decrypt ของ OpenSSH เพื่อเปลี่ยนให้มันตรวจสอบรหัสลับของตัวแฮกเกอร์เอง แต่การแก้ไขหน่วยความจำทำได้ยากมาก เพราะระบบ Linux สมัยใหม่มีกลไกป้องกัน

  • หากแก้เร็วเกินไป ตัว Dynamic Linker จะเขียนทับแอดเดรสจริงกลับลงไปในตาราง Global Offset Table (GOT)
  • หากแก้ช้าเกินไป ระบบจะล็อกตาราง GOT ให้เป็นแบบอ่านอย่างเดียว (Read-Only) ป้องกันการแก้ไข

Jia Tan จึงแก้เกมด้วยการใช้ฟีเจอร์ GNU Indirect Function (IFUNC) ร่วมกับ Dynamic Audit Hooks เพื่อรันโค้ดในช่วงเวลาเพียงเสี้ยววินาที—คือจังหวะที่ระบบกำลังโหลดไลบรารีก่อนที่หน่วยความจำจะถูกล็อกเป็น Read-Only แล้วสลับทิศทางของฟังก์ชัน RSA_public_decrypt ให้ชี้มายังโค้ดประตูลับของเขาแทน




ขั้นที่ 3: ระบบปิดล็อกเฉพาะตัวแฮกเกอร์ (Cryptographic Safeguards)

ประตูลับนี้ถูกสร้างขึ้นอย่างระมัดระวังที่สุด:

  • ไม่ใช่ว่าใครส่งโค้ดอะไรมาก็จะเปิดเซิร์ฟเวอร์ให้ แต่ประตูลับนี้จะทำงานก็ต่อเมื่อมีคำขอเชื่อมต่อที่ลงลายมือชื่อดิจิทัลด้วย Private Key เฉพาะของ Jia Tan เท่านั้น
  • หากเป็นการล็อกอินของคนอื่น หรือเป็นการพยายามสแกนหาช่องโหว่ โค้ดจะส่งคำสั่งต่อไปยังฟังก์ชัน OpenSSH ของจริงตามปกติ และไม่แสดงพฤติกรรมผิดปกติใด ๆ
  • โค้ดจะล้างประวัติการล็อกอิน (Logs) ทิ้งทั้งหมด ทำให้ผู้ดูแลระบบไม่สามารถตรวจสอบย้อนหลังได้ว่าเคยมีใครแอบรีโมตเข้ามาควบคุมเครื่องในฐานะ root



ความผิดพลาดและการค้นพบโดยบังเอิญ

Jia Tan ต้องการให้ประตูลับนี้ถูกรวมเข้าสู่ RHEL 10 (Red Hat Enterprise Linux 10) ซึ่งเป็นระบบปฏิบัติการเกรดองค์กรที่รัฐบาล สถาบันการเงิน และระบบโครงสร้างพื้นฐานทั่วโลกใช้ ซึ่งมีรอบปล่อยเวอร์ชันใหญ่ทุก ๆ 3 ปี ทำให้เขาต้องรีบผลักดันโค้ด XZ เวอร์ชัน 5.6.0 และ 5.6.1 เข้าสู่ดิสโทรทดสอบอย่าง Fedora Rawhide/40, Debian Testing และ Ubuntu อย่างเร่งด่วน

แต่ความซับซ้อนของโค้ดกลายเป็นจุดจบ:

  1. โค้ดที่เขียนแบบ Low-level เพื่อหลบเลี่ยงการตรวจสอบของคอมไพเลอร์เกิดข้อผิดพลาดด้านการจัดการหน่วยความจำ (Memory Leak) จนซอฟต์แวร์ตรวจสอบอย่าง Valgrind ฟ้องเตือน แม้ Jia Tan จะแต่งเรื่องกลบเกลื่อนว่าเป็นปัญหาเรื่องข้อมูลสุ่ม แต่ก็เริ่มสะกิดใจนักพัฒนาบางคน
  2. ในเดือนมีนาคม 2024 Andres Freund วิศวกรของ Microsoft ซึ่งกำลังทดสอบประสิทธิภาพของฐานข้อมูล PostgreSQL บน Debian Unstable สังเกตเห็นว่ากระบวนการล็อกอิน SSH ใช้เวลาช้าลงผิดปกติประมาณ 0.5 วินาที (400–500 มิลลิวินาที) และมีการใช้งาน CPU เพิ่มขึ้นเล็กน้อย
  3. Andres ตัดสินใจขุดค้นลงลึกและวิเคราะห์คำสั่งแบบ Reverse Engineering จนพบว่าความหน่วงนี้เกิดจากกระบวนการถอดรหัสและฮุกหน่วยความจำของไลบรารี XZ Utils
  4. เขาแจ้งเตือนทีมความปลอดภัยและเผยแพร่รายงานสู่สาธารณะทันที ทำให้ผู้ดูแลระบบทั่วโลกสามารถสั่งย้อนเวอร์ชัน (Rollback) ได้ทันเวลาก่อนที่แพ็กเกจอันตรายนี้จะถูกนำไปใช้งานในเวอร์ชัน Production ส่วนบัญชีและตัวตนของ “Jia Tan” ก็หายสาบสูญไปทันที



สรุปและบทเรียนสำคัญ

เหตุการณ์ XZ Utils Backdoor (CVE-2024-3094) นับเป็นกรณีศึกษาการโจมตีแบบห่วงโซ่อุปทาน (Supply Chain Attack) ที่ประณีตและอันตรายที่สุดครั้งหนึ่งในประวัติศาสตร์คอมพิวเตอร์:

มิติการวิเคราะห์ บทเรียนและข้อเท็จจริง
ตัวตนผู้โจมตี การลงทุนลงแรงยาวนานหลายปีโดยไม่หวังผลกำไรทางการเงินระยะสั้น ชี้ชัดว่าผู้โจมตีเป็น กลุ่มแฮกเกอร์ระดับรัฐ (Nation-State Actor) ที่มุ่งหวังใช้เป็นอาวุธไซเบอร์เชิงยุทธศาสตร์
ความเข้าใจผิดเรื่องความปลอดภัย กฎของไลนัส (Linus’s Law) ที่ว่า “ด้วยสายตาที่มากพอ บั๊กทุกตัวจะตื้นเขิน” ใช้ไม่ได้เสมอไปกับโครงการซอฟต์แวร์ขนาดเล็กที่ถูกมองข้าม แม้จะมีคนใช้งานนับล้านแต่กลับไม่มีใครตรวจดูไส้ใน
ความเปราะบางของมนุษย์ จุดอ่อนที่อันตรายที่สุดไม่ได้อยู่ที่ตัวภาษาหรือคอมไพเลอร์ แต่อยู่ที่การปล่อยให้นักพัฒนาอาสาสมัครต้องแบกรับภาระระบบระดับโลกเพียงลำพังจนเกิดช่องว่างให้ถูกโจมตีทางจิตวิทยา (Social Engineering) ได้

เหตุการณ์นี้กลายเป็นสัญญาณเตือนภัยครั้งสำคัญที่บีบให้บริษัทยักษ์ใหญ่และประชาคมเทคโนโลยีทั่วโลก ต้องหันกลับมาทบทวนการสนับสนุนเงินทุนและการตรวจสอบความมั่นคงปลอดภัยให้กับโครงการโอเพนซอร์สพื้นฐานอย่างจริงจังในปัจจุบัน


The Internet Was Weeks Away From Disaster And No One Knew

Exit mobile version