چگونه استقرار کانتینر خود را با Chainguard ایمن کنید
نیازی نیست مرا متقاعد کنید که کانتینرها کاملاً بهترین چیز برای بیرون آمدن از انقلاب مجازی سازی هستند. من تقریباً هر روز از ظروف یک طعم یا طعم دیگر استفاده می کنم.
اما زیبایی قالب یک بار و نصب آن در همه جا با هزینه همراه است: اگر یک لایه منفرد درون آن قالب دارای آسیبپذیری امنیتی باشد، چه؟ و اگر آسیبپذیری در آنجا پنهان شده باشد، از کجا میدانید؟
در این مقاله، من به شما نشان خواهم داد که چگونه از Chainguard (و Docker Scout) برای مدیریت امنیت تمام تصاویر خود استفاده کنید.
نسخه ویدیویی این مقاله را می توانید در اینجا مشاهده کنید:
هنگامی که زیرساخت نرم افزار خود را بر روی یک سرور فیزیکی به روش سنتی می سازید، به صورت دستی هر عنصر پشته را یک تکه در یک زمان خریداری و نصب خواهید کرد. احتمال این وجود دارد که شما آخرین نسخه همه چیز را مستقیماً از منبع رسمی دریافت کنید. و شما حداقل به هر لایه فکر خواهید کرد.
اما بیشتر ظروف مدرن از قالب های پیچیده ساخته می شوند. کپی و پیست کردن کد و فعال کردن آن آسان است. این احتمال وجود دارد که حتی از همه نرم افزارهایی که برنامه شما را تغذیه می کنند آگاه نباشید. و حتی اگر اینطور باشید، به راحتی ساعتها تحقیق در مورد هر عنصر از شما زمان میبرد تا بفهمید در کجا ایستادهاید.
این مشکلی است که Chainguard برای حل آن وجود دارد. Chainguard صدها نسخه سفارشی به خوبی نگهداری شده بسیاری از محبوب ترین تصاویر کانتینر را ارائه می دهد.
البته، شما آزاد هستید که مثلاً تصویر رسمی MariaDB را در Dockerfile خود بکشید، اما استفاده از نسخه Chainguard انتخاب بسیار مطمئنتری خواهد بود. دلیلش این است که Chainguard دائماً لایههای تصویر خود را از نظر آسیبپذیری تجزیه و تحلیل میکند و تصاویری را میسازد که تا حد امکان بهروز و ایمن باشند.
بیایید دریابیم که چگونه همه اینها واقعاً در دنیای واقعی کار می کنند. قبل از شروع ساختن تصاویر جدید، باید به شما بگویم که چگونه آسیبپذیریهای هر تصویر را تجسم میکنیم تا بتوانیم مزیت Chainguard را کمّی کنیم.
ابتدا باید توضیح دهم که آسیبپذیریهای زیرساخت به طور کلی با استفاده از سیستم آسیبپذیریها و مواجهههای مشترک – یا CVE – بر اساس پایگاه داده ملی آسیبپذیری که توسط NIST دولت ایالات متحده نگهداری میشود، تعریف میشوند. صدها هزار تعاریف CVE وجود دارد که توسط سیستم CVE شناسایی و طبقه بندی شده اند و هر یک بر اساس شدت رتبه بندی شده اند. وجود این پایگاه داده – همراه با تعدادی ابزار مهم مرتبط – به ما امکان می دهد تا ارزیابی های امنیتی خود را خودکار کنیم.
Docker Scout یکی از این ابزاره است. این صفحه دستورالعملهای نصب را برای استفاده از Scout در Docker Engine به شما میدهد، اما اگر از Docker Desktop استفاده میکنید، باید تمام شود. دستور curl
به سادگی اسکریپت install-scout
Bash را دانلود می کند که همه چیز را انجام می دهد.
بیشتر بخوانید
چرا ترکیه توانست، ایران نتوانست؟/ ترکها با وجود تورم بالا ارزش پول ملی خود را حفظ کردند
curl -fsSL https://raw.githubusercontent.com/docker/scout-cli/main install.sh -o install-scout.sh
نحوه انتخاب تصویر مناسب
من یک Dockerfile ایجاد کردم که تصویر رسمی MariaDB را از Docker Hub می کشد:
FROM mariadb:latest ENV MYSQL_ROOT_PASSWORD=my_root_password ENV MYSQL_DATABASE=my_database ENV MYSQL_USER=my_user ENV MYSQL_PASSWORD=my_user_password
وانمود میکنیم که تصویر برای استقرار چند لایه استفاده میشود، پس یک پایگاه داده ریشه و رمز عبور و یک حساب کاربری جدید با رمز عبور خود ایجاد میکنیم. ممکن است یک نمونه لایه برنامه وجود داشته باشد که از آن اعتبارنامه ها برای دسترسی به پایگاه داده در نقطه ای استفاده کند.
در هر صورت، من تصویر را به روش معمول میسازم و نام آن را mariadb_standard
میگذارم.
docker build -t mariadb_standard .
Dockerfile دیگری وجود دارد که دقیقاً مشابه مورد اول است، با این تفاوت که ما در حال کشیدن تصویر Chainguard ویژه MariaDB هستیم.
FROM chainguard/mariadb ENV MYSQL_ROOT_PASSWORD=my_root_password ENV MYSQL_DATABASE=my_database ENV MYSQL_USER=my_user ENV MYSQL_PASSWORD=my_user_password
این تصویر از Docker Hub گرفته شده است، اما ما میتوانستیم به همین راحتی آن را از مخزن خود Chainguard بیرون بیاوریم:
docker pull cgr.dev/chainguard/mariadb:latest
این تصویر را به همان روشی که برای تصویر رسمی انجام دادید بسازید. وقتی دو تصویر را اسکن میکنید، این چیزی است که میبینید:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mariadb_cg latest 50a484d1ded3 7 days ago 556MB mariadb_standard latest 67949ccf8eb5 6 weeks ago 405MB
همانطور که می بینید، تصویر Chainguard بسیار بزرگتر است. اما توجه داشته باشید که چگونه در واقع بسیار جدیدتر است.
چگونه تصویر خود را اسکن کنیم
اکنون زمان آن رسیده است که docker scout
را وارد کار کنید. در اینجا نحوه کار این است. ابتدا Scout را به تصویر mariadb_standard
اشاره می کنم:
$ docker scout qv mariadb_standard
به هر حال، qv
مخفف quickview
است.
در اینجا خروجی باید شبیه باشد:
تصویر استاندارد از سه لایه تشکیل شده است که با Ubuntu 23.10 شروع می شود، سپس نسخه پشتیبانی طولانی مدت Ubuntu 22.04 و سپس MariaDB در بالا. اوبونتو دارای 10 آسیب پذیری Low و 9 آسیب پذیری متوسط است. به طور نگران کننده، لایه MariaDB دارای 2 مشکل بحرانی و 28 مشکل High است.
این باید برای بیدار نگه داشتن یک ادمین در شب کافی باشد. و مرتب کردن همه آنها برای اینکه بفهمید کدام یک از برنامه های نمایشی هستند و کدام یک برای محیط شما چندان مهم نیستند، زمان زیادی از شما می گیرد.
اکنون Scout را در مقابل تصویر Chainguard اجرا می کنم:
اول از همه، میتوانیم ببینیم که فقط یک لایه در اینجا وجود دارد. من گمان می کنم که این یکی از راه هایی است که Chainguard بر روی تصاویر خود کنترل می کند. آن دو آسیبپذیری حیاتی هنوز وجود دارند، اما تنها 5 آسیبپذیری با شدت بالا وجود دارد و اصلاً متوسط یا کم وجود ندارد.
اگر میخواهید، میتوانید عمیقتر شیرجه بزنید تا تمام آسیبپذیریهای فردی را نشان دهید. در اینجا دستور انجام این کار با گزیده ای از خروجی آمده است:
$ docker scout cves local://mariadb_cg ✗ CRITICAL GHSA-xfg6-62px-cxc2 [OWASP Top Ten 2017 Category A9 - Using Components with Known Vulnerabilities] https://scout.docker.com/v/GHSA-xfg6-62px-cxc2 Affected range : <42.2.8 Fixed version : 42.7.2, 42.6.1, 42.5.5, 42.4.4, 42.3.9, 42.2.8 CVSS Score : 10.0 CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H ✗ CRITICAL CVE-2024-1597 [Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')] https://scout.docker.com/v/CVE-2024-1597 Affected range : <42.2.28 Fixed version : 42.2.28 CVSS Score : 10.0 CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
ما می توانیم برای درک بهتر هر یک از آنها که از ابزارها و پایگاه های داده استاندارد CVE استفاده می کنند تحقیق کنیم. اما این کار بسیار ساده تر از آن است که در مورد تمام 28 آسیب پذیری با شدت بالا در تصویر استاندارد MariaDB تحقیق کنید.
نتیجه
پس اگر نگران امنیت تصویر کانتینر هستید - و بهتر است - پس Docker Scout یک ابزار عالی برای حفظ دید در پشته های شما است. و تصاویر تمیزتر Chainguard می تواند شروع قابل توجهی به شما بدهد.
در سایت Bootstrap IT من، مزایای بیشتری در زمینه فناوری اطلاعات به شکل کتاب، دورهها و ویدیوها موجود است.
ارسال نظر