Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
linux-4.1.15_CVE-2022-42703 — استغلال نواة لينكس 4.1.15 لـ CVE-2022-42703، يوضح ثغرة تصعيد الامتيازات المحلية مع تنفيذ إثبات المفهوم لأغراض البحث الأمني والتعليم. | Kitploit
أدوات/GitHubGitHub/satheesh575555/linux-4.1.15_cve-2022-42703
تحليل الثغرات الأمنيةالاستغلالالأوراق والأبحاثالتعلم والتعليماستغلال الملفات الثنائية
GitHubsatheesh575555/linux-4.1.15_cve-2022-42703

linux-4.1.15_CVE-2022-42703

استغلال نواة لينكس 4.1.15 لـ CVE-2022-42703، يوضح ثغرة تصعيد الامتيازات المحلية مع تنفيذ إثبات المفهوم لأغراض البحث الأمني والتعليم.

عرض المستودع

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
منذ 2 سنواتلم تتم المراجعة بعد

Linux kernel release 4.x http://kernel.org/

هذه هي ملاحظات إصدار نواة لينكس 4.x. اقرأها بعناية، فهي تخبرك ما هو هذا كل شيء، وتشرح كيفية تثبيت النواة، وماذا تفعل إذا حدث خطأ ما.

ما هو لينكس؟

لينكس هو نسخة مطابقة لنظام التشغيل Unix، مكتوب من الصفر بواسطة Linus Torvalds بمساعدة فريق غير منظم من المخترقين عبر الإنترنت. يهدف إلى الامتثال لـ POSIX و Single UNIX Specification.

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

يتم توزيعه بموجب رخصة GNU العامة - راجع ملف COPYING المرفق لمزيد من التفاصيل.

على أي أجهزة يعمل؟

على الرغم من أن التطوير الأول كان لأجهزة الكمبيوتر الشخصية 32 بت القائمة على x86 (386 أو أعلى)، إلا أن لينكس اليوم يعمل أيضًا (على الأقل) على معماريات Compaq Alpha AXP، Sun SPARC و UltraSPARC، Motorola 68000، PowerPC، PowerPC64، ARM، Hitachi SuperH، Cell، IBM S/390، MIPS، HP PA-RISC، Intel IA-64، DEC VAX، AMD x86-64، AXIS CRIS، Xtensa، Tilera TILE، AVR32 و Renesas M32R.

لينكس قابل للنقل بسهولة إلى معظم المعماريات ذات 32 أو 64 بت طالما أنها تحتوي على وحدة إدارة ذاكرة ذات صفحات (PMMU) ومنفذ لمجمع GNU C (gcc) (جزء من مجموعة مجمعات GNU، GCC). تم أيضًا نقل لينكس إلى عدد من المعماريات بدون PMMU، على الرغم من أن الوظائف تكون محدودة بشكل واضح. تم أيضًا نقل لينكس إلى نفسه. يمكنك الآن تشغيل النواة كتطبيق في مساحة المستخدم - وهذا ما يسمى UserMode Linux (UML).

الوثائق:

  • يوجد الكثير من الوثائق المتاحة في شكل إلكتروني على الإنترنت وفي الكتب، سواء الخاصة بلينكس أو المتعلقة بأسئلة Unix العامة. أوصي بالاطلاع على الدلائل الفرعية للوثائق على أي موقع FTP للينكس للحصول على كتب LDP (مشروع توثيق لينكس). هذا الملف README ليس مخصصًا ليكون توثيقًا للنظام: هناك مصادر أفضل بكثير متاحة.

  • توجد ملفات README مختلفة في الدليل الفرعي Documentation/: تحتوي عادةً على ملاحظات تثبيت خاصة بالنواة لبعض البرامج التشغيلية على سبيل المثال. راجع Documentation/00-INDEX للحصول على قائمة بما هو موجود في كل ملف. يرجى قراءة ملف Changes، لأنه يحتوي على معلومات حول المشاكل التي قد تنتج عن ترقية النواة.

  • الدليل الفرعي Documentation/DocBook/ يحتوي على عدة أدلة لمطوري النواة والمستخدمين. يمكن عرض هذه الأدلة بعدة تنسيقات: PostScript (.ps)، PDF، HTML، وصفحات الدليل (man-pages)، من بين أخرى. بعد التثبيت، ستقوم الأوامر "make psdocs" و "make pdfdocs" و "make htmldocs" أو "make mandocs" بعرض الوثائق بالتنسيق المطلوب.

