یکی از مهمترین مراحل در تست نفوذ سیستمعامل لینوکس، شناسایی و بررسی مسیرهای افزایش سطح دسترسی یا 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
بررسی امنیتی
در این مرحله باید:
-
نسخه Kernel را ثبت کنید.
-
نسخه را با اطلاعیههای امنیتی توزیع مقایسه کنید.
-
مشخص کنید آیا آسیبپذیری شناختهشدهای برای آن وجود دارد.
-
شرایط لازم برای تأثیرپذیری سیستم را بررسی کنید.
-
در صورت وجود اصلاحیه، سیستم را بهروزرسانی کنید.
صرفاً قدیمی بودن نسخه کرنل به معنی آسیبپذیر بودن قطعی سیستم نیست؛ وضعیت وصلههای امنیتی 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 مرحله تکمیل شده
بازنشانی چکلیست
۱۳. چگونه از Privilege Escalation جلوگیری کنیم؟
شناخت روشهای افزایش دسترسی فقط نیمی از مسیر امنیت است. یک متخصص امنیت باید بتواند ضعفها را نیز برطرف کند.
مهمترین اقدامات دفاعی:
| ضعف امنیتی | راهکار مقابله |
|---|---|
| SUDO بیشازحد | محدودسازی دستورات مجاز |
| SUID غیرضروری | حذف بیت SUID |
| Cron ناامن | اصلاح مالکیت و مجوز اسکریپتها |
| Capabilities اضافی | حذف قابلیتهای غیرضروری |
| Kernel قدیمی | نصب وصلههای امنیتی |
| فایلهای قابل نوشتن | اصلاح مجوزها و مالکیت |
| PATH ناامن | استفاده از مسیرهای مطمئن و مطلق |
برای حذف SUID از یک فایل مشخص، در صورت تأیید اینکه این مجوز ضروری نیست:
sudo chmod u-s /path/to/file
برای مشاهده تنظیمات SUDO نیز:
sudo visudo
هر تغییری باید پس از بررسی وابستگی سرویسها و با رعایت اصل حداقل دسترسی انجام شود.
۱۴. تمرین نهایی کاربران صفر و یک سایبر
حالا نوبت شماست!
یک ماشین Ubuntu با کاربر معمولی student آماده کنید و سعی کنید بدون استفاده از ابزارهای خودکار، وضعیت امنیتی آن را بررسی کنید.
مأموریت شما:
-
اطلاعات سیستم را جمعآوری کنید.
-
مجوزهای SUDO را بررسی کنید.
-
فایلهای SUID را شناسایی کنید.
-
وظایف Cron را بررسی کنید.
-
Linux Capabilities را بررسی کنید.
-
مجوز فایلها و پوشهها را تحلیل کنید.
-
یافتههای امنیتی خود را مستند کنید.
-
راهکارهای رفع مشکلات را ارائه دهید.
هدف این تمرین، شناسایی مسیرهای بالقوه افزایش سطح دسترسی و اثبات امن بودن تنظیمات است.
۱۵. منابع تکمیلی برای یادگیری
برای تسلط بیشتر بر این حوزه، مطالعه منابع زیر پیشنهاد میشود:
-
GTFOBins — وبسایت GTFOBins
-
Hack The Box — آزمایشگاههای Hack The Box
-
TryHackMe — مسیرهای آموزشی TryHackMe
-
Linux man-pages — مستندات دستورات لینوکس
جمعبندی
Privilege Escalation یکی از مهارتهای مهم متخصصان تست نفوذ و مهندسان امنیت لینوکس است.
یک تست نفوذکار حرفهای فقط به دسترسی اولیه اکتفا نمیکند؛ بلکه مجوزها، تنظیمات، سرویسها و ساختار امنیتی سیستم را تحلیل میکند تا مشخص شود آیا امکان افزایش غیرمجاز سطح دسترسی وجود دارد یا خیر.
به خاطر داشته باشید: هدف از یادگیری این تکنیکها، افزایش امنیت سیستمها و شناسایی نقاط ضعف پیش از سوءاستفاده مهاجمان است.

دیدگاه شما