Magecartが主に標的とするのは、D2C(Direct to Consumer)モデルでの商品販売に使用されるECサイト構築用プラットフォーム「Magento」です。2016年以降、Magecartは、Magento APIのPHPオブジェクトインジェクションの脆弱性(CVE-2016-4010)を悪用して、Magentoを使用する小売業者を攻撃してきました。しかしCrowdStrikeによる最近の調査では、MagecartがMagentoのサードパーティ製プラグインと拡張機能に内在する未公開のPHPオブジェクトインジェクションの脆弱性も攻撃していることが判明しました。CVE-2016-4010と同様に、攻撃者がこれらの脆弱性を悪用すると、脆弱なサーバーのコンテキスト内で任意のコードを実行することができます。これは一般にリモートコード実行(RCE:remote code execution)の脆弱性として知られています。
最初の偵察
最近のMagentoへの攻撃では、最初に自動化されたスキャナーを使用して、以前に追加された脆弱なMagento用プラグインのURI(Uniform Resource Identifier)を特定しようとしていることをCrowdStrikeが発見しています。このスキャナーは基本的なPHPオブジェクトインジェクションペイロードを使用してさまざまなURIをリクエストし、脆弱なサーバーを探します。リソース/madecache/varnish/esi のスキャンリクエストの例を以下に示します。

図1を見ると、攻撃者はbase64でエンコードされた長い文字列をmiscパラメーターに割り当て、2番目のリクエストパラメーターdlを送信しています。miscパラメーターを詳しく見ると、データがbase64でエンコードされている可能性が高いことがわかります。データをデコードすると、典型的なPHPオブジェクトのポストリクエストを示すシリアライズされたPHPオブジェクトが表示されます。

デコードされたPHPオブジェクトは、オブジェクトの末尾に埋め込まれた29文字の文字列を除けば無害に見えます。

図3:悪質なPHPオブジェクト
PHPオブジェクトがデシリアライズされると、オブジェクトに含まれるPHPコードのスニペットがサーバーのコンテキスト内で実行されます。リソース/madecache/varnish/esi/に脆弱性がある場合、サーバーは図3に示す「dl」パラメーターの内容を取得して評価します。dlパラメーターの値をパーセントデコーディングすると、次のコードスニペットexit("<h1>Hi</h1>");が表示されます。このことから、攻撃者がHTTP 200のレスポンスHiを確認するために、多数のドメインを自動スキャンしている可能性が高いと判断できます。このレスポンスによって、照会したURIがWebサーバー上に存在し、PHPオブジェクトインジェクションの脆弱性が存在するかを確認しています。
CrowdStrikeは、Magecartの攻撃者が次の30のURIをスキャンしていることを確認しました。
・ /rewards/customer_notifications/unsubscribe/
・ /appointment/index/index/
・ /AvisVerifies/dialog/index/
・ /pdffree/Product/pdfsave/
・ /ajax/Showroom/submit/
・ /prescription/Prescription/amendQuoteItemQty/
・ /netgocust/Gwishlist/updategwishlist/
・ /CustomGrid/index/index/
・ /simplebundle/Cart/add/
・ /layaway/view/add/
・ /multidealpro/index/edit/
・ /vendors/credit/withdraw/review/
・ /customgrid/Blcg_Column_Renderer_index/index/
・ /tabshome/index/ajax/
・ /customgrid/Blcg/Column/Renderer/index/index/
・ /customgrid/index/index/
・ /aheadmetrics/auth/index/
・ /rewards/customer/notifications/unsubscribe/
・ /gwishlist/Gwishlist/updategwishlist/
・ /vendors/credit_withdraw/review/
・ /vendors/withdraw/review/
・ /emaildirect/abandoned/restore/
・ /rewards/notifications/unsubscribe/
・ /bssreorderproduct/list/add/
・ /advancedreports/chart/tunnel/
・ /minifilterproducts/index/ajax/
・ /ajaxproducts/index/index/
・ /qquoteadv/download/downloadCustomOption/
・ /freegift/cart/gurlgift/
・ /madecache/varnish/esi/
脆弱性が存在する場合、攻撃者は後でそのWebサイトに戻り、アプリケーションをさらに悪用します。CrowdStrikeは、「オンライン顧客からクレジットカードデータを盗み出す」という共通の目的を持った、3つの異なる攻撃パスを確認しました。
RCEから決済情報まで:攻撃パスの分析
例1:コアJavaScriptライブラリを上書きする
この攻撃パスでは、攻撃者は被害者のWebサイトで使用されているJavaScriptライブラリファイルを自身が制御するJavaScriptで上書きしようとします。このタイプの攻撃のHTTPリクエストは次のようになります。

