أنا جذر. فهم تصعيد امتيازات نظام التشغيل Linux

أمضيت الربع الأول من عام 2020 في التحضير لامتحان OSCP. استغرق البحث عن معلومات على Google والكثير من المحاولات "العمياء" كل وقت فراغي. اتضح أنه من الصعب بشكل خاص فهم آليات تصعيد الامتيازات. تولي دورة PWK اهتمامًا كبيرًا بهذا الموضوع ، لكن المواد المنهجية لا تكفي دائمًا. هناك الكثير من الكتيبات الإرشادية على الإنترنت مع أوامر مفيدة ، لكنني لست مؤيدًا لاتباع التوصيات بشكل أعمى دون فهم إلى أين سيؤدي ذلك.

أود أن أشارككم ما تمكنت من تعلمه أثناء التحضير للامتحان واجتيازه بنجاح (بما في ذلك الغارات الدورية على Hack The Box). شعرت بإحساس عميق بالامتنان لكل جزء من المعلومات التي ساعدتني على السير في مسار Try Harder بشكل أكثر وعياً ، والآن حان الوقت لأرد الجميل للمجتمع.

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

أنا جذر. فهم تصعيد امتيازات نظام التشغيل Linux

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

تصعيد الامتياز من خلال التكوين غير الآمن

بادئ ذي بدء ، دعونا نتعامل مع التكوين غير الآمن. لنبدأ ب غالبًا ما يستخدم متخصصو تكنولوجيا المعلومات كتيبات وموارد مثل Stackoverflow، يحتوي الكثير منها على أوامر وتكوينات غير آمنة. وخير مثال على ذلك أخبار أن الكود الأكثر نسخًا من stackoverflow يحتوي على خطأ. سيرى مشرف متمرس الدعامة ، لكن هذا في عالم مثالي. حتى المهنيين الأكفاء زيادة عبء العمل قادر على ارتكاب الأخطاء. تخيل أن المسؤول يعد ويوافق على الوثائق الخاصة بالمناقصة التالية ، وفي نفس الوقت يتعمق في التكنولوجيا الجديدة التي سيتم تقديمها في الربع القادم ، مع حل مهام دعم المستخدم بشكل دوري. وبعد ذلك يتم تكليفه بمهمة رفع عدد من الأجهزة الافتراضية بسرعة ونشر الخدمات عليها. ما رأيك ، ما هو احتمال ألا يلاحظ المسؤول ببساطة الدعامة؟ ثم يتغير المتخصصون ، لكن العكازات باقية ، بينما تسعى الشركات دائمًا إلى تقليل التكاليف ، بما في ذلك تكاليف متخصصي تكنولوجيا المعلومات.

قذيفة زائفة وهروب من السجن

غالبًا ما يكون غلاف النظام الذي تم الحصول عليه أثناء مرحلة الإنتاج محدودًا ، خاصةً إذا حصلت عليه عن طريق اختراق مستخدم خادم الويب. على سبيل المثال ، يمكن أن تمنعك قيود shell من استخدام الأمر sudo مع وجود خطأ:

sudo: no tty present and no askpass program specified

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

python -c 'import pty;pty.spawn("/bin/bash")'

تسأل: "لماذا أحتاج ألف أمر ، إذا كان بإمكاني استخدام واحد ، على سبيل المثال ، لنقل الملفات؟" الحقيقة هي أن الأنظمة يتم تكوينها بشكل مختلف ، قد لا يتم تثبيت Python على المضيف التالي ، ولكن Perl متاح. المهارة هي أن تكون قادرًا على القيام بأشياء مألوفة في النظام بدون أدوات مألوفة. يمكن العثور على قائمة كاملة من الميزات هنا.

يمكن الحصول على قشرة امتياز منخفضة باستخدام فرق 1 и فرق 2 (من المستغرب حتى الأعرج).

عرض محفوظات الأوامر

يجمع Linux محفوظات لجميع الأوامر المنفذة في ملف ~ / .bash_history. إذا كان الخادم قيد الاستخدام النشط ولم يتم مسح سجله ، فهناك فرصة جيدة للعثور على بيانات الاعتماد في هذا الملف. مسح التاريخ غير مريح بشكل مبتذل. إذا اضطر المسؤول إلى تحديد أوامر من عشرة مستويات من خلال ، بالطبع ، سيكون من الأنسب له استدعاء هذا الأمر من السجل بدلاً من إدخاله مرة أخرى. بالإضافة إلى ذلك ، لا يعرف الكثير عن هذا "الاختراق". إذا كانت هناك قذائف بديلة مثل Zsh أو Fish في النظام ، فلديهم تاريخهم الخاص. لعرض محفوظات الأوامر في أي غلاف ، ما عليك سوى كتابة محفوظات الأوامر.

