تتداول نسخة من هذه القصة في مقالات أمنية، بعضها الآن يُولَّد بمساعدي ذكاء اصطناعي: يُفترض أن خدمة الفهرسة الخلفية في macOS، mdworker، تجلب الصور البعيدة داخل أي ملف HTML تنزّله، بحيث يمكن لملف لم تفتحه أبدًا أن يُبلغ عنوان IP الخاص بك إلى من أرسله. إنها قصة جيدة. وهي أيضًا نوع الادّعاء الذي ينبغي اختباره قبل تكراره، فاختبرناه.
ثلاثة أشياء مختلفة تحدث لملف جديد
يخلط الادّعاء بين ثلاث آليات منفصلة. حين يصل ملف إلى القرص، يسلّمه خادم البيانات الوصفية في Spotlight إلى إضافة استيراد، تعمل داخل عملية mdworker_shared، تستخرج نصًا وسمات بحيث يصبح الملف قابلًا للبحث (mdimport وmdls هما نافذتا سطر الأوامر على هذا). وبشكل منفصل، حين يحتاج Finder إلى أيقونة، يعرض تصغير Quick Look صورة مصغّرة صغيرة. ولا يعرض Quick Look معاينة كاملة إلا حين تحدد الملف وتضغط المسافة. يمكن أن يتصرف كل من هذه بشكل مختلف، لذا يحتاج كل واحد إلى اختباره الخاص.
الاختبار
شغّلنا مستمع HTTP صغيرًا على عنوان الاسترجاع الذاتي (loopback) يسجّل كل طلب مع وكيل المستخدم (User-Agent) الخاص به، ثم أنشأنا ملفين في ~/Downloads يشيران إليه: صفحة HTML بصورة بحجم بكسل واحد وورقة أنماط خارجية، وملف SVG بصورة خارجية مضمَّنة. يبقي الاسترجاع الذاتي التجربة مكتفية بذاتها؛ وسيستقبل خادم تتبع بعيد الطلبات نفسها، بالإضافة إلى عنوان IP العام الخاص بك.
<html><head><title>Q3 Financial Report</title></head><body>
<h1>Financial Summary</h1>
<img src="http://127.0.0.1:8765/html-img.png" width="1" height="1">
<link rel="stylesheet" href="http://127.0.0.1:8765/html-css.css">
</body></html><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100">
<image xlink:href="http://127.0.0.1:8765/svg-image.png" width="100" height="100"/>
</svg>1. مجرد تنزيله: فهرسة Spotlight
انتظرنا 40 ثانية بعد إنشاء الملفين، ثم تأكدنا أن Spotlight فهرسهما. لم يستقبل المستمع أي شيء.
mdls -name kMDItemContentType ~/Downloads/fireai-lab-test/q3-report.html
kMDItemContentType = "public.html"
# listener log: empty2. فرض تشغيل مستورِد Spotlight
لاستبعاد عامل التوقيت، شغّلنا المستورِد يدويًا. استخدم مستورِد RichText من Apple، واستخرج 37 سمة، ولم يُجرِ أي طلب.
mdimport -t -d1 ~/Downloads/fireai-lab-test/q3-report.html
Imported '…/q3-report.html' of type 'public.html' with plugIn /System/Library/Spotlight/RichText.mdimporter.
37 attributes returned
# listener log: still empty3. أيقونة Finder: صورة Quick Look المصغّرة
qlmanage -t -s 256 -o /tmp ~/Downloads/fireai-lab-test/q3-report.html ~/Downloads/fireai-lab-test/badge.svg
* …/q3-report.html produced one thumbnail
Done producing thumbnails
# listener log: still empty4. الضغط على المسافة: معاينة Quick Look
يفتح qlmanage -p لوحة المعاينة نفسها التي يفتحها تحديد ملف في Finder والضغط على المسافة (qlmanage). هذه المرة أضاء المستمع فورًا، لكلا الملفين:
qlmanage -p ~/Downloads/fireai-lab-test/q3-report.html
13:40:22.408 GET /html-img.png UA=Mozilla/5.0 (Macintosh; …) AppleWebKit/605.1.15 … Safari/605.1.15
13:40:22.408 GET /html-css.css UA=Mozilla/5.0 (Macintosh; …) AppleWebKit/605.1.15 … Safari/605.1.15
qlmanage -p ~/Downloads/fireai-lab-test/badge.svg
13:40:30.035 GET /svg-image.png UA=Mozilla/5.0 (Macintosh; …) AppleWebKit/605.1.15 … Safari/605.1.15| ما فعله المستخدم | الآلية | طلب بعيد؟ |
|---|---|---|
| لا شيء (نُزِّل الملف) | مستورِد Spotlight في mdworker_shared | لا |
| لا شيء (استيراد قسري) | mdimport، مستورِد RichText | لا |
| نظر إلى المجلد | صورة Quick Look المصغّرة (أيقونة Finder) | لا |
| حدّد الملف، وضغط المسافة | معاينة Quick Look (WebKit) | نعم: الصورة، وورقة الأنماط، وصورة SVG |
ماذا يعني هذا
النسخة «بلا نقرة» ليست ما قسناه: ملف يجلس في Downloads، وتفهرسه Spotlight، ويُعرض كأيقونة، لم يتصل بأي جهة. وهذا مهم، لأن دفاعًا مبنيًا على نموذج خاطئ يهدر الجهد في المكان الخاطئ. حظر mdworker من الوصول إلى الشبكة، على سبيل المثال، لم يكن ليغيّر شيئًا في هذا الاختبار.
أما نسخة الضغطة الواحدة فحقيقية. تعرض معاينة Quick Look ملفات HTML وSVG باستخدام WebKit وتحمّل مواردها البعيدة، لذا فإن ضغطة واحدة على المسافة على «تقرير» مرفق تُبلغ المُرسِل بأن الملف قد نُظر إليه، ومتى، ومن أي عنوان IP. هذه منارة ويب، الحيلة نفسها التي تستخدمها بكسلات تتبع البريد الإلكتروني والتي وُجدت حماية خصوصية البريد من Apple لإضعافها في Mail؛ لكنها ببساطة غير مشمولة حين يصل المحتوى نفسه كملف. بمصطلحات المهاجمين، هذا استطلاع لا اختراق: يصنّف MITRE ATT&CK T1598 هذا النوع من جمع المعلومات قبل هجوم حقيقي.
حدود هذا الاختبار
- إصدار واحد من macOS (26.7) وتشغيل واحد لكل حالة. قد يختلف السلوك على إصدارات أخرى؛ أعد تشغيله على إصدارك، الملفات أعلاه هي كل ما تحتاجه.
- استخدمنا عنوان استرجاع ذاتي. يتصرف عنوان URL عام بالطريقة نفسها بالنسبة لـ WebKit، لكننا لم نقسه هنا.
- اختبرنا HTML وSVG. أنواع أخرى بمراجع بعيدة (مثل
.webarchive، أو مستندات Office بصور مرتبطة، أو إضافات Quick Look من طرف ثالث) لم تُختبر وقد تتصرف بشكل مختلف في أي من الاتجاهين. qlmanage -pهي الواجهة الأمامية الخاصة بـ Apple لتصحيح الأخطاء في المعاينة؛ تستخدم معاينة زر المسافة في Finder الإطار نفسه، لكننا لم نُخضِع Finder نفسه للقياس.
ماذا تفعل
- عامل استخدام Quick Look على ملف HTML أو SVG غير موثوق كما لو كنت تفتحه. إن أردت فحص أحدها بأمان، اقرأه كنص:
cat file.html، أو افتحه في محرر نص عادي. - تحقق من نوع الملف قبل معاينته: يخبرك
mdls -name kMDItemContentType fileبما سيعرضه Quick Look، أيًا كانت أيقونته توحي به. - راقب أي عملية تُجري الاتصال، لا فقط ما إذا كان يحدث اتصال. هنا كانت معاينة WebKit تعمل نيابة عن Apple، وهذا سبب أن القواعد التي تثق أو لا تثق فقط بـ«التطبيقات التي ثبّتّها» تفوّت هذا.
الدرس الأوسع يتعلق بالمنهج. كُتبت النسخة الدرامية من هذه القصة بثقة وكان من السهل نشرها. عشرون دقيقة مع مستمع وأربعة أوامر أظهرت أين كانت خاطئة وأين يكمن الخطر الحقيقي والأصغر.
دور FireAI وHisnLabs
The fetch in this test came from a WebKit preview running on Apple’s behalf, not from an app you installed, which is exactly the kind of connection a per-app firewall exists to show you: FireAI lists the process, the destination and the country, and lets you deny it.
FireAI هو منتج HisnLabs نفسها: جدار حماية بذكاء اصطناعي يعمل على جهاز Mac مباشرة. يعرض بلغة واضحة كل اتصال تجريه تطبيقاتك، ويترك لك القرار فيما يخرج من جهازك — ذكاؤه الاصطناعي يعمل محليًا، فلا يُرسَل ترافيكك إلينا ولا إلى أي جهة أخرى أبدًا. فريق أبحاث الأمن في HisnLabs هو من يحافظ على دقة هذه القرارات: يصنّف النطاقات بين قياس عن بُعد عادي وخدمة حقيقية، ويتتبّع بلد وشبكة كل اتصال، ويدرّب النموذج المحلي (ميزة Autopilot) على حركة اتصال حقيقية، دون أن يغادر أي شيء جهاز Mac.
يمكنك الاطلاع على القرارات التقنية وراء ذلك، أو تجربة FireAI لمدة 17 يومًا، على FireAI من HisnLabs.
