「AcceptEnv *」が安全でないと見なされるのはなぜですか?


12

では/etc/ssh/sshd_config、と呼ばれるオプションがありAcceptEnv、SSHクライアントは、環境変数を送信することができます。多数の環境変数を送信できる必要があります。これらはクライアントからのすべての接続で変更されるため、サーバー上のログインスクリプトにそれらを配置することはより困難になります。

私はそれ"AcceptEnv *"が安全でないと読んだ。配置するように設定されているすべての環境変数のリストを取得しようとする前に、その理由を理解したいと思います。

なぜ安全でないと考えられますか?例を入手できますか?

回答:


11

環境処理を有効にすると、ユーザーはLD_PRELOADなどのメカニズムを使用して、一部の構成でアクセス制限をバイパスできます。

sshd_configのマニュアルページのすべてのバージョンがこれに言及しているわけではありません。環境変数が事前に変更され、これによって指定された新しいライブラリを使用して特定の特権プロセスが実行されると、問題が発生する可能性があります。

http://www.dankalia.com/tutor/01005/0100501004.htmを見て、「LD_PRELOAD Exploit」を検索してください。申し訳ありませんが、ページにはアンカーリンクがありません。

このStackOverflowの質問も参照してください「LD_PRELOADのトリックは何が?

接続後に環境変数を設定することは問題ありませんが、それらの変数がAcceptEnvによって設定されたsshデーモンによって解釈されると、悪いことが起こる可能性があります。


1
ログイン後に変数を手動で設定する場合とどう違いますか?
ジョセフガービン

1
@JosephGarvin、一部のシステムではシェルが制限されているか、「特定の」コマンドでは許可されない特定のコマンドのみが許可されてます。したがって、懸念事項は、そのようなセキュリティ対策を回避できる手段を提供することです。
チャールズダフィー

0

環境変数を受け入れないでください。

最近出てきたShellshockエクスプロイトをご覧ください。環境変数を受け入れると、本当に厄介なエクスプロイトが開かれます。


1
あなたは恐怖IMOを広めています。心配しているのなら、なぜ彼らはSSHアクセスを持っているのですか?また、環境変数がシェルまたは関数内にある場合、環境変数の設定を止めることはできません。そのエクスプロイトは、承認されたシェルアクセスではなく、nginxのようなものを介した不正なシェルアクセスに関するものです。
ジョードンベッドウェル14年

とにかく、少なくとも1つのenvを受け入れます。TERMという名前の変数。PRINTER、EDITOR、PAGERなどの他の変数を受け入れるための有効なニーズがある場合があります...
ibre5041

@JordonBedwell、すべてのSSH接続シェルアクセスを許可されているわけではありません。単一の特定のコマンド(そのキーの所有者のID、およびその他の詳細を焼き付けたもの)のみを実行できるSSHキーを使用した認証のみのアカウントがある複数のシステムがあります。
チャールズダフィー

...とはいえ、2017年現在、ShellShockは非常に誇張されていることに同意します。現在の実装では、エクスポートされた関数を生成するには、環境変数のだけでなくその名前も制御する必要があります(シェルの起動中にエクスポートされた関数を評価するプロセスは、インジェクション攻撃を受けにくくなります)。
チャールズダフィー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.