「もいちどイチから! HTTP基礎訓練中」でWebアプリケーションの脆弱性と対策について学んだクウが、今度はAndroidの世界に挑戦。Android特有の問題、PCや従来の携帯電話向けのWebアプリとの違いや対策について紹介します。(編集部)
「Androidアプリについて語る会」の集まりで、あらためてAndroidアプリケーションを開発する際には、どういったデータがどこに出力されているかを正しく把握することが大切だと認識したクウ。
一方、会社のほうでは順調にAndroidアプリの開発案件が進んで……。
クウ 「終わった〜♪」
ナツ 「おー! おめでとー」
クウ 「じゃあ、いよいよリリースですかね? まだリリース予定日まで1週間くらい日がありますけど〜」
ナツ 「今回はちょっと重要な情報を扱うアプリになるから、ちゃんとセキュリティの検査をやろうと思ってね」
クウ 「おー。けど、うちにAndroidセキュリティに詳しい人っていましたっけ……?」
ナツ 「そうだねー。だから、今回は他にお願いすることにしたんだよね♪」
クウ 「なるほどー」
ナツ 「こないだ会ったアキって子覚えてる? そういう検査とか請け負ってたりするみたいだから、お願いしてあるの」
クウ 「なるほどー!」
Android端末は、従来のフィーチャーフォンなどに比べ、PCに近い形で操作可能だ。保存されているアプリケーションのデータを操作したり、アプリケーションの挙動を監視したりといったことが、比較的容易に行える。また前提として、PCよりも持ち運ぶ機会が多くなる。このため、データの管理にはいっそうの注意が必要だ。
従って、Androidアプリケーションをリリースする前には、セキュリティ上問題がないか、または問題を最小化できているかどうかの確認作業が必要だ。
特に以下の3点については、悪意のあるユーザーから狙われる可能性が高いため、注意が必要となる。
Androidアプリケーションに特有の要注意項目は、(B)、(C)の端末内データおよびプログラムデータ自身である。こうした重要なデータの保存や処理部分の扱いに関しては、従来のフィーチャーフォン向けのアプリケーションや、PCブラウザから利用することを前提としたWebアプリなどとは大きく異なってくる。
クウ 「どんなことをやってもらうのですかー?」
ナツ 「なんか、逆コンパイルとかしてプログラムの解析までやってくれるらしいよ」
クウ 「ひえー! そんなんもできるんですかー。何も対策してないけど大丈夫ですかねぇ……」
ナツ 「どうだろうね……私も正直、よく分かんないや」
クウ 「どうしましょ。何か今からでも対策したりとか〜」
ナツ 「そうだね。とりあえず、分かる範囲でってことで“難読化”くらいしておこうか」
クウ 「難読化……? ほう……」
基本的にAndroidアプリケーションのプログラムは、Javaによって記述されている。そしてAndroidアプリケーションに限った話ではなく、Javaプログラムは一般的に、コンパイルされた状態でも、逆コンパイルによって容易に元コードの復元が行える。
そのため、逆コンパイルに対する対策として、「難読化」という手法が用いられる。難読化とは、逆コンパイルされてしまったとしても、内部のロジックを分かりにくくするような仕組みで、文字通り「読むことを難しくする技術」である。
Eclipseなどを利用したAndroidアプリケーションの開発環境では、この難読化を行う「ProGuard」という仕組みが用意されている。これを利用すれば、リリース用のapkファイルを作成する際に、簡単な手順で難読化を行うことができる。
関連リンク
ProGuard | Android Developers
http://developer.android.com/guide/developing/tools/proguard.html
リリースを行うapkファイルに対して最終的な段階でのチェックが必要となる。
クウたちは、作成したAndroidアプリケーションに対して早速難読化を行い、アキとの打ち合わせに臨んだ。
Copyright © ITmedia, Inc. All Rights Reserved.