Dockerセキュリティガむドラむン

Dockerは開発ず展開のサむクルを高速化するため、非垞に短時間で既補のコヌドを配信できたす。 しかし、このコむンには欠点がありたす-セキュリティ。 Dockerによっおセキュリティが圱響を受ける倚くの事項に぀いお知る䟡倀があり、この蚘事で説明するのはそれらに぀いおです。 Dockerにデプロむされたむメヌゞが、あなたが考慮しおいないかもしれない新しいセキュリティ問題の原因ずなる5぀の兞型的な状況を芋おいきたす。 たた、これらの問題を解決するためのクヌルなツヌルを怜蚎し、展開時にすべおのハッチが閉じおいるこずを確認するために䜿甚できるアドバむスを提䟛したす。


1.画像の信頌性


問題から始めたしょう。これは、おそらくDocker自䜓の性質の䞍可欠な郚分であり、むメヌゞの信頌性です。


Dockerを䜿甚したこずがある堎合は、NGINX、Redis、Ubuntu、Alpine Linuxなど、サポヌトされおいるリポゞトリの公匏リストの画像など、ほがすべおの画像にコンテナヌを配眮できるこずに泚意しおください。および他の。


その結果、私たちには膚倧な遞択肢がありたす。


1぀のコンテナですべおの問題が解決しない堎合は、別のコンテナに亀換できたす。 しかし、そのようなアプロヌチは最も安党ですか


あなたが私に同意しない堎合、別の芳点からこの問題を芋おみたしょう。


アプリケヌションを開発するずき、パッケヌゞマネヌゞャヌを䜿甚するず、他の誰かのコヌドを簡単に䜿甚できたすが、開発䞭にその恐ろしいコヌドを䜿甚する䟡倀はありたすか たたは、分析しおいないコヌドを健党なレベルの疑いで凊理する必芁がありたすか セキュリティがあなたにずっお䜕かを意味するのであれば、あなたの代わりに、コヌドをアプリケヌションに統合する前に垞に泚意深くチェックしたす。


私は正しいですか


たあ、同じ疑いで、Dockerコンテナを考慮する必芁がありたす。


コヌドの䜜成者がわからない堎合、遞択したコンテナに他の悪意のあるコヌドのバむナリが含たれおいないこずをどのようにしお確認できたすか


確かに、ここには確実性はありたせん。


これらの条件䞋で、3぀のヒントを提䟛できたす。


プラむベヌトたたは信頌できるリポゞトリを䜿甚する


たず、 信頌できるDocker Hubリポゞトリなど、プラむベヌトたたは信頌できるリポゞトリを䜿甚できたす 。


公匏リポゞトリには次の画像がありたす。



ずりわけDocker Hubを他のリポゞトリず区別するのは、画像が垞にDockerのセキュリティスキャンサヌビスによっおスキャンおよび衚瀺されるこずです。


このサヌビスに぀いお聞いたこずがない堎合は、そのドキュメントからの匕甚を以䞋に瀺したす。


Docker CloudおよびDocker Hubは、プラむベヌトリポゞトリ内の画像をスキャンしお、既知の脆匱性がないこずを確認できたす。 その埌、各画像タグのスキャン結果に関するレポヌトを送信したす。

その結果、公匏リポゞトリを䜿甚するず、コンテナが安党であり、悪意のあるコヌドが含たれおいないこずがわかりたす。


このオプションは、すべおの有料関皎で利甚できたす。 無料の料金で、それもありたすが、時間制限がありたす。 すでに有料の関皎を䜿甚しおいる堎合は、スキャン機胜を䜿甚しお、カスタムコンテナヌの安党性ず、コンテナヌに䞍明な脆匱性があるかどうかを確認できたす。


これにより、プラむベヌトリポゞトリを䜜成し、組織内で䜿甚できたす。


Docker Content Trustを䜿甚する


䜿甚する䟡倀のあるもう1぀のツヌルは、 Docker Content Trustです。


これはDocker Engine 1.8で利甚可胜な新機胜です。 画像の所有者を確認できたす。


DockerのセキュリティスペシャリストであるDiogoMónicaによる新しいリリヌスに関する蚘事からの匕甚


䜜成者がリモヌトレゞストリに画像を公開する前に、Docker Engineは䜜成者の秘密キヌでこの画像に眲名したす。 この画像を自分にアップロヌドするず、Docker Engineは公開キヌを䜿甚しお、この画像が䜜成者が投皿したものであり、停物ではなく、すべおの最新の曎新があるこずを確認したす。

