كيف استطاع باحث في أمن المعلومات اختراق أجهزة iPhone 11 Pro عن بعد دون تفاعل المستخدم

كيف استطاع باحث في أمن المعلومات اختراق أجهزة iPhone 11 Pro عن بعد دون تفاعل المستخدم

في وقت سابق من هذا العام ، قامت شركة Apple بإصلاح واحدة من أكثر الثغرات الأمنية المذهلة والخطيرة في iPhone على الإطلاق: خلل في الذاكرة في نواة نظام التشغيل iOS الذي أعطى المهاجمين وصولاً عن بُعد إلى الجهاز بأكمله – عبر شبكة Wi-Fi ، دون الحاجة إلى تدخل المستخدم على الإطلاق.

وليس ذلك فقط، بل إن الثغرة تم برمجتها على شكل دودة، بمعنى أخر أن الجهاز المصاب بهذه الدودة سينشر الكود الخبيث إلى مستخدم أيفون أخر قريب دون الحاجة إلى تدخل المستخدم أيضاً.

هذا الهجوم أطلق عليه حزمة Wi-fi القاتلة تم برمجتها من قبل باحث في مشروع صفر (Zero-project) بواسطة Ian Beer يعمل في قسم الثغرات في شركة غوغل. نشر Ian مدونة مؤلفة من 30 ألف كلمة، وصف فيها الثغرة الأمنية وأثبت وجودها.

ماذا يستطيع المخترق أن يفعل بجهاز iPhone المخترق؟

يستطيع المخترق أن يقوم بإرسال كود خبيث إلى أي جهاز أيفون عبر أشارات شبكة Wifi والتحكم الكامل بالجهاز، على سبيل المثال الوصول إلى جهات الاتصال إو سرقة الصور واي محتوى أخر. 

اظهر Ian في هذه الفديوهات كيف استطاع القيام بذلك:https://www.youtube.com/embed/_sTw7GGoJ6g?showinfo=0

لاحظ في هذا الفديو كيف يقوم جهاز واحد مخترق بإرسال الدودة إلى جميع الأجهزة الأخرىhttps://www.youtube.com/embed/ikZTNSmbh00?showinfo=0

هل تم استغلال الثغرة؟

الجواب القصير لا أحد يعلم، ذكر Ian بأنه ليس لديه دليل على أن هذه الثغرة تم استغلالها أم لا؛ وأنه استخدم الهندسة العكسية للعثور على الثغرة. ولكن أكد أن هنالك من لاحظ أن شركة أبل قد أصلحت الثغرة، كما تشير هذه التغريدة من Mark Dowd ، المؤسس المشارك لشركة Azimuth Security ، وهي شركة أسترالية “رائدة في مجال أمن المعلومات”:

كما أن Ian ذكر أنه أبلغ Apple عن وجود الثغرة ثم قامت بدورها بشكل سريع بسدها في أيار ٢٠٢٠.

ماهي الثغرة التي عثر عليها Ian في نظام التشغيل iOS ل Apple ؟

قامت Apple في عام 2018 (وهو التاريخ المتوقع لبدء الثغرة) بإطلاق نسخة من نظام التشغيل iOS دون تعمية أسماء التوابع التي تعمل في النواة، وأثناء قيام Ian بتصفح النواة باستخدام الهندسة العكسية لاحظ مايلي:

توضح استدعاءات التوابع التي تظهرها أداة IDA: Cross References من قام باستدعاء التابع، ولاحظ Ian استدعاءات كثيرة من قبل memmove وهو تابع في C++ يقوم بنقل محتوى في الذاكرة من عنوان إلى عنوان آخر.

هذه الاستدعاءات تحوي ألاف التوابع ومن الصعب جدا تحديد ماذا يفعل كل استدعاء، ولكن أحد هذه الاستدعاءات لفتت نظر Ian وهو الاستدعاء المشار إليه في الصورة أعلاه: IO80211AWDLPeer::parseAwdlSyncTreeTLV.

