2013年08月05日

Android OSでの主な通信ブロックアプリの動作方式

Androidスマートフォンでのアプリの通信をブロックするアプリの動作原理分類

プロセスID/iptables方式
低負荷・アプリ別・root必須
・DroidWall https://play.google.com/store/apps/details?id=com.googlecode.droidwall.free&hl=ja

アプリごとにiptables(AndroidOSのベースのLinuxに組み込まれているファイアーウォール)でフィルタする。
iptableを制御するためにroot化が必要で、アプリのIDからフィルタルールを動的生成するために、常駐して実行中アプリを監視する必要がある。原理的に起動直後の通信を取りこぼす場合がある。

フィルタリング自体はAndroid自体アプリではなく、OS側が行なってくれるので、CPU負荷は少ない。
接続先や内容でフィルタすることも不可能ではないが、iptablesのルール数・ルールの表現力的に面倒。
最近の機種はiptablesへのアクセスをSelinuxで(rootでも)禁止しているものがあるため、単なるroot化でなくブートローダーアンロック・カーネルパッチなどが必要なことがある。


HTTPフィルタプロキシー方式
高負荷・URL別・一部はroot要求
・FilterProxy https://play.google.com/store/apps/details?id=com.googlecode.droidwall.free&hl=ja
・AdBlock Plus (android 3.0以前) https://adblockplus.org/en/android-about

端末内にHTTPプロキシを作成・設定してブロックする。機種によっては全アプリに対してAPNの共通プロキシ設定ができるものがあるが、それ以外ではroot化が必要。HTTPを通さない他のプロトコルの通信に効果はない。
HTTPのレイヤで動くので接続先ホスト名やURLのパス、ファイル内容でもフィルタすることが可能。(ただしHTTPSはホスト別でしかできない。)プロキシサーバーとして動く常駐アプリが必要。HTTPを解釈する必要があるので他よりも高負荷。
原理的には、アプリの通信をデフォルトでブロックしたり、アプリ別ルールも作れるはずだが、今のところそのような実装はなさそう。


hostsファイル方式
負荷なし・ホスト別・root必須
・AdAway  https://f-droid.org/repository/browse/?fdid=org.adaway

ブロックしたいホスト名のIPアドレスを127.0.0.1などに上書きするhostsファイルを利用する。
事前にホスト名さえわかっていればプロトコルやアプリによらず、そのホスト名での全ての通信を遮断できる。
逆に、AdAway対策にホスト名を使わず、IPアドレスがハードコードされたアプリやホスト名が変化するような場合には効果がない。アプリ別のルールを設定することは出来ず、未知の新しいアプリをデフォルトで遮断することは出来ない。

OS側が行なっているドメイン名解決を上書きするだけなので、アプリが常駐して負荷が増加することもなく、実際の通信にアプリが関与することはない。


カスタムVPN方式
中負荷・アプリ別・root不要
https://play.google.com/store/apps/details?id=com.netspark.firewall&hl=ja
https://play.google.com/store/apps/details?id=app.greyshirts.firewall&hl=ja

Android4.0で導入されたカスタムVPN実装用APIを利用して、全てのアプリの通信を中継する。
ソケット単位で制御できるので、アプリ別・IPアドレス・ポート別でフィルタ出来る。ただしホスト名でフィルタは出来ない。
なお、ホスト名でフィルタできるというNoRootファイアウォールはIPアドレスからホスト名を逆引きしているため、正引き(見かけのドメイン名)ではフィルタ出来ない。また接続の度に逆引きするため接続開始時の遅延が大きい。

サービスとして常駐が必要だが、ソケットを開く時点で切断できるため取りこぼしがない。送受信の全てがAndroidアプリを経由するため、HTTPプロキシ程ではないにせよ、通信量に応じて負荷は増える。
原理的には通信の中身を読めば、(CPU負荷が大きいが)URLでもフィルタ出来るだろうが、そのような実装はまだないようだ。
(なおVPN利用中はテザリングができなくなる現象をAndroid4.3+norootファイアーウォールで確認)



ブラウザ拡張・userscripts方式

低負荷・一部のブラウザ
FirefoxやOpera、Sleipnirなどのブロック拡張
javascriptでHTMLの要素単位でブロックする。ブラウザに表示されるものであればなんでも自由に制御できる。
当然だが他のアプリに対しては機能しない。
当然そのブラウザ内でしか機能しないので、他アプリの通信を制御することは出来ない。


カスタム外部プロキシ
負荷なし・一部機種でroot化必須
自宅サーバーなどにフィルタを組み込んだHTTPプロキシを立てるなどして、スマートフォンの外でフィルタする
HTTPプロキシを外に置くためCPU負荷は無いが、HTTPにしか効かない。
副次的に圧縮機能(Operaの高速化機能など)を付けることが出来る。


