بیایید ببینیم چگونه Docker را در یک محیط تولید تقویت و ایمن کنیم.
اگرچه Docker به توسعه دهندگان نرم افزار و مهندسان DevOps اجازه می دهد تا به سرعت برنامه های کاربردی خود را بسازند و مستقر کنند ، اما همچنین بستر مناسبی برای حمله ایجاد می کند.
نحوه محافظت از Docker در لینوکس در موارد زیر:
- نقص پیکربندی
- اجرای کد از راه دور
- سرریز بافر
- جعل تصویر ، و غیره.
قبل از شروع امنیت ، اجازه دهید اصول اولیه را لمس کنیم.
فناوری کانتینر چیست؟
این فناوری به توسعه دهندگان یا مهندسان DevOps اجازه می دهد تا یک برنامه را بسته بندی کنند ، به طوری که بتواند با وابستگی های جدا شده از فرآیندهای دیگر کار کند.
اکنون تعدادی از فن آوری های کانتینر در بازار وجود دارد ، مانند Apache Mesos ، Rocket ، lxc و Docker.
اگرچه همه آنها متعلق به دسته فن آوری های کانتینر هستند ، اما آنها عملکردی دارند. [متفاوت].
بار مثال بین VM و VE
میزبان یک ماشین مجازی کاملاً متفاوت از میزبان محیط مجازی است.
در دستگاه های مجازی ، هر برنامه کانتینر با مجموعه ای از کتابخانه ها و سیستم عامل خاص خود همراه است ، در حالی که برنامه پیش فرض روی میزبان محیط مجازی از این قبیل هر دو lxc و docker هسته لینوکس را به اشتراک می گذارند.
Docker چیست؟
Docker فن آوری کانتینر است که توسط میلیون ها نفر برای ساخت برنامه های وب استفاده می شود و آنها را از یک محیط آزمایش به محیط تولید مستقر می کند.
Docker Engine [19659020] موتور Docker از سه جزء تشکیل شده است.
- سرور. این مؤلفه یک فرایند طولانی یا شبح است که وظیفه مدیریت تصاویر و ظروف را بر عهده دارد.
- API REST: این رابط به Daemon Docker اجازه می دهد تا با ابزار مشتری docker ارتباط برقرار کند.
- ابزار مشتری Docker. ابزار سرویس گیرنده Docker از مؤلفه REST API برای اطلاع رسانی به Daemon Demoner درباره کار با یک برنامه کاربردی کانتینر استفاده می کند.
Docker Trusted Register
Docker Trusted Registry یک راه حل برای ذخیره تصاویر Docker برای تجارت در یک بستر سازمانی است.
از docker-hub.
در حالی که مرکز Docker-hub در ابر میزبانی می شود ، رجیستری قابل اعتماد راه حل ذخیره سازی محلی برای نسخه شرکت Docker است.
Docker Content Trust
Docker Content Trust امکان استفاده از امضای تصویر را فراهم می کند ، ارسال و دریافت به و از ثبت نامهای docker از راه دور ، مانند Docker Hub.
نامهای نام Linux
نامهای لینوکس یک ویژگی هسته لینوکس است که یک برنامه کانتینر یا فرآیندی را که در یک میزبان محیط مجازی از سایر فرایندها جدا می شود ، جدا می کند.
گروه کنترل لینوکس (Cgroups)
گروه های کنترل لینوکس از ویژگی های هسته لینوکس است که به شما امکان می دهد منابعی مانند پردازنده ، پهنای باند شبکه ، حافظه سیستم و غیره را برای پردازش های فعال روی میزبان اختصاص دهید.
قابلیت ها
در لینوکس یک عملکرد امنیتی در زیر سیستم هسته وجود دارد که می تواند نصب شود و به زور را برای محدود کردن روند ممتاز از جمله روند توسط کاربر با UID 1 انجام شده است.
اگرچه فرآیندهای ممتاز یا کاربران می توانند مجوزهای کنترل دسترسی اختیاری را دور بزنند ، اما نمی توانند از [قوانین قوانین قوانین دور بزنند.
اکنون بیایید روی امنیت داکر تمرکز کنیم.
میزبان محافظت از داکر
در این بخش ما می خواهیم نحوه محافظت از میزبان در جایی که Docker است را بررسی کنیم.
اسکن هسته لینوکس
قبل از اینکه docker را روی پلتفرم لینوکس مستقر کنید ، ابتدا باید هسته را بررسی کنید.
چندین ابزار منبع باز مانند Lynis و OpenVAS که می توانید استفاده کنید
پروژه Lynis را با استفاده از دستور git clone ، پروژه Lynis را از Github کپی یا کلون کنید.
git clone https://github.com/CISOfy/lynis.gitociation19659047] تقویت هسته هسته لینوکس
پس از پس از بررسی هسته لینوکس برای آسیب پذیری های سیستم ، می توانید سطح امنیتی دیگری دیگری را با استفاده از grsecurance به هسته اضافه کنید.
این کارکردهای امنیتی زیر را ارائه می دهد:
- جلوگیری از عملکرد سرریز بافر
- / tmp محدودیت های جلوگیری از آسیب پذیری race
- / proc که اطلاعات مربوط به بدهکار را منتقل نمی کند فروشندگان پردازش.
- جلوگیری از اجرای کد دلخواه در هسته و غیره.
در ابتدا می توانید تکه هایی با grsecurance را به صورت رایگان بارگیری کنید و آنها را در هسته فعلی خود اعمال کنید.
اما اکنون آنها رایگان نیستند.
Docker را روی آن نصب کنید. VM
به جای نصب Docker به طور مستقیم بر روی میزبان لینوکس ، می توانید با نصب آن روی یک ماشین مجازی ، یک لایه محافظ اضافی اضافه کنید.
بنابراین ، حتی اگر مشکلی در مورد آسیب پذیری هسته میزبان وجود داشته باشد ، روی ظروف Docker تأثیر نمی گذارد.
حمایت از امتیازات اصلی
پیش فرض Docker برای ایجاد و مدیریت ظروف نیاز به امتیازات اصلی دارد.
یک اسکریپت مخرب می تواند از این سطح حمله استفاده کند تا به سمت سرور میزبان لینوکس برود و در نهایت به پرونده های حساس / پوشه ها ، تصاویر ، گواهی ها و غیره دسترسی پیدا کند. [19659003] برای جلوگیری از این ، می توانیم از دستور زیر استفاده کنیم.
ما می توانیم از ویژگی هایی مانند setgid و setuid امتناع ورزیم تا سایر برنامه ها یا پردازشها نتوانند GID خود را به GID دیگری تغییر دهند ، که می تواند منجر به امتیازات بالا شود.
شما که هستید شما می توانید لیست تعریف ویژگی لینوکس را بررسی کنید.
دستور زیر ظرف سرور وب apache را راه اندازی می کند و قابلیت های setgid و setuid را با –cap-drop حذف می کند تا کانتینر apache نتواند GID و UID خود را به UID و GID مختلف تغییر دهد. [19659039] GID و UID در این زمینه به ترتیب به شناسه گروه و شناسه کاربری اشاره می کنند.
docker run -d --cap-drop SETGID --cap-drop APUU SETUID
کاربر داکر
علاوه بر جلوگیری از برنامه های دیگر یا پردازش ها ، همچنین می توانید یک کاربر را برای مدیریت عملیات Docker ایجاد کنید ، مانند
می توانید با استفاده از دستور زیر ، یک کاربر داکر را اضافه یا ایجاد کنید:
sudo groupadd docker
مدیریت ظروف با نام های نامزدی
نام فضای مکانی ممکن است مانع از اجرای ظروف به عنوان ممتاز شود
ما می توانیم با استفاده از پرونده های / etc / subuid و / etc / subgid همانطور که در شکل زیر نشان داده شده است ، فضای نام را در Docker فعال کنیم.
] کاربر را با استفاده از adduser
پیکربندی فرعی برای کاربر dockremap
sudo sh-c 'echo dockremap: 400000: 65536> / etc / subuid'
را فشار دهید: wq را برای ذخیره و بستن پرونده daemon.json و در آخر راه اندازی مجدد Docker برای فعال کردن مکانهای نام در میزبان Docker.
sudo /etc/init.d/docker راه اندازی مجدد
ایمن سازی Daemon Demoner
همچنین شما باید برای اطمینان از ارتباط بین مشتری ، Daemon Docker را پیکربندی کنید. Docker و Daemon Demoner از طریق TLS.
با استفاده از دستور زیر ، پرونده daemon.json را باز کنید ، محتویات زیر را کپی و جایگذاری کنید (آدرس IP را با یک نسخه معتبر جایگزین کنید) ، نشان داده شده در زیر.
vi daemon.json
{
"اشکال زدایی": غلط ،
"Tls": درست ،
"tlscert": "/var/docker/server.pem" ،
"tlskey": "/var/docker/serverkey.pem" ،
"میزبان": ["tcp://192.168.16.5:2376"]
}
محافظت از مؤلفه های Docker
بیایید نحوه استفاده از ابزاری مانند CodeNotary و سرور اسناد رسمی را برای امضاء تصاویر برای جلوگیری از جعل تصاویر بررسی کنیم.
علاوه بر این ، شما همچنین باید تصاویر را اسکن کنید تا مطمئن شوید که در آنها وجود ندارد.
ما از سرور اسناد رسمی Docker برای امضا و تأیید تصاویر استفاده خواهیم کرد و از موتور Anchore برای اسکن تصاویر برای آسیب پذیری ها استفاده خواهیم کرد.
اسکن تصاویر با استفاده از Notary Server
قبل از استفاده از سرور اسناد رسمی برای امضای تصاویر ، ما باید docker-compose را بارگیری و نصب کنیم.
برای پیکربندی سرور اسناد رسمی از Docker Compose استفاده خواهیم کرد.
sudo curl -L "https://github.com/docker/compose/releases/download/1.25 .4 / docker-compose - $ (uname -s) - $ (uname -m) "-o / usr / local / bin / docker-compose
sudo chmod 700 / usr / local / bin / docker-compose [19659096] اکنون می توانیم سرور اسناد رسمی را از طریق docker-compose نصب کنیم.
git clone https://github.com/theupdateframework/notary.gitociation19659098-03 دستور فوق کلون یا سرور اسناد رسمی را از مخزن
آن را اجرا کنید:
docker-compose build
docker-compose up -d
سپس پیکربندی را کپی کرده و گواهینامه ها را در دایرکتوری محلی خود با استفاده از دستور تست کنید:
mkdir -p ~ / .notary && cp cmd / notary / config.json cmd / notary / root-ca.crt ~ / .notary
اکنون دستور زیر را برای اتصال سرور اسناد رسمی به مشتری داکر اجرا کنید.
صادرات DOCKER_CONTENT_TRUST = 1
صادرات DOCKER_CONTENT_TRUST_SERVER = https: // دفتر اسناد رسمی: 4443 نمایندگی
صادرات زیر
کلید اعتماد docker تولید مایک --dir ~. / Docker / trust
docker trust sign signer add --key / .docker / trust / mike.pub mike mikedem0 / whalesay
سپس می توانید با استفاده از نشانه اعتماد docker mod خود را امضا کنید.
شما می توانید با استفاده از دستورات برچسب docker و برچسب docker ، تصویر را از توپی Docker استخراج کرده و آنرا مچاله کنید.
docker trust sign mikedem0 / nginx: آخرین
برای یادگیری چگونگی استفاده از موتور Anchor برای جستجوی آسیب پذیری ها و Docker Bench Security می توانید اینجا را جستجو کنید تا نقص های پیکربندی را بررسی کنید.