Cryptominer ELFs ใช้ MSR เพื่อเพิ่มกระบวนการขุด

Cryptominer ELFs ใช้ MSR เพื่อเพิ่มกระบวนการขุด
ทีมวิจัยภัยคุกคามของ Uptycs สังเกตเห็น Golang-based worm ปล่อยไบนารี cryptominer ซึ่งใช้ไดรเวอร์ MSR (Model Specific Register) เพื่อปิดใช้งานการดึงข้อมูลล่วงหน้าของฮาร์ดแวร์ (Hardware Prefetcher) และเพิ่มความเร็วของกระบวนการขุดขึ้น 15%
The Golang-based worm ซึ่งมุ่งเป้าการโจมตีไปยังเป้าหมายเซิร์ฟเวอร์ *nix ที่มีช่องโหว่ โดยใช้ประโยชน์จากช่องโหว่ของเว็บเซิร์ฟเวอร์ที่เป็นที่นิยม เพื่อแพร่กระจายตัวเอง และตัวขุดที่ฝังตัว worm สายพันธุ์ใหม่ซึ่งถูกตรวจจับได้ในเดือนมิถุนายน พ.ศ. 2564 โดยระบบ Threat Intelligence แม้ว่าฟังก์ชันการทำงานบางอย่างจะคล้ายกับมัลแวร์ที่บริษัทรักษาความปลอดภัย Intezer กล่าวถึงเมื่อปีที่แล้ว แต่มัลแวร์รุ่นใหม่นี้ก็มีฟังก์ชันที่มากกว่าเดิม
ข้อมูลต่อไปนี้จะให้รายละเอียดเกี่ยวกับการใช้ MSR เพื่อปิดใช้งานการดึงข้อมูลฮาร์ดแวร์ล่วงหน้าในมัลแวร์ cryptomining นอกจากนี้ยังกล่าวถึงเทคนิคใหม่บางอย่างที่ใช้โดยผู้โจมตีใน kill chain เพื่อฝังตัว และติดตั้ง Worm ลงในไดเร็กทอรีที่สำคัญบนเซิร์ฟเวอร์ที่มีช่องโหว่

ตัวดึงข้อมูลฮาร์ดแวร์ (Hardware Prefetcher) และ MSR
ตัวดึงข้อมูลฮาร์ดแวร์ล่วงหน้าเป็นเทคนิคที่โปรเซสเซอร์ใช้ดึงข้อมูลล่วงหน้าโดยพิจารณาจากพฤติกรรมการเข้าถึงที่ผ่านมาโดย Core โปรเซสเซอร์ (หรือ CPU) โดยตัวดึงข้อมูลฮาร์ดแวร์ล่วงหน้า จะเก็บข้อมูลจากหน่วยความจำหลักลงในแคช L2 อย่างไรก็ตาม สำหรับโปรเซสเซอร์แบบมัลติคอร์ การดึงข้อมูลฮาร์ดแวร์ล่วงหน้าอาจส่งผลให้ประสิทธิภาพของระบบโดยรวมลดลง
MSR ในสถาปัตยกรรมโปรเซสเซอร์ใช้เพื่อสลับคุณลักษณะบางอย่างของ CPU และการตรวจสอบประสิทธิภาพของคอมพิวเตอร์ การจัดการกับการ MSR ทำให้สามารถปิดใช้งานการดึงข้อมูลฮาร์ดแวร์ล่วงหน้าได้

ซอฟต์แวร์ขุดเหรียญคริปโตใช้ MSR เพื่อปิดใช้งานการดึงข้อมูลฮาร์ดแวร์ล่วงหน้า
ซอฟต์แวร์ขุดเหรียญคริปโตที่ทำงานด้วยสิทธิ์ของ Root สามารถปิดใช้งานตัวดึงข้อมูลล่วงหน้าได้ สิ่งนี้ทำเพื่อเพิ่มประสิทธิภาพการดำเนินการขุดเหรียญ ซึ่งจะเป็นการเพิ่มความเร็วของกระบวนการขุด โดยมีการตรวจพบจากการขุดเหรียญ Xmrig โดยระบบ Threat Intelligence ซึ่งใช้ MSR เพื่อปิดการใช้งานตัวดึงข้อมูลฮาร์ดแวร์ล่วงหน้า
นักขุด Xmrig ใช้อัลกอริทึม RandomX สร้างโปรแกรมที่ไม่ซ้ำกันหลายโปรแกรม ซึ่งสร้างขึ้นโดยข้อมูลที่เลือกจากชุดข้อมูลที่สร้างจากแฮชของบล็อกคีย์ รหัสที่จะเรียกใช้ภายใน VM ถูกสร้างขึ้นแบบสุ่มและแฮชผลลัพธ์จะถูกใช้ในการทำงาน
เนื่องจากโปรแกรม RandomX ทำงานใน VM การดำเนินการนี้จึงมักใช้หน่วยความจำมาก ดังนั้น ตัวขุดจะปิดใช้งานตัวดึงข้อมูลฮาร์ดแวร์ล่วงหน้าโดยใช้ MSR ตามเอกสารของ Xmrig การปิดใช้งานตัวดึงข้อมูลฮาร์ดแวร์ล่วงหน้าจะเพิ่มความเร็วได้มากถึง 15%
นักขุดเหมืองใช้คำสั่ง modprobe msr เพื่อโหลดไดรเวอร์ msr (ดังรูปที่ 1)
รูปที่ 1: คำสั่งที่ใช้โหลดไดรเวอร์ msr

