Skip to content

ONHEXGROUP

اخبار دنیای امنیت سایبری

  • اخبار
    • آسیب پذیری امنیتی
    • آنالیز بدافزار
    • کنفرانس ،دوره ، وبینار ، لایو ، CTF
    • بازیگران تهدید
    • توسعه اکسپلویت
    • افشای اطلاعات
    • باگ بانتی
    • تیم آبی
    • تیم قرمز
    • امنیت وب
  • دوره های آموزشی
    • دوره رایگان مهندسی معکوس نرم افزار
  • لیست های ویژه
    • موتورهای جستجو برای امنیت سایبری
    • کاتالوگ KEV آژانس CISA
    • آسیب پذیری های وردپرس
      • آسیب پذیری پلاگین ها
      • آسیب پذیری های هسته
      • آسیب پذیری تم ها
    • محصولات خارج از پشتیبانی مایکروسافت
      • محصولات مایکروسافتی که در سال 2022 پشتیبانی نمیشن
      • محصولات مایکروسافتی که در سال 2023 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2024 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2025 پشتیبانی نمیشن
    • معرفی فیلم ها و سریالهای مرتبط با هک و امنیت
  • آموزش های ویدیویی
  • انتشارات
    • مجله
    • مقالات
    • پادکست
  • پروژه ها
    • ماشین آسیب پذیر
      • وردپرس آسیب پذیر
  • حمایت مالی ( Donate)
  • تماس با ما
 
  • Home
  • اخبار
  • سوء استفاده از بسته ی command-not-found در اوبونتو
  • آسیب پذیری امنیتی
  • اخبار
  • تیم قرمز

سوء استفاده از بسته ی command-not-found در اوبونتو

On بهمن 27, 1402
seyyid
Share
زمان مطالعه: 10 دقیقه

محققای Aqua Nautilus یه آسیب پذیری رو کشف و گزارش کردن که از تعامل بین بسته command-not-found در ابونتو و مخزن بسته Snap ناشی میشه. مهاجمان میتونن با دستکاری مخزن Snap ، از این آسیب پذیری سوء استفاده کرده و بسته های مخرب رو به کاربر پیشنهاد بدن.

در این پست نگاهی به command-not-found ، خطرات مرتبط با نصب بسته های Snap مخرب و بردارهای حمله ای که امکان سوء استفاده از این آسیب پذیری رو میدن ، انداختیم.

 

بسته های Snap و APT :

در لینوکس معمولا برای مدیریت و نصب برنامه ها از ابزارهای مختلفی استفاده میشه. دو مورد رایجش Snap و APT هستش.

Snap یک سیستم بسته بندی و توسعه نرم افزاره که از بسته های مستقلی بنام Snap برای انتقال نرم افزار به کاربران استفاده میکنه. در Snap همه ی چیزی که برای اجرای برنامه نیازه، یکجا جمع شده، بنابراین هم سایزشون بزرگتره و هم مستقل از سیستم هستن، یعنی روی هر توزیعی که از Snap پشتیبانی میکنه قابل اجراست. در Snap توسعه دهندگان میتونن بسته های خودشون رو از مستقیما از طریق Snap Store به دست مخاطب برسونن . فرمت بسته snap. و از نوع فایل آرشیوی SquashFS هستش. طریقه نصب با این ابزار:

 

1
sudo snap install app-name

 

APT یه ابزار مدیریت بسته هستش که برای نصب و حذف بسته های در سیستم های مبتنی بر دبیان استفاده میشه. APT بسته هارو از منابع رسمی یک توزیع بدست میاره. فرمت بسته deb. و از نوع فایل آرشیوی ar هستش. طریقه نصب با این ابزار:

 

1
sudo apt install app-name

 

بسته command-not-found :

بسته command-not-found، بصورت پیش فرض در اوبونتو نصب میشه و کارش اینه که اگه دستوری رو در Bash یا Zsh وارد کنید که موجود نباشه، بسته ی مورد نظر رو پیشنهاد میده. وقتی Bash با دستور ناشناخته ای مواجه میشه با فراخوانی تابع command_not_found_handle ، بسته ی مورد نظر رو پیشنهاد میده.

