کاوش امنیت (از دست رفته) تاسیسات معمولی Docker و Kubernetes

کاوش امنیت (از دست رفته) تاسیسات معمولی Docker و Kubernetes
من بیش از 20 سال است که در فناوری اطلاعات کار می کنم، اما به نوعی هرگز به کانتینرها نرسیدم. در تئوری، من متوجه شدم که آنها چگونه ساختار یافته اند و چگونه کار می کنند. اما از آنجایی که هرگز در عمل با آنها برخورد نکرده بودم، مطمئن نبودم که دنده های زیر کاپوت آنها دقیقا چگونه می چرخند و می چرخند.

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

برای شروع سریع، در دوره ها ثبت نام کردم کلاه سیاه 2020 با عنوان "از راگ تا ثروت: نفوذ و حفاظت از محیط های Docker Swarm و Kubernetes'.

این دوره که توسط شیلا آ. برتا و سول اوزان تدریس شد، بلافاصله با توضیح نحوه کار کانتینرهای داکر و سفری که هنگام استقرار به کوبرنتس طی می کنند، آغاز شد. این یک کلاس کاملاً عملی بود - دانش‌آموزان باید Docker و microk8s را قبل از کلاس روی دستگاه‌های خود نصب می‌کردند - راهی عالی برای دیدن نحوه تعامل ابزارها با یکدیگر، یافتن نقاط ضعف و مهم‌تر از همه، سعی در مسدود کردن آنها.

متأسفانه، اگرچه دوره ها قول می دادند که بعد از دو روز "شاهزاده" شوم، اما احساس کردم همه چیز تازه شروع شده است و هنوز چیزهای زیادی برای یادگیری دارم.

کاوش امنیت (از دست رفته) تاسیسات معمولی Docker و Kubernetes

قبل از فرو رفتن در مشاهدات والای من، مهم است که توضیح دهم ظرف چیست. در دنیای توسعه، نرمال تلقی می شود که کدهای نوشته شده بر روی ماشین شخصی شما به خوبی کار کند، اما وقتی می خواهید آن را روی سروری در جایی اجرا کنید، به سادگی کار نمی کند. کانتینرها سعی می کنند با ارائه ماشین های مستقلی که می توانید به راحتی از یک سرور به سرور دیگر منتقل کنید، بر این مشکل غلبه کنند و بدانید که همیشه کار می کنند. همانطور که از نام آن پیداست، آنها حاوی کد، کتابخانه ها و سایر نرم افزارهای مورد نیاز برای انجام کار هستند. 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 به جای متغیرهای محیطی استفاده کنید: اسرار وجود دارد از حدود سال 2017. اگرچه این ایمن نیست، اما هنوز بهتر از متغیرهای محیطی برای ارسال داده های مخفی به کانتینر است.

اگر مقاله علاقه شما را به کانتینرها برانگیخته است، می توانید به راحتی Docker یا microk8s (نسخه کوچک Kubernetes) را نصب کنید. اینجا دستورالعمل هایی برای نصب Docker برای Linux و MacOS وجود دارد و اینجا - دستورالعمل نصب microk8s برای ویندوز، لینوکس و MacOS.

بعد از نصب میتونید برید این یک راهنمای شروع سریع است از داکر، گزینه مشابه ارایه شده و برای microk8s.

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

منبع: www.habr.com

اضافه کردن نظر