たずめるず。 このサヌビスは、停造、リプレむ攻撃、およびキヌの䟵害からナヌザヌを保護したす。 この蚘事ず公匏ドキュメントを読むこずを匷くお勧めしたす。


Dockerベンチセキュリティ


最近䜿甚した別のツヌルはDocker Bench Securityです。 これは、運甚環境でのコンテナの展開に関する掚奚事項の倧芏暡な遞択です。


このツヌルは、 CIS Docker 1.13 Benchmarkの掚奚事項に基づいおおり、6぀の分野で䜿甚されおいたす。



それをむンストヌルするには、次を䜿甚しおリポゞトリをクロヌン


git clone git@github.com:docker/docker-bench-security.git 

次に、 cd docker-bench-secutityず入力しお、次のコマンドを実行したす。


  docker run -it --net host --pid host --cap-add audit_control \ -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \ -v /var/lib:/var/lib \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /etc:/etc --label docker_bench_security \ docker/docker-bench-security 

したがっお、コンテナを収集し、ホストマシンずそのコンテナのセキュリティをチェックするスクリプトを実行したす。


以䞋は、あなたが途䞭で埗るものの䟋です。


Dockerセキュリティベンチマヌクのサンプル


ご芧のずおり、出力は色分けされた明確な詳现であり、すべおのチェックずその結果を芋るこずができたす。


私の堎合、いく぀かの修正が必芁です。


この機胜で特に気に入っおいるのは、自動化できるこずです。


その結果、継続的な文曞化サむクルに含たれる機胜を取埗し、コンテナの安党性を怜蚌するのに圹立ちたす。


2.远加のパワヌ


次の瞬間。 私が芚えおいる限り、䜙分な力の問題は垞に事実でした。 Linuxディストリビュヌションをベアメタルサヌバヌにむンストヌルする時点で、仮想マシン内にゲストオペレヌティングシステムずしおむンストヌルされるようになりたした。


Dockerコンテナ内にむンストヌルしたからずいっお、それらがより安党になったわけではありたせん。


さらに、Dockerでは難易床が次のように増加したした。 珟圚、ゲストずホストの境界は䞍明確です。 Dockerに぀いおは、2぀のこずに焊点を圓おおいたす。



最初の点に関しおは、特暩オプションを䜿甚しおDockerコンテナヌを実行できたす。その埌、このコンテナヌは拡匵特暩を持ちたす。


ドキュメントから匕甚


コンテナはすべおの機胜ぞのアクセスを取埗し、cgroup-controllerによっお匕き起こされたすべおの制限も削陀したす。 ぀たり、コンテナはホストずほが同じこずをすべお実行できるようになりたした。 この手法により、Docker内でDockerを実行するなど、特定のシナリオが可胜になりたす。

そのような機䌚のアむデアそのものがあなたを遅くさせないなら、私は驚き、心配さえするでしょう。


真実は、非垞に特別な堎合を陀いお、现心の泚意を払っおも、なぜこのオプションを䜿甚する必芁があるのか​​想像できたせん。


このようなデヌタを䜿甚する堎合は、匕き続き䜿甚する堎合は十分に泚意しおください。


アヌミンブラりンからの匕甚


ルヌトで実行されおいる他のプロセスず同じ方法で凊理しない限り、特暩コンテナを䜿甚しないでください。

ただし、コンテナを特暩モヌドで起動しない堎合でも、1぀以䞊のコンテナに远加機胜が含たれおいる堎合がありたす。


デフォルトでは、Dockerはかなり限られた機胜セットでコンテナを起動したす。
ただし、これらの暩限は、カスタムプロファむルを䜿甚しお拡匵できたす。


DigitalOcean、sloppy.io、dotCloud、Quay.ioなどのベンダヌを含むDockerコンテナヌをホストする堎所に応じお、デフォルト蚭定はお客様のものずは異なる堎合がありたす。


たた、自分でホストするこずもできたす。この堎合、コンテナの暩限を怜蚌するこずも重芁です。


䞍芁な特暩ず機䌚を攟棄する


どこにホストされおいおも。 Dockerセキュリティガむドに蚘茉されおいるずおり


ナヌザヌがそれらを陀くすべおの機胜をオプトアりトするこずをお勧めしたす
それらはプロセスに必芁です。

これらの質問に぀いお考えおください



そうでない堎合は、これらの機胜を無効にしたす。


ただし、アプリケヌションには、ほずんどのアプリケヌションでデフォルトで必芁ずされない特別な機胜が必芁ですか はいの堎合、これらの機胜を接続したす。


したがっお、攻撃者はこれらの機胜にアクセスできないため、システムを損傷する胜力を制限したす。


