ESET社は、IISの拡張機能として実装されている新しいバックドア「IISpy」の検出・詳細分析を行いました。その攻撃の分析結果と対策について解説します。
本記事はESET Japanが提供する「ESETブログ」に掲載された「IISpy:フォレンジック機能に対応するサーバーに複雑に仕掛けられたバックドア」を再編集したものです。
ESETの研究者は、マイクロソフト社のWebサーバーソフトウェアであるIIS(Internet Information Services)の拡張機能として実装されている新しいバックドアを検出・分析しました。ESETは、このバックドアをIISpyと命名しました。IISpy は、長期間スパイ活動を行うため、さまざまなトリックでサーバーのログ機能に干渉し、検出を回避します。ESETのセキュリティソリューションは、IISpyをWin{32,64}/BadIISとして検出します。
攻撃の概要
ESETのテレメトリ(監視データ)によると、このバックドアは少なくとも2020年7月から活動しており、特権昇格ツールであるJuicy Potato(ESETのセキュリティソリューションではWin64/HackTool.JuicyPotatoとして検出)と一緒に使用されていました。攻撃者は、何らかの脆弱性を最初に攻撃してIISサーバーへのアクセス権限を取得し、次にJuicy Potatoを利用してIISpyをIISのネイティブ拡張機能としてインストールするために必要な管理者権限を取得していると考えられます。
ESETのテレメトリによると、カナダ、米国、オランダにある数台のIISサーバーがIISpyの影響を受けていますが、管理者はIISサーバーでセキュリティソフトウェアを使用していないことが多く、ESETが監視しているIISサーバーが限定されていることからも、この統計データはこの問題の全体像を示しているわけではないと考えられます。
IISpyはIISの拡張機能として構成されるため、侵害されたIISサーバーが受信したすべてのHTTPリクエストを見ることができ、サーバーが応答するHTTPレスポンスに影響を与えることができます。IISpyは、このチャネルを使用してC&Cと通信し、受動的なネットワークインプラントとして動作します。図1に示すように、(バックドアではなく)オペレータは、侵害されたサーバーに特別なHTTPリクエストを送信して、接続を開始します。バックドアは、攻撃者のリクエストを認識し、リクエストに埋め込まれたバックドアコマンドを抽出して実行し、コマンドの出力を追加するようにHTTPレスポンスを変更します。
利用されるバックドアコマンドは以下のとおりです。
- システム情報の取得
- ファイルのアップロード/ダウンロード
- ファイルやシェルコマンドの実行
- リバースシェルの作成
- ファイルやフォルダの作成/リストアップ/移動/名前変更/削除
- ローカルドライブとリモートドライブ間でのマッピングの作成
- 収集したデータの外部への送信
IISpyは、正規のユーザーが侵害されたIISサーバーに送信したほかのすべてのHTTPリクエストは無視します。これらのリクエストは正規のサーバーモジュールによって処理されます。
ネットワーク通信
IISpyのオペレータによる管理リクエストの構造はあらかじめ定義されており、CookieやHostヘッダーとURLの間で特別な関係が秘密裏に設定されています。このようなリクエストを識別するために、IISpyはまず、受信したHTTPリクエストのURLとHostヘッダーの両方のMD5ハッシュを計算し、各MD5を4つのダブルワードに分割します。
- <h0><h1><h2><h3> = md5(Hostヘッダー値)
- <r0><r1><r2><r3> = md5(ローURLの値)
次に、Cookieヘッダーにこれらの値から作られた部分文字列が含まれていることを確認します。
- <r1><h2>=<h3><r2><r3><r0><h0><h1>
図2は、この部分文字列がどのように組み立てられるかを示しています。バックドアコマンドは、AES-CBCで暗号化され、base64でエンコードされて、HTTPボディに埋め込まれます。
管理リクエストのこの構造はIISpyマルウェアでのみ見られ、ほかの既知のIISバックドア(ホワイトペーパー「ネイティブIISマルウェアの解析」(英語のみ)に記載)はすべて、ハードコードされたパスワードや特定のURI、カスタムHTTPヘッダーによって管理されます。既知のバックドアに見られるこれらの要素とは対照的に、IISpyを管理するリクエストは、C&Cとの通信の検出を回避するため、フィンガープリントやログでの検出が困難になっています。
また、このような仕組みは、通信先にも使用されています。IISpyは、TEXTまたはBLOBチャンクとして、暗号化およびエンコードされたレスポンスを、偽のPNG画像内のPNGファイルヘッダーの間に埋め込みます。IISpyは、マルウェアを管理するHTTPリクエストに返信するために、IISサーバーから送信された元のHTTPレスポンスボディを偽のPNGファイルで置き換え、Content-Typeヘッダーをimage/pngに設定して、この偽装を特定されないようにしています。
通信先と通信元は、これらのパラメータを用いてAES-CBC暗号化され、base64でエンコードされます。
- 暗号化キー:
DA1F8BE19D9122F6499D72B90299CAB080E9D599C57E802CD667BF53CCC9EAB2 - IV:668EDC2D7ED614BF8F69FF614957EF83EE
技術的な分析
技術的には、IISpyはIISのネイティブモジュールとして実装されます。C++のDLLとして実装され、侵害されたIISサーバーの%windir%system32\inetsrv\または%windir%SysWOW64\inetsrvフォルダにcache.dllまたはlogging.dllという名前で展開されます。
IISpyは、%windir%system32%inetsrv\config\ApplicationHost.configという構成ファイルでIISの拡張機能として構成され、IIS Webサーバーに送信されるすべてのリクエストを処理するIISワーカープロセス(w3wp.exe)によって自動的にロードされます。IISpyをIISモジュールとして構成することで、実行と常駐化が可能になります。この悪意のあるモジュールが内部で処理するのは、実際のリクエストだけです(この手法の利点として、検出回避とフォレンジック対策を可能にするいくつかのトリックもあります)。このセクションでは、これらの両方の操作について説明します。
モジュール設計
IISpyはIIS C++ APIで書かれており、IHttpContext、IHttpRequest、IHttpResponseのインターフェイスのインスタンスを使用して、HTTPリクエストを解析し、HTTPレスポンスを操作します。
すべてのIISネイティブモジュールと同じように、IISpyモジュールもRegisterModuleという関数をエクスポートしなければなりません。この関数では、図3に示すように、コアクラスのインスタンスを作成し、 IHttpModuleRegistrationInfo::SetRequestNotificationsメソッドを使ってサーバーイベント用のメソッドを登録します。
IISpyのコアクラスはCHttpModuleを継承しており、図4に示すように、そのメソッドのうち、3つのメソッド(サーバーイベントのイベントハンドラ)をオーバーライドします。
- OnBeginRequestは、サーバーが新しいHTTPリクエストの処理を開始するときに必ず呼び出され、IISpyはこのハンドラを使用して攻撃者のリクエストを検索して解析します。
- HTTPのrequest-processingパイプラインの最後のステップで呼び出されるOnEndRequestが、IISpyのバックドアインタープリタを実装します。
- OnLogRequestは、IISサーバーが処理されたHTTPリクエストをログに記録する直前に呼び出される仕組みになっており、IISpyの処理がログに記録されないようにしています。
IISpyは、IHttpModuleRegistrationInfo::SetPriorityForRequestNotification APIを使用して、これらのハンドラを最も高い優先度で登録します。同じイベントでいくつものIISモジュール(悪意のあるモジュールと正規のモジュール)が登録される可能性があります。そのため、優先度を設定しておけば、IISpyのハンドラが、同じイベントでほかのハンドラよりも必ず先に実行され登録されるようになります。
バックドアコマンド
IISpyはOnEndRequestハンドラで、攻撃者のリクエストのHTTPボディを復号化し、パラメータを抽出します。表1に示すように、パラメータはキーと値のペアで構成されます。このペアを表1に示します。
キー | 値 |
---|---|
/mode | /action |
/action | コマンド |
/path /binary /data … |
コマンドの引数(詳細なリストは、表2を参照) |
/credential/username | なりすましに使用されるローカルユーザーの名前 |
/credential/password | なりすましに使用されるローカルユーザーのパスワード |
表1. IISpyの攻撃者のリクエストのパラメータ
認証情報が設定されている場合、IISpyはその認証情報を使用してユーザーとしてログインし(LogonUserW、ImpersonateLoggedOnUserを使用)、そのユーザーのコンテキストでバックドアコマンドを実行します。また、バックドアのコマンドと引数は、表2に示すように、ネストされたキーと値のペアとして構成されます。
コマンドタイプ(/modeの値) | コマンド(/actionの値) | 引数(キーの名前) | コマンドの説明 | 返されるデータ (マップの構造や説明) |
---|---|---|---|---|
init | N/A | N/A | 基本的なシステム情報(コンピュータ名とドメイン、ユーザー名とドメイン、論理ドライブの情報)を収集します。 | /computer/domain /computer/name /user/domain /user/name /- /name /type |
file | list | /path | 指定したフォルダにあるファイル情報を収集します。 | /- /name /attr /size /create /access /write |
get | /path /binary |
侵害されたIISサーバーから指定された名前のファイルをダウンロードします。 | 偽のPNG画像に暗号化され埋め込まれたファイルの内容(PNGヘッダーに続く、画像以外のデータ)。 | |
create | /path /directory /data |
指定されたパスに新しいファイルまたはディレクトリを作成します。オプションの/data引数を使用して、ファイルの内容を保持できます。 | /- /file /attr /size /create /access /write |
|
upload | /path /data |
指定された名前のファイルを侵害されたサーバーにアップロードします。/dataエントリには、Base64エンコードされたファイルの内容が含まれます。 | /- /file /attr /size /create /access /write |
|
delete | /path /files /name /attr |
指定されたパスにあるファイル/ディレクトリのリストを削除します。 | /files /code /name |
|
move | /path /dest /copy /files /name /new |
リストのファイルをソースディレクトリからターゲットディレクトリにコピーしたり、名前を変更したりします。 | /files /code /name |
|
time | /path /create /access /write |
ファイルのタイムスタンプを変更します。 | N/A | |
drive | map | /letter /share /username /password |
ネットワークリソースの指定された認証情報を使用して、ローカルドライブとリモートドライブ間のマッピングを作成します。 | N/A |
remove | /letter | 既存のドライブマッピングを削除します。 | N/A | |
cmd | exec | /cmd | 現在のユーザーまたは引数で指定されたユーザーのコンテキストで、指定されたコマンドを実行します。コマンドの出力を返します。 | /output |
表2. IISpyバックドアのコマンドと引数
IISpyは、バックドアコマンドを実行した後に、返されたデータを暗号化およびエンコードし、そのデータを使用して、攻撃者のリクエストに対するHTTPレスポンスを変更します。返されるデータもキーと値のペアで構成されており、 表2に記載されているエントリに加え、GetLastErrorの結果(またはカスタムのエラーメッセージ)に基づく2つのエントリが追加されます。
- /error/code
- /error/message
ログ対策機能
最後に、IISpyはOnLogRequestイベントハンドラを実装します。このハンドラは、IISサーバーが処理されたHTTPリクエストをログに記録する直前に呼び出されます。このバックドアは、このハンドラを使用して攻撃者のリクエストのログエントリを修正し、一般的なリクエストのように偽装します。この操作の手順を以下に示します。攻撃者のリクエストに関するログエントリを変更する図5も参照してください。
- リクエストのHTTPメソッドをGETに書き換える
- リクエストのURLを/に書き換える
- リクエストから以下のヘッダーを削除する。
Cookie、Origin、Referer、Sec-Fetch-Mode、Sec-Fetch-Site、Content-Type、Content-Length、X-Forwarded-IP、X-Forwarded-For、X-Forwarded-By、X-Forwarded-Proto
このようにログエントリを変更することで、攻撃者は悪意のある活動の痕跡を隠ぺいし、フォレンジック分析を困難にします。
結論
IISpyは、IIS Webサーバーソフトウェアの機能拡張を悪用する複雑なサーバーサイドバックドアであり、常駐化、コマンド実行、C&Cと通信する仕組みが組み込まれています。通常のネットワークトラフィックに紛れ込んだり、証拠となるログを消去したりするトリックを実装しており、セキュリティが侵害されたIISサーバーで長期的にスパイ活動を行うために設計されています。
例えば、ExchangeメールサーバーでOutlook on the Web(OWA)サービスを有効にしている組織など、サーバーで機密データを扱っている組織は十分な注意が必要です。OWAはIIS経由で実装されており、スパイ活動の格好の標的となっています。いずれにしても、IISpyをサーバーに侵入させない安全策は、サーバーを最新の状態で維持し、インターネットに公開するサービスを慎重に検討し、サーバーが攻撃を受けるリスクを極力減らすことです。
今回紹介したマルウェア、セキュリティ侵害の痕跡、YARAルールに関する技術的な詳細については、ホワイトペーパー(英語のみ)や GitHubを参照してください。
このブログ連載では、ESETの研究者がIIS Webサーバーで検出した一連の脅威について特集しています。今回は連載の第2弾です。第1弾は、Webサーバーのトランザクションを傍受してクレジットカード情報を盗む悪意のあるIIS拡張機能について解説します。次回、連載最後の第3弾は、SEO詐欺に使用されている悪意のあるIIS拡張機能について解説します。
IISマルウェアの検出、分析、削除の方法については、ホワイトペーパー「ネイティブIISマルウェアの解析」(英語のみ)を参照してください。このホワイトペーパーではIISpy(グループ7)についても詳しく説明しています。
セキュリティ侵害の痕跡(IoC)
ESETの検出名
Win32/BadIIS.F
Win64/BadIIS.U
SHA-1
22F8CA2EB3AF377E913B6D06B5A3618D294E4331
435E3795D934EA8C5C7F4BCFEF2BEEE0E3C76A54
CED7BC6E0F1A15465E61CFEC87AAEF98BD999E15
ファイル名
cache.dll
logging.dll
MITREのATT&CK手法
注:この表は、MITRE ATT&CKフレームワークのバージョン9を使用して作成されています。
手法 | ID | 名前 | 説明 |
---|---|---|---|
リソース開発 | T1587.001 | 能力の開発マルウェア | IISpyは、独自に作成されたマルウェアファミリーです。 |
T1588.002 | 機能の取得:ツール | IISpyのオペレータは、ローカルで権限を昇格するツールであるJuicy Potatoを使用していました。 | |
初期アクセス | T1190 | インターネットに接続するアプリケーションの攻撃 | IISpyは、Webアプリケーションやサーバーの脆弱性を利用してIISサーバーへのアクセス権限を最初に取得したから、権限昇格ツールのJuicy Potatoを使用して、IISのネイティブモジュールをインストールするために必要な管理者権限を取得していると考えられます。 |
実行 | T1059.003 | コマンドおよびスクリプトインタプリタ:Windowsコマンドシェル | Windowsのコマンドシェルを使用して侵害されたIISサーバー上でシェルコマンドを実行するバックドアコマンドが、IISpyで使用されます。 |
T1059.002 | システムサービス:サービスの実行 | 拡張機能のIISpyによって、IISサーバーは、Windowsサービスとして常駐します。 | |
常駐化 | T1546 | イベントトリガーによる実行 | IISpyは、IISサーバーがHTTPリクエストを受信したときに、IISワーカープロセス(w3wp.exe)によってロードされます。 |
権限昇格 | T1068 | 権限昇格のためのエクスプロイト | IISpyのオペレータは、ローカルで権限を昇格するツールJuicy Potatoを使用して特権限を昇格しています。 |
防衛機能の回避 | T1134.001 | アクセストークンの操作:トークンのなりすまし/窃取 | IISpyは、別のユーザーのコンテキストでバックドアコマンドを実行できます(LogonUserW、 ImpersonateLoggedOnUserを使用)。 |
T1070 | ホストにおけるセキュリティ侵害の痕跡の除去 | IISpyには、攻撃者のリクエストが記録されたIISサーバーのログを改変する機能があります。 | |
T1070.006 | ホストにおけるセキュリティ侵害の痕跡の除去:タイムスタンプ | IISpyは、ファイルのタイムスタンプを変更するバックドアコマンドを使用します。 | |
収集 | T1005 | ローカルシステムのデータ | IISpyは、侵害されたIISサーバーからファイルを収集し、外部に送信するバックドアコマンドを使用します。 |
C&C(コマンド&コントロール) | T1071.001 | アプリケーションレイヤープロトコル:Webプロトコル | 攻撃者は、IIStealerを管理するために、セキュリティを侵害したIISサーバーにHTTPリクエストを送信します。 |
T1001 | データの難読化 | IISpyのオペレータは、URL、Hostヘッダー、およびクッキーの特別な組み合わせを使用してコマンドを送信します。 IISpyは、C&Cトラフィックを通常のネットワークトラフィックのように偽装して、偽のPNGファイル(PNGヘッダーに続く、画像以外のデータ)としてデータを外部に送信します。 | |
T1132.001 | データのエンコーディング:標準エンコーディング | IISpyは、C&Cとの通信をbase64エンコードします。 | |
T1573.001 | 暗号化されたチャンネル:対称暗号方式 | IISpyはC&Cとの通信を暗号化するためにAES-CBCを使用します。 | |
T1105 | 攻撃者が標的にツールを持ち込む手法 (Ingress Tool Transfer) |
IISpyは、侵害されたIISサーバーに別のツールをアップロードするバックドアコマンドを使用します。 | |
情報の外部への送信 | T1041 | C2チャネルからの送信 | IISpyは、侵害されたIISサーバーからデータとファイルを外部に送信するバックドアコマンドを使用します。 |