این بسته ، پیشنهاداتی رو برای بسته های APT و SNAP ارائه میکنه. مثلا اگه کاربر بخواد دستور ifconfig رو اجرا کنه که در سیستمش نیست، بسته پیشنهاد نصب net-tools از طریق apt رو میده :

 

آسیب پذیری command_not_found در ابونتو

 

به همین شکل، اگه کاربر دستور Code رو بزنه که مرتبط با Visual Studio Code هستش و این برنامه در سیستمش نباشه، بسته خروجی زیر رو نشون میده :

 

آسیب پذیری در ابونتو

 

اگه دستوری هم با بسته های APT و هم SNAP مرتبط باشه، مثلا دستور mojo ، بسته command-not-found هر دو گزینه رو پیشنهاد میده :

 

سوء استفاده از command_not_found

 

 

درک الگوریتم پیشنهاد بسته command-not-found :

بسته command-not-found یه دیتابیس داخلی داره که دستورات رو با بسته های محبوب APT مرتبط میکنه. نکته ای که هست اینه که ، ممکنه دستور با نام بسته متفاوت باشه. مثلا در مثال بالا برای ifconfig بسته net-tools رو پشنهاد داده. این دیتابیس خودش زمانی بروز میشه که خود بسته command-not-found بروزرسانی بشه.

برای بسته های SNAP ، بسته متکی به دستور snap advise-snap هستش. این قابلیت که توسط snap ارائه شده، از دیتابیسی که از Snap Store بروز شده، برای انتخاب بسته پیشنهادی استفاده میکنه.

اما سوالی که این وسط هست اینه که، سیستم از کجا میدونه که چه بسته ای رو باید پیشنهاد بده؟ برای دونستن این سوال، کد زیر رو که قسمتی از بسته command-not-found هست رو بررسی میکنیم .

 

پکیج command-not-found

 

فرایند با فراخوانی تابع get_packages برای شناسایی بسته های APT و تابع get_snaps برای بازیابی بسته های SNAP شروع میشه. در ادامه یسری شرایط رو برای بدست آوردن دقیقترین بسته بررسی میکنه. اگه موردی در APT و SNAP پیدا نکنه، سعی میکنه یسری دستور مشابه توصیه کنه یا اشتباهات املایی احتمالی رو در نظر بگیره. در مواردی که مورد دقیقی رو پیدا کنه، بسته پیشنهادی بستگی به تعداد نتایج داره، چون ممکنه چندین بسته APT یا SNAP برای یه دستور وجود داشته باشه.

با توجه به این مکانیسم، بسته command-not-found برای پیشنهاد بسته متکی به مخازن APT و SNAP هستش. سوالی که اینجا وجود داره اینه که یه مهاجم آیا امکان دستکاری این سیستم رو داره تا بسته های مخرب خودش رو پیشنهاد بده ؟

در حالیکه بسته های APT بدون هیچ محدودیتی روی سیستم عامل میزبان ، کار میکنن، اما هر کسی نمیتونه یه بسته رو به مخزن رسمی APT اضافه کنه. توسعه دهندگان قبل از اینکه بتونن بسته ای رو آپلود کنن، باید فرایند تایید رو طی کنن.

به همین دلیل و با توجه به اینکه دیتابیس بسته command-not-found در APT بصورت منظم بروز نمیشه، محققا رفتن سراغ انتشار بسته از مخازن SNAP .

 

محدودیت های بسته های SNAP :

با توجه به اینکه تمرکزمون روی بسته های SNAP هستش، محققا بررسی کردن ببینن ، این بسته ها چه شرایط و محدودیتهایی رو برای توسعه دهندگان در نظر گرفتن.

برای این کار نیاز هستش که در ابتدا ، سطح محدودیت رو درک کنیم. دو دسته محدودیت اصلی برای SNAP وجود داره :

  • Strict : این محدودیت توسط اکثر بسته ها استفاده میشه. این نوع بسته ها در یه سندباکس اجرا میشن و نمیتونن به فایل، شبکه، پروسس یا هر منبع دیگه در سیستم دسترسی داشته باشن.
  • کلاسیک: مانند بسته های APT روی دستگاه میزبان ، بدون محدودیت اجرا میشن.