تثبيت مصدر النواة:

  • إذا قمت بتثبيت المصادر الكاملة، ضع ملف النواة المضغوط في دليل حيث لديك صلاحيات (مثل دليل المنزل) وقم بفك الضغط:

    xz -cd linux-4.X.tar.xz | tar xvf -

    استبدل "X" برقم إصدار النواة الأحدث.

    لا تستخدم منطقة /usr/src/linux! هذه المنطقة تحتوي على مجموعة (عادة غير كاملة) من رؤوس النواة التي تستخدمها ملفات رأس المكتبات. يجب أن تتطابق مع المكتبة، ولا يجب أن تتلف بسبب أي نواة حالية.

  • يمكنك أيضًا الترقية بين إصدارات 4.x عن طريق التصحيح (patching). يتم توزيع التصحيحات بتنسيق xz. لتثبيت عن طريق التصحيح، احصل على جميع ملفات التصحيح الأحدث، أدخل الدليل الأعلى لمصدر النواة (linux-4.X) ونفذ:

    xz -cd ../patch-4.x.xz | patch -p1

    استبدل "x" لجميع الإصدارات الأكبر من الإصدار "X" لشجرة المصدر الحالية، بالترتيب، ويجب أن يكون كل شيء على ما يرام. قد ترغب في إزالة ملفات النسخ الاحتياطي (some-file-name~ أو some-file-name.orig)، وتأكد من عدم وجود تصحيحات فاشلة (some-file-name# أو some-file-name.rej). إذا كانت موجودة، فإما أنني أو أنت قد ارتكبنا خطأ.

    على عكس تصحيحات نواة 4.x، فإن تصحيحات نواة 4.x.y (المعروفة أيضًا باسم النواة المستقرة -stable) ليست تراكمية ولكنها تطبق مباشرة على النواة الأساسية 4.x. على سبيل المثال، إذا كانت نواتك الأساسية هي 4.0 وتريد تطبيق التصحيح 4.0.3، فلا يجب عليك أولاً تطبيق التصحيحات 4.0.1 و 4.0.2. وبالمثل، إذا كنت تعمل بإصدار النواة 4.0.2 وتريد القفز إلى 4.0.3، فيجب عليك أولاً عكس التصحيح 4.0.2 (أي patch -R) قبل تطبيق التصحيح 4.0.3. يمكنك قراءة المزيد عن هذا في Documentation/applying-patches.txt

    بدلاً من ذلك، يمكن استخدام السكربت patch-kernel لأتمتة هذه العملية. يحدد إصدار النواة الحالي ويطبق أي تصحيحات موجودة.

    linux/scripts/patch-kernel linux

    الوسيطة الأولى في الأمر أعلاه هي موقع مصدر النواة. يتم تطبيق التصحيحات من الدليل الحالي، ولكن يمكن تحديد دليل بديل كوسيطة ثانية.

  • تأكد من عدم وجود ملفات .o قديمة وتبعيات متناثرة:

    cd linux make mrproper

    يجب أن يكون لديك الآن المصادر مثبتة بشكل صحيح.

متطلبات البرامج

يتطلب تجميع وتشغيل نواة 4.x إصدارات محدثة من حزم برامج مختلفة. راجع Documentation/Changes للحصول على أرقام الإصدارات الدنيا المطلوبة وكيفية الحصول على تحديثات لهذه الحزم. انتبه إلى أن استخدام إصدارات قديمة جدًا من هذه الحزم يمكن أن يسبب أخطاء غير مباشرة يصعب تتبعها، لذا لا تفترض أنه يمكنك فقط تحديث الحزم عند ظهور مشاكل واضحة أثناء البناء أو التشغيل.

دليل BUILD للنواة:

عند تجميع النواة، سيتم تخزين جميع ملفات المخرجات افتراضيًا مع كود مصدر النواة. استخدام الخيار "make O=output/dir" يسمح لك بتحديد مكان بديل لملفات المخرجات (بما في ذلك .config). مثال:

root@kitploit:~
 كود مصدر النواة: /usr/src/linux-4.X
 دليل البناء:    /home/name/build/kernel

لتكوين وبناء النواة، استخدم:

root@kitploit:~
 cd /usr/src/linux-4.X
 make O=/home/name/build/kernel menuconfig
 make O=/home/name/build/kernel
 sudo make O=/home/name/build/kernel modules_install install

يرجى ملاحظة: إذا تم استخدام خيار 'O=output/dir'، فيجب استخدامه لجميع استدعاءات make.

تكوين النواة:

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

  • أوامر التكوين البديلة هي:

    "make config" واجهة نصية بسيطة.

    "make menuconfig" قوائم ملونة نصية، قوائم اختيارية ومربعات حوار.

    "make nconfig" قوائم ملونة نصية محسّنة.

    "make xconfig" أداة تكوين تعتمد على X windows (Qt).

    "make gconfig" أداة تكوين تعتمد على X windows (Gtk).

    "make oldconfig" الافتراضي لجميع الأسئلة بناءً على محتويات ملف ./.config الموجود ويسأل عن رموز التكوين الجديدة.

    "make silentoldconfig" مثل ما سبق، لكن يتجنب ازدحام الشاشة بأسئلة تمت الإجابة عليها بالفعل. بالإضافة إلى تحديث التبعيات.

    "make olddefconfig" مثل ما سبق، لكن يعين الرموز الجديدة إلى قيمها الافتراضية دون مطالبة.

    "make defconfig" إنشاء ملف ./.config باستخدام قيم الرموز الافتراضية إما من arch/$ARCH/defconfig أو arch/$ARCH/configs/${PLATFORM}_defconfig، حسب المعمارية.

    "make ${PLATFORM}_defconfig" إنشاء ملف ./.config باستخدام قيم الرموز الافتراضية من arch/$ARCH/configs/${PLATFORM}_defconfig. استخدم "make help" للحصول على قائمة بجميع المنصات المتاحة لمعماريتك.

    "make allyesconfig" إنشاء ملف ./.config عن طريق تعيين قيم الرموز إلى 'y' قدر الإمكان.

    "make allmodconfig" إنشاء ملف ./.config عن طريق تعيين قيم الرموز إلى 'm' قدر الإمكان.

    "make allnoconfig" إنشاء ملف ./.config عن طريق تعيين قيم الرموز إلى 'n' قدر الإمكان.

    "make randconfig" إنشاء ملف ./.config عن طريق تعيين قيم الرموز إلى قيم عشوائية.

    "make localmodconfig" إنشاء تكوين بناءً على التكوين الحالي والوحدات المحملة (lsmod). يعطل أي خيار وحدة غير ضرورية للوحدات المحملة.

    root@kitploit:~
                        لإنشاء localmodconfig لجهاز آخر،
                        قم بتخزين lsmod لذلك الجهاز في ملف
                        وقم بتمريره كمعامل LSMOD.
    
                target$ lsmod > /tmp/mylsmod
                target$ scp /tmp/mylsmod host:/tmp
    
                host$ make LSMOD=/tmp/mylsmod localmodconfig
    
                        ما سبق يعمل أيضًا عند الترجمة المشتركة (cross compiling).
    

    "make localyesconfig" مشابه لـ localmodconfig، باستثناء أنه سيحول جميع خيارات الوحدات إلى خيارات مدمجة (=y).

    يمكنك العثور على مزيد من المعلومات حول استخدام أدوات تكوين نواة لينكس في Documentation/kbuild/kconfig.txt.

  • ملاحظات حول "make config":

    • وجود برامج تشغيل غير ضرورية سيجعل النواة أكبر، وقد يؤدي في بعض الظروف إلى مشاكل: الكشف عن بطاقة تحكم غير موجودة قد يربك وحدات التحكم الأخرى.

تجميع النواة:

  • تأكد من توفر gcc 3.2 على الأقل. لمزيد من المعلومات، راجع Documentation/Changes.

    يرجى ملاحظة أنه لا يزال بإمكانك تشغيل برامج المستخدم بصيغة a.out مع هذه النواة.

  • قم بتنفيذ "make" لإنشاء صورة نواة مضغوطة. من الممكن أيضًا تنفيذ "make install" إذا كان لديك lilo مثبتًا ليتناسب مع ملفات make للنواة، لكنك قد ترغب في التحقق من إعداد lilo الخاص بك أولاً.

    للقيام بالتثبيت الفعلي، يجب أن تكون مستخدمًا جذرًا، ولكن لا يتطلب أي بناء عادي ذلك. لا تستخدم اسم الجذر عبثًا.

  • إذا قمت بتكوين أي من أجزاء النواة كـ وحدات (modules)، فسيتعين عليك أيضًا تنفيذ "make modules_install".

  • مخرجات التجميع/البناء التفصيلية للنواة:

    عادةً، يعمل نظام بناء النواة في وضع هادئ إلى حد ما (ولكن ليس صامتًا تمامًا). ومع ذلك، في بعض الأحيان تحتاج أنت أو مطورو النواة الآخرون إلى رؤية أوامر التجميع والربط وغيرها تمامًا كما يتم تنفيذها. لهذا، استخدم وضع البناء "التفصيلي" (verbose). يتم ذلك عن طريق إدراج "V=1" في أمر "make". مثال:

    make V=1 all

    لجعل نظام البناء يخبر أيضًا بسبب إعادة بناء كل هدف، استخدم "V=2". القيمة الافتراضية هي "V=0".

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

    بدلاً من ذلك، قبل التجميع، استخدم خيار تكوين النواة "LOCALVERSION" لإلحاق لاحقة فريدة برقم إصدار النواة العادي. يمكن تعيين LOCALVERSION في قائمة "الإعداد العام" (General Setup).

  • من أجل تشغيل نواة جديدة، ستحتاج إلى نسخ صورة النواة (مثل .../linux/arch/i386/boot/bzImage بعد التجميع) إلى المكان الذي توجد فيه نواتك القابلة للتمهيد العادية.

  • لم يعد تشغيل نواة مباشرة من قرص مرن بدون مساعدة محمل إقلاع مثل LILO مدعومًا.

    إذا قمت بتشغيل لينكس من القرص الصلب، فمن المرجح أنك تستخدم LILO، الذي يستخدم صورة النواة كما هو محدد في الملف /etc/lilo.conf. عادة ما يكون ملف صورة النواة هو /vmlinuz أو /boot/vmlinuz أو /bzImage أو /boot/bzImage. لاستخدام النواة الجديدة، احفظ نسخة من الصورة القديمة وانسخ الصورة الجديدة فوق القديمة. ثم، يجب عليك إعادة تشغيل LILO لتحديث خريطة التحميل!! إذا لم تفعل، فلن تتمكن من تشغيل صورة النواة الجديدة.

    إعادة تثبيت LILO عادة ما تكون مسألة تشغيل /sbin/lilo. قد ترغب في تحرير /etc/lilo.conf لتحديد إدخال لصورة نواتك القديمة (على سبيل المثال، /vmlinux.old) في حالة عدم عمل الجديدة. راجع وثائق LILO لمزيد من المعلومات.

    بعد إعادة تثبيت LILO، يجب أن يكون كل شيء جاهزًا. قم بإيقاف تشغيل النظام، وأعد التشغيل، واستمتع!

    إذا احتجت في أي وقت إلى تغيير جهاز الجذر الافتراضي، وضع الفيديو، حجم القرص الرامي، إلخ. في صورة النواة، استخدم برنامج 'rdev' (أو بدلاً من ذلك خيارات الإقلاع LILO عندما يكون ذلك مناسبًا). لا حاجة لإعادة تجميع النواة لتغيير هذه المعلمات.

إذا حدث خطأ ما:

  • إذا كانت لديك مشاكل تبدو بسبب أخطاء في النواة، يرجى التحقق من الملف MAINTAINERS لمعرفة ما إذا كان هناك شخص معين مرتبط بالجزء من النواة الذي تواجه مشكلة معه. إذا لم يكن هناك أي شخص مدرج هناك، فإن ثاني أفضل شيء هو إرسال بريد إلكتروني إلي ([email protected])، وربما إلى أي قائمة بريدية أخرى ذات صلة أو إلى مجموعة الأخبار.

  • في جميع تقارير الأخطاء، يرجى ذكر النواة التي تتحدث عنها، وكيفية تكرار المشكلة، وما هو إعدادك (استخدم الفطرة السليمة). إذا كانت المشكلة جديدة، أخبرني بذلك، وإذا كانت المشكلة قديمة، فيرجى محاولة إخباري متى لاحظتها لأول مرة.

  • إذا نتج عن الخطأ رسالة مثل

    unable to handle kernel paging request at address C0000010 Oops: 0002 EIP: 0010:XXXXXXXX eax: xxxxxxxx ebx: xxxxxxxx ecx: xxxxxxxx edx: xxxxxxxx esi: xxxxxxxx edi: xxxxxxxx ebp: xxxxxxxx ds: xxxx es: xxxx fs: xxxx gs: xxxx Pid: xx, process nr: xx xx xx xx xx xx xx xx xx xx xx

    أو معلومات تصحيح أخطاء نواة مماثلة على شاشتك أو في سجل النظام، يرجى تكرارها بالضبط. قد يبدو التفريغ غير مفهوم لك، لكنه يحتوي على معلومات قد تساعد في تصحيح المشكلة. النص الموجود فوق التفريغ مهم أيضًا: فهو يخبرنا بشيء عن سبب تفريغ النواة للكود (في المثال أعلاه، يرجع ذلك إلى مؤشر نواة سيئ). مزيد من المعلومات حول فهم التفريغ موجودة في Documentation/oops-tracing.txt

  • إذا قمت بتجميع النواة مع CONFIG_KALLSYMS، يمكنك إرسال التفريغ كما هو، وإلا سيتعين عليك استخدام برنامج "ksymoops" لفهم التفريغ (لكن التجميع مع CONFIG_KALLSYMS عادة ما يكون مفضلاً). يمكن تنزيل هذه الأداة من ftp://ftp..kernel.org/pub/linux/utils/kernel/ksymoops/ . بدلاً من ذلك، يمكنك إجراء بحث التفريغ يدويًا:

  • في تصحيح أخطاء تفريغ مثل ما ورد أعلاه، يساعد بشكل كبير إذا كان بإمكانك البحث عن معنى قيمة EIP. القيمة السداسية العشرية في حد ذاتها لا تساعدني أو أي شخص آخر كثيرًا: ستعتمد على إعداد نواتك الخاص. ما يجب عليك فعله هو أخذ القيمة السداسية العشرية من سطر EIP (تجاهل "0010:")، والبحث عنها في قائمة أسماء النواة لمعرفة أي دالة نواة تحتوي على العنوان المخالف.

    لمعرفة اسم دالة النواة، ستحتاج إلى العثور على الملف الثنائي للنظام المرتبط بالنواة التي أظهرت الأعراض. هذا هو ملف 'linux/vmlinux'. لاستخراج قائمة الأسماء ومطابقتها مع EIP من تعطل النواة، قم بما يلي:

    nm vmlinux | sort | less

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

    إذا لم تتمكن لسبب ما من القيام بما ورد أعلاه (لديك صورة نواة مترجمة مسبقًا أو ما شابه)، فإن إخباري قدر الإمكان عن إعدادك سيساعد. يرجى قراءة وثيقة REPORTING-BUGS للحصول على التفاصيل.

تنزيل الأداة
  • تجميع النواة مع تعيين "نوع المعالج" (Processor type) أعلى من 386 سينتج نواة لا تعمل على 386. ستكتشف النواة هذا عند بدء التشغيل وتستسلم.

  • النواة التي تم تجميعها مع محاكاة رياضية (math-emulation) ستستمر في استخدام المعالج المساعد إذا كان موجودًا: لن يتم استخدام المحاكاة الرياضية أبدًا في هذه الحالة. ستكون النواة أكبر قليلاً، لكنها ستعمل على أجهزة مختلفة بغض النظر عن وجود معالج رياضي أم لا.

  • تفاصيل تكوين "اختراق النواة" (kernel hacking) تؤدي عادةً إلى نواة أكبر أو أبطأ (أو كليهما)، ويمكن أن تجعل النواة أقل استقرارًا عن طريق تكوين بعض الإجراءات لمحاولة كسر الكود السيئ بنشاط للعثور على مشاكل النواة (kmalloc()). لذا يجب عليك على الأرجح الإجابة بـ 'n' على أسئلة ميزات "التطوير" أو "التجريبية" أو "تصحيح الأخطاء".

  • أعد التشغيل بالنواة الجديدة واستمتع.

  • بدلاً من ذلك، يمكنك استخدام gdb على نواة قيد التشغيل. (قراءة فقط؛ أي لا يمكنك تغيير القيم أو تعيين نقاط التوقف.) للقيام بذلك، قم أولاً بتجميع النواة مع -g؛ قم بتحرير arch/i386/Makefile بشكل مناسب، ثم قم بتنفيذ "make clean". ستحتاج أيضًا إلى تمكين CONFIG_PROC_FS (عبر "make config").

    بعد إعادة التشغيل بالنواة الجديدة، قم بتنفيذ "gdb vmlinux /proc/kcore". يمكنك الآن استخدام جميع أوامر gdb المعتادة. الأمر للبحث عن النقطة التي تعطل فيها النظام هو "l *0xXXXXXXXX". (استبدل XXXes بقيمة EIP.)

    استخدام gdb على نواة غير قيد التشغيل يفشل حاليًا لأن gdb (بشكل خاطئ) يتجاهل الإزاحة الأولية التي تم تجميع النواة بها.