図4のペイロードは、dlパラメーター値が大きい点以外は、スキャンするペイロードと構造が似ています。攻撃者は同様のPHPオブジェクトインジェクションの手口を使用して、脆弱なアプリケーションのコンテキスト内でdlパラメーターを実行します。dlパラメーターの値をパーセントデコーディングすると、図5のようなコードスニペットが表示されます。

図5に示すように、攻撃者はネイティブPHP関数を使用して、攻撃者が制御しているインフラストラクチャー$urlからサーバーがJavaScriptファイルをダウンロードするようにして、被害者のサーバー$dest上のローカルファイルを上書きするようにします。
コアJavaScriptライブラリファイルはすべてのMagentoのWebリソース上で参照されるため、攻撃者はこれらのファイルを戦略的に上書きします。つまり、Magentoを使用したWebページを閲覧するたびに、被害者のブラウザによってこれらのファイルが実行されるということを意味します。JavaScriptコードが、Webページ上でクレジットカード情報入力フォームを認識すると、クレジットカード情報の送信時にその内容を取得し、攻撃者が制御するインフラストラクチャーに転送します。
例2:Magento設定データベーステーブルの改ざん
CrowdStrikeは、攻撃者による別の一連のペイロードを使用する第2の攻撃ベクトルも確認しています。攻撃者は、同じPHPオブジェクトインジェクションの脆弱性を利用してリクエストパラメーターを実行する際に、最初に次のPHPコードを実行してMagentoの設定ファイルlocal.xmlを取得します。

設定ファイルlocal.xml1には、Magentoデータベース用のプレーンテキストのユーザー名とパスワードが含まれています。攻撃者らは、同様のペイロードを使用してデータベースに直接接続するために必要な認証情報を入手できていました。詐取した認証情報を使用した攻撃者らは、自分たちが制御するインフラストラクチャーを参照するようにMagentoのコア設定テーブルcore_config_dataを書き換えます。攻撃者のコマンドは、下の図7のようになります。

下の図8に示すように、base64でエンコードされた変数$kが生のSQLクエリにデコードされます。

図6で参照される変数config_idは、通常ECサイトのすべてのページに含まれているfooterなどの汎用的なHTMLタグに対応しています。そのため、攻撃者が制御するJavaScriptが各ページ上で実行されると、攻撃者はクレジットカードの入力フォームを識別し、クレジットカードデータを盗み出すことができます。
例3:古い脆弱性の悪用
データベースアカウントの作成
Magentoのデータベースにアクセスするために、攻撃者はパッチSUPEE-5344が提供されていないMagentoのバージョンも悪用しました。このエクスプロイトは、Webフロントエンドに対してGETリクエストを送信し、データベース管理者のアカウントを作成できるという脆弱性を悪用します。図9にGETリクエストの例を示します。攻撃者はWYSIWYGページエディターのリソースを参照してSQLインジェクションを行い、base64ペイロード内にデータベース管理者の新しいアカウントを作成します。

図10はデコードされたペイロードを示しています。データベース管理者アカウントrogueaccountが作成されています。