سوالی که اینجا مطرح میشه اینه که چرا یه بازیگر تهدید، از نوع کلاسیک استفاده نمیکنه؟ بدلیل بررسی و ایمنی. چون بسته هایی که امتیازات خاصی رو میخوان، مثلا بسته های کلاسیک، توسط تیم SNAP بصورت دستی بررسی میشن. با این حال همه ی برنامه ها، به مجموعه کاملی از پرمیشن هایی که نوع کلاسیک فراهم میکنه نیاز ندارن، اما همچنان به یسری منابع سیستم محلی نیاز دارن. برای رفع این نیاز مکانیسم اینترفیس SNAP توسعه داده شده.

 

اینترفیس های SNAP :

اینترفیس های SNAP ، بعنوان دروازه های کنترل شده برای بسته های Strict عمل میکنن و این امکان رو به اونا میدن تا با منابع خارج از سندباکس تعامل داشته باشن. اینترفیس های مختلفی وجود داره که لیستش رو میتونید اینجا ببینید. این اینترفیس ها مثله ترک های کنترل شده روی دیوار سندباکس هستن. با این گزینه، SNAPها میتونن با منابع میزبان یا با محیط سایر SNAPهای در حال اجرا تعامل داشته باشن.

 

اینترفیس های snap

 

شکل بالا، قسمتی از اینترفیس های SNAP رو نشون میده. برخیشون پرمیشن های قابل توجهی به SNAPها میدن مثلا ضبط صدا و مدیریت اکانت . بعضیشون مثله audio-playback امکان پخش صوت رو فراهم میکنن.

این اینترفیس ها رو میشه براساس ویژگی auto-connect ، دسته بندی کرد. این ویژگی نشون میده که کدوم پرمیشن ها رو میشه قبل از انتشار در فروشگاه ، بصورت خودکار به بسته ها اضافه کرد، اونایی که با Yes مشخص شدن و کدوم نیاز به بررسی دستی تیم SNAP دارن ، اونایی که با NO مشخص شدن.

 

خطرات بسته های مخرب strict snap :

محققا اومدن روی محتمل ترین تاکتیکهایی تمرکز کردن که یه مهاجم میتونه از بسته های مخرب SNAP سوء استفاده کنه. برای این کار محققا از بسته های strict استفاده کردن و همچنین اینترفیسی که نیاز به بررسی دستی توسط تیم SNAP نداشته باشه، یعنی ویژگی auto-connec براشون YES باشه، استفاده کردن.

 

اینترفیس desktop :

این اینترفیس نیاز به بررسی دستی نداره و این امکان رو میده تا برنامه هایی که GUI دارن، بتونن به display server متصل بشن و پنجره ها رو در سیستم میزبان نشون بدن.

در لینوکس، display server ، یه برنامه ای هستش که مسئولیت مدیریت ورودی/خروجی گرافیکی رو در سیستم بر عهده داره و GUI رو فعال میکنه. برنامه ها از طریق پروتکل های خاص display server با display server ارتباط برقرار میکنن. ذو تا از پروتکل های معروف : X11 و Wayland هستش. X11 یه پروتکل display server قدیمیه ، اما Wayland پروتکل جدیدی هستش که سیستم ویندوزی، مدرن و امنی رو بجای X11 ارائه میده.

مسئله اصلی در اینجا اینه که محدودیت های سندباکس به قابلیت های display server بستگی داره. در نتیجه display serverهای قدیمی مانند X Window System ، که از پروتکل X11 استفاده میکنن، فاقد جداکننده های امنیتی بین پنجره برنامه های مختلف هستن. این به Snapها این امکان رو میده که به X11 وصل بشن و پنجره های دیگه رو شنود کنن یا کلید های زده شده در سیست میزبان رو ثبت کنن. (کیلاگر).

