آموزش عملی Linux Privilege Escalation؛ چگونه از یک کاربر معمولی به سطح Root برسیم؟

Practical Linux Privilege Escalation: How to Go from a Regular User to Root Level?
0 دیدگاه
۱۴۰۵-۰۸-۱۳ ۱۰:۴۳:۰۸

یکی از مهم‌ترین مراحل در تست نفوذ سیستم‌عامل لینوکس، شناسایی و بررسی مسیرهای افزایش سطح دسترسی یا Privilege Escalation است.

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

در این شرایط سؤال اصلی این است:

آیا می‌توان با شناسایی تنظیمات اشتباه، مجوزهای ناامن یا آسیب‌پذیری‌های موجود، سطح دسترسی را از یک کاربر عادی به Root افزایش داد؟

در این آموزش، قدم‌به‌قدم یاد می‌گیریم چگونه یک سیستم لینوکسی را بررسی کنیم، مسیرهای احتمالی افزایش دسترسی را پیدا کنیم و در یک آزمایشگاه اختصاصی، مفهوم Privilege Escalation را به‌صورت عملی یاد بگیریم.

تمام تمرین‌ها برای ماشین آزمایشگاهی و سیستم‌هایی است که مالک آن‌ها هستید یا مجوز تست دارید.

۱. آشنایی با Linux Privilege Escalation

در لینوکس کاربران بر اساس سطح دسترسی خود مجوزهای متفاوتی دارند.

مهم‌ترین حساب کاربری در لینوکس، حساب Root است.

نوع کاربر سطح دسترسی
Regular User دسترسی محدود
Sudo User امکان اجرای دستورات مدیریتی مجاز
Root دسترسی مدیریتی کامل

شناسه کاربری (UID) حساب Root برابر با صفر است.

برای مشاهده کاربر فعلی:

whoami

مشاهده UID و گروه‌های کاربر:

id

مشاهده اطلاعات کاربران:

cat /etc/passwd

برای مثال، اگر خروجی دستور id چیزی شبیه این باشد:

uid=1000(student) gid=1000(student) groups=1000(student)

یعنی در حال حاضر با کاربر معمولی student وارد سیستم شده‌ایم.

هدف ما در این آزمایشگاه، بررسی این است که آیا تنظیمات سیستم به شکلی هستند که امکان افزایش سطح دسترسی ایجاد کنند یا خیر.

۲. ساخت آزمایشگاه اختصاصی

برای اجرای تمرین‌ها به یک محیط کنترل‌شده نیاز داریم.

ابزارهای موردنیاز:

  • VirtualBox یا VMware

  • Ubuntu Server

  • یک حساب کاربری معمولی

  • دسترسی کنسول به ماشین مجازی

پیشنهاد می‌کنم یک ماشین مجازی Ubuntu Server بسازید و قبل از شروع از آن Snapshot بگیرید.

مشخصات پیشنهادی:

بخش مقدار
سیستم‌عامل Ubuntu Server
RAM 2GB
CPU 2 Core
Disk 20GB
Network Host-only
User student

در این آموزش از Ubuntu به‌عنوان سیستم هدف استفاده می‌کنیم.

۳. مرحله اول: شناسایی وضعیت سیستم (System Enumeration)

قبل از هرگونه اقدام، باید اطلاعات کاملی از سیستم هدف جمع‌آوری کنیم.

در تست نفوذ حرفه‌ای، افزایش دسترسی بدون شناخت محیط کار، روش مناسبی نیست.

بررسی نسخه سیستم‌عامل

cat /etc/os-release

بررسی نسخه کرنل

uname -a

یا:

uname -r

چرا این اطلاعات مهم هستند؟

  • نسخه قدیمی سیستم‌عامل ممکن است دارای آسیب‌پذیری‌های شناخته‌شده باشد.

  • نسخه کرنل در بررسی آسیب‌پذیری‌های سطح سیستم اهمیت دارد.

  • توزیع لینوکس مشخص می‌کند از چه ابزار مدیریت بسته‌ای استفاده می‌کنیم.

