サンプルアプリの問題説明

サンプルアプリの問題

サンプルアプリ「11時計」に存在している問題について詳しく説明します。
具体的にどのような実装がマルウェアと誤解される可能性につながるのか、ソースコードを確認してみましょう。

問題のあるソースコード

プロジェクト Permission
ソースファイル AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.go.ipa.permission"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />
    <!-- ▼▼▼マルウェアと誤解される可能性のあるソースコード▼▼▼ -->
    <!-- 完全なインターネットアクセス -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 連絡先データの読み取り -->
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <!-- カレンダーの予定の読み取り -->
    <uses-permission android:name="android.permission.READ_CALENDAR"/>
    <!-- 単語リストの読み込み -->
    <uses-permission android:name="android.permission.READ_USER_DICTIONARY"/>
    <!-- ブラウザの履歴とブックマークを書き込む -->
    <uses-permission android:name="android.permission.WRITE_HISTORY_BOOKMARKS"/>
    <!-- 機密ログデータの読み取り -->
    <uses-permission android:name="android.permission.READ_LOGS"/>
    <!-- 実行中のプロセスの数を制限 -->
    <uses-permission android:name="android.permission.SET_ALWAYS_FINISH"/>
    <!-- SMSメッセージの送信 -->
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <!-- 電話番号発信 -->
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <!-- SMSの受信 -->
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <!-- SMSの読み取り -->
    <uses-permission android:name="android.permission.READ_SMS"/>
    <!-- 精細な位置情報(GPS) -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!-- おおよその位置情報(ネットワーク基地局) -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!-- BLUETOOTH接続の作成 -->
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <!-- SDカードのコンテンツを修正/削除する -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!-- 録音 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <!-- 写真と動画の撮影 -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <!-- システムの全般設定の変更 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <!-- 実行中のアプリの取得 -->
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <!-- タイムゾーンの設定 -->
    <uses-permission android:name="android.permission.SET_TIME_ZONE"/>
    <!-- 外部ストレージのフォーマット -->
    <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"/>
    <!-- キーロックを無効にする -->
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
    <!-- Wi-Fi状態の変更 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <!-- BLUETOOTHの管理 -->
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <!--▲▲▲マルウェアと誤解される可能性のあるソースコード▲▲▲ -->

問題となっているのは以下の点です。
サンプルアプリはアナログ時計を表示するものです。このアプリは、実際にはまったく権限を必要としません。しかし、実際には多くの権限を取得しています。
サンプルアプリには以下に挙げるようなマルウェアと疑われる可能性のあるPermission使用宣言の組み合わせが存在します。一部を列挙します。

  • 住所録の情報が外部に送信される可能性のある組み合わせ。
    • android.permission.INTERNET
    • android.permission.READ_CONTACTS
  • 盗撮したデータを外部へ送信される可能性のある組み合わせ。
    • android.permission.INTERNET
    • android.permission.CAMERA
  • 予定表の情報が盗み出され、外部へ送信される可能性のある組み合わせ。
    • android.permission.INTERNET
    • android.permission.READ_CALENDAR
  • 利用者の行動(位置情報)が監視される可能性のある組み合わせ。
    • android.permission.INTERNET
    • android.permission.ACCESS_FINE_LOCATION
そのため、利用者からはマルウェアと疑われてしまう可能性があります。

次は、問題の修正方法について説明します。