بهترین روش‌ها و ابزارها برای ایجاد امنیت در داکر

امنیت داکر

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

بهترین روش‌های ایجاد امنیت داکر در بخش‌های مختلف آن

با بررسی مدل‌های امنیتی در داکر، می‌بینید که امنیت Docker و کانتینرها چند بُعد ثابت و مشخص دارد. ایجاد امنیت در داکر (Docker Security)، در وهله‌ی اول شامل استفاده از تصاویر معتبر، اجرای کانتینرها با کاربر غیر Root، اسکن آسیب‌پذیری‌ها، محدود کردن منابع کانتینرها و به‌روزرسانی مستمر و اعمال پچ‌های امنیتی است. در این میان استفاده از ابزارهایی مانند Trivy و Anchore برای اسکن آسیب‌پذیری‌ها و ادغام داکرها با پلتفرم‌های CI نیز از تصمیماتی است که می‌تواند دقت و کیفیت امنیت داکرها و کانتینرها را چند پله ارتقا دهد. در ادامه‌ 6 تا از بهترین روش‌های امنیتی (Security Best Practices) را برای داکرها و کانتینرها را می‌شناسید.

1- ایجاد امنیت تصاویر داکر

تصویر داکر (Docker Image) دو نوع است. تصویر اولیه که اطلاعات پایه‌ای را برای ساخت کانتینرها به داکر می‌دهد و الگوی اصلی ساخت کانتینرها است. تصویر نهایی که بر اساس تصویر اولیه و بعد از ادغام شدن با اطلاعات داکر فایل تولید می‌شود. هر دو تصویر می‌تواند زمینه و اطلاعات لازم را برای حملات خرابکارانه مهیا کند.

ایجاد امنیت در داکر در سطح پیشرفته و حتی مبتدی، بدون تردید از ایمن‌سازی این تصاویر می‌گذرد. در ادامه با بهترین روش‌های تأمین امنیت تصاویر داکر آشنا می‌شوید.

استفاده از تصاویر پایه‌ی مطمئن

یکی از روش‌های جلوگیری از حملات در Docker این است که اجازه‌ی نفوذ تصاویر مشکوک را به داکر ندهید. مطمئن شوید که تصاویر کانتینر بر اساس تصویر پایه‌‌ای ساخته شده که کاملاً قابل اعتماد است. تصویری که از یک منبع یا رجیستری امن (مثل Docker Hub) دانلود شده‌است. 

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

