تحمل كل حزمة بيانات IPv4 تمر عبر شبكة الإنترنت حقلاً تعريفياً مكوّناً من 16 بت يُعرف باسم معرف بروتوكول الإنترنت (IP ID) داخل ترويستها الثنائية. تم تعريف هذا الحقل عام 1981 في المعيار RFC 791 بهدف مساعدة أنظمة التشغيل في الطرف المستلم على تجميع قطع الحزم المجزأة (Fragments) التي تجاوز حجمها سعة النقل القصوى (MTU) في المسارات الوسيطة. ولعقود طويلة، طبّق مطورو أنوية الأنظمة هذا الحقل عبر متغير رقمي عام بسيط: في كل مرة يُرسل فيها الجهاز حزمة بيانات، يزداد هذا العداد الداخلي بمقدار واحد.

هذه الآلية الوظيفية تحولت إلى واحدة من أكثر ثغرات القنوات الجانبية (Side-Channel) دقة في تاريخ الشبكات. فمن خلال مراقبة الزيادات المتتالية في عداد IP ID لجهاز وسيط، يستطيع الفاحص الخارجي رسم خريطة المنافذ المحمية خلف الجدران النارية لخادم مستهدف دون إرسال حزمة واحدة من عنوان IP الحقيقي الخاص به، واستنتاج الاتصالات الداخلية وتقدير معدلات إرسال البيانات.

أعادت المعايير المعاصرة، ولا سيما وثيقة RFC 6864 وبروتوكولات التوجيه المشفرة مثل WireGuard، هيكلة تعامل أنظمة التشغيل مع معرفات الحزم بشكل جذري. ويكشف استيعاب هذه القناة الجانبية عن مبادئ أساسية في أمن طبقة النقل، وعزل حالات الذاكرة في النواة، وحصانة الأنفاق المشفرة.

+-------------------------------------------------------------------------+
|                  مثلث الهجوم الكلاسيكي لمسح IDLE SCAN                   |
+-------------------------------------------------------------------------+
|                                                                         |
|      1. فحص IP ID (SYN/ACK)            2. إرسال SYN منتحل (المصدر=زومبي) |
|         IP ID للزومبي = 31337             منفذ الهدف 443                |
|      ┌─────────────────────────┐       ┌─────────────────────────┐      |
|      │                         ▼       │                         ▼      |
|   [المهاجم]                  [جهاز الزومبي]                 [الخادم الهدف]|
|      ▲                         │       ▲                         │      |
|      │                         └───────┼─────────────────────────┘      |
|      3. إعادة فحص الزومبي (SYN/ACK)    │ رد الهدف بـ SYN/ACK للزومبي    |
|         IP ID للزومبي = 31339          │ الزومبي يرسل RST (زيادة العداد)|
|         الفارق دلتا = 2 -> المنفذ مفتوح! └───────────────────────┘      |
+-------------------------------------------------------------------------+

نشأة حقل التعريف في بروتوكول IPv4 (RFC 791)

وفقاً لمواصفات RFC 791، عندما يصادف موجه وسيط حزمة بيانات يفوق حجمها وحدة النقل القصوى للمسار التالي، يتعين عليه تجزئة الحزمة إلى أجزاء أصغر. ولكي يتمكن النظام المستلم من فصل الأجزاء العائدة لحزم مختلفة وتجميعها بدقة، يمنح النظام المرسل رقماً تعريفياً مستقلاً لكل حزمة أصلية.

يعتمد المستلم على أربعة عناصر أساسية لإعادة التركيب:

  • عنوان IP المصدر (Source IP)
  • عنوان IP الوجهة (Destination IP)
  • معرف البروتوكول (Protocol ID) (مثل TCP أو UDP أو ICMP)
  • قيمة التعريف (IP ID)

ولأن 16 بت لا تتيح سوى 65,536 قيمة محتملة، اكتفت أنظمة التشغيل القديمة (مثل إصدارات ويندوز وBSD وأنوية لينكس المبكرة) باستخدام متغير عام مشترك:

