web-dev-qa-db-ja.com

端末でのエスケープシーケンス攻撃を回避する方法

読み取り CVE-2009-4487の詳細(ログファイルのエスケープシーケンスの危険性について) 少し驚いています。

引用するには CVE-2009-4487

nginx 0.7.64は、印刷不可能な文字をサニタイズせずにログファイルにデータを書き込みます。これにより、リモートの攻撃者が端末エミュレータのエスケープシーケンスを含むHTTPリクエストを介してウィンドウのタイトルを変更したり、任意のコマンドを実行したり、ファイルを上書きしたりする可能性があります。

明らかに、これは実際にはnginxのセキュリティホールではなく、ターミナルエミュレータにあります。

確かに、おそらくターミナルへのログファイルのcatingは偶然にのみ発生しますが、ログファイルのgrepingは非常に一般的です。 lessおそらくエスケープシーケンスをサニタイズしますが、エスケープシーケンスを変更しないシェルコマンドを知っているのは...

私は ワニスの応答 に同意する傾向があります:

一般にターミナルレスポンスエスケープの知恵は定期的に疑問視されてきましたが、主要な端末エミュレーションプログラムはどれも、これらのシーケンスを破棄するのに適しているとは考えていません。 [..]ログファイルを書き込むすべてのプログラムを非難するのではなく、セキュリティの観点から、端末エミュレーションプログラムに愚かなことをやめて、この問題や他のセキュリティ問題を一度修正するほうがはるかに生産的ですそしてすべてのために。

したがって、私の質問:

コマンドを実行したり、エスケープシーケンスを使用してファイルを上書きしたりできないように、xtermをどのように保護できますか?

この攻撃に対して保護されているXのターミナルエミュレーターは何ですか?

29
maxschlepzig

VT100端末(最近のすべての端末エミュレータはある程度エミュレートします)は、問題のあるコマンドをいくつかサポートしていましたが、最近のエミュレータまたはディストリビューションは、問題が多く有用性の低いコマンドを無効にします。以下は、潜在的に危険な エスケープシーケンス の完全なリストではありません(単に、何らかの方法で表示を読みにくくするものは含まれていません)。

  • RxvtおよびEtermの任意のログファイルコマンド H.D。Mooreによって報告 。これらは確かに主要なバグであり、幸い長い間修正されています。
  • ENQCtrl+E)によって呼び出されるアンサーバックコマンドは、Return Terminal Statusとも呼ばれます。これにより、ユーザーが入力したかのようにテキストが端末に挿入されます。ただし、このテキストは攻撃者の制御下にありません。これは端末自体の名前であり、通常はxtermまたはscreenのような名前です。私のシステム(Debian squeeze)では、xtermはデフォルトで空の文字列を返します(これはanswerbackStringリソースによって制御されます)。
  • デバイス属性の送信コマンド、ESC [ cなど。端末はESC [ … cで応答します(ここでには数字とASCII句読点のみを含めることができます)。これは一部の端末機能を照会する方法です。古いアプリケーションで使用されます。ここでも、端末の応答はユーザー入力と区別できませんが、攻撃者の制御下にありません。制御シーケンスはファンクションキーのように見える可能性がありますが、ユーザーが通常とは異なる構成の場合のみ私が遭遇した設定には、端末応答のプレフィックスである有効なファンクションキーエスケープシーケンスがあります)。
  • さまざまなデバイス制御機能(ESC Pで始まるDCSエスケープ)。
    • 一般的なターミナルエミュレータでDECUDK(ユーザー定義キーを設定)を使用してどのような害を与えることができるのかわかりません。
    • DECRQSS(リクエストステータス文字列)は、端末がエスケープシーケンスで応答するもう1つのコマンドで、今回は\ePで始まります。 \ePは有効なキーであるため、これは問題になる可能性があります(Alt+Shift+P)。
    • Xtermには、termcap文字列を取得および設定するESC P + p …およびESC P + q …という2つの実験的な機能があります。説明から、これは少なくともファンクションキーの効果を変更するために使用できます。
  • いくつかのステータスレポートコマンド:ESC [ … n(デバイスステータスレポート)。端末はエスケープシーケンスで応答します。これらのエスケープシーケンスのほとんどは、ファンクションキーのエスケープシーケンスに対応していません。問題があるように見えます:ESC [ 6 nへのレポートはESC [ x ; y Rの形式です。ここで、xyは数字列であり、これは次のようになります。 F3 いくつかの修飾子付き。
  • ウィンドウ操作コマンドESC [ … t
    • これらのいくつかは、xtermウィンドウのサイズ変更、アイコン化などを可能にするため、混乱を招きます。
    • これらのいくつかは、端末をエスケープシーケンスのいずれかで応答させます。これらのエスケープシーケンスのほとんどは危険性が低いように見えますが、2つの危険なコマンドがあります。ESC [ 2 0 tおよびESC [ 2 1 tへの回答には、それぞれターミナルウィンドウのアイコンラベルとタイトルが含まれており、攻撃者はこれらを選択できます。
    • 少なくともDebian squeezeでは、xtermはデフォルトでこれらのコマンドを無視します。これらは、allowWindowOpsリソースを設定するか、disallowedWindowOpsリソースを介して選択的に有効にすることができます。 Ubuntu 10.04のGnome-terminalは、デフォルトでタイトルのアンサーバックも実装しています。他の端末やバージョンは確認していません。
  • 端末のタイトルまたはアイコン名を設定するコマンド。 xtermおよびその他のほとんどのX端末では、これらはESC ] digit ; title ESC \です。画面のエスケープシーケンスはESC k title ESC \です。これらのコマンドに対する懸念は過大評価されています。ある程度のいたずらは許されますが、どのWebページにも同じ問題があります。クラスではなくタイトルのみに基づいてウィンドウを操作することは、信頼されていない当事者によって名前が指定されたファイルを開くこと、またはシェルスクリプトで変数の展開を引用しないこと、または狂犬病を鼻でなでることに似ています。 —噛まれても文句を言わないでください。

ワニスの反応は不誠実だと思う。それは、責任をシフトしようとしている、またはセキュリティナチモードのいずれかであるように感じます(本物のセキュリティの問題であるかどうかにかかわらず、セキュリティ上の懸念は機能をブラックボール化することを正当化します)。

一般的にターミナルレスポンスエスケープの知恵は定期的に疑問視されてきましたが、主要な端末エミュレーションプログラムのどれもこれらのシーケンスを破棄するのに適しているとは見なされていません。 (…)
ログファイルを書き込むすべてのプログラムを非難する代わりに、セキュリティの観点から、端末エミュレーションプログラムに愚かなことをやめて、この問題やその他のセキュリティ問題を修正するほうがはるかに生産的ですこれを最後にきっぱりと。

アンサーバックの多くは便利な機能です。アプリケーションは、カーソルの位置やウィンドウサイズなどを知る必要があります。ウィンドウのタイトルを設定することも非常に便利です。これらのioctl呼び出しに完全に依存することは可能ですが、これには、これらのioctl呼び出しを行い、ファイル記述子に渡すUNIXスタイルのテキストに変換するための追加のコードとユーティリティが必要になります。これらのインターフェースを変更することは、多くの作業であり、ほとんどメリットがありません。

テキストファイルには、制御文字などの非印刷文字を含めることはできません。通常、ログファイルはテキストファイルであると想定されます。ログファイルには制御文字を含めないでください。

ファイルにエスケープシーケンスが含まれていることが心配な場合は、エディターでファイルを開くか、lessを使用して-rまたは-Rオプションなしで表示するか、cat -v

それほど単純ではありません。多くの人がxtermタイトルをプロンプトなどの一部として設定するためのコードを持っています。非常に良い理由で(間違った端末ウィンドウから間違ったマシンをshutdown !)。したがって、適切に修正するには、セキュリティコンテキストを導入する必要があり、それにより、シェルとターミナルエミュレータの間のやり取り、そしておそらく人々のドットファイルも非常に複雑にします。または、端末に表示される可能性のあるものをすべてサニタイズする低賃料のソリューションを使用することもできます。これにより、制御文字のエスケープが大幅に削減されます。これはおそらく、目立たせるためだけに実行する必要があります(ログファイルでは、シェルコードを挿入しようとしている人を示している可能性があるため)。

(余談ですが、 punycode は同じ種類の問題のより深刻なインスタンスですが、それでも公式の標準になっています。セキュリティが、制御できない安全でない設計を軽減することになる場合もあります。)

5
geekosaur