私は常に、さまざまな種類のシステムセキュリティ問題について議論している多くの論文で、攻撃者がそれらを悪用することにより、脆弱性の危険性を強調することで、チューリング完全性を達成できることを常に発見しています。チューリングの完全性とは何ですか?攻撃者によって達成された場合、その背後にある危険は何ですか?
チューリング完全な実行環境を提供するエクスプロイトにより、攻撃者は希望するアルゴリズムを実行できます。それらは、利用可能な命令の数によって制限されません。
Turing machine のシミュレーションに使用できる場合、データ操作ルールのシステム(スクリプト、プログラム、命令セットなど)は、チューリング完了と見なされます。チューリング同値性は、2つのチューリング完全な構成要素の機能は同一であると述べています。言い換えれば、誰かが脆弱なコンピュータでチューリング完全なコードを実行できる場合、リソースの制限を除いて、何でも計算できます。 Church-Turingの論文 は、チューリングマシンがアルゴリズムによっても計算できる任意の値を計算できることを推測しています。ウィキペディアの記事から:
何かがチューリング完全であることを示すには、チューリング完全システムのシミュレーションに使用できることを示すだけで十分です。たとえば、命令型言語は、条件付き分岐(たとえば、 "if"および "goto"ステートメント、または "branch if zero"命令。1つの命令セットコンピューターを参照)および任意の量を変更する機能がある場合、チューリング完全です。メモリ(たとえば、任意の数の変数を維持する機能)。ほとんどの場合これが当てはまるので、有限メモリの制限を無視すれば、ほとんどの命令型言語はチューリング完全です。
これは特に、既存のコードが順不同で実行される悪用手法である [〜#〜] rop [〜#〜] の場合に関連します。十分に複雑な脆弱なプログラムは、チューリングコンプリートROPを引き起こす可能性があります。これは、攻撃者が特定のタイプの計算のみに限定されないことを意味します。
では、なぜ利用されたプログラムの機能だけでなく、computationのような抽象的なものが重要なのでしょうか? rootとして実行しているシェルにアクセスできると想像してみてください。明らかにrootはほとんどすべてのことを実行できますが、シェルで実行できる唯一のことがecho
、id
、およびcd
を実行するとどうなるでしょうか。 if
ステートメント、_mv
、sed
は使用できません...できることはかなり限られています。このシナリオは、チューリングを完了するのに十分なコマンドがないため、チューリングを完了しません。チューリングコンプリートROPチェーンも同様の概念ですが、シェルコマンドを使用するのではなく、マシンコードを使用します。いくつかの命令しか実行できない場合、あまり実行できません。
完全なチューリングとは、基本的に、攻撃者がアプリケーション内で彼らが望むものは何でもできるということです。 任意のコードを実行すると同じです。
チューリング完全なマシンは、情報理論では解決可能な問題を計算できるマシンです。実際には、通常、攻撃者がマシン上で任意のコードを実行できることを意味します。場合によっては、チューリング完全アクセスを実現する他の方法があるかもしれませんが、その影響は同じです。攻撃者にチューリングの完全性を与えない脆弱性は、さらに限定的な問題を引き起こす可能性があります。たとえば、銀行アプリケーションのバッファオーバーフローにより、攻撃者は残高を変更できるが、トランザクション履歴を変更できないことを考慮してください。この種の脆弱性は悪いことです。正しい履歴がトランザクション履歴から再計算される可能性があるため、完全なチューリング完了アクセスほど悪いわけではありません。