// التطبيق التقليدي في النواة: زيادة تصاعدية عامة
static unsigned short global_ip_id = 0;

void build_ip_header(struct iphdr *iph) {
    iph->id = htons(++global_ip_id);
}

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

تشريح هجوم Idle Scan: المسح الأعمى للمنافذ عبر أجهزة الزومبي

في عام 1998، كشف الباحث الأمني سالفاتوري سانفيليبو (antirez) أن عدادات IP ID المتوقعة تتيح فحصاً غير مباشر للمنافذ. وعُرفت هذه التقنية باسم Idle Scan (والمدرجة ضمن أداة Nmap عبر الخيار -sI)، وهي تمكّن الفاحص من مسح منافذ النظام المستهدف دون إرسال حزم تحمل عنوانه الفعلي.

تعتمد العملية على ثلاثة أطراف:

  1. المهاجم (Attacker): النظام المشرف على إرسال الطلبات وقياس الفوارق.
  2. جهاز الزومبي (Zombie Host): خادم خامل متصل بالإنترنت يستخدم عداد IP ID تصاعدياً عاماً مع حركة بيانات خلفية شبه معدومة.
  3. الخادم الهدف (Target Server): النظام المطلوب فحص جدرانه النارية وحالة منافذه.

ترتكز العملية برمتها على حث الخادم الهدف على إرسال ردود لجهاز الزومبي، ثم مراقبة مقدار التغير في عداد الزومبي.

الخطوات التقنية لتنفيذ مسح Idle Scan

يتم اختبار كل منفذ في الخادم المستهدف عبر ثلاث خطوات متتالية:

  1. الخطوة 1 - القياس الأولي للزومبي: يرسل المهاجم حزمة SYN/ACK مفاجئة لجهاز الزومبي. ونظراً لعدم وجود جلسة اتصال مسبقة، يرد الزومبي بحزمة RST تحمل قيمة المعرف الحالية ($IPID_1 = 1000$).
  2. الخطوة 2 - إرسال حزمة منتحلة للهدف: يرسل المهاجم حزمة SYN موجهة إلى منفذ الهدف (مثل 443)، مع تزوير عنوان المصدر ليكون عنوان جهاز الزومبي نفسه.
  3. الخطوة 3 - قياس الفارق في الزومبي: يرسل المهاجم حزمة SYN/ACK ثانية لجهاز الزومبي لاستدعاء حزمة RST جديدة وتسجيل القيمة المحدثة ($IPID_2$).

تحليل تحولات حالة المنافذ: المفتوحة والمغلقة والمفلترة

يكشف الفارق بين القياسين ($\Delta = IPID_2 - IPID_1$) الحالة الدقيقة للمنفذ:

+-------------------------------------------------------------------------+
|                  جدول تحديد حالة المنفذ بناءً على الفارق                |
+-------------------------------------------------------------------------+
| حالة المنفذ في الهدف| رد الهدف على حزمة SYN المنتحلة   | فارق الزومبي (Δ)|
| :---                | :---                             | :---            |
| مفتوح (OPEN)        | يرسل SYN/ACK إلى جهاز الزومبي    | Δ = 2 (مفتوح)   |
|                     | الزومبي يرد بـ RST (يستهلك رقماً)|                 |
| مغلق (CLOSED)       | يرسل RST إلى جهاز الزومبي        | Δ = 1 (مغلق)    |
|                     | الزومبي يتجاهل RST دون رد        |                 |
| مفلتر (FILTERED)    | الجدار الناري يتجاهل الحزمة كلياً| Δ = 1 (لا يوجد  |
|                     | الزومبي لا يستلم أي شيء          |       رد)       |
+-------------------------------------------------------------------------+
  • المنفذ المفتوح ($\Delta = 2$): يقبل الهدف الاتصال ويرسل SYN/ACK للزومبي. وبما أن الزومبي لم يطلب هذا الاتصال، فإنه يبادر فوراً بإرسال RST للهدف، مما يرفع عداد IP ID لديه. وعندما يستعلم المهاجم في الخطوة الثالثة، يجد العداد قد تقدم بمقدار وحدتين.
  • المنفذ المغلق أو المفلتر ($\Delta = 1$): إذا كان المنفذ مغلقاً، يرسل الهدف RST للزومبي (ويهمله الأخير). وإذا كان مفلتراً، يتم إسقاط الحزمة. وفي الحالتين، لا يصدر الزومبي حزماً إضافية، ويزداد عداده بمقدار واحد فقط ناتج عن استعلام المهاجم نفسه.

