
مستخرج القطع الأثرية لسجل ثغرات Airborne في iOS من LogArchive CVE-2025-24252
تم تصميم هذا السكريبت للمساعدة في تحديد الآثار المحتملة لمجموعة ثغرات "Airborne" (التي تؤثر بشكل أساسي على بروتوكول AirPlay من Apple) من خلال الاستعلام في سجلات نظام iOS الموجودة في حزمة .logarchive. يقوم بأتمتة تنفيذ عدة أوامر log show مصممة خصيصًا للعثور على الحالات الشاذة التي قد تكون مرتبطة بهذه الثغرات.
إخلاء مسؤولية: هذه الأداة لأغراض إعلامية وتحقيقية فقط. وجود إدخالات سجل مطابقة لهذه الاستعلامات لا يؤكد بشكل قاطع حدوث اختراق. يجب تحليل إدخالات السجل في سياقها. عدم وجود نتائج لا يضمن أن الجهاز آمن. تأكد دائمًا من تحديث أجهزتك إلى أحدث إصدارات أنظمة التشغيل.
تم تطوير هذا السكريبت بواسطة أنطون شوستيكوف [email protected] (وهو الآن الرئيس التنفيذي لشركة CakesCats) كجزء من مشروع CakesCats.
CakesCats هي مبادرة تركز على:
أنطون شوستيكوف هو مستشار في أمن المعلومات والتكنولوجيا المالية (fintech) يتمتع بخبرة واسعة في إنشاء أنظمة الأمان. وهو مؤسس المشروع التعليمي غير التجاري CakesCats ويساهم بمقالات في منشورات مثل Forbes ومجلة "Xakep". غالبًا ما يتضمن عمله التحقيق في التهديدات الرقمية وتعزيز النظافة الرقمية.
"Airborne" هو اسم يُطلق على مجموعة من الثغرات (التي اكتشفتها Oligo Security في أبحاثها الأصلية) التي تؤثر على بروتوكول AirPlay من Apple ومجموعة تطوير البرامج (SDK) الخاصة بـ AirPlay. يمكن أن تؤثر هذه الثغرات على مجموعة واسعة من أجهزة Apple (iPhone وiPad وMac وApple TV وغيرها) والأجهزة التابعة لجهات خارجية التي تستخدم AirPlay SDK (مثل مكبرات الصوت الذكية وأجهزة الاستقبال).
الجوانب الرئيسية لثغرات من نوع "Airborne":
rapportd الذي يتولى الاتصال بين الأجهزة.يقوم هذا السكريبت بتنفيذ سلسلة من أوامر log show باستخدام مسندات (predicates) مصممة بعناية. صُممت هذه المسندات لتصفية الكم الهائل من المعلومات في سجلات نظام iOS لتحديد المؤشرات المحتملة للاختراق أو النشاط الشاذ الذي قد يكون مرتبطًا بثغرات من نوع "Airborne".
يبحث السكريبت عن:
mediaserverd وAirPlayXPCHelper وrapportd وmDNSResponder).يتم حفظ مخرجات كل استعلام في ملف نصي منفصل ذي اسم وصفي داخل دليل نتائج يحمل طابعًا زمنيًا، مما يتيح إجراء تحليل مركّز لأنواع مختلفة من الآثار المحتملة.
log show وهذا السكريبت مصممان للعمل على macOS..logarchive): تحتاج إلى أرشيف سجلات نظام iOS (حزمة، وهي تقنيًا دليل) من الجهاز الذي تنوي تحليله. يمكن الحصول عليه عادةً عبر:
sysdiagnose: قم بتشغيل sysdiagnose على iPhone (عادةً بالضغط على أزرار رفع الصوت وخفض الصوت والزر الجانبي في وقت واحد، لكن التركيبات قد تختلف حسب الطراز وإصدار iOS). بعد إنشاء sysdiagnose (قد يستغرق عدة دقائق)، يمكن إرساله عبر AirDrop إلى جهاز Mac أو الوصول إليه عند مزامنة iPhone مع Mac (غالبًا ما تجده في Finder ضمن موقع مزامنة iPhone داخل ملف .tar.gz). سيكون .logarchive داخل محتويات sysdiagnose المستخرجة.bash.حفظ السكريبت:
احفظ كود السكريبت (المقدم أعلاه) كـ airborne_artifact_extractor.sh (أو أي اسم آخر بامتداد .sh).
جعله قابلاً للتنفيذ: افتح تطبيق Terminal، وانتقل إلى الدليل الذي حفظت فيه السكريبت، وقم بتشغيل الأمر التالي:
chmod +x airborne_artifact_extractor.sh
التحقق من سمة العزل في macOS (مهم للسكريبتات التي تم تنزيلها): إذا قمت بتنزيل هذا السكريبت من الإنترنت، فقد يقوم macOS بعزله، مما قد يمنعه من العمل بشكل صحيح أو من العمل تمامًا.
xattr airborne_artifact_extractor.sh
com.apple.quarantine، فقم بإزالة هذه السمة عن طريق تشغيل:
xattr -d com.apple.quarantine airborne_artifact_extractor.sh
إذا كنت لا تزال تواجه مشكلات في تشغيل السكريبت، خاصةً إذا كان موجودًا في دليل مثل ~/Downloads، فتأكد من أن تطبيق Terminal لديه الأذونات اللازمة (مثل "Full Disk Access" في System Settings -> Privacy & Security) للوصول إلى موقع السكريبت وأرشيف السجلات.
^M (مثل /bin/bash^M: bad interpreter: No such file or directory)إذا واجهت خطأً مثل bash: ./your_script_name.sh: /bin/bash^M: bad interpreter: No such file or directory أو /usr/bin/env: ‘bash\r’: No such file or directory أو رسائل مشابهة تتضمن أحرف \r أو ^M عند محاولة تنفيذ السكريبت، فمن المرجح أن السبب يعود إلى نهايات الأسطر بنمط Windows (CRLF - Carriage Return Line Feed) بدلاً من نهايات الأسطر بنمط Unix (LF - Line Feed).
يحدث هذا عادةً إذا تم إنشاء ملف السكريبت أو تحريره على نظام Windows ثم نقله إلى macOS أو Linux دون تحويل نهايات الأسطر. تتوقع أنظمة Unix استخدام LF فقط كمُنهٍ للسطر، ويُفسَّر حرف CR الإضافي (\r أو ^M) بشكل خاطئ على أنه جزء من مسار المفسِّر أو الأوامر.
الحل: تحويل نهايات الأسطر باستخدام dos2unix
أسهل طريقة لإصلاح ذلك هي استخدام أداة dos2unix.
تثبيت dos2unix:
على macOS (باستخدام Homebrew): إذا لم يكن لديك Homebrew، فقم بتثبيته أولاً من brew.sh. ثم قم بتشغيل:
brew install dos2unix
على توزيعات Linux القائمة على Debian/Ubuntu:
sudo apt update
sudo apt install dos2unix
على توزيعات Linux القائمة على Fedora/RHEL:
sudo dnf install dos2unix # (or yum for older versions)
تحويل ملف السكريبت:
انتقل إلى الدليل الذي يحتوي على airborne_artifact_extractor.sh وقم بتشغيل:
dos2unix airborne_artifact_extractor.sh
سيقوم هذا الأمر بتحويل نهايات الأسطر داخل الملف نفسه.
حلول بديلة (إذا لم تتوفر dos2unix أو لم تكن مفضلة):
باستخدام sed:
sed -i.bak 's/\r$//' airborne_artifact_extractor.sh
(يقوم هذا الأمر بتعديل الملف في مكانه وإنشاء نسخة احتياطية باسم airborne_artifact_extractor.sh.bak. في بعض إصدارات sed، خاصة على macOS، يتطلب خيار -i امتدادًا لملف النسخة الاحتياطية، مثل -i '.bak' أو -i '' لعدم وجود نسخة احتياطية إذا كان مدعومًا. بالنسبة لنظام macOS، قد تحتاج إلى sed -i '' 's/\r//g' airborne_artifact_extractor.sh)
باستخدام tr:
tr -d '\r' < airborne_artifact_extractor.sh > airborne_artifact_extractor_unix.sh
chmod +x airborne_artifact_extractor_unix.sh
# Then use airborne_artifact_extractor_unix.sh
محررات النصوص: تتيح لك معظم محررات النصوص الحديثة (مثل VS Code وSublime Text وAtom وNotepad++) تغيير نهايات الأسطر. افتح ملف السكريبت، وابحث عن إعداد نهايات الأسطر (عادةً في شريط الحالة أو قائمة File/Edit)، وغيّره من "CRLF" أو "Windows" إلى "LF" أو "Unix". ثم أعد حفظ الملف.
بعد تحويل نهايات الأسطر، حاول تشغيل السكريبت مرة أخرى. تذكر أيضًا التأكد من أن لديه أذونات التنفيذ (chmod +x airborne_artifact_extractor.sh).
قم بتنفيذ السكريبت من الطرفية (Terminal)، مع توفير المسار إلى حزمة .logarchive ومعاملات النطاق الزمني الاختيارية:
./airborne_artifact_extractor.sh /path/to/your/iphone_logs.logarchive [time_range_parameters]
المعاملات:
R1 (مطلوب): المسار الكامل أو النسبي لملف/حزمة .logarchive.
[time_range_parameters] (اختياري): معاملات النطاق الزمني القياسية لأمر log show. إذا تم حذفها، فسيتم ضبط السكريبت افتراضيًا على تحليل السجلات باستخدام --last 7d (آخر 7 أيام).
أمثلة:
--last 24h (لآخر 24 ساعة)
--last 3d (لآخر 3 أيام)
--start "YYYY-MM-DD HH:MM:SS" --end "YYYY-MM-DD HH:MM:SS" (لنطاق زمني محدد). مهم: تأكد من وضع سلسلة التاريخ والوقت بين علامتَي اقتباس.
إعداد المنطقة الزمنية: يتضمن السكريبت إعدادات المنطقة الزمنية في الأعلى، ويمكنك تعديلها:
TZ_SETTING: تحدد المنطقة الزمنية المستخدمة لتفسير معاملَي --start و--end اللذين تقدمهما. على سبيل المثال، إذا تم ضبطها على "Etc/GMT-7" (والتي تقابل UTC+7)، واستخدمت --start "2025-04-10 00:00:00"، فسيتم التعامل مع ذلك على أنه منتصف ليل 10 أبريل في المنطقة الزمنية UTC+7. إذا كنت تريد أن يستخدم السكريبت المنطقة الزمنية المحلية الحالية لجهاز Mac لهذه المعاملات، يمكنك ضبط TZ_SETTING="" أو التعليق على هذا السطر.
TIMEZONE_DISPLAY: تحدد المنطقة الزمنية لتنسيق الطوابع الزمنية في ملفات السجلات الناتجة عبر خيار log show --timezone. مثال: "Asia/Bangkok" لـ UTC+7. اختر اسم منطقة زمنية يتعرف عليها نظامك.
أمثلة على الأوامر:
تحليل السجلات من آخر 7 أيام (السلوك الافتراضي):
Bash
./airborne_artifact_extractor.sh /Volumes/ExternalHD/iOS_Logs/iPhone13_archive.logarchive
تحليل السجلات من آخر 48 ساعة: Bash
./airborne_artifact_extractor.sh ./My_iPhone_Sysdiagnose.logarchive --last 48h
تحليل السجلات لنطاق تاريخ ووقت محدد (سيتم تفسير الأوقات وفقًا لـ TZ_SETTING): Bash
./airborne_artifact_extractor.sh ../Log_Archives/device_XYZ.logarchive --start "2025-04-05 00:00:00" --end "2025-04-06 23:59:59"
سينشئ السكريبت دليلًا جديدًا باسم airborne_traces_YYYYMMDD_HHMMSS (حيث YYYYMMDD_HHMMSS هو التاريخ والوقت الحاليان) في نفس دليل السكريبت (أو في دليل العمل الحالي إذا لم يكن دليل السكريبت قابلاً للكتابة). داخل هذا المجلد، ستجد عدة ملفات .txt، يحتوي كل منها على مخرجات استعلام محدد. أسماء الملفات مسبوقة بأرقام للترتيب:
01_critical_process_errors.txt: الأعطال والأخطاء الخاصة بالعمليات الحرجة.
02_process_termination_exceptions.txt: الإنهاءات غير المتوقعة أو الاستثناءات في العمليات الرئيسية.
03_kernel_panics.txt: أحداث أعطال النواة (kernel panic).
04_airplay_subsystem_errors.txt: الأخطاء والأعطال في النظام الفرعي لـ AirPlay.
05_mdns_errors.txt: الأخطاء والأعطال في mDNSResponder (Bonjour).
06_airplay_pairing_auth_failures.txt: مشكلات الاقتران (pairing) أو المصادقة أو الاتصالات الخاصة بـ AirPlay/rapportd.
07_network_connection_errors.txt: أخطاء اتصال الشبكة من العمليات ذات الصلة.
08_networkd_errors.txt: الأخطاء في خدمة networkd بالنظام.
09_sandbox_violations.txt: الرسائل المتعلقة بانتهاكات صندوق الحماية (sandbox).
10_profile_activity.txt: النشاط المتعلق بملفات التعريف (configuration profiles).
الملفات الفارغة أمر شائع: ملف الإخراج الفارغ يعني عدم وجود إدخالات سجل مطابقة لمعايير ذلك الاستعلام المحدد للنطاق الزمني المحدد. في كثير من الحالات، هذه علامة جيدة، تشير إلى غياب تلك المؤشرات المشبوهة المحددة.
ركز على الأنماط والارتباطات: غالبًا لا تشير رسالة خطأ معزولة واحدة إلى اختراق. ابحث عن مجموعات من الأخطاء، أو تسلسلات مشبوهة من الأحداث عبر ملفات سجلات مختلفة، أو أخطاء ترتبط بالأوقات التي واجهت فيها سلوكًا غير طبيعي للجهاز أو كنت تستخدم خدمات يحتمل أن تكون عرضة للخطر مثل AirPlay.
ECONNRESET في سجلات rapportd (غالبًا في 06_... أو 07_...): تشير هذه إلى إنهاء اتصالات TCP بشكل مفاجئ. على الرغم من أنها قد تكون ناجمة عن مشكلات شبكة حميدة (ضعف Wi-Fi، مشكلات في الموجّه)، في سياق التحقيق في ثغرات "Airborne"، فإنها تستدعي فحصًا أوثق. يمكن أن تشير إلى عدم استقرار ناتج عن محاولة استغلال على جهازك أو جهاز نظير، أو إلى تداخل في الشبكة.
الأعطال (من نوع fault أو panic) في mediaserverd أو AirPlayXPCHelper (غالبًا في 01_... أو 02_...)، أو أعطال النواة (03_...)، هي عمومًا مؤشرات قوية على عدم استقرار النظام الذي قد يكون مرتبطًا بالاستغلال إذا حدثت بشكل غير متوقع أو أثناء تفاعلات الشبكة التي تستهدفها "Airborne".
السياق هو المفتاح: راجع دائمًا نتائج السجلات بالتزامن مع معرفتك بكيفية استخدام الجهاز في ذلك الوقت، وبيئة الشبكة التي كان فيها، وأي أعراض فعلية تمت ملاحظتها.
لا تتردد في عمل fork لهذا المستودع، أو اقتراح تحسينات، أو الإبلاغ عن مشكلات، أو إضافة استعلامات أكثر تحديدًا قد تكون مفيدة في تحديد آثار مثل هذه الثغرات.