OceanLotus: อัปเดตมัลแวร์สำหรับ macOS

ในเดือนมีนาคม 2019 ตัวอย่างใหม่ของมัลแวร์ macOS จากกลุ่มไซเบอร์ OceanLotus ได้รับการอัปโหลดไปยัง VirusTotal ซึ่งเป็นบริการสแกนออนไลน์ยอดนิยม ไฟล์ปฏิบัติการแบ็คดอร์มีความสามารถเช่นเดียวกับมัลแวร์ macOS เวอร์ชันก่อนหน้าที่เราศึกษา แต่โครงสร้างของมันเปลี่ยนไปและทำให้ตรวจพบได้ยากขึ้น ขออภัย เราไม่สามารถค้นหาหยดที่เกี่ยวข้องกับตัวอย่างนี้ได้ ดังนั้นเราจึงไม่ทราบเวกเตอร์ของการติดเชื้อ

เราเพิ่งเผยแพร่ โพสต์เกี่ยวกับ OceanLotus และวิธีที่ผู้ปฏิบัติงานพยายามให้ความคงอยู่ เร่งความเร็วการเรียกใช้โค้ด และลดรอยเท้าบนระบบ Windows เป็นที่รู้กันว่ากลุ่มไซเบอร์กลุ่มนี้มีส่วนประกอบสำหรับ macOS ด้วย โพสต์นี้แสดงรายละเอียดการเปลี่ยนแปลงในมัลแวร์เวอร์ชันใหม่ล่าสุดสำหรับ macOS เมื่อเปรียบเทียบกับเวอร์ชันก่อนหน้า (อธิบายโดย Trend Micro) และยังอธิบายวิธีที่คุณสามารถทำการถอดรหัสสตริงโดยอัตโนมัติในระหว่างการวิเคราะห์โดยใช้ IDA Hex-Rays API

OceanLotus: อัปเดตมัลแวร์สำหรับ macOS

การวิเคราะห์

สามส่วนถัดไปจะอธิบายการวิเคราะห์ตัวอย่างด้วยแฮช SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. ไฟล์นี้เรียกว่า สว่างไสวผลิตภัณฑ์ป้องกันไวรัสของ ESET ตรวจพบว่าเป็น OSX/OceanLotus.D

การป้องกันการดีบักและการป้องกันแซนด์บ็อกซ์

เช่นเดียวกับไบนารี macOS OceanLotus ทั้งหมด ตัวอย่างจะถูกบรรจุด้วย UPX แต่เครื่องมือระบุตัวทำบรรจุภัณฑ์ส่วนใหญ่ไม่รู้จักเป็นเช่นนั้น อาจเป็นเพราะส่วนใหญ่มีลายเซ็นขึ้นอยู่กับการมีอยู่ของสตริง "UPX" นอกจากนี้ ลายเซ็น Mach-O นั้นพบได้น้อยกว่าและไม่ได้รับการอัปเดตบ่อยนัก คุณลักษณะนี้ทำให้การตรวจจับแบบคงที่ทำได้ยาก ที่น่าสนใจคือหลังจากแกะกล่องออกแล้ว จุดเริ่มต้นจะอยู่บริเวณตอนต้นของส่วนนี้ __cfstring ในส่วนนี้ .TEXT. ส่วนนี้มีแอตทริบิวต์ธงตามที่แสดงในภาพด้านล่าง

OceanLotus: อัปเดตมัลแวร์สำหรับ macOS
รูปที่ 1. แอ็ตทริบิวต์ส่วน MACH-O __cfstring

ดังแสดงในรูปที่ 2 ตำแหน่งรหัสในส่วน __cfstring ช่วยให้คุณสามารถหลอกลวงเครื่องมือถอดแยกชิ้นส่วนโดยแสดงโค้ดเป็นสตริง

OceanLotus: อัปเดตมัลแวร์สำหรับ macOS
รูปที่ 2 รหัสลับๆ ที่ IDA ตรวจพบเป็นข้อมูล

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

— พยายามปลดตะขอดีบักเกอร์ที่กำลังโทรออก ptrace с PT_DENY_ATTACH เป็นพารามิเตอร์คำขอ
- ตรวจสอบว่าพอร์ตพิเศษบางพอร์ตเปิดอยู่หรือไม่โดยการเรียกใช้ฟังก์ชัน task_get_exception_ports
- ตรวจสอบว่ามีการเชื่อมต่อดีบักเกอร์หรือไม่ ดังแสดงในรูปด้านล่าง โดยการตรวจสอบการมีอยู่ของแฟล็ก P_TRACED ในกระบวนการปัจจุบัน

