(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-08
(45)【発行日】2024-04-16
(54)【発明の名称】ソフトウェア修正装置、ソフトウェア修正方法、及びプログラム
(51)【国際特許分類】
G06F 21/56 20130101AFI20240409BHJP
G06F 21/55 20130101ALN20240409BHJP
G06F 21/57 20130101ALN20240409BHJP
【FI】
G06F21/56
G06F21/55
G06F21/57
(21)【出願番号】P 2022530410
(86)(22)【出願日】2020-06-09
(86)【国際出願番号】 JP2020022747
(87)【国際公開番号】W WO2021250792
(87)【国際公開日】2021-12-16
【審査請求日】2022-11-29
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103894
【氏名又は名称】家入 健
(72)【発明者】
【氏名】嶋田 有佑
(72)【発明者】
【氏名】佐々木 貴之
【審査官】吉田 歩
(56)【参考文献】
【文献】特表2018-529156(JP,A)
【文献】株式会社シャニム,添付のWordファイルに仕込まれたマルウェア巧妙な攻撃メール、マクロ機能の実行で感染,2020年03月10日,[検索日 2020.09.04]インターネット:<URL http://shanimu.com/2020/03/10/post-12834/>
【文献】嶋田 有佑 ほか,バックドア検知技術の調査と今後の展望,コンピュータセキュリティシンポジウム2019論文集,日本,情報処理学会,2019年,pp.1440-1447,ISSN:1882-0840
【文献】SCHUSTER,Felix et al.,Towards Reducing the Attack Surface of Software Backdoors,CCS'13:2013 ACM SIGSAC Conference on Computer and Communication Security,ドイツ,Association for Computing Machinery,2013年,pp.851-862,ISBN:978-1-4503-2477-9
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/56
G06F 21/55
G06F 21/57
(57)【特許請求の範囲】
【請求項1】
検査対象であるソフトウェアに含まれる複数のコードブロックを特定する特定手段と、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定する検査手段と、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行する修正処理手段と、
を具備し、
前記不実行化処理は、前記バックドアブロックを前記ソフトウェアから削除する削除処理、又は、前記バックドアブロックを無効化する無効化処理を含み、
前記監視対象化処理は、前記バックドアブロックを監視するための監視コードを前記ソフトウェアに挿入する挿入処理を含み、
前記特定手段は、
前記ソフトウェアにおいて、予め定められた所定機能に対応する所定コードブロックを特定する特定処理手段と、
前記特定された所定コードブロックを起点としてコントロールフローを辿ることによって、前記ソフトウェアの構造を解析すると共に、前記所定機能以外の機能に対応するコードブロックを特定する構造解析手段と、
を具備する、
ソフトウェア修正装置。
【請求項2】
検査対象であるソフトウェアに含まれる複数のコードブロックを特定する特定手段と、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定する検査手段と、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行する修正処理手段と、
を具備し、
前記不実行化処理は、前記バックドアブロックを前記ソフトウェアから削除する削除処理、又は、前記バックドアブロックを無効化する無効化処理を含み、
前記監視対象化処理は、前記バックドアブロックを監視するための監視コードを前記ソフトウェアに挿入する挿入処理を含み、
前記修正処理手段は、前記ソフトウェアがソースコードであるか又はバイナリコードであるかを示す形態情報に基づいて、前記削除処理、前記無効化処理、及び前記挿入処理のうちから、前記バックドアブロックに対して実行する実行処理を決定する、
ソフトウェア修正装置。
【請求項3】
前記検査手段は、前記バックドアブロックがバックドアである可能性を示すスコアを決定し、
前記修正処理手段は、前記形態情報及び前記スコアに基づいて、前記削除処理、前記無効化処理、及び前記挿入処理のうちから、前記バックドアブロックに対して実行する実行処理を決定する、
請求項
2記載のソフトウェア修正装置。
【請求項4】
前記修正処理手段は、前記ソフトウェアがソースコードである場合、前記削除処理を前記実行処理として決定する、
請求項
3記載のソフトウェア修正装置。
【請求項5】
前記修正処理手段は、前記ソフトウェアがバイナリコードであり且つ前記スコアが閾値より大きい場合、前記無効化処理を前記実行処理として決定し、前記ソフトウェアがバイナリコードであり且つ前記スコアが前記閾値以下である場合、前記挿入処理を前記実行処理として決定する、
請求項
3又は
4に記載のソフトウェア修正装置。
【請求項6】
検査対象であるソフトウェアに含まれる複数のコードブロックを特定する特定手段と、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定する検査手段と、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行する修正処理手段と、
を具備し、
前記不実行化処理は、前記バックドアブロックを前記ソフトウェアから削除する削除処理、又は、前記バックドアブロックを無効化する無効化処理を含み、
前記監視対象化処理は、前記バックドアブロックを監視するための監視コードを前記ソフトウェアに挿入する挿入処理を含み、
前記修正処理手段は、前記無効化処理において、前記バックドアブロックを無効な命令に書き換える、
ソフトウェア修正装置。
【請求項7】
検査対象であるソフトウェアに含まれる複数のコードブロックを特定する特定手段と、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定する検査手段と、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行する修正処理手段と、
を具備し、
前記不実行化処理は、前記バックドアブロックを前記ソフトウェアから削除する削除処理、又は、前記バックドアブロックを無効化する無効化処理を含み、
前記監視対象化処理は、前記バックドアブロックを監視するための監視コードを前記ソフトウェアに挿入する挿入処理を含み、
前記修正処理手段は、前記ソフトウェアに含まれるページであり且つ前記バックドアブロックによって占有されているページが存在する場合、前記無効化処理において、前記ページを無効に設定する、
ソフトウェア修正装置。
【請求項8】
検査対象であるソフトウェアに含まれる複数のコードブロックを特定する特定手段と、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定する検査手段と、
前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行する修正処理手段と、
を具備するソフトウェア修正装置。
【請求項9】
コンピュータが実行するソフトウェア修正方法であって、
検査対象であるソフトウェアに含まれる複数のコードブロックを特定すること、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定すること、及び、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行すること、
を含
み、
前記不実行化処理は、前記バックドアブロックを前記ソフトウェアから削除する削除処理、又は、前記バックドアブロックを無効化する無効化処理を含み、
前記監視対象化処理は、前記バックドアブロックを監視するための監視コードを前記ソフトウェアに挿入する挿入処理を含み、
前記複数のコードブロックを特定することは、
前記ソフトウェアにおいて、予め定められた所定機能に対応する所定コードブロックを特定することと、
前記特定された所定コードブロックを起点としてコントロールフローを辿ることによって、前記ソフトウェアの構造を解析すると共に、前記所定機能以外の機能に対応するコードブロックを特定することと、
を含む、
ソフトウェア修正方法。
【請求項10】
検査対象であるソフトウェアに含まれる複数のコードブロックを特定すること、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定すること、及び、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行すること、
を含む処理を、ソフトウェア修正装置に実行させ
、
前記不実行化処理は、前記バックドアブロックを前記ソフトウェアから削除する削除処理、又は、前記バックドアブロックを無効化する無効化処理を含み、
前記監視対象化処理は、前記バックドアブロックを監視するための監視コードを前記ソフトウェアに挿入する挿入処理を含み、
前記複数のコードブロックを特定することは、
前記ソフトウェアにおいて、予め定められた所定機能に対応する所定コードブロックを特定することと、
前記特定された所定コードブロックを起点としてコントロールフローを辿ることによって、前記ソフトウェアの構造を解析すると共に、前記所定機能以外の機能に対応するコードブロックを特定することと、
を含む、
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ソフトウェア修正装置、ソフトウェア修正方法、及び非一時的なコンピュータ可読媒体に関する。
【背景技術】
【0002】
特許文献1では、ソフトウェアにウィルスが存在することが疑われる場合、そのソフトウェアを管理システムから削除する技術が提案されている。
【0003】
ところで、インフラや企業システムは、複雑化している。このため、インフラや企業システムは、単一の企業のデバイスだけで構成されるのではなく、様々な企業のデバイスを外部から調達しそれらを組み合わせて、構築されている。
【0004】
そして、近年、これらのデバイスにおいてソフトウェア(ファームウェア)およびハードウェアの両面で、ユーザが認知していない隠された機能又はユーザが予期していない機能が発見される、インシデントが多数報告されている。すなわち、「バックドア」に関連する多数のインシデントが報告されている。「バックドア」とは、例えば、複数の機能を含むソフトウェアに対して該ソフトウェアの一部として組み込まれた、ユーザに知らされていない且つ望まれていない機能として定義できる。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明者は、ソフトウェアにバックドアである可能性があるコードブロック(バックドアブロック)が発見されたときに、特許文献1の技術と同様にソフトウェア全体を削除すると、大部分のコードブロックがバックドアブロックではなく正常であるソフトウェアを利用できない課題を見出した。換言すれば、本発明者は、バックドアブロックを含むソフトウェアを有効利用したいニーズを見出した。
【0007】
本開示の目的は、バックドアブロックを含むソフトウェアの利用を可能にする、ソフトウェア修正装置、ソフトウェア修正方法、及び非一時的なコンピュータ可読媒体を提供することにある。
【課題を解決するための手段】
【0008】
第1の態様にかかるソフトウェア修正装置は、検査対象であるソフトウェアに含まれる複数のコードブロックを特定する特定手段と、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定する検査手段と、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行する修正処理手段と、
を具備する。
【0009】
第2の態様にかかるソフトウェア修正方法は、検査対象であるソフトウェアに含まれる複数のコードブロックを特定すること、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定すること、及び、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行すること、
を含む。
【0010】
第3の態様にかかる非一時的なコンピュータ可読媒体は、検査対象であるソフトウェアに含まれる複数のコードブロックを特定すること、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定すること、及び、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行すること、
を含む処理を、ソフトウェア修正装置に実行させるプログラムが格納している。
【発明の効果】
【0011】
本開示により、バックドアブロックを含むソフトウェアの利用を可能にする、ソフトウェア修正装置、ソフトウェア修正方法、及び非一時的なコンピュータ可読媒体を提供することができる。
【図面の簡単な説明】
【0012】
【
図1】第1実施形態におけるソフトウェア修正装置の一例を示すブロック図である。
【
図2】第2実施形態におけるソフトウェア修正装置の一例を示すブロック図である。
【
図3】コントロールフローグラフの説明に供する図である。
【
図5】第2実施形態におけるソフトウェア修正装置の処理動作の一例を示すフローチャートである。
【
図6】ソフトウェア修正装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【0013】
以下、図面を参照しつつ、実施形態について説明する。なお、実施形態において、同一又は同等の要素には、同一の符号を付し、重複する説明は省略される。
【0014】
<第1実施形態>
図1は、第1実施形態におけるソフトウェア修正装置の一例を示すブロック図である。
図1においてソフトウェア修正装置10は、特定部11と、検査部12と、修正処理部13とを有している。
【0015】
ソフトウェア修正装置10は、検査対象であるソフトウェア(以下では、単に「対象ソフトウェア」と呼ぶことがある)を受け取る。対象ソフトウェアは、コンパイル前のソースコードであってもよいし、コンパイル後のバイナリコードであってもよい。
【0016】
特定部11は、対象ソフトウェアに含まれる複数の「コードブロック」を特定する。「コードブロック」は、例えば、対象ソフトウェアに含まれる機能に対応する機能ブロックであってもよいし、機能ブロックよりも小さい単位のベーシックブロックであってもよい。
【0017】
検査部12は、特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックを「バックドアブロック(バックドアブロック候補)」として特定する。
【0018】
修正処理部13は、対象ソフトウェアにおけるバックドアブロックに対して、「不実行化処理」又は「監視対象化処理」を実行する。「不実行化処理」は、バックドアブロックを実行されない状態にする処理である。「不実行化処理」は、バックドアブロックを対象ソフトウェアから削除する「削除処理」、又は、バックドアブロックを無効化する「無効化処理」を含んでいてもよい。また、「監視対象化処理」は、バックドアブロックが実行されるときに監視される対象にするための処理である。「監視対象化処理」は、バックドアブロックを監視するための「監視コード」を対象ソフトウェアに挿入する「挿入処理」を含んでいてもよい。
【0019】
以上で説明したソフトウェア修正装置10の構成によれば、バックドアブロックを含む対象ソフトウェアの全体を無効化するのではなく、対象ソフトウェアにおけるバックドアブロックを実行されない状態にするか又は監視対象にすることができる。これにより、バックドアブロックを含むソフトウェアの利用を可能にすることができ、バックドアブロックを含むソフトウェアを有効利用することができる。
【0020】
なお、ソフトウェア修正装置10は、次のソフトウェア修正方法を実行している。このソフトウェア修正方法は、検査対象であるソフトウェアに含まれる複数のコードブロックを特定すること、特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定すること、及び、前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行すること、を含む。
【0021】
<第2実施形態>
第2実施形態は、より具体的な実施形態に関する。
【0022】
<ソフトウェア修正装置の構成例>
図2は、第2実施形態におけるソフトウェア修正装置の一例を示すブロック図である。
図2においてソフトウェア修正装置20は、特定部21と、検査部22と、修正処理部23とを有している。
【0023】
特定部21は、第1実施形態の特定部11と同様に、対象ソフトウェアに含まれる複数の「コードブロック」を特定する。例えば、特定部21は、
図2に示すように、特定処理部21Aと、構造解析部21Bとを含む。
【0024】
特定処理部21Aは、対象ソフトウェアの形態、つまり、対象ソフトウェアがソースコードであるかバイナリコードであるかを特定する。以下では、対象ソフトウェアの形態に関する情報を、「形態情報」と呼ぶことがある。
【0025】
また、特定処理部21Aは、対象ソフトウェアにおいて、「予め定められた所定機能」に対応する「所定コードブロック」を特定する。「予め定められた所定機能」は、例えば、「インタフェース機能」、「認証機能(認証ルーチン)」、及び「コマンドパーサ機能(パーサルーチン)」等である。すなわち、「予め定められた所定機能」は、それの後に種々の機能が続く機能である。つまり、「予め定められた所定機能」は、対象ソフトウェアについてのコントロールフローグラフにおいて起点となるコードブロックに対応する。
【0026】
特定処理部21Aは、例えば、複数の所定機能と各所定機能に対応する所定コードブロックの特徴とを対応付けた「特定ルールテーブル(「第1特定テーブル」)」を用いて、所定コードブロックを特定してもよい。この場合、特定処理部21Aは、特定ルールテーブルに保持されている各所定コードブロックの特徴にマッチする、対象ソフトウェアの部分を、所定コードブロックとして特定する。また、特定処理部21Aは、テーブルの代わりに、所定機能を特定するための1つもしくは複数のアルゴリズムやモジュールを実行し、所定コードブロックを特定してもよい。
【0027】
構造解析部21Bは、特定処理部21Aにて特定された所定コードブロックを起点としてコントロールフローを辿ることによって、対象ソフトウェアの構造を解析すると共に、所定機能以外の機能に対応するコードブロックを特定する。例えば、構造解析部21Bは、特定処理部21Aによって特定された認証機能のコードブロックを起点としてコントロールフローを辿ることによって、
図3に示すようなコントロールフローグラフを作成する。そして、構造解析部21Bは、「特定ルールテーブル(「第2特定テーブル」)」を用いて、所定機能以外の機能に対応するコードブロックを特定する。「第2特定テーブル」は、起点となるコードブロックの種別と、該種別に応じて特定すべき特定対象コードブロックの特徴とを対応付けている。例えば、「第2特定テーブル」において、起点となるコードブロックである「認証機能のコードブロック」に対しては、「特定対象コードブロックの特徴」として、「コントロールフローグラフにおいて認証ルーチンを通った後に存在するコードブロック」が対応付けられている。また、例えば、「第2特定テーブル」において、起点となるコードブロックである「コマンドパーサ機能のコードブロック」に対しては、「特定対象コードブロックの特徴」として、「パーサによって入力をパースした後にディスパッチされるコマンド又は関数を含む機能ブロック」が対応付けられている。なお、
図3に示すコントロールフローグラフにおいて、「認証機能のコードブロック」及び「(
図3にて丸で示されている)特定対象コードブロック」は、それぞれ「ノード」と呼ぶこともできる。また、
図3に示すコントロールフローグラフにおいて、矢印は、コントロールフローに対応する。
【0028】
検査部22は、第1実施形態の検査部12と同様に、バックドアブロックを特定する。
【0029】
第1の例として、検査部22は、特定部21によって特定された複数のコードブロックのうちから、「仕様書に記載がない固定値との比較を操作するコードブロック」を特定し、この特定されたコードブロックを「バックドアブロック」として特定する。
【0030】
第2の例として、検査部22は、特定部21によって特定された複数のコードブロックのうちから、コントロールフローグラフにおいて、認証コードブロックを通らずに、認証が必要な実行部分に対応するコードブロックに至るパスが存在するときに、そのパスに対応するコードブロックを「バックドアブロック」として特定する。
【0031】
第3の例として、検査部22は、特定部21によって特定された複数のコードブロックのうちから、仕様書に記載が無いコマンド(又は関数)を含むコードブロックを「バックドアブロック」として特定する。
【0032】
第4の例として、検査部22は、特定部21によって特定された複数のコードブロックのうちから、特定部21にて作成されたコントロールフローグラフから辿ることができないコードブロック(つまり、死んでいるコード(デッドコード))を「バックドアブロック」として特定する。
図4は、デッドコードの説明に供する図である。
【0033】
第5の例として、検査部22は、特定部21によって特定された複数のコードブロックのうちから、仕様書に記載されていない挙動を示す可能性のあるコードブロックを「バックドアブロック」として特定する。
【0034】
そして、検査部22は、特定した各バックドアブロックに対して、「バックドアスコア」を付与する。例えば、検査部22は、特定した各バックドアブロックに対して、バックドアブロックのタイプに応じた「バックドアスコア」を付与する。「バックドアスコア」は、スコア値が高いほどバックドアである可能性が高いことを示している。検査部22は、バックドアブロックの複数のタイプと各タイプに応じたバックドアスコアとを対応づけた「スコアテーブル」を用いて、特定した各バックドアブロックに対して、タイプに応じたバックドアスコアを付与してもよい。
【0035】
例えば、「スコアテーブル」において、上記の第1の例から第4の例のそれぞれに対応するバックドアタイプには、後述する「判定閾値」よりも大きいバックドアスコア値が対応づけられ、上記の第5の例に対応するバックドアタイプには、その「判定閾値」以下のバックドアスコア値が対応づけられている。
【0036】
修正処理部23は、第1実施形態の修正処理部13と同様に、対象ソフトウェアにおけるバックドアブロックに対して、「不実行化処理」又は「監視対象化処理」を実行する。
【0037】
例えば、修正処理部23は、特定部21にて特定された「形態情報」に基づいて、「削除処理」、「無効化処理」、及び「挿入処理」のうちから、バックドアブロックに対して実行する「実行処理」を決定する。例えば、修正処理部23は、特定部21から受け取る「形態情報」がソースコードを示す場合、「削除処理」を「実行処理」として決定する。なお、「削除処理」が行われる場合には、バックドアブロックが削除された対象ソフトウェアを実際に実行して問題がないか否かについて確認されてもよい。
【0038】
一方、修正処理部23は、「形態情報」がバイナリコードを示す場合、「無効化処理」又は「挿入処理」を「実行処理」として決定する。例えば、修正処理部23は、処理対象のバックドアブロックに対応する形態情報がバイナリコードを示し且つ処理対象のバックドアブロックに対応するバックドアスコア値が「判定閾値」よりも大きい場合、「無効化処理」を「実行処理」として決定する。また、修正処理部23は、処理対象のバックドアブロックに対応する形態情報がバイナリコードを示し且つ処理対象のバックドアブロックに対応するバックドアスコア値が「判定閾値」以下である場合、「挿入処理」を「実行処理」として決定する。
【0039】
例えば、修正処理部23は、「無効化処理」において、バックドアブロックを「無効な命令」に書き換える。「無効な命令」は、例えば、NOP(No OPeration)命令や例外処理を行う命令である。また、バイナリコードは、メモリ管理において、複数のページに渡って管理されることがある。このため、修正処理部23は、ソフトウェアにてバックドアブロックによって占有されているページが存在する場合、「無効化処理」において、そのページを無効に設定してもよい。
【0040】
また、例えば、修正処理部23は、「挿入処理」において、バイナリ計装(Binary instrumentation)によって監視コードを対象ソフトウェアに挿入してもよい。監視コードは、例えば、バックドアブロックが実行されたときに、ログを収集するコードであってもよいし、アラートを出力するコードであってもよい。
【0041】
ここで、バイナリコードの中に新しいコードを追加すること、及び、バイナリコードの中に存在するコードを削除することは、技術的に難しい。そのため、バイナリコードに修正を加える際には、バイナリコードの中にあるコード(命令)を書き換えるか、バイナリ計装によってコードを挿入している。一方で、ソースコードに修正を加える際には、ソースコードからバックドアコードを削除する。そして、バックドコードを削除した後のソースコードをコンパイルしてバイナリコードを作成すればよい。
【0042】
<ソフトウェア修正装置の動作例>
以上の構成を有するソフトウェア修正装置20の処理動作の一例について説明する。
図5は、第2実施形態におけるソフトウェア修正装置の処理動作の一例を示すフローチャートである。
【0043】
特定部21は、対象ソフトウェアを受け取り、この対象ソフトウェアの形態を特定する(ステップS101)。
【0044】
特定部21は、対象ソフトウェアに含まれる複数のコードブロックを特定する(ステップS102)。
【0045】
検査部22は、バックドアブロックを特定し、特定したバックドアブロックに対してタイプに応じたバックドアスコアを付与する(ステップS103)。
【0046】
修正処理部23は、対象ソフトウェアがソースコードであるか否かを判定する(ステップS104)。
【0047】
対象ソフトウェアがソースコードである場合(ステップS104YES)、修正処理部23は、対象ソフトウェアからバックドアブロックを削除する(ステップS105)。なお、ステップS103で複数のバックドアブロックが特定された場合、すべてのバックドアブロックを対象ソフトウェアから削除する。
【0048】
対象ソフトウェアがソースコードでない場合、つまり、対象ソフトウェアがバイナリコードである場合(ステップS104NO)、修正処理部23は、ステップS103で特定されたバックドアブロックに付与されたバックドアスコアが判定閾値より大きいか否かを判定する(ステップS106)。
【0049】
バックドアスコアが判定閾値より大きい場合(ステップS106YES)、修正処理部23は、バックドアブロックに対して「無効化処理」を実行する(ステップS107)。また、バックドアスコアが判定閾値以下である場合(ステップS106NO)、修正処理部23は、対象ソフトウェアにおいてバックドアブロックの前に監視コードを挿入する挿入処理を実行する(ステップS108)。
【0050】
なお、ステップS103で複数のバックドアブロックが特定された場合、修正処理部23は、複数のバックドアブロックに対してステップS106,S107,S108の処理ステップを繰り返すことになる。
【0051】
以上で説明したように第2実施形態によれば、ソフトウェア修正装置20にて修正処理部23は、対象ソフトウェアがソースコードであるか又はバイナリコードであるかを示す「形態情報」に基づいて、「削除処理」、「無効化処理」、及び「挿入処理」のうちから、バックドアブロックに対して実行する「実行処理」を決定する。
【0052】
このソフトウェア修正装置20の構成により、対象ソフトウェアの形態にマッチした、バックドアブロックに対する対処が可能となる。
【0053】
また、ソフトウェア修正装置20にて修正処理部23は、形態情報に加えてバックドアスコアに基づいて、削除処理、無効化処理、及び挿入処理のうちから、バックドアブロックに対して実行する実行処理を決定する。バックドアスコアは、バックドアブロックがバックドアである可能性を示すスコアである。
【0054】
このソフトウェア修正装置20の構成により、バックドアである可能性に応じた、バックドアブロックに対する対処が可能となる。
【0055】
<他の実施形態>
図6は、ソフトウェア修正装置のハードウェア構成例を示す図である。
図6においてソフトウェア修正装置は、プロセッサ101と、メモリ102とを有している。プロセッサ101は、例えば、マイクロプロセッサ、MPU(Micro Processing Unit)、又はCPU(Central Processing Unit)であってもよい。プロセッサ101は、複数のプロセッサを含んでもよい。メモリ102は、揮発性メモリ及び不揮発性メモリの組み合わせによって構成される。メモリ102は、プロセッサ101から離れて配置されたストレージを含んでもよい。この場合、プロセッサ101は、図示されていないI/Oインタフェースを介してメモリ102にアクセスしてもよい。
【0056】
第1実施形態及び第2実施形態のソフトウェア修正装置10,20は、それぞれ、
図6に示したハードウェア構成を有することができる。第1実施形態及び第2実施形態のソフトウェア修正装置10,20の特定部11,21と、検査部12,22と、修正処理部13,23とは、プロセッサ101がメモリ102に記憶されたプログラムを読み込んで実行することにより実現されてもよい。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、ソフトウェア修正装置10,20に供給することができる。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)を含む。さらに、非一時的なコンピュータ可読媒体の例は、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)によってソフトウェア修正装置10,20に供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをソフトウェア修正装置10,20に供給できる。
【0057】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0058】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0059】
(付記1)
検査対象であるソフトウェアに含まれる複数のコードブロックを特定する特定手段と、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定する検査手段と、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行する修正処理手段と、
を具備するソフトウェア修正装置。
【0060】
(付記2)
前記不実行化処理は、前記バックドアブロックを前記ソフトウェアから削除する削除処理、又は、前記バックドアブロックを無効化する無効化処理を含み、
前記監視対象化処理は、前記バックドアブロックを監視するための監視コードを前記ソフトウェアに挿入する挿入処理を含む、
付記1記載のソフトウェア修正装置。
【0061】
(付記3)
前記特定手段は、
前記ソフトウェアにおいて、予め定められた所定機能に対応する所定コードブロックを特定する特定処理手段と、
前記特定された所定コードブロックを起点としてコントロールフローを辿ることによって、前記ソフトウェアの構造を解析すると共に、前記所定機能以外の機能に対応するコードブロックを特定する構造解析手段と、
を具備する、
付記2記載のソフトウェア修正装置。
【0062】
(付記4)
前記修正処理手段は、前記ソフトウェアがソースコードであるか又はバイナリコードであるかを示す形態情報に基づいて、前記削除処理、前記無効化処理、及び前記挿入処理のうちから、前記バックドアブロックに対して実行する実行処理を決定する、
付記2又は3に記載のソフトウェア修正装置。
【0063】
(付記5)
前記検査手段は、前記バックドアブロックがバックドアである可能性を示すスコアを決定し、
前記修正処理手段は、前記形態情報及び前記スコアに基づいて、前記削除処理、前記無効化処理、及び前記挿入処理のうちから、前記バックドアブロックに対して実行する実行処理を決定する、
付記4記載のソフトウェア修正装置。
【0064】
(付記6)
前記修正処理手段は、前記ソフトウェアがソースコードである場合、前記削除処理を前記実行処理として決定する、
付記5記載のソフトウェア修正装置。
【0065】
(付記7)
前記修正処理手段は、前記ソフトウェアがバイナリコードであり且つ前記スコアが閾値より大きい場合、前記無効化処理を前記実行処理として決定し、前記ソフトウェアがバイナリコードであり且つ前記スコアが前記閾値以下である場合、前記挿入処理を前記実行処理として決定する、
付記5又は6に記載のソフトウェア修正装置。
【0066】
(付記8)
前記修正処理手段は、前記無効化処理において、前記バックドアブロックを無効な命令に書き換える、
付記2記載のソフトウェア修正装置。
【0067】
(付記9)
前記修正処理手段は、前記ソフトウェアに含まれるページであり且つ前記バックドアブロックによって占有されているページが存在する場合、前記無効化処理において、前記ページを無効に設定する、
付記2記載のソフトウェア修正装置。
【0068】
(付記10)
検査対象であるソフトウェアに含まれる複数のコードブロックを特定すること、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定すること、及び、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行すること、
を含むソフトウェア修正方法。
【0069】
(付記11)
検査対象であるソフトウェアに含まれる複数のコードブロックを特定すること、
特定された各コードブロックに対して、バックドアである可能性があるコードブロックであるか否かを判定して、バックドアである可能性があると判定されたコードブロックをバックドアブロックとして特定すること、及び、
前記特定されたバックドアブロックを実行されない状態にする不実行化処理、又は、前記特定されたバックドアブロックが実行されるときに監視される対象にするための監視対象化処理を、前記ソフトウェアにおける前記バックドアブロックに対して実行すること、
を含む処理を、ソフトウェア修正装置に実行させるプログラムが格納された非一時的なコンピュータ可読媒体。
【符号の説明】
【0070】
10 ソフトウェア修正装置
11 特定部
12 検査部
13 修正処理部
20 ソフトウェア修正装置
21 特定部
21A 特定処理部
21B 構造解析部
22 検査部
23 修正処理部