11 คะแนน โดย GN⁺ 2025-03-16 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ผู้เขียนสามารถ กู้คืนข้อมูลของบริษัทที่ติดแรนซัมแวร์ Akira ได้สำเร็จโดยไม่ต้องจ่ายค่าไถ่
  • ซอร์สโค้ด ที่ใช้ในกระบวนการกู้คืนเผยแพร่ไว้บน GitHub
  • แรนซัมแวร์ Akira มีหลายสายพันธุ์ และสายพันธุ์นี้เริ่มเคลื่อนไหวตั้งแต่ช่วงปลายปี 2023
  • เวอร์ชันก่อนหน้า (ก่อนกลางปี 2023) มีบั๊กที่ทำให้ Avast สามารถพัฒนาเครื่องมือถอดรหัสได้ แต่หลังจากข้อมูลนี้ถูกเปิดเผย ผู้โจมตีก็อัปเดตวิธีเข้ารหัส
  • ตรวจสอบแฮชของตัวอย่างแรนซัมแวร์ได้ที่ GitHub

สรุปวิธีกู้คืนไฟล์ของ Akira ransomware (Linux/ESXI Variant 2024)

แนวทางการแก้ปัญหา

การวิเคราะห์เบื้องต้น

  • แรนซัมแวร์ใช้ เวลาปัจจุบันระดับนาโนวินาที เป็น seed
  • เนื่องจากเวลาแก้ไขไฟล์บน Linux มีความละเอียดระดับนาโนวินาที จึงพบความเป็นไปได้ในการกู้คืน seed
  • จึงลองใช้แนวทาง bruteforce โดยอิงจาก timestamp ของไฟล์ที่ถูกแก้ไข

กระบวนการเข้ารหัสที่ซับซ้อน

  • แรนซัมแวร์ใช้ ค่า seed 4 ค่า (เวลาระดับนาโนวินาที)
  • การสร้างกุญแจใช้การวนประมวลผล SHA-256 hash 1500 ครั้ง
  • ระบบไฟล์ VMware VMFS เก็บเวลาแก้ไขได้เพียงระดับวินาที
  • การเข้ารหัสแบบมัลติเธรดทำให้กู้คืนจังหวะเวลาที่แม่นยำได้ยาก

รีเวิร์สเอนจิเนียริง

  • โค้ดเขียนด้วย C++ ทำให้วิเคราะห์ยาก แต่ไม่ได้ถูก obfuscate
  • จากข้อความผิดพลาดยืนยันได้ว่ามีการใช้ ไลบรารี Nettle
  • ตัวสร้างเลขสุ่มอิงกับอัลกอริทึม Yarrow256 และใช้โค้ดดังนี้
void generate_random(char *buffer, int size)  
{  
    uint64_t t = get_current_time_nanosecond();  
    char seed[32];  
    snprintf(seed, sizeof(seed), "%lld", t);  
    struct yarrow256_ctx ctx;  
    yarrow256_init(&ctx, 0, NULL);  
    yarrow256_seed(&ctx, strlen(seed), seed);  
    yarrow256_random(&ctx, size, buffer);   
}  
  • ระหว่างการสร้างกุญแจมีการเรียก generate_random() 4 ครั้ง
    • chacha8_key (32 ไบต์)
    • chacha8_nonce (16 ไบต์)
    • kcipher2_key (16 ไบต์) × 2

การประเมินความเป็นไปได้ของการ bruteforce

กลยุทธ์หลัก

  • สร้าง timestamp สองค่า (t3, t4) แล้วแปลงเป็น seed เพื่อสร้างเลขสุ่ม
  • ใช้เลขสุ่มเป็น กุญแจ KCipher2 และ IV เพื่อเข้ารหัส แล้วเปรียบเทียบผลลัพธ์กับไฟล์ที่ถูกเข้ารหัส

การวิเคราะห์ประสิทธิภาพ

  • การแปลง timestamp 100 ล้านค่ากินเวลา 3 ชั่วโมง (บน CPU)
  • เมื่อใช้ GPU ความเร็วในการแปลงลดเหลือ ไม่ถึง 6 นาที
  • ภายในช่วงเวลา 1 วินาที มีคู่ที่เป็นไปได้ราว 500 ล้านล้านคู่
  • หลังปรับแต่ง GPU แล้ว RTX 3090 สามารถประมวลผลการเข้ารหัสได้ 1.5 พันล้านครั้งต่อวินาที

ประเภทไฟล์ VMWare และกลยุทธ์การกู้คืน

FLAT-VMDK

  • 8 ไบต์แรกของ VMDK สามารถกู้คืนได้จากบูตโหลดเดอร์
  • ต้องดูข้อมูล OS จากไฟล์ VMX แล้วติดตั้ง OS เดียวกัน

