用語集

この用語集について

この用語集は、ツール内で使用している用語について説明するものです。
ここで説明している内容は、ツールを使って学習を行う上で最低限必要となるレベルにとどめています。
なお、Android OSは他のOSと比較して頻繁にアップデートされるため、残念ながら、ここに記載している内容が最新であることは保証できません。 最新の情報はGoogleが公開しているAndroid Developers http://developer.android.com/index.htmlを参照してください。 この用語集にも、Android Developersを参照できるようにリンクを配置しています。

索引

  • BuildConfig(ビルドコンフィグ)
    アプリをビルドした時にADTが自動的に生成するクラスです。
    ここに定義されているDEBUGメンバの値を参照することで、アプリがデバッグモードでビルドされたのか、リリースモードでビルドされたのかを判定することができます。
        // 入力内容をログに出力する
        if (BuildConfig.DEBUG) {
            String log = "ID:" + id + " PASS:" + pass; 
            Log.v(getPackageName(), log); 
        }
    
    ただし、ADTのバージョンが20未満の場合には、値が正しく設定されない問題がありますので、注意が必要です。

  • HostnameVerifier(ホストネームベリファイヤ)
    HostnameVerifierは、SSLで通信する際に証明書に含まれているホスト名をチェックする役割も果たすものです。通常は標準のHostnameVerifierが利用されるため、アプリ側でHostnameVerifierを用意する必要はありません。 標準のHostnameVerifierと異なる検査を行いたい場合には、アプリ側で独自のHostnameVerifierを用意してSSL通信を行うことも可能です。
    Android Developers-HostnameVerifierの説明: http://developer.android.com/reference/javax/net/ssl/HostnameVerifier.html

  • HTTP(エイチティティピー)
    Hypertext Transfer Protocolの略です。 WebブラウザとWebサーバの間でHTMLなどのコンテンツの送受信に用いられている通信方式です。 通信は平文で行われるため、重要な情報の送受信には不適切です。

  • HTTPS(エイチティティピーエス)
    Hypertext Transfer Protocol Secureの略です。HTTPによる通信を安全に行うための通信手順です。 HTTPSを使用して通信することにより、サーバの正当性の確認や通信内容の暗号化、改ざん検知などを行えるようになります。 なりすましや盗聴などの攻撃を防ぐことができる通信手順です。

  • JavaScript(ジャバスクリプト)
    Webブラウザなどで利用されているスクリプト言語(簡易プログラミング言語)です。 JavaScriptを利用することで、利用者の操作にブラウザ上で応答するコンテンツを作成することが可能になります。

  • LogCat(ログキャット)
    アプリが作成するログの標準の出力先です。
    Android OSはログを出力するためのメソッドを複数用意していますが、出力先を指定しない限り全てLogCatに出力されます。

  • ProGuard(プロガード)
    ソースコードの難読化や未使用のコード削除などを行うためのツールです。 ProGuardを使用することによりアプリのリバースエンジニアリングに時間がかかるようにする、不要コードを削除してapkのサイズを小さくする、といったことができるようになります。 ProGuardはAndroid SDKに含まれています。
    Android Developers-ProGuardの説明: http://developer.android.com/tools/help/proguard.html

  • Service(サービス)
    ユーザインターフェースを持たず、バックグラウンドで音楽を再生したり、 他のアプリに機能を提供したりする際に使用されるコンポーネントです。
    Android Developers-Serviceの説明: http://developer.android.com/guide/components/services.html

  • SSL(エスエスエル)
    Secure Socket Layerの略です。HTTPSによる通信を行う時などに使用されます。 SSLによって、通信相手の認証、通信データの暗号化、改ざん検知などを行うことができます。

  • targetSdkVersion(ターゲットエスディーケーバージョン)
    targetSdkVersionは、開発者が動作環境として想定したSDKバージョンを示すものです。
    例えばSDKバージョンが11の端末でtargetSdkVersionが8のアプリを動作させた場合、 Android OSはこの情報を参照し、互換性を維持するように動作します。
    Android3.0のタブレット端末で、Android2.2のアプリを動作させても正しく動作するのはこの機能があるためです。
    設定は「AndroidManifest.xml」で行います。
    <uses-sdk android:minSdkVersion="8"
              android:targetSdkVersion="11" />           					
    

    Android Developers-targetSdkVersionの説明: http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#target

  • TrustManager(トラストマネージャ)
    TrustManagerは、SSLで通信する際に証明書の正当性や期限切れ等をチェックする役割を果たすものです。通常は標準のTrustManagerが利用されるため、アプリ側でTrustManagerを用意する必要はありません。 標準のTrustManagerと異なる検査を行いたい場合には、アプリ側で独自のTrustManagerを用意してSSL通信を行うことも可能です。
    Android Developers-TrustManagerの説明: http://developer.android.com/reference/javax/net/ssl/TrustManager.html

  • uses-permission(ユージズパーミッション)
    アプリが他のアプリやAndroid OSが管理しているデータや機能にアクセスするために使用する権限を定義するためのキーワードです。
    Permissionで保護された機能や、データにアクセスする場合にはuses-permissionを指定します。自アプリの機能やデータを保護する場合には Permissionを定義して、コンポーネントの定義内に指定します。 全て「AndroidManifest.xml」に記述します。
    • Permissionの利用を宣言する例
      <uses-permission
           android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      
    Android Developers-Permission利用宣言の説明: http://developer.android.com/guide/topics/manifest/uses-permission-element.html

  • 悪意のあるアプリ
    アプリに内在している脆弱性を利用して、アプリの機能を不正に利用したり、データを盗み出したりすることを目的として作成されたアプリのことです。


  • アノテーション
    Java SE 5から登場したクラスやメソッド、パッケージにつける注釈です。アノテーションをつけることにより、クラスやメソッド、パッケージに様々な情報を付け加えることができます。
    @Overrideはオーバーライドされたスーパークラスのメソッドを表し、@JavascriptInterfaceはAndroid4.2以降でJavascriptInterfaceにバインドされ、公開されているメソッドを表します。
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    @JavascriptInterface
    public String getLine1Number() {
        return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getLine1Number();
    }
    


  • 暗黙的Intent
    Intentの受信先を明示せず、受取り先のアプリを探し出すための条件だけを指定して送信するIntentです。
    Intentを送信する側のアプリは、受信先アプリを特定していないので、想定外のアプリがIntentを受信する可能性があります。
    Android Developers-暗黙的Intentの説明: http://developer.android.com/guide/components/intents-filters.html#Receiving

  • 学習機能
    本ツールが提供している、Androidアプリの脆弱性について学習するための機能のことです。

  • 学習コンテンツ
    Androidアプリの脆弱性について、本ツールで学習できる内容のことです。

  • サンプルアプリ
    学習シナリオの中で使用される、脆弱性を持ったアプリのことです。
    サンプルアプリを実際に動作させることで脆弱性の被害を体験することができます。

  • サンプルコード
    学習コンテンツの中に掲載されているソースコードです。

  • サンプルプロジェクト
    学習シナリオの中で使用される、脆弱性を持ったアプリのビルド可能なプロジェクトです。
    サンプルプロジェクトをビルドしてサンプルアプリを作成することができます。

  • シナリオ
    学習コンテンツに含まれる、個々の学習テーマについて学習する流れです。
    シナリオ通りにツールを操作することで学習できるようになっています。

  • 署名
    Android OSでは、全てのアプリは必ず証明書を用いて署名されていることが必要です。これにより アプリの作成者が同一であること確認できるため、悪意を持った第三者が配布した偽アプリで正規のアプリが上書きされないようになっています。 なお、Android OSでは、自分自身で発行した証明書で署名することが認められています。 署名されていないアプリは不正なアプリとみなされ、端末にインストールできません。
    Android Developers-アプリ署名の説明: http://developer.android.com/tools/publishing/app-signing.html

  • 脆弱性
    アプリが持っている機能やデータが、本来アクセスできないはずの第三者(またはアプリ)から不正にアクセスできてしまう、アプリの欠陥や仕様上の問題点のことです。


  • 中間者攻撃
    通信経路の間に割り込み、通信内容を盗聴したり改ざんしようとする攻撃手法のことを、中間者攻撃といいます。中間者攻撃による影響を防ぐために、 HTTPSなどのSSL/TLSを使用した通信が用いられますが、クライアントまたはサーバ側にSSL/TLSに関する実装不備があると中間者攻撃を防ぎきれないことがあります。
    中間者攻撃のイメージ

  • 点検機能
    本ツールが提供している、Androidアプリのプロジェクトを点検し、脆弱性を検出する機能のことです。

  • 保護レベル(Permissionの保護レベル)
    Permissionを取得できるアプリを限定する設定です。 Permissionには4種類の保護レベルのうち、どれか一つを設定することができます。
    • normal
      全てのアプリがPermissionの利用を宣言<uses-permission>することができます。
      利用者がアプリの情報を確認する画面で[すべて表示]を指定しないと取得する権限が表示されません。
    • dangerous
      全てのアプリがPermissionの利用を宣言<uses-permission>することができます。
      アプリの情報を確認する画面で表示されるので、アプリのインストール時に利用者に対して権限の取得許可を得たいときに使用します。
    • signature
      Permission定義している側と利用する側が同じ署名を持っていないとPermissionの利用を宣言<uses-permission>することができません。
      同じ署名を持つアプリにだけ許可を与えたいときに使用します。なお、アプリの情報を確認する画面には取得する権限は表示されません。
    • signatureOrSystem
      通常のアプリでは使用されません。Androidの一部として提供されている場合、またはAndroidシステムイメージに含まれているアプリと同じ署名を持っている場合に許可されます。
    定義例はpermissionを参照ください。
    Android Developers-Permissionの説明: http://developer.android.com/guide/topics/manifest/permission-element.html

  • マルウェア
    不正な動作を行う目的で作成された悪意のあるアプリを指します。