ホームページ >運用・保守 >安全性 >Winnti ハッカー グループによる MSSQL バックドアの分析例

Winnti ハッカー グループによる MSSQL バックドアの分析例

PHPz
PHPz転載
2023-05-27 21:04:301420ブラウズ

ESET の研究者は、しばらくの間、2012 年から活動を開始し、ビデオ ゲームおよびソフトウェア業界のサプライ チェーンをターゲットとしたグループ Winnti の活動を追跡してきました。最近、Microsoft SQL (MSSQL) システムをターゲットとする未登録のバックドアが発見されました。このバックドアは、Winnti Group によって使用され、2019 年 10 月に初めて文書化された別のツールである PortReuse バックドアと多くの類似点があります。

Winnti グループのメンバーは、Skip-2.0 という名前の新しいバックドア サンプルをリリースしました。これは今年検出されました。このバックドアは MSSQL サーバー 11 および 12 をターゲットにしており、攻撃者がこれらの接続をログに自動的に隠しながら、マジック パスワードを使用して任意の MSSQL アカウントに接続できるようにします。攻撃者はバックドアを使用してデータベースに侵入し、その内容をコピー、変更、または削除することで、ゲーム内通貨を操作して金銭的利益を得ることができます。私たちの知識によれば、Skip-2.0 は、公的に文書化された最初の MSSQL サーバー バックドアです。

この記事では、mssql サーバー バックドアの技術的な詳細と機能、および Skip.2-0 と winnti の既知の武器 (特に portreuse バックドアとシャドウパッド) との技術的類似点に焦点を当てます。

vmprotected launcher

vmprotected launcher を探しているときに、skip-2.0 が見つかりました。そのペイロードは通常、portreuse または shadowpad です。

埋め込みペイロード

暗号化された portreuse ペイロードやシャドウパッド ペイロードと同様に、図 1 に示すように、skip-2.0 は vmprotected ランチャーに埋め込まれます。

Winnti ハッカー グループによる MSSQL バックドアの分析例

暗号化

VMProtect を使用する他のランチャーと同様に、ペイロードも暗号化する必要があります。この暗号化方式は RC5 アルゴリズムを使用し、キーは volumeID と文字列「f@ukd!RCTO R$」で構成されます。

永続性

portreuse やシャドウパッドと同様に、スタートアップ プログラムは c:\windows\system32\tsvipsrv.dll にインストールすることで DLL ハイジャックを悪用して永続化する可能性があります。これにより、システムの起動時に標準の Windows SessionEnv サービスが DLL をロードします。

パッケージャー

復号化された埋め込みペイロードは、実際には winnti グループのカスタム パッカーです。このパッケージャーは、ホワイトペーパーに記載されているコードと同じです。このツールは、PortReuse バックドアをパッケージ化し、侵害されたビデオ ゲームにペイロードを埋め込むために使用されました。

構成

プログラムのパッケージ化構成には、バイナリ ファイルの復号化に必要なキー、元のファイルの名前、サイズ、実行タイプ (exe または dll) が含まれています。ペイロード構成を表 1 に示します。

Winnti ハッカー グループによる MSSQL バックドアの分析例

パッケージャーの構成 ご覧のとおり、ペイロードは内部ローダーと呼ばれます。内部ローダーは、winnti グループの兵器庫の一部であるインジェクターの名前であり、特定のポートをリッスンするプロセスにポートルーズ バックドアを挿入するために使用されます。

内部ローダー

これは内部ローダーのバリエーションで、portreuse バックドアを挿入するときのように特定のポートでリッスンするプロセスを探すのではなく、sqlserv.exe という名前のプロセスを探します。 、これは mssql サーバーの従来のプロセス名です。見つかった場合、内部ローダーはペイロードをこのプロセスに挿入します。このペイロードは、表 2 に示す構成を持つカスタム パッカーでパッケージ化されています。

Winnti ハッカー グループによる MSSQL バックドアの分析例

この挿入されたペイロードの元のファイル名は、skip-2.0.dll です。

skip-2.0

skip-2.0 は、内部ローダーによって挿入されて開始された後、まず sqlserv.exe プロセスで実行されているかどうかを確認し、実行されている場合は sqllang へのハンドルを取得します。 .dll 、ハンドルは sqlserv.exe によってロードされます。次に、その dll から複数の関数を検索してフックします。図 2 は、skip-2.0 の実行プロセスを示しています。

Winnti ハッカー グループによる MSSQL バックドアの分析例

sqllang.dll のフック

skip-2.0 で使用されるフック プロセスは、ネットワーク フックのインストールを担当する portreuse モジュールである netagent に非常に似ています。このフック ライブラリは、複数のオープン ソース フック フレームワークでも使用されているオープン ソースの disstorm 逆アセンブラに基づいて構築されています。フックされる命令のサイズを正しく計算するには、逆アセンブリ ライブラリが必要です。次の図に示すように、NetAgent と Skip-2.0 ではほぼ同じフック プロセスが使用されます。

