آمبولانس های بریتانیا، دولت نروژ و یک بانک بزرگ در روسیه چه وجه مشترکی دارند؟ جالب است بدانید که تمامی آنها قربانی حملات زنجیره تامین در جولای 2023 بودند. ممکن است قربانی بعدی شما باشید!
سازمانها به عنوان بخشی از مراحل توسعه نرمافزار و پیاده سازی، بیشتر از گذشته دادههای حساس را به سرویس دهندگان و اشخاص ثالث (مانند سازمانهای دولتی و اپراتورهای زیرساخت) میسپارند. این اعتماد، به هکرها اجازه می دهد تا از حملات زنجیره تامین به عنوان یک تاکتیک پیچیده و بلند مدت، در جنگ سایبری جهانی استفاده کنند اما این حمله چه ارتباطی به فرآیندهای توسعه نرم افزار شما دارد؟ چه کاری می توانید انجام دهید تا مطمئن شوید کد و برنامه های شما در برابر تهدیدات امنیتی این حمله که به طور فزاینده ای در حال افزایش است، آسیب پذیر نیستند؟ در ادامه اطلاعات خواندنی پیرامون این موضوع در اختیار شما قرار می گیرد.
حملات زنجیره تامین (Supply Chain) چیست؟
قبل از تعریف این حملات، بهتر است با مفهوم زنجیره تامین در زمینه نرم افزار آشنا شوید. زنجیره تامین نرمافزار، واژهای جامع برای تمام ابزارها و خدماتی است که توسعهدهندگان را قادر میسازند تا کد خود را به برنامههای موردنیاز کاربران تبدیل کنند.
فهرست رو به رشد برخی از منابعی که امروزه در SDLC به کار میروند شامل موارد زیر هستند:
- کد متفرقه
- کامپوننت ها
- باینری ها
- ابزارهای خارجی مانند ابزار مدیریت بسته
- محصولات CI/CD
- ماژول های اسکن و تست امنیتی
- ساخت و استقرار اسکریپت های اتوماسیون
تصویر(1)
حمله زنجیره تامین نرمافزار (گاهی اوقات حمله third-party یا "شخص ثالث" نامیده میشود) تلاشی مخرب برای دسترسی به سازمان هدف با سوء استفاده از ضعف در سیستمها یا فرآیندهای یک فروشنده یا شریک شخص ثالث است. حمله زنجیره تامین یک حمله سودآور، مخصوصاً برای مجرمان سایبری است زیرا اشتباهی ساده از سمت یک فروشنده میتواند راه را برای نفوذ به هزاران سازمان، حتی قبل از کشف حمله باز کند.
حملات زنجیره تامین چگونه کار می کنند؟
مهاجمان از ابزارهای اسکن خودکار برای کاوش مخازن کد عمومی، اپلیکیشن های ابری و شبکه های محافظت نشده استفاده می کنند. آنها برای یافتن آسیبپذیریها، پیکربندیهای غلط رایج ابری، کد و فرصتهای دیگر برای نفوذ به سیستمهای توسعه و توزیع نرمافزار، حتی نیازی به نشستن در مقابل رایانه شخصی خود نخواهند داشت. هنگامی که مهاجمان از دسترسی خود به کد و ابزارهای مورد استفاده برای پیاده سازی و استقرار مطمئن شوند (آنچه که مدنظرشان است)، می توانند بدافزار و درب های پشتی را در کدی که شرکت هدف به کاربران قابل اعتماد خود تحویل می دهد، نصب کنند.
تصویر(2)
5 نوع حمله زنجیره تامین
راه های متعددی برای طبقه بندی حملات زنجیره تامین نرم افزار وجود دارد. از دیدگاه DevSecOps، بهترین راه برای دسته بندی آنها، آشنایی با نحوه حمله و نقطه ورود اولیه است.
1. تهدیدات کد منبع
سیستم های کنترل منبع در معرض خطر و کدهای نا ایمن، دو دلیل اصلی حملات موفقیت آمیز زنجیره تامین هستند. شیوههای نادرست کدنویسی، خطای انسانی و محیطهای توسعه ناامن، میتوانند درب پشتی (backdoor) را روی تزریق کد مخرب یا افشای اطلاعات حساس، باز کنند.
هکرها باید با دستیابی به اطلاعات هویتی برخی از کاربران مجاز، سطح دسترسی بالایی به مخزن داشته باشند. در سمت دیگر، آنها میتوانند از آسیبپذیری هایی که بهطور تصادفی توسط توسعهدهندگان در کد ایجاد شده و طی بررسی کد نادیده گرفته شده اند یا بخش های حساس کد که به اشتباه در یک مخزن عمومی انتشار یافته، سوء استفاده کنند.SolarWinds نمونهای از چنین حملهای است که از رمزهای عبور سرور در کدهای ذخیره شده در مخزن عمومی GitHub سوء استفاده میکند.
2. وابستگی های نرم افزار در معرض خطر
تصویر(3)
امروزه بیشتر نرم افزارها برای فعالیت خود به منابع دیگر وابسته هستند. این وابستگیها (هم مستقیم و هم مجازی) شامل فریم ورک ها، کتابخانه اپلیکیشن ها و تصاویر پایه برای کانتینرها و بستههایی است که به عملکرد صحیح نرم افزار کمک میکنند و در عین حال موجب صرفه جویی در زمان توسعهدهندگان می شوند تا کدهایی را که شخص دیگری قبلاً نوشته است، مورد استفاده قرار دهند.
هنگامی که یک منبع عمومی محبوب، مانند کتابخانه ای متن باز، در معرض خطر قرار می گیرد، اثر دومینو موجب می شود تا آسیب پذیری در هر نرم افزاری که کتابخانه را استفاده می کند، ایجاد گردد. بدون ابزارهای تجزیه و تحلیل ترکیب نرم افزار، این آسیب پذیری ها قابل شناسایی نیستند. شناختهشدهترین حملهای که از یک آسیبپذیری در ابزاری متن باز محبوب سوء استفاده کرد، Log4j است که در آن میلیونها رایانه در معرض عوامل مخرب قرار گرفتند.
3. وابستگی نامعلوم (Dependency confusion) و اشتباه تایپی پکیج
Dependency confusion، زیرمجموعه ای از حملات زنجیره تامین مبتنی بر وابستگی است و به توسعه دهندگانی مرتبط می شود که نام بسته های محبوب را در مخازنی مانند NPM و PyPi با اشتباه املایی قرار می دهند.
در حالی که هیچ نمونه شناختهشده موفقی از این نوع حمله زنجیره تامین وجود ندارد اما محققان امنیتی ثابت کرده اند که حتی توسعه دهندگان اپل و مایکروسافت نیز ممکن است فریب داده شوند تا بسته های نرم افزاری مخربی که به عنوان بسته های محبوب با غلط املایی ظاهر شده اند را نصب کنند.
4. ابزارهای تولید
بیشتر تیم های توسعه و شرکت هایی که همه اقدامات خود را از طریق کد انجام می دهند، در پیکربندی های مدون ممکن است ریسک زنجیره تامین نرم افزار را بالا ببرند. فایل های پیکربندی (در فرمت YAML یا هر فرمت دیگری) که به اندازه کافی ایمن نیستند، حملات احتمالی را ایجاد می کنند و زنجیره ابزار تولید را در معرض دستکاری قرار می دهند.
یکی از مشکلات مربوط به حملات زنجیره تامین در ابزار تولید این است که شناسایی و کاهش آنها برای تیم های توسعه چالش برانگیز خواهد بود. یکی از نمونه های حمله زنجیره تامین، CodeCov است که در آن هکرها با موفقیت مسیر CI/CD مرتبط با Codecov را آلوده کرده و به شبکه هزاران مشتری دسترسی پیدا کردند.
تصویر(4)
بدون امنیت مؤثر و مستمر CI/CD، هکرها میتوانند مسیر CI/CD مورد استفاده برای ارائه نرمافزار را تصاحب یا آلوده کنند که به آنها کنترل تقریباً نامحدودی بر محتوای اپلیکیشن و کارهایی که میتواند انجام شود، خواهد داد. تغییرات مخرب اعمال شده در بروزرسانیهای نرمافزار یا یک اسکریپت پنهان استخراج crypto در اپلیکیشن ها، میتواند کاربران نهایی را در معرض مشکلات فراوانی از جمله سرقت هویت و جاسوسی در شرکت قرار دهد.
نمونه بارز حمله زنجیره تامین که از مکانیسمهای بروزرسانی نرمافزاری استفاده میکند، ASUS است که در سال 2018 یک بروزرسانی نرمافزاری مخرب را به بیش از یک میلیون رایانه (بر اساس برخی برآوردها) ارائه کرد.
چگونه می توان در برابر حملات زنجیره تامین از سیستم دفاع کرد؟
در ادامه ده مورد از اقدامات اصلی که باید برای اطمینان از یکپارچگی و قابلیت اطمینان زنجیره تامین انجام دهید، ذکر شده اند:
- کامپوننت ها و وابستگی های نرم افزار را شناسایی و بررسی کنید.
- وابستگیهای نرمافزار را برای یافتن آسیبپذیریها مورد بررسی قرار دهید و پچ های امنیتی را خودکارسازی نمایید.
- برای اجزای نرم افزار و ابزارهای توسعه فقط از منابع قابل اعتماد استفاده کنید.
- از ابزارهای SCA (تجزیه و تحلیل ترکیب نرم افزار) برای شناسایی و مدیریت وابستگی های نرم افزاری استفاده کنید.
- پیاده سازی کنترل دسترسی، احراز هویت و مجوزهای لازم.
- انجام تست های امنیتی برنامه ریزی شده و برنامه ریزی نشده و همچنین ارزیابی آسیب پذیری ها.
- برای اطمینان از صحت کد، امضا و اعتبار کد را بررسی کنید.
- فرآیندهایی برای SSDLC ایجاد نمایید که شامل الزامات امنیتی، آزمایش و ارزیابی ریسک است.
- انجام تست های SAST (تست استاتیک امنیت اپلیکیشن) و DAST (تست پویا از امنیت اپلیکیشن) در فرآیند توسعه.
- یک تیم "واکنش به حادثه" ایجاد کنید و روال های بازیابی پس از ایجاد مشکل را مستندسازی نمایید.
جمع بندی
محافظت از کد و اپلیکیشن در برابر حملات زنجیره تامین، قبل از هر چیز به یک تغییر گسترده در هسته استراتژی مهندسی نرم افزار و پلتفرم نیاز دارد. حتی با درک عمیق کد و امنیت برنامه، باز هم ممکن است انسان ها اشتباه کنند. برای محافظت از کد خود، باید فراتر بروید و ابزارها و فرآیندهایی را پیاده سازی کنید که همچون دیواری یکپارچه در برابر خطای انسانی باشند.