ในเดือนมีนาคม 2019 ตัวอย่างใหม่ของมัลแวร์ macOS จากกลุ่มไซเบอร์ OceanLotus ได้รับการอัปโหลดไปยัง VirusTotal ซึ่งเป็นบริการสแกนออนไลน์ยอดนิยม ไฟล์ปฏิบัติการแบ็คดอร์มีความสามารถเช่นเดียวกับมัลแวร์ macOS เวอร์ชันก่อนหน้าที่เราศึกษา แต่โครงสร้างของมันเปลี่ยนไปและทำให้ตรวจพบได้ยากขึ้น ขออภัย เราไม่สามารถค้นหาหยดที่เกี่ยวข้องกับตัวอย่างนี้ได้ ดังนั้นเราจึงไม่ทราบเวกเตอร์ของการติดเชื้อ
เราเพิ่งเผยแพร่
การวิเคราะห์
สามส่วนถัดไปจะอธิบายการวิเคราะห์ตัวอย่างด้วยแฮช SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2
. ไฟล์นี้เรียกว่า สว่างไสวผลิตภัณฑ์ป้องกันไวรัสของ ESET ตรวจพบว่าเป็น OSX/OceanLotus.D
การป้องกันการดีบักและการป้องกันแซนด์บ็อกซ์
เช่นเดียวกับไบนารี macOS OceanLotus ทั้งหมด ตัวอย่างจะถูกบรรจุด้วย UPX แต่เครื่องมือระบุตัวทำบรรจุภัณฑ์ส่วนใหญ่ไม่รู้จักเป็นเช่นนั้น อาจเป็นเพราะส่วนใหญ่มีลายเซ็นขึ้นอยู่กับการมีอยู่ของสตริง "UPX" นอกจากนี้ ลายเซ็น Mach-O นั้นพบได้น้อยกว่าและไม่ได้รับการอัปเดตบ่อยนัก คุณลักษณะนี้ทำให้การตรวจจับแบบคงที่ทำได้ยาก ที่น่าสนใจคือหลังจากแกะกล่องออกแล้ว จุดเริ่มต้นจะอยู่บริเวณตอนต้นของส่วนนี้ __cfstring
ในส่วนนี้ .TEXT
. ส่วนนี้มีแอตทริบิวต์ธงตามที่แสดงในภาพด้านล่าง
รูปที่ 1. แอ็ตทริบิวต์ส่วน MACH-O __cfstring
ดังแสดงในรูปที่ 2 ตำแหน่งรหัสในส่วน __cfstring
ช่วยให้คุณสามารถหลอกลวงเครื่องมือถอดแยกชิ้นส่วนโดยแสดงโค้ดเป็นสตริง
รูปที่ 2 รหัสลับๆ ที่ IDA ตรวจพบเป็นข้อมูล
เมื่อดำเนินการแล้ว ไบนารี่จะสร้างเธรดเป็นตัวป้องกันดีบักเกอร์โดยมีวัตถุประสงค์เพียงอย่างเดียวคือตรวจสอบการมีอยู่ของดีบักเกอร์อย่างต่อเนื่อง สำหรับโฟลว์นี้:
— พยายามปลดตะขอดีบักเกอร์ที่กำลังโทรออก ptrace
с PT_DENY_ATTACH
เป็นพารามิเตอร์คำขอ
- ตรวจสอบว่าพอร์ตพิเศษบางพอร์ตเปิดอยู่หรือไม่โดยการเรียกใช้ฟังก์ชัน task_get_exception_ports
- ตรวจสอบว่ามีการเชื่อมต่อดีบักเกอร์หรือไม่ ดังแสดงในรูปด้านล่าง โดยการตรวจสอบการมีอยู่ของแฟล็ก P_TRACED
ในกระบวนการปัจจุบัน
รูปที่ 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 จะมีข้อมูลเพิ่มเติมเกี่ยวกับเครื่องโฮสต์ รวมถึงข้อมูลทั้งหมดที่รวบรวมโดยคำสั่งในตารางด้านล่าง
นอกเหนือจากการเปลี่ยนแปลงการกำหนดค่านี้ ตัวอย่างไม่ได้ใช้ไลบรารีสำหรับการกรองเครือข่าย 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 ในกรณีอื่นๆ ทั้งหมด โดยปกติไฟล์จะถูกซ่อนไว้โดยใช้ฟังก์ชัน touch –t
ด้วยค่าสุ่ม
ถอดรหัสสตริง
เช่นเดียวกับตัวเลือกก่อนหน้านี้ สตริงจะถูกเข้ารหัสโดยใช้ AES-256-CBC (คีย์เลขฐานสิบหก: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92
เสริมด้วยศูนย์และ IV เติมด้วยศูนย์) ผ่านฟังก์ชัน
รู้จักฟังก์ชันต้นแบบ ถอดรหัสสคริปต์จะค้นหาการอ้างอิงโยงทั้งหมดของฟังก์ชันนี้ อาร์กิวเมนต์ทั้งหมด จากนั้นถอดรหัสข้อมูลและวางข้อความธรรมดาไว้ในความคิดเห็นที่ที่อยู่การอ้างอิงโยง เพื่อให้สคริปต์ทำงานได้อย่างถูกต้อง จะต้องตั้งค่าเป็นตัวอักษรแบบกำหนดเองที่ใช้โดยฟังก์ชันถอดรหัส base64 และต้องกำหนดตัวแปรส่วนกลางที่ประกอบด้วยความยาวของคีย์ (ในกรณีนี้คือ DWORD ดูรูปที่ 4)
รูปที่ 4 คำจำกัดความของตัวแปรส่วนกลาง key_len
ในหน้าต่างฟังก์ชัน คุณสามารถคลิกขวาที่ฟังก์ชันถอดรหัสแล้วคลิก "แยกและถอดรหัสอาร์กิวเมนต์" สคริปต์ควรวางบรรทัดที่ถอดรหัสไว้ในความคิดเห็น ดังแสดงในรูปที่ 5
รูปที่ 5 ข้อความที่ถอดรหัสแล้วจะถูกวางไว้ในความคิดเห็น
วิธีนี้จะทำให้สตริงที่ถอดรหัสถูกวางเข้าด้วยกันอย่างสะดวกในหน้าต่าง IDA xrefs สำหรับฟังก์ชันนี้ ดังแสดงในรูปที่ 6
รูปที่ 6. ฟังก์ชั่น Xrefs เป็น f_decrypt
สามารถดูสคริปต์สุดท้ายได้ที่
เอาท์พุต
ดังที่ได้กล่าวไปแล้ว OceanLotus กำลังปรับปรุงและอัปเดตชุดเครื่องมืออย่างต่อเนื่อง คราวนี้กลุ่มไซเบอร์ได้ปรับปรุงมัลแวร์ให้ทำงานกับผู้ใช้ Mac ได้ โค้ดไม่ได้เปลี่ยนแปลงมากนัก แต่เนื่องจากผู้ใช้ Mac จำนวนมากเพิกเฉยต่อผลิตภัณฑ์รักษาความปลอดภัย การป้องกันมัลแวร์จากการตรวจพบจึงมีความสำคัญรองลงมา
ผลิตภัณฑ์ของ ESET ตรวจพบไฟล์นี้แล้วในขณะที่ทำการวิจัย เนื่องจากไลบรารีเครือข่ายที่ใช้สำหรับการสื่อสาร C&C ได้รับการเข้ารหัสบนดิสก์แล้ว จึงยังไม่ทราบโปรโตคอลเครือข่ายที่แน่นอนที่ผู้โจมตีใช้
ตัวชี้วัดของการประนีประนอม
ตัวชี้วัดของการประนีประนอมตลอดจนคุณลักษณะ MITER ATT&CK ก็มีให้เช่นกัน
ที่มา: will.com