يقول Ian أنه لم يعلم ماذا يعني AWDL ولكن يعلم ان TLV هي تسمية شهيرة تعني (Type, Length, Value) تستخدم لإعطاء بنية للبيانات (انظر لها للتبسيط كمتحول من نوع Type طوله Length وقيمته Value ).

وعند استخدام تابع TLV يعني ان البيانات قادمة من مكان غير موثوق ويتم إعطائها شكل في هذا التابع. وهنا كانت فرضية Ian أن هذه البيانات قادمة من جهاز Wi-Fi.

هذه المعلومات حتى الأن كانت كافية لكي يقوم Ian بإلقاء نظرة أقرب على هذا التابع، لذلك استخدم كومبايلر Hex-Rays الذي يقوم بفك تشفير المحتوى الثنائي، وكانت النتيجة ان محتوى هذا التابع هو:

__int64 __fastcall IO80211AWDLPeer::parseAwdlSyncTreeTLV(__int64 this, __int64 buf)
{
  const void *v3; // x20
  _DWORD *v4; // x21
  int v5; // w8
  unsigned __int16 v6; // w25
  unsigned __int64 some_u16; // x24
  int v8; // w21
  __int64 v9; // x8
  __int64 v10; // x9
  unsigned __int8 *v11; // x21
 
  v3 = (const void *)(buf + 3);
  v4 = (_DWORD *)(this + 1203);
  v5 = *(_DWORD *)(this + 1203);
  if ( ((v5 + 1) & 0xFFFFu) <= 0xA )
    v6 = v5 + 1;
  else
    v6 = 10;
  some_u16 = *(unsigned __int16 *)(buf + 1) / 6uLL;
  if ( (_DWORD)some_u16 == v6 )
  {
    some_u16 = v6;
  }
  else
  {
    IO80211Peer::logDebug(
      this,
      0x8000000000000uLL,
      "Peer %02X:%02X:%02X:%02X:%02X:%02X: PATH LENGTH error hc %u calc %u \n",
      *(unsigned __int8 *)(this + 32),
      *(unsigned __int8 *)(this + 33),
      *(unsigned __int8 *)(this + 34),
      *(unsigned __int8 *)(this + 35),
      *(unsigned __int8 *)(this + 36),
      *(unsigned __int8 *)(this + 37),
      v6,
      some_u16);
    *v4 = some_u16;
    v6 = some_u16;
  }
  v8 = memcmp((const void *)(this + 5520), v3, (unsigned int)(6 * some_u16));
  memmove((void *)(this + 5520), v3, (unsigned int)(6 * some_u16));

بالنظر إلى محتوى التابع، يمكن التأكد من انه يقوم بعملية إعراب parsing لمحتوى ما، وخصوصا رسالة الخطأ:

"Peer %02X:%02X:%02X:%02X:%02X:%02X: PATH LENGTH error hc %u calc %u\n" 

هذه كانت البداية من خلالها استطاع Ian اكمال عملية الاختراق، تستطيع قراءة باقي التفاصيل على المدونة الرسمية التي نشرها على مشروع صفر التابع لغوغل.

إصلاح الثغرة

إذا كان لديك جهاز أيفون وتقرأ هذه المدونة فلا تقلق عزيزي، فقد أكّد Ian إن شركة Apple أصلحت الثغرة الأمنية قبل إطلاق واجهات تتبع الاتصال الخاصة بـ COVID-19 التي تم إدخالها في iOS 13.5 في الشهر الخامس من ٢٠٢٠، ولكن يجب عليك التأكد أنك قمت بتحديث نظام التشغيل الخاص بك بعد ذلك التاريخ، ولكن تذكر أن هذه بالتأكيد لن تكون اخر ثغرة في التاريخ 🙂 

يكمن جمال هذا الاختراق وروعته أنه اعتمد على خطأ واحد للوصول لاسلكيًا إلى البيانات السريّة لمستخدم جهاز iPhone 11 Pro الأكثر صلابة وأمانًا في العالم. 

ويبقى السؤال، إذا تمكن شخص واحد من القيام بكل هذا في ستة أشهر، فكر فقط ماذا يستطيع فريق بموارد أفضل وتمويل أن يقوم بفعله اليوم؟