web-dev-qa-db-ja.com

シャドウスタックを保護する方法

コンピューターのセキュリティでは、制御フローの整合性を確保するために多くの保護メカニズムが使用されていることがわかりました。これらのメカニズムの1つがシャドウスタックです。

プリンシパルは非常に簡単で、関数の戻りアドレスの整合性を保証します。実際、スタックにある戻りアドレスは、シャドウスタックにプッシュされたものと比較されます。

Shadowスタックにはいくつかの実装があり、そのうちの1つは 関数のエピローグとプロローグの変更 (これをShadowスタックに書き込み、チェックのためにロードするため)で構成されています。

質問は次のとおりです:ユーザー空間の関数がシャドウスタックへの書き込みを許可されている場合、攻撃者がシャドウスタックを書き込み/変更することをどのように防ぐことができますか?

1
Ahmed

完全に保護することはできませんが、シャドウスタックの目的ではありません。シャドウスタックは、任意のコードではなく、ローカル変数(スタック上の変数)のバッファオーバーフローによるスタックの変更を防止します。攻撃者がすでに任意のコードを実行できる場合、それはゲームオーバーです。

1
Peter Harmann

シャドウスタックの保護は非常に費用がかかります。保護はハードウェアレベルで行うことができます。あなたの質問に答えるために、ここでシャドウスタックの保護についてもっと見つけることができます:

https://people.eecs.berkeley.edu/~daw/papers/shadow-asiaccs15.pdf

T。 H. Dang、P。Maniatis、およびD. Wagner。シャドウスタックとスタックカナリアのパフォーマンスコスト。第10回情報、コンピューター、通信セキュリティに関するACMシンポジウム、ASIACCS、2015年

https://www.ethz.ch/content/dam/ethz/special-interest/infk/inst-cs/lst-dam/documents/Publications/DIMVA_2015.pdf

M。 Payer、A。Barresi、およびT. R. Gross。バイナリ強化による細粒度の制御フローの完全性。侵入とマルウェアの検出と脆弱性評価に関する第12回会議、DIMVA、2015年

1
Soufiane Tahiri