این موضوع بعنوان Canonical شناخته میشه که Matthew Garrett یه پستی در وبلاگش، در سال 2016 نوشته و به شکاف امنیتی محدودیتهای SNAP در X11 اشاره کرده. یه ابزار متن باز هم منتشر کرده که این ویژگی رو نشون میده.

محققا یسری تغییرات در کد دادن و کامپایلش کردن و در Ubuntu 22 تستش کردن :

 

 

همونطور که در ویدیو بالا قابل مشاهده هستش، اجرای یه Snap بنام friendlyteddy ، که کاملا محدود هستش، اعتبارنامه ای که کاربر تایپ میکنه رو میدزده.

در حالیکه تیم Snap اعلام کرده که میخواد از X server به پروتکل های امنی مانند Wayland مهاجرت کنه، اما X server همچنان توسط توزیعها استفاده میشه. در حالیکه Wayland، پروتکل پیش فرض اوبونتو 22 هستش، اما X server همچنان بطور پیش فرض نصب میشه و مقالات و پست های زیادی، نحوه ی سوئیچ به X server رو آموزش میدن.

 

آسیب پذیری های کرنل :

اگه شما از پروتکل ناامنی مانند X11 هم استفاده نکنید، همچنان میتونید تحت تاثیر بسته های مخرب Snap باشید. میزبان و همه ی بسته های Snap فعال ، از یه کرنل مشترک استفاده میکنن. این بدین معناست که اگه یه آسیب پذیری در کرنل وجود داشته باشه که یک بسته Snap بتونه اونو اکسپلویت کنه، بنابراین میتونه سندباکس دور بزنه و کنترل کامل سیستم رو بدست بیاره.

سالانه آسیب پذیری های زیادی در کرنل لینوکس پیدا میشه. طبق گزارش stackwatch در سال 2023، 282 آسیب پذیری گزارش شده. اگرچه آسیب پذیری ها شدت متفاوتی دارن و نمیشه از همه اشون از طریق snap container سوء استفاده کرد، اما تهدید همچنان پابرجاست.

علاوه بر این ، Snapها دارای یه ویژگی بروزرسانی خودکار هستن که نسخه ی نصب شده ی Snap در سیستم رو بروز میکنن. اگرچه این ویژگی میتونه برای اصلاح آسیب پذیری های موجود در Snap خوب باشه، اما پیامد امنیتی هم داره. بازیگران تهدید میتونن از این ویژگی برای استقرار ، اکسپلویتهای جدید استفاده کنن. مثلا فرض کنید، یه بازیگر تهدید تونسته یه بسته قابل اعتماد رو جعل کنه و کاربران مختلف اونو نصب کردن. یه آسیب پذیری مهم در کرنل لینوکس پیدا میشه، در نتیجه بازیگر با بروزرسانی بسته در مخزن Snap ، میتونه همه ی کاربران رو قبل از اینکه آسیب پذیری کرنل رو اصلاح کنن، اکسپلویت کنه.

 

جعل بسته Command-Not-Found :

حالا که به درک درستی از بسته های Snap و خطراتی که یک بسته مخرب میتونه داشته باشه رسیدیدم، برگردیم سراغ هدف اصلی خودمون یعنی چطوری یه مهاجم میتونه از بسته command-not-found سوء استفاده کنه تا کاربران رو فریب بده تا یه بسته مخرب رو دانلود و نصب کنن.

 

دستورهای مستعار بسته Snap :

طبق مستندات Snap ، برای جلوگیری از تداخل Snapهای مختلف که نام برنامه اشون یکسانه، فرمت دستور بصورت <snap name>.<application name> هستش. اگه نام Snap و برنامه یکسان باشه، از دستور <snap name> استفاده میکنیم.

مثلا سناریویی رو در نظر بگیرید که در اون snap name برابر code و application name برابر vscode هستش، بنابراین دستور ما میشه : code.vscode . اما اگه هر دوشون code باشن، بجای code.code میتونیم از code استفاده کنیم.

اگه یه توسعه دهنده ای بخواد ، بسته Snapاش بجای <snap name>.<application name> به سادگی از <snap name> استفاده کنه ، باید درخواست یه نام مستعار بده. چنین درخواستی یه فرایند بررسی دستی رو طی میکنه تا مطمئن بشن با برنامه ی دیگه ای همسو نیست.

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