۱. (Docker Content Trust (DCT: این قابلیت، امکان اعتبارسنجی تصاویر و تگ‌های آن‌ها را فراهم می‌کند. با فعال کردن Content Trust، تصاویر داکر قبل از بارگذاری در مخازن، باید امضا شود. به‌این‌ترتیب توسعه‌دهندگان مطمئن می‌شوند که تصاویر دانلودشده، حتماً همان تصویری است که انتظار دارد و در این میان در معرض حملات عمدی یا مشکلات غیرعمدی قرار نگرفته است.

۲. Notary: این سیستم مسئولیت اجرای بخشی از چرخه‌‌ی کاری Content Trust را به عهده دارد؛ یعنی مدیریت و اعتبارسنجی امضاها. سیستمی که امضاهای تصاویر داکر را ذخیره و تأیید می‌کند.

مطلب مفید: فیلتر کردن تصاویر داکر

اسکن آسیب‌پذیری‌های تصاویر با ابزارهای مناسب

ایمن‌سازی کانتینرهای Docker، بدون اسکن آسیب‌پذیری‌ها (Vulnerability Scanning) در تصاویر، هرگز کامل نخواهد بود. خوشبختانه این کار را هم می‌توان به ابزارهای قدرتمندی سپرد. این ابزارها ممکن است به‌صورت مستقل و محلی نصب شده یا روی یک سرور جداگانه اجرا شود. اما بهترین روش این است که آن‌ها را با CIها ادغام کنید. مزیت ادغام این ابزارها با CI این است که کار آن‌ها به‌صورت خودکار (به‌صورت مستمر و با هر به‌روزرسانی کد) انجام می‌شود.

برای ایجاد امنیت در داکر از طریق اسکن آسیب‌پذیری‌ها، می‌توانید از ابزارهایی استفاده کنید که در جدول زیر می‌بینید.

نام ابزارکاربرد
Trivyاسکن آسیب‌پذیری تصاویر داکر، سیستم‌عامل و وابستگی‌های کد
Clairاسکن امنیتی کانتینرها برای آنالیز لایه‌های تصویر
Anchore Engineاسکن و ارزیابی امنیتی جامع تصاویر کانتینر
Snykاسکن امنیتی برای وابستگی‌های کد و تصاویر داکر، با تمرکز بر نیازهای توسعه‌دهندگان

استفاده از CI برای ساخت تصاویر داکر

اینفوگرافیک docker-min

ساخت تصاویر به‌صورت دستی، Security پایینی دارد. در مقابل، سپردن ساخت تصاویر داکر به سیستم یکپارچه‌سازی پیوسته (CI یا Continuous Integration) تمام این فرایند را به‌ شیوه‌ای ایمن و استاندارد پیش می‌برد. CI پلتفرمی است که امکان اجرای خودکار مراحل ساخت، تست و استقرار تصاویر کانتینری را دارد.

ایجاد امنیت در داکر توسط CI با خودکارسازی و تکرار فرایند کنترل نسخه‌ها، اجرای تست‌های امنیتی پیش از استقرار، کنترل دسترسی‌ها و… انجام می‌شود. نحوه‌ی پیاده‌سازی Docker Security در فرایند ساخت تصویر داکر توسط CI شامل مراحل زیر است:

۱. پیکربندی سیستم CI: ابتدا یک پلتفرم CI (مانند Jenkins، GitLab CI/CD، CircleCI  یا GitHub Actions) را انتخاب و پیکربندی کنید. این پیکربندی شامل کانفیگ‌های امنیتی Docker، از جمله محدود کردن دسترسی‌ها و احراز هویت برای استفاده از سیستم CI است.

۲. ساخت فایل Pipeline: فایل Pipeline شامل اسکریپت‌هایی است که مراحل مختلف ساخت، تست و استقرار کدها و ترتیب آنها را تعریف می‌کند.

۳. اسکن خودکار آسیب‌پذیری‌های Docker: بالاتر اشاره کردیم که عملکرد ابزارهایی مانند Trivy، Clair یا Anchore می‌تواند در یک CI خودکار شود. با تعریف این ابزارها در فایل Pipeline، اسکن آسیب‌پذیری‌ها در هر بار ساخت تصاویر، به طور خودکار انجام شده و نتایج گزارش داده می‌شود.

۴. اجرای خودکار تست‌های امنیتی: برای رفع مشکلات امنیتی Docker، باید تست‌های امنیتی خودکار را در فایل Pipeline تعریف کنید تا تمام وابستگی‌ها به‌صورت خودکار تست و عملکرد صحیح تصویر تضمین شود. مهم‌ترین تست این مرحله نیز (Static Code Analysis (SCA برای بررسی کیفیت کدها و باگ‌ها است. اگر در این مرحله مشکلی شناسایی شود، فرایند متوقف می‌شود.

۵. به‌روزرسانی مستمر و اجرای پچ امنیتی: با ابزارهایی مانند Dependabot یا Renovate می‌توانید در فایل Pipeline مراحلی را برای به‌روزرسانی مستمر و اجرای پچ امنیتی تعریف کنید. اسکن امنیتی و بازسازی تصاویر نیز در این فایل قابل تعریف و خودکارسازی است.

مطلب مفید: حذف تصاویر داکر

2- اجرای کانتینرها با کاربری غیر از Root

یکی از بهترین روش‌های امنیتی در کانتینرهای Docker که جزو ساده‌ترین روش‌‎ها است، ایجاد یک کاربر معمولی و بدون دسترسی Root (ریشه) است که کانتینرها را اجرا می‌کند.

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

علاوه‌براین، کانتینر از منابع سیستم میزبان استفاده می‌کند. بنابراین اجرای آن‌ها با دسترسی محدودتر، خطر آسیب به سیستم اصلی را کاهش می‌دهد. جالب است بدانید همین روش ساده، یکی از دستورالعمل‌های امنیتی سازمان‌هایی مانند CIS Docker Benchmark و NIST است که همواره بر اهمیت امنیت کانتینر (Container Security) تأکید دارند.

مطلب مفید: کانتینر داکر چیست؟

3- نصب نکردن بسته‌های غیرضروری

ایجاد امنیت در داکر گاهی به‌سادگیِ نصب نکردن بسته‌های غیرضروری است. هر بسته‌ای که به کانتینر اضافه می‌شود، می‌تواند یک نقطه‌ی آسیب‌پذیری باشد. نقاطی که گاهی به بهترین راه نفوذ برای هکرها تبدیل می‌شود. بنابراین با کاهش تعداد بسته‌ها، سطح حمله و احتمال نفوذ به کانتینر هم کمتر می‌شود.

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

4- استفاده از دستور HEALTHCHECK برای تصویر کانتینر

برای محافظت از داده‌ها در Docker می‌توانید از دستور HEALTHCHECK در داکرفایل استفاده کنید. با فعال‌سازی قابلیت Healthcheck، سلامت یک کانتینر به طور مداوم زیر ذره‌بین قرار می‌گیرد. این قابلیت ضمن شناسایی سریع مشکلات، از انتشار آسیب‌پذیری‌ها هم پیشگیری می‌کند.

فرمت کلی دستور HEALTHCHECK به ترتیب زیر است:

HEALTHCHECK –interval=30s –timeout=10s –retries=3 CMD curl -f http://localhost:80 || exit 1 

طبق این دستور، داکر هر 30 ثانیه مطمئن می‌شود که آیا سرور در حال پاسخ‌دهی به درخواست‌ها است یا خیر. زمان تایم‌اوت 10 ثانیه و تعداد دفعات تلاش نیز 3 بار تعریف شده‌است. یعنی اگر درخواست تا 10 ثانیه یا بعد از 3 بار تلاش پاسخ داده نشود، وضعیت کانتینر ناسالم تشخیص داده می‌شود. 

5- استفاده از دستور COPY به جای ADD

ایجاد امنیت در داکر به نحوه نوشتن جزئیات دستورات هم بستگی دارد. یکی از مهم‌ترین مصادیق این امر، تأثیر نوشتن دستور COPY به جای ADD است. چون دستور COPY فایل‌ها را به شیوه‌ای ایمن‌‎تر وارد کانتینر می‌کند. 

ایجاد امنیت در داکر توسط دستور COPY، به‌ این ترتیب است که این دستور فایل‌ها را فقط از ماشینِ هاستِ محلی کپی کرده و در سیستم فایل کانتینر قرار می‌دهد. در حالی که دستور ADD، می‌تواند فایل‌ها را از URLهای راه دور بازیابی کند. فایل‌هایی که امنیت تضمین‌شده‌ای ندارند و ممکن است مخرب باشند.

6- محدود کردن منابع

اینفوگرافیک docker2-min

یکی از اصول امنیتی Docker این است که اجازه‌ی استفاده‌ی نامحدود از منابع (شامل CPU، RAM، دیسک و…) را به کانتینرها ندهید. با این کار از بسیاری از حملات جلوگیری می‎‌شود. به‌خصوص حملاتی مانند DoS که برای اجرا به منابع زیادی نیاز دارند. ضمن این که عملکرد کانتینرها نیز دچار تداخل نمی‌شود.

محدودسازی منابع به طور کلی شامل تکنیک‌های زیر می‌شود. این تکنیک‌ها همگی با نوشتن دستورات متنی، روی کانتینرها قابل اجرا است:

  • محدود کردن سقف مجاز استفاده از حافظه
  • تعیین تعداد مجاز هسته‌های قابل استفاده
  • اختصاص دادن اولویت پردازشی توسط  CPU به هر کانتینر
  • محدود کردن نرخ خواندن و نوشتن روی دیسک
  • کنترل پهنای باند شبکه
  • و…

جمع‌بندی درباره امنیت داکر

ایجاد امنیت در داکر یک فرایند پیوسته و دائمی است. این کار گام طلایی چرخه‌ی کاری کانتینرهای داکر محسوب می‌شود. فراموش نکنید که ادغام داکر با پلتفرم‌های Continuous Integration، بسیاری از این وظایف را خودکار می‌کند. به کمک این پلتفرم، از ساخت تصاویر گرفته تا اجرای تست‌ها، اسکن آسیب‌پذیری‌ها، اعمال به‌روزرسانی‌ها و پچ‎های امنیتی و… به شکلی دقیق و خودکار اجرا می‌شود و ضمن دقت بالاتر، زمان کمتری را از کاربران می‌برد.

سؤالات متداول امنیت داکر

1. ضروری‌ترین روش‌های ایجاد امنیت در داکر کدام است؟

استفاده از تصاویر معتبر، اجرای کانتینرها با کاربر غیر Root، اسکن آسیب‌پذیری‌ها و محدود کردن منابع کانتینرها.

2. ابزارهای اسکن آسیب‌پذیری چگونه امنیت داکر را تأمین می‌کند؟

با اسکن تصاویر داکر و شناسایی آسیب‌پذیری‌های شناخته‌شده در بسته‌ها و کتابخانه‌های موجود در تصویر.

3. چگونه به‌روزرسانی و پچ‌های امنیتی را در داکر مدیریت کنیم؟

با اجرای مداوم Pipeline در پلتفرم CI، تصاویر به‌ طور خودکار به‌روز شده و پچ‌های امنیتی جدید نیز اعمال می‌شود.

 

بدون دیدگاه

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

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