ptrace
ptrace هو استدعاء نظام موجود في أنظمة يونكس والعديد من أنظمة التشغيل الشبيهة بيونكس . باستخدام ptrace (اختصار لـ "تتبع العملية")، يمكن لعملية ما التحكم في عملية أخرى، مما يُمكّن المتحكم من فحص الحالة الداخلية للعملية المستهدفة ومعالجتها. يُستخدم ptrace بواسطة أدوات تصحيح الأخطاء وأدوات تحليل التعليمات البرمجية الأخرى، وخاصةً كأداة مساعدة في تطوير البرمجيات.
الاستخدامات
يُستخدم ptrace بواسطة أدوات تصحيح الأخطاء (مثل gdb و dbx )، وأدوات التتبع مثل strace و ltrace ، وأدوات تغطية التعليمات البرمجية . كما يُستخدم ptrace بواسطة برامج متخصصة لتصحيح البرامج قيد التشغيل، لتجنب الأخطاء غير المُصلحة أو لتجاوز ميزات الأمان. ويمكن استخدامه أيضًا كبيئة معزولة [ 1 ] [ 2 ] ومحاكي لبيئة التشغيل (مثل محاكاة صلاحيات الجذر للبرامج التي لا تتطلب صلاحيات الجذر [ 2 ] [ 3 ] ).
من خلال ربط أداة ما بعملية أخرى باستخدام استدعاء ptrace، تتمتع الأداة بتحكم شامل في عمل العملية المستهدفة. يشمل ذلك التلاعب بمؤشرات الملفات والذاكرة والسجلات . يمكنها تنفيذ التعليمات البرمجية للعملية المستهدفة خطوة بخطوة ، ومراقبة استدعاءات النظام ونتائجها واعتراضها، والتلاعب بمعالجات الإشارات الخاصة بالعملية المستهدفة، واستقبال الإشارات وإرسالها نيابةً عنها. تتيح إمكانية الكتابة في ذاكرة العملية المستهدفة ليس فقط تغيير مخزن البيانات الخاص بها، بل أيضًا تغيير جزء التعليمات البرمجية الخاص بالتطبيق ، مما يسمح للمتحكم بوضع نقاط توقف وتصحيح التعليمات البرمجية قيد التشغيل للعملية المستهدفة. [ 4 ]
نظرًا لقوة قدرة ptrace على فحص وتعديل العمليات الأخرى، فإنه لا يمكنه الاتصال إلا بالعمليات التي يستطيع مالكها إرسال إشارات إليها (عادةً عملياته الخاصة فقط)؛ ويمكن لحساب المستخدم المتميز استخدام ptrace مع أي عملية تقريبًا (باستثناء init في النواة قبل الإصدار 2.6.26). في أنظمة لينكس التي تستخدم إمكانيات POSIX ، تُقيّد إمكانية استخدام ptrace بشكل أكبر بواسطة خاصية CAP_SYS_PTRACE [ 5 ] أو بواسطة وحدة أمان YAMA Linux [ 6 ] . أما في FreeBSD ، فتُقيّد هذه الإمكانية بواسطة بيئات FreeBSD المغلقة وسياسات التحكم الإلزامي في الوصول .
القيود
تتم الاتصالات بين وحدة التحكم والهدف باستخدام استدعاءات متكررة للدالة ptrace، حيث يتم تمرير كتلة صغيرة ثابتة الحجم من الذاكرة بينهما (مما يستلزم تبديلين للسياق لكل استدعاء)؛ وهذا غير فعال للغاية عند الوصول إلى كميات كبيرة من ذاكرة الهدف، إذ لا يمكن القيام بذلك إلا في كتل بحجم كلمة (مع استدعاء ptrace لكل كلمة). [ 7 ] لهذا السبب، قدم الإصدار الثامن من يونكس نظام procfs ، الذي يسمح للعمليات المصرح لها بالوصول المباشر إلى ذاكرة عملية أخرى - تبعه نظام 4.4BSD، وتم توريث استخدام procfs /procلدعم تصحيح الأخطاء من قبل أنظمة Solaris وBSD وAIX، وتم نسخه بشكل كبير من قبل لينكس. [ 7 ] قامت بعض الأنظمة، مثل Solaris ، بإزالة ptrace كاستدعاء نظام تمامًا، مع الإبقاء عليه كاستدعاء مكتبة يعيد تفسير استدعاءات ptrace من حيث نظام procfs الخاص بالمنصة. [ 8 ] تستخدم هذه الأنظمة أوامر ioctl على واصف الملف المفتوح /procلإصدار أوامر إلى العملية المتحكم بها. [ 8 ] من ناحية أخرى، قام نظام FreeBSD بتوسيع ptrace لإزالة المشاكل المذكورة، وأعلن أن procfs قديم بسبب مشاكل التصميم المتأصلة فيه.
لا يوفر ptrace سوى الواجهة الأساسية اللازمة لدعم أدوات تصحيح الأخطاء وما شابهها. يجب أن تمتلك البرامج التي تستخدمه معرفة دقيقة بتفاصيل نظام التشغيل وبنيته، بما في ذلك تخطيط المكدس، وواجهة التطبيق الثنائية ، وآلية استدعاء النظام ، ومعالجة أسماء الملفات ، وتنسيق بيانات التصحيح ، وهي مسؤولة عن فهم وتفكيك شفرة الآلة بنفسها. علاوة على ذلك، يجب على البرامج التي تحقن شفرة قابلة للتنفيذ في العملية المستهدفة (مثل gdb) أو التي تسمح للمستخدم بإدخال أوامر تُنفذ في سياق العملية المستهدفة، أن تُنشئ وتُحمّل تلك الشفرة بنفسها، عادةً دون مساعدة مُحمّل البرامج .
يدعم
يونكس وبي إس دي
تم تطبيق ptrace لأول مرة في الإصدار السادس من يونكس ، [ 9 ] وكان موجودًا في فرعي SVr4 و 4.3BSD من يونكس. [ 5 ] يتوفر ptrace كاستدعاء نظام على IRIX ، [ 10 ] و IBM AIX ، [ 11 ] وNetBSD ، [ 12 ] وFreeBSD ، [ 13 ] و OpenBSD ، [ 14 ] ولينكس . [ 5 ] تم تطبيق ptrace كاستدعاء مكتبة على سولاريس، مبني على نظام ملفات procfs الخاص بنواة سولاريس؛ تشير صن إلى أن ptrace على سولاريس مخصص للتوافق، وتوصي بأن تستخدم التطبيقات الجديدة الواجهة الأكثر ثراءً التي يوفرها proc بدلاً من ذلك. [ 8 ] يتميز UnixWare أيضًا بـ ptrace محدود [ 15 ] ولكن مثل صن، توصي SCO المطورين باستخدام ميزات procfs الأساسية بدلاً من ذلك. [ 16 ] دعم نظام التشغيل HP-UX أداة ptrace حتى الإصدار 11i v3 (تم إيقاف دعمها لصالح أداة ttrace ، وهي أداة مشابهة خاصة بنظام التشغيل، في الإصدار 11i v1). [ 17 ]
نظام التشغيل macOS
يُطبّق نظام macOS من Apple أيضًا ptrace كاستدعاء نظام. يُضيف إصدار Apple خيارًا خاصًا هو PT_DENY_ATTACH ، فإذا استدعى أحد العمليات هذا الخيار على نفسه، ستفشل المحاولات اللاحقة لتتبع العملية باستخدام ptrace. [ 18 ] تستخدم Apple هذه الميزة للحد من استخدام أدوات تصحيح الأخطاء على البرامج التي تتعامل مع المحتوى المحمي بحقوق إدارة الحقوق الرقمية (DRM) ، بما في ذلك iTunes . [ 19 ] كما يُعطّل تفعيل PT_DENY_ATTACH قدرة DTrace على مراقبة العملية. [ 20 ] تستخدم أدوات تصحيح الأخطاء على نظام OS X عادةً مزيجًا من ptrace وواجهة برمجة تطبيقات Mach VM وواجهات برمجة تطبيقات الخيوط. [ 21 ] يتوفر ptrace (مع PT_DENY_ATTACH أيضًا) للمطورين لأجهزة Apple iPhone . [ 22 ]
لينكس
يُتيح نظام لينكس أيضًا للعمليات إمكانية منع العمليات الأخرى من الاتصال بها. يمكن للعمليات استدعاء الأمر prctl ومسح علامة PR_SET_DUMPABLE الخاصة بها ؛ في النواة الأحدث، يمنع هذا العمليات غير الجذرية من تتبع العملية المستدعِية باستخدام ptrace. يستخدم وكيل مصادقة OpenSSH هذه الآلية لمنع اختطاف جلسة SSH عبر ptrace. [ 23 ] [ 24 ] [ 25 ] تأتي إصدارات أوبونتو الأحدث مزودة بنواة لينكس مُهيأة لمنع اتصال ptrace من العمليات الأخرى غير العملية الأصلية للعملية المُتتبَّعة؛ يسمح هذا لـ gdb وstrace بمواصلة العمل عند تشغيل عملية مستهدفة، ولكنه يمنعهما من الاتصال بعملية قيد التشغيل غير ذات صلة. [ 23 ] يتم التحكم في هذه الميزة عبر إعداد /proc/sys/kernel/yama/ptrace_scope . [ 23 ] في الأنظمة التي تم فيها تمكين هذه الميزة، لن تعمل أوامر مثل .gdb --attachstrace -p
ابتداءً من أوبونتو 10.10 ، يُسمح باستدعاء ptrace فقط على العمليات الفرعية. [ 23 ]
أندرويد
بالنسبة لبعض هواتف أندرويد التي تحتوي على محمل إقلاع مقفل، يتم استخدام ptrace للتحكم في عملية التهيئة لتمكين "التمهيد الثاني" واستبدال ملفات النظام.
مراجع
- ↑ sydbox
- 1 2 جذر
- ^ "فاكروت إن جي" . تم الاسترجاع 2020-05-12 .
- ↑ على سبيل المثال ، يستخدم برنامج retty أداة ptrace لتغيير مُعرّفات ملفات عملية أخرى، ولحقن رمز قابل للتنفيذ في مقطع النص الخاص بالهدف.
- 1 2 3 "ptrace(2) manpage" ، قسم 2 من دليل لينكس
- ↑ "Yama – وثائق نواة لينكس" . www.kernel.org . تاريخ الاسترجاع: 15 مارس 2023 .
- 1 2 تصميم وتنفيذ نظام التشغيل 4.4 BSD ، مارشال كيرك ماكوسيك ، كيث بوستيك ، مايكل جيه. كاريلز، جون كوارترمان ، أديسون-ويسلي، أبريل 1996، ISBN 0-201-54979-4
- 1 2 3 "قيم طلب ptrace()" ، دليل الانتقال إلى Solaris ، شركة Sun Microsystems ، 2000
- ↑ "صفحة Ptrace من القسم 2 من دليل unix-6th" .
- ↑ "ptrace(2)" ، دليل IRIX 6.5، القسم 2، مكتبة SGI techpubs
- ↑ "ptrace,ptracex,ptrace64 subroutine" ، المرجع التقني لنظام التشغيل IBM AIX: نظام التشغيل الأساسي والامتدادات، المجلد 1
- ↑ ptrace(2) ، دليل netbsd، القسم 2
- ↑دليل FreeBSD، القسم 2
- ↑ "ptrace(2)" ، دليل OpenBSD، القسم 2
- ↑ ptrace(2) ، دليل SCO UnixWare 7، القسم 2
- ↑ "ملاحظات حول توافق استدعاءات النظام" مؤرشفة بتاريخ 16 يوليو 2011 في أرشيف الإنترنت (Wayback Machine) ، وثائق UnixWare 7
- ↑ "استدعاء النظام ptrace() (مهمل)" ، ملاحظات إصدار HP-UX 11i الإصدار 3: خوادم HP 9000 وHP Integrity، هيوليت باكارد ، فبراير 2007
- ↑ "صفحة دليل ptrace(2)" ، دليل Apple Darwin/OS-X
- ↑ "السيطرة على المتعصبين : اختراق نظام التشغيل ماك أو إس إكس" ، تشارلي ميلر،مؤتمر بلاك هات بريفينجز 2008
- ↑ "أبل 'تعطل' تطبيق مطوري صن" ، ماثيو برويرسما، كمبيوتر وورلد المملكة المتحدة ، 24 يناير 2008
- ↑ الفصل 9، تفاصيل نظام التشغيل Mac OS X: منهج النظم ، أميت سينغ، ISBN 978-0-321-27854-8أديسون ويسلي، 2006
- ↑ "ptrace(2)" ، دليل استدعاءات نظام BSD، مكتبة مرجعية لنظام تشغيل Apple iPhone
- 1 2 3 4 "KernelHardening" ، خارطة طريق فريق أمن أوبونتو
- ↑ "prctl(2)" ، دليل مبرمج لينكس، القسم 2
- ↑ منشور بعنوان "PATCH ptrace: allow restriction of ptrace scope" من قِبل المهندس كيس كوك من شركة كانونيكال المحدودة ، قائمة بريدية لنواة لينكس، 16 يونيو 2010
روابط خارجية
- يونكس
- تصحيح الأخطاء
- استدعاءات النظام