สิ่งนี้ทำได้เพราะใน modular kernels ไดรเวอร์ msr จะไม่โหลดโดยอัตโนมัติ เมื่อโหลดไดรเวอร์ msr แล้ว ไฟล์เทียมจะถูกสร้างขึ้นใน /dev/cpu/ (/dev/cpu/CPUNUM/msr) ซึ่งมีอินเทอร์เฟซสำหรับอ่านและเขียนรีจิสเตอร์เฉพาะรุ่น (MSR) ของ x86 CPU นักขุดจะเข้าถึง /dev/cpu/CPUNUM/msr เพื่อแก้ไขค่าที่มีอยู่ของ msr ด้วยค่าใหม่ดังที่แสดงด้านล่าง (ดังรูปที่ 2)
รูปที่ 2: การแก้ไขไฟล์ MSR

สำหรับการปิดใช้งานตัวดึงข้อมูลฮาร์ดแวร์ล่วงหน้า นักขุดจะเข้าถึงไฟล์อักขระพิเศษ /dev/CPU/CPUNUM/msr เพื่ออ่านค่าเก่าของ msr แล้วแก้ไขโดยใช้การเรียกระบบ pwrite ในขนาด 8 ไบต์ รหัสเทียมของกิจกรรมนี้แสดงอยู่ด้านล่าง (ดังรูปที่ 3)
รูปที่ 3: รหัสปลอม

นอกจากนี้ "wrmsr" ที่ตั้งค่าเป็นจริงในการกำหนดค่า miner สำหรับการเปิดใช้งานคุณลักษณะ MSR จะแสดงอยู่ด้านล่าง (ดังรูปที่ 4)
รูป:4 ไฟล์ Config:Miner

Wormed cyptominer: attack kill chain
1.Attack kill chain ของ cryptominer แบบ Worm เริ่มต้นด้วยสคริปต์ Shell ซึ่งดาวน์โหลด Golang worm โดยใช้ยูทิลิตี้ curl
2.Worm จะสแกนและใช้ประโยชน์จากช่องโหว่บนเซิร์ฟเวอร์ที่มีอยู่ เช่น CVE-2020-14882 และ CVE-2017-11610 จากเครื่องเหยื่อ
3.หลังจากเข้าถึงเซิร์ฟเวอร์ที่มีช่องโหว่แล้ว Worm จะดาวน์โหลดเชลล์สคริปต์อื่นซึ่งดาวน์โหลดสำเนาของ Golang worm เดียวกัน
4.worm ยังเขียนตัวมันเองหลายชุดไปยังไดเร็กทอรีที่มีความละเอียดอ่อนต่างๆ เช่น /boot,/efi,/grub และหลังจากนั้นจะปล่อย Xmrig miner ELF ลงในตำแหน่ง /tmp 5. ตัวขุดปิดการใช้งานตัวดึงข้อมูลฮาร์ดแวร์ล่วงหน้าโดยใช้ MSR เพื่อเพิ่มกระบวนการขุด

เชลล์สคริปต์ที่วิเคราะห์
(แฮช: 28e9b06e5a4606c9d806092a8ad78ce2ea7aa1077a08bcf3ec1d8e3d19714f08) เกี่ยวข้องกับเทคนิคการหลบเลี่ยงการป้องกันหลายอย่าง เช่น การปรับเปลี่ยนไฟร์วอลล์ การปิดใช้งานเอเจนต์การเฝ้าติดตาม ซึ่งได้ให้รายละเอียดไว้ในบล็อกที่แล้ว นอกจากนี้ สคริปต์ยังใช้คำสั่ง 'sed -i' เพื่อแก้ไขไฟล์ /etc/hosts ด้วย nanopool URL (ดังรูปที่ 5)รูปที่ 5: /etc/hosts modified