بررسی پردازنده و معماری سیستم

lscpu

بررسی کاربران فعال

who

بررسی گروه‌های کاربر فعلی

groups

این دستورات به ما کمک می‌کنند تصویر اولیه‌ای از محیط هدف به دست بیاوریم.

۴. بررسی دسترسی‌های SUDO

یکی از مهم‌ترین مسیرهای بررسی

SUDO ابزاری برای اجرای دستورات با سطح دسترسی بالاتر است.

گاهی مدیر سیستم به‌اشتباه اجازه اجرای یک برنامه حساس را بدون محدودیت به یک کاربر می‌دهد.

برای بررسی دستورات مجاز کاربر فعلی:

sudo -l

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

User student may run the following commands:
    (root) NOPASSWD: /usr/bin/find

این خروجی یک نکته امنیتی مهم دارد:

کاربر student می‌تواند برنامه find را با دسترسی Root اجرا کند، بدون اینکه رمز عبور وارد کند.

اگر چنین دسترسی‌ای بدون محدودیت و بدون نیاز عملیاتی تعریف شده باشد، می‌تواند خطرناک باشد.

تمرین عملی در آزمایشگاه

ابتدا در ماشین مجازی، با حساب مدیر سیستم فایل SUDO را باز کنید:

sudo visudo

این قانون را برای کاربر آزمایشگاهی اضافه کنید:

student ALL=(root) NOPASSWD: /usr/bin/find

این تنظیم صرفاً برای ساخت یک سناریوی آسیب‌پذیر در ماشین مجازی خودتان است.

حالا وارد حساب student شوید و بررسی کنید:

sudo -l

برای اثبات اینکه برنامه با هویت Root اجرا می‌شود، یک دستور بی‌خطر اجرا کنید:

sudo /usr/bin/find /tmp -maxdepth 0 -exec /usr/bin/id \;

خروجی مورد انتظار باید شامل این مقدار باشد:

uid=0(root) gid=0(root)
نتیجه تمرین

در این سناریو ثابت کردیم که یک کاربر معمولی به دلیل پیکربندی ناامن SUDO توانسته یک برنامه را با هویت Root اجرا کند.

نکته امنیتی: در محیط واقعی، باید مجوز SUDO را به حداقل دسترسی ضروری محدود کرد و از دادن دسترسی به برنامه‌هایی که امکان اجرای فرمان دلخواه دارند، اجتناب کرد.

۵. بررسی فایل‌های دارای مجوز SUID

یکی دیگر از موارد مهم در Linux Privilege Escalation، بررسی فایل‌های دارای بیت SUID است.

SUID مخفف Set User ID است.

این مجوز باعث می‌شود یک فایل اجرایی با شناسه کاربری مالک فایل اجرا شود، نه الزاماً کاربری که آن را اجرا کرده است.

برای مشاهده فایل‌های SUID:

find / -type f -perm -4000 2>/dev/null

برای مشاهده مجوز یک فایل:

ls -l /usr/bin/passwd

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

-rwsr-xr-x 1 root root ...

وجود حرف s در بخش مجوز مالک نشان‌دهنده SUID است.

آیا تمام فایل‌های SUID خطرناک هستند؟

خیر. بسیاری از فایل‌های سیستمی به‌صورت طبیعی از این قابلیت استفاده می‌کنند.

اما موارد زیر باید بررسی شوند:

  • فایل‌های اجرایی غیرضروری با مالکیت Root

  • فایل‌های SUID ناشناخته

  • برنامه‌های سفارشی که توسط مدیر سیستم نوشته شده‌اند

  • فایل‌هایی که امکان اجرای دستورات یا دسترسی به فایل‌های حساس دارند

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

۶. بررسی Cron Jobs و وظایف زمان‌بندی‌شده

Cron یکی از ابزارهای اجرای خودکار دستورات در لینوکس است.

