初期侵入経路は、Apache Tomcat上で動作する公開JavaアプリケーションのSQLインジェクション脆弱性でした。このアプリケーションのオートコンプリート(自動補完)検索機能は、ユーザー入力を適切に検証しておらず、攻撃者はJDBC接続を介してOracleデータベースにSQLコマンドを注入できました。Huntressの研究者が指摘するように、これは新しい脆弱性クラスではなく、SQLインジェクション攻撃は数十年にわたり存在しており、通常はSQLサーバーに送信されるユーザー入力の不適切な処理が原因です。単純な検索フィールドのサニタイズ不足が、侵害の連鎖を引き起こす十分なきっかけとなったのです。
攻撃者は、侵害したサーバーに従来のマルウェアファイルを展開する代わりに、Oracleに組み込まれたJVMとCREATE JAVA SOURCEステートメントを使用して、ポストエクスプロイトツールキット全体をOracleデータベース内のJavaスキーマオブジェクトとしてコンパイルして格納しました。このアプローチにより、ツールキットは標準的なOSレベルの防御から不可視化されました。EDRやアンチウイルスツールは、プロセス、バイナリ、ファイルに焦点を当てており、Oracle内部に保存されたJavaクラスやPL/SQLラッパーを一般的に検査しないからです。
khuntツールキットには、それぞれがデータベースオブジェクトとして保存された以下のコンポーネントが含まれていました。
| コンポーネント | 機能 |
|---|---|
| KhuntCmd | cmd.exeをロードし、データベースに送信するSQL文にOSコマンドを埋め込んで実行する |
| KhuntHash | Oracle内部のユーザーテーブルからユーザー名とパスワードハッシュを抽出し、ファイルに保存する |
| KhuntFS / KhuntFS2 | 侵害システム上のファイルの一覧表示、読み取り、検索、サイズ確認を行うファイルエクスプローラ |
| KhuntT | ツールキットがインストールされ、到達可能であることを確認するための簡易pingツール |
| KhuntUnzip | ファイルの解凍ユーティリティ |
| khunt_ PL/SQLラッパー* | 基盤となるJavaメソッドを呼び出すためのPL/SQLラッパープロシージャ |
攻撃者はデータベースレベルのアクセスで止まりませんでした。khuntツールキットを使用して、データベース層から基盤となるWindowsオペレーティングシステムへと、段階的に攻撃を移行しました。
cmd.exe /c whoamiを実行。Windowsサーバー上でSYSTEMレベルの特権で動作していることを確認し、データベースからOSへのRCE(リモートコード実行)を確立しました。reg.exeを呼び出し、SECURITYおよびSYSTEMレジストリハイブをコピー。F:\Oracle\にkhuntSECURITY.hivおよびkhuntSYSTEM.hivとして保存しました。tasklist /svcを実行し、出力をkhunttasks.txtとして保存しました。esentutl.exeを使用してSAMおよびSECURITYハイブの2つ目のコピーを作成し、khuntSAM.hivおよびkhunt_SECURITY.hivとして保存しました。持ち出されたレジストリハイブは、オフラインで使用してシステム上のすべてのローカルアカウントのパスワードハッシュを抽出およびデコードすることが可能でした。
Huntressの調査により、この攻撃を成功させ、検知を逃れることを可能にした、いくつかの重要な盲点が明らかになりました。
この攻撃に基づき、Huntressは以下の対策を推奨しています。
この攻撃は、組み込みプログラミング環境(OracleのJVMなど)を持つデータベースエンジンが、たった1つの未検証の入力フィールドと組み合わさるだけで、ステルス性の高い攻撃プラットフォームになり得るという厳粛な警告です。セキュリティチームは、オペレーティングシステムを超えて、データベースオブジェクト層にまで監視範囲を拡大する必要があります。