برنامه نویسی

درک امنیت کانتینر – انجمن DEV

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

توضیحات تصویر

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

  • پایگاه کد خود را ایمن کنید
  • برنامه خود را ایمن کنید
  • تمام کتابخانه هایی را که استفاده کرده اید ایمن کنید
  • شبکه/ارتباطات خود را ایمن کنید
  • فرآیندهای CI/CD خود را ایمن کنید

در این وبلاگ در مورد چالش های امنیتی کانتینر و آنچه که باید در مورد آنها انجام دهید صحبت خواهیم کرد. بیایید با هم شروع کنیم! ✍️

چالش های امنیتی کانتینر

1) بارگذاری بیش از حد آسیب پذیری 🥴: آسیب پذیری های زیادی در لایه های مختلف در یک تصویر کانتینر یا کانتینرها در زمان اجرا وجود دارد. توسعه دهندگان در مورد اولویت بندی این آسیب پذیری ها، نحوه رفع آنها بدون هیچ گونه خطای عملکردی و اینکه چه کسی مسئول اصلاح آنها است سردرگم هستند. اولویت بندی مهم است زیرا اگر 100 آسیب پذیری حیاتی در یک کلاستر کانتینری دارید، باید بدانید که کدام یک از مهم ترین آسیب پذیری ها هستند. در این مرحله، تجزیه و تحلیل نتایج اسکن آسیب پذیری یک کار مهم برای شما است.

اضافه بار آسیب پذیری کانتینر

2) امنیت کانتینر چالش برانگیز است: لایه‌ها و جنبه‌های زیادی در یک ظرف وجود دارد، مانند شبکه، پایگاه کد، کتابخانه‌ها و غیره که استفاده می‌شوند و غیره. همچنین، اگر یک آسیب‌پذیری در یک سیستم کانتینری وجود داشته باشد، به اطلاعات زیادی در مورد سؤالاتی مانند: «سناریوی آسیب‌پذیری دقیق در آنجا چیست؟» و «این آسیب‌پذیری چگونه بر سیستم ما تأثیر می‌گذارد؟» نیاز دارید.

درک امنیت کانتینر

3) مشکل در یکپارچه سازی 🧗🏻‍♀️: ابزارهای اسکن، مدیریت آسیب‌پذیری و هشدار زیادی در مورد امنیت کانتینر وجود دارد. در شرکت خود، باید تصمیم بگیرید که بهترین ابزار برای مدیریت محیط کانتینر شما چیست. علاوه بر این، شما باید در مورد خط لوله CI/CD ما فکر کنید و در چه مرحله ای باید این ابزارها را ادغام کنید تا محافظت شوید.

مشکل در ادغام

✨ نکات امنیتی طراحی کانتینری ✨
همانطور که قبلاً اشاره کردیم، باید به هر بردار حمله احتمالی در هر مرحله از چرخه حیات یک کانتینر فکر کنید.

مدیریت چرخه حیات کانتینر

1) 🤔کد برنامه آسیب پذیر: بسیاری از قطعات کد به یک محیط کانتینر در کار روزانه شما اضافه می شود. شما از تعداد زیادی کتابخانه، کدهای شخص ثالث و کدهای منطقی کسب و کار ما استفاده می کنید. هنگام نوشتن کد برنامه خود باید مراقب بهترین شیوه های کد امن باشید.

  • شما باید از راهنمای OWASP در مورد طراحی کد امن پیروی کنید.
  • شما باید کد خود را با ابزارهای SAST مانند SonarQube، Veracode و غیره اسکن کنید. این ابزارها به درک امنیت کد شما کمک می کنند.
  • اسکن تصاویر کانتینر خود برای آسیب پذیری ها روش خوبی است. اما این اسکن یک کار یک بار نیست، باید به طور منظم (هفتگی، ماهانه و غیره) انجام شود. من برخی از ابزارهای منبع باز را توصیه می کنم که می توانند مفید باشند: Trivy، Docker-Bench، Grype.

توضیحات تصویر

2) 🤔 تصاویر و ظروف کانتینر با پیکربندی بد: اگر مهاجمی بتواند Dockerfile را تغییر دهد، ممکن است اقدامات مخربی مانند افزودن بدافزار یا نرم‌افزار استخراج رمزنگاری به تصویر، دسترسی به اسرار ساخت و افزایش امتیازات و غیره انجام دهد. اینها فعالیت‌های بسیار خطرناکی برای سیستم‌های کانتینری هستند. برای جلوگیری از این امر، باید Dockerfiles خود را با بهترین شیوه های امنیتی بنویسیم. در اینجا برخی از بهترین اقداماتی که من توصیه کرده ام آورده شده است:

  • شما باید از یک تصویر از یک رجیستری مطمئن استفاده کنید. لطفاً از هیچ تصویر پایه ای که تأیید نشده یا توسط شخصی که شما نمی شناسید ساخته شده است استفاده نکنید. مهاجمان این راه را دوست دارند که شما را بگیرند.