یه مثال رو با هم بررسی کنیم :

 

جعل پکیج snap

 

همونطور که در بالا مشاهده میکنید، با وارد کردن tarquingui ، بسته command-not-found پیشنهاد نصب tarquin رو میده. دستور tarquingui دقیقا با snap name مطابقت نداره که نشون دهنده اینه که tarquingui یه نام مستعار برای tarquin هستش.

با این حال همونطور که بالا اشاره کردیم، از اونجایی که نام مستعار معادل رزرو snap name نیست، مهاجم میتونه tarquingui رو بعنوان snap name ثبت کنه و بسته Snap خودش رو منتشر کنه.

خروجی زیر بعد از ثبت نام tarquingui رو نشون میده :

 

ثبت بسته tarquingui

 

مهاجم میتونه همه ی نامهای مستعار دستورات رو از طریق Snap Store API بررسی کنه ، تا هر نام مستعاری که snap name اون در دسترس هستش رو بدست بیاره. بعد از اینکه پیدا کرد، مهاجم میتونه یه Snap جدید با اون نام مستعار ایجاد کنه و فرصتی برای فریب کاربران بدست بیاره.

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

 

دستورات بسته های APT :

در بخش قبل به بررسی جعل بسته های Snap پرداختیم، اما جعل بسته های APT نگران کننده تر هستش. همونطور که قبلا اشاره شد، command-not-found متکی به دیتابیس محلی هستش که در مسیر زیر قرار گرفته و دستورات رو به بسته های APT مربوطه مرتبط میکنه و کاربران رو برای نصب دقیق راهنمایی میکنه.

 

1
/var/lib/command-not-found/commands.db

 

محققا اومدن بررسی کردن ببینن چه تعداد از دستوراتی که در این دیتابیس محلی هستش ،میشه برای ثبت نام بسته های Snap ، ازشون سوء استفاده کرد. این باعث میشه که command-not-found ، یه بسته Snap مخرب رو در کنار یه بسته قانونی APT پیشنهاد بده.

برای اینکار از Snap Store استفاده کردن تا ببینن یک دستور رو میتونن بعنوان نام بسته Snap استفاده کنن یا نه. نتیجه این بوده که 26 درصد بسته های APT قابل ثبت هستش و میتونه خطر امنیتی قابل توجهی رو ایجاد کنه. چون مهاجم میتونه اینارو ثبت کنه و بسته مخرب تحویل بده.

مثلا یکی از بسته ها ، jupyter-notebook بوده :

 

جعل پکیج jupyter-notebook

 

مسئول بسته jupyter-notebook APT ، نام Snap رو ثبت نکرده، در نتیجه مهاجم میتونه این نام رو ثبت کنه و بسته مخرب با عنوان jupyter-notebook منتشر کنه. شکل زیر خروجی دستور بعد از ثبت jupyter-notebook هستش:

 

جعل jupyter-notebook

 

همونطور که مشاهده میکنید، command-not-found حتی بسته مخرب SNAP رو قبل از بسته APT ارائه داده و این میتونه بیشتر کاربر رو گمراه کنه.

 

حملات Typosquatting :

مهاجمین علاوه بر استفاده از نام دقیق بسته های محبوب، میتونن از حملات Typosquatting هم استفاده کنن. این شامل اشتباهات املائی رایج توسط کاربران هستش.

برای مثال فرض کنید، کاربر به جای دستور ifconfig ، دستور ifconfigg رو وارد میکنه.

 

جعل ifconfigg

 

همونطور که مشاهده میکنید، command-not-found اومده دستور رو اصلاح کرده و پیشنهاد نصب net-tools برای دستور ifconfig رو میده.

حالا فرض کنید مهاجم از این نام اسنفاده کنه و یه بسته Snap ثبت کنه :

 

جعل ifconfig

 

همونطور که مشاهده میکنید، در این حالت اصلا شکل درست املایی رو هم پیشنهاد نمیده.

 

اقدامات امنیتی :

