ストアドプロシージャ悪用
ストアドプロシージャ悪用 とは何ですか?
ストアドプロシージャ悪用特権を持つ、または安全に書かれていないストアドプロシージャを悪用し、任意 SQL や OS コマンド実行、データベース層からの権限昇格を行う攻撃。
ストアドプロシージャは SQL を DB サーバ側にカプセル化し、しばしば高い権限で実行されます。悪用は、MS SQL Server の xp_cmdshell・OPENROWSET・sp_OACreate、Oracle の UTL_FILE・DBMS_SCHEDULER、PostgreSQL の COPY ... PROGRAM などの危険プリミティブを攻撃者が呼べる場合や、独自プロシージャが EXEC/sp_executesql で引数を結合してしまう場合に発生し、信頼されたコード内で SQL インジェクションが再発します。結果として DB サービスアカウントでのコマンド実行、リンクサーバ経由のラテラルムーブメント、ファイル書き込みによる情報持ち出し、アプリ層 ACL の回避が起こります。対策は危険プロシージャの無効化、最小権限、型付き引数付き sp_executesql、EXECUTE 権限の厳格化です。
● 例
- 01
MS SQL Server への SQL インジェクション後、xp_cmdshell で whoami をサービスアカウントで実行する。
- 02
PostgreSQL の COPY ... PROGRAM を独自プロシージャ経由で悪用してリバースシェルを起動する。
● よくある質問
ストアドプロシージャ悪用 とは何ですか?
特権を持つ、または安全に書かれていないストアドプロシージャを悪用し、任意 SQL や OS コマンド実行、データベース層からの権限昇格を行う攻撃。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
ストアドプロシージャ悪用 とはどういう意味ですか?
特権を持つ、または安全に書かれていないストアドプロシージャを悪用し、任意 SQL や OS コマンド実行、データベース層からの権限昇格を行う攻撃。
ストアドプロシージャ悪用 はどのように機能しますか?
ストアドプロシージャは SQL を DB サーバ側にカプセル化し、しばしば高い権限で実行されます。悪用は、MS SQL Server の xp_cmdshell・OPENROWSET・sp_OACreate、Oracle の UTL_FILE・DBMS_SCHEDULER、PostgreSQL の COPY ... PROGRAM などの危険プリミティブを攻撃者が呼べる場合や、独自プロシージャが EXEC/sp_executesql で引数を結合してしまう場合に発生し、信頼されたコード内で SQL インジェクションが再発します。結果として DB サービスアカウントでのコマンド実行、リンクサーバ経由のラテラルムーブメント、ファイル書き込みによる情報持ち出し、アプリ層 ACL の回避が起こります。対策は危険プロシージャの無効化、最小権限、型付き引数付き sp_executesql、EXECUTE 権限の厳格化です。
ストアドプロシージャ悪用 からどのように防御しますか?
ストアドプロシージャ悪用 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
ストアドプロシージャ悪用 の別名は何ですか?
一般的な別名: xp_cmdshell 悪用。