
أدوات للتحكم في مؤشر LED لكاميرا الويب على ThinkPad X230
يحتوي هذا المستودع على أدوات تتيح الحصول على تحكّم برمجي في مؤشر LED الخاص بكاميرا الويب على جهاز ThinkPad X230 دون الحاجة إلى وصول مادي إلى الجهاز. صُنعت هذه الأدوات كعرض عملي على أن البرمجيات الخبيثة يمكنها تسجيل الفيديو عبر كاميرا الويب دون إظهار مؤشر LED.
يتم ذلك عبر إعادة كتابة برمجيات الكاميرا الثابتة (firmware) من خلال USB (كاميرا X230 متصلة داخلياً عبر USB) لإضافة إمكانية التحكم بمؤشر LED بشكل تعسفي. من المرجح أن يؤثر هذا الأسلوب في العديد من أجهزة الكمبيوتر المحمولة الأخرى، لأن توصيل كاميرا الويب عبر USB والسماح بإعادة كتابة برمجياتها الثابتة هو نمط تصميم شائع لدى مصنّعي أجهزة الكمبيوتر المحمولة.
راجع محاضرة "Lights Out: إيقاف مؤشر LED الخاص بكاميرا ThinkPad سراً" (pdf) التي ألقيتها في POC 2024 للحصول على التفاصيل: اكتشاف طريقة لإعادة كتابة برمجيات كاميرا X230 الثابتة، وإجراء الهندسة العكسية عليها، وإضافة غرسة (implant) للتحكم في مؤشر LED، وملاحظات حول قابلية تطبيق هذا الأسلوب على أجهزة الكمبيوتر المحمولة الأخرى.
ملاحظة: قد تؤدي إعادة كتابة برمجيات كاميرا الويب الثابتة إلى تعطيل الكاميرا بشكل دائم (brick)، لذا استخدم هذه الأدوات بحذر.
تعتمد كاميرا الويب المستخدمة في ThinkPad X230 (وفي عدد قليل من أجهزة الكمبيوتر المحمولة الأخرى من نفس الحقبة) على وحدة التحكم Ricoh R5U8710 لكاميرات USB. تخزّن وحدة التحكم هذه جزءاً من برمجياتها الثابتة، وهو جزء SROM، على شريحة SPI flash الموجودة على لوحة كاميرا الويب. كما تسمح وحدة التحكم بإعادة كتابة محتويات شريحة SPI عبر USB.
يتصل مؤشر LED الموجود على لوحة كاميرا X230 بالطرف GPIO B1 الخاص بوحدة التحكم R5U8710.
منفذ GPIO B مربوط بالعنوان 0x80 في فضاء الذاكرة XDATA الخاص بوحدة المعالجة المركزية المستندة إلى 8051 داخل R5U8710.
وبالتالي، فإن تغيير القيمة في ذلك العنوان يغيّر حالة مؤشر LED.
يعمل هذا بغض النظر عما إذا كانت كاميرا الويب تبث الفيديو في تلك اللحظة أم لا.
الأدوات المتوفرة في هذا المستودع تسمح بكتابة برمجيات ثابتة مخصصة تتضمن ما يُسمى "الغرسة الشاملة" (universal implant) التي يمكن التحكم بها عبر USB على شريحة SPI الموجودة على لوحة كاميرا الويب.
تسمح هذه الغرسة بكتابة بيانات متحكم بها إلى عناوين عشوائية (ضمن فضاء الذاكرة XDATA) واستدعاء عناوين عشوائية (ضمن فضاء الذاكرة CODE؛ وهو مُحاذى مع XDATA بدءاً من الإزاحة 0xb000).
يمكن استخدام الغرسة الشاملة من أجل:
تحميل غرسة مرحلة ثانية ديناميكياً داخل ذاكرة وحدة التحكم في الكاميرا وتنفيذها (استُخدمت أصلاً لأغراض الهندسة العكسية)؛
التحكم المباشر في مؤشر LED الخاص بكاميرا الويب.
راجع شرائح المحاضرة لمزيد من التفاصيل.
srom.py — يقرأ ويكتب جزء SROM من برمجيات كاميرا ويب المستندة إلى Ricoh R5U8710 عبر USB.
ملاحظة: تحمّل كاميرا الويب برمجيات SROM فقط أثناء إقلاعها. لذا، ستحتاج إلى إعادة تشغيل الجهاز بالكامل (إيقاف تشغيل كامل، وليس مجرد إعادة تشغيل) حتى يتم تحميل البرمجيات المحدّثة؛
patch_srom.py — يعدّل صورة SROM الخاصة بكاميرا FRU 63Y0248 (وليس كاميرا X230 الأصلية) لإضافة الغرسة الشاملة.
ملاحظة: تتطلب هذه الأداة تعديلاً لكي تعمل مع صورة SROM الخاصة بكاميرا X230 الأصلية.
ومع ذلك، يمكن كتابة صورة SROM الخاصة بـ FRU 63Y0248 (مع إضافة الغرسة اختيارياً) على كاميرا X230 الأصلية أيضاً؛
fetch.py — يجلب محتويات فضاء الذاكرة IRAM أو XDATA أو CODE عبر USB بواسطة غرسة مرحلة ثانية يتم تحميلها ديناميكياً عبر الغرسة الشاملة؛
led.py — يفعّل أو يعطّل مؤشر LED الخاص بكاميرا الويب عن طريق الكتابة فوق القيمة الموجودة في العنوان 0x80 في XDATA عبر الغرسة الشاملة.
srom/x230.bin — محتويات SROM لوحدة كاميرا X230 الأصلية (رقم FRU غير معروف؛ العلامة 19N1L1NVRA0H على اللوحة)؛
srom/63Y0248.bin — محتويات SROM لوحدة كاميرا FRU 63Y0248؛
code/63Y0248.bin — محتويات فضاء الذاكرة CODE المسرّبة من وحدة كاميرا FRU 63Y0248.
ملاحظة: يقع Boot ROM أسفل الإزاحة 0xb000، وهو مطابق لـ Boot ROM في وحدة كاميرا X230 الأصلية.