สคริปต์สุดท้ายจะดาวน์โหลดตัวอย่าง Worm ระยะแรกจาก 194.145.227[.]21 (ดังรูปที่ 6)
รูปที่ 6: Shell script network traffic - Downloading Worm

Pay load ขั้นแรก: Worm
Worm (163ef20a1c69bcb29f436ebf1e8a8a2b6ab6887fc48bfacd843a77b7144948b9) ถูกคอมไพล์ใน Golang และ UPX ที่บรรจุ
Worm ใช้แพ็คเกจ go-bindata เพื่อฝัง Xmrig miner ในตัวมันเอง (ดังรูปที่ 7)รูปที่ 7: /etc/hosts modified

ช่องโหว่ที่ถูกโจมตีโดย Worm
หลังจากมีการดาวน์โหลดในระบบเหยื่อ Worm จะสแกนหาเซิร์ฟเวอร์ที่มีช่องโหว่จากระบบเหยื่อก่อนเพื่อหาช่องโหว่ของเว็บเซิร์ฟเวอร์ที่รู้จัก เช่น CVE-2020-14882 และ CVE-2017-11610 แพ็กเกจสแกนเนอร์ที่ใช้โดยเวิร์มสำหรับการสแกนเซิร์ฟเวอร์ที่มีช่องโหว่จากระยะไกล (ดังรูปที่ 8)รูปที่ 8: Scanner modules

1.ตัวอย่าง Worm ส่วนใหญ่ใช้ประโยชน์จากช่องโหว่ต่อไปนี้:
CVE-2020-14882 - ช่องโหว่ path traversal แบบคลาสสิกที่ใช้สำหรับการใช้ประโยชน์จาก Web logic servers ที่มีช่องโหว่ ดูเหมือนว่าผู้โจมตีจะพยายามเลี่ยงกลไกการให้สิทธิ์โดยเปลี่ยน URL และดำเนินการข้ามเส้นทางโดยใช้การเข้ารหัสสองครั้งบน /console/images (ดังรูปที่ 9)รูปที่ 9: Worm ใช้ประโยชน์จากช่องโหว่ Path Traversal

2.CVE-2017-11610 - ช่องโหว่ Remote Code Authentication (RCE) ในอินเทอร์เฟซ XMLRPC ใน Supervisord XMLRPC เป็นอินเทอร์เฟซที่ให้บริการโดย wordpress เพย์โหลดที่เข้ารหัสใน <param> ที่ใช้โดยผู้โจมตีในการหาประโยชน์จาก XMLRPC (ดังรูปที่ 10)รูปที่ 10: เพย์โหลดที่เข้ารหัสใน <param>

หลังจากการหาประโยชน์ที่ประสบความสำเร็จ Worm จะใช้คำสั่งเข้ารหัส base64 ที่ดาวน์โหลดเชลล์สคริปต์ (hash:dfbe48ade0b70bd999abaf68469438f528b0e108e767ef3a99249a4a8cfa0176) บนเซิร์ฟเวอร์ที่มีช่องโหว่ระยะไกลจาก C2 โดยใช้คำสั่งที่เข้ารหัส base64 (ดังรูปที่ 11)รูปที่ 11: คำสั่งหลังการใช้ประโยชน์เพื่อปรับใช้เวิร์ม

เชลล์สคริปต์นี้ (ldr.sh) ดาวน์โหลด Worm จาก C2 เพื่อปรับใช้ XMrig miner บนเซิร์ฟเวอร์ผ่าน Worm อีกครั้ง (ดังรูปที่ 12)รูปที่ 12: Shell-script กำลังดาวน์โหลดเวิร์ม

Worm ทิ้ง Xmrig miner ลงใน /tmp
Worm ปรับใช้ Xmrig miner ที่ฝังตัวไปยังตำแหน่ง /tmp บนเซิร์ฟเวอร์เหยื่อ สำหรับการดำเนินการนี้ Worm จะสร้างไดเร็กทอรีใน /tmp โดยใช้ชื่อ u0jhm2 ก่อน หลังจากเปลี่ยนการอนุญาตโดยใช้ยูทิลิตี้ fchmod จะถูกดำเนินการ (ดังรูปที่ 13)รูปที่ 13: Worm วางตัวขุดใน /tmp

หลังจากดำเนินการ ตัวขุดไบนารี (kthreaddk) จะถูกลบโดยใช้ unlinkat syscall - unlinkat(AT_FDCWD, "/tmp/u0jhm2/kthreaddk", 0)
Worm ยังเขียนสำเนาของตัวเองไปยังไดเร็กทอรีที่มีความละเอียดอ่อน เช่น /boot, /boot/grub, /boot,efi, /X11 (ดังรูปที่ 14,15)รูปที่ 14: Worm binary คัดลอกตัวเองไปที่ /boot

