TamperMonkey を使ってNSAの「不正行為」を検出

Megaに対する新たな「ハッキング」、MegaPWNに関する先週の記事で、Megaのサーバー上でハッキング被害にあわないようにするためには、GreaseMonkeyスクリプトを実装すると良いという話をしました。このスクリプトは主にMegaからロードされたJavaScriptを実行する「暗号マジック」に変更があったかどうかを検索するものです。

私は試しにMEGACheckというTamperMonkeyスクリプト(GreaseMonkeyのChrome版)を書いてみました。これはユーザーがMegaを訪問するたびに実行され、上記のインテグリティチェックを行います。

TamperMonkey(TM)とは?

Tampermonkeyは無料のブラウザエクステンションであり、ChromeやOpera NextのようなBlinkベースのブラウザで最も使用されているUserscriptマネージャです。Google ChromeはUserscriptsをネイティブサポートしていますが、Userscriptsの管理にはTampermonkeyのほうが使い勝手が良いでしょう。

TMとMEGACheckをインストールする方法は?

TamperMonkeyはこちらのリンクをクリックし、ブラウザに追加するだけで簡単にChromeにインストールすることができます。MEGACheckを実行するには、TamperMonkeyのDashBoardに新たなスクリプトとして添付のコードをコピーします。

MEGACheckのソースコード

MEGACheckが行うことは?

このスクリプトは次の機能を実行します。

  • 1.ブラウザ内のMegaのlocalStorageにあるSHA256の値をチェックします。見つからなければ、その値はNULLとなります。
  • 2. 現在のページロードから暗号機能を含むスクリプトのSHA256を計算します。(このスクリプトオブジェクトはDOMから直接アクセスはできません。おそらく安全上の理由からだと思います。ですから、XMLHttpRequestを使ってフェッチする必要があります)
  • 3. 2つを比較し、ユーザーに警告します。値が異なる場合、新しいSHA256値がlocalstorageに保存されます。

このスクリプトはブラウザのlocalStorageが削除されない限り動作します。localStorageの削除は、「安全上の理由がある場合、あるいはユーザーからそのようなリクエストがあった場合」にのみ行われます。

NSAとどのような関連が?

エドワード・スノーデンがNSAの暗号解読能力に関して暴露した内容や、それに絡んだネットいじめ(例: Lavabitの閉鎖)からの展開を踏まえると、同じスクリプトを使って異なるWebサイトからのブラウザへのフィードにおける変更を監視できるでしょう。

Bruce Schneierは、「NSAは根本的な社会契約の土台を崩壊させました。インターネットを構築した私たちエンジニアが今、これを修正しなければなりません」と述べています。

しかし、こうしたエクステンションは修正というよりも、予防策と言ったほうが適切でしょう。提供元に関係なく、自身のコンピュータで自分たちが何を実行するのかを私たちはもっと認識すべきであり、それに向けた第一歩なのです!

他のWebサイトでも使用可能?

使えます。このスクリプトは次のパラメータを変えることで他のWebサイトでも使用することが可能です。

  • 1. スクリプトが実行されるべきWebサイトを指定する「match」パラメータ
    // @match https://mega.co.nz*
  • 2. TamperMonkeyスクリプトが実行される前にどのスクリプトがロードされるべきかを指定する「require」パラメータ
    // @require https://mega.co.nz/secureboot.js*
  • 3. インテグリティチェックが実行されるべきDOMのエレメント(どのWebサイトでもソースコードを確認することで特定できる)

MegaPWNの最新情報

興味深いことに、MegaPWNのリリース以降、Megaは鍵の格納方法を少々変更したようです。MegaPWNスクリプトは現在、ユーザーがログイン中に「Remember Me」を選択した場合にのみ作動し、ブラウザのlocalStorageに鍵が格納されることになります。このオプションが選択されない場合、鍵はsessionStorageに格納され、MegaPWNは鍵へのアクセスに失敗します。