(57)【特許請求の範囲】
【請求項１】
アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、
前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、
前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、
前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、
を備え、
前記アプリケーションは複数のコンポーネントで構成され、
前記情報取得部は、前記アプリケーションが起動する端末の外部に情報を送信するAPIを実行しようとする動作が検出された場合に、前記APIを実行するメソッドの情報を取得し、
前記解析部は、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIが、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドから実行されるか否かを判定し、
前記制御部は、前記APIが、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドから実行されると判定された場合に、前記APIの実行を拒否する
ことを特徴とするAPI実行制御装置。
【請求項２】
前記解析部は、前記メソッドの情報に基づいて、前記APIの実行に伴って実行されるメソッドの名称を解析し、前記APIの実行に伴って実行されるメソッドの名称と、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドの名称とが一致するか否かを判定し、
前記制御部は、前記APIの実行に伴って実行されるメソッドの名称と、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドの名称とが一致すると判定された場合に、前記APIの実行を拒否する
ことを特徴とする請求項１に記載のAPI実行制御装置。
【請求項３】
アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、
前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、
前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、
前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、
を備え、
前記情報取得部は、アプリケーションが第１のAPIを実行しようとする動作が検出された場合に、前記第１のAPIを実行する第１のメソッドの情報を取得し、正規アプリケーションでは前記第１のAPIが実行された後に実行される第２のAPIを前記アプリケーションが実行しようとする動作が検出された場合に、前記第２のAPIを実行する第２のメソッドの情報を取得し、
前記解析部は、前記第１のメソッドおよび前記第２のメソッドの情報に基づいて、前記第１のAPIおよび前記第２のAPIが実行される状況を解析し、前記第１のAPIが実行された後、前記第２のAPIが実行されるか否かを判定し、
前記制御部は、前記第１のAPIが実行されることなく前記第２のAPIが実行されると判定された場合に、前記APIの実行を拒否する
ことを特徴とするAPI実行制御装置。
【請求項４】
前記第１のAPIは、カメラで撮影を行う前にプレビュー画像を表示するAPIであり、前記第２のAPIは、カメラで撮影のシャッターを切るAPIであることを特徴とする請求項３に記載のAPI実行制御装置。
【請求項５】
前記第１のAPIは、データベース内の指定された位置から送信先のアドレスを取得するAPIであり、前記第２のAPIは、前記アプリケーションが起動する端末の外部に情報を送信するAPIであり、
前記情報取得部はさらに、前記第１のAPIを実行しようとする動作が検出された場合に、前記アプリケーションが指定する前記データベース内の位置を示すデータベース位置情報を取得し、
前記解析部はさらに、前記第１のAPIが実行された後、前記第２のAPIが実行されると判定した場合に、前記データベース位置情報に基づいて、正規のアプリケーションが利用するアドレス帳が指定されているか否かを判定し、
前記制御部は、前記アドレス帳が指定されていないと判定された場合に、前記APIの実行を拒否する
ことを特徴とする請求項３に記載のAPI実行制御装置。
【請求項６】
アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、
前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、
前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、
前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、
前記APIの実行の可否を示す情報を記憶する記憶部と、
を備え、
前記制御部は、前記APIの実行が不正な動作に繋がると判定された場合に、前記APIの実行を拒否すると共に、前記APIの実行の拒否を示す情報を前記記憶部に格納し、前記動作が再度検出された場合に、前記記憶部に格納されている前記情報が前記APIの実行の拒否を示していれば前記APIの実行を拒否する
ことを特徴とするAPI実行制御装置。
【請求項７】
アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、
前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、
前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、
前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、
としてコンピュータを機能させるためのプログラムであって、
前記アプリケーションは複数のコンポーネントで構成され、
前記情報取得部は、前記アプリケーションが起動する端末の外部に情報を送信するAPIを実行しようとする動作が検出された場合に、前記APIを実行するメソッドの情報を取得し、
前記解析部は、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIが、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドから実行されるか否かを判定し、
前記制御部は、前記APIが、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドから実行されると判定された場合に、前記APIの実行を拒否する
ことを特徴とするプログラム。
【請求項８】
アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、
前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、
前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、
前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、
としてコンピュータを機能させるためのプログラムであって、
前記情報取得部は、アプリケーションが第１のAPIを実行しようとする動作が検出された場合に、前記第１のAPIを実行する第１のメソッドの情報を取得し、正規アプリケーションでは前記第１のAPIが実行された後に実行される第２のAPIを前記アプリケーションが実行しようとする動作が検出された場合に、前記第２のAPIを実行する第２のメソッドの情報を取得し、
前記解析部は、前記第１のメソッドおよび前記第２のメソッドの情報に基づいて、前記第１のAPIおよび前記第２のAPIが実行される状況を解析し、前記第１のAPIが実行された後、前記第２のAPIが実行されるか否かを判定し、
前記制御部は、前記第１のAPIが実行されることなく前記第２のAPIが実行されると判定された場合に、前記APIの実行を拒否する
ことを特徴とするプログラム。
【請求項９】
アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、
前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、
前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、
前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、
前記APIの実行の可否を示す情報を記憶する記憶部と、
としてコンピュータを機能させるためのプログラムであって、
前記制御部は、前記APIの実行が不正な動作に繋がると判定された場合に、前記APIの実行を拒否すると共に、前記APIの実行の拒否を示す情報を前記記憶部に格納し、前記動作が再度検出された場合に、前記記憶部に格納されている前記情報が前記APIの実行の拒否を示していれば前記APIの実行を拒否する
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションによってAPI（Application Program Interface）が実行される状況を解析し、その状況に応じてAPIの実行を制御するAPI実行制御装置に関する。また、本発明は、本API実行制御装置としてコンピュータを機能させるためのプログラムにも関する。
【背景技術】
【０００２】
汎用OS（オペレーティングシステム）を用いたオープンプラットフォームを採用する、スマートフォンと呼ばれる携帯情報端末が普及している。また、スマートフォンに搭載される汎用OSとして、端末で管理される情報や機能を利用するための命令や関数の集合であるAPI が豊富に用意されているAndroid（登録商標）が注目を集めている。本明細書では一例として、Android（登録商標） OSを搭載したスマートフォンについて記載する。
【０００３】
スマートフォンは、誰もが自由にアプリケーションを開発して公開でき、公開されたアプリケーションをユーザが自由にインストールできるプラットフォームである。公開されたアプリケーションをスマートフォンに導入することにより、スマートフォンの様々な機能を柔軟かつ容易に拡張することができる。
【０００４】
しかし、アプリケーションの中には、ユーザに気づかれないように、端末内の情報を収集して外部に送信する悪性アプリケーション（マルウェア）が存在する。特に、正規のアプリケーションを装いつつ、こうした不正な振る舞いを行うアプリケーションはトロイの木馬と呼ばれており、ユーザがその脅威に気づくことは困難である。
【０００５】
スマートフォンには、電話やカメラを制御するAPIが設けられており、アプリケーションがAPIを利用して、発呼や、SMS（Short Message Service）通信、写真撮影を行うことができる。これらの行為を悪性アプリケーションが密かに行った場合、勝手な課金やプライバシの漏洩が発生する。
【０００６】
スマートフォンは、ユーザとの結びつきがPC（パーソナルコンピュータ）よりも緊密な機器であり、電話番号、メールアドレス、住所録、メールの送受信履歴、インターネットの閲覧履歴等の個人情報が集積している。また、端末の高機能化と、常に携帯される利用形態とから、従来のPCでは収集されなかった位置情報等の情報も容易に取得可能となり、情報が悪用される脅威に直面する。
【０００７】
Android（登録商標）では、アプリケーションが利用する機能群や情報群はパーミッションとして定義されている。アプリケーションのインストール時に、アプリケーションが使用するパーミッションがユーザに通知され、ユーザによってインストールの可否が判断される。なお、非特許文献１〜３には、アプリケーションのインストール時とインストール後に、アプリケーションが使用するパーミッションをユーザが変更することができるようにAndroid（登録商標）に改良を加えることが記載されている。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】M.Nauman, S.Khan, and X.Zhang, “Apex: Extending Android Permission Model and Enforcement with User-defined Runtime Constraints”, 5th ACM Symposium on Information, Computer and Communications Security, pp 328-332,2010
【非特許文献２】M. Ongtang, S. McLaughlin, W. Enck, and P. McDaniel, “Semantically Rich Application-Centric Security in Android”, ieee:Annual Computer Security Applications Conference,pp 340-349, 2009
【非特許文献３】H.Banuri, M.Alam, S.Khan, J.Manzoor, B.Ali, Y.Khan, M.Yaseen, M.N.Tahir, T.Ali and X.Zhaug, “Android Runtime Security Policy Enforcement Framework” The 2010 International Workshop on Smartphone Applications and Services, 2010
【発明の概要】
【発明が解決しようとする課題】
【０００９】
アプリケーションのインストール時にユーザが承認したパーミッション、あるいはアプリケーションのインストール後にユーザが変更したパーミッションが不正に利用された場合、ユーザがそのことを把握することができないという課題がある。例えば、SMSクライアントアプリケーションが、外部への情報の送信を許可するパーミッションであるSEND_SMSを宣言することは正しいと考えられる。しかしながら、SMSクライアントアプリケーションが正規の振る舞いをしつつ、バックグラウンドで不正に外部へ情報を送信していた場合、ユーザが情報の送信に気づくことは極めて難しい。このため、ユーザが承認していない行為がアプリケーションによって、いつ、どのように実行されるのかを把握できる仕組みが必要となる。
【００１０】
本発明は、上述した課題に鑑みてなされたものであって、正規のアプリケーションの動作として規定された動作とは異なる不正な動作を防止することができるAPI実行制御装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、上記の課題を解決するためになされたもので、アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、を備え、前記アプリケーションは複数のコンポーネントで構成され、前記情報取得部は、前記アプリケーションが起動する端末の外部に情報を送信するAPIを実行しようとする動作が検出された場合に、前記APIを実行するメソッドの情報を取得し、前記解析部は、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIが、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドから実行されるか否かを判定し、前記制御部は、前記APIが、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドから実行されると判定された場合に、前記APIの実行を拒否することを特徴とするAPI実行制御装置である。
【００１３】
また、本発明のAPI実行制御装置において、前記解析部は、前記メソッドの情報に基づいて、前記APIの実行に伴って実行されるメソッドの名称を解析し、前記APIの実行に伴って実行されるメソッドの名称と、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドの名称とが一致するか否かを判定し、前記制御部は、前記APIの実行に伴って実行されるメソッドの名称と、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドの名称とが一致すると判定された場合に、前記APIの実行を拒否することを特徴とする。
【００１４】
また、本発明は、アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、を備え、前記情報取得部は、アプリケーションが第１のAPIを実行しようとする動作が検出された場合に、前記第１のAPIを実行する第１のメソッドの情報を取得し、正規アプリケーションでは前記第１のAPIが実行された後に実行される第２のAPIを前記アプリケーションが実行しようとする動作が検出された場合に、前記第２のAPIを実行する第２のメソッドの情報を取得し、前記解析部は、前記第１のメソッドおよび前記第２のメソッドの情報に基づいて、前記第１のAPIおよび前記第２のAPIが実行される状況を解析し、前記第１のAPIが実行された後、前記第２のAPIが実行されるか否かを判定し、前記制御部は、前記第１のAPIが実行されることなく前記第２のAPIが実行されると判定された場合に、前記APIの実行を拒否することを特徴とするAPI実行制御装置である。
【００１５】
また、本発明のAPI実行制御装置において、前記第１のAPIは、カメラで撮影を行う前にプレビュー画像を表示するAPIであり、前記第２のAPIは、カメラで撮影のシャッターを切るAPIであることを特徴とする。
【００１６】
また、本発明のAPI実行制御装置において、前記第１のAPIは、データベース内の指定された位置から送信先のアドレスを取得するAPIであり、前記第２のAPIは、前記アプリケーションが起動する端末の外部に情報を送信するAPIであり、前記情報取得部はさらに、前記第１のAPIを実行しようとする動作が検出された場合に、前記アプリケーションが指定する前記データベース内の位置を示すデータベース位置情報を取得し、前記解析部はさらに、前記第１のAPIが実行された後、前記第２のAPIが実行されると判定した場合に、前記データベース位置情報に基づいて、正規のアプリケーションが利用するアドレス帳が指定されているか否かを判定し、前記制御部は、前記アドレス帳が指定されていないと判定された場合に、前記APIの実行を拒否することを特徴とする。
【００１７】
また、本発明は、アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、前記APIの実行の可否を示す情報を記憶する記憶部と、を備え、前記制御部は、前記APIの実行が不正な動作に繋がると判定された場合に、前記APIの実行を拒否すると共に、前記APIの実行の拒否を示す情報を前記記憶部に格納し、前記動作が再度検出された場合に、前記記憶部に格納されている前記情報が前記APIの実行の拒否を示していれば前記APIの実行を拒否することを特徴とするAPI実行制御装置である。
【００１８】
また、本発明は、アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、としてコンピュータを機能させるためのプログラムであって、前記アプリケーションは複数のコンポーネントで構成され、前記情報取得部は、前記アプリケーションが起動する端末の外部に情報を送信するAPIを実行しようとする動作が検出された場合に、前記APIを実行するメソッドの情報を取得し、前記解析部は、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIが、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドから実行されるか否かを判定し、前記制御部は、前記APIが、バックグラウンドで処理を実行するコンポーネントを継承するクラスのメソッドから実行されると判定された場合に、前記APIの実行を拒否することを特徴とするプログラムである。
また、本発明は、アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、としてコンピュータを機能させるためのプログラムであって、前記情報取得部は、アプリケーションが第１のAPIを実行しようとする動作が検出された場合に、前記第１のAPIを実行する第１のメソッドの情報を取得し、正規アプリケーションでは前記第１のAPIが実行された後に実行される第２のAPIを前記アプリケーションが実行しようとする動作が検出された場合に、前記第２のAPIを実行する第２のメソッドの情報を取得し、前記解析部は、前記第１のメソッドおよび前記第２のメソッドの情報に基づいて、前記第１のAPIおよび前記第２のAPIが実行される状況を解析し、前記第１のAPIが実行された後、前記第２のAPIが実行されるか否かを判定し、前記制御部は、前記第１のAPIが実行されることなく前記第２のAPIが実行されると判定された場合に、前記APIの実行を拒否することを特徴とするプログラムである。
また、本発明は、アプリケーションがAPI（Application Program Interface）を実行しようとする動作を検出する検出部と、前記動作が検出された場合に、前記APIを実行するメソッドの情報を取得する情報取得部と、前記メソッドの情報に基づいて、前記APIが実行される状況を解析し、前記APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がるか否かを判定する解析部と、前記APIの実行が不正な動作に繋がると判定された場合に、不正な動作が行われないように前記APIの実行を制御する制御部と、前記APIの実行の可否を示す情報を記憶する記憶部と、としてコンピュータを機能させるためのプログラムであって、前記制御部は、前記APIの実行が不正な動作に繋がると判定された場合に、前記APIの実行を拒否すると共に、前記APIの実行の拒否を示す情報を前記記憶部に格納し、前記動作が再度検出された場合に、前記記憶部に格納されている前記情報が前記APIの実行の拒否を示していれば前記APIの実行を拒否することを特徴とするプログラムである。
【発明の効果】
【００１９】
本発明によれば、APIの実行が、正規のアプリケーションの動作として規定された動作と異なる不正な動作に繋がる場合に、不正な動作が行われないようにAPIの実行を制御することによって、不正な動作を防止することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の一実施形態による端末装置の構成を示すブロック図である。
【図２】本発明の一実施形態においてフックの対象となるAPIの一覧を示す参考図である。
【図３】本発明の一実施形態における情報取得部の動作の手順を示すフローチャートである。
【図４】本発明の一実施形態においてAPIが実行される状況の情報を示す参考図である。
【図５】本発明の一実施形態においてAPIを呼び出したメソッドが記述されたソースコードを示す参考図である。
【図６】本発明の一実施形態においてAPIを呼び出したメソッドを呼び出したメソッドが記述されたソースコードを示す参考図である。
【図７】本発明の一実施形態におけるセキュリティポリシー判定部の動作の手順を示すフローチャートである。
【図８】本発明の一実施形態における実行解析・制御部の動作の手順を示すフローチャートである。
【図９】本発明の一実施形態における実行解析・制御部の動作の手順を示すフローチャートである。
【図１０】本発明の一実施形態における実行解析・制御部の動作の手順を示すフローチャートである。
【発明を実施するための形態】
【００２１】
以下、図面を参照し、本発明の実施形態を説明する。本明細書および図面では、便宜上、必要に応じてandroid（登録商標）という文字列を*andrd*という文字列で代用し、Android（登録商標）という文字列を*Andrd*という文字列で代用し、java（登録商標）という文字列を*jv*という文字列で代用し、google（登録商標）という文字列を*ggl*という文字列で代用している。すなわち、*andrd*という文字列はandroid（登録商標）という文字列と等価であり、*Andrd*という文字列はAndroid（登録商標）という文字列と等価であり、*jv*という文字列はjava（登録商標）という文字列と等価であり、*ggl*という文字列はgoogle（登録商標）という文字列と等価である。
【００２２】
図１は、本発明の一実施形態による端末装置の構成を示している。本実施形態の端末装置は、OS にAndroid（登録商標）を実装したスマートフォン等の装置として構成されている。図１に示すように端末装置は、アプリケーション１０、API実行部１１、情報取得部１２、セキュリティポリシー判定部１３、実行解析・制御部１４、記憶部１５、通信部１６を有する。API実行部１１、情報取得部１２、セキュリティポリシー判定部１３、実行解析・制御部１４は、本発明のAPI実行制御装置の一例であるAPI実行制御部２０を構成する。
【００２３】
アプリケーション１０は、SMSクライアントアプリケーション等であり、アプリケーションの処理として規定された各種の処理を行う。API実行部１１は、アプリケーション１０からの要求に応じてAPI１１ａを実行する。API１１ａは、OSであるAndroid（登録商標）で用意されているAPI（メソッド）のうち、特に悪性アプリケーション（マルウェア）で利用される機能を実現する特定のAPIである。API実行部１１は、アプリケーション１０からAPI１１ａの実行要求を受けたときにAPI１１ａを実行し、実行結果をアプリケーション１０に返す。
【００２４】
図２に示すAPI１１ａは、複数の異なる時点において同一のAPIである必要はない。例えば、第１のAPIが実行された後、第１のAPIとは異なる第２のAPIが実行される場合についても、図２では第１のAPIと第２のAPIがAPI１１ａとして示されている。
【００２５】
情報取得部１２は、アプリケーション１０がAPI１１ａを呼び出して実行しようとするときに、API１１ａを実行するメソッドの情報を含む各種情報を取得し、取得した情報をコンテキストデータＣＤとして、記憶部１５内のセキュリティデータＳＤの記憶領域に格納する。セキュリティデータＳＤは、セキュリティポリシーＳＰとコンテキストデータＣＤで構成される。セキュリティポリシーＳＰは、API１１ａの実行を制御するための、API１１ａの実行の可否等を示す情報を含むデータである。コンテキストデータＣＤは、情報取得部１２が取得した情報を含むデータである。セキュリティデータＳＤは記憶部１５に格納されており、セキュリティポリシー判定部１３および実行解析・制御部１４によって記憶部１５から適宜読み出されて参照される。
【００２６】
セキュリティポリシー判定部１３は、実行されるAPI１１ａに関する情報がセキュリティポリシーＳＰに登録されているか否かを判定する。セキュリティポリシーＳＰに情報が登録されている場合、セキュリティポリシー判定部１３は、セキュリティポリシーＳＰに登録されている情報に基づいた情報をAPI実行部１１に与える。また、セキュリティポリシーＳＰに情報が登録されていない場合、セキュリティポリシー判定部１３は、実行解析・制御部１４に処理を引き渡す。
【００２７】
実行解析・制御部１４は、コンテキストデータＣＤに基づいて、API１１ａが実行される状況を解析する。また、実行解析・制御部１４は、解析の結果に基づいて、API１１ａの実行が不正な動作に繋がるか否か（API１１ａの実行により不正な動作が発生する可能性があるか否か）を判定する。API１１ａの実行が不正な動作に繋がる場合に、実行解析・制御部１４は、不正な動作が行われないようにAPI１１ａの実行を制御する。
【００２８】
記憶部１５は、メモリで構成されており、OSのプログラムや、アプリケーションプログラム、端末装置が使用する各種データ等を記憶する。通信部１６は外部の通信装置と通信を行う。アプリケーション１０は、必要に応じて通信部１６を介して通信を行う。
【００２９】
API実行部１１、情報取得部１２、セキュリティポリシー判定部１３、実行解析・制御部１４は、Android（登録商標）で提供されているアプリケーションフレームワーク（AplicationFramework）層で動作する。本実施形態のOSのプログラムでは、既存のクラス（TelephonyManagerクラス等）を定義しているコードに対して、API実行部１１が実行する処理を規定するコードが追加されている。また、本実施形態のOSのプログラムのコードに対して、情報取得部１２、セキュリティポリシー判定部１３、実行解析・制御部１４の各部が実行する処理を規定するコードが追加されている。
【００３０】
本実施形態のOSのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータ（本実施形態の端末装置）に読み込ませ、実行させることにより、API実行部１１、情報取得部１２、セキュリティポリシー判定部１３、実行解析・制御部１４は、各部に対して規定された処理を実行する。
【００３１】
ここで、「コンピュータ」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００３２】
また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように、情報を伝送する機能を有する媒体のことをいう。また、上述したプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能を、コンピュータに既に記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００３３】
本実施形態では、アプリケーションフレームワーク層に実装されるAPI実行部１１と連携する処理を高速化するために、情報取得部１２、セキュリティポリシー判定部１３、実行解析・制御部１４がアプリケーションフレームワーク層に実装されているが、情報取得部１２、セキュリティポリシー判定部１３、実行解析・制御部１４をアプリケーションとして構成することも可能である。
【００３４】
次に、本実施形態の端末装置の動作を説明する。アプリケーション１０がAPI１１ａを呼び出すと、API実行部１１は、API１１ａが呼び出されたことを検出してAPI１１ａの実行に介入し（API１１ａをフックし）、API１１ａを実行する前に情報取得部１２を呼び出す。また、API実行部１１は、セキュリティポリシー判定部１３または実行解析・制御部１４の処理結果を受け取り、その処理結果に応じた処理を実行する。
【００３５】
図２は、フックの対象となるAPIの一覧を示している。本実施形態では、SmsManagerクラス、Cameraクラス、ContentResolverクラスのAPIがフックの対象となる。なお、図２に示すAPIは一例であり、これに限らない。APIはメソッドであるが、本実施形態で注目するメソッドを他のメソッドと区別するため、図２に示すメソッドをAPIと記載している。
【００３６】
SmsManagerクラスのAPIでフックの対象となるのは、SMSによりメッセージを送信するsendTextMessageである。CameraクラスのAPIでフックの対象となるのは、カメラで撮影を行う前にプレビュー画像を表示するsetPreviewDisplay、カメラで撮影のシャッターを切るtakePictureである。ContentResolverクラスのAPIでフックの対象となるのは、メモリ内のデータベースにアクセスして情報を取得するCursorである。
【００３７】
本実施形態では、SmsManagerクラスのsendTextMessageを外部送信APIと記載する。また、本実施形態では、CameraクラスのsetPreviewDisplayをプレビュー表示APIと記載し、CameraクラスのtakePictureをシャッターAPIと記載し、ContentResolverクラスのCursorをデータベース参照APIと記載する。
【００３８】
以下では、API実行制御部２０の３種類の動作例を説明する。
【００３９】
＜第１の動作例＞
第１の動作例では、API実行制御部２０は、端末装置の外部に情報を送信する外部送信APIが、アプリケーションのコンポーネントの１つであるServiceを継承するクラスのメソッドから実行されることによりユーザに気づかれずに情報の送信が不正に行われることを防止する。Android（登録商標）上で動作するアプリケーションの構成要素（コンポーネント）として、Activity、Service、BroadcastReceiver、ContentProviderの4つがある。アプリケーションのソースコードにおいて、クラスが継承するコンポーネントが記述されることにより、そのクラスで定義されているメソッドはそのコンポーネントを利用することが可能となる。以下、各コンポーネントについて説明する。
【００４０】
Activityは、ユーザに対して視覚的なインターフェイスを提供し、画面上でユーザと対話を行うコンポーネントである。アプリケーションを起動すると画面が表示される場合、Activityに記述されたプログラムが動作している。
【００４１】
Serviceは、画面を表示する機能を持たずに、バックグラウンドで処理を実行するコンポーネントである。例えば、ユーザが音楽を聞きながらブラウザを起動してインターネットの利用を楽しむ場合、音楽用アプリケーションがServiceを起動することにより、ユーザはインターネットの利用中に音楽を聞くことができる。
【００４２】
BroadcastReceiverは、Android（登録商標）が搭載された端末装置のシステム全体にブロードキャストされるINTENTを受け取るコンポーネントである。例えば、電池残量が減ってきたときに、「残りのバッテリー残量が少ないです」というメッセージを含む画面を表示するアプリケーションでは、電池残量が変化するときに発行されるBroadcastIntentをBroadcastReceiverにより受け取ったアプリケーションがActivityを起動して画面を表示する。
【００４３】
ContentProviderは、アプリケーションが保持するデータを他のコンポーネントでも使用可能にするコンポーネントである。例えば、あるアプリケーションが電話帳のデータを取得したい場合、そのアプリケーションは、電話帳アプリケーションのContentProviderを利用して、電話帳に登録されている情報を取得する。
【００４４】
SMSでは、ユーザが入力した文章を送信することが多いため、アプリケーションはActivityを利用して情報を送信する。一方、悪性アプリケーションは、ユーザに気づかれないように、Serviceを利用してバックグラウンドで情報を送信することが多い。したがって、Serviceを継承するクラスのメソッドから外部送信APIが実行される場合、ユーザに気づかれずに不正な送信先に情報が送信されて個人情報等が漏洩するという不正行為が発生する可能性がある。このような不正行為を防止するため、API実行制御部２０は、外部送信APIが実行されるときに呼び出されて、以下で説明する処理を実行する。
【００４５】
アプリケーション１０がAPI１１ａを呼び出したとき、API実行部１１から呼び出された情報取得部１２は、図３に示す処理を実行する。まず、情報取得部１２は、API１１ａを呼び出したアプリケーション１０のパッケージの名称（パッケージ名）を特定するため、ContextクラスのgetPackageNameメソッドを実行し、パッケージ名を取得する（ステップＳＡ１００）。Android（登録商標）では、パッケージファイルの形式でアプリケーションが公開されている。パッケージファイルは、例えば拡張子が.apkのファイルであり、命令列を含む実行コード（例えば拡張子が.dex）、アプリケーションが利用する権限が定義されたマニフェストファイル（例えば拡張子が.xml）、アプリケーションが利用する画像ファイル（例えば拡張子が.jpg）等を含む。
【００４６】
続いて、情報取得部１２は、API１１ａがどのような状況で実行されるのかを解析するため、SystemクラスのcurrentMillisメソッドを実行し、API１１ａが呼び出された時刻を取得すると共に、Throwable クラスのgetStacktraceメソッドを実行し、クラス名、メソッド名、ファイル名、行番号が格納されたStackTraceElementクラスの配列を取得する（ステップＳＡ１０５）。
【００４７】
ステップＳＡ１０５で取得される配列に格納されているクラス名は、APIを呼び出したメソッドを定義するクラスの名称である。クラス名は、StackTraceElementクラスのgetClassNameメソッドを実行することで取得される。ステップＳＡ１０５で取得される配列に格納されているメソッド名は、APIを呼び出したメソッドの名称である。メソッド名は、StackTraceElementクラスのgetMethodNameメソッドを実行することで取得される。ステップＳＡ１０５で取得される配列に格納されているファイル名は、APIを呼び出したメソッドを実行するコードが記述されたソースファイルの名称である。ファイル名は、StackTraceElementクラスのgetFileNameメソッドを実行することで取得される。ステップＳＡ１０５で取得される配列に格納されている行番号は、APIを呼び出したメソッドを実行するコードが記述されたソースファイル内の行番号である。行番号は、StackTraceElementクラスのgetLineNumberメソッドを実行することで取得される。
【００４８】
メソッドが呼び出される毎に、そのメソッドの情報はメモリ内のスタック領域（スタックフレーム）にスタックトレースとして保存される。上記のgetClassNameメソッド等の各メソッドによって、スタックトレースからクラス名等の情報が取得される。
【００４９】
続いて、情報取得部１２は、ステップＳＡ１００，ＳＡ１０５で取得した情報をコンテキストデータＣＤとして、記憶部１５内のセキュリティデータＳＤの記憶領域に格納する（ステップＳＡ１１０）。
【００５０】
図４は、ステップＳＡ１０５で取得した情報のうち、API１１ａが呼び出された時刻を除く情報の一例を示している。図４では、便宜上、１つのメソッド（API）の情報が４行に分かれて記載されており、各行の先頭には行番号が付与されている。図４の４行単位の情報によって１つの情報群が構成される。１〜４行目の情報で構成される情報群ｓｔ［０］は、呼び出されたAPI１１ａの情報を含む。４行目の「getMethodName()=」に続く文字列「SendTextMessage」はAPI１１ａのメソッド名を示している。
【００５１】
５〜８行目の情報で構成される情報群ｓｔ［１］は、API１１ａ（SendTextMessage）を呼び出したメソッドの情報を含む。５行目の「getClassName()=」に続く文字列「jp.sample.app.Sample」は、API１１ａを呼び出したメソッドが定義されているクラスの名称（クラス名）を示している。クラス名は、パッケージ名とクラス単体の名称との組合せとして示されている。例えば、５行目に記載されている「jp.sample.app.Sample」の「jp.sample.app」がパッケージ名であり、「Sample」がクラス単体の名称である。６行目の「getFileName()=」に続く文字列「Sample.*jv*」は、API１１ａを呼び出したメソッドを実行するコードが記述されたソースファイルの名称（ファイル名）である。７行目の「getLineNumber()=」に続く数字２７は、API１１ａを呼び出したメソッドを実行するコードが記述されたソースファイル内の行番号を示している。８行目の「getMethodName()=」に続く文字列「onCreate」は、API１１ａを呼び出したメソッドの名称（メソッド名）を示している。
【００５２】
情報群ｓｔ［１］が示すファイル名に対応するソースファイルは、API１１ａを呼び出したアプリケーション１０のソースファイルである。つまり、情報群ｓｔ［１］に含まれる情報は、API１１ａを呼び出したアプリケーション１０のソースファイルで記述されているメソッドの情報である。
【００５３】
図５は、API１１ａを呼び出したメソッドが記述されたソースコードの一例を示している。このソースコードは、情報群ｓｔ［１］に含まれる「Sample.*jv*」がファイル名であるソースファイルに記載されているコードである。このソースコードにおいて、Sampleクラス（情報群ｓｔ［１］に含まれる「jp.sample.app.Sample」に対応）で定義されているonCreateメソッド（情報群ｓｔ［１］に含まれる「onCreate」に対応）内で、情報群ｓｔ［０］が示すSendTextMessageメソッド（API１１ａ）が呼び出されている。また、SendTextMessageメソッドを呼び出すコードは、情報群ｓｔ［１］に含まれる行番号に対応する２７行目に記載されている。
【００５４】
図４の９〜１２行目の情報で構成される情報群ｓｔ［２］は、情報群ｓｔ［１］が示すonCreateメソッドを呼び出したメソッドの情報を含む。９行目の「getClassName()=」に続く文字列「*andrd*.app.ActivityThread」は、onCreateメソッドを呼び出したメソッドが定義されているクラスの名称（クラス名）を示している。９行目に記載されている「*andrd*.app.ActivityThread」の「*andrd*.app」がパッケージ名であり、「ActivityThread」がクラス単体の名称である。１０行目の「getFileName()=」に続く文字列「ActivityThread.*jv*」は、onCreateメソッドを呼び出したメソッドを実行するコードが記述されたソースファイルの名称（ファイル名）である。１１行目の「getLineNumber()=」に続く数字１９４５は、onCreateメソッドを呼び出したメソッドを実行するコードが記述されたソースファイル内の行番号を示している。１２行目の「getMethodName()=」に続く文字列「handleCreateService」は、onCreateメソッドを呼び出したメソッドの名称（メソッド名）を示している。
【００５５】
図６は、onCreateメソッドを呼び出したメソッドが記述されたソースコードの一例を示している。このソースコードは、情報群ｓｔ［２］に含まれる「ActivityThread.*jv*」がファイル名であるソースファイルに記載されているコードである。このソースコードにおいて、ActivityThreadクラス（情報群ｓｔ［２］に含まれる「*andrd*.app.ActivityThread」に対応）で定義されているhandleCreateServiceメソッド（情報群ｓｔ［２］に含まれる「handleCreateService」に対応）内で、情報群ｓｔ［１］が示すonCreateメソッドが呼び出されている。また、onCreateメソッドを呼び出すコードは、情報群ｓｔ［２］に含まれる行番号に対応する１９４５行目に記載されている。
【００５６】
上記のように、情報群ｓｔ［ｎ＋１］の情報は、情報群ｓｔ［ｎ］（ｎは０以上の整数）が示すメソッド（API）を呼び出したメソッドの情報を含む。図４の情報群ｓｔ［３］〜ｓｔ［７］も同様である。なお、図４では、情報群ｓｔ［７］が示すメソッドを呼び出したメソッド等の情報は省略されている。図４に示す情報と、API１１ａが呼び出された時刻と、ステップＳＡ１００で取得したパッケージ名との組合せがコンテキストデータＣＤとして保存される。
【００５７】
本実施形態では、アプリケーション１０からAPI１１ａが呼び出される毎に１つのコンテキストデータＣＤが生成され、保存される。例えば、第１のAPIが呼び出された後、第２のAPIが呼び出される場合、第１のAPIが呼び出されたときに第１のAPIに関するコンテキストデータＣＤが生成されて保存され、その後、第２のAPIが呼び出されたときに第２のAPIに関するコンテキストデータＣＤが生成されて保存される。
【００５８】
それぞれのコンテキストデータＣＤは、コンテキストデータＣＤに含まれる時刻によって区別される。あるいは、それぞれのコンテキストデータＣＤにシーケンス番号等のIDを付与し、そのIDによってそれぞれのコンテキストデータＣＤを区別してもよい。それぞれのコンテキストデータＣＤは、上記の情報群のうち複数の情報群（例えば情報群ｓｔ［０］，ｓｔ［１］，ｓｔ［２］）の情報を含む。コンテキストデータＣＤには、それぞれの情報群を識別する識別情報（例えば、ｓｔ［０］等の文字列）が含まれており、この識別情報によって各情報群が区別される。
【００５９】
ステップＳＡ１１０に続いて、情報取得部１２はセキュリティポリシー判定部１３を呼び出す（ステップＳＡ１１５）。
【００６０】
情報取得部１２から呼び出されたセキュリティポリシー判定部１３は、図７に示す処理を実行する。まず、セキュリティポリシー判定部１３は記憶部１５内のセキュリティデータＳＤの記憶領域からセキュリティポリシーＳＰを読み出し（ステップＳＡ２００）、記憶部１５内のセキュリティデータＳＤの記憶領域からコンテキストデータＣＤを読み出す（ステップＳＡ２０５）。このとき読み出されるコンテキストデータＣＤは、直近（最後）に呼び出されたAPI１１ａに関するコンテキストデータＣＤである。コンテキストデータＣＤに含まれる時刻が最も新しいコンテキストデータＣＤが、直近に呼び出されたAPI１１ａに関するコンテキストデータＣＤである。あるいは、コンテキストデータＣＤ毎にシーケンス番号が付与される場合、そのシーケンス番号から、直近に呼び出されたAPI１１ａに関するコンテキストデータＣＤを識別してもよい。
【００６１】
続いて、セキュリティポリシー判定部１３は、呼び出されたAPI１１ａに関する情報がセキュリティポリシーＳＰに登録されているか否かを判定する（ステップＳＡ２１０）。セキュリティポリシーＳＰには、API１１ａの実行制御情報と、パッケージ名と、コンテキストデータＣＤに含まれる情報群ｓｔ［１］のクラス名、メソッド名、行番号とを一組とした情報が登録される。セキュリティポリシーＳＰには、この一組の情報を登録の単位として複数組登録することが可能である。後述するように、実行解析・制御部１４によって、セキュリティポリシーＳＰに対する情報の登録が行われる。API１１ａの実行制御情報は、APIの実行の許可、APIの実行の拒否のいずれかを示す情報である。
【００６２】
コンテキストデータＣＤに含まれる情報（パッケージ名、コンテキストデータＣＤに含まれる情報群Ｓｔ［１］のクラス名、メソッド名、行番号）が、セキュリティポリシーＳＰに登録されている一組の情報（パッケージ名、クラス名、メソッド名、行番号）のいずれかと完全に一致した場合、呼び出されたAPI１１ａに関する情報がセキュリティポリシーＳＰに登録されている。また、コンテキストデータＣＤに含まれる情報（パッケージ名、コンテキストデータＣＤに含まれる情報群Ｓｔ［１］のクラス名、メソッド名、行番号）が、セキュリティポリシーＳＰに登録されている一組の情報（パッケージ名、クラス名、メソッド名、行番号）のいずれとも一致しなかった場合、呼び出されたAPI１１ａに関する情報はセキュリティポリシーＳＰに登録されていない。
【００６３】
呼び出されたAPI１１ａに関する情報がセキュリティポリシーＳＰに登録されている場合、セキュリティポリシー判定部１３は、呼び出されたAPI１１ａに関してセキュリティポリシーＳＰに登録されている実行制御情報がAPIの実行の許可を示しているか否かを判定する（ステップＳＡ２１５）。実行制御情報がAPIの実行の許可を示している場合、セキュリティポリシー判定部１３は、API１１ａの実行を許可することを示す情報をAPI実行部１１に与える（ステップＳＡ２２０）。API実行部１１は、セキュリティポリシー判定部１３から与えられた情報に基づいてAPI１１ａに処理を実行させ、実行結果をアプリケーション１０に返す。
【００６４】
また、実行制御情報がAPIの実行の許可を示していない場合、実行制御情報はAPIの実行の拒否を示している。この場合、セキュリティポリシー判定部１３は、API１１ａの実行を拒否することを示す情報をAPI実行部１１に与える（ステップＳＡ２３０）。API実行部１１は、セキュリティポリシー判定部１３から与えられた情報に基づいてAPI１１ａの処理を中止し、実行結果をアプリケーション１０に返す。このとき、情報の送信は行われない。
【００６５】
ステップＳＡ２１０において、呼び出されたAPI１１ａに関する情報がセキュリティポリシーＳＰに登録されていない場合、セキュリティポリシー判定部１３は、実行解析・制御部１４を呼び出す（ステップＳＡ２２５）。
【００６６】
本実施形態のセキュリティポリシーＳＰでは、メソッド名だけでなく、パッケージ名、クラス名、行番号が実行制御情報と関連付けられている。これによって、どのアプリケーションからAPI１１ａが呼び出されたのか、どのクラスで定義されているメソッドからAPI１１ａが呼び出されたのか、ソースファイル中のどの位置で記述されたメソッドからAPI１１ａが呼び出されたのかといった、API１１ａが実行される際の詳細な状況に応じて、API１１ａの実行を制御することができる。
【００６７】
セキュリティポリシー判定部１３から呼び出された実行解析・制御部１４は、図８に示す処理を実行する。まず、実行解析・制御部１４は記憶部１６のセキュリティデータＳＤの記憶領域からコンテキストデータＣＤを読み出す（ステップＳＡ３００）。このとき読み出されるコンテキストデータＣＤは、直近に呼び出されたAPI１１ａに関するコンテキストデータＣＤである。続いて、実行解析・制御部１４は、コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列と、外部送信APIの文字列である「sendTextMessage」とを比較し、呼び出されたAPI１１ａが外部送信APIであるか否かを判定する（ステップＳＡ３０５）。
【００６８】
コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「sendTextMessage」でなかった場合、呼び出されたAPI１１ａは外部送信APIではない。この場合、実行解析・制御部１４は、API１１ａの実行を許可することを示す情報をAPI実行部１１に与える（ステップＳＡ３２５）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａに処理を実行させ、実行結果をアプリケーション１０に返す。続いて、処理はステップＳＡ３２０に進む。
【００６９】
また、コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「sendTextMessage」であった場合、呼び出されたAPI１１ａは外部送信APIである。この場合、実行解析・制御部１４は、コンテキストデータＣＤに含まれる情報群ｓｔ［２］のメソッド名の文字列と、Serviceで実行されるメソッドの名称の文字列である「handleCreateService」とを比較し、Serviceを継承するクラスのメソッドから外部送信APIが呼び出されたか否かを判定する（ステップＳＡ３１０）。
【００７０】
前述したように、図４の情報群ｓｔ［１］には、API１１ａを呼び出したメソッドの名称（メソッド名）が含まれる。また、図４の情報群Ｓｔ［２］には、情報群Ｓｔ［１］のメソッド名で示されるメソッドを呼び出したメソッドの名称（メソッド名）が含まれる。情報群Ｓｔ［２］に含まれるメソッド名が「handleCreateService」である場合、Serviceを継承するクラスのメソッドであるhandleCreateServiceメソッドによって呼び出されたメソッドによって外部送信APIが呼び出される。
【００７１】
コンテキストデータＣＤに含まれる情報群ｓｔ［２］のメソッド名の文字列が「handleCreateService」と一致する場合、Serviceを継承するクラスのメソッドから外部送信APIが呼び出されている。この場合、実行解析・制御部１４は、API１１ａの実行を拒否することを示す情報をAPI実行部１１に与える（ステップＳＡ３１５）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａの処理を中止し、実行結果をアプリケーション１０に返す。このとき、情報の送信は行われない。続いて、処理はステップＳＡ３２０に進む。
【００７２】
また、コンテキストデータＣＤに含まれる情報群ｓｔ［２］のメソッド名の文字列が「handleCreateService」と一致しない場合、Serviceを継承するクラスのメソッドから外部送信APIが呼び出されていない。この場合、実行解析・制御部１４は、API１１ａの実行を許可することを示す情報をAPI実行部１１に与える（ステップＳＡ３２５）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａに処理を実行させ、実行結果をアプリケーション１０に返す。続いて、処理はステップＳＡ３２０に進む。
【００７３】
ステップＳＡ３１５およびステップＳＡ３２５に続いて、実行解析・制御部１４は、コンテキストデータＣＤに含まれる情報のうち、パッケージ名と、情報群ｓｔ［１］のクラス名、メソッド名、行番号と、APIの実行の許可、APIの実行の拒否のいずれかを示す実行制御情報とを、セキュリティポリシーＳＰとして、記憶部１６内のセキュリティデータＳＤの記憶領域に格納する（ステップＳＡ３２０）。API１１ａの実行を許可することを示す情報がAPI実行部１１に与えられた場合には、セキュリティポリシーＳＰに登録される実行制御情報はAPIの実行の許可を示している。また、API１１ａの実行を拒否することを示す情報がAPI実行部１１に与えられた場合には、セキュリティポリシーＳＰに登録される実行制御情報はAPIの実行の拒否を示している。
【００７４】
上記のように、API実行制御部２０は、API１１ａの実行がバックグラウンドでの情報の送信に繋がる可能性がある場合に、API１１ａの実行を中止する。これによって、ユーザに気づかれずに情報の送信が不正に行われることを防止することができる。
【００７５】
＜第２の動作例＞
第２の動作例では、API実行制御部２０は、正規のアプリケーションがAPIを実行するシーケンスとは異なるシーケンスでAPIを実行する不正な動作を防止する。通常のカメラアプリケーションでは、カメラで撮影を行う前にプレビュー画像が表示され、ユーザはプレビュー画像を見ながら、撮影のシャッターを切る操作を行う。プレビュー画像が表示されていないにもかかわらず撮影のシャッターが切られた場合、盗撮等の不正行為が発生する可能性がある。このような不正行為を防止するため、API実行制御部２０は、カメラで撮影を行う前にプレビュー画像を表示するAPI（プレビュー表示API）、およびカメラで撮影のシャッターを切るAPI（シャッターAPI）が実行されるときに呼び出されて、以下で説明する処理を実行する。
【００７６】
アプリケーション１０がAPI１１ａを呼び出したとき、API実行部１１から呼び出された情報取得部１２は、図３に示す処理を実行する。図３に示す処理の内容については第１の動作例で説明したので、説明を省略する。情報取得部１２から呼び出されたセキュリティポリシー判定部１３は、図７に示す処理を実行する。図７に示す処理の内容については第１の動作例で説明したので、説明を省略する。
【００７７】
セキュリティポリシー判定部１３から呼び出された実行解析・制御部１４は、図９に示す処理を実行する。まず、実行解析・制御部１４は記憶部１５のセキュリティデータＳＤの記憶領域からコンテキストデータＣＤを読み出す（ステップＳＢ３００）。このとき読み出されるコンテキストデータＣＤは、例えば現時点までの一定期間内に呼び出された全てのAPI１１ａに関するコンテキストデータＣＤである。例えば、現在時刻を基準にした一定期間内にある時刻の情報が含まれるコンテキストデータＣＤが読み出される。
【００７８】
続いて、実行解析・制御部１４は、直近に呼び出されたAPI１１ａに関するコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列と、プレビューAPIの文字列である「setPreviewDisplay」とを比較し、呼び出されたAPI１１ａがプレビューAPIである否かを判定する（ステップＳＢ３０５）。
【００７９】
コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「setPreviewDisplay」であった場合、呼び出されたAPI１１ａはプレビューAPIである。この場合、実行解析・制御部１４は、API１１ａの実行を許可することを示す情報をAPI実行部１１に与える（ステップＳＢ３１０）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａに処理を実行させ、実行結果をアプリケーション１０に返す。続いて、処理はステップＳＢ３１５に進む。
【００８０】
また、コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「setPreviewDisplay」でなかった場合、呼び出されたAPI１１ａはプレビューAPIではない。この場合、実行解析・制御部１４は、直近に呼び出されたAPI１１ａに関するコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列と、シャッターAPIの文字列である「takePicture」とを比較し、呼び出されたAPI１１ａがシャッターAPIであるか否かを判定する（ステップＳＢ３２０）。
【００８１】
コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「takePicture」でなかった場合、呼び出されたAPI１１ａはシャッターAPIではない。この場合、実行解析・制御部１４は、API１１ａの実行を許可することを示す情報をAPI実行部１１に与える（ステップＳＢ３１０）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａに処理を実行させ、実行結果をアプリケーション１０に返す。続いて、処理はステップＳＢ３１５に進む。
【００８２】
また、コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「takePicture」であった場合、呼び出されたAPI１１ａはシャッターAPIである。この場合、実行解析・制御部１４は、ステップＳＢ３００で読み出されたコンテキストデータＣＤのうち直近に呼び出されたAPI１１ａに関するコンテキストデータＣＤ以外のそれぞれのコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列と、プレビューAPIの文字列である「setPreviewDisplay」とを比較し、以前にプレビューAPIが呼び出されたか否かを判定する（ステップＳＢ３２５）。
【００８３】
いずれかのコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「setPreviewDisplay」であった場合、以前にプレビューAPIが呼び出されている。ステップＳＢ３２０での判定により、シャッターAPIが直近に呼び出されており、ステップＳＢ３２５での判定により、シャッターAPIが呼び出されるよりも前にプレビューAPIが呼び出されていることが分かる。
【００８４】
プレビューAPIを呼び出した後、シャッターAPIを呼び出す動作は正規の動作であると考えられる。この場合、実行解析・制御部１４は、API１１ａの実行を許可することを示す情報をAPI実行部１１に与える（ステップＳＢ３１０）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａに処理を実行させ、実行結果をアプリケーション１０に返す。続いて、処理はステップＳＢ３１５に進む。
【００８５】
また、どのコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列も「setPreviewDisplay」でなかった場合、以前にプレビューAPIは呼び出されていない。ステップＳＢ３２０での判定により、シャッターAPIが直近に呼び出されており、ステップＳＢ３２５での判定により、シャッターAPIが呼び出されるよりも前にプレビューAPIが呼び出されていないことが分かる。
【００８６】
プレビューAPIを呼び出すことなくシャッターAPIを呼び出す動作は不正な動作であると考えられる。この場合、実行解析・制御部１４は、API１１ａの実行を拒否することを示す情報をAPI実行部１１に与える（ステップＳＢ３３０）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａの処理を中止し、実行結果をアプリケーション１０に返す。このとき、シャッターを切る動作は行われない。
【００８７】
ステップＳＢ３１０およびステップＳＢ３３０に続いて、実行解析・制御部１４は、コンテキストデータＣＤに含まれる情報のうち、パッケージ名と、情報群ｓｔ［１］のクラス名、メソッド名、行番号と、APIの実行の許可、APIの実行の拒否のいずれかを示す実行制御情報とを、セキュリティポリシーＳＰとして、記憶部１６内のセキュリティデータＳＤの記憶領域に格納する（ステップＳＢ３１５）。API１１ａの実行を許可することを示す情報がAPI実行部１１に与えられた場合には、セキュリティポリシーＳＰに登録される実行制御情報はAPIの実行の許可を示している。また、API１１ａの実行を拒否することを示す情報がAPI実行部１１に与えられた場合には、セキュリティポリシーＳＰに登録される実行制御情報はAPIの実行の拒否を示している。
【００８８】
上記のように、API実行制御部２０は、API１１ａの実行が不正に行われる可能性がある場合に、API１１ａの実行を中止する。これによって、ユーザに気づかれずに不正な動作が行われることを防止することができる。
【００８９】
＜第３の動作例＞
第３の動作例では、API実行制御部２０は、正規のアプリケーションがAPIを実行するシーケンスとは異なるシーケンスでAPIを実行する不正な動作を防止する。通常のSMSクライアントアプリケーションは、アドレス帳を参照し、アドレス帳から送信先の情報（アドレス）を取得した後、その送信先にメッセージ（メール）を送信する。
【００９０】
端末装置から個人情報を取得し、取得した個人情報を含むメッセージを外部に送信することで情報漏洩を行う悪性アプリケーションがある。悪性アプリケーションの開発者に個人情報を送信するためには、悪性アプリケーションの動作時にメッセージの送信先のアドレスに悪性アプリケーションの開発者の電話番号を設定する必要がある。このため、アドレス帳が参照されていないにもかかわらずメッセージが送信された場合、個人情報等が漏洩するという不正行為が発生する可能性がある。このような不正行為を防止するため、API実行制御部２０は、メモリ内のデータベースにアクセスして情報を取得するAPI（データベース参照API）が実行されるとき、および外部送信APIが実行されるときに呼び出されて、以下で説明する処理を実行する。
【００９１】
アプリケーション１０がAPI１１ａを呼び出したとき、API実行部１１から呼び出された情報取得部１２は、図３に示す処理を実行する。図３に示す処理の内容については第１の動作例で説明したので、説明を省略する。ただし、以下の点が、第１の動作例で説明した情報取得部１２の処理と異なる。アプリケーション１０は、データベース参照API を呼び出すとき、データベース内のアクセス先（データベース参照APIがアクセスするデータベース内の位置）を示す引数（データベース位置情報）をAPI実行部１１に与える。API実行部１１は、情報取得部１２を呼び出すときにこの引数を情報取得部１２に与える。情報取得部１２は、この引数を含むコンテキストデータＣＤを記憶部１５内のセキュリティデータＳＤの記憶領域に格納する。
【００９２】
情報取得部１２から呼び出されたセキュリティポリシー判定部１３は、図７に示す処理を実行する。図７に示す処理の内容については第１の動作例で説明したので、説明を省略する。
【００９３】
セキュリティポリシー判定部１３から呼び出された実行解析・制御部１４は、図１０に示す処理を実行する。まず、実行解析・制御部１４は記憶部１５のセキュリティデータＳＤの記憶領域からコンテキストデータＣＤを読み出す（ステップＳＣ３００）。このとき読み出されるコンテキストデータＣＤは、例えば現時点までの一定期間内に呼び出された全てのAPI１１ａに関するコンテキストデータＣＤである。
【００９４】
続いて、実行解析・制御部１４は、直近に呼び出されたAPI１１ａに関するコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列と、データベース参照APIの文字列である「Cursor」とを比較し、呼び出されたAPI１１ａがデータベース参照APIであるか否かを判定する（ステップＳＣ３０５）。
【００９５】
コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「Cursor」であった場合、呼び出されたAPI１１ａはデータベース参照APIである。この場合、実行解析・制御部１４は、API１１ａの実行を許可することを示す情報をAPI実行部１１に与える（ステップＳＣ３１０）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａに処理を実行させ、実行結果をアプリケーション１０に返す。続いて、処理はステップＳＣ３１５に進む。
【００９６】
また、コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「Cursor」でなかった場合、呼び出されたAPI１１ａはデータベース参照APIではない。この場合、実行解析・制御部１４は、直近に呼び出されたAPI１１ａに関するコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列と、外部送信APIの文字列である「sendTextMessage」とを比較し、呼び出されたAPI１１ａが外部送信APIであるか否かを判定する（ステップＳＣ３２０）。
【００９７】
コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「sendTextMessage」でなかった場合、呼び出されたAPI１１ａは外部送信APIではない。この場合、実行解析・制御部１４は、API１１ａの実行を許可することを示す情報をAPI実行部１１に与える（ステップＳＣ３１０）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａに処理を実行させ、実行結果をアプリケーション１０に返す。続いて、処理はステップＳＣ３１５に進む。
【００９８】
また、コンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「sendTextMessage」であった場合、呼び出されたAPI１１ａは外部送信APIである。この場合、実行解析・制御部１４は、ステップＳＣ３００で読み出されたコンテキストデータＣＤのうち直近に呼び出されたAPI１１ａに関するコンテキストデータＣＤ以外のそれぞれのコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列と、データベース参照APIの文字列である「Cursor」とを比較し、以前にデータベース参照APIが呼び出されたか否かを判定する（ステップＳＣ３２５）。
【００９９】
いずれかのコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列が「Cursor」であった場合、以前にデータベース参照APIが呼び出されている。ステップＳＣ３２０での判定により、外部送信APIが直近に呼び出されており、ステップＳＣ３２５での判定により、外部送信APIが呼び出されるよりも前にデータベース参照APIが呼び出されていることが分かる。
【０１００】
この場合、実行解析・制御部１４は、ステップＳＣ３００で読み出されたコンテキストデータＣＤのうちデータベース参照APIに関するコンテキストデータＣＤに含まれる、データベース内のアクセス先を示す引数の文字列と、正規のアプリケーションがアドレスの参照に利用するアドレス帳を示す文字列である「com.*andrd*.contacts」とを比較し、データベース参照APIのアクセス先としてアドレス帳が指定されたか否か（データベース参照APIのアクセス先がアドレス帳であるか否か）を判定する（ステップＳＣ３３０）。
【０１０１】
データベース内のアクセス先を示す引数の文字列が「com.*andrd*.contacts」であった場合、データベース参照APIのアクセス先としてアドレス帳が指定されている。アドレス帳にアクセスするデータベース参照APIを呼び出した後、外部送信APIを呼び出す動作は正規の動作であると考えられる。この場合、実行解析・制御部１４は、API１１ａの実行を許可することを示す情報をAPI実行部１１に与える（ステップＳＣ３１０）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａに処理を実行させ、実行結果をアプリケーション１０に返す。続いて、処理はステップＳＣ３１５に進む。
【０１０２】
データベース内のアクセス先を示す引数の文字列が「com.*andrd*.contacts」でなかった場合、データベース参照APIのアクセス先としてアドレス帳が指定されていない。アドレス帳にアクセスすることなく外部送信APIを呼び出す動作は不正な動作であると考えられる。この場合、実行解析・制御部１４は、API１１ａの実行を拒否することを示す情報をAPI実行部１１に与える（ステップＳＣ３３５）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａの処理を中止し、実行結果をアプリケーション１０に返す。このとき、情報の送信は行われない。
【０１０３】
また、ステップＳＣ３２５において、どのコンテキストデータＣＤに含まれる情報群ｓｔ［０］のメソッド名の文字列も「Cursor」でなかった場合、以前にデータベース参照APIは呼び出されていない。ステップＳＣ３２０での判定により、外部送信APIが直近に呼び出されており、ステップＳＣ３２５での判定により、外部送信APIが呼び出されるよりも前にデータベース参照APIが呼び出されていないことが分かる。
【０１０４】
データベース参照APIを呼び出すことなく外部送信APIを呼び出す動作は不正な動作であると考えられる。この場合、実行解析・制御部１４は、API１１ａの実行を拒否することを示す情報をAPI実行部１１に与える（ステップＳＣ３３５）。API実行部１１は、実行解析・制御部１４から与えられた情報に基づいてAPI１１ａの処理を中止し、実行結果をアプリケーション１０に返す。このとき、情報の送信は行われない。
【０１０５】
ステップＳＣ３１０およびステップＳＣ３３５に続いて、実行解析・制御部１４は、コンテキストデータＣＤに含まれる情報のうち、パッケージ名と、情報群ｓｔ［１］のクラス名、メソッド名、行番号と、APIの実行の許可、APIの実行の拒否のいずれかを示す実行制御情報とを、セキュリティポリシーＳＰとして、記憶部１６内のセキュリティデータＳＤの記憶領域に格納する（ステップＳＣ３１５）。API１１ａの実行を許可することを示す情報がAPI実行部１１に与えられた場合には、セキュリティポリシーＳＰに登録される実行制御情報はAPIの実行の許可を示している。また、API１１ａの実行を拒否することを示す情報がAPI実行部１１に与えられた場合には、セキュリティポリシーＳＰに登録される実行制御情報はAPIの実行の拒否を示している。
【０１０６】
上記のように、API実行制御部２０は、API１１ａの実行が不正に行われる可能性がある場合に、API１１ａの実行を中止する。これによって、ユーザに気づかれずに不正な動作が行われることを防止することができる。
【０１０７】
上述したように、第１〜第３の動作例では、バックグラウンドで情報が送信される場合や、プレビューAPIが実行されることなくシャッターAPIが実行される場合、アドレス帳にアクセスするデータベース参照APIが実行されずに外部送信APIが実行される場合に、不正な動作が行われないようにAPIの実行を制御することによって、ユーザに気づかれずに不正な動作が行われることを防止することができる。
【０１０８】
また、実行解析・制御部１４がAPI１１ａの実行状況を解析して得られた、APIの実行の許可またはAPIの実行の拒否を示す実行制御情報をセキュリティポリシーＳＰとして登録しておき、次にAPI１１ａが実行されようとしているときに、セキュリティポリシーＳＰに登録された情報に基づいてAPI１１ａの実行を制御することによって、処理を高速化することができる。
【０１０９】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【０１１０】
１０・・・アプリケーション、１１・・・API実行部、１２・・・情報取得部、１３・・・セキュリティポリシー判定部（制御部）、１４・・・実行解析・制御部（解析部、制御部）、１５・・・記憶部、１６・・・通信部、２０・・・API実行制御部
【図１】
0005825595.tif 000002
【図２】
0005825595.tif 000003
【図３】
0005825595.tif 000004
【図４】
0005825595.tif 000005
【図５】
0005825595.tif 000006
【図６】
0005825595.tif 000007
【図７】
0005825595.tif 000008
【図８】
0005825595.tif 000009
【図９】
0005825595.tif 000010
【図１０】
0005825595.tif 000011