รูปที่ 15: Worm binary คัดลอกตัวเองไปที่ /boot/efi

การฝังตัว
หลังจากเขียนตัวเองไปยังไดเร็กทอรีที่มีความละเอียดอ่อน Worm จะ registers ตัวเองใน crontabs และใช้ fchmod เพื่อเปลี่ยนการอนุญาตของไฟล์ที่ลงทะเบียน cron tmp.6GnMiL ซึ่งต่อมาเปลี่ยนชื่อเป็นรูท (ดังรูปที่ 16)รูปที่ 16: การเขียนไปยัง Cron และต่อมาเปลี่ยนการอนุญาต

ระบบข่าวกรองภัยคุกคามของเราระบุตัวอย่างที่คล้ายกัน 7 ตัวอย่างของ cryptominer แบบ Worm ที่ใช้ Golang แม้ว่าฟังก์ชันและการทำงานของไบนารีจะเหมือนกัน แต่ตัวอย่าง Worm บางตัว register เส้นทางที่แตกต่างกัน เช่น /dev/dri/by-path/<file_name>,/boot/<file_name> ใน crontab

การตรวจจับ Uptycs EDR
Uptycs EDR ที่เตรียมเครื่องมือด้วยการสแกนกระบวนการ YARA ตรวจพบ Xmrig cryptominer และการปรับเปลี่ยน MSR ด้วยคะแนนภัยคุกคาม 10/10 (ดังรูปที่ 17)รูปที่ 17: การตรวจจับ Uptycs EDR สำหรับการแก้ไข MSR และกิจกรรมที่เป็นอันตรายอื่นๆ

นอกจากนี้ การตรวจหาตามบริบท Uptycs EDR ยังให้รายละเอียดเพิ่มเติมเกี่ยวกับมัลแวร์ที่ตรวจพบ ผู้ใช้สามารถนำทางไปยังชุดเครื่องมือในการแจ้งเตือนการตรวจจับ และคลิกที่ชื่อเพื่อค้นหาลักษณะการทำงานและการทำงานของ Xmrig (ดังรูปที่ 18)รูปที่ 18: ข้อมูล Toolkit แสดงที่มา

บทสรุป
ด้วยการเพิ่มขึ้นและการประเมินมูลค่าที่สูงของ Bitcoin และสกุลเงินดิจิทัลอื่น ๆ การโจมตีโดยใช้ cryptomining ยังคงครอบคลุมภัยคุกคามอย่างต่อเนื่อง การโจมตีด้วย Wormed cyptominer มีเกณฑ์ที่สูงกว่าเมื่อเขียนสำเนาหลายชุด และกระจายไปทั่ว Endpoint ในเครือข่ายองค์กร นอกเหนือจากกระบวนการขุดแล้ว การปรับเปลี่ยนการลงทะเบียน MSR อาจนำไปสู่ปัญหาด้านประสิทธิภาพที่ร้ายแรงของทรัพยากรขององค์กร

Indicators of Compromise (IOCs) ที่เกี่ยวข้องกับ cryptomier แบบ Worm มีอยู่ใน Github

IOCs
C2: 194[.]145.227.21:5443

Shell script
28e9b06e5a4606c9d806092a8ad78ce2ea7aa1077a08bcf3ec1d8e3d19714f08
dfbe48ade0b70bd999abaf68469438f528b0e108e767ef3a99249a4a8cfa0176

Worm
41dbb7871093a6be9acc7327bc7a7757df2f157912ff5649b01390307283bb53
163ef20a1c69bcb29f436ebf1e8a8a2b6ab6887fc48bfacd843a77b7144948b9
de263e5ad81bb5e2be7d57c7e201fe172108d987562a98897736d8c9235661a2
67bb4acf52cc57f62f84161e068e254dba6b4058c04a5d707c057492bd208659
b22e47e11ff7aefc271bff1cbd2c904d8c4208f494208357a949242f6926dfc9
1b2909eda77c14b559b06a68a794868989b7e38c9ca185a3180c63e5c38622b5
f17b64733fa1ba60dda283bd4f6e6ce74fc921028e95c4c1a2079be39084085e
0d3b0dc5ea6643d36d745fcaa177eba88200b2b16596111e140f59092070594f

Miner
ba518af59262e878d31c71020ebfcbd50dfadf1e7c47a340003c80284681794b

ที่มา: Uptycs