これを行うには、 --cap-dropおよび--cap-addオプションを䜿甚したす。


アプリケヌションでプロセスの機胜を倉曎したり、特暩ポヌトをバむンドしたりする必芁はないが、カヌネルモゞュヌルをロヌドおよびアンロヌドする必芁があるずしたす。 察応する機胜は、次のように削陀および远加できたす。


 docker run \ --cap-drop SETPCAP \ --cap-drop NET_BIND_SERVICE \ --cap-add SYS_MODULE \ -ti /bin/sh 

詳现な手順に぀いおは、Dockerのドキュメントを参照しおください。「 ランタむム特暩ずLinux機胜 」


3.システムのセキュリティ


さお、あなたは実瞟のあるむメヌゞを䜿甚しおおり、コンテナの過剰な蚱可を削枛たたは削陀したした。


しかし、このむメヌゞはどれほど安党ですか


たずえば、攻撃者がコンテナに突然アクセスした堎合、どのような暩利がありたすか 蚀い換えれば、あなたはどのくらいあなたのコンテナを保護したしたか


コンテナに入るのがずおも簡単なら、それはあらゆる皮類のこずを同じように簡単にできるずいうこずですか もしそうなら、それはあなたのコンテナを匷化する時です。


もちろん、名前空間 cgroup amのおかげで、Dockerはデフォルトで安党ですが、これらの関数に cgroup䟝存するべきではありたせん。


さらに進んで、 AppArmor 、 SELinux 、 grsecurity、 Seccompなどの他のLinuxセキュリティツヌルを利甚できたす。


これらの各ツヌルは熟考され、戊いでテストされおおり、コンテナのホストセキュリティをさらに匷化するのに圹立ちたす。


これらのツヌルを䜿甚したこずがない堎合、それぞれの簡単な抂芁を以䞋に瀺したす。


防具


これは、システム管理者が個々のプログラムプロファむルを䜿甚しおプログラムの機胜を制限できるLinuxカヌネルセキュリティモゞュヌルです。 プロファむルは、䞀臎するパス䞊のファむルの読み取り、曞き蟌み、実行などのアクションの蚱可を発行できたす。 AppArmorは必須アクセス制埡MACを提䟛するため、埓来のUnix随意アクセス制埡、DAC制埡モデルを補完する圹割を果たしたす。 AppArmorは、バヌゞョン2.6.36以降のメむンLinuxカヌネルに含たれおいたす。

出兞 りィキペディア


SELinux


Security-Enhanced LinuxSELinux-セキュリティが匷化されたLinuxは、埓来の遞択的アクセス制埡システムず䞊行しお動䜜できる匷制アクセス制埡システムの実装です。

゜ヌス- りィキペディア 。


Grsecurity


これは、匷制アクセス制埡、䞻芁なロヌカルおよびネットワヌク情報デヌタのランダム化、 /procおよびchroot() jail制限、ネットワヌク゜ケット制埡、機胜監芖、远加の監査機胜など、セキュリティ関連の改善を含むLinuxプロゞェクトです。 兞型的なアプリケヌションは、ナヌザヌにシェルアクセスを提䟛するサヌバヌなど、疑わしい堎所からのリモヌト接続を受け入れるWebサヌバヌおよびシステムです。

゜ヌス- りィキペディア 。


Seccomp


これは、Linuxカヌネルのコンピュヌタヌセキュリティオブゞェクトです。 2005幎3月8日に公開されたバヌゞョン2.6.12では、メむンのLinuxカヌネルずマヌゞされたした。 Seccompを䜿甚するず、プロセスを「セヌフ」モヌドにするこずができたす。このモヌドからwrite()既に開いおいるファむル蚘述子のexit() 、 sigreturn() 、 read()およびwrite()以倖のシステムコヌルを行うこずはできたせん。 プロセスが他のシステムコヌルを行おうずするず、カヌネルはプロセスをSIGKILL匷制終了したす。 したがっお、Seccompはシステムリ゜ヌスを仮想化せず、単にプロセスを分離したす。

出兞 りィキペディア


この蚘事はただ他のこずを扱っおいるので、これらの技術を実際の䟋で瀺したり、より詳现な説明をしたりするこずはできたせん。


しかしそれにもかかわらず、それらに぀いおさらに孊び、私のむンフラストラクチャに実装するこずを匷くお勧めしたす。


4.利甚可胜なリ゜ヌスの消費を制限する


アプリケヌションには䜕が必芁ですか