cat ~/.bash_history
cat ~/.mysql_history
cat ~/.nano_history
cat ~/.php_history
cat ~/.atftp_history

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

البحث عن كلمات المرور في نظام الملفات والهجمات على الأنظمة المجاورة

قد تكون ملفات التكوين الخاصة بخدمات متنوعة قابلة للقراءة بواسطة المستخدم الحالي. في نفوسهم ، يمكنك العثور على بيانات الاعتماد بنص واضح - كلمات مرور للوصول إلى قاعدة البيانات أو الخدمات ذات الصلة. يمكن استخدام كلمة المرور نفسها للوصول إلى قاعدة البيانات ولترخيص المستخدم الجذر (تعيين موظفين مؤهلين).
يحدث أن بيانات الاعتماد التي تم العثور عليها تنتمي إلى خدمات على مضيفين آخرين. إن تطوير هجوم على البنية التحتية من خلال مضيف مخترق ليس أسوأ من استغلال مضيفين آخرين. يمكن أيضًا العثور على الأنظمة المجاورة من خلال البحث عن عناوين IP في نظام الملفات.

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Find string password (no cs) in those directories
grep -a -R -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/ 2>/dev/null | sort -u | uniq #IPs inside logs

إذا كان لدى المضيف المخترق تطبيق ويب يمكن الوصول إليه من الإنترنت ، فمن الأفضل استبعاد سجلاته من البحث عن عناوين IP. من غير المحتمل أن تكون عناوين مستخدمي الموارد من الإنترنت مفيدة لنا ، ولكن عناوين الشبكة الداخلية (172.16.0.0/12 ، 192.168.0.0/16 ، 10.0.0.0/8) وأين يذهبون ، بناءً على قد تكون ذات أهمية.

سودو

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

أول شيء يجب فعله بعد الوصول إلى النظام هو تشغيل الأمر sudo -l. سيعرض إذنًا لاستخدام الأمر sudo. إذا تم الحصول على مستخدم بدون كلمة مرور (مثل apache أو www-data) ، فمن غير المحتمل أن يكون متجه تصعيد امتياز sudo. عند استخدام sudo ، سيطلب النظام كلمة مرور. لن يعمل استخدام الأمر passwd لتعيين كلمة مرور أيضًا ، وسيطلب كلمة مرور المستخدم الحالية. ولكن إذا كان sudo لا يزال متاحًا ، فأنت بحاجة في الواقع إلى البحث عن:

  • أي مترجم ، يمكن لأي شخص أن يولد قذيفة (PHP ، Python ، Perl) ؛
  • أي محررات نصوص (vim ، vi ، nano) ؛
  • أي مشاهدين (أقل ، أكثر) ؛
  • أي احتمالات للعمل مع نظام الملفات (cp ، mv) ؛
  • الأدوات التي لها مخرجات في bash ، إما بشكل تفاعلي أو كأمر قابل للتنفيذ (awk ، find ، nmap ، tcpdump ، man ، vi ، vim ، ansible).

سويد / سجيد

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

في عالم مثالي ، يجب عليك تشغيل جميع الحزم المثبتة من خلال searchsploit على الأقل. من الناحية العملية ، يجب أن يتم ذلك باستخدام أشهر البرامج مثل sudo. إنه أيضًا دائمًا خيار لاستخدام ودعم تطوير الأدوات الآلية التي ستسلط الضوء ، من وجهة نظر تصعيد الامتياز ، على الملفات التنفيذية مع مجموعة بت suid / sgid. سأقدم قائمة بهذه الأدوات في القسم المقابل من المقالة.

يتم تشغيل البرامج النصية القابلة للكتابة بواسطة Cron أو Init في سياق الجذر

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

ls -la /etc/cron.d  # show cron jobs 

نفس الحال مع الحرف الأول. الفرق هو أن المهام في cron يتم تنفيذها بشكل دوري وفي init - عند بدء تشغيل النظام. للتشغيل ، ستحتاج إلى إعادة تشغيل النظام ، بينما قد لا ترتفع بعض الخدمات (إذا لم تكن مسجلة في التحميل التلقائي).

ls -la /etc/init.d/  # show init scripts 

يمكنك أيضًا البحث عن الملفات التي يمكن لأي مستخدم الكتابة عليها.

find / -perm -2 -type f 2>/dev/null # find world writable files

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

chmod +w /path 
chmod 777 /path

الحصول على وصول shell للمستخدمين الآخرين

ننظر إلى قائمة المستخدمين في / etc / passwd. نحن نولي اهتماما لأولئك الذين لديهم صدفة. يمكنك عنف هؤلاء المستخدمين - من المحتمل أنه من خلال المستخدم الناتج ستتمكن في النهاية من زيادة الامتيازات.

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

كود مكتوب ذاتيًا

يجدر إلقاء نظرة فاحصة على الملفات القابلة للتنفيذ في الدليل الرئيسي للمستخدم وخادم الويب (/ var / www / ما لم يتم تحديد خلاف ذلك). يمكن أن تتحول هذه الملفات إلى حل غير آمن تمامًا وتحتوي على عكازات لا تصدق. بالطبع ، إذا كان لديك إطار عمل في دليل خادم الويب الخاص بك ، فليس من المنطقي البحث عن يوم الصفر فيه كجزء من اختبار pentest ، ولكن يوصى بالعثور على التعديلات والمكونات الإضافية والمكونات المخصصة ودراستها.

لزيادة الأمان ، من الأفضل تجنب استخدام بيانات الاعتماد في البرامج النصية المكتوبة ذاتيًا ، بالإضافة إلى الوظائف التي يحتمل أن تكون خطرة ، مثل قراءة / etc / shadow أو التلاعب في id_rsa ، إن أمكن.

رفع الامتياز من خلال استغلال نقاط الضعف

قبل محاولة رفع الامتيازات من خلال الاستغلال ، من المهم فهم نقل الملفات إلى المضيف الهدف. بالإضافة إلى الأدوات المعتادة مثل ssh و ftp و http (wget، curl) ، هناك مجموعة كاملة "حديقة الحيوانات" من الاحتمالات.

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

استغلال الخدمات التي تعمل في سياق المستخدم الجذر

تعمل بعض خدمات Linux كجذر مستخدم ذي امتياز. يمكن العثور عليها باستخدام ps aux | جريب الجذر. في هذه الحالة ، قد لا يتم الإعلان عن الخدمة على الويب وتكون متاحة محليًا. إذا كان لديه مآثر عامة ، فيمكن استخدامه بأمان: تعطل الخدمة في حالة الفشل أقل أهمية بكثير من تعطل نظام التشغيل.

ps -aux | grep root # Linux

يمكن اعتبار الحالة الأكثر نجاحًا هي تشغيل خدمة تم اختراقها في سياق المستخدم الجذر. يمنح تشغيل خدمة SMB وصولاً مميزًا للنظام على أنظمة Windows (على سبيل المثال عبر ms17-010). ومع ذلك ، هذا ليس شائعًا في أنظمة Linux ، لذلك يمكنك قضاء الكثير من الوقت في تصعيد الامتيازات.

استغلال ثغرات Linux Kernel

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

cat /proc/version
uname -a
searchsploit "Linux Kernel" 

Metasploit

للقبض على اتصال والتعامل معه ، من الأفضل دائمًا استخدام وحدة استغلال / متعدد / معالج. الشيء الرئيسي هو تعيين الحمولة الصحيحة ، على سبيل المثال ، generic / shell / reverce_tcp أو generic / shell / bind_tcp. يمكن ترقية الغلاف الذي تم الحصول عليه في Metasploit إلى Meterpreter باستخدام وحدة post / multi / management / shell_to_meterpreter. باستخدام Meterpreter ، يمكنك أتمتة عملية ما بعد الاستغلال. على سبيل المثال ، تتحقق وحدة post / multi /reec / local_exploit_suggester من النظام الأساسي والبنية والكيانات القابلة للاستغلال وتقترح وحدات Metasploit لتصعيد الامتياز على النظام المستهدف. بفضل Meterpreter ، يأتي تصعيد الامتياز أحيانًا لتشغيل الوحدة الصحيحة ، لكن القرصنة دون فهم ما يحدث تحت غطاء المحرك ليس صحيحًا (لا يزال يتعين عليك كتابة تقرير).

الأدوات

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

لينبيز

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

LinEnum

أداتي الثانية المفضلة ، تقوم أيضًا بجمع وتنظيم البيانات الواردة نتيجة التعداد المحلي.

لينكس-إكسبلت-توستر (1,2)

سوف يقوم هذا الاستغلال بتحليل النظام بحثًا عن الظروف المناسبة للاستغلال. في الواقع ، ستقوم بعمل مماثل لوحدة Metasploit local_exploit_suggester ، ولكنها ستقدم روابط إلى رموز مصدر استغلال db بدلاً من وحدات Metasploit.

Linuxprivchecker

سيجمع هذا البرنامج النصي وينظم حسب الأقسام قدرًا كبيرًا من المعلومات التي يمكن أن تكون مفيدة لتشكيل ناقل تصعيد الامتياز.

مرة أخرى سأشرح بالتفصيل تصعيد امتياز Linux عبر suid / sgid.

المصدر: www.habr.com

إضافة تعليق