CasperJSと類似画像分類で見えてきた、Android野良アプリの具体的な危険性:統計で見るサイバーセキュリティ群像劇(4)(2/2 ページ)
筆者が独自に収集した統計データを基に、サイバーワールドの裏側を探る本連載。今回は、「使うのは危険だ」とよくいわれるAndroid野良アプリの具体的な危険性について調査してみました。
CasperJSでスクリーンキャプチャーを取る
APKのバイナリファイル内のURLの文字列だけでは情報が足りないため、URLの接続先のスクリーンキャプチャーを取得・収集することにしました。つまり、「本稿のために開発したクローラ」にURLを渡して、接続先のWebページのスクリーンキャプチャーを取らせるというわけです。スクリーンキャプチャーを取る際には、前回と同じくCasperJSを利用しました。下記は、CasperJSのプログラムです。
var casper = require('casper').create({ pageSettings: { webSecurityEnabled: false } }); var url = casper.cli.get('url'); casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 '\ ); casper.start(url,function(){ }); casper.then(function(){ this.wait(3000, function() { }); }); casper.then(function () { this.echo( this.getCurrentUrl()); casper.capture("nodejs.png"); }); casper.run();
上のプログラムの15行目で3秒待った後、21行目でスクリーンキャプチャーを取得しています。このプログラムを実行して取得できた画像の数は、最終的に8377枚になりました。
# ls *png | wc -l 8377
ちなみに、ファイル名には接続したURLの文字列を付けています。
blog.sina.com.cn.png pl.linkedin.com.png connect.facebook.net.png,
なお、先ほどの国別通信先の表2を踏まえて、これらの文字列にgrepをかけてみました。
# grep ".cn" tmp | wc -l 26 # grep ".ru" tmp | wc -l 165 # grep ".us" tmp | wc -l 134 # grep ".jp" tmp | wc -l 62 # grep ".kr" tmp | wc -l 42
cnつまり、中国の数が極端に低くなっています。やはり中国のネットワークにCasperJSなどを使ってクロールをかけると、他の国々と比べて弾かれることが多いということでしょうか。また、政府系「gov」のサイトで、米国のものに接続しているものがないか調べてみました。
# grep ".gov" tmp grants.nih.gov.png,18446726447159788032 www.nasa.gov.png,9359034179300440320 www.whitehouse.gov.png,18374967953037592326
1番目は医療系のサイトです。3番目に、ホワイトハウスへ接続しているものがあるようですが、今回は詳しく調べませんでした。
Average Hashで類似画像分類
かなり前置きが長くなりましたが、Average Hashというアルゴリズムを使って、CasperJSで取得した8377枚の画像を分類してみました。
Average Hashはシンプルな類似分類を行う際に使える特徴量を計算するアルゴリズムです。ハッシュということになっていますが、いわゆるバイナリハッシュと言われるものの1つで、似たデータ(この場合は画像)は、近いハッシュ値に変換されます。一時期Webデータの検索などに関して話題になったLSH(Locality Sensitive Hash)に近いものです。
具体的な処理は、画像をグレースケールに変換し、全画素の平均を元に各画素を処理し、画素の値が平均より上なら「1」、下なら「0」としてハッシュ値を構築します。
下記は、Average Hashのプログラムの抜粋です。
9 def avhash(im): 10 if not isinstance(im, Image.Image): 11 im = Image.open(im) 12 im = im.resize((8, 8), Image.ANTIALIAS).convert('L') 13 avg = reduce(lambda x, y: x + y, im.getdata()) / 64. 14 return reduce(lambda x, (y, z): x | (z << y), 15 enumerate(map(lambda i: 0 if i < avg else 1, im.getdata())), 16 0) 17 18 def hamming(h1, h2): 19 h, d = 0, h1 ^ h2 20 while d: 21 h += 1 22 d &= d - 1 23 return h 24
上のプログラムを使って、収集したスクリーンキャプチャーの画像の類似性を計算してみました。実行例は下記のようになります。
# python averagehasg.py 1.png avhash: 1.png 7961933613770873918 : : 中略 : : 45 17568966557860594049-2212.png 17568966557860594049 45 9367381568229835137-2735.png 9367381568229835137 45 13961653357748797923-2549.png 13961653357748797923
図2は、Average Hashによって算出されたハッシュ値によって、画像を並べたものです。筆者は画像処理の専門家ではありませんが、ところどころに大体似たようなイメージが固まっているのが分かると思います。
ここで、この画像の3段目に注目してください。
用途は不明ですが、メールアドレスとパスワードを入力する画面がキャプチャーされていました。当然今回作ったCasperJSプログラムはスクリーンキャプチャーを取るだけなので、このページの用途も詳細な背景も分かりませんでした。
そして前回と同じく今回のオチになるのですが、図2で図3の左にある画像を見てください。なぜかアノニマスのものが混ざっていました。
ここでは詳細なことは説明できませんが、これはあるストリーミングのサイトでした。関連するかどうかは分かりませんが、ちょっと前に下記のようなニュースがありました。
参考リンク:アノニマス、ニュースサイト立ち上げに5.5万ドル調達(WIRED.jp)
このアプリがアノニマスによって開発されたものなのか、あるいは、たまたまアノニマスのコンテンツがストリーミングされていたのかは不明です。
というわけで、APKファイルの通信先を見る場合、大量の文字列を見る必要がある場合は、スクリーンキャプチャーを取る方法もあるかと思います。データを何らかの画像に対応させると、類似検索のテクニックが使えることがあるかと思います。
今回のまとめ
今回の記事の内容を以下にまとめました。
- 今回は「baksmali」などによるAPKファイルの解析ではなく、対象を野良アプリに絞って、grepのよるURL文字列の抽出を行った
- マルウェアの混入率は、野良アプリマーケットの方が、Google Playよりもはるかに大きいと報告されているが、実際はそう頻繁にダウンロードされるものではなさそうだ
- スマホアプリは、米国、日本、中国などで利用が盛んであり、特に米国と日本ではゲーム系アプリの利用が多いとされているが、意外とストリーミングをするアプリや、ロシアからアプリも興隆しているようだ
- Androidアプリでも、割とメジャーどころのSNSへ接続するものは多いようだ。場合によると、Web APIを使っているのかもしれない
- Androidアプリの処理内で知らず知らずのうちに、メールアドレスやパスワードを入力するページへアクセスする場合が結構見受けられる
- 大量の文字列を処理しなくても、類似画像検索で割と変なものは見つけられる場合がある。ただし、スクリーンキャプチャーが取れる場合は多くなく、的を絞った調査規模に限って有効である
セキュリティベンダーが行っているような解析はできませんが、各国で行われているアプリ開発の空気感や、Webを介した広告またはWebページへのアクセスを誘導する目的のAPKが以外に多いのではというのが筆者の印象です。
次回は、Webで流布されているサイバー攻撃に関係したIPアドレスが、実際どれほど信ぴょう性があるのか、実際に統計を取って確かめてみたいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 第3回 Androidアプリのストア環境について知っておくべきこと
Androidをターゲットとしたマルウェア(不正アプリ)の報道が増えている。背景にはAndroidのアプリ・ストア環境にも一因がありそうだ。エンドユーザーを抱える管理者として注意すべき点をまとめる。 - Androidセキュリティ――アプリからユーザー視点までイチから解説
子供からご年配の方々まで、幅広いユーザーを抱え、スマートフォン市場で圧倒的なシェアを持つ「Android」。そのセキュリティ対策(主に技術面)について、「アプリ」「マーケット」「Android OS」「ユーザー」の各視点から解説します。 - 今、見直すべきAndroidのセキュリティ
爆発的な勢いで普及し始めたAndroid端末は、大きなポテンシャルを秘める一方で、セキュリティという課題にも直面しています。この連載ではAndroidアプリ開発者や一般ユーザー、ビジネスユーザーと、あらゆるユーザーを対象に、Androidのセキュリティについて解説していきます。(編集部)