Winnti ハッカー グループによる MSSQL バックドアの分析例

図 3 NetAgent (左) と Skip-2.0 (右) のフッキング プロシージャ間の Hex-Rays 出力の比較

1 つの大きな違いは、skip- 2.0 のフック関数は、インストールされるフックのアドレスをパラメータとして受け取りますが、netagent の場合、インストールされるフックのアドレスはハードコーディングされています。これは、skip-2.0 が適切に実行するには qllang.dll 内の複数の関数をフックする必要があるのに対し、netagent は 1 つの関数のみを対象とするためです。

フックの各 sqllang.dll 関数を見つけるために、skip-2.0 はまず、pe ヘッダーを解析することによって、メモリにロードされた DLL のサイズ (つまり、その仮想サイズ) を取得します。次に、sqllang.dll 内で一致させる必要があるバイト配列を初期化する必要があります (図 4 を参照)。バイト配列に最初に一致するアドレスが見つかると、図 3 に示すプロセスを使用してフックがインストールされます。

Winnti ハッカー グループによる MSSQL バックドアの分析例

フックが正常にインストールされると、フックはクリアテキストで記録され、ファイルはハードコードされたパス c:\windows\temp\ts\ にあります。 u 2ce1.tmp (図 5 を参照)。

Winnti ハッカー グループによる MSSQL バックドアの分析例

ターゲット関数が見つからない場合、フック インストーラーは異なるバイト パターン セットを持つフォールバック関数を検索します。

静的オフセットを使用する代わりにバイト シーケンスを照合してターゲット関数のアドレスを特定することと、バイトのフォールバック シーケンスの使用を組み合わせることで、skip-2.0 は mssql の更新により柔軟に適応し、更新を行うことができます。複数の sqllang.dll の場合。

パスワード制御

skip-2.0 のターゲット機能は、認証とイベント ログに関連しています。ターゲット関数は次のとおりです。

CPwdPolicyManager::ValidatePwdForLogin
CSECAuthenticate::AuthenticateLoginIdentity
ReportLoginSuccess
IssueLoginSuccessReport
FExecuteLogonTriggers
XeSqlPkg::sql_statement_completed::Publish
XeSqlPkg::sql_batch_completed::Publish
SecAuditPkg::audit_event::Publish
XeSqlPkg::login::Publish
XeSqlPkg::ual_instrument_called::Publish

これらの中で最も興味深いのは最初の関数 (cpwdpolicymanager::validatepwdforlogin) で、これは特定のユーザーに提供されたパスワードを検証する役割を果たします。

この関数のフックは、ユーザーが指定したパスワードがマジック パスワードと一致するかどうかをチェックします。一致する場合、元の関数は呼び出されず、フックは 0 を返し、接続を許可します。次に、イベント ログを担当する他のフック関数によってチェックされるようにグローバル フラグが設定されます。対応する逆コンパイル プロセスを図 6 に示します。このグローバル フラグを設定すると、フックのロギング関数は、対応する元の関数を呼び出さずにサイレントに戻るため、操作はログに記録されません。

Winnti ハッカー グループによる MSSQL バックドアの分析例

マジック パスワードを使用してログインした場合、reportloginsaccess フックと issueloginsuccessreport フックは元の関数を呼び出しません。同じ動作が feexecutelogontriggers にも適用されます。ユーザーがマジック パスワードを使用してログインした場合、xesqlpkg::sql_completed::publish や xesqlpkg::sql_batch_completed::publish などの他のログ機能も無効になります。 secauditpkg::audit_event::publish、xesqlpkg::login::publish、xesqlpkg::uau inventory_called::publish など、いくつかの監査イベントも無効になります。

この一連のフックにより、攻撃者は特別なパスワードを介して被害者の mssql サーバーを永続的に制御できるようになるだけでなく、そのパスワードを使用すると複数のログが無効になり、攻撃者を検出できなくなります。

研究者は、複数の MSSQL Server バージョンに対して Skip-2.0 をテストし、MSSQL Server 11 および 12 のパスワードを使用して正常にログインできることを確認しました。 Skip-2.0 が特定の sqllang.dll バージョンをターゲットにしているかどうかを確認するために、github リポジトリにある yara ルールが作成されました。

Winnti との接続

skip-2.0 は、winnti の他のツールと多くの類似点があります。 vmprotected ランチャー、カスタム パッケージャー、内部ローダー、およびフック フレームワークは winnti ツールセットの一部です。

以上がWinnti ハッカー グループによる MSSQL バックドアの分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。