تسجل سجلات الجدار الناري وأنظمة كشف التسلل (IDS) في الهدف عنوان الزومبي فقط، بينما يظل المصدر الحقيقي محمياً تماماً.

استنتاج حجم حركة المرور وتتبع الأجهزة عبر الشبكات

تتعدى مخاطر القناة الجانبية لحقل IP ID مجرد مسح المنافذ:

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

توحيد معيار RFC 6864: إزالة حقل IP ID من حزم البيانات الذرية

أصدر فريق هندسة الإنترنت (IETF) معياراً شاملاً يعالج هذه الإشكالية عبر الوثيقة RFC 6864: Updated Specification of the IPv4 ID Field عام 2013.

استند المعيار إلى واقع شبكات اليوم: حيث تفعل الأنظمة الحديثة آلية اكتشاف حجم النقل الأقصى (PMTUD, RFC 1191)، وتضع علامة منع التجزئة (DF = 1) على الغالبية الساحقة من اتصالات TCP وUDP. وتُسمى الحزم التي تحمل علامة DF = 1 وليست مجزأة باسم حزم البيانات الذرية (Atomic Datagrams).

أقر معيار RFC 6864 القواعد الإلزامية التالية:

  • تصفير حقل التعريف: يُسمح للأنظمة المرسلة ويُوصى بأن تضبط حقل IP ID على القيمة 0x0000 لجميع الحزم الذرية.
  • إعفاء النظام المستقبل: يجب ألا تطالب الأنظمة المستلمة بقيم تعريف تسلسلية فريدة إذا كانت الحزمة تحمل العلامة DF = 1.
  • إلغاء العدادات العامة: يُحظر على أنوية الأنظمة استخدام عداد تسلسلي موحد للاتصالات المستقلة.
+-------------------------------------------------------------------------+
|                  هيكل الحزمة الذرية وفقاً لمعيار RFC 6864                |
+-------------------------------------------------------------------------+
|  ترويسة IPv4:                                                           |
|  [ Version: 4 ] [ IHL: 5 ] [ DSCP/ECN ] [ Total Length: 1500 ]          |
|  [ Identification: 0x0000 ] <--- المعيار: ضبط القيمة على صفر للذرية    |
|  [ Flags: DF=1, MF=0 ] [ Fragment Offset: 0 ]                           |
|  [ TTL: 64 ] [ Protocol: 6 (TCP) ] [ Header Checksum ]                  |
|  [ Source IP ] [ Destination IP ]                                       |
+-------------------------------------------------------------------------+

آليات الدفاع في أنظمة التشغيل الحديثة: تطبيقات لينكس وBSD

تخلت أنظمة التشغيل الحديثة كلياً عن العدادات المشتركة لحقل التعريف.

جداول التجزئة لكل اتصال ومولدات الأرقام شبه العشوائية PRNG

اعتمدت الشبكات المعاصرة على مبدأ عزل الحالات:

  • بنية نواة لينكس: تضع القيمة الافتراضية iph->id = 0 لكافة الحزم الذرية. أما الحزم التي تتطلب تجزئة، فتستخدم النواة خوارزمية تجزئة (siphash) تجمع العناوين والمنافذ والبروتوكول مع مفتاح عشوائي سري، لتعيين عداد مستقل لكل وجهة خارجية.
  • أنظمة BSD وماك: تعتمد مولدات أرقام شبه عشوائية آمنة تشفيرياً (PRNG) لتوليد سلاسل غير قابلة للتخمين لكل جلسة اتصال جديدة.
  • أنظمة ويندوز: منذ ويندوز 10 وويندوز سيرفر 2016، استُبدل العداد العام بسلاسل شبه عشوائية مستقلة لكل نقطة نهاية.

