بسم الله الرحمن الرحيم,

 

السلام عليكم أخواني, في البداية أعتذر لطول الغياب, كنت في قمة الانشغال في الفترة السابقة. بأذن الله سأقوم في الفترة القادمة بتقديم مجموعة من المقالات التقنية عن الهندسة العكسية للعتاد الصلب Hardware Reverse Engineering.

ولأن الكثير لا يعلم عن هذا المجال, فقررت أن ابدأ بداية مشوقة, سنقوم اليوم بأذن الله بعمل هندسة عكسية على الموجات الكهرومغناطيسية في الهواء, تلك الموجات التي تتحكم في حياتنا ولكننا لا نراها ولا نشعر بوجودها في الظروف الطبيعية, وكمثال على حديثنا سنقوم بعمل هندسة عكسية على موجات ترددات ريموت مفتاح السيارة Car Key Fobs.

كيف يعمل مفتاح السيارة؟

كيف يقوم مفتاح السيارة بإرسال أمر فتح أو غلق؟ يقوم المستخدم بالضغط على زر الفتح فتُفتح السيارة, كيف حدث هذا تقنيا؟ الأمر في بادئ الأمر هو أن ضغطة زر مُعين وليكن زر الفتح, معناها إرسال بعض البيانات الرقمية binary data لاسلكيا لدائرة الإستقبال بداخل السيارة, تقوم دائرة الإستقبال بمقارنة القيمة المُستلمة بالقيم المُسجلة فيها, فتقوم بفتح السيارة عندما تتأكد أن الأمر المُستقبَل هو الخاص بفتح السيارة.

إذا هدفنا هنا هو معرفة القيمة الرقمية التي يتم إرسالها لاسلكيا في الهواء لنقوم نحن بعد ذلك بإرسالها من خلال دائرة إلكترونية معينة (سنتكلم عن ذلك لاحقا بأذن الله فلا تقلق إذا لم تكن الصورة واضحة بعد) فتُفتح السيارة بدون الحصول على ريموت فتح السيارة وبذلك بإمكان أي مُخترق سئ النوايا بإختراق أي سيارة من خلال نفس الطريقة.

أيضا يجب التنويه أن القيمة الرقمية الخاصة بكل أمر تختلف من ريموت سيارة لريموت سيارة آخر, كما أن هنالك أنظمة ريموتات تحتفظ بقيم ثابتة لتلك الأوامر, تلك القيم لا تتغير أبدا, فمثلا لو كان أمر الفتح مُتمثلا في القيمة الرقمية 01101 فإذا جئت بعد أعوام وضغطت نفس الزر في نفس الريموت سيقوم بإخراج نفس القيمة الرقمية 01101, بينما هنالك أنظمة ريموتات أخرى تقوم بتوليد قيمة رقمية Binary Data جديدة في كل مرة تقوم بالضغط على زر معين من خلال لوغاريثمية تمت برمجة الريموت عليها, فمثلا إذا ضغطت الآن على أمر الفتح ستكون القيمة الرقمية 01101, فإذا جئت بعد ساعة وضغطت على نفس الزر ستكون القيمة الرقمية مختلفة عن سالفتها. اليوم سنقوم بالحديث عن الأنظمة من النوع الأول.

آليات استخراج القيمة الرقمية لأوامر الريموت.