Magpleasureの拡張機能を悪用
不正なデータベース管理者アカウントが作成されたら、攻撃を補助するための追加ツールをインストールできるようになります。Magentoのエクステンション(拡張モジュール)であるMagpleasureファイルシステムを使用すると、管理者はWebサーバーのファイルシステムを変更できます。WindowsのPowerShellと同様に、Magpleasureは正当な目的に使用すべきものです。しかし、攻撃者がこの機能を悪用して、Webディレクトリ内のファイルを改ざんし、さらなる攻撃に利用することも可能です。CrowdStrikeが行った調査によって、被害者のWebサーバー上のphp-fpm-error.logファイル内にMagpleasureが確認されました。図11にエラーログの例を示します。

Magentoコアファイルのコードインジェクション
JavaScriptライブラリの上書きに加えて、CrowdStrikeは攻撃者がMagento内のコアPHPファイルを改ざんしていることも突き止めました。この例では、攻撃者は、base64でエンコードされたコードをコアMagentoファイルfunctions.phpに挿入しています。悪質なコードスニペットは、HTTP POSTリクエストから被害者の支払情報を抽出し、抽出した情報をディスク上のファイルにコピーします。functions.phpファイルにインジェクトされたコードを図12に示します。

図12:難読化された攻撃用コード
図13は難読化された図12のコードを復元したものです。

図13:復元された攻撃用コード
functions.phpが他のMagentoスクリプトにインポートされると、悪質なコードがロードされます。このスニペットは、preg_matchの正規表現の文字列と、被害者からのHTTP POSTリクエストによって送信されたデータを照合します。正規表現が一致すると、スキマーは、$_POSTと$_COOKIEのデータをシリアライズして、WebサーバーのNFSディレクトリにあるJPGファイルに書き込みます。攻撃者は、データを収集する際にWebサーバーからJPGファイルを断続的に取得します。
検出および防止対策
このセクションでは、ECアプリケーションに対する攻撃を検出・防止する技術の概要を説明します。
Magento用サードパーティ製エクステンションとプラグインの監査
Magentoのインストールを監査して、デプロイの際にMagecartの標的となる前述のプラグインが含まれていないか確認するようにしましょう。見つかった場合は、使用しているWebインフラストラクチャーに応じて、そのプラグインを削除するか、あるいはApache mod_rewriteなどを使用して.htaccessを編集し、それらのリソースへのリクエストをブロックすることをお勧めします。攻撃者がそれらのリソースを標的としていないか、フォレンジック調査を実施して確認するようにしましょう。さらに、不要なプラグインやエクステンションは削除し、ECアプリケーションの攻撃対象領域を縮小しておきましょう。
Magento Enterpriseのデータベースロギング
CrowdStrikeは、すべての変更が記録されるMagentoデータベースのテーブルを分析することにより、以前の攻撃者の活動を特定することに成功しました。Magentoのエンタープライズバージョンにのみ採用されているenterprise_logging_event_changesテーブルには、Magentoデータベースへの変更が記録されます。最初の攻撃以降に、データベースに何らかの取り消しや変更が行われた場合、フォレンジック調査の担当者にとってこの機能は非常に役立ちます。下の図14は、enterprise_logging_event_changeテーブルのエントリの例を示しています。この例では、悪質なJavaScriptファイルのURLがabsolute_footerフィールドに追加されています。