گاهی مدیر سیستم یک اسکریپت را به‌صورت زمان‌بندی‌شده با دسترسی Root اجرا می‌کند؛ اما مجوزهای فایل یا پوشه آن را به‌درستی تنظیم نمی‌کند.

مشاهده وظایف زمان‌بندی‌شده کاربر:

crontab -l

بررسی فایل اصلی Cron:

cat /etc/crontab

بررسی پوشه‌های زمان‌بندی:

ls -la /etc/cron.d/
ls -la /etc/cron.hourly/

چه چیزی باید پیدا کنیم؟

فرض کنید در فایل Cron چنین دستوری وجود دارد:

* * * * * root /opt/scripts/backup.sh

یعنی اسکریپت backup.sh هر دقیقه با سطح دسترسی Root اجرا می‌شود.

اگر این فایل توسط کاربران عادی قابل ویرایش باشد، یک ضعف امنیتی جدی ایجاد می‌شود.

برای بررسی مجوزها:

ls -l /opt/scripts/backup.sh

و:

namei -l /opt/scripts/backup.sh

دستور دوم مجوز تک‌تک پوشه‌های مسیر را نیز نمایش می‌دهد.

روش رفع مشکل:

  • مالک اسکریپت باید حساب مدیریتی مناسب باشد.

  • کاربران عادی نباید امکان ویرایش اسکریپت را داشته باشند.

  • پوشه‌های مسیر نیز باید مجوزهای امن داشته باشند.

  • دستورات Cron باید با حداقل سطح دسترسی لازم اجرا شوند.

۷. بررسی Linux Capabilities

یکی از بخش‌های کمتر شناخته‌شده در تست نفوذ لینوکس، Linux Capabilities است.

در لینوکس، به‌جای اینکه تمام دسترسی‌های مدیریتی فقط در اختیار Root باشند، می‌توان قابلیت‌های مشخصی را به برنامه‌ها اختصاص داد.

برای مثال:

  • CAP_NET_RAW: امکان استفاده از سوکت‌های خام شبکه

  • CAP_NET_BIND_SERVICE: امکان اتصال به پورت‌های کمتر از 1024

  • CAP_SYS_ADMIN: مجموعه‌ای از اختیارات مدیریتی گسترده

مشاهده Capabilities فایل‌ها

ابتدا ابزار مربوطه را نصب کنید:

sudo apt update
sudo apt install libcap2-bin

سپس:

getcap -r /usr/bin /usr/sbin 2>/dev/null

برای بررسی یک فایل مشخص:

getcap /usr/bin/ping

نمونه خروجی:

/usr/bin/ping cap_net_raw=ep

این خروجی نشان می‌دهد برنامه Ping قابلیت CAP_NET_RAW دارد.

وجود Capability به‌تنهایی به معنی آسیب‌پذیری نیست؛ باید بررسی کنیم آیا قابلیت اعطاشده برای عملکرد برنامه ضروری است یا خیر و آیا ترکیب آن با سایر تنظیمات می‌تواند خطر ایجاد کند.

نکته امنیتی

هرگز به برنامه‌های ناشناخته Capabilityهای گسترده ندهید. دسترسی‌های غیرضروری را حذف کنید و مجوزهای موجود را دوره‌ای بررسی کنید.

۸. بررسی مجوزهای اشتباه فایل‌ها و پوشه‌ها

گاهی مشکل امنیتی بسیار ساده‌تر از چیزی است که تصور می‌کنیم.

یک فایل حساس ممکن است به‌اشتباه برای تمام کاربران قابل ویرایش باشد.

برای پیدا کردن فایل‌های قابل نوشتن در مسیرهای مهم:

find /etc /opt /usr/local -type f -writable 2>/dev/null

برای بررسی مجوز پوشه:

ls -ld /opt

برای بررسی مالکیت:

stat /etc/passwd

چه فایل‌هایی اهمیت بیشتری دارند؟

  • فایل‌های تنظیمات سرویس‌ها

  • اسکریپت‌های مدیریتی

  • فایل‌های اجرای خودکار

  • فایل‌های حاوی تنظیمات احراز هویت

  • فایل‌های تنظیمات برنامه‌های تحت وب