SESPARSE

  • ตรวจสอบแพตเทิร์นของส่วนหัวไฟล์ได้จากซอร์สโค้ดของ QEMU
  • ส่วนหัวขึ้นต้นด้วย 0x00000000cafebabe

ไฟล์อื่น ๆ

  • ไฟล์ NVRAM, ไฟล์ VMX, ไฟล์ล็อก ฯลฯ สามารถใช้ตรวจสอบ timestamp เริ่มต้นได้

การกู้คืน timestamp

ล็อก ESXi

  • ล็อก ESXi บันทึกเวลาเริ่มทำงานในระดับมิลลิวินาที
  • หากไม่มีล็อกระดับมิลลิวินาที ก็ยังสามารถประมาณจากเวลาระดับวินาทีได้

เวลาแก้ไขของระบบไฟล์

  • ในกรณีของ ESXi ความละเอียดมีเพียงระดับวินาที จึงคาดเดาเวลาที่แม่นยำได้ยาก

การเข้ารหัสแบบมัลติเธรด

  • การเข้ารหัสไฟล์ทำงานขนานตามจำนวนคอร์ของ CPU
  • เวลาแก้ไขของไฟล์จะใกล้เคียงกับเวลาที่เข้ารหัสเสร็จ

การพัฒนาเครื่องมือ bruteforce

อัลกอริทึม KCipher2

  • ใช้เวอร์ชันดัดแปลง ไม่ใช่ KCipher2 มาตรฐาน (รวมถึงการจัดการ Endian)
  • ใช้ CUDA เพื่อปรับแต่งให้เหมาะกับ GPU

การปรับปรุงประสิทธิภาพ

  • ปรับปรุงประสิทธิภาพด้วย shared memory
  • เพิ่มความเร็วด้วยการ ตัดการคัดลอกหน่วยความจำ
  • ทำ การประมวลผลไฟล์แบบขนาน → รองรับได้ราว 1.5 พันล้านครั้งต่อวินาที

RTX 3090 vs RTX 4090

  • RTX 4090 เร็วกว่า約 2.3 เท่า → ใช้เวลาราว 7 วัน
  • RTX 3090 → ใช้เวลาราว 16 วัน

ขั้นตอนการกู้คืน

1. ดึง timestamp

  • ใช้คำสั่ง stat เพื่อตรวจสอบเวลาแก้ไข
  • ดึงเวลาเริ่มทำงานจากล็อก ESXi

2. ดึงข้อมูลที่ถูกเข้ารหัส

  • ดึงบล็อกที่เข้ารหัสจาก VMDK, SESPARSE ฯลฯ

3. วัดความเร็วของเซิร์ฟเวอร์

  • ใช้เครื่องมือ timing-patch บน GitHub

4. แบ่งงาน

  • สร้างและแยกไฟล์คอนฟิก
  • ตั้งค่าให้สามารถรันแบบขนานบน GPU ได้

5. เช่า GPU และรันงาน

  • Runpod → ค่าใช้จ่ายราว 116 ดอลลาร์ สำหรับ 7 วัน
  • Vast.ai → ถูกกว่า แต่ความเร็วอาจต่างกันตามสภาพเครื่อง

6. รัน KCipher2 bruteforce

./akira-bruteforce run2 config.json  

7. รัน Chacha8 bruteforce

  • จำเป็นในกรณีของไฟล์ขนาดใหญ่

8. รันการถอดรหัส

./decrypt filename.vmdk <t1> <t2> <t3> <t4>  

ผลลัพธ์ด้านประสิทธิภาพ

  • RTX 3090 → 1.5 พันล้านครั้งต่อวินาที
  • RTX 4090 → 3.5 พันล้านครั้งต่อวินาที
  • หากใช้ RTX 4090 จำนวน 16 ใบ → กู้คืนได้ภายใน 10 ชั่วโมง

ความเป็นไปได้และข้อจำกัดของการกู้คืน

  • โอกาสกู้คืนแรนซัมแวร์สำเร็จต่ำกว่า 0.1%
  • หากตรงตามเงื่อนไขบางอย่างก็ยังมีความเป็นไปได้ในการกู้คืน
  • วิธีเข้ารหัสอาจเปลี่ยนไปตามสายพันธุ์ของแรนซัมแวร์

บทสรุป

  • การกู้คืนจากแรนซัมแวร์เป็นเรื่องยากมาก แต่ภายใต้เงื่อนไขบางอย่างก็อาจสำเร็จได้
  • bruteforce บน GPU คือเครื่องมือสำคัญ
  • ผู้เขียนเปิดซอร์สโค้ดสำหรับการกู้คืนเป็นโอเพนซอร์ส แต่ยากที่จะให้การสนับสนุนเพิ่มเติม