توضیحات تصویر

  • شما باید از تصاویر پایه کوچکتر برای زیرساخت خود استفاده کنید. وقتی از کد کوچکتر استفاده می کنید، کد غیر ضروری کمتر و سطح حمله کوچکتری خواهید داشت.

توضیحات تصویر

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

  • سناریوهای اجرای کد از راه دور برای کانتینرها حیاتی هستند. شما باید دستور RUN خود را بررسی کنید تا از اجرای کدهایی که ندارید یا مهاجمان می توانند جلوگیری کنید. شما باید گزارش های دستورات RUN خود را به طور منظم بررسی کنید. همچنین، کنترل دسترسی در این مرحله حیاتی است. شما باید روشن و مشخص کنید که کدام کاربران در سیستم شما دستور change RUN را دارند.

توضیحات تصویر

  • برای Dockerfiles خود نیز می توانید آنها را اسکن کنید. ابزارهای زیادی وجود دارند که می توانند Dockerfiles شما را بررسی کنند. اگر Dockerfile با بهترین روش‌های Docker مانند عدم استفاده از کاربر ریشه، اطمینان از وجود بررسی سلامت و عدم افشای پورت SSH مطابقت داشته باشد، تأیید می‌کنند. می توانید از Snyk و Checkov استفاده کنید.

توضیحات تصویر

3) 🤔رازهای آشکار: اسرار فاش شده برای ما کابوس است. مانند هر محیطی، ما به این موضوع اشاره کرده‌ایم که «لطفاً اعتبارنامه‌های خود را کد سختی ندهید». شما نباید داده های حساس را در لایه های مختلف در ظروف خود ذخیره کنید. شما فکر می کنید اگر از دستور حذف استفاده می کنید همه چیز خوب است، اما باور کنید اینطور نیست. اعتبار شما هنوز در لایه ها است و سابقه داکر و مهاجمان می توانند با معکوس کردن تصویر کانتینر شما این اعتبارنامه ها را دریافت کنند. برای جلوگیری از قرار گرفتن در معرض، باید اسرار خود را به طور مرتب بچرخانید و رمزگذاری کنید، نه اینکه آنها را در فایل‌های env ذخیره کنید و می‌توانید از ابزارهای مدیریت مخفی مانند Vault استفاده کنید.

4) 🤔امنیت ذخیره سازی تصویر: ما از AWS ECR، DockerHub به عنوان ذخیره‌سازی تصویر استفاده می‌کنیم. در حالی که از تصاویر خود استفاده می کنید و آنها را فشار می دهید، باید مطمئن شوید که این تصاویر برای عموم قابل دسترسی نیستند. مهاجمان عاشق ایجاد تصاویر Docker در دسترس عموم، معکوس کردن آنها، و دریافت تمام جزئیات سیستم، اعتبارنامه ها و غیره هستند. همچنین، برای اطمینان از یکپارچگی داده های داکر و اعتماد محتوای داکر، تصاویر Docker شما باید در زمان اجرا امضا و تأیید شوند. ما نمی خواهیم از تصاویری استفاده کنیم که مهاجمان تغییر داده و فضای ذخیره سازی داکر ما را تحت فشار قرار داده اند.

توضیحات تصویر

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

توضیحات تصویر

5) 🤔شبکه ناامن: هر حمله خارجی به استقرار کانتینر شما در یک منطقه شبکه می رسد. بنابراین باید یک زیرساخت شبکه ایمن قوی برای کانتینرهای خود پیاده سازی کنید. شما باید یک VPC، مکانیزم رد پیش‌فرض روی NACL، گروه‌های امنیتی و فایروال‌ها پیاده‌سازی کنید. شما باید درگاه های کانتینر خود را تا جایی که ممکن است محدود کنید. برای ترافیک شبکه، همیشه به استفاده از راه حل های فایروال برنامه های کاربردی وب (WAF) فکر می کنید. WAF علاوه بر حملات لایه شبکه به جلوگیری از بسیاری از حملات مانند RCE، تزریق SQL کمک می کند. و همانطور که می دانید، باید همیشه از TLS برای ترافیک رمزگذاری شده خود استفاده کنید. مهاجمان عاشق HTTP هستند نه HTTPS.

توضیحات تصویر

با تشکر برای خواندن! در ظروف ایمن بمانید! 👻

نوشته های مشابه

دیدگاهتان را بنویسید

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

دکمه بازگشت به بالا