كيف تبطل أنفاق VPN للطبقة الثالثة وRiceGuard تسريبات IP ID

توفر الشبكات الافتراضية الخاصة العاملة في الطبقة الثالثة بنمط TUN (مثل WireGuard) حصانة معمارية ضد استغلال القنوات الجانبية لحقل IP ID.

تعتمد بنية VPNRice التحتية على التغليف التشفيري المحكم. ومن خلال بروتوكول RiceGuard، يتم تضمين بيانات المستخدم داخل حزم UDP موثوقة ومحمية قبل نقلها عبر الشبكات العامة.

+-------------------------------------------------------------------------+
|              تغليف RICEGUARD وعزل معرفات حزم البيانات IP ID             |
+-------------------------------------------------------------------------+
|  نظام تشغيل العميل المحلي:                                              |
|  [ حزمة IP الداخلية: طلب TCP للهدف | معرف IP ID مولد محلياً ]           |
|                              │                                          |
|                              ▼                                          |
|  محرك نفق RiceGuard:                                                    |
|  [ حمولة مشفرة بخوارزمية ChaCha20-Poly1305 (إخفاء الترويسة الداخلية) ] |
|                              │                                          |
|                              ▼                                          |
|  حركة البيانات الخارجية في الشبكة:                                      |
|  [ ترويسة IPv4 الخارجية: UDP 51820 | معرف خارجي = 0x0000 (RFC 6864) ]   |
+-------------------------------------------------------------------------+

يحيد RiceGuard مخاطر القنوات الجانبية عبر ثلاثة مستويات حماية:

  1. التغليف التام للترويسة: يتم تشفير ترويسة IPv4 الداخلية وحقل التعريف التابع لها داخل حمولة Noise، مما يحجبها عن مزودي الخدمة والمراقبين الخارجيين.
  2. الامتثال الخارجي للمعيار RFC 6864: تفرض حزم UDP الخارجية علامة DF = 1 وتضبط حقل التعريف الخارجي على 0x0000، مانعةً أي فوارق قابلة للقياس.
  3. التحقق من المفاتيح العامة لمنع الانتحال: تتحقق بوابات الخوادم من صحة المفاتيح قبل المعالجة، ويتم إسقاط الحزم المزورة فوراً دون ترك أي أثر في مؤشرات النظام.

يمكن للمستخدمين الراغبين في تعزيز حماية اتصالاتهم الحصول على التطبيق الرسمي عبر صفحة تحميل VPN.

الاختبار العملي: كشف أجهزة الزومبي المعرضة للاستغلال عبر Nmap

يستطيع مهندسو الشبكات فحص مدى قابلية الخوادم للاستغلال في هجمات Idle Scan باستخدام أدوات Nmap المدمجة:

# اختبار نمط توليد معرفات الحزم على الخادم
nmap -p 80,443 --script ipidseq 198.51.100.25

# نتيجة الخادم المعرض للاستغلال:
# Host script results:
# |_ipidseq: Incremental! (معرض للاستخدام كجهاز زومبي)

# نتيجة الخادم الآمن وفقاً لمعيار RFC 6864:
# Host script results:
# |_ipidseq: All zeros! (آمن: مطابق لمواصفات RFC 6864)

عند ظهور الحالة Incremental، يمكن للمختصين محاكاة فحص تجريبي داخل مختبرات معتمدة:

# محاكاة فحص Idle Scan باستخدام جهاز الزومبي المكتشف
nmap -Pn -sI 198.51.100.25:80 203.0.113.50

وفي حال كان الخادم يعتمد الأساليب الحديثة، تظهر رسالة التوقف من Nmap: Cannot use zombie host: IP ID sequence is not incremental.

مقارنة معمارية: العدادات التراكمية العامة مقابل التوزيع العشوائي

