یکی از شایعترین چالشهای امنیتی که امروزه سازمانها با آن روبرو هستند “مشکل ارتباط” میان تیمهای تولید، تیم اجرا و تیمهای امنیت سازمان است. در بسیاری از سازمانها تیم امنیت آخرین تیمی است که از تغییرات در فرایندها یا محصول آگاه میشود. استفاده از تکنولوژی کانتینر میتواند نقش مهمی در چگونگی همکاری این تیمها برای حل مشکلات امنیتی ایفا کند.
مفهوم کانتینر (Container)
تولید کنندگان نرمافزار معمولا با این مشکل روبرو هستند که در انتقال یک نرمافزار -که روی سیستم خودشان با موفقیت دیباگ، تست و اجرا شده است- به یک پلتفرم جدید مثل لپتاپ، سرور جدید، ماشین مجازی، فضای ابری و محیط آزمایشی و … با خطاهای جدید و مختلفی مواجه میشوند.
این خطاها به دلیل تقاوتهایی است که در وابستگیهای مورد استفاده نرمافزار با پلت فرم جدید وجود دارد، -وابستگیهایی مثل نسخه PHP سیستم، تنظیمات و پیکربندیهای سیستم و کتابخانههای مورد استفاده و … – که معمولا از پلتفرمی به پلتفرم دیگر متفاوت است و تولیدکنندگان را برای اجرای برنامه روی پلتفرمهای دیگر دچار دردسر میکند.
کانتینر در حوزه ترانزیت و حمل بار به مفهوم یک بسته بزرگ است که دربرگیرنده مجموعهای از جعبهها با محتویات مختلف است و امکان جابجایی توسط کامیون، کشتی و… را دارد.
در حوزه نرمافزار هم کانتینر به معنی یک بسته یا Package است که در برگیرنده یک نرمافزار با تمام وابستگیها و نیازمندیهای آن – مثل کتابخانههای مورد استفاده، تنظیمات و پیکربندیها و …- است، بطوری که روی پلتفرمهای مختلف قابل جابجایی باشد.
کانتینرها به تولید کنندگان برنامه این امکان را میدهند که به آسانی بستههای نرمافزاری و تمام وابستگیهای آنها را به صورت یک Image ارائه کنند که روی انواع سیستمها و سختافزارها قابل اجرا باشد.
راهکار کانتینر برای توسعه دهندگان بسیار مفید است، چراکه احتمال بوجودآمدن مشکلات ناشی از ناسازگاری برنامه با محیط اجرا بهطور قابل توجهی کاهش پیدا میکند. از طرفی تیمهای عملیاتی و اجرایی نیز احساس رضایت دارند زیرا یک مجموعه استاندارد از تنظیمات سرور را در اختیار دارند که مدیریت و امنیت سرورها را آسانتر میکند.
یکی از مزایای راهکار کانتینر نسبت به ماشین مجازی یا Virtual Machine این است که به دلیل اینکه کانتینر روی سیستمعامل میزبان اجرا میشود و مانند ماشین مجازی سیستم عامل مجزا ندارد، بسیار سبکتر است. همچنین کانتینرها این قابلیت را دارند که فرایندهای مربوط به چند کانتینر روی یک سیستم را ایزوله کنند تا امنیت تک تک کانتینرها حفظ شود. حجم کم کانتینرها، امکان مدیریت منابع مورد استفاده هر کانتینر توسط سیستمعامل، امکان طراحی ماژولار و در نهایت عدم نیاز به تغییر تنظیمات سرور برای هر نرمافزار، از مهمترین مزایای استفاده از کانتینرها است.
بهروز رسانی و ارائه Patch جدید در کانتینرها
بهترین روش برای پچ(patch) کردن یا به روزرسانی برنامههای کانتینری، تولید مجدد / پیادهسازی مجدد است. کانتینرها زمانی که بهروز رسانی میشوند، نسخه جدید آنها به همراه تغییراتی که نسبت به نسخه قبل داشته، در فرایندهای توسعه مستمر/ یکپارچگی مستمر(CI/CD) در دسترس قرار میگیرد.
از آنجاییکه برنامهها هرگز روی یک سیستم در حال اجرا پچ نمیشوند، بلکه فقط بازسازی شده و انتقال مییابند، تیمهای اجرایی و عملیاتی میتوانند دسترسی به سرورهای تولید برنامه را محدود نمایند. در نتیجه نیازی به ارائه دسترسی ssh به این سرورها نیست و همین مسئله باعث خوشحالی تیمهای امنیتی شده است.
البته با وجود اینکه کانتینرها تحولی بزرگ در نحوه تولید، گسترش، استقرار و مدیریت برنامهها ارائه دادهاند، ولی مانند هر تغییر بزرگ دیگری مجموعهای از چالشها را با خود به همراه میآورند.
ایمن سازی کانتیترها در تمامی لایهها
ایمنسازی کانتینرها بسیار شبیه ایمنسازی یک فرایند در حال اجراست. همه تیمها باید قبل از نصب و راهاندازی کانتینر موارد امنیتی مربوط به تمامی لایههای پشته نرمافزار را در نظر بگیرند. بخصوص برای سازمانهایی که برای توسعه برنامههای خود به کانتینرهایی در ابعاد بزرگ نیاز دارند، استفاده از یک پلتفرم سازمانی برای مدیریت کانتینرها ضروریست. برای سازمانها این امکان فراهم است که پلتفرم کانتینر خود را تولید کنند و یا از یک پلتفرم معروف کانتینر، مانند Kubernetes گوگل استفاده کنند. پلتفرمهای سازمانی این امکان را فراهم میکنند که کانتینرها روی چندین سیستم و ماشین بصورت خودکار اجرا شوند و مدیریت پیادهسازی و زمانبندی اجرا را بر عهده گیرند.
کنترل، محافظت، گسترش
برای حفظ امنیت کانتینرها در تمامی لایههای اصلی، باید فرایندهای امنیتی را به سه گروه قابل مدیریت تقسیم کرد: امنیت برنامههای کانتینری را کنترل کرد، از زیرساخت پلت فرم کانتینر محافظت کرد و از طریق اکوسیستم امنیتی سراسری، امنیت را در تمام قسمتها گسترش داد.
مدیریت امنیت یک فرایند مستمر است. همانطور که برنامهها مدام در حال توسعه یا بهروزرسانی هستند، فراهم کردن کنترلهای امنیتی پویا برای حفظ امنیت کسب و کار ضروری است. سازمانها نیازمند یک پلتفرم در زنجیره تامین نرمافزار هستند که کنترلهای امنیتی را در اختیارشان قرار دهند. بدین ترتیب تیمهای توسعه نرمافزار میتوانند بدون ایجاد خللی در بهرهوری تیم؛ در تمام چرخه حیات برنامه از آن محافظت کنند.
کنترل
با اجرای موارد زیر میتوان امنیت کانتینرها را حتی پیش از ایجاد برنامهها کنترل کرد:
– استفاده از محتوی قابل اعتماد
امروزه بیشتر برنامهها، از اجزای متن-باز مختلفی نظیر سیستم عامل لینوکس، وب سرورApache، Jboss وNode.js تشکیل شدهاند. نسخههای کانتینرشده این بستهها به راحتی در دسترس همه هستند. اما زمانی که کدی از یک منبع خارجی دانلود میشود، باید مشخص باشد که بسته اصلی از کجا آمدهاست، چه کسی آن را ساخته و آیا کد مخربی درون آن وجود دارد یا خیر. همچنین در صورتی که آسیب پذیریهای امنیتی جدیدی در این بستههای متن-باز کشف شد، باید بلافاصله از imageهای تایید شده و به روز استفاده کرد.
مورد بعدی، این است که تیم تولید سازمان باید کانتینر خود را به صورت لایهای بر روی این کانتینرهای عمومی بسازد. تیم تولید باید دسترسی کاملی به لایههای داخلی Image دانلود شده کانتینر داشته باشد تا بتواند همان سیاستهای امنیتی که سازمان برای برنامههای دانلود شده اجرا میکند، در مورد کانتینرها هم بکار گیرد. برای این کار میتوان از برخی از رجیسترهای خصوصی کانتینر استفاده کرد که از ذخیرهسازی Image کانتینر پشتیبانی میکنند.
“توسعه مستمر/ یکپارچگی مستمر (CI/CD)” در مرکز زنجیره ارائه نرمافزار امن قرار دارد. در نتیجه سازمانها باید بخاطر داشته باشند که با استقرار دروازههای امنیتی مناسب همواره از آخرین نسخههای مورد تائید و بهروز محصول استفاده کنند.
محافظت کردن
مرحله بعدی محافظت، پس از استقرار کانتینر است. به عبارتی یعنی اطمینان از این که سیستمعامل میزبان و پلتفرم هماهنگ کننده کانتینر به اندازه کافی امن هستند.
سیستمعامل میزبان
ایمنکردن کانتینرهای تجاری نیازمند یک سیستمعامل است که بتواند کانتینرهای چندمستاجره(multi-tenancy) را در زمان اجرا مدیریت کند.
- استفاده از یک سیستمعامل که بتواند باعث تامین امنیت کانتینرها در محدودهها شود، امنیت کرنل سیستمعامل را نسبت به دسترسی کانتینرها و امنیت کانتینرها نسبت به هم را حفظ کند.
- استفاده از ماژول SElinux که مسئول بهبود امنیت کلی سیستم عامللینوکس است و دسترسیهای سیستمی را در مواردی که سیستم در خطر باشد، مانند حالتی که یک فرایند/کاربر کانتینر باعث نقض امنیت لینوکس شود حفظ کند.
- استفاده از یک سیستم عامل کوچک و بهینه شده برای کانتینر، که منجر به کاهش سطح حملات برنامههای کاربردی و زیرساختها شود.
هماهنگی کانتینرها
هماهنگی (Orchestration) اصطلاحی کلی است که به زمانبندی کانتینر، مدیریت کلاسترها و در مورادی به تدارک میزبانهای بیشتر اشاره دارد.
یکسری قابلیتها وجود دارد که باید در پلتفرم کانتینر سازمان پیادهسازی شود:
- فرایندهای کنترل دسترسی API(تایید هویت و صدور مجوز) برای تامین امنیت پلت فرم کانتینر لازم و ضروری است. استفاده از پلتفرمهایی که امکان پیادهسازی مدیریت دسترسی بر مبنای نقش (role-based access control) دارند، این امکان را فراهم میکند که نقشها را بصورت پویا تعریف کنند و سیاستهای دسترسی صحیح را پیادهسازی کنند تا هر کاربر فقط به دادهها و دستورات مرتبط با نقش و وظیفه خود دسترسی داشته باشد.
- استفاده از برنامههای مبتنی بر میکروسرویس مدرن به معنای استقرار کانتینرهای چندگانه در میان چندین نود مختلف است. در این شرایط، با استقرار امنیت در بطن شبکه، میتوان فعالیتهای هر کانتینر را مدیریت و ایزوله کرد.
- استفاده از راهکارهای امنیتی جانبی که در برخی از پلتفرمهای کانتینری ارائه میشود در کنار قابلتهای امنیتی یک سیستمعامل سازمانی مانند Selinux و پروفایلهای امن محاسباتی در کاهش ریسک موثر است.
- پیکربندی etcd(ابزاری متن-باز در چهارچوب سیستمهای توزیع شده) برای رمزنگاری اطلاعات محرمانه
گسترش
در نهایت توسعه کانتینر، به یکسری ابزارهای امنیتی مانند روشهای PAM، فایروالهای برنامه وب(WAF) و ابزارهای امنیتی SIEM به واسطه رابطهای استاندارد و APIها نیاز دارد.
هر پلتفرمی که برای کانتینر انتخاب شود باید در کنار خود شبکه وسیعی از ارائهدهندگان دیگر را داشته باشد و با راهحلهای تائید شده آنها سازگار باشد. همچنین باید توانایی اتصال به ابزارهایی که قبلا توسط سازمان استفاده میشده را داشته باشد.
در مسئله استقرار کانتینرها صرفا بحث امنیت نیست، بلکه در کنار امنیت، پلتفرم کانتینر باید امکانات مناسب و قابلاستفادهای را برای تیم توسعه و تیم عملیاتی فراهم کند. سازمانها به پلتفرم کانتینری امنی نیاز دارند که در سازگاری کامل با پلتفرمهای دیگر سازمان باشد تا بهرهوری عملیاتی را افزایش داده و استفاده از زیرساخت را بهبود بخشد.