หมายเหตุเพิ่มเติม

  • ดูไฟล์ README.md บน GitHub
  • โค้ดนี้เขียนมาให้เหมาะกับสถานการณ์ของลูกค้ารายหนึ่งโดยเฉพาะ → ไม่ใช่เครื่องมืออเนกประสงค์
  • การสร้างไฟล์คอนฟิก การปรับ timing ฯลฯ ต้องอาศัยทักษะระดับผู้ดูแลระบบ

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

 
GN⁺ 2025-03-16
ความเห็นบน Hacker News
  • มีคนหนึ่งพูดถึง "อายุการใช้งานที่จำกัด" ของแรนซัมแวร์ จึงลบความเห็นที่บอกว่าเรื่องนี้ไม่ส่งผลต่อเหยื่อรายอื่นออกไป แต่ได้โพสต์คำตอบไว้

    • นั่นเป็นข้อมูลที่ไม่ถูกต้อง สิ่งที่มีข้อจำกัดคือจำนวนการโจมตีที่เหยื่อจะสามารถกู้ไฟล์กลับมาได้
    • หากคิดว่าผู้เขียนเป็นคนเดียวที่ใช้การโจมตีนี้ ก็เป็นความเข้าใจที่ผิดเช่นกัน
    • แนะนำหนังสือชื่อ The Ransomware Hunting Team เป็นหนังสือที่น่าสนใจซึ่งเล่าเบื้องหลังการที่เหยื่อกู้ไฟล์กลับคืนมา
  • มีคำถามว่าทำไมถึงใช้ไทม์สแตมป์

    • หวังว่าจะไม่เข้าใจผิดนะ ดีใจที่พวกเขาไม่ได้ใช้ แต่มันดูเหมือนความผิดพลาดระดับมือใหม่
    • เลยสงสัยว่าฉันพลาดอะไรไปหรือเปล่า หรือแค่มีคนจำนวนมากกว่าที่เลือกจะไม่ก่ออาชญากรรม
  • บทความนี้อ่านได้ดี และมีรายละเอียดมากพอเหมาะที่จะตอบสนองความอยากรู้อยากเห็นเกี่ยวกับกระบวนการ

    • ขอยกย่องผู้เขียนอย่างมากที่คิดค้นกระบวนการนี้ขึ้นมาและให้รายละเอียดที่น่าสนใจ
  • ถ้าแอปพลิเคชันถูก sandbox โดยค่าเริ่มต้น ปัญหาแรนซัมแวร์ก็น่าจะลดลง

  • "ฉันประเมินความเร็วในการคำนวณไทม์สแตมป์ 100,000 ค่า/วินาทีจากไบต์สุ่มบน CPU ของมินิพีซีของฉัน (ใช้ทุกคอร์)"

    • อยากรู้รายละเอียดเพิ่มเติมเกี่ยวกับมินิพีซี เช่น โปรเซสเซอร์, RAM, ราคา, และเป็นแบบไร้พัดลมหรือไม่
  • สงสัยว่าทำไมถึงเข้ารหัส 65k แรกด้วย KCipher2 แล้วส่วนที่เหลือเข้ารหัสด้วยอย่างอื่น มันดูแปลก

  • "ฉันคาดว่าหลังจากเผยแพร่สิ่งนี้แล้ว ผู้โจมตีจะเปลี่ยนวิธีเข้ารหัสอีกครั้ง"

    • ถ้าพวกเขาจะรับรู้เรื่องนี้ ก็สงสัยว่าทำไมถึงเผยแพร่ มันดูไม่รับผิดชอบที่จะให้ตัวถอดรหัสที่ละเอียดขนาดนี้เพื่อชื่อเสียงบนอินเทอร์เน็ต
    • เป็นเรื่องที่อ่านแล้วน่าสนใจและกระตุ้นความอยากรู้อยากเห็นทางปัญญา แต่การเก็บรายละเอียดเหล่านี้ไว้ไม่เปิดเผยน่าจะดีกับชุมชนโดยรวมมากกว่า
  • "ทุกครั้งที่ฉันเขียนเรื่องแรนซัมแวร์ในบล็อกภาษาอินโดนีเซียของฉัน จะมีคนจำนวนมากมาขอความช่วยเหลือเรื่องแรนซัมแวร์"

    • แค่การตรวจสอบว่าแรนซัมแวร์กู้คืนได้หรือไม่ ก็อาจใช้ความพยายามและเวลาหลายชั่วโมงแล้ว (เช่น เมื่อมัลแวร์ถูกทำให้อ่านยาก/ถูกป้องกันไว้)
    • ดังนั้นอย่ามาขอให้ทำให้ฟรี
    • งั้นก็ควรคิดค่าบริการ