الآن أول خطوة منطقية هي التفكير كيف يمكن استخراج تلك القيم الرقمية من داخل ريموت الإرسال؟
نستطيع ذلك من خلال طريقتين, الأولى هي البحث عن مكان لتخزين تلك القيم الرقمية داخل ريموت الإرسال بعد فكه وإخراج الدائرة الإلكترونية. يقوم أي معالج مدمج Embedded Processor بالاحتفاظ بالقيم الثابتة التي لا تتغير في أنواع من الذاكرة تسمى Read Only Memory, فبالتالي نقوم في تلك الطريقة بالبحث عن أي ROM داخل الدائرة ونحاول قراءة محتواها من خلال استخدام متحكم دقيق خارجي External Microcontroller للتواصل مع الـ ROM وأخذ البيانات التي بداخلها. طبعا تلك الطريقة بها الكثير من العيوب, فمثلا نحن لا نعلم إذا ما كانت البيانات التي بداخل الـ ROM هي البيانات الأصلية الخاصة بأوامر كل زر أم هي نسخة مشفرة أو متغيرة منها, عيب آخر وهو قد لا تكون دائرة الريموت تحت أيدينا, فبالتالي لا نستطيع فكها والحصول على الدائرة الكهربية التي بداخلها, عيب ثالث هو أن أي خطأ في توصيل دائرة المتحكم الدقيق الخارجي بدائرة الريموت قد تقوم بإتلاف الدائرة بأكملها, عيب رابع وهو صعوبة العملية وطول الوقت, فنحن بحاجة لشراء متحكم دقيق يحوي الواجهة الكهربية Electrical Interface التي ستقوم بالتخاطب مع الـ ROM (مثال I2C protocol, SPI Protocol, إلخ…), ويجب قراءة الـ datasheet الخاص بالـ ROM لنعلم ما هي أوامر الـ ROM الوقتية (Commands timing diagram) وكيفية إرسال أمر كتابة أو أمر قراءة من وإلى الـ ROM (بفرض أن الـ ROM يُمكن الكتابة عليها), بعد ذلك نقوم ببرمجة هذا المتحكم الدقيق ليرسل الأوامر كما علمناها من الـ datasheet, كل هذا يستغرق الوقت والمال والجهد.

الطريقة الثانية لاستخراج القيم الرقمية هي اعتراض القيمة وهي في الهواء فور خروجها من المُرسل إلى المُستقبِل, وهذا ما سنفعله اليوم بأذن الله.

قبل أن نبدأ في عملية الهندسة العكسية, يجب علينا اعتراض وتخزين البيانات الرقمية لأشارة أوامر الريموت, لهذا يجب علينا أولا أن نتكلم قليلا عن بعض الأساسيات النظرية في علم الإتصالات التناظرية والرقمية Analog and Digital Communication theory.

كيف يتم إرسال البيانات لاسلكيا؟

لكي يتم إرسال أي بيانات رقمية لاسلكيا, يجب علينا أولا أن نقوم بعملية تسمى عملية التعديل Modulation للبيانات التي نود إرسالها. عملية التعديل Modulation هي أننا نقوم بتوليد ترددات جيبية Sinusoidal Frequencies لتقوم باحتواء البيانات المُراد إرسالها لاسلكيا, ثم نقوم بتغيير بعض خصائص تلك الترددات حسب قيمة البيانات, وهذا يعتمد على نوع التعديل Modulation Type. لا أريد أن أتعمق كثيرا في علم الإتصالات لصعوبته وكثرة الكلام فيه, ولأنه يعتمد بالأساس على الكثير الكثير من الرياضيات, ولكن يجب علينا أن نعلم أننا نحتاج عملية التعديل Modulation حتى نستطيع إرسال البيانات لاسلكيا, فالأشارات الجيبية Sinusoidal waves بامكانها الإنتقال في الهواء بتردداتها المختلفة من خلال موجة مغناطيسية وموجة كهربية وهذا ما يُطلق عليه الموجة الكهرومغناطيسية, فهي بكل بساطة موجة يتم توليدها من خلال تغير قيمة التيار المار في مادة موصلة بالنسبة للزمن, ومع سرعة تغير التيار يتم تحديد تردد الأشارة المُولدة. تُمكنا أيضا عملية التعديل Modulation لإرسال البيانات لأماكن بعيدة جدا لاسلكيا تصل لكيلومترات, كما تُمكنا أيضا من إرسال البيانات على تردد فريد فيحتاج كل من أراد استقبال الأشارة لصُنع دائرة إلكترونية مُخصصة لاستلام هذا التردد فقط, ومن ثم القيام بعميلة إزالة التعديل Demodulation ليتم قراءة البيانات المُرسلة لاسلكيا. أمثلة على أشهر الترددات في حياتنا اليومية, الـ WiFi فهو يعمل على تردد 2.4 GHz و 5 GHz, وشبكات الهواتف النقالة التي تعمل تكنولوجيا الجيل الثاني التي تُسمى GSM على تردد 890 MHz حتى 960 Mhz ومن 1710 MHz حتى 1800 MHz. نحن جميعا محاطين بالكثير من الأشارات اللاسلكية التي تحوي ملايين البيانات والمعلومات تنتقل عبر الهواء كل ثانية.

