JA_NPM

مطالعه موردی سیل NPM: «در جستجوی چای، در سوراخ خرگوش»

At شیگنیما در طول سال گذشته مشغول پیاده‌سازی یک سیستم جامع بوده‌ایم که رجیستری‌های بسته‌های متن‌باز عمومی را برای فعالیت‌های مشکوک یا کدهای ذاتاً مخرب رصد می‌کند.

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

در حالی که وجود کد مخرب در رجیستری‌های بسته‌ها کاملاً شناخته شده است، رفتارهای عجیب یا غیرمعمول دیگری نیز وجود دارد که کاملاً مورد توجه کاربران عادی این رجیستری‌ها قرار نمی‌گیرد. حتی برای کسانی از ما که آنها را از نزدیک زیر نظر داریم، یافتن دلیل یا توضیحی برای چنین رفتاری آسان نیست.

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

همه چیز با یک جهش آماری شروع شد

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

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

این ما را بر آن داشت تا فرآیند خود و داده‌های مرتبط با آن را در پلتفرم بررسی کنیم. خوشبختانه، بررسی ما نشان داد که داده‌ها صحیح به نظر می‌رسند، اما این موضوع تا حدودی گیج‌کننده نیز بود!

با بررسی بیشتر، متوجه شدیم که این بسته‌ها چندین ویژگی مشترک دارند:

  • ناشران، کاربران تازه ایجاد شده بودند و حداکثر یک یا دو ماه از فعالیتشان نمی‌گذشت.
  • بسته‌ها ظاهراً نام‌های تصادفی داشتند که احتمالاً با استفاده از یک فرهنگ لغت ایجاد شده‌اند. می‌توانیم نام‌های بسته‌ای با نام‌های عجیب مانند huge_mite-smiletea, اریک-مانگوت۹۴-سوکیویر, exotic_reptile-appteadev or clear_tuna-appteadevما ضمیمه‌ای شامل چند نمونه از دارایی‌هایی که پیدا کرده‌ایم، ارائه خواهیم داد.
  • محتوای این بسته‌ها بسیار مشابه و اغلب یکسان بود.

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

npm

گره گشایی از شبکه

فعالیت انتشاراتی برخی از این ناشران در ماه گذشته طبق نمودار زمانی زیر انجام شده است:

 

حمله به npm

در اینجا آمار کامل مربوط به این رویداد که می‌توانیم به اشتراک بگذاریم، آمده است:

بررسی npm

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

گذشته از همه اینها، ما تعداد زیادی بسته برای تجزیه و تحلیل داریم:

حمله npm 2

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

  • بسیاری از بسته‌های NPM به هم مرتبط هستند. برخی از آنها به عنوان وابستگی‌های بسته‌های دیگر ارجاع داده می‌شوند.
  • با وجود اینکه بسته‌های عجیبی هستند و احتمالاً کسی از وجود آنها خبر ندارد، برخی از آنها دانلودهای هفتگی زیادی دارند. پذیرفتن اینکه یک کاربر عادی ممکن است بخواهد بسته‌هایی مانند این را دانلود کند، دشوار است. 0mc03esisd
  • بعضی از آنها مخازن مرتبط دارند. گاهی اوقات به نظر می‌رسد صاحبان این مخازن، حساب‌های کاربری ساختگی هستند، مشابه آنچه در npm وجود دارد.

توجه: کاربران بسته‌های اضافی را به صورت موجی آپلود می‌کنند، بنابراین داده‌های ارائه شده ممکن است کمی متفاوت باشند.

حمله npm 2

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

ملاقات با بازیگر(ان)

اینکه آیا این کار یک نویسنده واحد است یا چندین همکار، تشخیص آن دشوار است. با این حال، شواهدی داریم که منشأ این فعالیت را مشخص می‌کند:

  • زبان: برخی از نظرات در کد به زبان اندونزیایی هستند.
حمله npm 3
  • مکان: برخی از مالکان مخازن مرتبط، مکان خود را در اندونزی نشان می‌دهند.
  • مکانی که می‌توانیم از طریق فراداده‌های فعالیت در گیت‌هاب شناسایی کنیم نیز به اندونزی اشاره دارد.
NPM_JA

چای ساعت پنج

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

یادت هست چای.yaml فایل‌هایی که در ابتدا دیدیم؟ در آن زمان، محتوای آنها را نشان ندادیم، اما به این شکل بود:

