DockerコンテナーでのPTRACE_ATTACH制約の解決







過去2年間、実稼働環境でのシステムの開発と実行の両方にDockerを広く使用しており、お客様向けの現在の製品はすべて、このコンテナー化システム専用に開発されています。 Dockerはバージョンごとに大幅に変更され、追加機能(Swarm、Compose)とセキュリティを強化し、アプリケーションを制御するための追加ツールの両方を追加することに注意する価値があります。







驚いたことに、先日開発されテストされたコンテナがDockerの現在のバージョンでは機能しないことが最近発見されました。 実際には、コンテナはあまり一般的ではなく、プロセスの動作を分析するためにコンテナ内でstraceユーティリティが使用されていました。 このユーティリティのアプリケーションについては、以前にHabrahabrについて詳しく説明しました。







今日、開発者はついにこの問題のある実装を手に入れました

コンテナをアプリに追加すると、機能しなくなっていることがわかりました。 この動作の理由が何であるかを理解し始めると、strace、特にptraceはプロセスに参加できず、次の形式のエラーを生成することがわかりました。







strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
      
      





ケースは非常にまれであり、解決策は開発者の集合的な精神によって簡単に識別されませんが、非常に多くの異なるヒントが散在しています。 それで問題は何でしたか?







Seccompサブシステム



新しいLinuxカーネルでは、新しいDockerはseccompカーネル関数を使用します。これにより、コンテナー内のシステムコールをブロックできます。 この機能に関するDockerドキュメントはこちらです。 Ptraceは、ブロックされたシステムコールの1つです。 このメカニズムは、Dockerの実行引数--security-opt seccomp=/path/to/file.json



を使用して微調整されます。これにより、許可されるものと許可されないものを記述するファイルを指定できます。 コンテナは保護された環境で動作するため、この機能を完全に無効にします:-- --security-opt seccomp=unconfined









Ptraceの動作



/proc/sys/kernel/yama/ptrace_scope



、ptraceの制限を説明する特定の疑似ファイル/proc/sys/kernel/yama/ptrace_scope



があることを/proc/sys/kernel/yama/ptrace_scope



。 カーネルのドキュメントを見ると、すべてが以前ほど単純ではないことがわかります。 この疑似ファイルの値0〜3は、ptraceの動作を大幅に変更します。









完了することにより







 docker exec -it <container> cat /proc/sys/kernel/yama/ptrace_scope
      
      





ファイルがそれぞれ1に設定されており、関連プロセスではないことがわかりました。straceはトレースされたプロセスに接続できませんでした。 同時に、0を/ proc / sys / kernel / yama / ptrace_scopeに設定しようとしても失敗し、「/ procは読み取り専用です」というメッセージが受信されました。







特権コンテナの起動



特権実行を許可するDockerフラグは、この制限の克服に役立ちました。







 echo 0 > /proc/sys/kernel/yama/ptrace_scope
      
      





その結果、問題は正常に解決されました。 コンテナを起動するためのソリューションと引数の例は、Web ssh プロキシ用のGitHubリポジトリにあります







Linuxカーネルが大幅なセキュリティの改善と追加のセキュリティ設定管理ツールを受け取ることに注意するのは興味深いことでした。これらのツールは、安定した環境で長いライフサイクルにわたって開発するアプリケーション内で絶えず最新の状態を保ち、作業することを習得するのは困難です。 ある晴れた日、あなたはそのような不幸な出来事のおかげで「突然」自分自身を見せた改善の新しい驚くべき世界を発見します。



All Articles