SSTI/サンドボックスエスケープの包括的なまとめ
サーバー側のテンプレートに悪意のあるコードを挿入することで任意のコードを実行させる攻撃手法。サーバー側テンプレートエンジンがテンプレートをレンダリングする際、ユーザー入力を適切にフィルタリングまたはエスケープしないと、攻撃者は悪意のある入力を構築してコードを挿入し、任意のコマンドを実行することができる。
サンドボックスエスケープとは、攻撃者がサンドボックス環境内の脆弱性または制限を悪用してサンドボックスを抜け出し、より高い権限を取得したり、より危険な操作を実行したりする攻撃手法のことです。サンドボックスは、プログラムのアクセス権を制限して、悪意のあるコードがシステムに損害を与えるのを防ぐための安全メカニズムです。
以下にSSTI/サンドボックスエスケープ攻撃の詳細まとめを紹介する。
- SSTI の攻撃手法
- テンプレートエンジンがテンプレート構文をユーザー入力に挿入し、攻撃者はそれを悪用していました。
- テンプレートインジェクションにより、攻撃者は任意のコードを実行できます。ファイルの読み込みやシステムコマンドの実行などが可能です。
- 襲撃シーン
- Webアプリケーション開発フレームワーク(Django、Flaskなど)、メールテンプレートなど、テンプレートエンジンが一般的に使用される場面があります。
- テンプレートエンジンによってテンプレートインジェクションの処理行動が異なることに留意し、攻撃者は対象環境のテンプレートエンジンの詳細を理解する必要がある。
- 攻撃の手順:
- ターゲット情報の収集:攻撃者はターゲットシステムで利用されているテンプレートエンジンと構文、そして既知の脆弱性があるかどうかを確認する必要があります。
- 悪意のある入力を生成する:攻撃者は悪意のある入力を生成することで、悪意のあるコードをテンプレートに挿入します。
- 悪意あるコードの実行:テンプレート エンジンはテンプレートをレンダリングするとき、悪意あるコードを有効なコードとして実行し、攻撃者は悪意あるコードを介して任意のコマンドを実行できます。
- 防御策
- 入出カの検証とフィルタリング:ユーザー入出カを検証してフィルタリングし、入出されたデータが期待される形式と仕様に適合することを確認する。
- 出力エスケープ:テンプレートエンジンからページに出力されるデータをエスケープし、悪意のあるコードの実行を防ぐこと。
- 権限最小の原則:サービス端の権限を最小限に設定し、攻撃者が利用する可能性のある操作やリソースを制限する。
- アップデート&パッチ:テンプレートエンジンや関連するコンポーネントの脆弱性については、タイムリーにアップデートやパッチを適用して安全を確保する。
まとめ:SSTI攻撃とサンドボックスエスケープは、攻撃者が悪意のあるコードを挿入して任意のコマンドを実行したりサンドボックスの制限を抜け出したりする一般的なWebセキュリティの脅威です。これらの攻撃を防ぐために、開発者はユーザー入力を検証しフィルタリングしたり、出力をエスケープしたり、脆弱性を修正する更新を適時に適用する必要があります。