من بیش از 20 سال است که در فناوری اطلاعات کار می کنم، اما به نوعی هرگز به کانتینرها نرسیدم. در تئوری، من متوجه شدم که آنها چگونه ساختار یافته اند و چگونه کار می کنند. اما از آنجایی که هرگز در عمل با آنها برخورد نکرده بودم، مطمئن نبودم که دنده های زیر کاپوت آنها دقیقا چگونه می چرخند و می چرخند.
علاوه بر این، من نمی دانستم امنیت آنها چگونه است. اما دوباره، این تئوری خوب به نظر میرسد، و آهنگ قدیمی «با افزایش امنیت، قابلیت استفاده کاهش مییابد» در ذهنم نقش بسته است. بنابراین من فکر کردم که از آنجایی که انجام همه چیز با کانتینرها بسیار آسان است، پس ایمنی در آنجا پایین تر است. همانطور که معلوم است، حق با من بود.
برای شروع سریع، در دوره ها ثبت نام کردم
این دوره که توسط شیلا آ. برتا و سول اوزان تدریس شد، بلافاصله با توضیح نحوه کار کانتینرهای داکر و سفری که هنگام استقرار به کوبرنتس طی می کنند، آغاز شد. این یک کلاس کاملاً عملی بود - دانشآموزان باید Docker و microk8s را قبل از کلاس روی دستگاههای خود نصب میکردند - راهی عالی برای دیدن نحوه تعامل ابزارها با یکدیگر، یافتن نقاط ضعف و مهمتر از همه، سعی در مسدود کردن آنها.
متأسفانه، اگرچه دوره ها قول می دادند که بعد از دو روز "شاهزاده" شوم، اما احساس کردم همه چیز تازه شروع شده است و هنوز چیزهای زیادی برای یادگیری دارم.
قبل از فرو رفتن در مشاهدات والای من، مهم است که توضیح دهم ظرف چیست. در دنیای توسعه، نرمال تلقی می شود که کدهای نوشته شده بر روی ماشین شخصی شما به خوبی کار کند، اما وقتی می خواهید آن را روی سروری در جایی اجرا کنید، به سادگی کار نمی کند. کانتینرها سعی می کنند با ارائه ماشین های مستقلی که می توانید به راحتی از یک سرور به سرور دیگر منتقل کنید، بر این مشکل غلبه کنند و بدانید که همیشه کار می کنند. همانطور که از نام آن پیداست، آنها حاوی کد، کتابخانه ها و سایر نرم افزارهای مورد نیاز برای انجام کار هستند. Kubernetes، از سوی دیگر، است
در زیر برخی از یافته های من از دیدگاه تیم قرمز و آبی آورده شده است.
تیم قرمز
بیشتر محتوای کانتینر به صورت روت اجرا می شود: به این معنی است که اگر کانتینر در معرض خطر باشد، دسترسی کامل به کانتینر خواهید داشت. این کار مراحل بعدی را بسیار ساده تر می کند.
نصب docker.sock در داخل ظرف خطرناک است: اگر ریشه در داخل یک کانتینر دارید و همچنین Docker را در داخل کانتینری نصب کردهاید که دارای سوکت Docker (/var/run/docker.sock) است، این پتانسیل را دارید که کل کلاستر، از جمله دسترسی به هر کانتینر دیگری را کاوش کنید. چنین دسترسی را نمی توان با جداسازی شبکه یا وسایل دیگر جلوگیری کرد.
متغیرهای محیطی اغلب حاوی داده های مخفی هستند: در بیشتر موارد، افراد رمز عبور را با استفاده از متغیرهای محیط معمولی به کانتینر ارسال می کنند. بنابراین اگر به حساب کاربری دسترسی دارید، می توانید از این متغیرهای محیطی جاسوسی کنید تا بعداً قدرت خود را افزایش دهید.
Docker API می تواند اطلاعات زیادی را ارائه دهد: Docker API، زمانی که به صورت پیش فرض پیکربندی شود، بدون مجوز اجرا می شود و می تواند اطلاعات زیادی تولید کند. با استفاده از Shodan، می توانید به راحتی لیستی از پورت های باز را پیدا کنید، سپس اطلاعات دقیقی در مورد خوشه دریافت کنید - و به ضبط کامل آن ادامه دهید. TrendMicro در این مورد نوشت
تیم آبی
محتویات ظرف را به صورت روت اجرا نکنید: با وجود اینکه اجرای آن به صورت روت ساده تر است، نباید این کار را انجام دهید. در عوض، برنامههای دارای مجوزهای بازنشانی را با نمایش uid اجرا کنید، یا با استفاده از گزینه --user هنگام اجرا از CLI یا با مشخص کردن USER در Dockerfile.
اجازه ندهید نرم افزار در کانتینرها نصب شود: تقریباً هر حمله ای با کاشت چیزی شروع می شود. از nmap گرفته تا ifconfig تا خود Docker (داخل یک کانتینر)، نصب هر چیزی در یک کانتینر امری عادی بوده است. به همین دلیل، همیشه باید همه پورت های استفاده نشده را مسدود کنید. این همچنین به جلوگیری از انتقال دستورات کنترلی هنگام آلوده شدن دستگاه شما کمک می کند. علاوه بر جلوگیری از نصب برنامه ها، ارزش این را دارد که حداقل تعداد برنامه های مورد نیاز برای تکمیل کار در خود ظرف نصب شده باشد.
از docker.sock محافظت کنید: باید محافظت شود زیرا ارتباط بین کانتینر و خوشه از طریق این سوکت پردازش می شود. از آنجایی که نمی خواهم در این مقاله به جزئیات بپردازم، بخوانید
از Docker Secrets به جای متغیرهای محیطی استفاده کنید: اسرار وجود دارد
اگر مقاله علاقه شما را به کانتینرها برانگیخته است، می توانید به راحتی Docker یا microk8s (نسخه کوچک Kubernetes) را نصب کنید.
بعد از نصب میتونید برید
اگر می خواهید یا نیاز به گذراندن یک دوره جامع در Docker دارید که در آن سخنرانان عملی همه ابزارهای آن را بررسی می کنند: از انتزاعات اولیه تا پارامترهای شبکه، تفاوت های ظریف کار با سیستم عامل های مختلف و زبان های برنامه نویسی، سپس سعی کنید "
منبع: www.habr.com