前のエントリでFirefox + NoScriptによる内部ネットワークを守る方法を簡単に紹介しました。本当はネットワークを分離(物理的またはVLAN)し、それぞれに安全に利用できるプロキシーサーバー(ローカルネットワークのリソースにアクセスさせない、など)を用意して利用する方が良い、のですがこれには”それなりのモノと手間”が必要です。
Firefox + NoScriptだけでもかなり効果があるので改めて紹介します。前回紹介したのは10年も前ですね :D
まずはどうしてWebブラウザを使ってインターネットサイトにアクセスすると問題が起きるのか説明します。
なぜクロスサイトプリンティングなどが問題になるのか?
クロスサイトプリンティングとはインターネットサイトにアクセスすると、勝手に印刷されてしまう問題です。
Webアプリケーションの脆弱性を悪用し、Webサイトを閲覧しているユーザーのネットワーク上にあるプリンタに、ユーザーが意図しない印刷ジョブを送り込むことができてしまう手法のこと。直接PCに接続されたローカルプリンタには影響がない。
Webアプリケーションにクロスサイトスクリプティング(XSS)などの脆弱性が存在する場合、プリンタを経由してファックスの送信を指示するだけでなく、ハードディスクのフォーマットや新たなファームウエアのダウンロードなど、危険なコマンドを実行することも理論的には可能になる。
ソフトウェアの問題と言えますが、ユーザーはプリンタなどのソフトウェアを直せません。
この問題はブラウザが信頼境界を越えたアクセスをできないようにすることで回避できます。危険なデバイスはプリンタだけではありません。TV、レコーダー、ルーター、WiFi、Webカメラ、その他多くのIoTなど、ローカルネットに繋がっている物ならどれでもリスクがあります。
理想的にはネットワーク的に分離して防御する方法が良いのですが、Firefox + NoScriptでもかなり効果的に防御できます。
Firefox + NoScriptによる防御
インターネットサイトにアクセスするだけで、勝手に印刷されてしまうのは”信頼境界線”を越えたアクセス(インターネットからローカルネットワークへのアクセス)をブラウザが許しているからです。
NoScriptはブラウザのJavaScript実行をサイト単位のホワイトリストで制御できます。これだけでもかなり強力なセキュリティ対策になります。
NoScriptの基本機能
- JavaScriptの実行禁止
- 埋め込みオブジェクト(Flash/Javaなど)の禁止
- HTTPSアクセスの強制
- クリックジャック防止
- Application Boundaries Enforcer (ABE)
HTTPSアクセスの強制以外は、いくつかの例外を除き、全てデフォルトで禁止されます。
Webアプリケーションに詳しい方なら「これがデフォルトだとほとんどのサイトがマトモに動作しない」と思うでしょう。その通りです。動きません。
なぜ不便な拡張機能が便利なのか?
使い勝手は悪くなります。Webサイトへのアクセスは便利にはなりません。不便になります。
しかし、ホワイトリスト型の防御策により、Webサイトへのアクセスが比較にならないほど安全になります。より「安全になる」なる点が便利です。
特にApplication Boundaries Enforcer (ABE)は良くできています。ABEのお陰で、NoScriptをあまり考えずに使っていても(全てのサイトでJavaScriptを有効にしていても)ローカルネットワーク(つまり、自宅内のルーター、TV、ゲーム機、スマホ、IoTなど)に対する多くの攻撃を防御します。
ABEが防御する攻撃
- クロスサイトスクリプティング(Type-0 : DOMベースのXSS、Type-1 : 保存型のXSS)
- クリックジャック
- クロスサイトリクエストフォージェリ(POSTを使うタイプのCSRF防御)
- ローカルネットワークへのアクセス(通常のローカルネットワークへのURLリンク)
デフォルトのABE設定は以下のように定義されています。
# Prevent Internet sites from requesting LAN resources. Site LOCAL Accept from LOCAL Deny
この定義の意味は
ローカルネットワークへのアクセスはローカルネットワークからのみ許可、他は拒否する
です。これによりかなり多くのローカルネットワークへの攻撃が防止できます。
これは凄い、と思ったのはインターネットゲートウェイ(ルーター)の外部IPアドレスの検出機能です。ルーターの外部IPアドレスもローカルネットワークに含まれます。これにより、仮に外部IPからアクセスできる状態であっても、ルーターの脆弱性を利用しファームウェアを書き換えたりする攻撃ができなくなります。
最近ブラウザをFirefox + NoScriptに変更した理由
Chromeを使いつつFirefox + NoScriptも使い続けていたのですが、Webブラウザは全てFirefox + NoScriptに切り替えました。その理由は以下のニュースです。
New ASLR-busting JavaScript is about to make drive-by exploits much nastier
要約すると「メモリアドレスのランダム化で防御されていたJavaScriptによる攻撃が無効化できる」というニュースです。この問題(というよりハック)により、「Webサイトを参照しただけでマルウェアに感染するリスク」が大きく高まりました。
仮にJavaScript実行エンジンに問題があったとしても、そもそもJavaScriptが実行されなければ攻撃できません。転ばぬ先の杖、ということで今は基本的にFirefox + NoScriptを利用しています。
まとめ
一般的なユーザーの方なら「こんな面倒臭いものは勘弁」と思うかも知れません。よく使うサイト(とそのサイトが利用しているドメイン)全てのJavaScript実行を許可するだけでも、かなり快適になります。面倒なのは最初だけです。
攻撃者が攻撃する場合、クラックしたサーバーなどに攻撃用のJavaScriptを置く場合が多いです。この場合、JavaScript実行を許可したよく使うサイトでない可能性が高いです。
Web開発者の方で、利用している開発用ネットワークがシステム的に安全になるような構成になっていない場合、Firefox + NoScript を使うとかなりリスクを軽減できます。
Firefoxもユーザープロファイルを複数作れます。更に良いことに、プロキシサーバーがプロファイル毎に設定できます。
Web開発者の方は、そもそも複数ブラウザを使い分けていたと思います。メインのWebブラウザを切り換える、というセキュリティ対策を検討しても良いかも知れません。
参考: プロキシを使う場合はこちら