Chrome ExtensionのLive HTTP Headersを調査した。Firefox用のものではない。Firefox用のものではない。
11/7追記
- 類似 or 同様の方法で難読化scriptを埋め込んでいる拡張機能が大量にあったため、Googleに報告済み。
- https://twitter.com/bulkneets/status/795260268221636608
Summary in english.
-
I've investigated TOP5000 installed extension from https://crx.dam.io
-
36 extensions contains same obfuscated script.
-
21 extensions already removed from webstore (2016-11-06)
-
Recently updated ones are not included(eg: http headers, live http headers) so there is more malicious extension.
-
I have not made my own crawler for webstore yet, so I have not investigated completely.
-
Many these extensions has common features, css changer for popular websites, copy and paste code, landing page.
-
There are stories that popular extensions are acquired by high prices, but many simple extensions was created by malware / adware dealers, I think.
-
I have not investigated "adware" function, I say "malicious" because it remove CSP header without explanation.
-
Some extensions that have webRequestBlocking permission remove CSP header
https://gist.github.com/mala/e87973df5029d96c9269d9431fcef5cb#file-blob-js-L24
"object" == typeof a.responseHeaders[b] && "content-security-policy" === a.responseHeaders[b].name.toLowerCase() && a.responseHeaders.splice(b, 1);
- 画像からjsを切り出してblobを作って読み込む処理がある、addScriptはbackground.htmlに対して行われる(拡張機能context)
- 拡張機能用のlocalStorageのTが未定義だったら、4568904ミリ秒後に現在時刻がセットされる。
- 現在時刻がセットされていたら、画像からscriptの読み込みを行う。
-
localStorageのIDが未定義だったら、3600000ミリ秒後に現在時刻をセットする。
-
さらに、IDの値と現在時刻の差分が 86400000 ミリ秒以上だったら、web requestに対してイベントハンドラを設定する。
-
動的に外部scriptを読み込んでいるのは、background pageではなくて、表示しているwebページに対して行っている。
-
その際に、CSPヘッダがあれば無効にするということをやっている。
- 拡張機能をインストールしてから、約1日以上経過しているなら、webサイトに対するscript injectionが有効化されている
- 有効化されるとwebサイト側に設定してあるCSPが無効化されてしまう。
- 有効化されているかどうかは、CSPが有効なサイトでCSP違反する操作を行えば分かる。例えばgithubでdeveloper consoleを表示して
document.write("<script>alert(1)</script>")
など打ち込めば分かる(本来blockされる) - 動的にロードされるscriptについてはまだ未調査。保全はしてある。
-
原理的には拡張機能の権限であれば、送受信するhttp headerも含めて取得できることになるが、動的にロードするscriptはwebページのcontextで実行されているため、そこまでは取れない
-
response headerを改変する部分は、拡張機能内に静的に書かれている。
-
取得できるのは、webページ上でのユーザーの操作、表示しているコンテンツ、httponlyがついていないcookie, etc
-
Chrome ExtensionのデフォルトのCSPは、拡張機能のcontextに対して外部scriptのロードを許可しない https://developer.chrome.com/extensions/contentSecurityPolicy
-
そのため、manifest.json で外部scriptを許可するようなCSPを定義していなければ、拡張機能のcontextではどういったscriptが実行されるのかは不変
-
webページに対するscript injectionの手法であれば、インストールした瞬間に全てのデータが抜かれる、といったことは起きない。
-
あくまで拡張機能が有効化されている間に訪問したサイトに対して影響がある。
- 拡張機能内のプライバシーポリシーのhtmlと、AWSのscriptのURLから coolbar.pro というサービスを使っている。
- サイトには拡張機能向けのマネタイズサービスと書かれている
- 拡張機能が買収されているのか、拡張機能の作者自身がマネタイズ目的で組み込んでいるのか、どちらか不明。
- invite codeが無いと登録が出来ないので、どういったメニューがあるのかわからなかった。
-
一定時間経過後に有効化されるので外部scriptのロードなど、不審な動きを検知しにくくなっている
-
画像内に入れるのも、自動的なスキャンで引っかかりにくくなるだろう
-
検知しにくくするための方法がマルウェアが使う手法そのもの
-
webサイト側のCSPを無効化している時点で、少なくともwebサイトに対して害悪がある