الخاصية الفنية العداد التراكمي العام جداول التجزئة لكل وجهة التصفير وفق RFC 6864 (RiceGuard)
القابلية لاستغلال Idle Scan مرتفعة جداً محمي (عزل تام للحالات) محمي (معرف ثابت ومعدوم)
تقدير حجم البيانات متاح للمراقبين الخارجيين مستحيل على الأطراف الثالثة مستحيل على الأطراف الثالثة
بصمة الجهاز والتعقب مرتفعة (تسلسل متتابع) شبه معدومة معدومة كلياً (حقل ثابت)
دعم تجزئة الحزم دعم كامل دعم كامل عبر الجداول دعم كامل عبر PMTUD
استهلاك ذاكرة النواة 2 بايت فقط متوسط (جداول الجلسات) معدوم (قيمة ثابتة)
الحمل على المعالج أدنى مستوى (++counter) منخفض (حسابات SipHash) أدنى مستوى (ثابت 0x0000)

الانتقال إلى IPv6: الإلغاء الجذري لحقل التعريف من الترويسة الأساسية

تحقق الحل النهائي لثغرة IP ID مع التصميم المعماري لبروتوكول IPv6 (RFC 8200).

نظراً لأن التجزئة لا تمثل سوى أقل من عُشر بالمائة من حركة البيانات الحديثة، ألغى مصممو IPv6 حقل التعريف تماماً من الترويسة الأساسية الثابتة ذات الـ 40 بايتاً. وفي بروتوكول IPv6، يُمنع على الموجهات الوسيطة تجزئة الحزم نهائياً؛ وتقتصر التجزئة على الجهاز المرسل وحده باستخدام ترويسة تمديد اختيارية (Fragment Extension Header):

+-------------------------------------------------------------------------+
|                  ترويسة IPV6 الأساسية: خالية من أي معرفات ثابتة          |
+-------------------------------------------------------------------------+
|  الترويسة الأساسية لـ IPv6 (40 بايتاً ثابتة):                           |
|  [ Version: 6 ] [ Traffic Class ] [ Flow Label: 20 bits ]               |
|  [ Payload Length: 16 bits ] [ Next Header: 6 (TCP) ] [ Hop Limit: 64 ] |
|  [ Source IPv6 Address: 128 bits ]                                      |
|  [ Destination IPv6 Address: 128 bits ]                                 |
|                                                                         |
|  * لا يوجد حقل تعريف إطلاقاً في الترويسة الأساسية! *                     |
+-------------------------------------------------------------------------+

وبما أن الحزم الذرية في IPv6 لا تحتوي على ترويسة تجزئة، فلا يوجد أي حقل يمكن قياسه. وهذا يجعل هجوم Idle Scan مستحيلاً بنيوياً في شبكات IPv6 الأصلية.

قائمة تدقيق لمديري الأنظمة للوقاية من القنوات الجانبية لحقل IP ID

يمكن لمديري الأنظمة حماية شبكاتهم عبر الإجراءات التالية:

  1. الالتزام بمعيار RFC 6864: استخدام أنوية لينكس الإصدار 4.0 أو أحدث لضمان تصفير حقل IP ID في الحزم الذرية.
  2. دعم مسار PMTUD: السماح لرسائل ICMP Type 3 Code 4 بالمرور عبر الجدران النارية لتفادي مشكلات التجزئة.
  3. تطبيق تصفية العناوين المزورة (BCP 38): تفعيل فحص المسار العكسي (uRPF) على موجهات الحدود لمنع إرسال الحزم المنتحلة.
  4. عزل الاتصالات الحساسة عبر الأنفاق: تمرير حركة الإدارة بين مراكز البيانات عبر أنفاق RiceGuard المشفرة لحماية بيانات النقل.
  5. ترقية الأنظمة القديمة: إيقاف تشغيل الخوادم والأجهزة المدمجة القديمة التي لا تزال تستخدم عدادات IP ID عامة.

أدى تطور معايير الشبكات وتطبيق التشفير الشامل إلى تحييد ثغرات IP ID الجانبية، مما يوفر حماية قوية لحركة البيانات على مستوى البنية التحتية.