حمله npm 4

به نظر می‌رسد این فایل‌ها مربوط به پروتکل چایاما دقیقاً چیست؟ ما رسیدیم https://tea.xyz/blog/250k-grant-for-open-source-developers، که در مورد هدف صحبت می‌کند:

تی (Tea) با پرداختن به مشکل دیرینه‌ی جبران ناکافی حقوق توسعه‌دهندگان متن‌باز، دنیای دیجیتال را تکان می‌دهد. حل این مشکل بیش از هر زمان دیگری ضروری است، به همین دلیل تصمیم گرفته‌ایم قبل از راه‌اندازی پروتکل، ۲۵۰ هزار دلار کمک‌هزینه اختصاص دهیم. هدف این مرحله‌ی اولیه، حمایت از نگهدارندگان پروژه‌های متن‌بازی است که تأثیر قابل توجهی بر اکوسیستم نرم‌افزار متن‌باز دارند و رتبه‌ی تی (teaRank) آن‌ها بیش از ۳۰ و بالاتر از شبکه‌ی آزمایشی تشویقی پروتکل تی (tea Protocol Incentivized Testnet) است.

طبق اسناد پروتکل چای: 

«برای اینکه یک پروژه در پروتکل tea ثبت شود، به یک فایل tea.yaml نیاز دارد که به عنوان قانون اساسی پروژه عمل می‌کند تا تعداد مشارکت‌کنندگان و تعداد آرای لازم برای انجام اقدامات خاص را تعیین کند.»

 

بعد از دسترسی به شبکه‌ی چای، سعی کردیم یکی از بسته‌هایی را که گمان می‌کنیم اعتبارش در حال افزایش است، پیدا کنیم. آن را پیدا کردیم:

به نظر می‌رسد این توضیح می‌دهد که اینجا چه اتفاقی می‌افتد: برخی از کاربران پروژه‌های متن‌باز خود را با محبوبیت ساختگی بزرگ می‌کنند تا رتبه چای را بدزدند و از مزایای ارائه شده توسط انجمن چای بهره‌مند شوند. به هر حال، پول، در کنار رابطه جنسی، قدیمی‌ترین نیروی محرکه است. 

نتیجه گیری و افکار نهایی

اگرچه هیچ مدرکی دال بر وجود کد مخرب در این بسته‌های NPM یافت نشده است و احتمالاً آنها قصد نداشتند کسی از آنها استفاده کند، اما ممکن است به طور بالقوه چندین شرایط خدمات (TOS) NPM، GitHub یا انجمن چای را نقض کنند. با این حال، این موضوع خارج از محدوده کار ما است (البته به آنها اطلاع داده شده است و اقداماتی که مناسب بدانند انجام خواهد شد). استفاده سوء از این پلتفرم‌ها به نوعی بر ما و سازمان‌های ما تأثیر خواهد گذاشت.

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

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

همیشه این گزینه وجود دارد که به سمت دیگری نگاه کنیم و به این اعتماد کنیم که قلمروهای متن‌باز مکان‌های امنی هستند. خوشبختانه، من معتقدم که این طرز فکر امروزه خیلی رایج نیست؛ این مورد عملاً بی‌ضرر بوده است، اما اخیراً حادثه بسیار جدی‌تری را با درِ پشتی XZ، و نشده است تنها یک.

اگر تا اینجا را خوانده‌اید، امیدوارم از تمام پیچیدگی‌های این رویداد جالب لذت برده باشید. فراموش نکنید که چند دقیقه‌ای را صرف بررسی این کنید که Xygeni چه کمکی به امنیت سازمان شما می‌کند.

پیوست: فهرست منابع مرتبط برای گنجاندن در مقاله نهایی

NPM کاربران مرتبط‌تر را بر اساس تعداد بسته‌های منتشر شده معرفی می‌کند: vndra، wanzaty، artknight404، seblakkuah، Mikrositer، kellyman17

نمونه کوچکی از بسته‌های مرتبط آنها: mikrositer, cryndex, arts-dao, seblakkuah, vndrabnb, vndrave, depfif, depsik, depeit, depnin, dopon, kellymanteasproject.

برخی از مخازن مرتبط GitHub که حاوی فایل‌های tea.yml هستند:

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

توسعه و تحویل نرم‌افزار خود را ایمن کنید

با مجموعه محصولات Xygeni