JP7262269B2 - 情報処理装置、及び情報処理装置の制御方法、プログラム - Google Patents

情報処理装置、及び情報処理装置の制御方法、プログラム Download PDF

Info

Publication number
JP7262269B2
JP7262269B2 JP2019061358A JP2019061358A JP7262269B2 JP 7262269 B2 JP7262269 B2 JP 7262269B2 JP 2019061358 A JP2019061358 A JP 2019061358A JP 2019061358 A JP2019061358 A JP 2019061358A JP 7262269 B2 JP7262269 B2 JP 7262269B2
Authority
JP
Japan
Prior art keywords
application
program
information processing
processing device
list
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2019061358A
Other languages
English (en)
Other versions
JP2020160946A (ja
JP2020160946A5 (ja
Inventor
極 長谷川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2019061358A priority Critical patent/JP7262269B2/ja
Priority to US16/822,410 priority patent/US11586723B2/en
Publication of JP2020160946A publication Critical patent/JP2020160946A/ja
Publication of JP2020160946A5 publication Critical patent/JP2020160946A5/ja
Application granted granted Critical
Publication of JP7262269B2 publication Critical patent/JP7262269B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2139Recurrent verification

Description

本発明は、例えば、複数のプログラムが依存関係にある場合であってもそれらプログラムのセキュリティを維持する情報処理装置及び情報処理方法、プログラムに関する。
一般に、ユーザがアプリケーションプログラム(以降ではアプリ)をシステムにインストール、もしくは開始しようとした際に、システムはそのアプリが信頼できるアプリか否かを判断してから開始処理を行うことができる。そして、もし信頼できないアプリであった場合、システム全体がシステムダウンもしくは、ハングアップにつながるリスクもあるため、そのアプリを開始しないようにすることができる。例えば、アプリの実行に必要となる情報が改ざんされていないこと、もしくは破損していないことをシステムが判定し、情報が改ざんされたアプリ、もしくは破損したアプリであった場合には、警告画面を表示し、開始処理を中断するシステムがある。アプリの実行に必要となる情報として、アプリのプログラムファイル、アプリの情報を記述しているアプリマニフェストファイルが例として該当する。破損検知の機能として、ファイルの破損を検知した際に、ファイルの復旧を行う技術もある(特許文献1)。
また一般に、アプリの実行環境の中には、アプリが自身のプログラムの一部を公開し、他のアプリがその公開されているプログラムを参照し、実行することができるものがある。以降では、他のアプリに対してプログラムの一部を公開可能状態とすることをエクスポートと呼び、他のアプリのプログラムを参照可能状態にすることをインポートと呼ぶ。この際、エクスポートを行っているアプリは、アプリ実行環境上で開始処理が実行されている必要はない。
特開2014-109821号公報
二つのアプリがインストールされ、かつ第一のアプリがエクスポート、第二のアプリが第一のアプリのプログラムをインポートするような環境において、第二のアプリが、信頼できない第一のアプリのプログラムを実行してしまうリスクがある。
例えば、第一のアプリ、第二のアプリが画像処理装置のような組み込み機器内にインストールされた状態で、攻撃者が第一のアプリのプログラムコードを改ざんしたとする。その場合、システムが第一のアプリを開始する際に、システムは第一のアプリを検証して信頼できないアプリと判断する。一方、システムが第二のアプリを開始する際は、システムは第二のアプリを検証して信頼できるアプリと判断する。しかし、第二のアプリは第一のアプリのプログラムの一部を実行することができ、その場合には第一のアプリのプログラムコードについて検証が行われない。そのため、第一のアプリの改ざんされたプログラムコードが実行される可能性があり、セキュリティ上のリスクとなる。
特許文献1では、画像形成装置内にアプリをインストール際に署名確認を行うため、画像形成装置にインストールされた後のアプリが信頼できるものかを判断することはできない。すなわちインストール後の改ざんや破損については対応できない。
本発明は上記従来例に鑑みてなされたもので、依存関係にある複数のプログラムについても、それらのセキュリティを維持することを目的とする。
上記目的を達成するために本発明は以下の構成を有する。
本発明によれば、複数のアプリケーションが動作する情報処理装置であって、
アプリケーションの信頼性を検証する検証手段と、
前記アプリケーションを制御する制御手段とを有し、
前記制御手段は、ユーザの指示に応じて実行される第1のアプリケーションの実行中に、前記第1のアプリケーションが動的にインポートする第2のアプリケーションを、該第2のアプリケーションのロードの前に前記検証手段に検証させ
アプリケーションがインストールされた際と、前記情報処理装置の起動の際とに、前記アプリケーションが他のアプリケーションを動的にインポートするか判定し、動的にインポートする場合には動的にインポートされるアプリケーションの第1のリストを生成し、
前記制御手段は、前記検証手段に、前記第1のリストに基づいて前記第2のアプリケーションを検証させ
ことを特徴とする情報処理装置が提供される。
本発明によれば、依存関係にある複数のプログラムについても、それらのセキュリティを維持することができる。
全体構成図 画像形成装置のハードウェア構成図 システム構成図 記憶装置内を模式的に表した図 各アプリのマニフェストファイルを表した図 アプリ管理フレームワークが管理するリストを表した図 操作画面を模式的に表した図 アプリをインストールする時のフロー図 アプリを開始する時のフロー図 アプリを実行する時のフロー図 アプリを実行する時のフロー図 画像形成装置を起動する時のフロー図
以下、添付図面を参照して実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る発明を限定するものではない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
●システム構成
図1に掲げるのは本発明のシステム全体の構成を示す図である。画像形成装置100は本実施例にかかる機能を実装した情報処理装置の一例であり、例えばデジタル多機能複写機(MFP)などである。情報処理装置101は、画像形成装置(100)を管理する。情報処理装置101は例えば汎用のコンピュータである。ネットワーク120は、画像形成装置100と情報処理装置101を接続する。情報処理装置101は画像形成装置100にネットワーク(120)経由でアクセスし、利用する。
●画像形成装置
図2は画像形成装置100のハードウェア構成を図式化したものである。コア部200は画像形成装置200全体及びその各部を制御する制御部であり、例えばプロセッサとメモリとを含み、プログラムを実行することでその機能を遂行する。ユーザインターフェース部201は操作部と表示部とを含み、操作者による操作と操作者に対する表示が行われる。以降では、ユーザインターフェース部として、操作画面の例を用いて説明する。記憶装置202は、プログラムファイルやデータファイルなどを記憶する。ネットワークインターフェース部203はネットワーク120に接続するためのインターフェースである。スキャナー部204は、原稿画像を光学的に走査してデジタルデータに変換する。プリンター部205は、スキャナー部204によりスキャンされた原稿画像を印刷出力したりや、情報処理装置101から入力された印刷ジョブに応じた印刷出力を行う。206はフィニッシャー部であり、プリンター部205から出力された印刷物を対象として、ステイプルや折り、製本などの後処理を実行する。
図3は本実施例における画像形成装置100の上でアプリケーションプログラム(以降、アプリ)を実行するためのシステム構成図である。本実施例においては、Java(登録商標)実行環境で複数のアプリを動作させるものとする。ここで、Java実行環境で動作するアプリはJavaで記述され、また、複数のアプリを管理するためのフレームワーク(以降ではアプリ管理フレームワーク)もJavaで記述されている。
ユーザが画像形成装置100の電源を入れると、Java実行環境301が動き出し、アプリを実行可能にするために必要な、アプリ管理フレームワーク302を起動する。またJava実行環境301には、システムのプログラムをメモリ内に読み込むための、システムクラスローダ3010がある。一般に、Java実行環境301は、記憶装置202に置かれたプログラムファイルをメモリ内に読み込ませることで、プログラムの実行を行うことができる。プログラムファイルは、各プログラムをクラス単位で記載したクラスファイルが用いられる。そして、このクラスファイルをメモリ内に読み込むことをクラスのロード(もしくはロード、プログラムのロード)と呼ぶ。アプリ管理フレームワーク302はアプリのインストールおよびアンインストール、開始と停止を管理する。
アプリ310は画像形成装置100上で動作し、エクスポート(Export)するプログラムを示すアプリケーションA(以降、アプリAとも呼ぶ)である。アプリ311は、画像形成装置100上で動作するアプリであり、アプリ310がエクスポートしているプログラムをインポート(Import)するアプリケーションB(以降、アプリBとも呼ぶ)である。アプリ312は、画像形成装置(100)上で動作するアプリであり、アプリ312(以降、アプリCとも呼ぶ)の実行中に、アプリA310のプログラムが必要になった場合に動的にインポートするプログラムを示すアプリCである。なお、動的なインポートに対して動的ではないインポートを静的なインポートと呼ぶことがある。以降では、動的に他のアプリのプログラムをインポートすることを動的インポートまたはダイナミックインポート(DynamicImport)と呼ぶ。ここではアプリ311が、アプリA310のエクスポートしているプログラムをインポートし、そのプログラムを実行することができる例を示す。また、アプリC312が、アプリA310のプログラムを動的インポートし、アプリA310がエクスポートしているプログラムを実行することができる例を示す。画像形成装置100では一つ、あるいは複数のアプリを動作させることが可能である。ここではアプリを三つ例示していが、エクスポートとインポートとを行う、といった複数の条件を持ったアプリや、いずれも行っていないアプリでも、画像形成装置100上で動作することが可能である。アプリのライフサイクルには、インストール、開始、停止、アンインストール、アップデートといったイベントがある。ユーザ管理者は、情報処理装置101からネットワーク120経由で、アプリのライフサイクルを管理することができる。
例えば、ユーザ管理者からアプリA310のインストール指示を受け付けると、アプリ管理フレームワーク302はアプリA310のプログラムファイルを記憶装置202に記憶する。この状態では、プログラムファイルが画像形成装置100に記憶されただけの状態になるため、インストールされたアプリA310はユーザ操作を直接受け付けることはできない。その後、ユーザ管理者からインストールされたアプリA310に対して開始指示を受け付けると、アプリ管理フレームワーク302はアプリ310の開始処理を行う。開始処理が完了すると、アプリA310は開始状態となり、ユーザインターフェース部201である操作画面にアプリA310のアイコンを表示する。そして、ユーザ管理者から操作画面に表示したアプリA310のアイコンの選択を受け付けると、アプリA310はユーザ操作を受け付け、Java実行環境301上でアプリA310のプログラムが実行される。この例では、アプリA310が、ユーザ操作を受け付けて、アプリ310のプログラムを実行したことになる。一方で、アプリA310はプログラムをエクスポートしているため、アプリA310がインストールされただけの状態でも、他の開始されたアプリ(例えば、操作画面にアイコンが表示されたアプリB311がユーザ操作を受け付けて、アプリA310のプログラムを実行することもできる。
アプリクラスローダ群331は、各アプリのプログラムをクラスロードするためのアプリクラスローダの集まりである。アプリクラスローダ群331は、アプリ管理フレームワーク302のプログラムの一部である。アプリ管理フレームワーク302は、アプリを記憶装置202に記憶すると、インストールしたアプリ用のアプリクラスローダを生成する。そのため、アプリクラスローダとアプリは1対1の関係となっていて、アプリクラスローダからはどのアプリに対応するかがわかるようになっている。アプリクラスローダ3310、3311、3312はそれぞれ、アプリA310、アプリB311、アプリC312に対応したアプリクラスローダである。サポートライブラリ340は、アプリによる利用に供すべく、画像形成装置100のさまざまな機能を提供するためのライブラリである。
セキュリティモジュール350は、アプリを信頼できるか否かを判定するプログラムモジュールである。セキュリティモジュール350は、アプリのプログラムファイルや、マニフェストファイルが信頼できるファイルかを検証し、アプリが信頼できるものか否かを判定している。セキュリティモジュール350は、例えば、破損や改ざんによりプログラムファイルが一部変更されていた場合は、信頼できないアプリとして判断する。本実施例では、信頼できるか否かを検証する方法として、ファイルのハッシュ値を比較する方法を行う。この方法では、準備として、ファイルを信頼できるタイミングでそのファイルのハッシュ値(以降、正解値)を計算し、あらかじめ記憶しておく。そして、例えばファイルを使用するタイミングで、同じファイルのハッシュ値を再度計算し、記憶しておいた正解値と比較して、差がないかを確認する方法である。この方法では、ハッシュ値の比較を行った時に、記憶された正解値と再計算したハッシュ値とに差があった場合に、信頼できないと判断する。そのため、セキュリティモジュール350は、あらかじめ正解値の作成も行う。
なお、Java実行環境301やアプリ管理フレームワーク302、サポートライブラリ340、セキュリティモジュール350は画像形成装置100のシステムに含まれるプログラムである。システムに含まれるプログラムとは、画像形成装置100を管理し制御するために製造時にインストールされた基本的なプログラムであり、アプリケーションプログラムに対する環境を構成する。
ユーザ管理者から、アプリのインストール指示を受け付けると、アプリ管理フレームワーク302は、アプリを画像形成装置100にインストールすると同時に、インストールしたアプリの正解値(すなわち基準となるハッシュ値)の生成をセキュリティモジュール350に依頼する。セキュリティモジュール350は、正解値生成の依頼を受けると、対象となるアプリのプログラムファイル、およびマニフェストファイルに対するそれぞれのハッシュ値を計算し、計算したハッシュ値を正解値として記憶装置202に記憶する。正解値が紐づけられて初めてそのアプリは実行可能とされる。ユーザ管理者から、アプリの開始指示を受け付けると、アプリ管理フレームワーク302は、アプリが信頼できるアプリか否かの検証を、セキュリティモジュール350に依頼する。セキュリティモジュール350は、信頼確認(すなわち検証)の依頼を受けると、アプリのプログラムファイル、およびマニフェストファイルに対するそれぞれのハッシュ値を計算し、あらかじめ記憶したそれぞれの正解値と比較を行う。セキュリティモジュール350は、プログラムファイルおよびマニフェストファイルの両方について、ここで計算したハッシュ値と正解値に差がなければ、懸賞の対象であるアプリを信頼できるアプリと判定する。一方、いずれかに差があれば信頼できないアプリと判定する。アプリ管理フレームワーク302は、セキュリティモジュール350から検証結果を受け取り、開始指示を受けたアプリが信頼できるアプリであった場合に、アプリの開始処理を続ける。信頼できないアプリであった場合は、アプリの開始処理を中断し、情報処理装置101を介して、ユーザ管理者に信頼できないアプリである旨の警告を行う。なお検証方法に関して、ここではハッシュ値の比較による検証方法について例を示したが、信頼できるか否かを検証できる方法であれば他の方法であっても良い。
●アプリのファイル構造
図4は、記憶装置202にインストールされた各アプリを模式的に表した例である。ユーザ管理者からアプリのインストール指示を受け付けると、アプリ管理フレームワーク302は、インストールリクエストのあったアプリのディレクトリを記憶装置202の中に作成する。ここでは例として、/HDD/inStall_appというディレクトリパスの下に、アプリのディレクトリを作成している。そして、アプリがデータを格納しておくためのデータディレクトリ401、アプリを管理するために利用するアプリ管理ファイルも作成する。アプリ管理ファイルは、アプリの状態、例えば「インストール済み」「開始済み」といったアプリの情報の記載を行うためのファイルである。そして、インストール指示のあったアプリのマニフェストファイル402、プログラムファイル403もこのアプリのディレクトリ内に配置する。元々マニフェストファイル402と、プログラムファイル403とは、アプリの内部に保持されており、ユーザ管理者からアプリインストールを受け付けた際に、情報処理装置101を介して、アプリ管理フレームワーク302に渡される。そして、アプリ管理フレームワーク302は、渡されたマニフェストファイル402、プログラムファイルを、それぞれマニフェストファイル402、プログラムファイル403として記憶装置202に記憶する。Javaのプログラムは名前空間で管理されており、各プログラムファイルも名前空間に従って配置する。さらに、各プログラムファイルはclass拡張子の形式でアプリ内に用意されており、各claSS拡張子のプログラムファイルを、1つもしくは複数のjar拡張子のファイル形式に圧縮してある。ここでは例として、アプリA310のディレクトリ構成を表しているが、アプリB311、アプリC312も同様のディレクトリ構成となる。ただし、マニフェストファイルに記載されている内容や、プログラムの内容は各アプリによって異なる。
●マニフェストファイル
図5は、各アプリが内部に保持しているマニフェストファイルを模式的に表した例である。マニフェストファイル402はアプリA310のマニフェストファイルである。アプリA310のアプリ開発者は、マニフェストファイルに、アプリ管理フレームワーク302が各アプリを識別するための"App-ID"を記載する。他にも、アプリ開発者は、アプリのどのプログラムをエクスポートするかを"Export-Package:"の後に記載することができる。同様に、他のアプリのどのプログラムをインポートするかを"Import-Package:"の後に、他のアプリのどのプログラムを動的インポートするかを"Dynamic-Import:"の後に記載する。このようにマニフェストファイルにパッケージのインポートやエクスポート等を宣言しておくことができる。なおパッケージとはクラスファイルの集まりということができる。アプリ管理フレームワーク302は、アプリのマニフェストファイルを参照して、各アプリがどのプログラムのエクスポート、またはインポート、または動的インポートを行うかを判断することができる。アプリがエクスポート、インポート、動的インポートのいずれも行わない場合、アプリ開発者はマニフェストファイルの該当する項目を空欄にしておく。
アプリA310はエクスポートを行うアプリのため、アプリAのマニフェストファイル402には、"Export-Package"に、公開するプログラム名が記載されている。ここでは、"appA.package.public"という名前空間が指定されている。アプリA310のマニフェストファイル402の記載の場合、アプリA310のプログラムのうち、名前空間が"appA.package.public"で始まるプログラムを、他のアプリに対して公開すると宣言することになる。図4で図示されたアプリA310のプログラムでは、programA1.classを他のアプリに対して公開している。
マニフェストファイル404はアプリB311のマニフェストファイルである。アプリB311のマニフェストファイル404には"Import-Package"に、アプリB311が参照したい他のアプリのプログラム名が記載されている。ここでは、"appA.package.public"という名前空間が指定されている。アプリB311は、他のアプリがエクスポートしているプログラムのうち、名前空間が"appA.package.public"で始まるプログラムを、他のアプリから参照すると宣言することになる。アプリB311の開始時に、アプリB311が"Import-Package"で宣言しているプログラムを、他のどのアプリもエクスポートしていない場合、アプリ管理フレームワーク302は、アプリB311の開始処理を中断する。
マニフェストファイル405はアプリC312のマニフェストファイルである。アプリC312のマニフェストファイル405には"DynamicImport-Package"に、アプリC312が参照したい他のアプリのプログラム名が記載されている。ここでは、"appA.package.public"という名前空間が指定されている。アプリC312は、他のアプリがエクスポートしているプログラムのうち、名前空間が"appA.package.public"で始まるプログラムを、参照すると宣言することになる。アプリB311と異なり、アプリC312は、他のアプリのプログラムを動的インポートすることができる。そのため、アプリC312の開始時に、"DynamicImport-Package"で宣言しているプログラムを、他のどのアプリがエクスポートしていない場合でも、アプリ管理フレームワーク302は、アプリB311を開始する。そのため、一般に、アプリC312のアプリ開発者は、宣言した他のアプリのプログラムがないことも想定して、アプリC312を開発する。
●インポート/エクスポート/動的インポート
図6は、アプリ管理フレームワーク302が、メモリ内で記憶するエクスポートパッケージ、インポートパッケージ、動的インポートパッケージを模式的に表した例である。ここでは各情報をリストで管理している例を表す。このリストは、画像形成装置100により、後述する図12の手順で作成される。
図6(a)はアプリ管理フレームワーク302が管理するエクスポートパッケージリスト601である。エクスポートパッケージスト601は、アプリケーションID(App-ID)"AppA"とエクスポートパッケージ名(Export-Package)"appApackage.public"の対になっており、アプリ管理フレームワーク302は、どのアプリがどのプログラムをエクスポートしているかを管理している。
図6(b)は、アプリ管理フレームワーク302が管理するアプリ毎のパッケージリスト602、605、608、611である。エクスポートパッケージリスト601は1つのリストで全アプリの情報を管理していたのに対し、図6(b)のパッケージリストは、アプリ毎のパッケージ情報をリストとして管理している。パッケージリストには、各アプリが宣言しているインポートパッケージ、および動的インポートパッケージeをそれぞれリストとして管理している。アプリ管理フレームワーク302は、アプリを開始する際に、アプリが宣言しているインポートパッケージ、動的インポートパッケージの情報を取得し、開始するアプリに関するパッケージリストを記憶する。その際にインポートパッケージに関して、アプリ管理フレームワーク302は、エクスポートパッケージリスト601からアプリを特定し、エクスポートしているアプリと合わせて、インポートパッケージリストを管理する。そのためインポートパッケージリストは、各アプリが宣言しているインポートパッケージ情報と、そのパッケージをエクスポートしているアプリ("App-ID")の対として、管理されている。
パッケージリスト602は、アプリ管理フレームワーク302が持つアプリA310のパッケージリストである。パッケージリスト602には、アプリA310に関するインポートパッケージリスト603、動的インポートパッケージリスト604がある。図5に示す通り、アプリA310は、インポートパッケージ、動的インポートパッケージをともに宣言していない為、各パッケージリスト603、604は空となる。
パッケージリスト605は、アプリ管理フレームワーク302が持つアプリB311のパッケージリストである。パッケージリスト605には、アプリB311に関するインポートパッケージリスト606、動的インポートパッケージリスト607がある。図5に示す通り、アプリB311は、インポートパッケージに、アプリA310の"appA.package.public"を宣言しているため、その情報がインポートパッケージリスト606として管理されている。アプリB311は動的インポートパッケージを宣言していない為、動的インポートパッケージリスト607は空となる。
パッケージリスト608は、アプリ開始時の、アプリ管理フレームワーク302が持つアプリC312のパッケージリストである。パッケージリスト608には、アプリC312に関するインポートパッケージリスト609、動的インポートパッケージリスト610がある。図5に示す通り、アプリC312は、インポートパッケージを宣言していない為、インポートパッケージリスト609は空となる。一方で、アプリC312は、動的インポートパッケージに、アプリA310の"appA.package.public"を宣言しているため、その情報が動的インポートパッケージリスト610として管理されている。アプリC312を開始した後、アプリC312が"appA.package.public"のプログラムを初めて実行すると、アプリ管理フレームワーク302は、アプリC312の動的インポートを行う。
パッケージリスト611は、動的インポートを行った後のアプリC312のパッケージ情報である。動的インポートの際、アプリ管理フレームワーク302は、動的インポートパッケージリスト610にあるパッケージをエクスポートしているアプリをエクスポートパッケージリスト601から特定する。そして、インポートパッケージリスト609に、動的インポートを行ったパッケージ情報と、そのパッケージをエクスポートしているアプリの情報を追加する。追加後、アプリ管理フレームワーク302は、動的インポートを行ったパッケージ情報を、動的インポートパッケージリスト610から削除する。
なお、本実施例では、エクスポートパッケージリスト6、パッケージリスト、インポートパッケージリスト、動的インポートパッケージリストをメモリ上に生成する例を示す。しかし、メモリ上以外の場所に生成しても良く、例えば記憶装置202上で生成し、管理しても良い。
●操作画面例
図7は、ユーザインターフェース部201である操作画面を模式的に示した図である。ユーザが画像形成装置100を利用する際、ユーザインターフェース部201の操作画面には始め、実行が開始されている各アプリのアイコンを並べたメインメニューが表示される。ユーザがメインメニューに表示されたアイコンを選択すると、操作画面がアプリの画面に遷移し、そこでユーザはアプリの機能を実行することができるようになる。ここでは、例として、アプリA310が記憶装置202にドキュメントデータを保存するドキュメント保存機能を持ち、その機能を実行するためのプログラムをエクスポートしているとする。
またアプリB311は、スキャナー部204でドキュメントをスキャンするスキャン機能と、スキャンしたドキュメントを記憶装置202に保存する機能を持つとする。さらにアプリB311は、ドキュメント保存機能を、他のアプリのプログラムを実行することで実現する。ここでは、アプリA310がドキュメントを保存するためのプログラムをエクスポートしているため、アプリB311の開始処理の中で、アプリB311がアプリAのプログラムをインポートする。そして、ユーザが操作画面で、開始完了後のアプリB311のアイコンを選択すると、アプリB311はスキャン機能を実行し、その後、アプリA310のドキュメント保存機能を実行する。もし、アプリA310が画像形成装置にインストールされていない場合、アプリB311の開始処理でアプリA310のプログラムをインポートができなくなるため、アプリ管理フレームワーク302は、アプリB311の開始処理を中断する。
アプリC312は、スキャナー部204でドキュメントをスキャンするスキャン機能と、スキャンしたドキュメントの保存を記憶装置202か外部サーバ(例えば情報処理装置101の記憶部)にするかをユーザが選択できる保存先選択機能を持つとする。ユーザが記憶装置202への保存を選択した場合、アプリC312は、アプリB311と同様に、アプリA310のプログラムを実行することで実現する。一方、ユーザが外部サーバ(例えば情報処理装置101の記憶部)への保存を選択した場合、アプリC312はアプリC312自身のプログラムを実行して、外部サーバへの保存機能を実現するとする。ここでアプリC312は、アプリB311と同様、アプリA310がインストールされていないと記憶装置202へのドキュメント保存機能を実行できなくなる。これにより、アプリ管理フレームワーク302は、アプリB311とは異なり、アプリ開始処理中ではなく、アプリC312が初めて動的インポートするプログラムを実行したタイミングでアプリC312がインポートを行うようになる。その制約として、アプリCのアプリ開発者は、動的インポートするプログラムがエクスポートされていないケースも考慮して、アプリC312を開発する。アプリ開発者は、もし動的インポートするプログラムがエクスポートされていない状態で、そのプログラムの実行を試みられた場合でも、アプリC312が適切なエラーハンドリングを行い、正常動作できるように、アプリC312を開発する必要がある。これにより、もしアプリA310がインストールされていない状態でも、ユーザは画像形成装置100で、アプリC312の一部機能を利用することができるようになる。
図7(a)は、アプリA310、アプリB311、アプリC312のインストール後に、アプリB311、アプリC312が開始された際の、操作画面に表示されるメインメニューを示している。アプリA310はインストールされただけの状態であり、開始されていないため、アイコンが表示されていない。対して、アプリB311、アプリC312に関して、開始処理が完了した後の画面が示されているため、アプリB311、アプリC312のそれぞれのアイコン701、702がメインメニューに表示されている。ユーザは、アイコン701を選択することで、アプリB311の機能を利用することができる。同様に、ユーザはアイコン702を選択することで、アプリC312の機能を利用することができる。
図7(b)は、図7(a)の状態でユーザがアイコン701を選択して、さらにユーザがスキャン機能を利用した後、操作画面に表示されるアプリB311の画面を模式的に示している。アプリBは、ドキュメント保存機能をアプリA310のプログラムを実行して実現している。そのため、操作画面上にはアプリB311の画面が表示されているが、その中でアプリB311は、アプリA310の画面704を表示している。ユーザが、画面704の操作を行うと、アプリB311はアプリA310のプログラムを実行して、ドキュメント保存機能を実現する。
図7(c)は、図7(a)の状態でユーザがアイコン702を選択して、さらにユーザがスキャン機能を利用した後、操作画面に表示されるアプリC312の画面を模式的に示している。アプリC312の画面には、スキャンしたドキュメントの保存先をユーザに選択してもらう画面が表示されている。アイコン705は、それが選択された時に、スキャンしたドキュメントを記憶装置202に保存する機能を実行するためのアイコンである。アイコン706は、それが選択された時に、スキャンしたドキュメントを外部サーバ(例えば情報処理装置101の記憶部)に保存する機能を実行するためのアイコンである。ユーザがアイコン705を選択するとアプリC312はアプリA310のプログラムを実行して保存機能を実現する。この時、初めてアプリC312がアプリA310のプログラムを実行する場合、アプリC312がアプリA310のプログラムをインポートする。その後で、アプリC312がアプリA310のプログラムを実行する。ユーザがアイコン706を選択するとアプリC312はアプリC312自身のプログラムのみで保存機能を実現する。
図7(d)は、アプリA310を画像形成装置100にインストールしていない状態のアプリC312の画面を示している。アプリA310がインストールされていない状態でも、アプリ管理フレームワーク302はアプリC312の開始処理を完了させるため、操作画面のメインメニューにアプリC312のアイコン702が表示される。その状態でユーザがアイコン702を選択して、さらにユーザがスキャン機能を利用した後、操作画面に表示されるアプリC312の画面を模式的に示している。アイコン707は、アイコン705と同様、選択された時に、スキャンしたドキュメントを記憶装置202に保存する機能を実行するためのアイコンである。しかし、アプリA310のプログラムを実行できない状態であるため、選択できないことを示す網掛け表示になっている。アプリC312は、選択機能の画面表示時に動的インポートしているプログラムを実行して、エクスポートされたプログラムがないことを確認した後に、アイコン707を表示にする。もしくは、アプリC312は、初めはアイコン705を表示し、ユーザがアイコン705を選択した後、エクスポートされているプログラムがなかった場合に、アイコン707を表示するようにしても良い。これにより、画像形成装置100にアプリA310がインストールされていなくても、ユーザは、アイコン706を選択することで、アプリCの一部機能を利用することができる。
なお、ここでは、スキャンドキュメントの保存機能を実現するアプリや画面遷移、網掛け表示による動的インポートのエラーハンドリングを例として示したが、他の機能を持つアプリ、画面遷移、エラーハンドリングを行っても良い。
●アプリのインストール処理
図8は、アプリ管理フレームワーク302がアプリをインストールするときの処理のフローを示している。ユーザ管理者から、情報処理装置101を介して、画像形成装置100にアプリのインストール指示を受け付けると、アプリ管理フレームワーク302がアプリのインストール処理を開始する。ユーザからインストール指示を受け付けると、情報処理装置101を介して、アプリのプログラムファイル、マニフェストファイルを、アプリ管理フレームワーク302は渡される。図8の処理は、ハードウェア上は、例えば画像形成装置100のコア部200、特にそのプロセッサにより実行される。
S801で、アプリ管理フレームワーク302は、渡されたプログラムファイル、およびマニフェストファイルを記憶装置202内に保存する。記憶装置202への保存の仕方の一例は図4で示した通りである。
そして、S802で、アプリ管理フレームワーク302は、インストールするアプリ用のアプリクラスローダをメモリ上に生成する。同時に、インストールするアプリ用のパッケージリストを生成する。S802の後、S803で、アプリ管理フレームワーク302は、インストールするアプリの信頼性検証(すなわち改ざんや破損がないことの検証)を行うときに必要な正解値の生成をセキュリティモジュール350に依頼し、生成された正解値を受け取る。正解値の生成が完了するとS804へ処理を進める。S804で、アプリ管理フレームワーク302は、記憶装置202に保存したマニフェストファイルの記載内容からアプリケーションID(App-ID)情報、およびエクスポート情報、動的インポート情報を取得する。
そしてS805で、アプリ管理フレームワーク302はS804で取得したマニフェスト記載情報の中に動的インポートするプログラムの情報があったかを判定する。そして、情報があった場合はS806に処理を進め、記載がなかった場合はS807に処理を進める。
S806で、アプリ管理フレームワーク302は、インストールするアプリの動的インポートパッケージリストに、S804で取得した動的インポートするプログラムの情報を全て追加する。
そして、S807に処理を進める。S807で、アプリ管理フレームワーク302はS804で取得したマニフェスト記載情報の中にエクスポートするプログラムの情報があったかを判定する。
情報があった場合は、S808に処理を進め、記載がなかった場合はアプリのインストール処理を終了する。S808で、アプリ管理フレームワークはエクスポートパッケージリスト601に、S804で取得したApp-ID情報、およびエクスポートするプログラムの情報を全て追加する。エクスポートパッケージリストへの追加が終わると、インストールするアプリがプログラムのエクスポートを行ったことになる。そして、アプリ管理フレームワーク302が、アプリ管理ファイルのアプリの状態をインストール済みに更新した後、アプリインストールの処理を終了する。
図8に示すフローを行うことで、アプリをインストールするとともに、図6に示したエクスポートパッケージリスト601の更新、インストールしたアプリのパッケージリストおよび動的インポートパッケージリストが生成することができる。
●アプリの実行開始
図9は、アプリ管理フレームワーク302がアプリの実行を開始するときの処理のフローを示している。ユーザ管理者が、情報処理装置101を介して、画像形成装置100にアプリの開始指示を行うと、アプリ管理フレームワーク302がアプリの開始処理を行う。図9の処理は、画像形成装置が起動された際の、後述する図12の手順の中で実行される。図9の処理も、ハードウェア上は、例えば画像形成装置100のコア部200、特にそのプロセッサにより実行される。
開始処理を始めると、まずS901で、アプリ管理フレームワーク302は、開始するアプリの信頼性検証をセキュリティモジュール350に依頼する。信頼できないと判定された場合はS902に処理を進め、信頼できるアプリと判定された場合はS904に処理を進める。
S902で、アプリ管理フレームワーク302は、アプリの開始中断処理を行い、ユーザインターフェース部201もしくは、情報処理装置101を介して、ユーザに、実行しようとしているアプリが信頼できない旨の警告を通知する。
そしてS903で、アプリ管理フレームワーク302は、信頼できないと判定されたアプリがエクスポートしているプログラムを、エクスポートパッケージリスト601から削除する。
S904で、アプリ管理フレームワーク302は、インポート処理済みであるか判定する。すなわち、開始するアプリのインポートパッケージリストがあるか否かを判定する。インポートパッケージリストがなければ、開始するアプリのインポートパッケージリストを作成し、S905へ処理を進め、すでにあればS912へ処理を進める。
S905で、アプリ管理フレームワーク302は、記憶装置202に保存したマニフェストファイルの記載内容からインポート情報を取得する。
そしてS906で、アプリ管理フレームワーク302はS905で取得したマニフェスト記載情報の中にインポートするプログラムの情報があったかを判定する。そして、情報があった場合はS907に処理を進め、記載がなかった場合はS912に処理を進める。
S907で開始するアプリがインポートするプログラムの数だけ、インポートする各プログラムに順次着目して、S908~S910の反復処理を行う。なおこの反復は、後述のS909からS910へと分岐したなら中断してよい。
S908で、アプリ管理フレームワーク302は、インポートする着目プログラムをエクスポートしているアプリを特定する。アプリ管理フレームワーク302は、インポートパッケージリストのプログラムがエクスポートパッケージリスト601にあるかを順に検索し、検索で見つかった場合はそのApp-IDを取得することでアプリを特定する。
S909で、もしエクスポートパッケージリスト601に着目プログラムがなくアプリを特定できなかった場合は、S910へ処理を進め、着目プログラムをエクスポートするアプリを特定できた場合はS911へ処理を進める。
S910で、アプリ管理フレームワーク302は、アプリの開始中断処理を行い、ユーザインターフェース部201もしくは、情報処理装置101を介して、ユーザにインポートするプログラムがない旨の警告を通知する。
S911で、アプリ管理フレームワークはインポートパッケージリストに、インポートする着目プログラムの情報と、S908で特定したアプリの情報を追加する。追加が終わると、開始するアプリが、エクスポートを行っているアプリのインポート処理を行ったことになる。インポートするプログラムのうち未処理のものがあればその一つに着目してS908から繰り返す。なければS912に処理を進める。
S912で、開始するアプリのインポートパッケージリストにプログラムが追加されていれば、S913へ処理を進め、プログラムが無ければS919へ処理を進める。
S913で、開始するアプリがインポートパッケージリストのプログラム数だけ、インポートする各プログラムに順次着目して、S914~S916の反復処理を行う。なおこの反復は、後述のS916からS917へと分岐したなら中断してよい。
S914で、アプリ管理フレームワーク302は、インポートする着目プログラムをエクスポートしているアプリを特定する。すでに、S908でアプリを特定しているため、アプリ管理フレームワーク302はインポートパッケージリストにあるアプリ情報を参照することでアプリを特定できる。
S915で、アプリ管理フレームワーク302は、特定したアプリの信頼性検証をセキュリティモジュール350に依頼する。
S916で、検証の結果、信頼できないと判定された場合は、S917に処理を進め、信頼できるアプリと判定された場合はS914、もしくはS919に処理を進める。処理すべきアプリが残っていればS914、なければS919である。またS917に分岐した場合にはS913から始まるループを終了してよい。
S917で、アプリ管理フレームワーク302は、アプリの開始中断処理を行い、ユーザインターフェース部201もしくは、情報処理装置101を介して、ユーザに警告を通知する。
そしてS918で、アプリ管理フレームワーク302は、信頼できないと判定されたアプリがエクスポートしているプログラムを、エクスポートパッケージリスト601から削除する。そして、開始を中断したアプリのインポートパッケージリストを削除し、アプリの開始処理を終了する。
S919は、インポートするプログラムがない場合、またはインポートするプログラムの検証がすべて成功した場合に実行される。S919で、アプリ管理フレームワーク302は、開始するアプリのアイコンをユーザインターフェース201である操作画面に表示し、アプリ管理ファイルのアプリの状態を開始済みに更新した後、アプリの開始処理を完了する。
図9に示すフローの処理を行うことで、システムは、アプリを開始する場合に、そのアプリの検証を行うことができる。さらに、アプリのインポート情報を基に、S915で、開始しようとするアプリが実行する可能性のある他のアプリ(インポートしているアプリ)のリスト(インポートリスト)を作成し、そのアプリの検証も行うことができる。そして、信頼できないアプリがあった場合は、システムが適切なエラーハンドリングを行うことができる。例えば、システムがアプリB311の開始指示を受け付けた時に、アプリA310のプログラムが攻撃者によって改ざんされていた場合、S915、S916の処理により、システムはアプリBが信頼できないアプリであると判断することができる。そして、アプリBにアプリAのプログラムを実行させないために、アプリ管理フレームワーク302は、アプリAの開始処理を中断することができる。
●アプリの実行
図10、図11は、アプリ管理フレームワーク302がアプリの開始処理を完了したあとに、ユーザがアプリの実行を指示した時の処理のフローを示している。アプリはそのプログラムコードを実行するエンジンモジュール(不図示)により実行される、エンジンモジュールは、ハードウェア上は、画像形成装置100のコア部200、特にそのプロセッサにより実行される。エンジンモジュールは、本例ではJava実行環境301に含まれたJava仮想マシン(JVM)であり、それによりアプリやサポートライブラリ340が実行される、なおアプリがコア部200により実行可能なネイティブコードで記述されている場合には、コア部200が直接アプリを実行してよい。なお図10、図11ではソフトウェア上の実行主体は、Java実行環境301内のJVMやシステムクラスローダ3010であったり、アプリクラスローダであったりするが、その切り換えは例えばAPIなどを介して行われてよい。それについては以下の説明では特に言及しない。
ユーザがアプリの実行を指示すると、Java実行環境301により、図10の処理が開始される。まずそのアプリのアプリクラスローダが、プログラムをメモリ内にロードしたか否かを判定する(S1001)。もし、実行したプログラムがまだメモリ内にロードされていないのであれば、S1001からS1002に処理を進め、すでにロード済みであればS1003へ処理を進める。S1002で、ロードしようとするアプリのアプリクラスローダがプログラムのロードを行う。この処理の流れは図11に示す。なおこのとき、ロード対象のプログラムを引数として指定し、S1002を実行してもよい。
クラスロードが完了したかをS1003で判定し、成功したならS1004へ処理を進め、クラスロードに失敗するとS1005へ処理を進める。S1004では、エンジンモジュールが、メモリ内にロードされたプログラムを実行する。なお、S1001~S1004の処理は、アプリ311~312に限らず、システムのプログラムでも同様の処理を行っても良い。例えば、アプリから呼び出されて実行されたシステムのプログラムが、さらに他のシステムのプログラムを実行したケースが該当する。S1005で、アプリの処理がまだ終了していないのであれば、S1001へ進み、処理が終了したのであれば、図10のフローを終了する。アプリの処理がまだ終了していないとは例えば、S1004でアプリを1ステップごとに実行した場合、各ステップの完了ごとに行う判定である。S1004で1ステップごとに実行していない場合には、未ロードのプログラムを実行しようとしたときに、いったんS1005の判定を行う。S1002では、図11で説明するように、システムプログラム、実行するアプリの未ロードのプログラム、インポートするプログラム、動的インポートするプログラムといったプログラムの種類に応じて、プログラムをロードする。それをループにより繰り返し行うことで、ロードすべきプログラムを、その都度動的にロードする。
図11は、図10のS1002でアプリクラスローダが未ロードのプログラムをロードする処理のフローを示す。S1101で、アプリクラスローダはまず、未ロードのプログラムをロードするようにシステムクラスローダ3010へ依頼する。もし未ロードのプログラムにシステムプログラムが含まれている場合は、システムクラスローダ3010が該当するシステムプログラムをロードする。
S1102で、システムクラスローダ3010がプログラムを成功裏にロードできたか判定する。できなかった場合は、S1103へ処理を進める。できた場合には処理を終了してS1003へ戻る。またシステムプログラムをロード済みの場合には、ロードできなかったと判定してS1103へ分岐する。
S1103では、実行対象のアプリのアプリクラスローダは、アプリクラスローダ自身が対応するアプリのインポートパッケージリストに、未ロードのプログラムとそれをエクスポートするアプリの情報があるかを判定する。S1103で情報があると判定した場合、S1104へ処理を進め、情報がないと判定した場合、S1106へ処理を進める。S1104で、アプリクラスローダは、インポートパッケージリストにあるアプリ(すなわちエクスポートを行っているアプリでもある)に対応した別のアプリクラスローダに、プログラムのロードを依頼する。
S1105で、エクスポートを行っているアプリクラスローダが、エクスポートされているアプリのロードに成功したか判定する。成功したなら、プログラムのロード処理を終了する。ロードに成功しなかった場合は、S1106へ処理を進める。インポート対象のプログラムを既にロード済みの場合にはロードできなかったと判定してS1106へ分岐する。
S1106で、アプリクラスローダは未ロードのプログラムを、アプリクラスローダ自身に対応するアプリが持つプログラムからロードしようとする。
S1107で、プログラムのロードが成功したか判定する。もしアプリが未ロードのプログラムを持っていた場合は、プログラムのロードに成功し、プログラムのロード処理を終了する。プログラムのロードに失敗した場合、S1108へ処理を進める。アプリのプログラムをロード済みの場合にもロードできなかったと判定してS1108へ分岐する。
S1108で、アプリクラスローダは、アプリクラスローダ自身が対応するアプリの動的インポートパッケージリストに、未ロードのプログラムの情報があるかを判定する。情報がある場合S1109へ処理を進め、ない場合はS1110へ処理を進める。
S1109で、アプリクラスローダは未ロードの動的インポート対象のプログラムがエクスポートパッケージリスト601にあるかを判定する。該当するプログラムがある場合S1111へ処理を進め、なかった場合はS1110へ処理を進める。
S1110で、未ロードのプログラムをロードできなかった際のエラー出力を行い、未ロードのプログラムを実行しようとしたアプリもしくはシステムに、エラーを返す。S1110への分岐するのは、S1106でロードが失敗した場合、S1108でインポート対象のプログラムがなかった場合、S1109で、インポート対象のプログラムがえくsぽーとされていなかった場合の3通りある。このうちS1108からの分岐はエラーとしなくともよいので、正常終了してもよい。また他の場合にもそれぞれの場合に応じたエラーの理由を出力してもよい。
S1111で、アプリクラスローダは、エクスポートパッケージリスト601から、未ロードのプログラムをエクスポートしているアプリを特定する。
そしてS1112で、S1111で特定したエクスポートを行っているアプリの信頼性検証をセキュリティモジュール350に依頼する。
S1113で、エクスポートを行っているアプリの検証が成功し、信頼できるアプリであった場合はS1116へ処理を進め、懸賞が失敗して信頼できないアプリと判定した場合はS1114へ処理を進める。
S1114で、アプリクラスローダは、未ロードのプログラムのロード処理を中断し、ユーザインターフェース部201もしくは、情報処理装置101を介して、ユーザに、動的インポート対象のプログラムが改ざんされているか、または破損していることの警告を通知する。
そしてS1115で、アプリクラスローダは、信頼できないと判定されたアプリがエクスポートしているプログラムを、エクスポートパッケージリスト601から削除する。そして、アプリクラスローダは未ロードのプログラムをロードしないまま、図11の処理を終了する。
S1113での検証が成功した場合、S1116で、アプリクラスローダは、アプリクラスローダ自身が対応するアプリの動的インポートパッケージリストから、ロードを行おうとしているプログラムの情報を削除する。
そしてアプリクラスローダは、S1117で、削除したプログラムの情報をアプリクラスローダ自身が対応するアプリのインポートパッケージリストへ追加する。追加が終わると、エクスポートしているアプリのプログラムを動的にインポートしたことになる。
S1118で、アプリクラスローダは、S1111で特定したアプリに対応する別のアプリクラスローダに、プログラムのロードを依頼する。
S1119で、プログラムのロードが成功したか判定する。エクスポートを行っているアプリが持つプログラムのロードに成功した場合には、プログラムのロード処理を終了する。ロードに成功しなかった場合は、S1120へ処理を進める。
S1120で、未ロードのプログラムをロードできなかった際のエラー出力を行い、未ロードのプログラムを実行しようとしたアプリもしくはシステムに、エラーを返す。
図10、図11に示した処理のフローを行うことで、アプリクラスローダが未ロードの動的インポートされているプログラムをロードして、アプリもしくはシステムがプログラムを実行できるようになる。例えば、アプリA310のプログラムが攻撃者によって攻撃されていた場合を考える。その場合、アプリC312が、動的インポートしているアプリA310のプログラムを初めて実行した時に、S1112、S1113の処理で、システムはアプリA310が信頼できないアプリであると判断する。そして、アプリC312にアプリA310のプログラムを実行させないために、アプリA310のプログラムのロードを中断することができる。
ここで、図10では、S1005からS1001へと戻るループにより、すべてのロード対象のプログラムそれぞれに対してS1002を繰り返し実行することでプログラムのロードを行う。これにより、ループの繰り返しに従って、S1002すなわち図11では、アプリクラスローダが、システムのプログラム、インポートしているプログラム、プログラムを実行するアプリ自身のプログラム、動的インポートするプログラムの順にロード処理を行っている。この順序は図に示した以外の別の順序でも良い。例えば最優先でアプリ自身のプログラムからロード処理を行い、失敗した場合はシステムのプログラム、インポートしているプログラム、動的インポートするプログラムの順でも良い。
また、図10、図11の例では、アプリの開始時に、開始するアプリ、開始するアプリがインポートするプログラムをエクスポートするアプリ、の信頼性検証を行っているが、図11で各クラスローダがロードを行うタイミングで、信頼性検証を実施しても良い。本実施例の構成では、システムのプログラムはシステムクラスローダ3010が、各アプリのプログラムは各アプリクラスローダがロードしている。このような構成でも、図10、図11で示す処理のフローを行えば、ロードのためのモジュールが異なっていても、他のクラスローダがロードしようとするプログラムの信頼性検証を行うことができる。
●画像形成装置によるアプリ起動手順
図12は、画像形成装置100の起動を行う際の、アプリ管理フレームワーク302の処理のフローを示している。ユーザが画像形成装置100の電源を入れると、java実行環境301がアプリ管理フレームワーク302の起動処理を呼び出し、アプリ管理フレームワーク302がS1201の処理を行う。
S1201で、アプリ管理フレームワーク302は、画像形成装置100にインストールされているアプリを調べる。アプリ管理フレームワーク302は、記憶装置202にあるアプリがインストールされているアプリと判断し、その判断結果を基にどのアプリがインストールされているかの情報を取得する。なおインストールされているアプリが、オペレーティングシステムが資源を管理するためのデータベース(たとえばデポジトリ)に登録されているのであれば、それを参照することで知ることができる。
S1202で、アプリ管理フレームワーク302は、画像形成装置100にインストールされているアプリの数だけ、インストールされたアプリに関する、S1203~S1208の反復処理を行う。
S1203で、アプリ管理フレームワーク302は、インストールされているアプリに対応するアプリクラスローダを生成する。同時に、エクスポートパッケージリスト601、およびインストールされた各アプリに対応するパッケージリスト(図6(b)参照)も生成する。アプリインストール時とは異なり、信頼性検証に必要な正解値の生成はここでは行わない。アプリをインストールしたときのアプリの状態を正解値として保存しておき、以降では、その正解値を利用し続ける。
S1203の後、S1204で、アプリ管理フレームワーク302は、記憶装置202にある各アプリのマニフェストファイルの記載内容からApp-ID情報、およびエクスポート、動的インポート情報を取得する。さらに、アプリ管理フレームワーク302は、各アプリのアプリ管理ファイルからアプリの状態を取得する。
そしてS1205で、アプリ管理フレームワーク302はS1204で取得したマニフェスト記載情報の中に動的インポートするプログラムの情報があったかを判定する。そして、情報があった場合はS1206に処理を進め、記載がなかった場合はS1207に処理を進める。
S1206で、アプリ管理フレームワーク302は、インストールするアプリの動的インポートパッケージリストに、S1204で取得した動的インポートするプログラムの情報を全て追加する。そして、S1207に処理を進める。S1207で、アプリ管理フレームワーク302はS1204で取得したマニフェスト記載情報の中にエクスポートするプログラムの情報があったかを判定する。情報があった場合は、S1208に処理を進め、記載がなかった場合はS1209へ処理を進める。
S1208で、アプリ管理フレームワークはエクスポートパッケージリスト601に、S1204で取得したApp-ID情報、およびエクスポートするプログラムの情報を全て追加する。エクスポートパッケージリストへの追加が終わると、インストールするアプリがプログラムのエクスポートを行ったことになる。
そして、S1209へ処理を進める。S1209で、アプリ管理フレームワーク302は、S1204で取得したアプリの状態のうち開始済みアプリの数だけS1210の反復処理を行う。S1210で、アプリ管理フレームワークは図9に示す、アプリの開始処理を行う。インポートパッケージリストについては、図9の手順の中で、エクスポートされるプログラムと照合したうえで作成される。なお、開始するアプリは、ユーザインターフェースから利用者に指定されたものでよい。
図12の処理のフローを行うことで、画像形成装置100の電源を切った際に消失するシステムの情報があっても、再び電源が入った際に、画像形成装置は、電源を切る前と同様のシステム、およびアプリの動作をすることができる。例えば、電源を切る前に各アプリクラスローダはメモリ上で生成されているため、電源を再び入れ直した後はメモリの情報がクリアされ、全てのアプリクラスローダを消失してしまう。そこで、S1203の処理を行うことで、再度各アプリに対応するアプリクラスローダを生成することができる。同様に、電源を切ることでエクスポートパッケージリスト610、各アプリのパッケージリスト、動的インポートパッケージリストが消失しても、S1203,S1206,S1208の処理を行うことで再度リストを生成することができる。なお、電源を切ることでインポートパッケージリストが消失してもS1210の、S905で再度リストを生成することができる。これらの処理により、一度画像形成装置100の電源を切り、再び電源を入れても、システムが各アプリクラスローダや、各リストを再度生成できるため、システムやアプリは電源を切る前と同様の動作をすることができる。
●実施形態の効果
以上のように、本発明の実施例では、アプリの開始時に、実行対象のアプリおよびそのアプリがインポートするプログラムをエクスポートしているアプリの信頼性検証を行う。さらに、動的インポートを行う際に、アプリの実行中に動的にインポートするプログラムをエクスポートしているアプリの信頼性検証を行う。これにより、プログラムをエクスポートする信頼できない第一のアプリ、第一のアプリプログラムをインポートもしくは動的インポートする第二のアプリがインストールされた構成でも、セキュリティ上のリスクが伴うことがなくなる、例えば、第二のアプリが第一のアプリのプログラムを実行するような構成であっても、第二のアプリの開始時にシステムが第一のアプリの信頼性検証することができる。もしくは、第二のアプリが第一のアプリのプログラムを動的インポートするタイミングで、システムが第一のアプリの信頼性検証することができる。信頼性検証を行った結果、信頼できない第一のアプリのプログラムを実行しないように、例えば第二のアプリの開始処理を失敗させて、エラーハンドリングを行うことができる。
[その他の実施例]
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
さらに、プログラムによる処理をハードウェア回路によって実現することもできる。一般にプログラムによる処理はハードウェア回路としても実装することが可能であり、その回路としては、たとえばFPGA等のプログラム可能な回路を用いることもできる。さらにプログラムにより実現されている処理の一部をハードウェア回路で代替することも可能である。
100 画像形成装置、101 情報処理装置、301 Java実行環境、302 アプリ管理フレームワーク

Claims (9)

  1. 複数のアプリケーションが動作する情報処理装置であって、
    アプリケーションの信頼性を検証する検証手段と、
    前記アプリケーションを制御する制御手段とを有し、
    前記制御手段は、ユーザの指示に応じて実行される第1のアプリケーションの実行中に、前記第1のアプリケーションが動的にインポートする第2のアプリケーションを、該第2のアプリケーションのロードの前に前記検証手段により検証させ
    アプリケーションがインストールされた際と、前記情報処理装置の起動の際とに、前記アプリケーションが他のアプリケーションを動的にインポートするか判定し、動的にインポートする場合には動的にインポートされるアプリケーションの第1のリストを生成し、
    前記制御手段は、前記検証手段に、前記第1のリストに基づいて前記第2のアプリケーションを検証させ
    ことを特徴とする情報処理装置。
  2. 請求項1に記載の情報処理装置であって、
    前記制御手段はさらに、前記第1のアプリケーションを実行する前に、前記第1のアプリケーションと、前記第1のアプリケーションが静的にインポートする第3のアプリケーションとを前記検証手段に検証させる
    ことを特徴とする情報処理装置。
  3. 請求項1または2に記載の情報処理装置であって、
    前記検証手段は、前記アプリケーションが、インストールされたときから変わっていないことを検証する
    ことを特徴とする情報処理装置。
  4. 請求項1乃至3のいずれか一項に記載の情報処理装置であって、
    前記アプリケーションがインストールされた際と、前記情報処理装置の起動の際とに、他のアプリケーションに対してエクスポートされるアプリケーションを特定し、エクスポートされる場合にはエクスポートされるアプリケーションの第2のリストを生成し、
    前記制御手段は、前記第2のアプリケーションが、前記第1のリストと前記第2のリストの両方に含まれている場合に、前記検証手段に前記第2のアプリケーションを検証させる
    ことを特徴とする情報処理装置。
  5. 請求項1乃至のいずれか一項に記載の情報処理装置であって、
    前記制御手段は、前記検証手段による前記第2のアプリケーションの検証が失敗した場合には、検証が失敗したことを示す情報を出力して、前記第1のアプリケーションの実行を停止する
    ことを特徴とする情報処理装置。
  6. 請求項に記載の情報処理装置であって、
    ユーザインターフェース手段をさらに有し、
    前記制御手段は、前記第2のアプリケーションの検証が失敗したことを示す情報を、前記ユーザインターフェース手段により表示する
    ことを特徴とする情報処理装置。
  7. 請求項1乃至のいずれか一項に記載の情報処理装置であって、
    画像をスキャンするスキャン手段と、
    画像を印刷する印刷手段とをさらに有し、
    前記アプリケーションは、前記スキャン手段または前記印刷手段いずれかの機能を利用する
    ことを特徴とする情報処理装置。
  8. 請求項1乃至のいずれか一項に記載の情報処理装置としてコンピュータを機能させるためのプログラム。
  9. 複数のアプリケーションが動作する情報処理装置の制御方法であって、
    前記情報処理装置は、アプリケーションの信頼性を検証する検証手段と、前記アプリケーションを制御する制御手段とを有し、
    前記制御手段が、ユーザの指示に応じて実行される第1のアプリケーションの実行中に、前記第1のアプリケーションが動的にインポートする第2のアプリケーションを、該第2のアプリケーションのロードの前に前記検証手段に検証させ
    アプリケーションがインストールされた際と、前記情報処理装置の起動の際とに、前記アプリケーションが他のアプリケーションを動的にインポートするか判定し、動的にインポートする場合には動的にインポートされるアプリケーションの第1のリストを生成し、
    前記制御手段が、前記検証手段に、前記第1のリストに基づいて前記第2のアプリケーションを検証させ
    ことを特徴とする情報処理装置の制御方法。
JP2019061358A 2019-03-27 2019-03-27 情報処理装置、及び情報処理装置の制御方法、プログラム Active JP7262269B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2019061358A JP7262269B2 (ja) 2019-03-27 2019-03-27 情報処理装置、及び情報処理装置の制御方法、プログラム
US16/822,410 US11586723B2 (en) 2019-03-27 2020-03-18 Information processing apparatus, control method for information processing apparatus, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019061358A JP7262269B2 (ja) 2019-03-27 2019-03-27 情報処理装置、及び情報処理装置の制御方法、プログラム

Publications (3)

Publication Number Publication Date
JP2020160946A JP2020160946A (ja) 2020-10-01
JP2020160946A5 JP2020160946A5 (ja) 2022-04-06
JP7262269B2 true JP7262269B2 (ja) 2023-04-21

Family

ID=72607984

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019061358A Active JP7262269B2 (ja) 2019-03-27 2019-03-27 情報処理装置、及び情報処理装置の制御方法、プログラム

Country Status (2)

Country Link
US (1) US11586723B2 (ja)
JP (1) JP7262269B2 (ja)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004505343A (ja) 2000-07-25 2004-02-19 マクロビジョン・コーポレーション 動的に接続可能な実行可能イメージの真正性検証システム及び方法
JP2007206965A (ja) 2006-02-01 2007-08-16 Canon Inc 情報処理装置及び当該装置におけるオブジェクト指向プログラムの実行方法とそのプログラム
JP2012185535A (ja) 2011-03-03 2012-09-27 Mitsubishi Electric Corp コンピュータシステム
JP2015084006A (ja) 2012-02-13 2015-04-30 三菱電機株式会社 動的リンクライブラリ保護方法、動的リンクライブラリ認証方法、動的リンクライブラリ保護装置、動的リンクライブラリ認証装置、プログラム管理システム、プログラムおよび動的リンクライブラリ保護方法、プログラムおよび動的リンクライブラリ認証方法

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956507A (en) * 1996-05-14 1999-09-21 Shearer, Jr.; Bennie L. Dynamic alteration of operating system kernel resource tables
US5841870A (en) * 1996-11-12 1998-11-24 Cheyenne Property Trust Dynamic classes of service for an international cryptography framework
US20060059352A1 (en) * 2000-05-09 2006-03-16 Microsoft Corporation Restricted software and hardware usage on a computer
GB0212318D0 (en) * 2002-05-28 2002-07-10 Symbian Ltd Tamper evident removable media storing executable code
US7568102B2 (en) * 2004-07-15 2009-07-28 Sony Corporation System and method for authorizing the use of stored information in an operating system
US8156488B2 (en) * 2004-10-20 2012-04-10 Nokia Corporation Terminal, method and computer program product for validating a software application
US7437767B2 (en) * 2004-11-04 2008-10-14 International Business Machines Corporation Method for enabling a trusted dialog for collection of sensitive data
US8234638B2 (en) * 2004-12-28 2012-07-31 Hercules Software, Llc Creating a relatively unique environment for computing platforms
US7636780B2 (en) * 2005-07-28 2009-12-22 Advanced Micro Devices, Inc. Verified computing environment for personal internet communicator
US8051012B2 (en) * 2008-06-09 2011-11-01 Hewlett-Packard Development Company, L.P. System and method for discounted printing
US8312249B1 (en) * 2008-10-10 2012-11-13 Apple Inc. Dynamic trampoline and structured code generation in a signed code environment
KR101572799B1 (ko) * 2011-09-30 2015-12-01 인텔 코포레이션 프린터와 프린트 클라이언트 디바이스 사이의 보안 프린팅
JP2014109821A (ja) 2012-11-30 2014-06-12 Canon Inc 情報処理装置、情報処理方法及びプログラム
US20160004859A1 (en) * 2013-03-26 2016-01-07 Irdeto Canada Corporation Method and system for platform and user application security on a device

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004505343A (ja) 2000-07-25 2004-02-19 マクロビジョン・コーポレーション 動的に接続可能な実行可能イメージの真正性検証システム及び方法
JP2007206965A (ja) 2006-02-01 2007-08-16 Canon Inc 情報処理装置及び当該装置におけるオブジェクト指向プログラムの実行方法とそのプログラム
JP2012185535A (ja) 2011-03-03 2012-09-27 Mitsubishi Electric Corp コンピュータシステム
JP2015084006A (ja) 2012-02-13 2015-04-30 三菱電機株式会社 動的リンクライブラリ保護方法、動的リンクライブラリ認証方法、動的リンクライブラリ保護装置、動的リンクライブラリ認証装置、プログラム管理システム、プログラムおよび動的リンクライブラリ保護方法、プログラムおよび動的リンクライブラリ認証方法

Also Published As

Publication number Publication date
JP2020160946A (ja) 2020-10-01
US11586723B2 (en) 2023-02-21
US20200311253A1 (en) 2020-10-01

Similar Documents

Publication Publication Date Title
JP4796966B2 (ja) ソフトウェアアプリケーションをプログレッシブインストールするためのシステムおよび方法およびapi
KR100751159B1 (ko) 소프트웨어 인증 시스템, 소프트웨어 인증 방법 및소프트웨어 인증 프로그램을 기록한 컴퓨터 판독 가능한기록 매체
US8418169B2 (en) Management method for managing software module and information processor
US9274776B2 (en) Product, method, and apparatus for installing a second program based on a call from a first program
US11176633B2 (en) Image processing apparatus, method for controlling the same, and non-transitory computer-readable storage medium
EP1771785A2 (en) System and method for extraction and creation of application meta-information within a software application repository
US8290893B2 (en) Failure diagnosis system, a failure diagnosis device, an information update device, and a computer-readable medium
US11140291B2 (en) Information processing apparatus, control method thereof, and storage medium
CN109660688B (zh) 信息处理装置及其控制方法
JP7179482B2 (ja) 情報処理装置、制御方法、およびそのプログラム
JP7262269B2 (ja) 情報処理装置、及び情報処理装置の制御方法、プログラム
US9727381B2 (en) Image forming apparatus and resource management method
US20190102121A1 (en) Image forming apparatus and control method therefor
JP2017126293A (ja) 情報処理装置及びリソース管理方法
CN112860481A (zh) 一种本地Docker镜像信息采集系统及其采集方法
JP5036492B2 (ja) 情報処理装置、情報処理方法、情報処理プログラム
JP2023154573A (ja) 情報処理装置、セキュリティ管理方法およびプログラム
JP2010218469A (ja) 情報処理装置、情報処理方法、プログラムおよび記録媒体
JP7030426B2 (ja) 画像形成装置及びその制御方法、並びにプログラム
JP2021189487A (ja) 管理装置およびその制御方法
JP2023007730A (ja) 情報処理システム、情報処理方法、プログラム
JP5847492B2 (ja) 画像形成装置、システム、テスト方法及びプログラム
CN113900625A (zh) 云计算资源管理平台的生成方法、系统、管理方法及设备
JP2020038547A (ja) 情報処理装置およびその制御方法、並びにプログラム
JP2001229157A (ja) 文書ファイル処理装置及び記録媒体

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20210103

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210113

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220324

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220324

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20221226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230105

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230228

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230313

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230411

R151 Written notification of patent or utility model registration

Ref document number: 7262269

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151