AppLog問題とAndroidのセキュリティ

もうほとぼり冷めたかな。AppLogの件とAndroidのセキュリティ問題についての雑感。
まず、個人的には個人情報を集めるビジネス自体は「悪しき」ものではないと思ってる。まあオプトインが適切に行われていなかった問題については後述するとして、これはもちろんオプトインが適切に行われていたらの話だ。
以下長文なので引き返すなら今だ。


リサーチ会社は情報を集めたがるし、アプリ作者は開発費を回収したいし、ユーザはタダでアプリを使いたい、全てのプレイヤーが同意のもとに行うのであればこれはwin-winのビジネスだ。
だいたいこれで文句を言うプレイヤーはユーザなわけだけど、オプトインで同意のもとにやるのであれば拒否すればいいだけの話であって、たかだか数ドルのアプリを乞食するために自分の個人情報を売る選択を自らしたんだから文句言うのは筋違いだ。大体ユーザがみんな99セント~数ドルの金をチャリンと払うような文明的人類ばかりであればこんな情報売買ビジネスは不要だってばよ。みんな金払え。
というわけで、「きちんと同意のもとに行われるのであれば別に問題はない」わけだ。おわかり?
まあ実を言うとだね、ネットワークを使用するアプリはまず多かれ少なかれあなたをトラッキングしてる。AdSenseにしてもGoogle Analyticsにしてもまあ何にしても。
これはブラウザのトラッキングクッキー並くらいに留めるのが良心的なやり方なんだけど、まー結構線引きギリギリだよね。一歩踏み外したらIMEIとか電話番号とかメールアドレスとかに行っちゃう悪い子もいるし、そういうのってAppLogみたいに自分からいちいち取ってますとか言わないもん。
それはそれとしてAppLog的なるものに戻るけど、ちゃんとやるなら結構良心的な部類だと思うんだよね。
この辺の「乞食向けアプリのマネタイズ方法」としては古典的には、オプトインでメールマガジン(と称する要するにSPAM)に同意させるとか、ブラウザにスパイウェア(JWORDとか)を仕込むことを同意させるとかいうのが「合法な」手段として確立している。でもこれってかなり「うざい」よね。そういう意味ではAppLogのように統計情報の提供というのはある種の視聴率調査みたいなものでダメージは比較的少ないし楽な方だと思う。
ああ返す返すもちゃんと同意取ってたらの話だよ。ここ誤読されたくないから何度も言います。
逆に、AppLogくらいの「ぬるい」取り方の情報でどの程度金になるのか?という点の方が気になるんだけど、その辺何か目途は立ってたんすかね。
で、こういうのがちゃんと軌道に乗れば、少なくとも秘密裡に情報抜いてマネタイズしよう、という奴らをギリギリ合法の世界に押し返すことが出来る。だってAppLogだか何だかに任せれば違法なことしなくても乞食向けアプリで開発費が回収できることになるわけだから。そういう意味ではJWORDなんかも社会的な意義はあった(あ?俺?JWORD入りアプリなんて使うわけねーだろ。乞食用だってばよ)
じゃあ何が本質的問題なのかというと、要するに「ユーザの意思に反して」やること。何が悪ってこれが悪。
AppLogについてはなんつーか、純粋に間抜けなだけだと思うんだよね。だって本当に悪さする気があったら最初からこっそりやるもん。技術があまりに未熟で、企画があまりに未熟だった。とてもじゃないけど個人情報なんて劇物で合法に火遊びできるような能力をミログ社は持っていなかった。これ自体は批判されて然るべきだけど、でもそれは「お前は馬鹿だ」であって「お前は悪党だ」とは違う。ああ、まあ、事後対応が不誠実だったってのも問題だけど。
むしろ深刻に問題なのはapp.tvの方でこっちはほとんど弁護の余地がない。
AppLog問題を語る人の少なからずがこの辺の区別が出来ていない=根本的に理解していないのは頭の痛いことだ。
そしてもっと頭が痛いのは、app.tvみたいなアプリがスマフォ界ではフツーにはびこってるので、app.tv単体の問題に矮小化しても事態は悪いままってことなんだけどね。
技術的な話に移る。AndroidはOSとしてどうあるべきか。
根本的にこの問題はスマートフォンなら必ず付いて回る問題。
でもって解決法なんだけど、まずバイナリに対して静的な審査で何とかするとかいうのは論外。これはもう技術的に無理。そんな静的監査があったらプログラミング界の賢者の石だよ……。で、それで何とかなると(非技術者には)思われている某フォンについては横に置こう。
なので真っ当なメカニズムを考えるんだけど、とりあえずどう転んでも必要になるのが動的なAPI監査いわゆるサンドボックス化。まあくだけた言い方をするとOSレベルでセキュリティソフトが内蔵されてるようなもんだね。不正な動作は究極的には実行時にブロックするしかない。
Androidでは既にサンドボックス化は行われている。これ「Javaだからサンドボックスなんだ」と思ってる人が時々いるけど、ネイティブ処理も含めて全部サンドボックスの保護下にあるよ。ネイティブコード書けばパーミッション突破できるんじゃ意味ないからね。
ところがこのサンドボックス、他の例えばiアプリとかと比べると結構ユルい。いや禁止された処理が出来ちゃうって意味ではないよ。そこはちゃんと堅牢。問題は、禁止されてるんだけどユーザの許可(パーミッション)を得れば出来てしまうって処理が結構ヤバイもの多くて、しかもその許可の取り方が非常に大味なことにある。
まあこの辺、許可さえ取ればヤバイ処理も出来てしまうってのはスマフォという特性上仕方ない面もある。そういう強力な便利アプリが使えなきゃガラケーでiアプリでいいじゃんって話になっちゃうからね。
で、パーミッションが大味な問題なんだけど、これは結構テキトーな作りになってる。インターネットの使用許可と言ったらサーバにもクライアントにもなれるしどことも通信出来てしまう、3G通信の状態を取ろうとするだけで電話番号まで取れるような許可を出さないといけない、SDカードアクセスは書き込み許可を出すと全領域許可になりしかも読み出し不可にする設定が出来ない、などなど。なんかもう深く考えて設計されたんだろうかという疑問を禁じ得ないところが散見される。プロセスリストが取れちゃうのはUNIXだと結構仕方ない気がするけど……。
特に問題とされているのはインターネットの使用許可があまりにall or nothingすぎること。開発者の間でも昔からGoogleに要望上がってるネタとして、通信先に応じて許可不許可を出せるような仕組みにして欲しいってのがあって、平たく言うとパーソナルファイアウォールを搭載(っつかLinuxに内蔵されてるのを有効化)してそれをパーミッションシステムと連結してくれたらサイキョーじゃんって話なんだけど、なんかずっと黙殺されてる。みんなも騒ごうぜ。
これがあると、twitterアプリなのでtwitterサーバとだけ通信→セーフ、広告入りFacebookアプリなのでFacebookサーバとAdMobサーバとだけ通信→セーフ、mixiアプリだけどmixiサーバと良く分からない中国のサーバに通信→アウト!!、みたいに出来るんだよね。
他には実は、アプリが他のアプリに対してパーミッション付きで機能を公開するって機能があって、これはすごく強力な機能なんだけどイマイチ使われてない。
これだと例えば、Google謹製のAdMobアプリを端末に1個だけ入れて、AdMobアプリはネットワークの使用許可を取り、かつAdMobアプリは「広告の表示」というパーミッションを(他アプリに対して)パーミッション付きで公開、AdMobを利用するアプリはネットワークの使用許可を「取らず」に、AdMobアプリに対する「広告の表示」というパーミッションで確認を出す、みたいなことが出来る。
これだと何が嬉しいか。AdMobアプリがGoogle謹製ってとこだけ確認しておけばAdMobアプリの通信はまあ信用できるよね。一方AdMobの広告を表示するアプリの方はGoogleと比べれば信用度は落ちるのが実情。でも上記方式だと「AdMobアプリ経由で広告を取得する」許可しか出さないので、アプリの挙動としてAdMobサーバとしか通信しないことを保証できる。そしてアプリは悪いことしてませんという潔白を示せるわけだ。
ただこれ結局使われてない。多分今後もあんまり使われないと思う。MOTTAINAI……。
使われない理由としては、まず別途AdMobアプリを(最初の1回だけとはいえ)インストールしないといけないこと、これは今のAndroid Marketのメカニズムとして「このアプリが必要なので先に入れてね」という依存性解決が出来ない(1個ずつ明示的にインストールすることしか出来ない)こと。
早々にインターネットアクセスを求めるアプリが氾濫してしまい、インターネットアクセスを求めるアプリが忌諱されないような文化が出来てしまったこと。
この辺が挙げられると思う。うーん、残念。
パーミッションを細かくしすぎると見るのがきつくなるって意見もあるんだけど、それって実はあんまり本質的じゃない。
何故かというと、パーミッションが細分化されればされるほど、ヤバいパーミッションは機械的に判断付くようになるから。動的監査項目に対して静的チェックが出来る、みたいな。
つまり、平たく言うとパーミッションを大ざっぱに眺めて「この組み合わせやばそうだよ」とか「この通信先の中国のサーバ、ブラックリストに入ってるからアウトだよ」とか「このアプリは電話帳アクセスするけど有名なアプリで署名もあってるから大丈夫そうだよ」とかをチェックしてくれるようなサポートアプリが簡単に作れるようになる。
っていうか実は今よくあるAndroid用のセキュリティアプリってまさしくこういう動作をしているんだけどね。あれって平たく言えば「あなたの代わりにパーミッションを確認してくれるアプリ」だよ。
長々と書いちゃったけど総括。
AppLogについては「あんな難しいサービスは馬鹿には無理」というのが俺的結論。ただ、(セキュリティの専門家が懸念することも分かるけど)個人的にはビジネスとして「ユーザを騙さない」という鉄則を守るのならば、有意義な(少なくとも必要悪の)サービスとして許されるべきだと思う。
Androidのセキュリティ機構については開発者の間では常識的な話だけどざっくりと書いてみた。まあ一応サンドボックスはあるしそれなりに頑張ってる機構ではあるんだよ。Marketがあれだけフリーダムなのに実被害の事例がほとんどないとか、BlackHatでの報告で審査のあるはずの某Storeの方が倍ほど酷いとかは、まあ今の仕組みでもそれなりの防御にはなっているということではある。
一方でじゃあAndroidのセキュリティ機構が十分かというと正直まだまだ上が狙えるはずなのも確か。そして問題点に対してGoogleの動きもイマイチ鈍いことも確か。エンドユーザ各位におかれましては、Marketに審査を導入しろみたいな愚かなことを主張するのではなく、パーミッションをより徹底的に細分化すべきであるといった方向で騒いで頂ければ幸い。
おまけ。
上記ではフレームワークレベルの話しかしてないけど、実はシステムにバグがあった時に任意コードの実行に繋がりやすい問題についてはAndroidはあまり優秀ではない。というかだいぶ悪い。最近はちょっと改善してきてるけど根本的にメモリ節約機構が権限昇格耐性低い構造になってる。
この辺はえらい人の講演がトゥギャられてるはずなので興味ある人はググってちょ。
そういえばWindows8でも重複メモリ節約機構が入るらしいけどどうやって問題を回避してるだろうね(もしくはそもそも回避していないのか)
(追記)
なんかiPhoneに喧嘩売ってるみたいに取られたので蛇足な記述を削除。
審査が無意味であるという考え自体は変わってません(というか色々話を聞くとその確信は深まった……)
それとAndroidでは、現在実行中のプロセスを取得する、という処理をするアプリはインストール時に確認が出ます。AppLogなりapp.tvなりでもインストール時に怪しい確認は出ます。「Androidの」セキュリティホールだと思ってる人がいるようなので一応追記。
むしろ許可項目ゼロで通報君Zが作れてしまうことの方が実はAndroid的には問題だったりする……。インストール済みアプリの一覧は許可なしに取得できてしまうんだよね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.