الآن نستطيع أن نبدأ في عملية الهندسة العكسية الفعلية للإشارات اللاسلكية لريموت السيارة.

 

في البداية, وبعد المقدمة التي تكلمنا فيها عن علم الإتصالات, يجب علينا أولا أن نعرف ما هو النطاق الترددي الذي تعمل عليه موجات ريموت السيارات؟ معظم ريموتات السيارات تعمل على نطاق ترددي يُسمى ISM Band أو Industrial, Scientific and Medical Band, وهي مجموعة نطاقات ترددية تم الاتفاق عليها لتقوم أي شركة تحتاج لنطاق ترددي معين في الهواء بالعمل عليها, من تلك النطاقات هو نطاق الـ WiFi فهو يُعتبر تردد من ترددات ISM Band, ريموتات السيارات تعمل في الأغلب على نطاق الـ 433 MHz أو 315 MHz. الريموت الذي سأعمل عليه اليوم يعمل على تردد 433 MHz.

 

بعد ذلك, يجب علينا تصنيع دائرة تقوم باستقبال البيانات اللاسلكية في هذا النطاق الترددي. من حسن الحظ, تتوفر دوائر جاهزة تقوم باستقبال وإرسال البيانات لاسلكيا على نطاق واسع من الترددات تُسمى Software Defined Radio, حيث أننا نستطيع أن نستخدم أحد تلك الدوائر وتوصيله بالحاسب ليقوم باستلام البيانات على نطاق ترددي نقوم بتحديده من خلال الحاسب.

 

يجب علينا أن نعلم أن دوائر الـ SDR لا تقوم بإزالة أي تعديل Demodulation لأي إشارة, هي فقط تقوم باستقبال البيانات وإرسالها للحاسب ليقوم المستخدم من خلال أحد البرامج المتخصصة بمعالجة البيانات اللاسلكية المُستقبلة.

 

الآن, ثالث خطوة سنقوم بها هي أن نقوم من خلال أحد البرامج المتخصصة بعمل دائرة معالجة للإشارات الرقمية Digital Signal Processing حتى نقوم برؤية الإشارة المُستقبلة ومن ثم محاولة معرفة طريقة الـ Modulation لنقوم بعدها بعمل جزء Demodulation ليقوم باستخراج البيانات من الإشارة المُستلمة.

البرنامج الذي سنعمل عليه هو برنامج GNU-Radio, وهو برنامج يقوم بعمل برامج معالجة للإشارات الرقمية Digital Signal Processing Applications يشبه إلى حد ما برنامج Matlab.

سنقوم الآن بعمل برنامج معالجة Digital Signal Processing Application وهو استلام البيانات من الـ SDR, ورسمها Plot بالنسبة للزمن. نستطيع القيام بذلك من خلال عمل تلك المكونات البسيطة كما في الصورة.

فقط للمهتم بمعرفة مكونات البرنامج, البيانات التي يتم استلامها من دائرة الـ SDR تكون بصورة أرقام مُرَكَّبَة Complex Numbers, أي أنه لدينا رقم حقيقي Real Number ,ورقم خيالي Imaginary Number, لنستطيع رسم الإشارة المُستلمة, نحن نعرف أنها بيانات رقمية مُرسلة على موجة جيبية Sinusoidal wave, عُدِلَت Modulated بطريقة ما (نريد أن نصل إليها), من أشهر أنواع التعديل Modulation Types والمُستخدم كثيرا لسهولته هو نوع يسمى Amplitude Modulation, فهو نوع يقوم فقط بتعديل القيمة القصوى والدنيا للإشارة الجيبية Sinusoidal wave, ولكي نستطيع أن نحصل على تلك القيم, نستطيع أن نحول الأرقام المُركبة لمقدار Magnitude, من خلال مُكون التحويل Complex to Mag في برنامج GNU-Radio. بعد ذلك نقوم بحساب القيمة الرياضية المطلقة للرقم الناتج Absolute value, ثم نقوم برسم Plot للإشارة.

