海賊版ソフト配布サイトから不正プログラムが拡散される手口を解説
トレンドマイクロは、情報窃取型マルウェア「CopperStealer」やアドウェア「LNKR」を含む複数の不正プログラムへ連鎖して感染させる海賊版ソフトウェア配布サイトを多数調査しました。これらの検体は通常、ペイ・パー・インストール(Pay Per Install, PPI:インストールごとに費用が支払われるモデル)のアフィリエイトネットワークを介して頒布されます。トレンドマイクロの解析では、弊社が発見したCopperStealerの検体は感染端末の表示言語が中国語に設定されていたり、サンドボックス内で実行あるいはデバッガ内で解析されたりするとすべての不正活動を終了する解析困難化の活動を持っていました。また、このCopperStealerを起点とする攻撃では、以下のような不正活動が感染環境で行われるものとわかりました
トレンドマイクロは、情報窃取型マルウェア「CopperStealer」やアドウェア「LNKR」を含む複数の不正プログラムへ連鎖して感染させる海賊版ソフトウェア配布サイトを多数調査しました。これらの検体は通常、ペイ・パー・インストール(Pay Per Install, PPI:インストールごとに費用が支払われるモデル)のアフィリエイトネットワークを介して頒布されます。トレンドマイクロの解析では、弊社が発見したCopperStealerの検体は感染端末の表示言語が中国語に設定されていたり、サンドボックス内で実行あるいはデバッガ内で解析されたりするとすべての不正活動を終了する解析困難化の活動を持っていました。また、このCopperStealerを起点とする攻撃では、以下のような不正活動が感染環境で行われるものとわかりました:
- 特定のWebブラウザに保存されたGoogleアカウントや各種SNSなどの認証情報やCookieを取得する
- 悪意のあるブラウザ拡張機能をインストールする
- 利用者のソーシャルメディア上での情報を取得する
- ブラウザ上から入力された内容を詐取する
- 表示されたWebページに広告を注入する
- 広告のIDを改変し、広告収入を横取りする
■ 感染の流れ
海賊版ソフトからの感染連鎖はサイバー犯罪者の間で一般に用いられる手法です。今回の攻撃では、上記の図1のようにwarez(別名:crackz、toolz、appz、gamez)サイトから、ユーザを誤解させ誘導する手法でPPIネットワークを経由して不正プログラムへ誘導していました。以下の図2に示すように、warezサイトの多くでは、非常に小さなフォントが使用されているなどでリクエストされたファイルへのリンクがわかりづらくなっている場合があります。また、誤解を招くような[ Download ]ボタンやそのほかの類似した行動を促すボタンもあります。これらのボタンを選択すると、訪問者の知らないところでマルウェアのダウンロードにつながるリダイレクト連鎖が開始されます。
訪問者は、各ツールに関する説明やスクリーンショットのほかに、赤や青で表示されたボタンや緑で表示されたリンクを目にすることでしょう。リンクをクリックすると、さらに誤解を招くようなボタンが配置された別の不正サイトが開き、悪意のあるリダイレクト連鎖が開始されます。訪問者がアプリケーションやツールなどをダウンロードしたい場合は、サイト中央に位置する「Server」リンクのいずれか(図4)を選択しなければなりません。当該調査の時点では、弊社が調査したすべての不正サイトに目的のアプリケーションやツールが設置されているわけではありませんでした。しかし、ダウンロードファイルの信頼性を高める手段として、特定のセキュリティ製品によるスキャンが行われており安全であることを謳う一文が記載されていました(図3のVirus status項目)。
■ 誘導手口およびPPIを悪用した手口
訪問者が[ Download ]ボタンを選択した後、複数用意されたリダイレクト連鎖のうちの1つが開始されます。リダイレクト連鎖は訪問者が[ Download ]ボタンを選択した後に開始され、アーカイブのダウンロードへと誘導します。今回調査したリダイレクト連鎖に利用されるトップレベルドメイン(TLD)には、多くの場合.xyzが使用されています。誘導手口を実行するスクリプトは通常PHPで実装されており、ユーザID(id)やWebサイトのタイトル(q)など、いくつかのパラメータを持っています。このリダイレクト連鎖は、PPIを導入したネットワーク「boostads」または「installusd」のいずれかに属しているようです。
ダウンロードされた圧縮されたアーカイブには、パスワードで保護されたZIPアーカイブと、該当するパスワードが記載されたテキストファイルが含まれています。このアーカイブには、実行可能なペイロードが含まれています。
リダイレクト連鎖は一定ではなく、使用されているプラットフォームまたはハードコードされたユーザIDパラメータに応じてドメイン名が変更されることを弊社は確認しました。当該調査時点で観測されたダウンロードされたペイロードは、CopperStealer、DanaBot※1およびモジュラー型マルウェア「Glupteba」※2です。以下の段落では、トレンドマイクロが発見したCopperStealerがインストールするモジュールやブラウザのプラグインに関する調査結果を解説します。インストールされたブラウザのプラグインの1つはLNKRと呼ばれるもので、アドウェアを注入するためのプラットフォームであることに留意する必要があります。
※1:トレンドマイクロでは「TROJ_BANLOAD.THFOAAH」として検出
※2:トレンドマイクロでは「Trojan.Win32.GLUPTEBA.WLDR」として検出
■ CopperStealerおよびLNKRの不正活動
2019年末、ブラウザに保存されたCookieや認証情報を窃取するCopperStealerの不正活動が多数確認されました。トレンドマイクロは、CopperStealerが2019年4月に確認されたスパイウェアキャンペーンと多くの類似性を持つことを発見しましたが、最近の報告では、このマルウェアはソーシャルメディアプラットフォームを標的とする別のキャンペーンであると推測されています。しかしこれらのキャンペーンは、被害者の認証情報を窃取するために類似性の高い攻撃ツールが使用された異なるキャンペーンであると弊社は考えています。
トレンドマイクロが発見したCopperStealerの検体を解析した結果、感染端末は悪意のあるブラウザ拡張機能を備えていました(弊社は、これらをそれぞれのセクションやクイックディスクリプションにて特定しています)。悪意のある拡張機能の1つはLNKR(CRX/book_helper)で、フィッシングキットとの関連性が確認されました。これらのマルウェア2種が大規模に頒布されているのを確認したのは今回が初めてです。以下の段落では、CopperStealerおよびLNKRの解析結果を共有します。これらのマルウェア2種は、被害者から利益を得るために巧妙化した感染手口や戦術を備えている点に注目です。また、これらのマルウェアがPPIを導入したネットワークを利用して頒布される手口についても紹介します。
第一段階
圧縮ファイルから解凍された実行ファイルは、部分的に上書きされた正規の実行ファイルのように見えます。侵入経路はカスタムシェルコードで上書きされ、暗号化されたペイロード(第二段階)がファイル末尾のオーバーレイに付加されます。以下の事例では、Nullsoft Scriptable Install System(NSIS)を利用して作成されたインストーラについて解説していますが、他の正規の実行ファイルでも同じように部分的に上書きされる可能性があります。上書きされたNSISファイルを7-Zipなどの圧縮・解凍ソフトで開くと、実行ファイルはインストーラのコンテンツを表示します。これは、キーワードである「NullsoftInst」と元のインストールされたファイルがそのまま残っているために起こります。
ところが、元のNSISインストーラスタブの代わりにカスタムシェルコードが実行されます。その後シェルコードは埋め込まれたペイロードを復号して実行します。このシェルコードは、アドレス0x04 (実行ファイルの先頭から0x44) に位置するDOSスタブからDWORD値 (0x160FF3) を読み込み、この値 (0x160FF3) を実行ファイル内の暗号化されたペイロードのオフセットとして使用します。オフセットの10進数値「0x160FF3 = 1445875」は、第二段階で復号するためのXOR(排他的論理和)キーとして使用されます。
第二段階
第二段階は、おとりのインストーラである「gdiview.msi」の作成から始まります。作成されたおとりのインストーラは、マルウェアのインストールを隠匿するために別のインストールプロセスを開始します。おとりは、ドメイン生成アルゴリズムを使用して、遠隔操作(C&C)サーバの名前を生成します。このアルゴリズムでは、「changenewsys」という文字列に続いて現在の日付が使用され、次にMD5ハッシュが計算されます。最終的にMD5(changenewsys%04d%02d%02d)ハッシュの中央16文字がC&Cサーバの名前となり、末尾に.xyzを追加してC&Cサーバのドメインが形成されます。一例としては、以下のようになります。
日付 = 20210202 |
その後おとりは、インストールの進捗状況をC&Cサーバ「<C&C>/fine/send」に報告するようになります。さらにおとりは、販売者ID、感染PC端末のGUID、インストールされたマルウェアのバージョンなど、いくつかの情報を報告します。
おとりはこれらの情報を送信した後、デバッグ動作防止機能、仮想マシン(VM)動作防止機能、解析防止機能、システムロケール(中国語のロケールID 2052)の確認を行います。確認に失敗した場合、おとりは自身を削除してインストールを停止します。確認に成功した場合は、C&Cサーバ「<C&C>/info_old/w」にインストールの進捗状況を再度報告します。デバッグされたメッセージは、データ暗号化規格であるDES暗号で暗号化されます。DES暗号によりkey=’rundll32’、IV=’explorer’、mode=’CBC’が暗号化された後、URLセーフなBase64でエンコードされます。おとりは、埋め込まれた7-Zipで圧縮されたBlobからDLLファイル(第三段階)を抽出し、Hello001とHello002という名前のエクスポート関数を実行します。
第三段階
抽出されたDLLファイルは、3つのエクスポート関数を実装するメインモジュールです。このうち2つのエクスポート関数は、第二段階でインストーラにより呼び出されます。3つ目のエクスポート関数は、当該調査時点では使用が確認されませんでした。
エクスポート関数 Hello001
このエクスポート関数は、感染端末内にインストールされている主要なWebブラウザ(Google Chrome、Firefox、Opera、Microsoft Edge、Internet Explorer、Baidu、Yandex)からFacebookに蓄積したCookieや保存されたログイン情報を詐取します。
- このエクスポート関数はFirefoxに対して新しいFirefoxプロセスを実行し、保存データを窃取するためにカスタムDLLファイルを注入します
- Edgeに対しては、フリーソフト公開サイト「Nirsoft」から埋め込み型EdgeCookiesViewツールを復号して実行します。EdgeCookies Viewは、新しいバージョンのEdgeやInternet Explorer 11に保存されているCookieを表示するWindows用の正規ツールです
Cookieが利用可能な状態でユーザがソーシャルメディアのアカウントにログインしている場合、CopperStealerは追加情報を取得するためにグラフAPIに様々なリクエストを投稿しますが、その内容は以下の通りです。
- FacebookのユーザIDに紐づくCookie
- InstagramのユーザIDに紐づくCookie
- Instagram上のフォロワー数
- Facebook上の友達数
- Facebook上での支払い情報
- クレジットカード情報
- リンクされたPayPalアカウント
- 所有するビジネス用の広告アカウント
- ユーザが管理者である可能性のあるFacebookページ
- Facebook Messenger上に蓄積したCookie
- Facebookページがいつ作られたかなどの詳細
詐取したデータは、Instagramの場合は <C&C>/info_old/I に、Facebookの場合は <C&C>/info_old/e にアップロードされます。
このエクスポート関数は、Googleに蓄積されたCookie、特にGoogle広告に蓄積したCookie、Google上での支払い情報、保存された自動入力される認証情報を窃取することも可能で、これらの情報源から詐取したデータは <C&C>/info_old/g にアップロードされます。このエクスポート関数はこれらの情報を取得するために、まずCookieとクロスサイト・リクエスト・フォージェリ(XSRF)トークンを窃取する必要があります。これらの情報を窃取した後、このエクスポート関数はGoogle Accounts and ID Administration(GAIA、GaiaInfoService.Get経由)にリクエストを送信します。その後このエクスポート関数は、現在のユーザの詳細情報(UserByGaiaService.Get)と、ユーザがアクセスできるサービスの一覧(UserCustomerAccessService.List)を取得します。
サイバー犯罪者はソーシャルメディアやGoogleアカウント情報を窃取することで、これらのアカウントを乗っ取って偽の広告キャンペーンを実行することができます。実例についてはセキュリティベンダ「Kingsoft」のニュースサイトで解説されています。
さらにCopperStealerは <C&C>/info_old/r に問い合わせて、他に窃取可能なCookieが保存されているかどうかを調べます。C&Cサーバからのレスポンスは、上記と同じDES暗号およびBase64アルゴリズムで暗号化され、/=+の文字は_~-に置き換えられます。レスポンスの一例としてはAYYYLksPHjUDgRYoYmagnA~~が考えられますが、これは[“amazon.”]に復号された後、 <C&C>/info_old/a にアップロードされます。
CopperStealerはできる限りすべてのブラウザ情報を窃取した後、ファイルシステムフィルタFsFilter32あるいはFsFilter64ルートキットをインストールし、ブラウザに関連するファイル(cookie.db、cookie.sqlite、Login Data、Cookies、WebCacheV01)やプロセス(explorer.exe、firefox.exe、chrome.exe、opera.exe、Yandex.exe、baidu.exe、MicrosoftEdge.exe、MicrosoftEdgeCP.exe、rundll32.exe)へのアクセスをブロックします。
その後CopperStealerは、埋め込まれたMiniThunderPlatformを作成してxldl.dllファイルを読み込みます。これによりコマンドラインパラメータStartTP XL_CreateTaskを持つMiniThunderPlatform.exeが実行されます。これと同時にCopperStealerは、別のファイルを読み込んで実行するためのリンクを含むJavaScript Object Notation(JSON)である <C&C>/info_old/ddd を読み込んで復号します。実行されると、 <C&C>/info_old/du に報告が送信されます。さらに解析を進めると、ダウンロードされたファイルは、マルウェアローダ「Smokeloader/Dofoil」を含むInnoインストーラであることがわかりました。
エクスポート関数 Hello002
このエクスポート関数はブラウザ拡張機能のインストーラです。特にこのエクスポート関数は、ChromeおよびOperaにはCRX拡張機能(リソースCRX)を、FirefoxにはXPI拡張機能(リソースFF)をインストールします(図13)。これらの拡張機能はすべて実行ファイルのリソース内に格納されています。リソースFRIENDSは、ユーザがFacebookにログインしている場合にブラウザをスキャンするために使用されます。実行ファイルのリソース内に格納されていますが、使用は確認されませんでした。リソースFFは、Webサイトをカスタマイズするための正規の拡張機能「Greasemonkey 4.9」であり、リソースCRXは広告インジェクタです。
これらの悪意のある拡張機能のインストールは、まずブラウザのプロセスを(実行中であれば)終了させ、次に拡張機能を以下のデフォルトのプロファイルに抽出することで実行されます。
- %USERPROFILE%¥AppData¥Local¥Google¥Chrome¥User Data¥Default¥Extensions¥(Chromeの場合)
- %USERPROFILE%AppData%Roaming\Mozilla\Firefox\Profiles\xxxx.default-xxxx\extensions(Firefoxの場合)
その後このエクスポート関数は、「Secure Preferences」/「extensions.json」の設定ファイルを改ざんします。
- %USERPROFILE%AppData%Local%Google®Chrome®User Data%Default%Secure Preferences(Chromeの場合)
- %USERPROFILE%AppData%Roaming\Mozilla®Firefox®Profiles\xxxx.default-xxxx\ (FireFoxの場合)
CRX拡張機能
下掲図14に示すように当該調査時点ではChromeの拡張機能はデフォルトで無効になっています。このような拡張機能を有効にするには、レジストリキー HKLM_SOFTWARE_Policies_Google\Chrome_ExtensionInstallWhitelist内で許可リストに登録されてなければなりません。この拡張機能は、Webサイト内に広告を注入する役割を担っており、独自のセクションでより詳細に分析されます。
Firefoxの拡張機能
Firefoxの場合も同様で、GreaseMonkeyの拡張機能は現在のFirefoxのバージョンと互換性がありません(当該調査時点)。さらにpefs.js の設定ファイルには,Firefox向け中国版アドオンへの参照が含まれています。これが何のためにあるのかは定かではありません。
Facebook向けのFRIENDS拡張機能
解析中には使用が観測されませんでしたが、被害者のFacebookのウォールページに投稿するFacebookスパマーである悪意のあるブラウザ拡張機能FRIENDS/helperを発見しました。この拡張機能は、ユーザがブラウザを通じてFacebookにログインしているかどうかを確認します。この拡張機能は、c_user (現在ログインしているユーザ) のCookieが存在する場合、広告マネージャのアカウント設定あるいは管理ページを分析し、そこからアクセストークンを抽出します。
抽出されたアクセストークンは、FacebookのグラフAPIを使用してユーザの友達に関する情報を取得するために使用されます。次に、この拡張機能は実行すべきタスクについてC&Cサーバに問い合わせます。これらのタスクは、1枚の写真のアップロードおよび公開(info.url)、その写真にタグ付けされる友達の数(info.limit)、写真に添付される説明文(info.message)で構成されています。その後この拡張機能はタグ付けされた友達の数および被害者が持つ友達の総数をC&Cサーバに報告します。これは、すべての友達が写真にタグ付けされるまで継続して行われます(info.photo_num)。
エクスポート関数 Hello003
このエクスポート関数は、動画に「高評価(Like)」をつけたり「チャンネル登録(Subscribe)」したりするためのYouTubeモジュール(DLLファイル)を実行します。まず、rundll32.exeのプロセスがサスペンドモードで作成されます。これに続きメインモジュール(第三段階)から32ビットあるいは64ビットのモジュールが抽出され、新たに作成されたサスペンドモードのプロセスに注入されます。
これに続いてこのエクスポート関数は、Chromeブラウザを強制終了させ、デフォルトのプロファイルディレクトリ(User Data)を%APPDATA%Local\Temp内にコピーします。その後このエクスポート関数は、コピーされたプロファイルディレクトリ内にカスタムCRXプラグイン(悪意のあるブラウザ拡張機能:CRX/Youtube video)をインストールします。次に「User Data」ディレクトリとして指定されたコマンドラインで新しいChromeプロセスを起動し、ウインドウを画面外に配置します。そして、そのウインドウ内の動画に埋め込まれたURLを開きます。このChromeの拡張機能が「高評価」および「Subscribe」ボタンの位置を提供し、YouTube DLLモジュールがそれらをクリックします。最後に、Chromeプロセスが終了し、注入されたYouTube DLLモジュールのプロセスがシャットダウンします。
当該調査時点では動画に埋め込まれたURLは有効ではありませんでした。しかしさらに解析を進めると、実行コードおよびChromeのプラグインがYouTubeのWebページで動作することがわかりました。
YouTube DLLモジュールはChromeのウインドウタイトルを読み取り、そこからx、y、w、hの座標を分析します。これらの値が見つかった場合、モジュールは座標で定義されたボックスの中心にカーソルを移動させ、それを選択します。
Chromeのウインドウタイトルは、Chromeブラウザのプラグインによって設定されます。このプラグインは、まずドキュメントを照会して3つのセレクタを取得します。1つは再生中の動画ボックスを選択するためのもの、もう1つは「Subscribe」ボタンを選択するためのもの、そして最後は「高評価」ボタンを選択するためのものです。以下は、ブラウザのコンソール内で「Subscribe」ボタンのセレクタを実行した際に見られる検体の様子です。
次にこの拡張機能は、3つのオブジェクトすべての位置を抽出してJSONオブジェクト内に格納し、オブジェクト中央でクリックするかどうかを指定する「do」属性を追加します。このJSONオブジェクトは、ウインドウタイトルに割り当てられます。
■ ブラウザ向けの広告を注入するプラグイン
トレンドマイクロは、簡単なスクリプトを実装した広告を注入するブラウザ拡張機能を解析しました。この不正活動では、スクリプトドメインのC&Cサーバからメインの広告を注入するスクリプト(名前:<uniqueID>.js)を読み込み、ドキュメント本文のノードの最後に追加することがわかりました。さらに解析を進めると、このメインの広告を注入するスクリプトは、広告インジェクタ「LNKR」の新バージョンであることが判明しました。
広告インジェクタの構成
広告を注入するスクリプトの動作は、monetizationsConfig内で設定されていることがわかりました。これは空のオブジェクトとして始まり、後に様々な「構成ブロック」がオブジェクト内に読み込まれます。各構成ブロックは、16進数5文字の名前(キー)を持ち、以下の属性を備えています。
02aed(図25上部)は構成ブロックIDです。一方でtype=platform(図25下部)は、そこにC&Cサーバ上にホストされた追加のスクリプトが存在し、設定ファイル内に特定の構成ブロックIDが存在する場合にのみダウンロードおよび実行されることを意味します。ユーザIDは、1から100までのランダムな数字で構成されます。構成ブロック中央付近(図25)に位置する属性「coverage」は、構成ブロックを適用すべきユーザIDを特定するものです。その下に位置する「URL」は追加のJavaScriptが注入されるリンクで、「limit」は構成ブロックが適用されるまでの時間を示す未来の値(unixtimestamp)です。
さらに一つ下に位置する「type」を「external」にすることで、スクリプトが外部URLからWebサイトへと読み込まれます。「Platform」は、C&Cサーバ(スクリプトドメイン)から読み込まれるスクリプトモジュール、あるいはWebサイトに読み込まれるスクリプトが既にメインの広告を注入するスクリプトに埋め込まれているプラグインに関連します。
C&Cサーバとの通信
トレンドマイクロは、ブラウザ拡張機能とスクリプトドメインのC&Cサーバとの間で多くの通信のやり取りを発見しました。特に後続の設定ファイルを読み取って設定したり、さまざまな指標(メトリクス)や統計情報を報告したりするためにやり取りが行われていました。
設定リクエストには以下のものがあります。
表1:C&Cサーバと拡張機能の間で行われた設定リクエストの一部
リクエスト | 説明 |
/optout/set/limit | 構成ブロックが適用されるまでの制限時間を更新します |
/optout/set/strtm | 被害者がスクリプトの注入を始めた開始時刻を設定します |
/optout/set/lat | 最後にアクションが実行された時間、または /optout/get からのレスポンスの最終時刻を更新します |
/optout/set/lt | ライフタイムを設定します。この値は/optout/getから取得されます |
/optout/set/userid | 1から100までの数字でランダムにユーザIDを生成して設定します |
/optout/get | スクリプトドメインのC&CサーバからJSONオブジェクトを読み込んでフィルタリングを行うことを選択します |
/optout/getへのリクエストは、以下のパラメータを持つJSONオブジェクトを返します。
いくつかのパラメータは表1で既に定義しました。新たに確認されたパラメータを表2に定義します。
表2:/optout/getへのリクエストで返されるパラメータの一部
targeting | ユーザをターゲットとする(0=noあるいは1=yes) |
lcFlag | 収益化のためのクリックフラグ(「true」か「false」で読み込まれるキーが決まる) |
optout | 無視されるべき(読み込まれない)構成ブロック名(キー)の一覧 |
上記のパラメータは、構成ブロック名(キー)および/optout/getへのリクエスト内で取得したパラメータに応じて、どの構成ブロックがスキップ(あるいはオプトアウト)されるべきかをリアルタイムに決定することがわかりました。例えば、lcFlag(内部的にはownMonetizationsClickFlagと命名)が「true」に設定されている場合、ハードコードされた複数の構成ブロック名(キー)のうち1つだけが読み込まれます。一方、lcFlagの処理を担当するメインスクリプトの部分で言及されていない構成ブロック(キー)はスキップ(オプトアウト)されます。
すべてのプラットフォームをブロック処理した後、オプトアウトされていないパラメータは、/ext/<uniqueID>.js?sid=<source ID>&title=<title>&&blocks[]=<platform block keys>から読み込まれます。プラットフォームをブロックする目的は、/optout/getの結果およびブラウザウインドウ内に現在読み込まれているドメインに基づいて追加機能を有効にするためです。この機能は、スクリプトドメインのC&Cサーバ上に直接ホストされた追加スクリプトによって提供されます。
トレンドマイクロの調査で確認したケースでは、/ext/<uniqueID>.jsリクエストが別のスクリプトを返します。このスクリプトは、ポップアンダー広告、ポップアップ広告、タブアンダー広告を作成する機能を備えた難読化されたBetterJsPopライブラリを読み込みます。以下の構成は、広告URLが新しいタブの下に表示されることを示しています。
/ext/スクリプトは次のリクエストで、ユーザが誘導されるべき広告リンクを/ext/__utm.gif?a=…&ajaxから照会します。以下のリクエストは、GETリクエストのパラメータ「a」内に埋め込まれ、10進数のキーである77を使用したXORで暗号化されます。このリクエストに対するレスポンスが「true」の場合、リダイレクト連鎖の最初に利用されるURLを含む「url」キーを持つJSONオブジェクトを返します。
/trgt/はターゲティングを目的としたリクエストで、具体的にはWebサイト内にプラグインを注入すべきかどうかを指定します。今回のケースでは、/trgt/へのリクエストから返ってきたレスポンスは、「rows」キーに読み込まれるプラグインの一覧を表示します。
メトリクス
メトリクスと統計は、アクションが成功したかどうかに関わらず、各アクション後に報告されます。メトリクスリクエストでは、0次元の不可視のトラッキング画像要素を使用し、URLアドレスにはさまざまなメトリクスパラメータが含まれています。レポートIDには、Amazonでの購入履歴や検索パラメータ(AMZN_SEARCH、AMZN_ADD_CART、AMZN_BUY_NOW)など、多くのIDのうちの1つを含めることができます。また、検索エンジンのフィルタリング(CB_MNTZ_FILTER_SERCHNGN)、読み込まれた広告(BANNER_LOAD)、アダルトサイトの収益化(CB_APS_ERR_STORAGE、CB_APS_OPEN)、Google広告ユニットのブロック(GGL_COM_BLOCK)などのフィルタリングが可能です。
■ 外部広告を注入するスクリプト
先ほど紹介したように構成ブロックには、外部、プラットフォーム、プラグインの3つのタイプがあります。この段落では、いくつかの外部広告を注入するスクリプトについての調査結果を解説します。
スクリプト1:リンクの事前レンダリング
このスクリプトは、Webサイト上の選択したリンクを事前にレンダリングします。ユーザがこれらの事前に選ばれたリンクのいずれかを選択すると、スクリプトはアフィリエイトURL上の「クリック」を実行し、しばらくしてから元のリンクの「クリック」を実行します。
Webサイトの事前レンダリングは以下のように構成されています。
- ユーザがリンク上をクリックしたときに処理するクリックハンドラ(addEventListener)を付ける
- ユーザがアンカー要素A(リンク)あるいはAREA要素を選択し、CTRL、SHIFT、ALTなどの特別なキーが選択されていない場合、以下のようになる
a) さらに、そのリンクが書き込み可能であるかどうかを検討する(つまり、画像ではなく、除外ドメインでもなく、同一ドメイン内の内部リンクでもない場合)
b) 特別なリンク属性が設定されていない場合(一例:lnkr_redirecting、data-ad-flag)、リンクをタップまたは選択する行為が処理される
リンクを選択するとは、以下を意味します。
- 追加のスクリプトをダウンロードして実行することがリクエストされます。リクエストされたURLへの追加パラメータのフォーマットは、stub=<random number>, out=<encoded original URL link>です
- サーバは、元のURLリンクに関連付けられたスクリプトを返します
- ダウンロードされたスクリプトは、HEADタグの前に注入され、このスクリプトはダウンロードされるとすぐにドキュメントに読み込まれます
- 3秒後にリダイレクトが実行され、以下のようになります
a) lnkr_redirecting属性が設定され、約1秒間、被害者が最初に選択したリンクとの間で削除される
b) 元のリンクが選択される
スクリプト2:フレームリンクインジェクタ
このスクリプトは、画面外 (-999px, -999px) に空の(about:blank) iframeを作成します。そして、このスクリプトインジェクタは、新たに作成されたiframe内にリンクを作成し、これを選択します。
スクリプト3:別のYontooベースの広告注入フレームワークのローダ
このスクリプトは、第二段階のローダ、設定ファイル、多くの追加スクリプト(アイテム/プラットフォーム)からなる追加広告を注入するフレームワークです。
外部リサーチャの報告によると、このスクリプトは、Yontoo広告インジェクタの旧バージョンをベースにした広告を注入するフレームワークである可能性が高いようです。このスクリプトが実行されると、4桁のパートナーIDの値に基づいて、第一段階のローダ(l.js?pid=<partner ID>&ext=)が開始されます。その後、/loaders/<partner ID>/l.js?pid=<partner ID>&ext=&zoneid=<zoneid>から第二段階のローダを読み込みます。広告ゾーンとは、Webサイトのレイアウト上、広告コンテンツが表示される場所のことです。
第二段階のローダは、パートナーIDによって異なるかもしれませんが、さまざまな設定項目(あるいはプラットフォーム)の値を持つ2つのJSONオブジェクトを埋め込みます。1つ目のオブジェクトには国コード(あるいはすべての国を表すALL、特定の国を表す2文字)およびそれに対応する設定項目(プラットフォーム)がリストアップされています。2つ目のオブジェクトは、1つ目のオブジェクトからの設定項目のサブセットで、そこに追加のスクリプト(名前は<item ID>.js)がダウンロードされ、Webサイト内に注入されます。
アイテムIDのサブセットには、JavaScriptコード(次のybeb1のケースを参照(下掲図33))あるいは空の文字列が含まれる可能性があり、これらは第二段階のローダに/i/items/<item ID>/js/<item ID>.jsから追加で注入するスクリプトをダウンロードするよう指示します。
一方、第二段階のローダは、/loaders/icpから「パーミッションファイル」を読み込み、さらに/js/<reverse(hex(domainName))>/r.jsから現在読み込まれているドメインに対するドメイン固有のルールも読み込みます。
表3:パーミッションファイルやドメイン固有のルールで使用されるキー
配列/項目/キー | 説明 |
t | パーミッションタイプの一覧 |
a | パーミッションアクティベートの一覧 |
w | アクティベートされたパーミッションの配列tからのインデックスをリストアップします。wの中に少なくとも1つのパーミッションが存在すれば、その項目(プラットフォーム)はアクティブになります |
b | パーミッションのブロックリスト。bの中に少なくとも1つのパーミッションが存在すれば、項目(プラットフォーム)が非アクティブになります |
d | 項目(プラットフォーム)IDおよび割り当てられたC&Cサーバのドメインの一覧 |
dau | アイテムIDではなく、「daily pinging(pingを毎日実行)」を意味します。第二段階のローダがこのC&Cサーバに1時間または1日毎にpingを実行します |
s | サブドメイン |
ドメイン固有のルールには、パーミッションタイプの配列(キー t)と、パーミッションタイプの配列tへのインデックスを持つ可能性のあるサブドメインの一覧(キー s)が含まれています。各ドメインのパーミッションタイプに基づいて、アイテム(プラットフォーム)IDが有効になるかどうかが判断され、追加のJSスクリプトのダウンロードや注入が行われる可能性があります。
パーミッションのいくつかを一覧として以下に示します。この一覧は完全なものではなく、含まれているすべてのパーミッションの意味を解読したわけでもありませんが、少なくともいくつかのパーミッションがさまざまな広告ネットワークと関係していることは推測できます。
“thrive_rvz1″, “thrive_rvz2”, “adult”, “adult_block”, “bank”, “internal”, “legal”, “pops_only”, “provider”, “technical”, “toolbar”, “google”, “kinner”, “yhs_search”, “block_pops”, “aim_video”, “apn_whitelist”, “thrive_video_whitelist”, “thrive_whitelist”, “ref”, “thrive_video_blacklist”, “ye174”, “amzgpv”, “block_display”, “video_footer”, “w0206”, “adnative_whitelist” |
表4:パーミッションコードとそれに対応する広告ネットワーク
パーミッション | 想定される広告ネットワーク |
thrive | thriveadvertisingco.com |
aim | aimadvertising.com |
rvz | revizer.com |
apn | aws.amazon.com/partners/apn-marketing-central/ |
adnative | adnativeagency.com |
amzgpv | アマゾンプライム会員 |
■ 観測された動作
この段落では、広告を注入するフレームワークが可能な場合に生じる動作をいくつか示します。
- Facebookグループにチャンネル登録する
- 様々な検索エンジンの検索フィールドに入力された情報を窃取する
- 検索結果をカスタム検索エンジンにリダイレクトする
- 独自の収益化された検索結果を表示する
- iframeに広告バナーを注入する
- 最初に入力されたユーザのURLに到達するまでに一連の誘導手口を実行する
広告IDを置き換えるということは、広告を表示することで得られる収益が、元のパブリッシャー(Webサイト作成者)ではなくアドウェアの運営者にもたらされることを意味します。以下のコードでは、youradexchange.comのパラメータをYandexのマーケットパートナーID(&clid=<value>)に置き換えて付加し、Yandex検索を収益化しています。
図37に示すのは、被害者が検索ボックス内に何かを入力するたびに流出するAmazon検索の検体です。キーワードは「カスタム」変数の中に抽出されています。
図38では、booking.comとそのタイポスクワッティングのドメイン名の前に誘導手口の発見を示します。
図39では、Yahoo、go.mail.ru、ramblerなどの検索エンジンをハイジャックするために使用されたカスタム検索エンジンを示します。
さらにトレンドマイクロは、画面全体にオーバーレイしながらタップや選択操作をキャプチャする透明な要素も発見しました。下掲図40の例では、「Google」ホームページのウインドウ全体に透明な要素が表示されています。ブラウザのコンソールを使ってオーバーレイしているオブジェクトにカーソルを合わせると、透明な要素が強調して表示されます(青で表示)。
■ 結果
サイバー犯罪者の視点から見ると、正規のソフトウェアを騙って不正プログラムを拡散させる手口は悪意のあるソフトウェアを広めるうえで有効な手段と言えます。CopperStealerはさまざまなブラウザからCookieを取得して広告アカウントを制御することを主な目的としており、興味深い機能を備えています。サイバー犯罪者はこれらの機能によって、より多くの潜在的な被害者に不正プログラムを頒布するための広告を拡散することができます。また、サイバー犯罪者が他の「製品」を広告内で宣伝することで、そこからも利益を得ることができます。もちろんブラウザから詐取したCookieは、サイバー犯罪者がさらなる収益を不正に得るために利用可能な機密性の高い個人情報を与えることになります。これはアンダーグラウンドで特に重宝されます。
さらにサイバー犯罪者は、ブラウザのプラグイン(拡張機能)を悪用することで、広告を注入したり、Webサイトの動作を改ざんしたりすることができます。サイバー犯罪者が正規の広告IDを自身の広告IDに置き換えることで、クリック、広告閲覧数、検索数、ダウンロード数などによる本来Webサイト管理者が得るはずだった収益が攻撃者の手に渡ることになり、正規広告主に大きな損失をもたらすことになります。また、これらの情報は、当該キャンペーンに別の収益化の手段をもたらします。
当該調査結果の一部は、proofpoint社のブログ記事でも公開されています。参考にしてください。
■ 被害に遭わないためには
これらの脅威を防ぐためのベストプラクティスをいくつかご紹介します
- warezサイトや不正サイトなどでアプリケーションや海賊版ソフトウェアを検索したり、ダウンロードしたりしないこと。正規のツールやプログラムは、公式のアプリストアから、正規の開発者によるアプリのみダウンロードするように心がけること
- オンラインバンキングやアクセス認証などの機密情報を、ブラウザや入力フォーム内の自動入力フォームに保存することは極力避けること。また、よく利用するPC端末のブラウザキャッシュをできる限り定期的に削除すること
■ トレンドマイクロの対策
トレンドマイクロ製品をご利用のユーザは、弊社のクラウド型セキュリティ技術基盤「Trend Micro Smart Protection Network」(SPN)から提供されるさまざまな技術によって守られています。不正サイトへの対策は、SPNから提供される「Webレピュテーション」技術により不正な Web サイトへのアクセスをブロックします。マルウェア対策は、SPNから提供される「ファイルレピュテーション」技術によるウイルス検出、機械学習型検出や挙動監視機能(不正変更監視機能)の組み合わせによる多層防御が可能です。
これらの技術は個人向けのエンドポイント製品「ウイルスバスタークラウド™」、法人向けのエンドポイント製品「Trend Micro Apex One™」や中小企業向けのクラウド型エンドポイントセキュリティサービス「ウイルスバスター™ビジネスセキュリティサービス」などで提供されています。
■ 侵入の痕跡(Indicators of Compromise 、IoCs)
侵入の痕跡(Indicators of Compromise、IoCs)は、こちらを参照してください。
解析対象となる検体数や関連する痕跡の数が多いため、この一覧は継続的に更新されます。
参考記事:
- 「Websites Hosting Cracks Spread Malware, Adware」
by Jaromir Horejsi, Joseph C Chen, Trend Micro
記事構成:岡本 勝之(セキュリティエバンジェリスト)
高橋 哲朗(スレットマーケティンググループ)
翻訳:益見 和宏(Core Technology Marketing, Trend Micro™ Research)