تمرین: یک فایل آزمایشی در پوشه /opt بسازید، مجوزهای آن را بررسی کنید و تفاوت دسترسی مالک، گروه و سایر کاربران را با دستور chmod مشاهده کنید.

mkdir -p /opt/lab
touch /opt/lab/test.txt
chmod 644 /opt/lab/test.txt
ls -l /opt/lab/test.txt

حالا مجوز را تغییر دهید:

chmod 666 /opt/lab/test.txt

مقایسه کنید چه تغییری در سطح دسترسی ایجاد شده است.

این تمرین نشان می‌دهد چرا مجوزهای بیش‌ازحد باز می‌توانند خطرناک باشند.

۹. بررسی متغیر PATH

متغیر PATH مشخص می‌کند سیستم برای پیدا کردن برنامه‌های اجرایی در چه مسیرهایی جست‌وجو کند.

برای مشاهده PATH:

echo $PATH

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

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

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

این وضعیت ممکن است باعث اجرای فایل اشتباه به‌جای برنامه موردنظر شود.

برای بررسی:

echo $PATH | tr ':' '\n'

سپس مجوز مسیرها را بررسی کنید:

ls -ld /usr/local/bin

نکته مهم این است که اسکریپت‌های مدیریتی نباید به مسیرهای غیرقابل‌اعتماد وابسته باشند.

۱۰. بررسی آسیب‌پذیری‌های Kernel

کرنل هسته اصلی سیستم‌عامل لینوکس است.

گاهی آسیب‌پذیری‌های شناخته‌شده در نسخه‌های قدیمی Kernel می‌توانند زمینه افزایش سطح دسترسی ایجاد کنند.

برای بررسی نسخه:

uname -r

برای مشاهده اطلاعات سیستم:

hostnamectl

برای بررسی بسته‌های به‌روزرسانی:

sudo apt list --upgradable

بررسی امنیتی

در این مرحله باید:

  1. نسخه Kernel را ثبت کنید.

  2. نسخه را با اطلاعیه‌های امنیتی توزیع مقایسه کنید.

  3. مشخص کنید آیا آسیب‌پذیری شناخته‌شده‌ای برای آن وجود دارد.

  4. شرایط لازم برای تأثیرپذیری سیستم را بررسی کنید.

  5. در صورت وجود اصلاحیه، سیستم را به‌روزرسانی کنید.

صرفاً قدیمی بودن نسخه کرنل به معنی آسیب‌پذیر بودن قطعی سیستم نیست؛ وضعیت وصله‌های امنیتی Backport شده نیز اهمیت دارد.

۱۱. استفاده از ابزار LinPEAS برای بررسی خودکار

تا اینجا بسیاری از بررسی‌ها را به‌صورت دستی انجام دادیم.

اما در تست نفوذ حرفه‌ای، ابزارهایی وجود دارند که فرایند جمع‌آوری اطلاعات امنیتی را سریع‌تر می‌کنند.

یکی از ابزارهای شناخته‌شده در این زمینه LinPEAS است.

LinPEAS یک ابزار جمع‌آوری اطلاعات برای شناسایی تنظیمات مشکوک و مسیرهای احتمالی افزایش سطح دسترسی در لینوکس است.

اطلاعاتی که بررسی می‌کند شامل موارد زیر است:

  • اطلاعات سیستم و Kernel

  • مجوزهای SUDO

  • فایل‌های SUID و SGID

  • Cron Jobs

  • Linux Capabilities

  • مجوزهای فایل‌ها

  • تنظیمات سرویس‌ها

  • اطلاعات محیط کاربر

اجرای ابزار در آزمایشگاه

از مخزن رسمی پروژه استفاده کنید:

پس از دریافت نسخه مورد اعتماد ابزار در ماشین آزمایشگاهی:

chmod +x linpeas.sh

اجرای اسکن:

./linpeas.sh

چطور خروجی را تحلیل کنیم؟