Webログの分析と監視
EC環境では、不正または不審なアクティビティが発生していないか、積極的にWebアクセスログを監視・分析する必要があります。特に、SQLインジェクションのメソッドの存在や、WebShellの設置・通信には注意が必要です。またバックエンドのECアプリケーションデータベースへの認証状況をモニターして、認識済みの送信元IPアドレスからの正当なアクセスのみが発生していることを確認しなければなりません。
定期的なペネトレーションテストの実行
EC環境では、少なくとも2年に1度、Webアプリケーションのペネトレーションテストを実施して、EC用Webアプリケーションにパッチが適用され、安全が確保されていることを確認する必要があります。ペネトレーションテストは、WebアプリケーションやWebアプリケーションを実行するシステム、およびEC用Webサーバーやデータベースにアクセスしようとするシステム上にパッチ未適用の脆弱性がないかを確認することを目的として、第三者が実施する必要があります。
コードの整合性チェックの実施
EC環境では、ECアプリケーションのコード整合性検証のためのチェック機能/プロセスの実装を検討する必要があります。このようなチェック機能では、上記の「コアJavaScriptライブラリの上書き」を検出できます。たとえば、ECサイトの管理者は、ECアプリケーションが使用するコアJavaScriptライブラリのSHA256ハッシュを計算し、これらのライブラリのハッシュが、予想されるメンテナンス期間中にのみ変更されるようにすることができます。
定期的な更新とパッチの適用
EC環境では、コアECプラットフォームおよびApacheやPHPなどの依存関係にあるアプリケーションに定期的にパッチを適用することで、攻撃対象範囲を最小限に抑える必要があります。また、管理者は不要なECアプリケーション、プラグイン、エクステンションを監査・削除しなければなりません。
Webアプリケーションファイアウォールの設置
Webアプリケーションファイアウォール(WAF)を配置して構成すると、攻撃の成功を抑制できます。WAFは、PHPオブジェクトインジェクションやSQLインジェクションなどの潜在的なコードインジェクション攻撃をブロックして、攻撃検出時にはアラートを生成するように設定する必要があります。セキュリティ担当者は、生成されたアラートを定期的にレビューして、適切に攻撃が防御できたことを確認するようにしましょう。
高度なエンドポイントプロテクションの実装
CrowdStrike Falcon プラットフォームをはじめとする高度なエンドポイントプロテクションプログラムを導入すると、攻撃が成功するリスクを低減できます。Falconでは、数々の強力なメソッドを使用して、急速に変化するTTPに対抗する保護機能を提供しています。次世代型アンチウイルスFalcon Preventは、ECアプリケーションに対する攻撃でよく使用されるエクスプロイトやWebシェルの実行を検出して防止することができます。
まとめ
Magecartの攻撃者らは、クレジットカード情報の詐取を目的に、決済用Webアプリケーションを攻撃し続けています。2016年以来、MagentoのEC製品自体に既知の重大な脆弱性が存在していないにもかかわらず、攻撃者は一般的なサードパーティ製のMagento用プラグインを標的にすることによって侵害に成功しています。同様の手口はPinnacleCartのようなECアプリケーションにも使用されていました。CrowdStrikeのアナリストは、この攻撃の傾向は今後も続くと予想しており、攻撃者が決済カード情報を盗み出して悪用する可能性を最小限に抑えるために、ECサイト管理者に前述の検出および防御対策を検討することを勧めています。
脚注
1. このファイルはMagentoのバージョンによって異なる可能性があります。
追加のリソース
・ 御社が最も重要なセキュリティ上の問題に対処するにあたり、CrowdStrikeが行える支援について説明しています。
CrowdStrike ServicesのWebページはこちらです。
・ 2018年 CrowdStrike Servicesサイバーセキュリティ侵害調査報告書をダウンロードして、実世界におけるインシデント対応に関する調査結果をご覧ください。攻撃の詳細と、御社の対策に役立てていただける推奨事項が記載されています。
・ サイバーセキュリティ侵害調査報告書のオンデマンド版Webキャストをご覧ください。Stories From the Front Lines of Cybersecurity in 2018 and Insights That Matter for 2019(2018年のサイバーセキュリティの最前線からのストーリーと2019年のセキュリティ戦略に役立つ情報)
・ Falconプラットフォーム製品紹介ページで、CrowdStrikeの次世代型のエンドポイントプロテクション技術についてご一読ください。
*原文はCrowdStrike Blog サイト掲載:Threat Actor “Magecart”: Coming to an eCommerce Store Near You