heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

Chromeブラウザでのユーザ情報偽装について

目次

目的

ドライブバイダウンロード(以下DBD)攻撃などにも多少は有効だと考えられる、Chromeブラウザにおけるユーザ情報偽装設定を行う。

※ 2016/07/07 追記
ユーザ情報偽装の意図としては下記で、不正なサイトを閲覧した際に攻撃者(不正なWEBサーバ)へ端末OS・ブラウザ情報を与えないためです。

(A) ブラウザフィンガープリンティング
OS、Web ブラウザ、プラグインの種類に応じて応答の可否を決定する。このとき、標的とするアプ
リケーションが搭載されたクライアントを選択的に攻撃する。攻撃者がアプリケーションの脆弱性
利用した不正なコードを埋め込んでいた場合、アプリケーションのバージョンが異なるとコードが正
常に実行されず、予期せぬ不具合が発生する可能性がある。クライアントがこの不具合を検知する
ことで、悪性サイトを検知できる可能性がある。しかし、クローキングにより、対象を限定して不正な
コード配信することで、不正なコードの不具合が原因で検知される可能性が低くなる。また、D3M
2014 の pcap ファイルから難読化された JavaScript を抽出し、Caffeine Monkey[7]を使用して難
読化を解除した。また、難読化を解除した JavaScript の一部を以下に示す。
if(navigator.userAgent.toLowerCase().indexOf(“msie 7”)==-1)
上記の処理は、アクセスしたユーザの User-Agent が IE7 か否かで処理を変化させている。この処
理は、ブラウザフィンガープリンティングの 1 種であると考えられる。

MWS Cup 2014 事前課題1 「Drive-by Download 攻撃解析」 回答例

方法

  1. サーバが受け取るリクエストヘッダの “User-Agent” を偽装する
  2. ブラウザでの JavaScript 処理におけるユーザ情報処理を偽装する
  3. (おまけ) ルータの WAN 側 MAC アドレスの変更

※本件では Ubuntu12.04 で動作を確認したが、Chrome オプションなどは windows 環境でも同様に有効でした。

現状の環境

Chrome を普通に起動し、開発者ツール(F12) console から navigator オブジェクトを確認する。

> navigator.userAgent
< "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36"
> navigator.appVersion
< "5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36"
> navigator.platform
< "Linux x86_64"

1. サーバが受け取るリクエストヘッダの “User-Agent” (以下UA) を偽装する

これは下記からダウンロードできるアドオン “User-Agent Switcher for Chrome” を用いた。

User-Agent Switcher for Chrome - Chrome ウェブストア

アドオンを有効にし、確認サイトアクセス情報【使用中のIPアドレス確認】で見ると UA が偽装されていることがわかる。

ブラウザを表す文字列(userAgent)    Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14

※他のOS・ブラウザの組み合わせを使いたい場合は、下記などが参考になりました。
 ser-Agents.me - User agent string analysis
 Gecko ユーザエージェント文字列リファレンス | MDN

※各種 windows OS での値については下記が詳しかったです。
 ユーザー エージェント文字列を理解する

アドオン “User-Agent Switcher for Chrome” で “Opera 12.14” を適用した結果です。

> navigator.userAgent
< "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14"
> navigator.appVersion
< "5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36"
> navigator.platform
< "Windows"

UAは変更されましたが、 “navigator.appVersion” は変わっていません。それは次の項目で対応します。
念のため、確認サイトアクセス情報【使用中のIPアドレス確認】でも見てみます。

ブラウザのバージョン(appVersion)    5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36

2. ブラウザでの JavaScript 処理におけるユーザ情報処理を偽装する

下記サイトを参考に Chrome 起動オプションを設定する。
JavaScript 自体を無効にすることは実用的ではないため実施しない。)

起動オプション - Google Chrome まとめWiki
List of Chromium Command Line Switches « Peter Beverloo

/usr/bin/google-chrome --disable-java --no-referrers --user-agent="Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14"
  • –disable-java : Java アプレットなど実行できないようにJAVA無効化
  • –no-referrers : リファラを削除することで「攻撃者の意図する経路」ではない方法でサイトへアクセスしたと見せかける

※ 2016/07/07 追記
リファラを削除する意図は下記です。

(B) リファラ検査
攻撃者は、改ざんした Web サイトの URL がリファラに設定されているか確かめることでアクセス
の可否を決定する。このとき、攻撃者が意図するリファラが付与されている場合のみ応答する。検査
目的で悪性Webサイトにアクセスする際、攻撃者の意図する経路で悪性Webサイトにアクセスする
必要があるため、検査が困難だと考えられる。

MWS Cup 2014 事前課題1 「Drive-by Download 攻撃解析」 回答例

> navigator.userAgent
< "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14"
> navigator.appVersion
< "9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14"
> navigator.platform
< "Windows"

しかしながら、この設定の弊害として私の環境では YOUTUBE などでの Flash プレイヤーが利用できなくなりました。
おそらくブラウザのプラグインが正常に読み込めなくなったためだと思いますが、プライベートではちょっと使いにくい設定ですね。

3. (おまけ) ルータの WAN 側 MAC アドレスの変更

提示しなくて良い情報はISP相手でもできるだけ隠すという意味で、この設定を行います。
これはルータによって設定画面が異なりますが、ご参考までに私のルータ設定画面を載せておきます。

ルータのMACアドレス変更
Pic.1 ルータの WAN 側 MAC アドレスの変更

【2017/3/7 追記】
Network Investigative Technique(NIT) を例として、使用端末のMACアドレスについても偽装することが有効だと考え、下記の “方法 1: systemd-networkd” にて起動毎にMACアドレスを変更することとした。

MAC アドレス偽装 - ArchWiki

閲覧者のコンピューターをスパイウェアに感染させたFBIは、約1300件の本物のIPアドレス(筆者註:Torを経由したIPアドレスではなく閲覧者のIPアドレス)やMACアドレス、タイムスタンプ、利用しているOS、そのバージョン、OSで利用されているユーザー名などの様々な情報を入手した。

FBIが児童ポルノサイト運営、スパイウェアを配布 | THE ZERO/ONE

“1” を実行しないで “2” だけ設定した場合の navigator オブジェクト確認

“navigator.platform” が正しく表示されてしまいますね。*1

> navigator.userAgent
< "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14"
> navigator.appVersion
< "9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14"
> navigator.platform
< "Linux x86_64"

所感

DBD攻撃云々については少々あやかったエントリ名で、実際は Flash プレイヤーや、PDF ビュアーの停止なども考えないといけないですし、 iframe の有無や、 そもそも不正なサイトでは難読化されているとはいえ JavaScript で判定すると静的解析で検知されるため、ブラウザの CSS 処理、レンダリング処理で
ブラウザ判定を行う場合もあるため、ここに書いた内容だけでは防げるとは言いがたいですね。

参考資料
MWS Cup 2014 事前課題1 「Drive-by Download 攻撃解析」 回答例
MWS Cup 2013 事前課題1 「Drive-by Download 攻撃解析」 解答例

一助になれば、というところです。

以上。