OceanLotus: อัปเดตมัลแวร์สำหรับ macOS
รูปที่ 3. การตรวจสอบการเชื่อมต่อดีบักเกอร์โดยใช้ฟังก์ชัน sysctl

หากโปรแกรมเฝ้าระวังตรวจพบว่ามีดีบักเกอร์อยู่ ฟังก์ชันนี้จะถูกเรียกใช้ exit. นอกจากนี้ ตัวอย่างจะตรวจสอบสภาพแวดล้อมด้วยการรันคำสั่งสองคำสั่ง:

ioreg -l | grep -e "Manufacturer" и sysctl hw.model

จากนั้นตัวอย่างจะตรวจสอบค่าที่ส่งคืนกับรายการสตริงแบบฮาร์ดโค้ดจากระบบการจำลองเสมือนที่รู้จัก: เอเคิล, VMware, VirtualBox หรือ แนว. สุดท้าย คำสั่งถัดไปจะตรวจสอบว่าเครื่องเป็นหนึ่งใน “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” และ “XS” ต่อไปนี้หรือไม่ นี่คือรหัสรุ่นของระบบ เช่น "MBP" หมายถึง MacBook Pro, "MBA" หมายถึง MacBook Air เป็นต้น

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}

การเพิ่มเติมพื้นฐาน

แม้ว่าคำสั่งลับๆ จะไม่เปลี่ยนแปลงนับตั้งแต่การวิจัยของ Trend Micro แต่เราสังเกตเห็นการเปลี่ยนแปลงอื่นๆ บางประการ เซิร์ฟเวอร์ C&C ที่ใช้ในตัวอย่างนี้ค่อนข้างใหม่และสร้างขึ้นเมื่อวันที่ 22.10.2018/XNUMX/XNUMX

- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com

URL ทรัพยากรมีการเปลี่ยนแปลงเป็น /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
แพ็กเก็ตแรกที่ส่งไปยังเซิร์ฟเวอร์ C&C จะมีข้อมูลเพิ่มเติมเกี่ยวกับเครื่องโฮสต์ รวมถึงข้อมูลทั้งหมดที่รวบรวมโดยคำสั่งในตารางด้านล่าง

OceanLotus: อัปเดตมัลแวร์สำหรับ macOS

นอกเหนือจากการเปลี่ยนแปลงการกำหนดค่านี้ ตัวอย่างไม่ได้ใช้ไลบรารีสำหรับการกรองเครือข่าย libcurlแต่เป็นห้องสมุดภายนอก ในการค้นหา ประตูหลังจะพยายามถอดรหัสทุกไฟล์ในไดเร็กทอรีปัจจุบันโดยใช้ AES-256-CBC พร้อมคีย์ gFjMXBgyXWULmVVVzyxy, เสริมด้วยศูนย์ แต่ละไฟล์จะถูกถอดรหัสและบันทึกเป็น /tmp/storeและมีความพยายามที่จะโหลดเป็นไลบรารีโดยใช้ฟังก์ชัน หยด. เมื่อการพยายามถอดรหัสส่งผลให้การโทรสำเร็จ dlopenแบ็คดอร์จะแยกฟังก์ชันที่ส่งออก Boriry и ChadylonVซึ่งเห็นได้ชัดว่ามีหน้าที่รับผิดชอบในการสื่อสารเครือข่ายกับเซิร์ฟเวอร์ เราไม่มีไฟล์หยดหรือไฟล์อื่นๆ จากตำแหน่งดั้งเดิมของตัวอย่าง ดังนั้นเราจึงแยกวิเคราะห์ไลบรารีนี้ไม่ได้ นอกจากนี้ เนื่องจากส่วนประกอบถูกเข้ารหัส กฎ YARA ที่ยึดตามสตริงเหล่านี้จะไม่ตรงกับไฟล์ที่พบในดิสก์

ตามที่อธิบายไว้ในบทความข้างต้นจะสร้าง รหัสลูกค้า. ID นี้เป็นแฮช MD5 ของค่าตอบแทนของคำสั่งใดคำสั่งหนึ่งต่อไปนี้:

- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
- ifconfig en0 | awk '/ether /{print $2}' (รับที่อยู่ MAC)
- ทีมที่ไม่รู้จัก ("x1ex72x0a") ซึ่งใช้ในตัวอย่างนี้ก่อนหน้านี้

ก่อนที่จะแฮช จะมีการเพิ่ม "0" หรือ "1" ให้กับค่าที่ส่งคืนเพื่อระบุสิทธิ์ของรูท นี้ ClientID เก็บไว้ใน /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appexหากโค้ดทำงานเป็น root หรือใน ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML ในกรณีอื่นๆ ทั้งหมด โดยปกติไฟล์จะถูกซ่อนไว้โดยใช้ฟังก์ชัน _chflagsการประทับเวลาจะถูกเปลี่ยนโดยใช้คำสั่ง touch –t ด้วยค่าสุ่ม

ถอดรหัสสตริง

เช่นเดียวกับตัวเลือกก่อนหน้านี้ สตริงจะถูกเข้ารหัสโดยใช้ AES-256-CBC (คีย์เลขฐานสิบหก: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 เสริมด้วยศูนย์และ IV เติมด้วยศูนย์) ผ่านฟังก์ชัน CCCrypt. คีย์มีการเปลี่ยนแปลงจากเวอร์ชันก่อนหน้า แต่เนื่องจากกลุ่มยังคงใช้อัลกอริธึมการเข้ารหัสสตริงเดียวกัน การถอดรหัสจึงเป็นไปโดยอัตโนมัติ นอกเหนือจากโพสต์นี้ เรากำลังเผยแพร่สคริปต์ IDA ที่ใช้ Hex-Rays API เพื่อถอดรหัสสตริงที่อยู่ในไฟล์ไบนารี สคริปต์นี้อาจช่วยในการวิเคราะห์ OceanLotus ในอนาคตและการวิเคราะห์ตัวอย่างที่มีอยู่ซึ่งเรายังไม่สามารถหาได้ สคริปต์นี้ใช้วิธีสากลในการรับอาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชัน นอกจากนี้ยังค้นหาการกำหนดพารามิเตอร์ด้วย วิธีนี้สามารถนำมาใช้ซ้ำเพื่อรับรายการอาร์กิวเมนต์ของฟังก์ชันแล้วส่งต่อไปยังการโทรกลับ

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

OceanLotus: อัปเดตมัลแวร์สำหรับ macOS
รูปที่ 4 คำจำกัดความของตัวแปรส่วนกลาง key_len

ในหน้าต่างฟังก์ชัน คุณสามารถคลิกขวาที่ฟังก์ชันถอดรหัสแล้วคลิก "แยกและถอดรหัสอาร์กิวเมนต์" สคริปต์ควรวางบรรทัดที่ถอดรหัสไว้ในความคิดเห็น ดังแสดงในรูปที่ 5

OceanLotus: อัปเดตมัลแวร์สำหรับ macOS
รูปที่ 5 ข้อความที่ถอดรหัสแล้วจะถูกวางไว้ในความคิดเห็น

วิธีนี้จะทำให้สตริงที่ถอดรหัสถูกวางเข้าด้วยกันอย่างสะดวกในหน้าต่าง IDA xrefs สำหรับฟังก์ชันนี้ ดังแสดงในรูปที่ 6

OceanLotus: อัปเดตมัลแวร์สำหรับ macOS
รูปที่ 6. ฟังก์ชั่น Xrefs เป็น f_decrypt

สามารถดูสคริปต์สุดท้ายได้ที่ ที่เก็บ Github.

เอาท์พุต

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

ผลิตภัณฑ์ของ ESET ตรวจพบไฟล์นี้แล้วในขณะที่ทำการวิจัย เนื่องจากไลบรารีเครือข่ายที่ใช้สำหรับการสื่อสาร C&C ได้รับการเข้ารหัสบนดิสก์แล้ว จึงยังไม่ทราบโปรโตคอลเครือข่ายที่แน่นอนที่ผู้โจมตีใช้

ตัวชี้วัดของการประนีประนอม

ตัวชี้วัดของการประนีประนอมตลอดจนคุณลักษณะ MITER ATT&CK ก็มีให้เช่นกัน GitHub.

ที่มา: will.com

เพิ่มความคิดเห็น