در قسمت اول مقاله در مورد تاکتیک دسترسی اولیه به تکنیکهایی اشاره کردیم که مهاجم ممکن است از آنها برای دسترسی به منابع DevOps، مخازن اطلاعات Pipelineها و موارد وابسته استفاده کند. و در مورد 2 مرحله از مراحلی که ماتریس طی می کند صحبت کردیم. حال به ادامه ی موضوع خواهیم پرداخت.
3. پایداری و ماندگاری
تاکتیک پایداری شامل ترفندهای مختلفی است که مهاجم ممکن است از آنها برای حفظ دسترسی به محیط قربانی استفاده کند:
تغییرات در مخزن اطلاعات – مهاجمان میتوانند از Tokenهای خودکار از داخل Pipeline برای دسترسی به مخزن اطلاعات و ارسال کد با فرض اینکه توکن خودکار مجوزهای کافی برای انجام این کار را داشته باشد استفاده کنند. آنها میتوانند از این طریق با استفاده از چندین ترفند فرعی دسترسی خود را حفظ کنند:
- تغییر کدهای Script یا افزودن کد به آن – میتوان برخی از Scriptهای اولیه را تغییر داد یا Scriptهای جدیدی اضافه کرد، به این ترتیب Scriptهای جدید یک Backdoor یا Starter برای مهاجم دانلود میکنند و هربار که Pipeline این Script را اجرا میکند، کد مهاجم نیز اجرا خواهد شد.
- تغییر پیکربندی Pipeline – میتوان مراحل جدیدی به Pipeline اضافه کرد تا قبل از ادامه فرآیند ساخت، Script تحتکنترل مهاجم داخل Pipeline دانلود شود.
- تغییر پیکربندی مکانهای وابستگی – برای استفاده از Packageهای تحتکنترل مهاجم.
- Inject در مصنوعات برخی از محیطهای CI قابلیتی دارند که میتوانند با آن مصنوعاتی تولید کنند و مبین عملیات اجرایی Pipeineهای مختلف به اشتراک گذارند. مثلاً در GitHub میتوان مصنوعات را ذخیره کرد و با کمک اقدامی در GitHub آنها را از پیکربندی Pipeline دانلود نمود.
- تغییر Imageها در رجیستری – در مواردی که Pipelineها مجوز دسترسی به رجیستری Image را دارند (مثلاً برای بازنویسی Imageها در رجیستری پس از اتمام ایجاد)، مهاجم میتواند تصاویر رجیستری را تغییر دهد یا تصاویری مخرب به آن وارد کند و در ادامه Containerهای کاربر آن را اجرا کنند.
بیشتر بخوانید: معنی DevOps چیست؟ بررسی 5 اقدام اساسی در تکامل آن – قسمت اول
ایجاد اطلاعات اعتباری سرویس – مهاجم مخرب میتواند از دسترسیهای قبلی به محیط بهره ببرد و اطلاعات اعتباری جدیدی ایجاد کند تا در صورت از دست رفتن روش اولیه دسترسی از آنها استفاده کنند. او برای انجام این کار میتواند یک Token دسترسی ایجاد کند و با آن به SCM، خود برنامه کاربردی یا منابع Cloud و… دسترسی یابد.
4. افزایش امتیاز
مهاجم از ترفندهای افزایش امتیاز استفاده میکند تا در محیط قربانی امتیازات بیشتری داشته باشد و بهتر بتواند به منابعی که از قبل در معرض خطر قرار گرفتهاند، دسترسی یابد.
اسرار Repositoryهای Private- مهاجم میتواند با استفاده از روش دسترسی اولیهای که قبلاً به دست آورده است، Repositoryهای Private را برای یافتن اسرار پنهان آنها اسکن کند. شانس یافتن اسرار پنهان در Private Repository بیشتر از Public Repository است، زیرا از دیدگاه توسعهدهنده، دسترسی به این اسرار از خارج از سازمان امکانپذیر نیست.
Commit یا Push کد به داخل Branchهای تحت حفاظت- Pipeline به Repository دسترسی دارد که ممکن است با دسترسی مجاز پیکربندی شده باشد؛ در این صورت امکان Push مستقیم کد به Branchهای تحت حفاظت فراهم خواهد شد و مهاجم خواهد توانست بدون دخالت تیم، کد را مستقیماً به Branchهای مهم Inject کند.
گواهیها و هویتهای سرویسهای Metadata- مهاجم هنگامی که بر Pipelineهای hostشده در Cloud اجرا میشود، میتواند از داخل Pipeline به سرویسهای Metadata دسترسی داشته باشد و Certifricateها که با امتیازات بالا قابل دسترسی استو هویتها را از این سرویسها استخراج کند.
5. دسترسی به اطلاعات اعتباری
مهاجم از ترفندهای دسترسی به اطلاعات اعتباری برای سرقت اطلاعات استفاده میکند:
اطلاعات اعتباری کاربر – در مواردی که کاربر نیاز دارد از طریق CI Pipeline مثلاً دیتابیس خارجی به سرویسهای خارجی دسترسی یابد، این اطلاعات اعتباری داخل Pipeline قرار میگیرند که میتوان آن را با اسرار CI، متغیرهای محیط و… تنظیم نمود و احتمالاً در دسترس مهاجم قرار خواهند گرفت.
اطلاعات اعتباری سرویس- در برخی موارد مهاجم میتواند اطلاعات اعتباری سرویسها، مانند Service-principal-names یا SPN، توکنهای Shared-access Signature یا SAS و… را بیابد و از طریق آنها مستقیماً از Pipeline به سرویسهای دیگر دسترسی پیدا کند.
بیشتر بخوانید: مفهوم DevOps چیست؟ معماری و سه اصل مبنایی این رویکرد کدام است – قسمت اول
6. حرکت جانبی
تاکتیک حرکتهای جانبی به ترفندهایی اشاره دارد که مهاجم از آنها برای حرکت در منابع مختلف استفاده میکند. در خصوص محیطهای CI/CD، مهاجمان ممکن است به سمت منابع پیادهسازی، Build Artifactها و رجیستریها یا هدفهای جدید حرکت کنند.
به خطر انداختن Build Artifactها – همچون دیگر حملات زنجیره تامین، هنگامی که مهاجم کنترل CI Pipeline را در اختیار داشته باشد، می تواند در Build Artifactها مداخله کند. به این ترتیب، مهاجمان میتوانند کدهای مخرب را قبل از ایجاد به مواد ایجاد Inject و به این ترتیب عملکرد مخربی را وارد Build Artifactها نمایند.
Injection رجیستری- اگر Pipeline با یک رجیستری برای Build Artifactها پیکربندی شده باشد، مهاجم میتواند رجیستری را با Imageهای مخرب آلوده کند و بعداً Containerهایی که از این رجیستری استفاده میکنند، این Imageها را دانلود و اجرا خواهند کرد.
گسترش به منابع پیادهسازی – اگر Pipeline با دسترسی به منابع پیادهسازی پیکربندی شده باشد، مهاجم نیز همان دسترسی به این منابع را خواهد داشت و خواهد توانست حضور خود را بین منابع گسترش دهد. این موضوع، بسته به مجوزهای دادهشده به Pipeline، ممکن است باعث اجرای کد، استخراج دادهها یا موارد دیگر شود.
7. فرار از سیستمهای دفاعی
مهاجمان میتوانند از ترفندهای فرار از سیستمهای دفاعی برای دور زدن سیستمهای دفاعی استفادهشده در محیط DevOps استفاده کنند و بدون توجه و ادراک دفاعیات به حملات ادامه دهند:
دستکاری Logهای سرویس – Logهای سرویس، مدافعان را قادر میسازد تا حملات را در محیط خود شناسایی کنند. مهاجمی که در یک محیط مثلاً در Build Pipeline فعالیت میکند، میتواند Logها را تغییر دهد تا مدافعان متوجه حمله نشوند. مثل این میماند که مهاجمی در سوابق Logها را در ماشین Linux تغییر دهد و نگذارد هیچ شاهدی دستورهایی را که او اجرا میکند ببیند.
دستکاری Compilation – اگر مهاجمی بخواهد هیچ اثری از او در سرویس SCM باقی نماند، ممکن است فرآیند Compilation را تغییر دهد تا بتواند کد مخرب را Inject کند. این کار به چند روش انجام میشود:
- تغییر کد در لحظه – تغییر کد درست قبل از شروع فرآیند ساخت، بدون تغییر آن در Repository و باقی ماندن ردی در آن.
- Compiler دستکاریشده – تغییر Compiler در محیط ساخت برای ارائه کد مخرب بدون بر جای گذاشتن هیچ ردی قبل از شروع آن فرآیند.
پیکربندی مجدد حفاظت Branch – ابزارهای حفاظت از Branch به سازمان امکان میدهد تا مراحل را قبل از تایید PR/Commit در Branch پیکربندی کند. اگر مهاجم دارای مجوزهای مدیریت باشد، ممکن است این پیکربندیها را تغییر داده و کد را بدون دخالت کاربر وارد Branch کند.
8. تأثیر
تاکتیک تأثیرگذاری به ترفندهایی اشاره دارد که مهاجم میتواند با استفاده از آنها از دسترسی به منابع CI/CD برای اهداف مخرب استفاده کند. این تاکتیک مرحله دیگری از حمله نخواهد بود زیرا ممکن است نویز داشته باشد و به راحتی قابل تشخیص باشد:
DDoS – مهاجم میتواند از منابع محاسباتی که به آنها دسترسی پیدا کرده است برای اجرای حملات Distributed Denial of Service یا DDoS بر اهداف خارجی استفاده کند.
استخراج کریپتوکارنسی – مهاجم میتواند از منابع محاسباتی برای استخراج کریپتوی تحتکنترل خود استفاده کند.
Local DoS – هنگامی که مهاجم بر CI Pipeline فعالیت میکند، با خاموش کردن Agentها، راهاندازی مجدد یا بارگذاری بیش از حد ماشینهای مجازی، Denial Service Attack را از جانب Pipelineهای مذکور بر کاربران اعمال کند.
حذف منابع – مهاجم با دسترسی به منابع (Repositoryها، منابع Cloud و…) میتواند منابع را حذف دائمی کند تا به Denial of Services دست یابد.
9. استخراج
تاکتیک استخراج به ترفندهای مختلفی اشاره دارد که مهاجم میتواند با استفاده از آنها دادههای حساس را از محیط قربانی استخراج کند:
شبیهسازی Repositoryهای Private – هنگامی که مهاجمان به CI Pipelineها دسترسی پیدا میکنند، به Repositoryهای Private نیز دسترسی مییابند مثلاً GITHUB_TOKEN را میتوان در GitHub استفاده کرد، بنابراین میتوانند کد را شبیهسازی کرده و به آن دسترسی پیدا کنند و به دنبال آن به Private IP نیز دسترسی یابند.
Logهای Pipeline – مهاجم میتواند به Logهای اجرای Pipeline دسترسی یابد و سوابق دسترسی، مراحل ایجاد و… را مشاهده کند. این Logها ممکن است حاوی اطلاعات حساسی درباره ایجاد، پچیادهسازی و در برخی موارد حتی اطلاعات اعتباری سرویسها، حسابهای کاربری و… باشند.
استخراج دادهها از منابع تولید – در مواردی که Pipelineها امکان دسترسی به منابع تولید را دارند، مهاجمان نیز به این منابع دسترسی خواهند داشت. بنابراین آنها میتوانند با سوءاستفاده از این دسترسی دادههای تولید را استخراج کنند.