برای اینکه کاربران و نگه دارندگان بسته ها ، تحت تاثیر این آسیب پذیری قرار نگیرن :

  • کاربران باید منبع یه بسته، اعتبار نگه دارنده بسته و پلتفرم پیشنهادی (هم APT و هم SNAP) رو بررسی کنن.
  • توسعه دهندگان Snap با نام مستعار، اگه نام مربوطه با برنامه اشون مطابقت داره، باید فورا اونو ثبت کنن تا جلوی سوء استفاده رو بگیرن.
  • توسعه دهندگان APT ، نام SNAP مرتبط با بسته اشون رو هم ثبت کنن تا جلوی سوء استفاده های احتمالی رو بگیرن.
  • راه حل های امنیتی زمان اجرا ، میتونن رفتار مخرب ناشی از اکسپلویت از این موضوع رو شناسایی کنن.

 

 

منبع

 

 

اشتراک در شبکه های اجتماعی :

Facebook
Twitter
Pinterest
LinkedIn
In آسیب پذیری امنیتی اخبار تیم قرمزIn APT , command_not_found , snap , اوبونتو , لینوکس

راهبری نوشته

بررسی Patch Tuesday مایکروسافت برای فوریه 2024 (بهمن 1402)
بررسی هفتگی آسیب پذیری های منتشر شده در ZDI – (از 21 تا 27 بهمن)

دیدگاهتان را بنویسید لغو پاسخ

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

دسته‌ها

  • Osint
  • آسیب پذیری امنیتی
  • آموزش های ویدیویی
  • آنالیز بدافزار
  • اخبار
  • افشای اطلاعات
  • امنیت وب
  • انتشارات
  • اینترنت اشیاء
  • بازیگران تهدید
  • باگ بانتی
  • پادکست
  • پروژه ها
  • توسعه اکسپلویت
  • تیم آبی
  • تیم قرمز
  • دوره های آموزشی
  • فازینگ
  • کنفرانس ،دوره ، وبینار ، لایو ، CTF
  • لیست های ویژه
  • ماشین آسیب پذیر
  • مجله
  • مقالات
  • مهندسی معکوس نرم افزار

پست های مرتبط

  • آسیب پذیری امنیتی
  • اخبار
  • توسعه اکسپلویت
  • تیم آبی
  • تیم قرمز
  • مقالات
seyyid
On خرداد 6, 1402خرداد 6, 1402

بررسی آسیب پذیری های مهم،20 تا 26 مه در پلتفرم ZDI

  • آسیب پذیری امنیتی
  • اخبار
  • امنیت وب
  • باگ بانتی
seyyid
On دی 2, 1401دی 19, 1401

آسیب پذیری افزایش امتیاز در Jupiter و JupiterX Premium

  • آسیب پذیری امنیتی
  • اخبار
  • توسعه اکسپلویت
seyyid
On فروردین 20, 1402فروردین 28, 1402

اکسپلویت آسیب پذیری بحرانی در کتابخانه VM2

  • اخبار
  • افشای اطلاعات
  • بازیگران تهدید
seyyid
On آذر 1, 1402آذر 2, 1402

هک مرکز تحقیقات INL توسط گروه هکری SiegedSec

درباره ما

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

تگ ها

0day APT command injection Deserialization of Untrusted Data Directory Traversal FBI Fortinet Heap buffer overflow integer overflow kali LockBit Memory Corruption nuclei Off By One Security out-of-bounds write Out of bounds read Patch Tuesday PWN2OWN Stack Buffer overflow type confusion use after free vulnerable wordpress XSS ZDI vulnerability آموزش اکسپلویت نویسی ارز دیجیتال اندروید اپل اکسپلویت باج افزار تلگرام زیرودی سیسکو فارنزیک فورتی نت فیشینگ لاک بیت مایکروسافت هوش مصنوعی وردپرس وردپرس آسیب پذیر ویندوز پلاگین کروم گوگل

شبکه های اجتماعی

    • Instagram
    • Telegram
    • Twitter
    • GitHub
    • YouTube
    • LinkedIn
      کپی مطالب با ذکر منبع بلامانع است | 1401-1404