الآن نحن جاهزون لاستقبال إشارات الريموت, نقوم فقط بتوصيل هوائي Antenna في دائرة الاستقبال SDR, ثم نقوم بتشغيل البرنامج GNU-Radio, ونقوم بالضغط على أي زر من أزرار ريموت السيارة, لنرى موجة كتلك التي في الصورة التالية.

 

نستطيع أن نرى نبضات Pulses كلما ضغطنا على زر من أزرار الريموت, هي بنا نبدأ بتحليل واحدة من تلك النبضات المتتالية.

نستطيع ملاحظة بعض النقاط المهمة في تلك الإشارة:

  • أولا, تلك الأشارة تستعمل نوع من أنواع التعديل Pulse Width Modulation Techniques, إن لم تكن كذلك, لما وجدنا تغيرا في وقت كل نبضة عن الأخرى, وهذا عكس ما توقعنا (توقعنا في البداية أنه تم استعمال نوع من أنواع Amplitude Modulation).
  • ثانيا, نستطيع حساب الواحد أو الصفر المنطقي من خلال حساب الوقت الذي تستغرقه كل نبضة في حالة الـ Logical High, وهو ما يُسمى الـ Duty Cycle.

هكذا, استطعنا أن نقوم بعمل هندسة عكسية على ترددات ريموت السيارة, نستطيع أن نرى أن الأمر الواحد مكون من 25 bits, وهذا الأمر الذي قمنا بتسجيله هو:
1001001100110101011000010

هنا اعتبرنا أن الـ Pulse التي تستغرق الوقت الأكبر ثُمثل واحد منطقي, أما الصفر فهي الـ Pulse التي تستغرق الوقت الأقل, هذا فقط تخمين ويُمكن أن تكون القيمة الحقيقة هي العكس (الصفر المنطقي هو الـ Pulse ذو القيمة الكبرى).

 

الآن لا يتبقى لنا سوى تصنيع دائرة تعمل على نفس النطاق الترددي وارسال هذا الأمر الذي قمنا بتحليله بعد القيام بتعديل من نوع Pulse Width Modulation, وهذا الأمر أيضا نستطيع القيام به من خلال SDR وبرامج المعالجة للإشارات الرقمية Digital Signal Processing Applications التي تدعم الإرسال وليس الاستقبال فقط.

 

اليوم, استطعنا تطبيق الهندسة العكسية على الموجات الكهرومغناطيسية, نستطيع تطبيق هذا الأمر على أي نوع من أنواع الإشارات الكهرومغناطيسية مثل موجات الهواتف النقالة, موجات شبكات الـ WiFi, موجات الـ FM, وهكذا وتحليل محتواها لاستخراج البيانات.
كانت تلك مقدمة شيقة (اسأل الله أن تكون كذلك) للهندسة العكسية للعتاد الصلب Hardware Reverse Engineering, وكما رأينا كم هذا الأمر -المُهمل تماما- في قمة الأهمية, أي أنه -كنوع من أنواع الهجمات على المثال الذي تطرقنا له اليوم- يستطيع المُخترق أن يقوم بفتح أي سيارة من خلال اعتراض الموجة في وقت ارسالها للسيارة, من خلال تسجيل بيانات الفتح, واعادة تشغيلها في أي وقت آخر لسرقة السيارة أو فتحها بدون إذن, كما أيضا يستطيع المُخترق أن يقوم بعمل Brute Force لدائرة مخصصة ليقوم بفتح سيارة ما بدون اعتراض أو تسجيل أي إشارة مسبقا.
في المقال القادم بأذن الله ,سنتطرق لمقال جديد عن الهندسة العكسية للعتاد الصلب أكثر أهمية وخطورة لأنه سيقوم بالهجوم على أي جهاز حاسب من خلال فقط USB ودائرة صغيرة.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn