من ریشه هستم آشنایی با افزایش امتیازات سیستم عامل لینوکس

من سه ماهه اول سال 2020 را برای امتحان OSCP آماده کردم. جست‌وجوی اطلاعات در گوگل و تلاش‌های «کور» زیاد تمام وقت آزاد من را گرفت. به ویژه درک مکانیسم های افزایش امتیازات دشوار بود. دوره PWK توجه زیادی به این موضوع دارد، اما مواد آموزشی هرگز کافی نیست. کتابچه‌های راهنمای زیادی در اینترنت با دستورات مفید وجود دارد، اما من طرفدار پیروی کورکورانه توصیه‌ها بدون اینکه بدانم به چه چیزی منجر می‌شود، نیستم.

من می خواهم آنچه را که در طول آماده سازی و گذراندن موفقیت آمیز امتحان (از جمله حملات دوره ای به Hack The Box) یاد گرفتم، با شما به اشتراک بگذارم. برای تک تک اطلاعاتی که به من کمک کرد آگاهانه تر در مسیر تلاش برای تلاش بیشتر قدم بردارم، احساس قدردانی شدیدی داشتم، اکنون زمان من است که به جامعه پاسخ دهم.

من می خواهم راهنمای افزایش امتیازات در سیستم عامل لینوکس را به شما ارائه دهم که شامل تجزیه و تحلیل رایج ترین بردارها و ویژگی های مرتبط است که قطعاً برای شما مفید خواهد بود. اغلب مکانیسم‌های افزایش امتیازات به خودی خود بسیار ساده هستند؛ هنگام ساختاردهی و تجزیه و تحلیل اطلاعات مشکلاتی به وجود می‌آیند. بنابراین، تصمیم گرفتم با یک "تور گشت و گذار" شروع کنم و سپس هر بردار را در مقاله ای جداگانه در نظر بگیرم. امیدوارم در زمان تحقیق در مورد موضوع صرفه جویی کنم.

من ریشه هستم آشنایی با افزایش امتیازات سیستم عامل لینوکس

پس چرا تشدید امتیازات حتی در سال 2020 امکان پذیر است اگر این روش ها برای مدت بسیار طولانی شناخته شده باشند؟ در واقع اگر کاربر سیستم را به درستی مدیریت کند، واقعاً امکان افزایش امتیاز در آن وجود نخواهد داشت. مشکل اصلی جهانی که چنین فرصت هایی را به وجود می آورد این است پیکربندی ناامن. وجود نسخه‌های نرم‌افزار قدیمی حاوی آسیب‌پذیری‌ها در سیستم نیز یک مورد خاص از پیکربندی ناامن است.

افزایش امتیاز از طریق پیکربندی ناامن

ابتدا بیایید به پیکربندی ناامن بپردازیم. بیایید شروع کنیم متخصصان فناوری اطلاعات اغلب از کتابچه‌های راهنما و منابعی مانند stackoverflow استفاده می‌کنند، که بسیاری از آنها حاوی دستورات و تنظیمات ناامن هستند. یک مثال قابل توجه - اخبار کدی که بیشتر از همه کپی شده از stackoverflow حاوی یک خطا است. یک ادمین باتجربه این بازی را می بیند، اما این در یک دنیای ایده آل است. حتی متخصصان شایسته افزایش حجم کار قادر به اشتباه کردن تصور کنید که یک مدیر در حال آماده سازی و هماهنگی اسناد برای مناقصه بعدی است، در عین حال در حال بررسی فناوری جدیدی است که قرار است در سه ماهه آینده اجرا شود، در حالی که به طور دوره ای مشکلات پشتیبانی کاربر را حل می کند. و سپس وظیفه راه اندازی سریع چند ماشین مجازی و ارائه خدمات بر روی آنها به او داده می شود. به نظر شما احتمال اینکه ادمین به سادگی متوجه جمب نشود چقدر است؟ سپس متخصصان تغییر می کنند، اما عصا باقی می ماند، در حالی که شرکت ها همیشه تلاش می کنند تا هزینه ها را از جمله برای کارکنان فناوری اطلاعات به حداقل برسانند.

شبه شل و جیلبریک

پوسته سیستم به دست آمده در مرحله بهره برداری اغلب محدود است، به خصوص اگر آن را از طریق هک کردن یک کاربر وب سرور به دست آورده باشید. به عنوان مثال، محدودیت‌های پوسته ممکن است از اجرای دستور sudo جلوگیری کند و یک خطا ایجاد کند:

sudo: no tty present and no askpass program specified

هنگامی که یک پوسته دارید، توصیه می کنم یک ترمینال تمام عیار ایجاد کنید، به عنوان مثال با استفاده از پایتون.

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

ممکن است بپرسید: "اگر بتوانم از یکی برای مثال برای انتقال فایل ها استفاده کنم، چرا به هزار دستور نیاز دارم؟" واقعیت این است که سیستم‌ها به‌صورت متفاوتی پیکربندی شده‌اند؛ یک میزبان معین ممکن است پایتون را نصب نکرده باشد، اما ممکن است Perl داشته باشد. مهارت این است که بتوانید کارهای آشنا را در سیستم بدون ابزار آشنا انجام دهید. لیست کاملی از ویژگی ها را می توان یافت اینجا.

با استفاده از پوسته کم امتیاز می توان به دست آورد تیم ها 1 и تیم ها 2 (با کمال تعجب، حتی GIMP).

مشاهده تاریخچه فرمان

لینوکس تاریخچه تمام دستورات اجرا شده را در یک فایل جمع آوری می کند ash / .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 به کاربر این امکان را می دهد که با استفاده از رمز عبور خود یا بدون استفاده از رمز عبور، دستوری را در زمینه ریشه اجرا کند. بسیاری از عملیات ها در لینوکس نیاز به امتیازات روت دارند، اما اجرای به صورت روت عمل بسیار بدی در نظر گرفته می شود. در عوض، بهتر است مجوز انتخابی برای اجرای دستورات در زمینه ریشه اعمال شود. با این حال، بسیاری از ابزارهای لینوکس، از جمله ابزارهای استاندارد مانند vi، می توانند برای افزایش امتیازات به روش های قانونی استفاده شوند. برای یافتن یک روش مناسب، توصیه می کنم جستجو کنید اینجا.

اولین کاری که باید هنگام دسترسی به سیستم انجام دهید اجرای دستور sudo -l است. اجازه استفاده از دستور sudo را نمایش می دهد. اگر کاربر بدون رمز عبور (مانند آپاچی یا 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

راهنماهای زیادی در اینترنت وجود دارد که توصیه می‌کند همه دستورات suid/sgid را جمع‌آوری کنید، اما مقاله‌ای نادر در مورد اینکه با این برنامه‌ها چه کار باید کرد، توضیحاتی ارائه می‌کند. گزینه هایی برای افزایش امتیازات که استفاده از اکسپلویت ها را در نظر نمی گیرند می توان یافت اینجا. همچنین تعدادی از فایل های اجرایی دارای آسیب پذیری های خاصی برای نسخه سیستم عامل هستند. مثلا.

در یک دنیای ایده آل، شما می توانید تمام بسته های نصب شده را از طریق حداقل جستجو اسپلویت اجرا کنید. در عمل، این کار باید با محبوب ترین برنامه ها مانند sudo انجام شود. همچنین همیشه گزینه ای برای استفاده و پشتیبانی از توسعه ابزارهای خودکار وجود دارد که فایل های اجرایی جالب را از نقطه نظر افزایش امتیاز، با مجموعه بیت های suid/sgid برجسته می کند. من فهرستی از این ابزارها را در بخش مربوطه مقاله ارائه خواهم کرد.

اسکریپت های قابل نوشتن توسط Cron یا Init در زمینه Root اجرا می شوند

Cron job ها را می توان در زمینه های مختلف کاربر از جمله root اجرا کرد. اگر یک کار cron با پیوندی به یک فایل اجرایی تنظیم شده باشد و نوشتن آن در دسترس شما باشد، به راحتی می توان آن را با یک مخرب و افزایش امتیاز جایگزین کرد. با این حال، به طور پیش فرض، فایل های دارای وظایف cron توسط هر کاربری قابل خواندن هستند.

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

وضعیت در init نیز مشابه است. تفاوت این است که وظایف در 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

به دست آوردن دسترسی پوسته به سایر کاربران

ما به لیست کاربران در /etc/passwd نگاه می کنیم. ما به کسانی که پوسته دارند توجه می کنیم. شما می توانید این کاربران را بی رحم کنید - این امکان وجود دارد که از طریق کاربر حاصل در نهایت امکان افزایش امتیازات وجود داشته باشد.

برای بهبود امنیت، توصیه می کنم همیشه به اصل کمترین امتیاز پایبند باشید. همچنین منطقی است که وقت خود را برای بررسی تنظیمات ناامن که ممکن است پس از عیب یابی باقی بمانند صرف کنید - این "وظیفه فنی" مدیر سیستم است.

کد خودنویس

ارزش نگاهی دقیق به فایل های اجرایی موجود در فهرست اصلی کاربر و وب سرور (/var/www/، مگر اینکه غیر از این مشخص شده باشد) را دارد. ممکن است این فایل‌ها راه‌حلی کاملاً ناامن و حاوی عصاهای باورنکردنی باشند. البته، اگر نوعی فریم ورک در دایرکتوری وب سرور دارید، منطقی نیست که به عنوان بخشی از پنتست، به دنبال روز صفر در آن بگردید، اما توصیه می شود تغییرات، پلاگین ها و اجزای سفارشی را پیدا کرده و مطالعه کنید.

برای افزایش امنیت، در صورت امکان، بهتر است از استفاده از اعتبارنامه ها در اسکریپت های خودنویس و همچنین عملکردهای بالقوه خطرناک مانند خواندن /etc/shadow یا دستکاری id_rsa خودداری کنید.

افزایش امتیازات از طریق بهره برداری از آسیب پذیری ها

قبل از تلاش برای افزایش امتیازات از طریق استثمار، مهم است که بدانیم انتقال فایل ها به میزبان هدف. علاوه بر ابزارهای معمول مانند ssh، ftp، http (wget، curl) یک کل وجود دارد "باغ وحش" از امکانات.

برای بهبود امنیت سیستم، آن را مرتباً به جدیدترین آپدیت کنید پایدار نسخه ها، و همچنین سعی کنید از توزیع های طراحی شده برای Enterprise استفاده کنید. در غیر این صورت، نادر است، اما شرایطی وجود دارد که ارتقای مناسب سیستم را از کار می‌اندازد.

بهره برداری از خدماتی که در زمینه کاربر ریشه اجرا می شوند

برخی از سرویس های لینوکس به صورت روت اجرا می شوند. آنها را می توان با استفاده از دستور ps aux | پیدا کرد ریشه grep. در این صورت ممکن است این سرویس در اینترنت تبلیغ نشود و به صورت محلی در دسترس باشد. اگر دارای اکسپلویت های عمومی باشد، می توان با خیال راحت از آنها استفاده کرد: خرابی سرویس در صورت خرابی بسیار کمتر از خرابی سیستم عامل است.

ps -aux | grep root # Linux

موفق ترین مورد را می توان عملکرد یک سرویس هک شده در زمینه کاربر ریشه در نظر گرفت. عملکرد سرویس SMB دسترسی SYSTEM ممتاز را در سیستم های ویندوز (به عنوان مثال، از طریق ms17-010) می دهد. با این حال، این مورد در سیستم‌های لینوکس رایج نیست، بنابراین می‌توانید زمان زیادی را صرف افزایش امتیازات کنید.

بهره برداری از آسیب پذیری های هسته لینوکس

این راهی است که باید در آخر طی کنید. عملکرد ناموفق می تواند منجر به از کار افتادن سیستم شود و در صورت راه اندازی مجدد، برخی از سرویس ها (از جمله سرویس هایی که از طریق آنها پوسته اولیه به دست آمده است) ممکن است راه اندازی نشوند. این اتفاق می افتد که مدیر به سادگی فراموش کرده است که از دستور systemctl enable استفاده کند. بعلاوه در صورت عدم موافقت با عمل، باعث نارضایتی زیادی از کار شما خواهد شد.
اگر تصمیم دارید از کدهای منبع exploitdb استفاده کنید، حتما نظرات ابتدای اسکریپت را بخوانید. در میان چیزهای دیگر، معمولا می گوید که چگونه یک اکسپلویت معین را به درستی کامپایل کنیم. اگر خیلی تنبل هستید یا به دلیل ضرب الاجل مجبور به انجام آن "دیروز" شدید، می توانید به دنبال مخازن با اکسپلویت های قبلاً کامپایل شده باشید. مثلا. با این حال، باید درک کنید که در این صورت یک خوک در یک پوک به دست خواهید آورد. از طرف دیگر، اگر یک برنامه نویس تا حد بایت درک کند که یک کامپیوتر چگونه کار می کند و نرم افزاری که از آن استفاده می کند، در تمام عمر خود حتی یک خط کد نمی نویسد.

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

Metasploit

برای گرفتن و مدیریت اتصال، همیشه بهتر است از ماژول exploit/multi/handler استفاده کنید. نکته اصلی این است که بار صحیح را تنظیم کنید، به عنوان مثال، generic/shell/reverse_tcp یا generic/shell/bind_tcp. پوسته تولید شده توسط Metasploit را می توان با استفاده از ماژول post/multi/manage/shell_to_meterpreter به Meterpreter ارتقا داد. با Meterpreter، می توانید فرآیند پس از بهره برداری را خودکار کنید. به عنوان مثال، ماژول post/multi/recon/local_exploit_suggester پلت فرم، معماری و موجودیت های مورد نیاز برای بهره برداری را بررسی می کند و ماژول های Metasploit را برای افزایش امتیازات در سیستم هدف پیشنهاد می کند. به لطف Meterpreter، افزایش امتیازات گاهی به راه‌اندازی ماژول مورد نیاز ختم می‌شود، اما هک کردن بدون درک آنچه در زیر کاپوت اتفاق می‌افتد «درست» نیست (هنوز باید گزارش بنویسید).

ابزار

ابزارهای خودکارسازی جمع آوری اطلاعات محلی در زمان و تلاش شما صرفه جویی می کنند، اما به خودی خود قادر به شناسایی کامل مسیر افزایش امتیازات، به خصوص در مورد سوء استفاده از آسیب پذیری های هسته نیستند. ابزارهای اتوماسیون تمام دستورات لازم را برای جمع آوری اطلاعات در مورد سیستم انجام می دهند، اما همچنین مهم است که بتوانید تجزیه و تحلیل داده های دریافتی امیدوارم مقاله من در این زمینه برای شما مفید باشد. البته، ابزارهای بسیار بیشتری از آنچه در زیر ذکر خواهم کرد وجود دارد، اما همه آنها تقریباً یک کار را انجام می دهند - این یک موضوع سلیقه ای است.

نخود فرنگی

یک Tula کاملاً اخیر، اولین commit به ژانویه 2019 برمی گردد. ابزار مورد علاقه من در حال حاضر. نکته این است که جالب ترین بردارهای افزایش امتیاز را برجسته می کند. موافقم، گرفتن یک ارزیابی تخصصی در این سطح راحت تر از تجزیه داده های خام یکپارچه است.

LinEnum

دومین ابزار مورد علاقه من، همچنین داده های به دست آمده در نتیجه شمارش محلی را جمع آوری و سازماندهی می کند.

Linux-Exploit-Suggester (1,2،XNUMX)

این اکسپلویت سیستم را برای شرایط اکسپلویت مناسب تجزیه و تحلیل می کند. در واقع، این کار را مشابه ماژول Metasploit local_exploit_suggester انجام می دهد، اما به جای ماژول های Metasploit، پیوندهایی به کدهای منبع exploit-db ارائه می دهد.

Linuxprivchecker

این اسکریپت مقدار زیادی از اطلاعات را جمع آوری و در بخش ها سازماندهی می کند که می تواند برای تشکیل یک برداری برای افزایش امتیازات مفید باشد.

یک بار دیگر به جزئیات خواهم پرداخت افزایش امتیازات در سیستم عامل لینوکس از طریق suid/sgid.

منبع: www.habr.com

اضافه کردن نظر