カスタムDNSサーバー
負荷なし・WiFiならroot化不要・3G/LTEなら必須
hostsファイルの代わりに、DNSサーバーでドメイン別にフィルタする。
自作のWiFi AdBlockerはこのタイプ。実際の通信を中継する必要がないため、負荷も増えない。


通信機能が不要なアプリをアプリ単位でブロックするならカスタムVPN方式(Android4.0以降)。root化可能ならhostsファイルを追加することで大抵の不要な通信をブロックできるだろう。 個人的には、hostsファイルだとリスト化が不十分なのでカスタムDNSサーバーを使っている。

念のため、いずれの方式も、利用している通信ブロックアプリ自体が通信を傍受することが原理的に可能なので、通信ブロックアプリを使用中は重要な通信にはHTTPSなどで暗号化しておく必要がある。
posted by ko-zu at 01:30| Comment(0) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2013年07月31日

WiFi AdBlocker 0.9.2公開とAndroid 4.3でのAPI挙動変更メモ

自作アプリの WiFi AdBlockerを更新しました。
https://app.usb0.net/wifiadblock_update.html

Nexus7に配信されたAndroid4.3に暫定で対応しました。


以下アプリ開発メモ

少なくともNexus7 2012に配信された Android 4.3 (API level18)では WifiManager.reassociate()の挙動が変わっていて、saveConfigurationで修正したWiFi接続設定が実際の接続に反映されない。(OSのWiFi設定やAPIから取得する値には正しく反映されている)
今のところアドホックにlevel>=18でdisconnect()を前置きして対処している。

reassociate()を呼んでもWiFiの接続・切断・設定変更イベントがいずれも発生しなくなっているので、Nexus7 2012固有のバグかもしれない。情報求む……
posted by ko-zu at 20:04| Comment(0) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2013年03月16日

WiFi AdBlocker 避難所

wab.pngGooglePlayストアからAdAwayなどの広告ブロックアプリが一斉削除されたため配布・アップデート用ページを作成しました。

https://app.usb0.net/wifiadblock_update.html

(2015/09/19追記) アップデートのメール通知を受け取れるようにGoogle groupsにスレッドを作成しました。
https://groups.google.com/d/topic/wifistaticdns/7IYXLqaOAEo/discussion
利用される方は購読しておくことをお勧めします。(/追記)


いわゆる野良アプリになるため、初めてインストールする際は、端末の「設定」→「アプリケーション(またはセキュリティ)」→「提供元不明のアプリのインストールを許可する」にチェックを入れた後、アプリ配布元のドメインがusb0.net上であることを確認してからダウンロード、またはPCでダウンロードしてメールなどで端末に転送してください。