در خروجی LinPEAS ممکن است مواردی با رنگ‌های متفاوت نمایش داده شوند.

اما یک نکته مهم وجود دارد:

هر موردی که با رنگ قرمز یا زرد نمایش داده می‌شود، الزاماً یک آسیب‌پذیری قابل Exploit نیست.

باید هر یافته را با بررسی دستی تأیید کنید.

همچنین ابزارهای Enumeration را فقط روی سیستم‌های مجاز اجرا کنید؛ این ابزارها ممکن است اطلاعات حساس سیستم را در خروجی خود نمایش دهند.

۱۲. چک‌لیست حرفه‌ای تست Privilege Escalation

در یک پروژه واقعی تست نفوذ، بهتر است مراحل بررسی را مستند کنید.

Linux Privilege Escalation Checklist

0 از 13 مرحله تکمیل شده

0٪

بازنشانی چک‌لیست

۱۳. چگونه از Privilege Escalation جلوگیری کنیم؟

شناخت روش‌های افزایش دسترسی فقط نیمی از مسیر امنیت است. یک متخصص امنیت باید بتواند ضعف‌ها را نیز برطرف کند.

مهم‌ترین اقدامات دفاعی:

ضعف امنیتی راهکار مقابله
SUDO بیش‌ازحد محدودسازی دستورات مجاز
SUID غیرضروری حذف بیت SUID
Cron ناامن اصلاح مالکیت و مجوز اسکریپت‌ها
Capabilities اضافی حذف قابلیت‌های غیرضروری
Kernel قدیمی نصب وصله‌های امنیتی
فایل‌های قابل نوشتن اصلاح مجوزها و مالکیت
PATH ناامن استفاده از مسیرهای مطمئن و مطلق

برای حذف SUID از یک فایل مشخص، در صورت تأیید اینکه این مجوز ضروری نیست:

sudo chmod u-s /path/to/file

برای مشاهده تنظیمات SUDO نیز:

sudo visudo

هر تغییری باید پس از بررسی وابستگی سرویس‌ها و با رعایت اصل حداقل دسترسی انجام شود.

۱۴. تمرین نهایی کاربران صفر و یک سایبر

چالش عملی

حالا نوبت شماست!

یک ماشین Ubuntu با کاربر معمولی student آماده کنید و سعی کنید بدون استفاده از ابزارهای خودکار، وضعیت امنیتی آن را بررسی کنید.

مأموریت شما:

  1. اطلاعات سیستم را جمع‌آوری کنید.

  2. مجوزهای SUDO را بررسی کنید.

  3. فایل‌های SUID را شناسایی کنید.

  4. وظایف Cron را بررسی کنید.

  5. Linux Capabilities را بررسی کنید.

  6. مجوز فایل‌ها و پوشه‌ها را تحلیل کنید.

  7. یافته‌های امنیتی خود را مستند کنید.

  8. راهکارهای رفع مشکلات را ارائه دهید.

هدف این تمرین، شناسایی مسیرهای بالقوه افزایش سطح دسترسی و اثبات امن بودن تنظیمات است.

۱۵. منابع تکمیلی برای یادگیری

برای تسلط بیشتر بر این حوزه، مطالعه منابع زیر پیشنهاد می‌شود:

جمع‌بندی

Privilege Escalation یکی از مهارت‌های مهم متخصصان تست نفوذ و مهندسان امنیت لینوکس است.

یک تست نفوذکار حرفه‌ای فقط به دسترسی اولیه اکتفا نمی‌کند؛ بلکه مجوزها، تنظیمات، سرویس‌ها و ساختار امنیتی سیستم را تحلیل می‌کند تا مشخص شود آیا امکان افزایش غیرمجاز سطح دسترسی وجود دارد یا خیر.

به خاطر داشته باشید: هدف از یادگیری این تکنیک‌ها، افزایش امنیت سیستم‌ها و شناسایی نقاط ضعف پیش از سوءاستفاده مهاجمان است.

دسته بندی‌ها:

آنچه در این مقاله میخوانید

دیدگاه شما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *