web-dev-qa-db-ja.com

Ole Automation Procedures Server Configurationオプションを有効にすることによるセキュリティの悪用の例は何ですか?

SQL Serverで Ole Automation Procedures Server Configuration Option を有効にする必要がありますが、そうすることでどのようなセキュリティリスクが発生するのか疑問に思っていましたか?

このオプションを有効にしてセキュリティを利用する方法の例は何ですか?

4
J.D.

私はそれを搾取の観点から見るつもりはないと思います。これは、(同じセキュリティ問題ではないにしても)_xp_cmdshell_によく似ています。これらは、有効になっている場合に実行できる内容の点で広く開かれており、SQL Serverの外部に到達するプロセスの場合、SQL Serverを実行しているサービスアカウントのセキュリティコンテキストを使用します(ただし、_xp_cmdshell_には少なくともsysadminユーザー以外のプロキシアカウントを設定するオプション)。

ただし、_sp_OA*_プロシージャを実行する(または明示的にsysadmin権限を付与する)ためには、EXECUTEインスタンスレベルのロールに属している必要があるため、少なくともすべての使用を、次のストアドプロシージャの範囲内で維持できます。 Module Signing を使用して昇格されたアクセス許可を取得します(はい、_WITH EXECUTE AS N'dbo'_の指定は、dboユーザーに関連付けられたログインがsysadminロールにあり、モジュール署名がより良い)。

@ kevinskyの回答 のCIS引用文を見る(つまり、「」これらは、SQL ServerユーザーがSQL Serverの外部の機能を実行できるようにする拡張ストアドプロシージャです。 ")、私が何かを見逃していない限り、それは誇張された、またはおそらく無知の反応のようです。 would確かに大きな問題になりますallユーザーがアクセスした場合有効になっていた場合。しかし、実際には、_sp_OA*_ストアドプロシージャの使用を許可されているのは、 "OLEオートメーションプロシージャ"を有効にする機能を既に持っているユーザーだけです。使用しない場合は有効にする必要があると言っているわけではありませんが、これは固有のセキュリティリスクではないようです。

セキュリティの「問題」は、ネットワークやファイルシステム、またはOSレベルで承認できないことを行う開発者がコードを作成できるか、または意図しない結果が生じる可能性があることだと思います。

そうは言っても、サポートする必要があるレガシーコードに関して質問する場合は、理想的ではありませんが、おそらく機能します。ただし、これが新しい開発に関するものである場合は、OLE Automation;を使用しないでください。代わりに [〜#〜] sqlclr [〜# 〜] 。SQLCLRは、OLEオートメーションを超える(ただし、これらに限定されません))よりも多くの利点があります。

  • セキュリティの向上:コードを内部でSQL Serverに限定する(SAFE)か、外部リソースにアクセスできるがシステムを変更したり非同期作業を実行したりできないように制限できます(_EXTERNAL_ACCESS_)
  • (サービスアカウントに限定されない)外部リソースにアクセスするときに、呼び出し元のウィンドウのログインを偽装する機能
  • データ型のサポートの向上:OLEオートメーションはCOMインターフェイスである必要があり、MAXタイプ、XML、最近のタイプはサポートされません。
  • より良いメモリ管理
4
Solomon Rutzky

CISコントロール SQL Server 2008および2016の場合、この表現を使用します

Oleオートメーションプロシージャオプションは、OLEオートメーションオブジェクトをTransact-SQLバッチ内でインスタンス化できるかどうかを制御します。これらは、SQL ServerユーザーがSQL Serverの外部で関数を実行できるようにする拡張ストアドプロシージャです。

理論的根拠:このオプションを有効にすると、SQL Serverの攻撃範囲が拡大し、ユーザーがSQL Serverのセキュリティコンテキストで機能を実行できるようになります。

リスクは、ストアドプロシージャから呼び出しているオブジェクトが、思ったように動作しないことです。私の知る限り、Ole Automationオブジェクトに署名したり、それらが実行しているアクションが意図したとおりであることを保証したりすることはできません。

再度述べると、oleオブジェクトは、ストアドプロシージャに許可が与えられて実行されている信頼できないソースです。緩和策は、プロシージャを呼び出し、それを作成するときに使用のコンテキストを4に設定するユーザーに最小限の権限のみを付与することです。

ローカルOLEサーバーはSQL Serverリソースにアクセスできず、SQL Serverのメモリまたはリソースに損傷を与えることはありません。

詳細については ここ を、 はここを参照してください。この例で示されないのは、これがどのようにうまくいかないかです。質問を「返されたデータが正しくない場合はどうなりますか?」と言い換えた方がよい場合があります。

余談ですが、SQL Server 2008 R2は2019年7月にサポートが終了します。おそらくアップグレードを検討する必要があります。

2
kevinsky
  • ole Automationを使用すると、サーバーにファイルを書き込むことができます
  • 一部のサーバーが最適ではないように構成されている-例SQLサービスアカウントをローカルのWindows管理者グループに配置する
  • ローカル管理者としてSQL Serverサービスができる-OLEが有効な場合-いくつかの構成ファイルを上書きするか、またはいくつかのログデータを削除する(トレースを削除するため)
  • 特定の手順/ユーザーに対してそれを有効/無効にすることはできないので、それを有効にすると、誰もが上記のようなことができるようになります
  • セキュリティが正しく構成されている場合でも(ローカル管理者のアクセス許可がない場合)、悪意のあるユーザーが定期的なエクスポートを上書き、変更する可能性があります
2
Thomas Franz