IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電気株式会社の特許一覧

特許7517455改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム
<>
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図1
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図2
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図3
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図4A
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図4B
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図5
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図6
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図7
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図8
  • 特許-改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-08
(45)【発行日】2024-07-17
(54)【発明の名称】改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びプログラム
(51)【国際特許分類】
   G06F 21/12 20130101AFI20240709BHJP
   G06F 21/64 20130101ALI20240709BHJP
【FI】
G06F21/12 350
G06F21/64
【請求項の数】 7
(21)【出願番号】P 2022558652
(86)(22)【出願日】2020-10-28
(86)【国際出願番号】 JP2020040338
(87)【国際公開番号】W WO2022091231
(87)【国際公開日】2022-05-05
【審査請求日】2023-04-21
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成30年度 国立研究開発法人新エネルギー・産業技術総合開発機構「戦略的イノベーション創造プログラム(SIP)第2期/IoT社会に対応したサイバー・フィジカル・セキュリティ/(A2)IoT機器等向け真贋判定による信頼の証明技術の研究開発事業」に関する研究開発、産業技術力強化法第17条の適用を受ける特許出願
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】早木 悠斗
(72)【発明者】
【氏名】山垣 則夫
【審査官】松平 英
(56)【参考文献】
【文献】国際公開第2018/150619(WO,A1)
【文献】国際公開第2011/033773(WO,A1)
【文献】NEC デジタルプラットフォーム事業部,IoTデバイスの不正な改ざんを検知する 軽量プログラム改ざん検知 開発キット,C&Cユーザーフォーラム&iEXPO2019,日本,NEC デジタルプラットフォーム事業部,2019年10月
(58)【調査した分野】(Int.Cl.,DB名)
G06F12/14
21/00-21/88
G09C1/00-5/00
H04K1/00-3/00
H04L9/00-9/40
(57)【特許請求の範囲】
【請求項1】
ハッシュ値を用いたホワイトリスト型の改ざん検知機能を、監視対象のソフトウェアに組み込む改ざん検知機能組み込み装置であって、
前記ソフトウェアのソースコードである第1のソースコードを入力する入出力部と、
前記第1のソースコードをビルドして第1のバイナリを生成するビルド部と、
前記第1のバイナリに基づいて、第1の制御フローグラフ(Control Flow Graph;CFG)を生成するCFG生成部と、
前記第1のCFGに基づいて、改ざん検知機能呼び出し関数を前記第1のソースコードに組み込む組み込み箇所を決定し、決定した前記第1のソースコードの組み込み箇所に前記改ざん検知機能呼び出し関数を組み込むと共に、前記第1のソースコードに前記改ざん検知機能を組み込む改ざん検知機能組み込み部と、
前記第1のソースコードに前記改ざん検知機能及び前記改ざん検知機能呼び出し関数が組み込まれたソースコードである第2のソースコードをビルドして第2のバイナリを生成する前記ビルド部と、
前記第2のバイナリに基づいて、第2のCFGを生成する前記CFG生成部と、
前記第2のバイナリ及び前記第2のCFGに基づいて、ホワイトリストを作成するホワイトリスト作成部と、
前記第2のバイナリ及び前記ホワイトリストを出力する前記入出力部と、を備え、
前記ホワイトリスト作成部は、前記第2のCFGに基づいて、前記改ざん検知機能呼び出し関数の監視範囲を決定し、前記改ざん検知機能呼び出し関数の前記監視範囲のハッシュ値のリストを前記ホワイトリストとして作成する、
改ざん検知機能組み込み装置。
【請求項2】
前記ホワイトリスト作成部は、
前記第2のCFG上の前記改ざん検知機能呼び出し関数を順次選択し、
前記選択した改ざん検知機能呼び出し関数を含むノードの全ての子孫ノードのうち、前記改ざん検知機能呼び出し関数を含まないノードを辿り、前記選択した改ざん検知機能呼び出し関数を含むノードから、次の前記改ざん検知機能呼び出し関数を含むノードの直前のノードまでを、前記選択した改ざん検知機能呼び出し関数の前記監視範囲に決定する、
請求項1に記載の改ざん検知機能組み込み装置。
【請求項3】
前記ホワイトリスト作成部は、ファイル形式で前記ホワイトリストを作成し、
前記入出力部は、ファイル形式の前記ホワイトリストを出力する、
請求項1又は2に記載の改ざん検知機能組み込み装置。
【請求項4】
前記ホワイトリスト作成部は、ソースコード形式で前記ホワイトリストを作成し、作成したソースコード形式の前記ホワイトリストを前記第2のソースコードに組み込み、
前記ビルド部は、前記ホワイトリストが組み込まれた前記第2のソースコードをビルドして、前記ホワイトリストが組み込まれた前記第2のバイナリを生成し、
前記入出力部は、前記ホワイトリストが組み込まれた前記第2のバイナリを出力する、
請求項1又は2に記載の改ざん検知機能組み込み装置。
【請求項5】
前記改ざん検知機能組み込み部は、前記ソフトウェアが動作する機器が、ハードウェアによって外部からのアクセスが制限された特定のメモリ領域を有する場合に、前記改ざん検知機能を前記特定のメモリ領域上に配置されるソースコードに組み込む、
請求項1から4のいずれか1項に記載の改ざん検知機能組み込み装置。
【請求項6】
ハッシュ値を用いたホワイトリスト型の改ざん検知機能を、監視対象のソフトウェアに組み込む改ざん検知機能組み込み装置が実行する改ざん検知組み込み方法であって、
前記ソフトウェアのソースコードである第1のソースコードを入力する入力ステップと、
前記第1のソースコードをビルドして第1のバイナリを生成する第1のビルドステップと、
前記第1のバイナリに基づいて、第1の制御フローグラフ(Control Flow Graph;CFG)を生成する第1のCFG生成ステップと、
前記第1のCFGに基づいて、改ざん検知機能呼び出し関数を前記第1のソースコードに組み込む組み込み箇所を決定し、決定した前記第1のソースコードの組み込み箇所に前記改ざん検知機能呼び出し関数を組み込むと共に、前記第1のソースコードに前記改ざん検知機能を組み込む改ざん検知機能組み込みステップと、
前記第1のソースコードに前記改ざん検知機能及び前記改ざん検知機能呼び出し関数が組み込まれたソースコードである第2のソースコードをビルドして第2のバイナリを生成する第2のビルドステップと、
前記第2のバイナリに基づいて、第2のCFGを生成する第2のCFG生成ステップと、
前記第2のバイナリ及び前記第2のCFGに基づいて、ホワイトリストを作成するホワイトリスト作成ステップと、
前記第2のバイナリ及び前記ホワイトリストを出力する出力ステップと、を含み、
前記ホワイトリスト作成ステップでは、前記第2のCFGに基づいて、前記改ざん検知機能呼び出し関数の監視範囲を決定し、前記改ざん検知機能呼び出し関数の前記監視範囲のハッシュ値のリストを前記ホワイトリストとして作成する、
改ざん検知機能組み込み方法。
【請求項7】
ハッシュ値を用いたホワイトリスト型の改ざん検知機能を、監視対象のソフトウェアに組み込む処理をコンピュータに実行させるプログラであって、
前記ソフトウェアのソースコードである第1のソースコードを入力する入力ステップと、
前記第1のソースコードをビルドして第1のバイナリを生成する第1のビルドステップと、
前記第1のバイナリに基づいて、第1の制御フローグラフ(Control Flow Graph;CFG)を生成する第1のCFG生成ステップと、
前記第1のCFGに基づいて、改ざん検知機能呼び出し関数を前記第1のソースコードに組み込む組み込み箇所を決定し、決定した前記第1のソースコードの組み込み箇所に前記改ざん検知機能呼び出し関数を組み込むと共に、前記第1のソースコードに前記改ざん検知機能を組み込む改ざん検知機能組み込みステップと、
前記第1のソースコードに前記改ざん検知機能及び前記改ざん検知機能呼び出し関数が組み込まれたソースコードである第2のソースコードをビルドして第2のバイナリを生成する第2のビルドステップと、
前記第2のバイナリに基づいて、第2のCFGを生成する第2のCFG生成ステップと、
前記第2のバイナリ及び前記第2のCFGに基づいて、ホワイトリストを作成するホワイトリスト作成ステップと、
前記第2のバイナリ及び前記ホワイトリストを出力する出力ステップと、を含み、
前記ホワイトリスト作成ステップでは、前記第2のCFGに基づいて、前記改ざん検知機能呼び出し関数の監視範囲を決定し、前記改ざん検知機能呼び出し関数の前記監視範囲のハッシュ値のリストを前記ホワイトリストとして作成する、
プログラム
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びコンピュータ可読媒体に関し、特に、IoT(Internet of Things)機器などの機器のソフトウェアに用いる改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びコンピュータ可読媒体に関する。
【背景技術】
【0002】
近年、IoT機器の普及により、IoT機器のようなメモリやCPU(Central Processing Unit)などのリソースが潤沢ではない機器でも動作するセキュリティシステムが要求されている。
【0003】
関連するセキュリティシステムとして、ハッシュ値を用いたホワイトリスト型の改ざん検知機能を機器に組み込み、機器上のソフトウェアが正しい状態であるか否か(改ざんされていないか否か)を監視する方式が知られている。
【0004】
ハッシュ値を用いたホワイトリスト型の改ざん検知機能とは、正常時の機器のメモリの情報を予めホワイトリストに登録しておき、動作中の機器のメモリの情報を、ホワイトリストに登録されているメモリの情報と比較し、改ざんの有無を監視する機能である。このとき、メモリの情報はハッシュ値の形で管理される。
【0005】
ハッシュ値を用いたホワイトリスト型の改ざん検知機能は、次のように実現される。まず、事前に、正常時の機器のメモリの情報を何等かの方法で取得し、取得したメモリの情報をホワイトリストに登録する。メモリの情報は、実行コードがメモリ上にどのように展開されているのかを示す情報となる。次に、機器の動作中の任意のタイミングでメモリの情報を取得し、取得したメモリの情報をホワイトリストに登録されているメモリの情報と比較する。比較の結果、機器の動作中に取得したメモリの情報とホワイトリストに登録されているメモリの情報とが一致すれば、改ざんがなく(攻撃を受けていない)、一致しなければ、改ざんされている(攻撃されている)ことになる。
【0006】
ホワイトリストの意味は、正常時のメモリのスナップショットということになる。ただし、メモリのスナップショットをそのままの形で登録・比較するよりも、ハッシュ値の形で登録・比較した方が、機器本来の動作への影響が小さくなる。そのため、ホワイトリストには、正常時のメモリの情報がハッシュ値の形で登録されており、動作中のメモリの情報もハッシュ値の形で管理される。ハッシュ値を用いたホワイトリスト型の改ざん検知機能の一例が、非特許文献1,2に開示されている。
【0007】
非特許文献1には、機器に対する入力がトリガーとなり、次に実行する機能の改ざんを検知する方法が開示されている。非特許文献1の方法によれば、ユーザーの入力により、次に実行される機能(ここでは、機能Aと呼ぶ)が決まる。また、ユーザーの入力により、改ざん検知機能を呼び出す関数(以下、改ざん検知機能呼び出し関数と呼ぶ)が起動する。改ざん検知機能呼び出し関数は、改ざん検知機能を呼び出し、機能Aの実行時に使用するメモリ領域に限定して、改ざんの有無を監視する。
【0008】
非特許文献2には、一度の監視における監視範囲を制御フローグラフ(Control Flow Graph:CFG)の1つのノードとし、非特許文献1の方法よりも高速な監視を目指す方法が開示されている。ここで、CFGとは、プログラムがどの順序で実行されるかをグラフ化したものである。したがって、CFGは有向グラフである。CFGのノードは連続するプログラムの実行コードとなる。実行コードは、バイナリレベルでもソースコードレベルでも記載可能であるが、ここではバイナリレベルで記載されているものを扱う。このとき、CFGの1つのノードは分岐命令ごとに区切られる。プログラムを分岐命令ごとに区切ったブロックのことベーシックブロックと呼ぶ。すなわち、CFGの1つのノードは1つのベーシックブロックである、と言い換えることができる。非特許文献2には、このようなCFGを基に、各ノードの実行コードを監視するためのトリガー(上記の改ざん検知機能呼び出し関数に相当)をソースコードに組み込む方法が開示されている。
【0009】
特許文献1には、バイトコード上に直接改ざん検知機能を組み込む方法が開示されている。特許文献1の方法によれば、改ざん検知機能を組み込む対象のプログラムに対して、関数ごとにCFGを作成する。そして、CFGを基に関数ごとにランダムにノードを抽出し、抽出したノード及びそれ以前に必ず実行されるノードに改ざん検知機能を組み込む。
【0010】
特許文献2には、チェッカコード(上記の改ざん検知機能に相当)が改ざん検知処理を行う頻度を制御する方法が開示されている。特許文献2の方法によれば、チェッカコードには活性状態と不活性状態があり、プログラム上に組み込まれたチェッカコードが活性状態のときにのみ、改ざん検知処理を行う。
【先行技術文献】
【特許文献】
【0011】
【文献】国際公開第2018/150619号
【文献】特開2008-084275号公報
【非特許文献】
【0012】
【文献】Toshiki Kobayashi、Takayuki Sasaki、Astha Jada、Daniele E. Asoni、Adrian Perrig、“SAFES: Sand-boxed Architecture for Frequent Environment Self-measurement”、Proceedings of the 3rd Workshop on System Software for Trusted Execution、2018年、pp.37-41
【文献】早木 悠斗、佐々木 貴之、リュウ センペイ、冨田 光輝、山垣 則夫著、「IoT機器向け改ざん検知機能による信頼の証明技術の提案」、SCIS2020、2020年、pp.1-6
【発明の概要】
【発明が解決しようとする課題】
【0013】
IoT機器などの機器に用いる上記の改ざん検知機能においては、機器本来の動作への影響を低減することで、機器の運用への影響を低減する必要がある。機器本来の動作への影響を低減するための方法として、非特許文献1及び非特許文献2の方法のように、一度の監視における監視範囲を絞る、という方法が考えられる。その際、プログラムのうち直後に実行される部分は漏れなく監視される必要がある。また、別の観点として、IoT機器などの機器のソフトウェアは、定期的なアップデートが行われる。したがって、実用面を考慮すると、ソフトウェアの開発者が簡単に改ざん検知機能を組み込める必要がある。
【0014】
非特許文献1の方法においては、ユーザーの入力をトリガーとするため、ユーザーからの入力が少ない仕様の機器では、改ざん検知機能呼び出し関数による一度の監視範囲が広くなり、結果として機器の動作に影響を及ぼす可能性がある。また、非特許文献1の方法においては、1つの機能の中に命令数の多い関数が存在するような場合においても、改ざん検知機能の稼働が機器本来の動作に影響を与える可能性がある。さらに、非特許文献1には、改ざん検知機能の組み込み方法については明示されていない。
【0015】
特許文献1の方法においては、改ざん検知機能をCFG上のノードの中にランダムに組み込むため、組み込まれるノードの間隔が広くなる可能性がある。また、特許文献1の方法においては、改ざん検知手法に関しては指定していない。これらを考慮すると、特許文献1の方法においては、改ざん検知機能呼び出し関数による一度の監視における監視範囲が広くなり、改ざんの有無を監視する監視時間が機器の動作に影響を与える可能性がある。
【0016】
特許文献2の方法においては、チェッカコードが不活性の場合には改ざん検知処理を行わないようにすることで、処理負荷の低減を行っている。この場合、改ざんが起こった直後に該当範囲を監視するチェッカコードが不活性であれば、改ざんを検知せずにプログラムが実行される可能性がある。また、不活性なチェッカコードがあっても、漏れなく改ざんを検知しようとすれば、改ざん検知機能呼び出し関数による一度の監視における監視範囲が広くなると考えられるため、その場合も、一度の監視における監視時間が長くなってしまう可能性がある。
【0017】
その一方、非特許文献2の方法においては、改ざん検知機能がプログラムのベーシックブロック単位で実行されるため、非特許文献1の方法とは異なり、ユーザーの入力等に依存せずに、改ざんの有無を監視することができる。また、ベーシックブロックと関数とを比較した場合、一般的にベーシックブロックの方が関数よりも命令数が少なくなる。そのため、非特許文献2の方法においては、改ざん検知機能呼び出し関数による一度の監視における監視範囲が広くなることを回避でき、機器本来の動作への影響を低減できる可能性がある。また、非特許文献2には、改ざん検知機能をソースコードに組み込む方法についても明記されている。
【0018】
しかし、非特許文献2の方法においては、特定の条件下では、監視対象とならないベーシックブロックが存在し、監視漏れが発生する可能性がある。監視対象とならないベーシックブロックが存在する条件とは、条件分岐やループ文などの構文がソースコード内に存在することを指す。これらの構文がソースコード内に存在する場合、ソースコード上に改ざん検知機能呼び出し関数を挿入できない箇所が存在する可能性があるため、全てのベーシックブロックに対応するように改ざん検知機能呼び出し関数を組み込むことができない。このような例を、図1を参照して説明する。
【0019】
図1は、非特許文献2の方法で監視対象とならないベーシックブロックが存在するソースコード及びCFGの例を示している。図1の右側は、ソースコードを示し、図1の左側は、右側のソースコードをビルドしたバイナリを基に生成されたCFGを示している。また、図1の左側の各ノード内の数字は、右側のソースコードの行番号を示しており、各ノードには、各ノード内の数字で示される行番号に相当する実行コードが含まれることを表している。例えば、ノード2には、ソースコードの6~7行目に相当する実行コードが含まれる。図1の例では、ノード2を監視するトリガーは、5行目と6行目の間に挿入できると考えられる。しかし、ノード3は、8行目に相当する実行コードが含まれており、8行目を監視するためにトリガーをソースコード上に挿入することができず、監視対象外となってしまう。
【0020】
以上の通り、非特許文献1及び特許文献1,2の方法においては、改ざん検知機能呼び出し関数による監視範囲が広くなってしまう可能性があるという課題がある。その一方、非特許文献2の方法においては、改ざん検知機能呼び出し関数による監視範囲が広くなることを回避できる可能性があるものの、監視対象とならないノード(ベーシックブロック)が存在し、監視漏れが発生する可能性があるという課題がある。
【0021】
そこで本開示の目的は、上述した課題を鑑み、上述した課題のいずれかを解決することができる改ざん検知機能組み込み装置、改ざん検知機能組み込み方法、及びコンピュータ可読媒体を提供することにある。
【課題を解決するための手段】
【0022】
本開示の一態様に係る改ざん検知機能組み込み装置は、
ハッシュ値を用いたホワイトリスト型の改ざん検知機能を、監視対象のソフトウェアに組み込む改ざん検知機能組み込み装置であって、
前記ソフトウェアのソースコードである第1のソースコードを入力する入出力部と、
前記第1のソースコードをビルドして第1のバイナリを生成するビルド部と、
前記第1のバイナリに基づいて、第1の制御フローグラフ(Control Flow Graph;CFG)を生成するCFG生成部と、
前記第1のCFGに基づいて、改ざん検知機能呼び出し関数を前記第1のソースコードに組み込む組み込み箇所を決定し、決定した前記第1のソースコードの組み込み箇所に前記改ざん検知機能呼び出し関数を組み込むと共に、前記第1のソースコードに前記改ざん検知機能を組み込む改ざん検知機能組み込み部と、
前記第1のソースコードに前記改ざん検知機能及び前記改ざん検知機能呼び出し関数が組み込まれたソースコードである第2のソースコードをビルドして第2のバイナリを生成する前記ビルド部と、
前記第2のバイナリに基づいて、第2のCFGを生成する前記CFG生成部と、
前記第2のバイナリ及び前記第2のCFGに基づいて、ホワイトリストを作成するホワイトリスト作成部と、
前記第2のバイナリ及び前記ホワイトリストを出力する前記入出力部と、を備え、
前記ホワイトリスト作成部は、前記第2のCFGに基づいて、前記改ざん検知機能呼び出し関数の監視範囲を決定し、前記改ざん検知機能呼び出し関数の前記監視範囲のハッシュ値のリストを前記ホワイトリストとして作成する。
【0023】
本開示の他の態様に係る改ざん検知機能組み込み方法は、
ハッシュ値を用いたホワイトリスト型の改ざん検知機能を、監視対象のソフトウェアに組み込む改ざん検知機能組み込み装置が実行する改ざん検知組み込み方法であって、
前記ソフトウェアのソースコードである第1のソースコードを入力する入力ステップと、
前記第1のソースコードをビルドして第1のバイナリを生成する第1のビルドステップと、
前記第1のバイナリに基づいて、第1の制御フローグラフ(Control Flow Graph;CFG)を生成する第1のCFG生成ステップと、
前記第1のCFGに基づいて、改ざん検知機能呼び出し関数を前記第1のソースコードに組み込む組み込み箇所を決定し、決定した前記第1のソースコードの組み込み箇所に前記改ざん検知機能呼び出し関数を組み込むと共に、前記第1のソースコードに前記改ざん検知機能を組み込む改ざん検知機能組み込みステップと、
前記第1のソースコードに前記改ざん検知機能及び前記改ざん検知機能呼び出し関数が組み込まれたソースコードである第2のソースコードをビルドして第2のバイナリを生成する第2のビルドステップと、
前記第2のバイナリに基づいて、第2のCFGを生成する第2のCFG生成ステップと、
前記第2のバイナリ及び前記第2のCFGに基づいて、ホワイトリストを作成するホワイトリスト作成ステップと、
前記第2のバイナリ及び前記ホワイトリストを出力する出力ステップと、を含み、
前記ホワイトリスト作成ステップでは、前記第2のCFGに基づいて、前記改ざん検知機能呼び出し関数の監視範囲を決定し、前記改ざん検知機能呼び出し関数の前記監視範囲のハッシュ値のリストを前記ホワイトリストとして作成する。
【0024】
本開示のさらに他の態様に係るコンピュータ可読媒体は、
ハッシュ値を用いたホワイトリスト型の改ざん検知機能を、監視対象のソフトウェアに組み込む処理をコンピュータに実行させるプログラムが格納された非一時的なコンピュータ可読媒体であって、
前記プログラムは、
前記ソフトウェアのソースコードである第1のソースコードを入力する入力ステップと、
前記第1のソースコードをビルドして第1のバイナリを生成する第1のビルドステップと、
前記第1のバイナリに基づいて、第1の制御フローグラフ(Control Flow Graph;CFG)を生成する第1のCFG生成ステップと、
前記第1のCFGに基づいて、改ざん検知機能呼び出し関数を前記第1のソースコードに組み込む組み込み箇所を決定し、決定した前記第1のソースコードの組み込み箇所に前記改ざん検知機能呼び出し関数を組み込むと共に、前記第1のソースコードに前記改ざん検知機能を組み込む改ざん検知機能組み込みステップと、
前記第1のソースコードに前記改ざん検知機能及び前記改ざん検知機能呼び出し関数が組み込まれたソースコードである第2のソースコードをビルドして第2のバイナリを生成する第2のビルドステップと、
前記第2のバイナリに基づいて、第2のCFGを生成する第2のCFG生成ステップと、
前記第2のバイナリ及び前記第2のCFGに基づいて、ホワイトリストを作成するホワイトリスト作成ステップと、
前記第2のバイナリ及び前記ホワイトリストを出力する出力ステップと、を含み、
前記ホワイトリスト作成ステップでは、前記第2のCFGに基づいて、前記改ざん検知機能呼び出し関数の監視範囲を決定し、前記改ざん検知機能呼び出し関数の前記監視範囲のハッシュ値のリストを前記ホワイトリストとして作成する。
【発明の効果】
【0025】
上述の態様によれば、監視対象のソフトウェアにおいて、監視できないCFG上のノードの数を低減できるという効果が得られる。
【図面の簡単な説明】
【0026】
図1】ソースコード及びCFGの例を示す図である。
図2】実施の形態1に係る改ざん検知機能組み込み装置の構成例を示すブロック図である。
図3】実施の形態1に係る改ざん検知機能組み込み装置の全体の動作例を説明する流れ図である。
図4A】実施の形態1に係るホワイトリスト作成部が図3のステップA7で行う動作例を説明する流れ図である。
図4B】実施の形態1に係るホワイトリスト作成部が図3のステップA7で行う動作例を説明する流れ図である。
図5図1のソースコードに対して、図3のステップA6までの処理を行い、改ざん検知機能呼び出し関数を組み込んだソースコード及びCFGの例を示す図である。
図6】実施の形態2に係る改ざん検知機能組み込み装置の構成例を示すブロック図である。
図7】実施の形態2に係る改ざん検知機能組み込み装置の全体の動作例を説明する流れ図である。
図8】実施の形態3に係る改ざん検知機能組み込み装置の構成例を示すブロック図である。
図9】実施の形態4に係る改ざん検知機能組み込み装置のハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【0027】
以下、図面を参照しつつ、本開示の実施の形態について説明する。なお、以下の実施の形態において、同一又は同等の要素には、同一の符号を付し、重複する説明は省略される。また、以下の各実施の形態で説明する改ざん検知機能組み込み装置は、監視対象のソフトウェアに対して、ハッシュ値を用いたホワイトリスト型の改ざん検知機能を組み込む装置の例である。
【0028】
[実施の形態1]
[実施の形態1の構成]
まず、図2を参照して、本実施の形態1に係る改ざん検知機能組み込み装置100の構成例について説明する。なお、図2において、一方向性の矢印は、あるデータ(又は、信号、情報等)の流れの方向を端的に示したもので、双方向性を排除するものではない(後述する図6及び図8において同じ)。
【0029】
図2を参照すると、本実施の形態1に係る改ざん検知機能組み込み装置100は、入出力部101と、ビルド部102と、Control Flow Graph(CFG)生成部103と、改ざん検知機能組み込み部104と、ホワイトリスト作成部105と、記憶部106と、を含む。
【0030】
これらの構成要素は、それぞれ次のように動作する。
入出力部101には、監視対象のソフトウェア、すなわち、改ざん検知機能を組み込む対象となるソフトウェアのソースコード(第1のソースコード)が入力される。監視対象のソフトウェアは、例えば、IoT機器上の制御ソフトウェア等である。入出力部101は、入力されたソースコードを記憶部106に記憶させ、ビルド部102に処理を行うよう通知を送る。
【0031】
また、入出力部101は、ホワイトリスト作成部105から後述する通知を受け取ると、記憶部106から、後述する改ざん検知機能及び改ざん検知機能呼び出し関数を組み込んだソフトウェアのバイナリ(第2のバイナリ。以下、改ざん検知機能組み込みバイナリと呼ぶ)を読み出し、読み出した改ざん検知機能組み込みバイナリを出力する。また、入出力部101は、記憶部106から、後述するファイル形式のホワイトリストを読み出し、読み出したホワイトリストを改ざん検知機能組み込みバイナリと共に出力する。ただし、入出力部101は、記憶部106から改ざん検知機能組み込みバイナリ及びホワイトリストを読み出すことには限定されない。入出力部101は、改ざん検知機能組み込みバイナリをビルド部102から受け取ってもよいし、ホワイトリストをホワイトリスト作成部105から受け取ってもよい。
【0032】
ビルド部102は、入出力部101から通知を受け取ると、記憶部106からソースコードを読み出し、ビルドを行う。ビルド部102は、ビルドにより生成されたバイナリ(第1のバイナリ)を記憶部106に記憶させ、CFG生成部103に処理を行うよう通知を送る。
【0033】
また、ビルド部102は、改ざん検知機能組み込み部104から後述する通知を受け取ると、記憶部106から、後述する改ざん検知機能及び改ざん検知機能呼び出し関数を組み込んだソースコード(第2のソースコード。以下、改ざん検知機能組み込みソースコードと呼ぶ)を読み出し、ビルドを行う。ビルド部102は、ビルドにより生成された改ざん検知機能組み込みバイナリを記憶部106に記憶させ、CFG生成部103に処理を行うよう通知を送る。
【0034】
なお、ビルド部102は、CFG生成部103に通知を送る際、CFG生成部103が処理を行うバイナリを指定する。また、ビルド部102は、入出力部101及び改ざん検知機能組み込み部104のどちらから通知を受けたかによって、ビルドにより生成したバイナリに改ざん検知機能が組み込まれているか否かを判断できる。そのため、ビルド部102は、CFG生成部103が処理を行うバイナリに改ざん検知機能が組み込まれているか否かの情報もCFG生成部103に通知する。
【0035】
CFG生成部103は、ビルド部102から通知を受け取ると、その通知で指定されたバイナリを記憶部106から読み出し、読み出したバイナリを解析し、CFGを生成する。CFG生成部103は、当該バイナリに改ざん検知機能が組み込まれていない場合は、当該バイナリから生成したCFG(第1のCFG)を改ざん検知機能組み込み部104に送り、当該バイナリが、改ざん検知機能が組み込まれた改ざん検知機能組み込みバイナリである場合は、当該バイナリから生成したCFG(第2のCFG)をホワイトリスト作成部105に送る。
【0036】
改ざん検知機能組み込み部104は、CFG生成部103からCFGを受け取ると、当該CFGを基に、改ざん検知機能呼び出し関数を組み込むソースコードの組み込み箇所を決定し、決定した組み込み箇所に改ざん検知機能呼び出し関数を組み込む。改ざん検知機能組み込み部104は、改ざん検知機能もソースコードに組み込む。このようにして改ざん検知機能呼び出し関数及び改ざん検知機能が組み込まれたソースコード一式が改ざん検知機能組み込みソースコードである。改ざん検知機能組み込み部104は、改ざん検知機能組み込みソースコードを記憶部106に記憶させ、ビルド部102に処理を行うよう通知を送る。
【0037】
ホワイトリスト作成部105は、CFG生成部103からCFGを受け取ると、当該CFGを基に、記憶部106から改ざん検知機能組み込みバイナリを読み出す。ホワイトリスト作成部105は、当該CFG及び当該改ざん検知機能組み込みバイナリを基に、ホワイトリストをファイル形式で作成し、作成したホワイトリストを記憶部106に記憶させる。また、ホワイトリスト作成部105は、入出力部101に処理を行うよう通知を送る。
【0038】
記憶部106は、入出力部101から受け取ったソースコード、改ざん検知機能組み込み部104から受け取った改ざん検知機能組み込みソースコード、ビルド部102から受け取ったバイナリ及び改ざん検知機能組み込みバイナリ、及びホワイトリスト作成部105から受け取ったホワイトリストを記憶する。
【0039】
なお、記憶部106は、改ざん検知機能組み込み装置100において必須の構成要素ではなく、改ざん検知機能組み込み装置100の外部に設けてもよい。すなわち、改ざん検知機能組み込み装置100は、入出力部101と、ビルド部102と、CFG生成部103と、改ざん検知機能組み込み部104と、ホワイトリスト作成部105と、からなる最小構成で実現してもよい。
【0040】
[実施の形態1の動作]
次に、図3の流れ図を参照して、本実施の形態1に係る改ざん検知機能組み込み装置100の全体の動作例について説明する。
【0041】
図3を参照すると、まず、入出力部101には、監視対象のソフトウェアのソースコードであって、ビルドに必要な全てのソースコードが入力される。入出力部101は、入力されたソースコードを記憶部106に記憶させ、ビルド部102に処理を行うよう通知を送る(ステップA1)。
【0042】
ビルド部102は、入出力部101から通知を受け取ると、記憶部106から、ステップA1で入力されたソースコードを読み出し、読み出したソースコードをビルドし、バイナリを生成する。ビルド部102は、生成したバイナリを記憶部106に記憶させ、CFG生成部103に処理を行うよう通知を送る(ステップA2)。
【0043】
CFG生成部103は、ビルド部102から通知を受け取ると、記憶部106から、ステップA2で生成されたバイナリを読み出し、読み出したバイナリを解析し、CFGを生成する。さらに、CFG生成部103は、生成したCFGを改ざん検知機能組み込み部104へ送る(ステップA3)。
【0044】
改ざん検知機能組み込み部104は、CFG生成部103から、ステップA3で生成されたCFGを受け取ると、受け取ったCFGを基に、改ざん検知機能呼び出し関数を組み込むソースコードの組み込み箇所を決定し、決定した組み込み箇所に改ざん検知機能呼び出し関数を組み込む。さらに、改ざん検知機能組み込み部104は、改ざん検知機能もソースコードに組み込む。これにより、改ざん検知機能組み込み部104は、改ざん検知機能呼び出し関数及び改ざん検知機能を組み込んだ改ざん検知機能組み込みソースコードを生成する。さらに、改ざん検知機能組み込み部104は、生成した改ざん検知機能組み込みソースコードを記憶部106に記憶させ、ビルド部102に処理を行うよう通知を送る(ステップA4)。
【0045】
ビルド部102は、改ざん検知機能組み込み部104から通知を受け取ると、記憶部106から、ステップA4で生成された改ざん検知機能組み込みソースコードを読み出し、読み出した改ざん検知機能組み込みソースコードをビルドし、改ざん検知機能組み込みバイナリを生成する。ビルド部102は、生成した改ざん検知機能組み込みバイナリを記憶部106に記憶させ、CFG生成部103に処理を行うよう通知を送る(ステップA5)。
【0046】
CFG生成部103は、ビルド部102から通知を受け取ると、記憶部106から、ステップA5で生成された改ざん検知機能組み込みバイナリを読み出し、読み出した改ざん検知機能組み込みバイナリを解析し、CFGを生成する。さらに、CFG生成部103は、生成したCFGをホワイトリスト作成部105に送る(ステップA6)。
【0047】
ホワイトリスト作成部105は、CFG生成部103から、ステップA6で生成されたCFGを受け取ると、受け取ったCFGを基に、記憶部106から改ざん検知機能組み込みバイナリを読み出す。さらに、ホワイトリスト作成部105は、CFG及び改ざん検知機能組み込みバイナリを基に、ホワイトリストをファイル形式で作成する。さらに、ホワイトリスト作成部105は、ホワイトリストを記憶部106に記憶させ、入出力部101に処理を行うよう通知を送る(ステップA7)。なお、ステップA7の詳細については後述する。
【0048】
入出力部101は、ホワイトリスト作成部105から通知を受け取ると、記憶部106から、ステップA5で生成された改ざん検知機能組み込みバイナリ及びステップA7で作成されたホワイトリストを読み出し、読み出した改ざん検知機能組み込みバイナリ及びホワイトリストを出力する(ステップA8)。
【0049】
次に、図4A及び図4Bの流れ図を参照して、図3のステップA7でホワイトリスト作成部105が行う動作について詳細に説明する。ここでは、図5も参照して説明を行う。図5は、図1のソースコードに対して、図3のステップA6までの処理を行い、改ざん検知機能呼び出し関数を組み込んだソースコード及びCFGの例を示している。また、図5の右側及び左側の関係は、図1の右側及び左側の関係と同じである。
【0050】
図4A及び図4Bを参照すると、ホワイトリスト作成部105は、CFG生成部103から、ステップA6で生成されたCFGを受け取ると、まず、受け取ったCFGがループを持つか否かを判断する(ステップB1)。ここで、CFGがループを持つ場合とは、プログラム中にループ文(例えば、C言語におけるfor文、while文など)が存在することを意味している。逆に、CFGがループを持たない場合とは、プログラム中にループ文が存在しないことを意味していると言える。後述するステップB6以降の処理では、CFGがループを持たない形にする必要がある。そのため、CFGがループを持つ場合(ステップB1がYESの場合)は、ステップB2へ進み、ステップB2でCFGからループを取り除く処理が行われる。一方、CFGがループを持たない場合(ステップB1がNOの場合)は、ステップB2をスキップして、ステップB3へ進む。
【0051】
ホワイトリスト作成部105は、ステップB1でCFGがループを持っていた場合、全てのループに対して、アドレス値の数字が大きい方から小さい方に伸びているエッジを削除する操作を行う(ステップB2)。CFGには、実行コードとその実行コードがメモリ上のどのアドレスに存在するかを示す情報が含まれている。そのため、ホワイトリスト作成部105は、その情報を用いることで、上記の操作を実現できる。
【0052】
次に、ホワイトリスト作成部105は、空のホワイトリスト(図4A及び図4BのステップB4以降では、リストと呼ぶ)を作成する(ステップB3)。ホワイトリストには、以下のステップB4~B13の作業を行うことで要素を追加する。
【0053】
まず、ホワイトリスト作成部105は、ステップA6で生成されたCFGの中に、ホワイトリストに追加されていない改ざん検知機能呼び出し関数(ここでは、フックと呼ぶ)が存在するか否かを判断する(ステップB4)。該当するフックが存在する場合(ステップB4がYESの場合)は、ステップB5に進み、該当するフックが存在しない場合(ステップB4がNOの場合)は、ホワイトリスト作成部105は、入出力部101へ通知を送り、ステップA7の処理を終了する。
【0054】
ホワイトリスト作成部105は、ステップB4で該当するフックが存在する場合(ステップB4がYESの場合)、該当するフックの中から1つのフックを選択する(ステップB5)。
以後のステップB6~B11の処理において、ステップB5で選択した当該フックが監視する監視範囲を確定する。ここでは、ホワイトリスト作成部105が、当該フックとして図5のフックH1を選択した場合を例に挙げて説明を行う。
【0055】
次に、ホワイトリスト作成部105は、当該フックを含むノードの当該フックより後の実行コードに相当するアドレス範囲を、当該フックの監視範囲に追加する(ステップB6)。当該フックとしてフックH1を選択した例では、当該フックを含むノードとは、ノード1のことであり、当該フックを含むノードの当該フックより後の実行コードに相当するアドレス範囲とは、ソースコードの2行目から5行目のことである。なお、本例ではフックH1はノード1の先頭に位置しているが、フックはノードの任意の場所にあってもよい。その場合も当該フックを含むノードの当該フックより後の実行コードに相当するアドレス範囲を、当該フックの監視範囲に追加する。
【0056】
次に、ホワイトリスト作成部105は、ステップB5で選択した当該フックを含むノードを先頭とする部分グラフを取り出す(ステップB7)。この操作は、木から当該ノードを根とする部分木を選ぶ操作と同等である(ただし、CFGには閉路が存在するため、厳密には木ではない)。当該フックとしてフックH1を選択した例では、ホワイトリスト作成部105は、ノード1を先頭とする部分グラフを取り出す。この例では、当該部分グラフには、ノード1以下の全てのノードが含まれる。
【0057】
次に、ホワイトリスト作成部105は、ステップB7で取り出した当該部分グラフの中に、当該フックを含むノード以外のノードが存在するか否か、すなわち、当該フックを含むノードが子ノードを持つか否かを判断する(ステップB8)。当該フックを含むノードが子ノードを持つ場合(ステップB8がYESの場合)は、ステップB9へ進み、子ノードを持たない場合(ステップB8がNOの場合)は、ステップB12へ進む。当該フックとしてフックH1を選択した例では、フックH1を含むノード1は、子ノード(ノード3、及び、フックH2を含むノード2)を持っている。そのため、この例では、ステップB9へ進む。
【0058】
ステップB8で、当該フックを含むノードが子ノードを持つ場合(ステップB8がYESの場合)、ホワイトリスト作成部105は、当該部分グラフの中に、当該フック以外のフックが存在するか否かを判断する(ステップB9)。当該部分グラフの中に、当該フック以外のフックが存在する場合(ステップB9がYESの場合)は、ステップB11へ進み、当該フック以外のフックが存在しない場合(ステップB9がNOの場合)は、ステップB10へ進む。当該フックとしてフックH1を選択した例では、当該部分グラフの中に、フックH1以外に、フックH2,H4,H5,H6が存在している。そのため、この例では、ステップB11へ進む。
【0059】
ステップB9で、当該部分グラフの中に、当該フック以外のフックが存在しない場合(ステップB9がNOの場合)、ホワイトリスト作成部105は、当該部分グラフから、当該フックを含むノードを取り除いた部分に相当するアドレス範囲を、当該フックの監視範囲に追加する(ステップB10)。当該フックを含むノードを、当該フックの監視範囲から取り除くのは、ステップB6で当該フックを含むノードをすでに監視範囲に追加しているからである。その後、ステップB12へ進む。ホワイトリスト作成部105は、当該フックとしてフックH1を選択したときに、仮に、図5のフックH2,H4,H5,H6が存在しなかったとすれば、ノード2,3,4,5,6の実行コードに相当するアドレス範囲を、フックH1の監視範囲に追加する。
【0060】
一方、ステップB9で、当該部分グラフの中に、当該フック以外のフックが存在する場合(ステップB9がYESの場合)、ホワイトリスト作成部105は、当該部分グラフのうち、当該フックを含むノードを先頭ノードとし、フックのないノードのみで構成された部分グラフを取り出す。そして、ホワイトリスト作成部105は、取り出した部分グラフから、当該フックを含むノードを取り除いた部分に相当するアドレス範囲(範囲A)を、当該フックの監視範囲に追加する。また、当該フック以外のフックがノードの先頭にない場合、当該フック以外のフックが存在するノードであり、かつ、当該フックがあるノードあるいは範囲Aと直接つながっているノードに関して、フックより前の範囲を範囲Aに追加する(ステップB11)。当該フックを含むノードを範囲Aから取り除くのは、ステップB6で当該フックを含むノードをすでに監視範囲に追加しているからである。その後、ステップB12へ進む。当該フックとしてフックH1を選択した例では、フックH1を含むノード1を先頭ノードとする部分グラフの中で、フックを含まないノードはノード3のみである。そのため、この例では、範囲Aに相当するのはノード3となる。したがって、ノード3の実行コードに相当するアドレス範囲を、フックH1の監視範囲に追加する。また、仮に、ノード5がフックを含むノードではなかった場合、範囲Aはノード3及びノード5の実行コードに相当するアドレス範囲となる。別の例として、ノード5のフックH5がノード5の途中にあった場合、ノード5の先頭からフックH5の前までの範囲の実行コードのアドレス範囲を範囲Aに追加する。
【0061】
以上のステップB6~B11の処理により、ステップB5で選択した当該フックの監視範囲が確定する。当該フックとしてフックH1を選択した例では、フックH1の監視範囲は、ノード1及びノード3の実行コードに相当するアドレス範囲となる。
【0062】
次に、ホワイトリスト作成部105は、ステップB6~B11の処理により確定した当該フックの監視範囲のハッシュ値を計算する(ステップB12)。当該フックとしてフックH1を選択した例では、フックH1の監視範囲がノード1及びノード3の実行コードに相当するアドレス範囲となったため、ホワイトリスト作成部105は、このアドレス範囲のハッシュ値を計算する。
【0063】
その後、ホワイトリスト作成部105は、当該フックのフックID、当該フックの監視範囲、及び当該監視範囲のハッシュ値の組をホワイトリストに登録する(ステップB13)。ステップB13の処理が終了すると、ステップB4に戻り、ホワイトリスト作成部105は、ステップB5~B13の処理を、ステップA6で生成されたCFGの中の全てのフックに対して実行するまで繰り返す。以上の説明では、一例として、フックH1を選択したが、ホワイトリスト作成部105は、CFGの中のフックH2,H4,H5,H6に対しても同様に処理を行い、監視範囲を決定する。
【0064】
以上の図4A及び図4Bのホワイトリスト作成部105の動作のうち、CFG上の各フックの監視範囲を決定するまでの動作を要約すると、以下のようになる。ホワイトリスト作成部105は、CFG上のフックを順次選択し、選択したフックの監視範囲を決定していく。このとき、ホワイトリスト作成部105は、選択したフックを含むノードの全ての子孫ノードのうち、フックを含まないノードを辿っていく。そして、ホワイトリスト作成部105は、選択したフックを含むノードから、次のフックを含むノードの直前のノードまでを、選択したフックの監視範囲に決定する。
【0065】
[実施の形態1の効果]
次に、本実施の形態1に係る改ざん検知機能組み込み装置100の効果について説明する。
本実施の形態1によれば、ホワイトリスト作成部105は、ホワイトリストの作成において、CFGを基に、改ざん検知機能呼び出し関数の監視範囲を決定する。そのため、改ざん検知機能呼び出し関数の監視範囲を適切に決定できる。その結果、監視対象のソフトウェアにおいて、監視できないCFG上のノードの数を低減できる。
【0066】
より具体的には、本実施の形態1によれば、ホワイトリスト作成部105は、CFG上の改ざん検知機能呼び出し関数を順次選択し、選択した改ざん検知機能呼び出し関数を含むノードの全ての子孫ノードのうち、改ざん検知機能呼び出し関数を含まないノードを辿っていく。そして、ホワイトリスト作成部105は、選択した改ざん検知機能呼び出し関数を含むノードから、次の改ざん検知機能呼び出し関数を含むノードの直前のノードまでを、選択した改ざん検知機能呼び出し関数の監視範囲に決定する。そのため、選択した改ざん検知機能呼び出し関数の監視範囲には、選択した改ざん検知機能呼び出し関数を含むノード1つだけではなく、改ざん検知機能呼び出し関数を含まない子孫ノードも含めることができる。その結果、監視対象のソフトウェアにおいて、監視できないCFG上のノードの数を低減できる。
【0067】
また、本実施の形態1によれば、改ざん検知機能呼び出し関数は、CFG上のノード単位で監視を行うため、一度の監視範囲が広くなることを回避することができる。その結果、一度の監視における監視時間が低減できるため、監視時間が、改ざん検知機能を組み込む機器の動作に影響を与える可能性を低減することが期待できる。
【0068】
さらに、本実施の形態1によれば、ホワイトリスト作成部105は、CFG上のノードを辿っていくだけで、改ざん検知機能呼び出し関数の監視範囲を決定できるため、機械的な処理を行うことができる。
【0069】
[実施の形態2]
上述した実施の形態1に係る改ざん検知機能組み込み装置100は、ホワイトリストをファイル形式で出力する構成であった。
これに対して、本実施の形態2に係る改ざん検知機能組み込み装置200は、ホワイトリストをソフトウェア内に組み込んで出力する構成である。
【0070】
[実施の形態2の構成]
まず、図6を参照して、本実施の形態2に係る改ざん検知機能組み込み装置200の構成例について説明する。
図6を参照すると、本実施の形態2に係る改ざん検知機能組み込み装置200は、上述した実施の形態1に係る改ざん検知機能組み込み装置100における入出力部101、ビルド部102、及びホワイトリスト作成部105を、それぞれ、入出力部201、ビルド部202、及びホワイトリスト作成部205に置き換えたものである。改ざん検知機能組み込み装置200は、それ以外の構成については、改ざん検知機能組み込み装置100と同じであるため、詳細な説明は省略する。
【0071】
上述した実施の形態1に係る入出力部101は、ホワイトリスト作成部105から通知を受け取ると、記憶部106から改ざん検知機能組み込みバイナリ及びホワイトリストを読み出し、出力していた。
これに対して、本実施の形態2に係る入出力部201は、ビルド部202から後述する通知を受け取ると、記憶部106から、後述する、ホワイトリストをさらに組み込んだ改ざん検知機能組み込みバイナリ(以下、ホワイトリスト/改ざん検知機能組み込みバイナリと呼ぶ)を読み出し、出力する。入出力部201は、それ以外の動作については、入出力部101と同様であるため、詳細な説明は省略する。
【0072】
本実施の形態2に係るビルド部202は、上述した実施の形態1に係るビルド部102の動作に加え、次の動作を行う。ビルド部202は、ホワイトリスト作成部205から後述する通知を受け取ると、記憶部106から改ざん検知機能組み込みソースコードを読み出し、ビルドを行う。このときの改ざん検知機能組み込みソースコードには、後述するように、ソースコード形式のホワイトリストが組み込まれている。そのため、ここでビルド部202のビルドにより生成されたバイナリが、ホワイトリスト/改ざん検知機能組み込みバイナリとなる。ビルド部202は、生成したホワイトリスト/改ざん検知機能組み込みバイナリを記憶部106に記憶させ、入出力部201に処理を行うよう通知を送る。
【0073】
上述した実施の形態1に係るホワイトリスト作成部105は、ホワイトリストをファイル形式で作成し、作成したホワイトリストを記憶部106に記憶させ、入出力部101に処理を行うよう通知を送っていた。
これに対して、本実施の形態2に係るホワイトリスト作成部205は、ホワイトリストをソースコード形式で作成する。ホワイトリスト作成部205は、作成したホワイトリストを、改ざん検知組み込みソースコードの一部として、記憶部106に記憶させ、ビルド部202に処理を行うよう通知を送る。
【0074】
[実施の形態2の動作]
次に、図7の流れ図を参照して、本実施の形態2に係る改ざん検知機能組み込み装置200の全体の動作例について詳細に説明する。
本実施の形態2に係る改ざん検知機能組み込み装置200の動作は、以下の動作を除き、上述した実施の形態1に係る改ざん検知機能組み込み装置200の図3の動作と同じである。
【0075】
ステップA7においては、ホワイトリスト作成部205は、ホワイトリストをソースコード形式で作成する。ホワイトリスト作成部205は、ソースコード形式のホワイトリストを、改ざん検知組み込みソースコードの一部として、記憶部106に記憶させ、ビルド部202に処理を行うよう通知を送る。
【0076】
ステップA7の次に行われるステップA9においては、ビルド部202は、ホワイトリスト作成部205から通知を受け取ると、記憶部106から改ざん検知機能組み込みソースコードを読み出し、ビルドを行う。このときの改ざん検知機能組み込みソースコードには、ステップA7でソースコード形式のホワイトリストが組み込まれている。そのため、ここでビルド部202のビルドにより生成されたバイナリが、ホワイトリスト/改ざん検知機能組み込みバイナリとなる。ビルド部202は、生成したホワイトリスト/改ざん検知機能組み込みバイナリを記憶部106に記憶させ、入出力部201に処理を行うよう通知を送る。
【0077】
ステップA9の次に行われるステップA8においては、入出力部201は、ビルド部202から通知を受け取ると、記憶部106から、ホワイトリスト/改ざん検知機能組み込みバイナリを読み出し、読み出したホワイトリスト/改ざん検知機能組み込みバイナリを出力する。
【0078】
[実施の形態2の効果]
次に、本実施の形態2に係る改ざん検知機能組み込み装置200の効果について説明する。
本実施の形態2によれば、ビルド部202は、ソースコード形式のホワイトリストが組み込まれた改ざん検知機能組み込みソースコードのビルドを行う。入出力部201は、ビルドにより生成されたホワイトリスト/改ざん検知機能組み込みバイナリを出力する。このように、ホワイトリストをソフトウェアに組み込んでいるため、ファイル入出力が行えないような機器に組み込むソフトウェアに対しても、本開示は適用可能となる。
本実施の形態2は、それ以外の効果は、上述した実施の形態1と同じである。
【0079】
[実施の形態3]
本実施の形態3に係る改ざん検知機能組み込み装置300は、Trusted Execution Envirionment(TEE)を用いた構成である。TEEとは、外部からのメモリの一部領域へのアクセスを、ハードウェアによって制限する機能である。ここでは、外部からのアクセスが制限されたメモリ領域をSecure World(SW)と呼び、それ以外のメモリ領域をNormal World(NW)と呼ぶ。
本実施の形態3に係る改ざん検知機能組み込み装置300では、改ざん検知機能をSW側にソースコードとして組み込むことで、より安全に実行中の機器の改ざんを監視することができる。
【0080】
[実施の形態3の構成]
まず、図8を参照して、本実施の形態3に係る改ざん検知機能組み込み装置300の構成例について説明する。
図8を参照すると、本実施の形態3に係る改ざん検知機能組み込み装置300は、上述した実施の形態2に係る改ざん検知機能組み込み装置200における改ざん検知機能組み込み部104を、改ざん検知機能組み込み部304に置き換えたものである。改ざん検知機能組み込み装置300は、それ以外の構成については、改ざん検知機能組み込み装置200と同じであるため、詳細な説明は省略する。
【0081】
本実施の形態3に係る改ざん検知機能組み込み部304は、改ざん検知機能をSW側にソースコードとして組み込む。改ざん検知機能組み込み部304は、それ以外の動作については、改ざん検知機能組み込み部104と同様であるため、詳細な説明は省略する。
【0082】
[実施の形態3の動作]
次に、本実施の形態3に係る改ざん検知機能組み込み装置300の全体の動作例について詳細に説明する。
本実施の形態3に係る改ざん検知機能組み込み装置300の動作は、以下の動作を除き、上述した実施の形態2に係る改ざん検知機能組み込み装置200の図7の動作と同じである。
【0083】
ビルド部202は、上述したように、図7のステップA2、ステップA5、及びステップA9において、ビルドを行う。その際に、ビルド部202は、まず、SW側に関するビルドを行い、次に、NW側に関するビルドを行う。ステップA2及びステップA5においては、ビルド部202は、監視対象のソフトウェアの設計に応じて、以下の2つのパターンのいずれかでビルドを行うことが考えられる。
【0084】
第1のパターンは、監視対象のソフトウェアがNWのみで構成されている場合である。この場合は、改ざん検知機能組み込み部304は、改ざん検知機能のみをSW側にソースコードとして組み込み、ビルド部202は、SW側に関するビルドを行う。その後、ビルド部202は、残りの全てのソースコードに関して、NW側のソフトウェアとしてビルドを行う。
【0085】
第2のパターンは、監視対象のソフトウェアがもともとSWを利用する場合である。この場合は、改ざん検知機能組み込み部304は、SW側のソースコードとして新たに改ざん検知機能を組み込み、ビルド部202は、もともとSW側に組み込まれていたソースコードと一緒にSW側に関するビルドを行う。その後、ビルド部202は、残りの全てのソースコードを、NW側のソフトウェアとしてビルドする。なお、このようなTEEを用いたビルド方法については、既存のツールを用いて実現できるため詳細な説明は省略する。
【0086】
[実施の形態3の効果]
次に、本実施の形態3に係る改ざん検知機能組み込み装置300の効果について説明する。
本実施の形態3によれば、改ざん検知機能組み込み部304は、SWというハードウェア的に安全性が保障されたメモリ領域に改ざん検知機能を組み込む。その結果、改ざん検知機能に対する攻撃を阻止することができるため、上述した実施の形態1,2よりも、機器の安全な運用を実施することができる。
本実施の形態3は、それ以外の効果は、上述した実施の形態2と同じである。
【0087】
なお、本実施の形態3は、上述した実施の形態2を変形した例として説明したが、これには限定されない。本実施の形態3は、上述した実施の形態1を変形した例とすることも可能である。
【0088】
[実施の形態4]
次に、図9を参照して、本実施の形態4に係る改ざん検知機能組み込み装置400のハードウェア構成例について説明する。
図9を参照すると、改ざん検知機能組み込み装置400は、プロセッサ401と、メモリ402と、を含む。
【0089】
プロセッサ401は、例えば、MPU(Micro Processing Unit)、またはCPUであってもよい。プロセッサ401は、複数のプロセッサを含んでもよい。メモリ402は、揮発性メモリ及び不揮発性メモリの組み合わせによって構成される。メモリ402は、プロセッサ401から離れて配置されたストレージを含んでもよい。この場合、プロセッサ401は、図示されていないI/Oインタフェースを介してメモリ402にアクセスしてもよい。
【0090】
上述した実施の形態1,2,3に係る改ざん検知機能組み込み装置100,200,300は、それぞれ、図9に示したハードウェア構成を有することができる。上述した実施の形態1,2,3に係る改ざん検知機能組み込み装置100,200,300の入出力部101,201、ビルド部102,202、CFG生成部103、改ざん検知機能組み込み部104,304、及びホワイトリスト作成部105、205は、プロセッサ401がメモリ402に記憶されたプログラムを読み込んで実行することにより実現されてもよい。また、上述した実施の形態1,2,3に係る改ざん検知機能組み込み装置100,200,300の記憶部106は、メモリ402により実現されてもよい。
【0091】
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、改ざん検知機能組み込み装置100,200,300に供給することができる。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)を含む。さらに、非一時的なコンピュータ可読媒体の例は、CD-ROM(Read Only Memory) 、CD-R、CD-R/Wを含む。さらに、非一時的なコンピュータ可読媒体の例は、半導体メモリを含む。半導体メモリは、例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory)を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によって改ざん検知機能組み込み装置100,200,300に供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムを改ざん検知機能組み込み装置100,200に供給できる。
【0092】
以上、実施の形態を参照して本開示を説明したが、本開示は上述した実施の形態に限定されるものではない。本開示の構成や詳細には、本開示のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【0093】
100 改ざん検知機能組み込み装置
101 入出力部
102 ビルド部
103 CFG生成部
104 改ざん検知機能組み込み部
105 ホワイトリスト作成部
106 記憶部
200 改ざん検知機能組み込み装置
201 入出力部
202 ビルド部
205 ホワイトリスト作成部
300 改ざん検知機能組み込み装置
304 改ざん検知機能組み込み部
400 改ざん検知機能組み込み装置
401 プロセッサ
402 メモリ
図1
図2
図3
図4A
図4B
図5
図6
図7
図8
図9