(インストール方法の例 http://www.teradas.net/archives/6078/

署名のフィンガープリント
SHA256: B9:6B:7F:E4:FF:BB:A6:36:24:98:45:40:74:EC:E4:B6:24:9E:B8:DD:66:D0:BA:41:4D:3D:C5:7E:B9:F0:71:F8



削除前のGoogleキャッシュ 日本語版 英語版

設定不要の広告ブロックアプリ。
端末のWiFi接続設定を自動的に変更して、Androidアプリやウェブサイトの広告・ユーザー追跡へのWiFi接続をブロックします。(GSM/3G/LTEでの接続時には効果がありません)
広告除去を有効にするには、アプリを起動して『AdBlock機能』のボタンをタップしてください。『設定をテスト』で適用成功の表示が出れば完了です。

FAQ http://causeless.seesaa.net/article/343345819.html
ユーザ向け解説 http://causeless.seesaa.net/article/310279216.html
詳細は http://causeless.seesaa.net/article/306520220.html
動作確認済み機種リスト(自動生成) http://adblocktest.usb0.net/gen/ualist.txt

《注意事項》
・本アプリは無保証です。自己責任でご利用ください。
・本アプリは端末のWiFi(無線LAN)の設定を変更します。アンインストール前に、機能を無効化して端末の設定を元に戻してから削除してください。
・一部のアプリはメモリ内に広告をキャッシュしているため、設定変更直後にブロックが適用されない場合はタスクキラーアプリなどでアプリを完全に終了させてみてください。
・本アプリは専用のDNSサーバー(ドメイン名から接続先サーバーのIPアドレスへ変換するサーバー)を利用して不要なドメインへの接続を制限しています。このアプリがWebサーバーとの通信内容を取得したり、コンテンツを書き換えたりすることはありません。
・他の広告ブロックアプリと同様に、本アプリを利用することで通信が遮断されたり、接続先が変化する場合があります。本アプリ利用の有無に関わらず、重要な通信をされる場合は、普段からHTTPSなどの暗号化された通信を利用することを強くお奨めします。
・ブロックには本アプリ製作者の運用するDNSサーバーの広告除去フィルタを利用しているため、ブロック対象をアプリで個別に設定することはできません。
・ブラックリストは英語・日本語・中国語向けのフィルタを利用しています。ブラックリストの誤検出や、新しい広告配信サーバーを見つけた場合は、不具合報告フォームやtwitterなどでお知らせください。
・GSM/3G/LTE経由での接続時には効果がありません。切り替え直後はブラウザのリロードあるいはアプリの再起動が必要です。

《不具合報告》
アプリ内のメニューから不具合報告フォームが開きます。




Ad-Blocking app for non-root users.
This app automatically configures WiFi settings of your device to block Advertiser/Trackers' servers.
Please launch app and tap "Ad-Blocking Function" to activate adblocking.

DL: http://app.usb0.net/net.usb0.wifiadblock.apk

This app only works on WiFi network. (non-rooted apps cannot configure GSM/3G/LTE network.)

more details: http://causeless.seesaa.net/article/311698186.html
known supported devices: http://adblocktest.usb0.net/gen/ualist.txt

update notice: https://groups.google.com/d/topic/wifistaticdns/7IYXLqaOAEo/discussion

=NOTICE=
THERE IS NO WARRANTY FOR THIS APPLICATION. USE AT YOUR OWN RISK.

- This app configures your device. Please turn off AdBlocking service BEFORE uninstall.
- Some app pre-load/cache advertising image into memory to reduce network loads. Please terminate the app completely by task killer app s.t. "White killer" after enable Adblocking function first time.
- This app is designed to be functional on WiFi connection. Non-root app cannot modify GSM/3G/LTE network configurations.

- This Ad-Blocking Function uses customized DNS servers to convert known ad-servers' domain to invalid IP. It means this app and servers DO NOT proxy your web browsing. http://en.wikipedia.org/wiki/Domain_Name_System
- Please remember that you have to use secure connection (HTTPS/POPS/IMAPS etc) for safe browsing even if you do not use this app. Ad-Blocking also works on HTTPS and may improve your privacy.
- Please try "Overwrite WiFi Setting" from menu if your WiFi settings seem to be corrupted.
- This app DO NOT require root privilege nor local proxy. If you already have rooted your device, try great app "AdAway". AdAway also works on GSM/3G/LTE network.

=Support=
- If you need support or reply, please mail me or mention on twitter. App developers cannot get any address to reply from review.
- If this app does not work on your device, please let me know detailed information about your network environment.
To resolve the pleblem, please send to <appsupport@usb0.net>, website url or app name which show ads, model and Android version of your device, connected WiFi AP and manufacture (or service provider of WiFi Hot-Spot), WiFi advanced options (Settings->Wi-Fi-> long tap SSID->modify network->show advanced options). Your cooperation is greatly appreciated.

=BlackList=
- This app will block servers which host Advertising, User tracking and Malware/Spyware related contents.
- Currently, our blacklist contains most mobile in-app ads and some of web ads from companies in US/Japan. To improve blacklist for worldwide users, please let us know any suggestion.
posted by ko-zu at 22:27| Comment(8) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2013年03月07日

WiFi AdBlockerのFAQ的まとめ

自作アプリWiFiAdBlockerにも幾つか質問がきていたのでまとめを兼ねてFAQに。

(追記)GooglePlayストアからAdAwayなどの広告ブロックアプリが一斉削除されたため配布・アップデート用のリンクを公開しました。
http://causeless.seesaa.net/article/347357563.html


・不具合や要望の報告先は?
アプリ内に「不具合を報告」のメニューがあります(…マークをタップしてください)。デバッグ情報を含む不具合レポートのテンプレートが自動的に生成され、メールアプリが起動します。不具合内容を記入してメールしてください。

申し訳ありませんが全てのメールへの返信は出来かねます。ご了承ください。


・有効にしても何も変化が起こらず、広告ブロックが適用されない。
このアプリは広告除去機能を適用可能なWiFiアクセスポイントを発見するまで何もせず待機します。WiFiアクセスポイントに接続済みにも関わらず何も起こらない場合、一旦ブロック機能を無効にして再度有効にしてみてください。
なお、3G/LTE回線には効果がありません。


・有効にした後、「〜にブロック機能を適用しました」とトースト通知が表示されるが、実際にはブロックされない。
「接続をテスト」をタップして適用成功と表示される場合、設定は正常でもアプリやブラウザがダウンロード済みの広告を表示している可能性があります。タスクキラーアプリなどで、該当アプリを完全に終了して再度アプリを起動してみてください。
他のウェブサイト・アプリの広告は正しく除去され、一部のみ表示され続ける場合、その広告がブラックリストに載っていない可能性があるため、該当ウェブサイトのURLを報告いただけると助かります。


・「〜にブロック機能を適用しました」と「〜にブロック機能を解除しました」が交互に表示される。
無線LANアクセスポイントと端末の相性などで、設定変更後のWiFi再接続に極端(60秒以上)に時間がかかる場合、アプリが適用失敗と判断してしまい、リトライを続ける可能性があります。公衆WiFiなど、別のWiFiアクセスポイントで利用できるか試してみてください。


・有効にすると、「〜に適用しました」と出るが、手動で解除するまでネットに全くアクセスできなくなる。
一部のWiFiアクセスポイントや社内ネットワークなどでは、外部のDNSサーバの利用を制限している場合があり、ドメイン名でのネットアクセスができなくなる場合があります。
残念ながらアプリ側では対処不可能なので、該当のアクセスポイントのSSIDを除外リストに追加してください。


・固定IPアドレスを設定済みのアクセスポイントに近づくと「〜適用できませんでした」と表示される
手作業や他の自動設定アプリで、WiFiアクセスポイントの接続に静的IPアドレスを設定済みの場合、WiFi AdBlocker側で自動設定できないためエラーメッセージを表示します。
WiFi AdBlockerを起動して、通知のチェックボックスを外すか、そのアクセスポイントのSSIDを除外リストに追加してください。


・poketwifi.homeなどの、特殊なドメイン名にアクセス出来ない。
一部のメーカーのモバイルWiFiルーターが利用する特殊なドメイン名(他のネットワークにつながったPCなどからアクセス出来ないドメイン)は、ルーターが個別に設定し一般に公開されていないためWiFi AdBlocker側で利用することができません。
pocketwifi.homeは192.168.1.1にリダイレクトしているため、PocketWiFiを利用している方はPocketWiFi本体のIPアドレスが初期設定のままであれば利用できます。


・有効にすると他のアプリが誤動作を起こす
ブラックリストが誤検出している可能性があるので、「不具合が起こるアプリのGoogle PlayストアのURL」をお知らせください。
例: https://play.google.com/store/apps/details?id=net.usb0.wifiadblock


・ブロック対象は?
ウェブ上やアプリ内広告、ユーザー追跡などをドメイン単位でブロックします。
主に、以下の要素を配信するために利用されているドメインをブロックします。
ウェブサイトやアプリを利用する上で、明らかにユーザーが必要としない表示要素(バナー広告など)。ユーザーの情報を追跡するライブラリ(アクセス解析や個人情報送信など)。
ブロックはドメイン単位のため、メインのコンテンツと同じドメインで配信している広告(自社製品の広告など)はブロックすることができません。

正しくブロックできていないウェブサイトやアプリ、個人情報を送信しているアプリの情報がありましたら、アプリ内の不具合報告などからお知らせください。


・動作環境は?
端末側がAndroid2.1以降、WiFiアクセスポイント側がDHCPでIPアドレスが自動的に割り当てられることが必須要件です。
ほとんどの家庭用WiFiルーター・アクセスポイント、公衆WiFi・ホットスポットに対応します。
(制限の厳しい社内WiFiなどDNSプロトコルの利用が制限されている環境下では利用できません。)
動作確認は端末側Android4.2系と2.3系、アクセスポイント側はAterm、Planex、Nexus7 3Gのテザリングで行なっています。
既に利用者がいる端末のリストは http://adblocktest.usb0.net/gen/ualist.txt を参照してください。


・何故WiFiのみ?
root化された端末(端末の内部設定を改竄できる端末)でないと、3G/LTEなどの接続設定を変更することが出来ないためです。WiFiネットワークはユーザーが自由に設定できるため、ブロック機能を利用できます。


・このアプリはインターネットに接続する?
このアプリからインターネットに情報を送受信することはありません。バグレポート機能や設定テスト機能は、端末内蔵のブラウザ・メールソフトにURLやテンプレートを送ることで間接的に実現しています。
https://play.google.com/store/apps/details?id=net.usb0.wifiadblock のアクセス許可に「ネットワーク通信」が無いことから確認できます。


・何故WiFiの設定が必要?
広告ブロック機能はネットワーク設定(DNSサーバー)を変更することでドメイン毎にフィルタリングを行なっています。端末がWiFiネットワークから離れたり、アプリの機能を無効にした際には自動的に元の設定に戻します。


・AdAway、AdBlock Plusと同時利用は?
同時利用しても問題ないですが、ブロックの結果は、「(AdAwayのブラックリスト - AdAwayのホワイトリスト) + WiFiAdBlockerのブラックリスト」になるため、AdAwayでホワイトリストでWiFiAdBlockerのブロックを解除することはできません。
お手数ですが、誤検出しているドメインと参照元URL・アプリをお知らせください。


・WiFi設定自動化アプリとの同時利用は?
WiFi設定を自動化するタイプのアプリとは、相互干渉する場合があります。他のアプリが自動設定するSSIDをAdBlocker側の除外リストに含めることで改善するかもしれません。


・DHCPで割り当てられたIPアドレスをずっと使っても大丈夫?
有効期限切れのIPアドレスは自動的に再取得します。通常の利用環境では問題ないと思われますが、アクセスポイントの割り当ての挙動や、端末の動作に依存するため、PC代わりのタブレットなど常時WiFi接続している端末のお持ちの方は、不具合があればお知らせいただけると助かります。
posted by ko-zu at 20:32| Comment(1) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2013年02月20日

Nexus7 3G版 4.2.2/4.3のテザリング有効化手順メモ

Android4.2.2にアップデートしたNexus7でテザリングを再度有効化するためのメモ。root化前提。
4.3でも動いたため更新しておく。

主に http://blog.livedoor.jp/cn221283/archives/51078716.html を参考。

以下4.3用に更新

前提ツールのapktools と 7zaを android-sdk/platform-toolsに入れてパスを通しておく。
adb pull /system/framework-res.apk .
で取得してバックアップ

APK-Multi-Toolは
・framework-res.apkをothersに入れる
・Setup.batを起動して、3でフォルダ作成、2→1でframework-resからコンパイル用ファイルを抽出
・place-apk-here-for-moddingにframework-res.apkを入れる
・Script.batを起動して 24でプロジェクト選択、1でframework-resを選ぶ
・9でデコンパイルするとprojects/framework-res.apk/に展開されるので編集
・11 System appコンパイルを選択して、yをタイプすると、いったんprojects/framework-res.apk/buildというフォルダにコンパイル結果のコピーを展開
・署名されたresources.arscはコンフリクトするため削除
・何かキーを押す
・unsignedframework-resが生成される
という手順のようだ。

Nexus7 4.2.2のシステムイメージにもテザリング関連のバイナリは入っているようで、
http://forum.xda-developers.com/showthread.php?t=1995737 を参考に、framework-res.apkのうち、res/values/arrays.xmlの
    <string-array name="config_tether_usb_regexs">
        <item>rndis\\d</item>
    </string-array>
    <string-array name="config_tether_wifi_regexs">
        <item>wlan\\d</item>
    </string-array>
    <array name="config_tether_wimax_regexs" />
    <string-array name="config_tether_bluetooth_regexs">
        <item>bnep\\d</item>
    </string-array>
    <integer-array name="config_tether_upstream_types">
        <item>0</item>
        <item>1</item>
        <item>5</item>
        <item>7</item>
    </integer-array>
を修正するだけで動いた。

CWMのアップデートzipを作成してみようと思ったけれど何故か動かないためにAndroid起動中にadb shellから強引にframework-res.apkを上書き。特に問題なく動いている模様。
ラベル:NEXUS7 テザリング
posted by ko-zu at 00:40| Comment(1) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2013年01月06日

WiFi Adblocker, an yet another adblocking app for non-rooted Android

about my app ”WiFi AdBlocker”, https://play.google.com/store/apps/details?id=net.usb0.wifiadblock
(all adblock related apps were removed from Google Play Store. http://causeless.seesaa.net/article/347357563.html )

(日本語版は http://causeless.seesaa.net/article/310279216.html

This App is designed to block annoiing ads alike well-known apps s.t. AdAway, AdBlock Plus do. An advantage of this app is functional without ROOT, proxy settings. and Disadvantage is only works on WiFi network.


How to Use.
  1. Install app.
  2. Launch app and confirm notice "This app configure ... "
  3. Tap to enable "AdBlock Function" and connect your WiFi access point.
  4. Tap "Test current configuration" to examine if your device is properly configured.


How it works.
Android devices uses "DNS server" to resolve IP address (s.t. 10.2.3.4) from Domain name (s.t. example.com).
All Internet Service Probiders serve DNS server for their clients and some of them filter request to block EVIL domain. This is called "DNS filtering".
This app configures WiFi connection setting of your device to use customized DNS server to block ads. All contents on known ad-servers are blocked.


Advantages.
  • NO Rooting needed. = no risks to be brick your device.
  • NO proxy setting needed. = most all apps/browsers can be adblocked.
  • NO INTERNET access permission needed = this app do not access to internet.
  • Little CPU, memory consumption = consumes only when switching WiFi.


Disadvantage
s
  • Only works on WiFi connection. not works on GSM/3G/LTE. Because Android OS do not allow apps to modify DNS server except on WiFi.
  • Only works per domain name. Ads embeded directly in html cannot be removed. Embeded ads are from the author of website and may usefull for you, I hope.
  • This app depends on device-dependent behavior of WiFi configuration/programming API. It works on most devices but some devices cannot be configured properly. There is a list of devices that would be confirmed to work http://adblocktest.usb0.net/gen/ualist.txt
  • May slow-down your (only) first connection to web service because of longer distance to DNS servers.


Security Consideration
Any DNS servers may redirect your browser to 3rd-pirty, possibly evil servers. Your ISP and also evil crackers can do it by attack known as "DNS Poisoning". Keep in mind that you should use HTTPS to secure your connection on every situation. Adblocking by DNS filtering also works on secure websites.

This app NEVER proxy/wiretap your connections. It is guaranteed by Permission mechanism of Android OS. This app only do configure "where the server, that you will connect to, is".


Differences

from AdAway,
it rewrite "hosts file" which is in-device database of domain name to block ad-servers. It requires your device is rooted to work.
It works on all rooted device in very little memory consumption.

from Adblock Plus,
it proxy all http connection and rewrite contents. It requires proxy configuration to your brouwser.
it works on some non-rooted devices and most rooted devices. Memory consumption is a bit high.


Alternatives
If you know what DNS filtering is and how to manage your IP/DNS settings, installation is not required.
The filtering DNS servers, that this app apply to your device, are listed in https://app.usb0.net/blockdns.txt  . but please remember the IPs may be changed.


P.S.
Thank you for reading my poor English. If you have any idea to improve, please let me know via mail or twitter. Comments on this blog are not maintained so much.
posted by ko-zu at 00:17| Comment(0) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2012年12月28日

広告除去アプリ WiFi AdBlocker のユーザ向け解説

自作のAndroidアプリWiFi AdBlockerのユーザ向け解説

(追記) GooglePlayストアからAdAwayなどの広告ブロックアプリが一斉削除されたため配布・アップデート用のリンクを作成しました。  http://causeless.seesaa.net/article/347357563.html

このアプリは AdawayAdblock Plus といった著名な広告除去アプリと同様に、広告やユーザー追跡を除去することを目的としたアプリです。 ブロック方式が異なるため、WiFi限定ながら、root権やプロキシ設定ができなくても利用できます。

使い方
・Playストアからアプリをダウンロードする
・アプリを起動する
・「AdBlock機能 無効」ボタンをタップして 広告除去を起動する
・WiFi経由でインターネットへ接続する

あとは設定不要。アプリのメニュー「設定をテスト」から正しく適用できているかチェックできます。


動作原理
Android端末は、『ドメイン名』(example.comなど)をサーバーの『IPアドレス』(10.2.3.4など)に変換する機能を、プロバイダが運用する『DNSサーバー』に頼っています。
多くのプロバイダ・通信事業者はDNSサーバーをカスタマイズして、不正なサイトなどユーザーに有害なドメイン名を、接続不可能なIPアドレスに変換することで、遮断しています。これはDNSフィルタリングなどと呼ばれ、ユーザーの通信内容を盗聴することなく容易に行えるフィルタリング手法です。

このアプリは、Android端末のWiFi接続設定のうち、DNSサーバーの項目を書き換えて、広告除去用にカスタマイズされたDNSサーバーに自動設定します。たとえば、 koukoku.exmaple.com というドメインを ウェブサーバが存在しないアドレスに変換すれば、そのドメインにはアクセスできなくなり、広告配信やプライベート情報のアップロードも行われなくなります。


利点
・root権限が不要(保証外になるroot化は必要ありません)
・プロクシ設定が不要(ブラウザに関係なく利用できます。また、Androidアプリ内広告にも効果があります)
・インターネットアクセス権限が不要(このアプリは一切ネットとやり取りせず、端末内の電話帳などを送信することはあり得ません)
・個別の設定不要(基本的に全てのWiFiアクセスポイントで利用できるはずです。動作しない環境があればお知らせください)
・端末への負荷がほとんど無い

制限
DNSによる広告フィルタを利用するため、DNSサーバーを通信事業者提供のものから、作者がカスタマイズしたサーバーに変更する必要があります。Android端末ではWiFi接続以外でDNSサーバーを変更することは出来ないため、3G/LTE接続では残念ながら効果がありません。自宅のWiFiアクセスポイント利用時や、モバイルWiFiルーターでのテザリング運用時にご利用ください。
(root化すれば可能ですが、そういう人はAdAwayなどを使うことをおすすめします)

AndroidOSにはアンインストーラで環境をもとに戻す機能がないため、アンインストール前に機能を無効にしてください。誤って削除してしまった場合、再インストールして、メニューから強制再設定をすればもとに戻ります。その後アンインストールが可能です。



安全性と危険性
広告フィルタ用のDNSサーバーはアプリ作者が管理しています。万一、作者がドメイン名を悪意あるサーバーのアドレスに変換するようにした場合、あなたの暗号化されていない通信は読み取られる可能性があります。
しかしこれは、作者にかぎらず、プロバイダやGoogleなどの運用するDNSサーバーを利用した場合にも、DNSポイズニングなどの攻撃手法で同じことが起こりえます。

重要な通信を行う場合は、HTTPSなどの暗号化され、通信相手を検証可能な手法でアクセスしてください
HTTPSなどの暗号化通信で通信対象サーバーを証明すれば、万一DNSサーバーが嘘をついていてもそれを検出し、接続を遮断することができ、通信内容が作者などの第三者に漏洩することはありません。

このアプリに関わらず、普段からHTTPSを使うことは非常に重要です。Gmailなど常時接続することが多く、HTTPSに対応しているサービスは日頃からHTTPSで接続することを強くおすすめします

なお、このWiFiAdblockerアプリは実際の通信を中継するのではなく、通信の接続先を変更する(ための設定を行う)だけのアプリなので、アプリが通信内容を読み取ることはありません



他のアプリとの違い


Adaway
端末がドメイン名をDNSサーバーに問い合わせる前に、端末内蔵のドメイン名データベースであるhostsファイルを優先することを利用して、広告用ドメインをブロックします。端末のroot化が必要です。
hostsファイルが大きくなるため僅かにメモリやCPUを消費しますが、高速に動作し、他のネットワーク接続に影響を与えることはありません。


Adblock Plus
HTTP通信を中継するプロクシサーバーを端末内で起動し、他のアプリがAdblock Plusアプリを経由して通信するように設定することで、広告をhtmlファイルの要素レベルでブロックします。
ページ内に直接埋め込まれた広告なども除去できますが、通信内容を解析するために常時端末のメモリ・CPUを消費します。
アプリがメモリ不足などで停止すると、ウェブサイトにアクセスできなくなります。また、一部の端末やウェブサービスはプロクシサーバー経由の接続を禁止していることがあります。

WiFi AdBlocker (本アプリ)
端末が利用するDNSサーバー(ドメイン名をIPアドレスに変換する機能を持つサーバ)を書き換えることで、広告用ドメインをブロックします。
基本的に端末のメモリ等を消費することはありませんが、WiFi接続が変化した際設定変更を行うため、一時的に起動し終了します。
フィルタ用のDNSサーバーがダウンすると、(設定をもとに戻すまで)ウェブサイトなどに接続できなくなる場合があります。


家庭用ルータの設定は不要?
このアプリは家庭用ルーターからDHCPで自動的に割り当てられるIPアドレスを利用して端末を再設定します。基本的にルーター側の設定は要りません。
気になる場合は、該当Android端末にDHCPで固定IPアドレスを割り当てるとよいかもしれません。

何故無償?
アプリ作者が自分で利用したいがために作ったアプリです。アプリやDNSサーバーの利用は無保証ですのでご自身の判断でご利用ください。


その他の詳細は以前のエントリにて
http://causeless.seesaa.net/article/306520220.html
posted by ko-zu at 01:12| Comment(1) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2012年11月12日

Android版 Sleipnir/Operaで動くuserscriptメモ

ブラウザ側でjavascriptコードを追加する、userscriptに対応してるAndroid対応ブラウザをチェックしてみた。
2012/11時点での対応アプリから SleipnirとOpera Mobile。

Sleipnir Mobile
https://play.google.com/store/apps/details?id=jp.co.fenrir.android.sleipnir

http://extensions.fenrir-inc.com/dev.html
ほぼgreasemonkey互換。HTTPS上でも動作する。
.slex.jsを拡張子にすることで任意ドメインからの自動インストールが可能。ユーザーは悪意あるスクリプトを間違ってインストールしないよう注意が必要。

scriptロードタイミングはwindow.onloadの後なので、再描写が必ず生じてしまう。
例えばDOMの除去は透明化などボックス配置の再描写が起こらないよう注意しないと、ユーザーの操作を妨げる

自作サンプル
Google検索のリダイレクタ除去と広告の半透明化。 Google Search Mod http://slex.usb0.net/gsm.slex.js
標準のYahoo検索からGoogle検索に自動リダイレクトする。 Yahoo to Google http://slex.usb0.net/y2g.slex.js



Opera Mobile
https://play.google.com/store/apps/details?id=com.opera.browser

ほぼGreaseMonkey互換(拡張子 .user.js)と、全ページへの挿入するグローバルscriptの両対応。
opera:configからuserscriptフォルダを手動設定し、そこに手動でダウンロードすることが必要。
HTTPS上では動作しないよう設定できる。

onloadの直前に動作するとのことで、再描写は起こらないように見える。
自作の http://userscripts.org/scripts/show/149312
も動作する模様


Android版FirefoxもGreasemonkey対応できるようにしてくれ……


posted by ko-zu at 19:16| Comment(0) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2012年10月22日

Xperia acroを文鎮化未遂・初期化した

Root化したXperia Acroに、コマンドラインツールキットを適当に入れてしまうという愚を犯し、文鎮化させかけたのでメモ

発端
起動アニメーションが始まらず、途中でウォッチドッグタイマか何かで再起動がかかる。
思い当たることはBusyBox系アプリでLinux標準ツール類をインストールしたこと。シェルでいちいちbusybox mount などとうつのが面倒だったため。
どうやら間違えてbusyboxごと、あるいは必須コマンドを置き換えてしまったらしい。


復旧の試み
adbは再起動までの数十秒ほどはつながるので、スクリプトで/system全てをバックアップから書き戻そうとしてみた。
しかし、busyboxがrootをとれていないらしく、/systemをリマウント出来ない。間にシェルを挟んだり絶対パスで打ってもダメ。
zergrushはroot取得explotコードまで動いているように見えるが、やはりリマウントで失敗する。suはsegfault。
というわけで自分のlinux知識では詰みが確定した。


SEUSで初期化
幸運?にもXperiaはブートローダアンロックの必要が無いので素のAndroid2.3.4のまま。SEUSで初期化した。これは普通に成功。


Googleアカウントの再設定
一番心配だったのはGoogleアカウントの二段階認証。Android端末として登録してあったが、結論から言えば再設定が可能だった。
信頼済みPCからなら、新しい個別パスワードは二段階認証の必要なく発行できるので、アカウント名と個別パスワードでAndroidのアカウントを初期化。
同じPCから二段階認証ページにアクセスし、Android端末を削除して、Google認証アプリをインストールして追加し直すだけ。
ただ、もし信頼済みPCが一つも無かったりした場合、電話確認が必要になるだろうから、復活用ワンタイムパスワードを物理的に印刷しておくことにする。(反省)


Playストアの際登録
端末を初期化してPlayストアにアップデート、最初にログインしたあと、30分くらいはPCのPlayストアページに所有端末が表示されない状態だった。
その間、ちまちまとアプリ検索してインストールするのが面倒だったが、その後は問題なくPCからリモートインストールできた。


Root再取得とLink2SD領域の初期化
Link2SDの挙動が心配だったため、root化する前に、PCからSDメモリカードのExt領域を再フォーマットしておく。
それ以外は特に問題なくzergrushとTh_for_locked(ブート時間を延ばす不要なスクリプトなどは自分用に書き換え)でroot化とカスタマイズ。


最初にプリインストールアプリの大半を削除し、あまり使わなくなったアプリを整理していなかったせいもあって、レスポンスが良くなったように感じる。
これでacroはあと?ヶ月戦える。
ラベル:XPERIA android
posted by ko-zu at 22:16| Comment(0) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2012年10月21日

secroid.jpのアプリ判定方法を外から見たメモ

Androidアプリの危険度を調査しているサイト http://secroid.jp/ の判定パターンはおおまかに、
・Androidアプリの権限
・apk分解してライブラリをシグネチャでチェック(特に広告パッケージ)
・未知の中間コードは静的解析してAPI利用をチェック
しているようだ。

マイナーな広告と改変された広告ライブラリを見逃していたことから、ライブラリの判定は基本的にブラックリスト式。
root取得については、AdAwayのように動的にコマンドを生成して実行している場合に見逃していることから、静的解析でネイティブコマンド実行のAPIを利用しsuへのパスが渡されているかどうかで判断しているように見える。
もしかしたら変数追跡して、suを渡しているか見ているのかもしれないが、いずれにせよroot利用を見逃しているアプリがある。

Secroid検索というアプリを使って自分がインストールしているアプリを調べて見たところ、
https://play.google.com/store/apps/details?id=com.github.ymstmsys.secroidsearch
Adaway
ES ファイルエクスプローラー
Auto Memory Manager
Mount Manager
Link2SD
Samba FileShareing
が危険度High以下、root利用未検出になっている。
いずれも著名なroot必須アプリで、アプリ説明にはrequire rooted deviceなどと明記されている。
今後の精度向上に期待。

アプリ権限依存の危険度判定については、大雑把に
root取得やマルウェア=無条件でDanger
電話帳や通話状態の取得・SDへのアクセス=無条件でHigh
IMEI・GPS+ネット=Low
権限なし=Safe
そのほか、ネイティブコマンドAPIやバックグラウンド動作などの利用でmidになるようだ。ユーザーが認識できる範囲の利用とみなせるユーザ追跡までならLow以下にと判定される模様。


Low以下なら大抵の人にとって実害は無さそう(追跡が気持ち悪いという点を除けば)。
ただし原理的に、擬陽性を避ける方向(なるべく危険度を低く判定する)に評価が偏るので、鵜呑みにせず自分でチェックするのが前提。
当然だけれども、secroid.jpも目安の一つでしかない。
ラベル:secroid 個人情報
posted by ko-zu at 23:11| Comment(0) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする