(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024023911
(43)【公開日】2024-02-21
(54)【発明の名称】実行コード提供方法およびソフトウェア開発システム
(51)【国際特許分類】
G06F 21/56 20130101AFI20240214BHJP
【FI】
G06F21/56 330
【審査請求】有
【請求項の数】1
【出願形態】OL
(21)【出願番号】P 2023219029
(22)【出願日】2023-12-26
(62)【分割の表示】P 2019119106の分割
【原出願日】2019-06-26
(71)【出願人】
【識別番号】514318600
【氏名又は名称】コネクトフリー株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】帝都 久利寿
(57)【要約】
【課題】アプリケーションプログラムの安全性を担保できるソリューションを提供する。
【解決手段】実行コード提供方法は、ユーザ操作に従ってソースコードを作成するステップと、ソースコードから中間表現を生成するステップと、中間表現が所定の規定あるいは規約を満たしているか否かを検証するステップと、中間表現が所定の規定あるいは規約を満たしている場合に、中間表現から生成される実行コードの実行を実現するステップとを含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ユーザ操作に従ってソースコードを作成するステップと、
前記ソースコードから中間表現を生成するステップと、
前記中間表現が所定の規定あるいは規約を満たしているか否かを検証するステップと、
前記中間表現が前記所定の規定あるいは規約を満たしている場合に、前記中間表現から生成される実行コードの実行を実現するステップとを備える、実行コード提供方法。
【請求項2】
前記実行コードの実行を実現するステップは、前記中間表現が前記所定の規定あるいは規約を満たしていることを条件として、前記中間表現から前記実行コードを生成するステップを含む、請求項1に記載の実行コード提供方法。
【請求項3】
前記実行コードの実行を実現するステップは、前記中間表現が前記所定の規定あるいは規約を満たしていることを条件として、前記中間表現から生成された前記実行コードの実行を許可するステップを含む、請求項1に記載の実行コード提供方法。
【請求項4】
前記検証するステップは、前記中間表現が前記所定の規定あるいは規約を満たしている場合に、前記中間表現に関連付けられる証明書を発行するステップを含み、
前記中間表現から生成された前記実行コードの実行を許可するステップは、前記証明書に基づいて実行の可否を判断するステップを含む、請求項3に記載の実行コード提供方法。
【請求項5】
前記実行コードが実行されるコントローラの起動時に、当該実行コードを生成した中間表現に関連付けて発行された証明書に基づいて、当該実行コードの正当性を評価するステップをさらに備える、請求項3または4に記載の実行コード提供方法。
【請求項6】
前記検証するステップは、前記中間表現が前記所定の規定あるいは規約を満たしていない場合に、前記所定の規定あるいは規約を満たしていない内容をユーザに通知するステップを含む、請求項1~5のいずれか1項に記載の実行コード提供方法。
【請求項7】
ソフトウェア開発システムであって、
ソースコードの作成を支援するソフトウェア開発装置と、
前記ソフトウェア開発装置からアクセス可能な検証サーバとを備え、
前記ソフトウェア開発装置は、前記ソースコードから中間表現を生成する手段を備え、
前記検証サーバは、前記中間表現が所定の規定あるいは規約を満たしているか否かを検証する手段を備え、
前記中間表現が前記所定の規定あるいは規約を満たしている場合に、前記中間表現から生成される実行コードの実行が実現される、ソフトウェア開発システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、実行コード提供方法およびソフトウェア開発システムに関する。
【背景技術】
【0002】
近年の情報通信技術(Information and Communication Technology:ICT)の進歩は目覚ましく、インターネットなどのネットワークに接続されるデバイスは、従来のパーソナルコンピュータやスマートフォンといった情報処理装置に限らず、様々なモノ(things)に広がっている。このような技術トレンドは、「IoT(Internet of Things;モノのインターネット)」と称され、様々な技術およびサービスが提案および実用化されつつある。将来的には、地球上の数十億人と数百億または数兆のデバイスとが同時につながる世界が想定されている。このようなネットワーク化された世界を実現するためには、よりシンプル、より安全、より自由につながることができるソリューションを提供する必要がある。
【0003】
IoTで利用されるデバイス(「エッジデバイス」とも称される。)のインテリジェント化に伴って、エッジデバイスでは様々な種類のアプリケーションプログラムが実行可能になる。一方で、エッジデバイスに対する安全性は、リソース制約などによって、サーバやパーソナルコンピュータなどに対する安全性と同程度まで高めることは容易ではない。そのため、エッジデバイスに組み入れられるアプリケーションプログラムに対する検証などが重要になってくる。
【0004】
例えば、特開2014-174577号公報(特許文献1)は、Webアプリケーションの脆弱性をソースコードレベルで検証する静的解析ツールの改良を開示する。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
エッジデバイスなどで利用されるアプリケーションプログラムは、ソースコードの形態ではなく、実行コード生成前の中間表現(intermediate representation)として流通す
ることも多い。このような中間表現を採用することで、ソースコードに含まれるノウハウなどを秘匿化するとともに、データ量を低減できるという利点がある。
【0007】
上述の特許文献1に開示されるように、ソースコードを解析してセキュリティホールや脆弱性などを評価することは一般的であるが、ソースコード以外の形式でセキュリティホールや脆弱性などを評価することは容易ではない。
【0008】
本開示の典型的な目的は、エッジデバイスなどに好適な、アプリケーションプログラムの安全性を担保できるソリューションを提供することである。
【課題を解決するための手段】
【0009】
本開示のある形態に従う実行コード提供方法は、ユーザ操作に従ってソースコードを作成するステップと、ソースコードから中間表現を生成するステップと、中間表現が所定の規定あるいは規約を満たしているか否かを検証するステップと、中間表現が所定の規定あるいは規約を満たしている場合に、中間表現から生成される実行コードの実行を実現する
ステップとを含む。
【0010】
実行コードの実行を実現するステップは、中間表現が所定の規定あるいは規約を満たしていることを条件として、中間表現から実行コードを生成するステップを含んでいてもよい。
【0011】
実行コードの実行を実現するステップは、中間表現が所定の規定あるいは規約を満たしていることを条件として、中間表現から生成された実行コードの実行を許可するステップを含んでいてもよい。
【0012】
実行コード提供方法は、実行コードが実行されるコントローラの起動時に、当該実行コードを生成した中間表現に関連付けて発行された証明書に基づいて、当該実行コードの正当性を評価するステップをさらに含んでいてもよい。
【0013】
検証するステップは、中間表現が所定の規定あるいは規約を満たしている場合に、中間表現に関連付けられる証明書を発行するステップを含み、中間表現から生成された実行コードの実行を許可するステップは、証明書に基づいて実行の可否を判断するステップを含んでいてもよい。
【0014】
検証するステップは、中間表現が所定の規定あるいは規約を満たしていない場合に、所定の規定あるいは規約を満たしていない内容をユーザに通知するステップを含んでいてもよい。
【0015】
本開示の別の形態に従うソフトウェア開発システムは、ソースコードの作成を支援するソフトウェア開発装置と、ソフトウェア開発装置からアクセス可能な検証サーバとを含む。ソフトウェア開発装置は、ソースコードから中間表現を生成する手段を含む。検証サーバは、中間表現が所定の規定あるいは規約を満たしているか否かを検証する手段を含む。中間表現が所定の規定あるいは規約を満たしている場合に、中間表現から生成される実行コードの実行が実現される。
【発明の効果】
【0016】
本開示によれば、アプリケーションプログラムの安全性を担保できるソリューションを提供できる。
【図面の簡単な説明】
【0017】
【
図1】本実施の形態に従うソフトウェア開発システムにおける処理の概要を説明するための図である。
【
図2】本実施の形態に従うソフトウェア開発システムにおけるソースコードから実行コードを生成する手順の概要を示す図である。
【
図3】本実施の形態に従うソフトウェア開発システムにおけるソースコードから実行コードを生成する手順の概要を示す図である。
【
図4】本実施の形態に従うソフトウェア開発装置のハードウェア構成例を示す模式図である。
【
図5】本実施の形態に従う検証サーバのハードウェア構成例を示す模式図である。
【
図6】本実施の形態に従うソフトウェア開発システムにおける処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0018】
本開示に係る実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【0019】
<A.概要>
まず、本実施の形態に従うソフトウェア開発システム1における処理の概要を説明する。本実施の形態においては、ソースコード10から生成される中間表現20自体を検証し、その検証結果が適切であることを条件に、対応する実行コード30の生成、あるいは、生成された実行コード30の実行を許容する。中間表現20に対する検証において、中間表現20が所定の規定あるいは規約を満たす場合に適切と判断される。
【0020】
本明細書において、「中間表現」は、コンパイラ基盤において、任意のプログラミング言語(通常は、高級言語)で記載されたソースコードを特定の仮想マシンをターゲットとして生成される、当該仮想マシン用のマシン語を包含する。但し、「中間表現」は、必ずしもバイナリ形式である必要はなく、アセンブラ言語のような自然言語に類似した形式で表現されてもよい。さらに、「中間表現」は、特定の仮想マシンをターゲットとして生成されるものであれば、どのような表現形式を採用してもよい。
【0021】
通常、「中間表現」は、実行コード30が実行されるプラットフォームおよびアーキテクチャとは独立して生成される。このようなソースコード10から中間表現20の生成には、静的コンパイラが用いられてもよい。さらに、「中間表現」は、特定のプラットフォームおよびアーキテクチャに向けられた実行コード30としてコンパイルされてもよい。「中間表現」および「実行コード」は、セットとして生成される。「中間表現」は、元になったソースコードに比較してデータ量が削減されるとともに、記述される処理自体も効率化できる。
【0022】
ソースコード10から中間表現20の生成は、基本的には一方向の変換であり、中間表現20からソースコード10を完全に復元することは難しい。中間表現20と実行コード30との間は、双方向に変換することも可能である。
【0023】
図1は、本実施の形態に従うソフトウェア開発システム1における処理の概要を説明するための図である。
図1(A)には、ソースコード10から生成される中間表現20に対する検証が成功したことを、実行コード30の生成条件とする例を示す。
図1(B)には、ソースコード10から生成される中間表現20に対する検証が成功したことを、中間表現20から生成された実行コード30の実行条件とする例を示す。
【0024】
図1(A)および(B)に示すように、ソースコード10から生成された中間表現20が任意の主体により検証される。
図1(A)および(B)に示す例では、検証サーバ200が中間表現20を検証する例を示すが、これに限られず、任意の主体によって検証されてもよい。
【0025】
図1(A)を参照して、検証サーバ200による検証結果が適切なものである場合には、検証サーバ200は、中間表現20に対して認証を与える。中間表現20に対する認証が生成条件として、中間表現20から実行コード30が生成される。このように、中間表現20に対する検証を実行コード30の生成条件に含めるようにしてもよい。このような生成条件を採用することで、生成される実行コード30についての安全性を高めることができる。
【0026】
図1(B)を参照して、検証サーバ200による検証結果が適切なものである場合には、検証サーバ200は、中間表現20に対する認証を含む証明書40を発行する。並行して、中間表現20から実行コード30が生成される。生成された実行コード30の実行には、対応する証明書40の存在を条件としてもよい。このように、中間表現20に対する証明書40の存在を実行コード30の実行条件に含めるようにしてもよい。このような実
行条件を採用することで、安全性が損なわれた状態で実行コード30が実行される可能性を低減できる。
【0027】
以上のように、本実施の形態における一連のプロセスにおいては、中間表現20が所定の規定あるいは規約を満たす場合(検証結果が適切である場合)に、その中間表現20に対応する実行コード30の生成または実行を許可するとの認証が与えられる。逆に、中間表現20が所定の規定あるいは規約を満たさない場合(検証結果が不適切である場合)には、認証が与えられず、その中間表現20に対応する実行コード30の生成または実行ができない。すなわち、中間表現20が所定の規定あるいは規約を満たしている場合に、中間表現20から生成される実行コード30の実行が実現される。
【0028】
実行コード30の実行を実現する処理としては、
図1(A)に示すように、中間表現20が所定の規定あるいは規約を満たしていることを条件として、中間表現20から実行コード30を生成する処理を採用してもよい。あるいは、実行コード30の実行を実現する処理としては、
図1(B)に示すように、中間表現20が所定の規定あるいは規約を満たしていることを条件として、中間表現20から生成された実行コード30の実行を許可する処理を採用してもよい。このとき、中間表現20から生成された実行コード30の実行を許可するか否かは、中間表現20に関連付けられた証明書40に基づいて判断してもよい。なお、実行の可否は、実行コード30の実行環境(プロセッサあるいはプロセッサを含むマイクロコンピュータなど)で判断してもよい。
【0029】
このように、本実施の形態においては、ソースコード10ではなく中間表現20に対する検証を行うことで、ソースコード10に含まれるノウハウなどを秘匿化した状態で、アプリケーションプログラムに含まれる安全性についてのリスクをより効率的に発見できる。また、中間表現20に対する検証を行うことで、ソースコード10の記述に用いられたプログラミング言語の種類に応じた複数の検証ルールセットなどを用意する必要がなく、効率的な検証を実現できる。
【0030】
次に、本実施の形態に従うソフトウェア開発システム1を用いた実行コード30の生成手順の一例について説明する。
【0031】
図2および
図3は、本実施の形態に従うソフトウェア開発システム1におけるソースコード10から実行コード30を生成する手順の概要を示す図である。
【0032】
図2を参照して、ソフトウェア開発システム1は、1または複数のソフトウェア開発装置100と、ソフトウェア開発装置100からインターネット2などを介してアクセス可能な検証サーバ200とを含む。
【0033】
ソフトウェア開発装置100は、エッジデバイス4に含まれるコントローラ300で実行されるアプリケーションプログラムの作成を支援する。但し、本発明の技術的範囲は、エッジデバイス4で実行されるアプリケーションプログラムの作成に限定されるものではなく、任意のコンピューティングデバイスで実行されるアプリケーションプログラムの作成に適用可能である。
【0034】
ソフトウェア開発装置100には、統合開発環境(IDE:Integrated Development Environment)が提供されており、ユーザは統合開発環境上で任意のアプリケーションプログラムを作成できる。
【0035】
エッジデバイス4に含まれるコントローラ300は、コンピューティングデバイスの一例であり、プロセッサを含む。エッジデバイス4としては、どのようなデバイスであって
もよいが、典型的には、工場設備、家庭内の各種装置、社会インフラ設備、車両などの移動体、任意の携帯デバイスなどが想定される。後述するように、コントローラ300は、プロセッサを有しており、ソフトウェア開発装置100からのアプリケーションプログラムを実行可能になっている。
【0036】
まず、ユーザは、ソフトウェア開発装置100を用いてソースコードを作成する((1)ソースコード作成)。そして、作成されたソースコードは、ソフトウェア開発装置100においてコンパイルされて中間表現20が生成される((2)中間表現生成)。
【0037】
中間表現20から実行コード30が生成される前に中間表現20が検証される。
図2に示す例においては、生成された中間表現20が検証サーバ200へ送信される((3)中間表現検証依頼)。そして、検証サーバ200は、ソフトウェア開発装置100からの中間表現20を検証する((4)中間表現の検証)。検証サーバ200はソフトウェア開発装置100へ検証結果を応答する。対象の中間表現20がすべての検証にパスすれば、検証サーバ200は、検証結果が適切であったことを示す認証をソフトウェア開発装置100へ送信することになる。
【0038】
ソフトウェア開発装置100は、検証結果が適切であったことを示す認証を検証サーバ200から受信すると((5)検証結果(認証)受信)、中間表現20から実行コード30を生成する((6)実行コード生成)。
【0039】
そして、ソフトウェア開発装置100は、生成した実行コード30をエッジデバイス4のコントローラ300へ転送する((7)実行コード転送)。そして、エッジデバイス4のコントローラ300は、必要に応じて、転送された実行コード30を実行する((8)実行コードの実行)。
【0040】
図2および
図3に示すような一連の処理によって、エッジデバイス4のコントローラ300において、セキュアなアプリケーションプログラムを実行させることができる。
【0041】
<B.ハードウェア構成例>
次に、本実施の形態に従うソフトウェア開発システム1を構成する主要装置のハードウェア構成例について説明する。
【0042】
(b1:ソフトウェア開発装置100)
ソフトウェア開発装置100は、典型的には汎用コンピュータで実現される。
【0043】
図4は、本実施の形態に従うソフトウェア開発装置100のハードウェア構成例を示す模式図である。
図4を参照して、ソフトウェア開発装置100は、主たるコンポーネントとして、プロセッサ102と、メインメモリ104と、入力部106と、ディスプレイ108と、ハードディスク110と、通信インターフェイス122とを含む。これらのコンポーネントは、内部バス120を介して接続されている。
【0044】
プロセッサ102は、例えば、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)などで構成される。複数のプロセッサ102が配置されてもよいし
、複数のコアを有するプロセッサ102を採用してもよい。
【0045】
メインメモリ104は、DRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)などの揮発性記憶装置で構成される。ハードディスク110
は、プロセッサ102で実行される各種プログラムや各種データを保持する。なお、ハードディスク110に代えて、SSD(Solid State Drive)やフラッシュメモリなどの不
揮発性記憶装置を採用してもよい。ハードディスク110に格納されたプログラムのうち、指定されたプログラムコードがメインメモリ104上に展開され、プロセッサ102は、メインメモリ104上に展開されたプログラムコードに含まれるコンピュータ可読命令(computer-readable instructions)を順次実行することで、後述するような各種機能を実現する。
【0046】
典型的には、ハードディスク110には、ユーザが任意に作成するソースコード10と、統合開発環境を実現するためのソフトウェア開発プログラム114と、ソースコード10から生成される実行コード30とが格納される。ソフトウェア開発プログラム114は、ユーザが任意に作成するソースコード10から中間表現20を介して実行コード30を生成するものであり、アプリケーションプログラムの開発環境を提供するモジュールを含む。但し、中間表現20を検証した結果が適切であることを条件に、対応する実行コード30の生成あるいは実行が許容される。
【0047】
入力部106は、ソフトウェア開発装置100を操作するユーザの入力操作を受け付ける。入力部106は、例えば、キーボード、マウス、表示デバイス上に配置されたタッチパネル、ソフトウェア開発装置100の筐体に配置された操作ボタンなどであってもよい。
【0048】
ディスプレイ108は、プロセッサ102での処理結果などを表示する。ディスプレイ108は、例えば、LCD(Liquid Crystal Display)や有機EL(Electro-Luminescence)ディスプレイなどであってもよい。
【0049】
通信インターフェイス122は、検証サーバ200とのデータ交換を担当する。通信インターフェイス122は、例えば、インターネットを介した通信ができるように、イーサネット(登録商標)ポートを含んでいてもよい。
【0050】
なお、ソフトウェア開発装置100の全部または一部は、コンピュータ可読命令に相当する回路が組み込まれたASIC(Application Specific Integrated Circuit)などの
ハードワイヤード回路を用いて実現してもよい。さらにあるいは、FPGA(field-programmable gate array)上にコンピュータ可読命令に相当する回路を用いて実現してもよ
い。また、プロセッサ102およびメインメモリ、ASIC、FPGAなどを適宜組み合わせて実現してもよい。
【0051】
ソフトウェア開発装置100は、コンピュータ可読命令を含むソフトウェア開発プログラム114を格納する非一過性(non-transitory)のメディアから、当該格納しているプログラムなどを読み出すためのコンポーネントをさらに有していてもよい。メディアは、例えば、DVD(Digital Versatile Disc)などの光学メディア、USBメモリなどの半導体メディアなどであってもよい。
【0052】
なお、ソフトウェア開発プログラム114は、メディアを介してソフトウェア開発装置100にインストールされるだけではなく、ネットワーク上の配信サーバから提供されるようにしてもよい。
【0053】
(b2:検証サーバ200)
検証サーバ200についても、典型的には汎用コンピュータで実現される。
【0054】
図5は、本実施の形態に従う検証サーバ200のハードウェア構成例を示す模式図である。
図5を参照して、検証サーバ200は、主たるコンポーネントとして、1または複数のプロセッサ202と、メインメモリ204と、入力部206と、ディスプレイ208と
、ハードディスク210と、通信インターフェイス222とを含む。これらのコンポーネントは、内部バス220を介して接続されている。
【0055】
プロセッサ202は、例えば、CPUやGPUなどで構成される。複数のプロセッサ202が配置されてもよいし、複数のコアを有するプロセッサ202を採用してもよい。
【0056】
メインメモリ204は、DRAMやSRAMなどの揮発性記憶装置で構成される。ハードディスク210は、プロセッサ202で実行される各種プログラムや各種データを保持する。なお、ハードディスク210に代えて、SSDやフラッシュメモリなどの不揮発性記憶装置を採用してもよい。ハードディスク210に格納されたプログラムのうち、指定されたプログラムコードがメインメモリ204上に展開され、プロセッサ202は、メインメモリ204上に展開されたプログラムコードに含まれるコンピュータ可読命令を順次実行することで、後述するような各種機能を実現する。
【0057】
典型的には、ハードディスク210には、外部からの依頼を受けて評価処理を実行するための評価エンジン212と、評価エンジン212による評価結果に応じて証明書を発行するための証明書発行エンジン214と、評価エンジン212による評価処理に用いられる評価ルール216とが格納される。評価エンジン212は、中間表現20が所定の規定あるいは規約を満たしているか否かを検証する。証明書発行エンジン214は、中間表現20が所定の規定あるいは規約を満たしている場合に、中間表現20に関連付けられる証明書40を発行する。これらの要素の動作およびデータ構造などの詳細については後述する。
【0058】
入力部206は、コントローラ300を操作するユーザの入力操作を受け付ける。ディスプレイ208は、プロセッサ202での処理結果などを表示する。
【0059】
通信インターフェイス222は、ソフトウェア開発装置100とのデータ交換を担当する。通信インターフェイス222は、例えば、インターネットを介した通信ができるように、イーサネット(登録商標)ポートを含んでいてもよい。
【0060】
なお、検証サーバ200の全部または一部は、コンピュータ可読命令に相当する回路が組み込まれたASICなどのハードワイヤード回路を用いて実現してもよい。さらにあるいは、FPGA上にコンピュータ可読命令に相当する回路を用いて実現してもよい。また、プロセッサ202およびメインメモリ、ASIC、FPGAなどを適宜組み合わせて実現してもよい。
【0061】
なお、実行に必要なプログラムは、メディアを介して検証サーバ200にインストールされるだけではなく、ネットワーク上の配信サーバから提供されるようにしてもよい。
【0062】
<C.検証処理>
次に、本実施の形態に従うソフトウェア開発システム1における検証処理について説明する。
【0063】
上述したように、本実施の形態における中間表現20に対する検証は、中間表現20が所定の規定あるいは規約を満たすか否かを判断する処理を含む。
【0064】
所定の規定あるいは規約としては、アプリケーションプログラム(中間表現20および対応する実行コード30)が安全であるための条件を含む。このような安全であるための条件としては、典型的には、以下のようなものが挙げられる。
【0065】
(1)安全性が確認できないメモリ操作(あるいは、危険なメモリ操作)が含まれていないこと(あるいは、そのようなメモリ操作がコンパイル可能ではないこと)
(2)コード中に未定義動作が存在しないこと
(3)エラー処理構文が欠如していないこと(エラー処理構文が適切に含まれていること)
(4)無秩序なエラー処理が含まれていないこと
上記(1)の安全性が確認できないメモリ操作(あるいは、危険なメモリ操作)は、システム領域やセキュア領域に対するメモリアクセスや、メモリ領域に対するブロック消去やブロック書き込みなどのメモリ操作を含む。
【0066】
上記(2)の未定義動作は、コード中に処理が定義されていないプロシージャやファンクションを含む。
【0067】
上記(3)のエラー処理構文は、例外が発生した場合の処理を規定する記述を含む。
上記(4)の無秩序なエラー処理は、例外が発生した場合の過度なエラー処理などを含む。
【0068】
さらに、所定の規定あるいは規約としては、アプリケーションプログラム(中間表現20および対応する実行コード30)に、いわゆるバックドアが存在しないことを含む。バックドアは、アプリケーションプログラムの利用者が認識しない方法で、(通常は、悪意のある)第三者がアプリケーションプログラムにアクセスするための機能や接続口などを意味する。中間表現20に対する検証においては、外部からのアクセス経路が中間表現20に含まれるか否かが判断される。
【0069】
上述したような検証処理は、所定の規定あるいは規約を含む評価ルール216(
図5)を参照することで実現するようにしてもよいし、いわゆるAI(Artificial Intelligence)などの機械学習を用いて、検証処理を実現するための検証モデルを逐次更新するよう
にしてもよい。
【0070】
本実施の形態に従うソフトウェア開発システム1における検証処理については、検証サーバ200で実行するようにしてもよいし、ソフトウェア開発装置100において実行するようにしてもよい。検証サーバ200で実行する場合には、クラウドコンピューティングの形態で実装してもよい。さらに、ソフトウェア開発装置100において検証処理を実行する場合には、外部の認証機関により認証された評価ルール216を用いるようにしてもよい。
【0071】
本実施の形態に従うソフトウェア開発システム1における検証処理については、所定の規定あるいは規約を満たさないと判断された内容の詳細をユーザなどの通知するようにしてもよい。
【0072】
<D.処理手順>
次に、本実施の形態に従うソフトウェア開発システム1における処理手順について説明する。
【0073】
図6は、本実施の形態に従うソフトウェア開発システム1における処理手順の一例を示すフローチャートである。
図6に示すソフトウェア開発装置100が実行する処理については、典型的には、ソフトウェア開発装置100のプロセッサ102がソフトウェア開発プログラム114を実行することで実現されてもよい。同様に、検証サーバ200が実行する処理については、典型的には、検証サーバ200のプロセッサ202が必要なプログラムを実行することで実現されてもよい。
【0074】
図6を参照して、ソフトウェア開発装置100は、ユーザ操作に従ってソースコード10を作成する(ステップS100)。ソースコード10の作成後、ソフトウェア開発装置100は、ユーザ操作に従って、ソースコード10をコンパイルして、ソースコード10から中間表現20を生成する(ステップS102)。
【0075】
ソフトウェア開発装置100は、生成した中間表現20に対する検証を検証サーバ200へ依頼し(ステップS104)、検証サーバ200からの応答を待つ(ステップS106)。検証サーバ200は、ソフトウェア開発装置100からの検証依頼に応答して、依頼された中間表現20に対する検証を行う(ステップS200)。
【0076】
すなわち、ステップS104およびS200においては、中間表現20が所定の規定あるいは規約を満たしているか否かを検証する処理が実行される。
【0077】
検証結果が適切であれば(ステップS202においてYES)、ソフトウェア開発装置100は、中間表現20に対する認証をソフトウェア開発装置100へ応答する(ステップS204)。一方、検証結果が適切でなければ(ステップS202においてNO)、ソフトウェア開発装置100は、中間表現20に対する認証を与えず、検証結果が不適切であった旨をソフトウェア開発装置100へ応答する(ステップS206)。
【0078】
検証サーバ200から中間表現20に対する認証が応答されると(ステップS108においてYES)、ソフトウェア開発装置100は、対象の中間表現20から実行コード30を生成する(ステップS110)。そして、ソフトウェア開発装置100は、生成した実行コード30をターゲットのコントローラ300へ転送する(ステップS112)。そして、処理は終了する。
【0079】
このように、中間表現20が所定の規定あるいは規約を満たしている場合に、中間表現20から生成される実行コード30の実行が実現される。
【0080】
一方、検証サーバ200から中間表現20に対する認証が応答されなければ(ステップS108においてNO)、ソフトウェア開発装置100は、ソースコード10または中間表現20が所定の規定あるいは規約を満たしていない旨をユーザに通知する(ステップS114)。このように、中間表現20が所定の規定あるいは規約を満たしていない場合に、所定の規定あるいは規約を満たしていない内容をユーザに通知する処理を採用してもよい。そして、処理は終了する。
【0081】
<E.実行環境>
本実施の形態に従うソフトウェア開発システム1において生成された実行コード30は、配布先のコントローラ300を構成するプロセッサあるいはマイクロコンピュータのセキュア領域に格納されることが好ましい。すなわち、中間表現20に対する認証を条件として生成された実行コード30に対して、何らかの改ざん行為が行われないように、実行環境において何らかの対処を行うことが好ましい。
【0082】
また、本実施の形態に従うソフトウェア開発システム1において生成された中間表現20に対する証明書40および中間表現20から生成される実行コード30のいずれにも共通の署名(例えば、認証された中間表現20から生成されるハッシュ値)を埋め込んでおき、対応する証明書40が存在することを条件としてもよい。この場合には、実行コード30を実行する環境(典型的には、マイクロコンピュータのファームウェア)において、実行コード30に含まれる署名と、対応する証明書40に含まれる署名との一致を確認する処理を実装してもよい。
【0083】
また、実行環境において、実行コード30を実行するか否かの評価(正当性の判断)は、いずれのタイミングで行ってもよいが、典型的には、実行環境であるコントローラ300の起動時(ファームウェアの起動中あるいは起動直後のアプリケーション実行開始前)に行うようにしてもよい。すなわち、実行コード30が実行されるコントローラ300の起動時に、その実行コード30を生成した中間表現20に関連付けて発行された証明書40に基づいて、その実行コード30の正当性を評価するようにしてもよい。コントローラ300の起動時に、アプリケーションプログラムの実行コード30が認証されていることを確認することで、コントローラ300などで好ましくない処理が実行される事態を回避できる。
【0084】
<F.変形例>
ソフトウェア開発装置100から検証サーバ200へ中間表現20の検証を依頼する際には、対象の中間表現20を暗号化してもよい。これによって、ソフトウェア開発装置100と検証サーバ200との間で遣り取りされる中間表現20に対する改ざんなどを防止できる。
【0085】
検証サーバ200が発行する証明書40には、認証局からの署名などを付与するようにしてもよい。これによって、検証サーバ200が発行する証明書40に対する改ざんなどの不正行為を防止できる。
【0086】
上述の説明においては、ソフトウェア開発装置100がソースコード10の生成処理、中間表現20の生成処理および実行コード30の生成処理を実行する構成例について説明した、これらの処理を複数のコンピューティングデバイスで分散的に実行するようにしてもよい。
【0087】
本実施の形態に従う中間表現20に対する検証および検証結果を示す証明書40の発行というフレームワークは、アプリケーションを販売あるいは配布する仕組みにも応用可能である。例えば、アプリケーションの開発者がアプリケーションプログラム(実行コード30)をアプリケーション配布サーバにアップロードする際には、対応する中間表現20および/または証明書40を併せてアップロードすることを要求することで、アプリケーション配布サーバ側において、配布予定の実行コード30を直接的または間接的に検証できる。このように、本実施の形態に従う仕組みを導入することで、バックドアなどが仕組まれたアプリケーションプログラムが配布されるような事態を回避できる。
【0088】
<G.利点>
本実施の形態においては、ソースコード10ではなく中間表現20に対する検証を行うことで、ソースコード10に含まれるノウハウなどを秘匿化した状態で、アプリケーションプログラムに含まれる安全性についてのリスクをより効率的に発見できる。また、中間表現20に対する検証を行うことで、ソースコード10の記述に用いられたプログラミング言語の種類に応じた複数の検証ルールセットなどを用意する必要がなく、効率的な検証を実現できる。
【0089】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。本発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0090】
1 ソフトウェア開発システム、2 インターネット、4 エッジデバイス、10 ソースコード、20 中間表現、30 実行コード、40 証明書、100 ソフトウェア
開発装置、102,202 プロセッサ、104,204 メインメモリ、106,206 入力部、108,208 ディスプレイ、110,210 ハードディスク、114
ソフトウェア開発プログラム、120,220 内部バス、122,222 通信インターフェイス、200 検証サーバ、212 評価エンジン、214 証明書発行エンジン、216 評価ルール、300 コントローラ。
【手続補正書】
【提出日】2023-12-27
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ユーザ操作に従ってソースコードを作成するステップと、
前記ソースコードから中間表現を生成するステップと、
前記中間表現が所定の規定あるいは規約を満たしているか否かを検証するステップと、
前記中間表現が前記所定の規定あるいは規約を満たしている場合に、前記中間表現から生成される実行コードの実行を実現するステップとを備える、実行コード提供方法。