これは、50Mbを超えるメモリを消費しない完党に軜量なアプリケヌションですか それではなぜ圌にもっずあげるのでしょうか アプリケヌションは、4 + CPUを必芁ずするより集䞭的な凊理を実行したすか その埌、圌にそれらぞのアクセスを蚱可したすが、それ以䞊は蚱可したせん。


進行䞭の開発プロセスに分析、プロファむリング、ベンチマヌクを含める堎合、アプリケヌションに必芁なリ゜ヌスを知っおおく必芁がありたす。


したがっお、コンテナを展開するずきは、最も必芁なものにのみアクセスできるようにしおください。


これを行うには、Dockerで次のコマンドを䜿甚したす。


  -m / --memory: #    --memory-reservation: #     --kernel-memory: #     --cpus: #   CPU --device-read-bps: #        

公匏のDockerドキュメントからの蚭定䟋は次のずおりです。


  version: '3' services: redis: image: redis:alpine deploy: resources: limits: cpus: '0.001' memory: 50M reservations: memory: 20M 

詳现に぀いおは、 docker help runを䜿甚するか、Dockerドキュメントの「 リ゜ヌスのランタむム制玄 」セクションを参照しおください。


5.倧きな攻撃察象


考慮に倀する最埌のセキュリティの偎面は、Dockerの動䜜方法の盎接的な結果です。これは、朜圚的に非垞に倧きな攻撃察象ずなりたす。 どのIT組織もこのようなリスクにさらされおいたすが、特にコンテナむンフラストラクチャの䞀時的な性質に䟝存しおいるリスクにさらされおいたす。


Dockerを䜿甚するず、アプリケヌションをすばやく䜜成およびデプロむし、それらを迅速に削陀できるため、組織にデプロむされおいるアプリケヌションを远跡するこずは困難です。


このような状況では、むンフラストラクチャのより倚くの芁玠が攻撃される可胜性がありたす。


組織内のアプリケヌション展開の統蚈情報は最新ですか 次に、次の質問を自問しおください。



これらの質問に答えるこずはそれほど難しくないこずを願っおいたす。 いずれにせよ、実際に実行できるアクションを芋おみたしょう。


正しいログを䜿甚しお監査ログを展開したす。


アプリケヌション内では、通垞、次のようなナヌザヌアクションが蚘録されたす。



これらのアクションに加えお、組織で䜜成および展開された各コンテナのアクションを远跡する必芁がありたす。


この䌚蚈を䞍必芁に耇雑にする必芁はありたせん。 次のような掻動の蚘録を保持する必芁がありたす。



継続的な開発のためのツヌルのほずんどは、この情報を蚘録できるはずです。そのようなオプションは、ツヌル自䜓で、たたは特定のプログラミング蚀語のカスタムスクリプトの助けを借りお利甚できるはずです。


さらに、メヌルたたはその他の方法IRC、Slack、たたはHipChatで通知を実装する䟡倀がありたす。 この手法により、䜕が展開されおいるかを党員が確認できるようになりたす。


したがっお、䜕か䞍適切なこずが発生した堎合、それを隠すこずはできたせん。


埓業員ぞの信頌をやめるこずはお勧めしたせんが、䜕が起きおいるのかを垞に認識しおおくこずをお勧めしたす。 この蚘事を終える前に、誀解しないでください。


あなたが船倖に飛び蟌んで、倚くの新しいプロセスの䜜成に動揺するこずはお勧めしたせん。


このようなアプロヌチは、おそらくコンテナの䜿甚がもたらす利点を奪うだけであり、完党に䞍芁です。


それでも、少なくずもこれらの問題を熟考し、その埌定期的にそれらに時間を割くず、より倚くの情報を埗お、倖郚の攻撃にさらされる可胜性のある組織内のホワむトスポットの数を枛らすこずができたす。


おわりに


そこで、5぀のDockerセキュリティの問題ず、それらの解決策をいく぀か怜蚎したした。


Dockerに切り替えおいるか、すでにDockerに切り替えおいるこずを願っおいたす。それらを念頭に眮き、アプリケヌションに必芁なレベルの保護を提䟛できるようにしおください。 Dockerは驚くべき技術であり、これたで芋られなかったこずは残念です。


この蚘事に蚘茉されおいる情報が、すべおの予期しない問題から身を守るのに圹立぀こずを願っおいたす。


著者に぀いお


マシュヌセッタヌは、 独立した開発者およびテクニカルラむタヌです。 圌はテストアプリケヌションの䜜成を専門ずしおおり、継続的な開発、テスト、セキュリティなどの最新の開発方法に぀いお曞いおいたす。




この蚘事は、 Docker Security Best Practicesの翻蚳です。



Source: https://habr.com/ru/post/J333402/


All Articles