(57)【特許請求の範囲】
【請求項１】
コード実行制御装置において、悪質コードを検出する方法であって、
（ａ）情報量を低減することなく実質的に圧縮を受けないテストデータを生成し、前記制御装置の外部記憶装置に該テストデータをイメージデータとして記憶する段階と、
（ｂ）前記テストデータを前記制御装置の記憶装置内にロードする段階と、
（ｃ）前記制御装置の記憶装置内に記憶された前記テストデータに基づいて、チェックサム計算を実行して第１のチェックサム値を生成し、前記イメージデータに基づいて、対応するチェックサム計算を実行して第２のチェックサム値を生成し、次に、前記第１のチェックサム値を該第２のチェックサム値と比較して、前記制御装置の記憶装置内にある前記テストデータが、改ざんされているかどうかを判断する段階と、
（ｄ）悪質コードが前記制御装置内に存在するかどうかを判断するために、前記制御装置の記憶装置内にある十分なテストデータが、チェックサムテストされるまで、段階（ｃ）を繰り返す段階と
を含むことを特徴とする方法。
【請求項２】
前記制御装置は、該装置内に記憶されたソフトウェア・アプリケーションの名称を明らかにするように問合せされた後、段階（ｂ）を実行して、前記制御装置の記憶装置内の前記アプリケーションを上書きすることを特徴とする、請求項１に記載の方法。
【請求項３】
前記制御装置に悪質コードがないと判明したとき、段階（ｄ）の後に、前記制御装置によって明らかにされた前記ソフトウェア・アプリケーションの改ざんされていないバージョンが、前記制御装置にロードされることを特徴とする、請求項２に記載の方法。
【請求項４】
前記テストデータは、１つ又はそれ以上の乱数シーケンスを含むことを特徴とする、請求項１、２、又は３のいずれかに記載の方法。
【請求項５】
段階（ｃ）で行われるチェックサム計算は、前記制御装置の記憶装置のメモリ・ロケーションの１つ又はそれ以上のシーケンスに基づき、前記メモリ・ロケーションを特定するため、且つ前記チェックサム計算において使用される１つ又はそれ以上の初期設定ベクトルを特定するために、チャレンジを使用して実行されることを特徴とする、請求項１から４のいずれか１つに記載の方法。
【請求項６】
前記１つ又はそれ以上のシーケンスは、その中のメモリ・ロケーションをスキップすることを特徴とする、請求項５に記載の方法。
【請求項７】
段階（ｃ）における少なくとも１つのチェックサム計算を、前記制御装置の記憶装置内に存在するインタフェース・ソフトウェア上で行い、該インタフェース・ソフトウェアは、前記テストデータを前記制御装置の記憶装置に通信し、且つ、前記制御装置の記憶装置からデータを出力するように動作することができ、また、前記インタフェースソフトウェアが、比較のための前記イメージデータに含まれることを特徴とする、請求項１から６のいずれか１つに記載の方法。
【請求項８】
前記制御装置がチェックサム計算を出力する迅速性を、前記制御装置の記憶装置が悪質コードを含むか否の判断に使用することを特徴とする、請求項１から７のいずれか１つに記載の方法。
【請求項９】
段階（ｃ）における前記チェックサムの計算中には、前記制御装置の外部記憶装置へのアクセスを禁止することを特徴とする、請求項１から８のいずれか１つに記載の方法。
【請求項１０】
暗号ハッシュアルゴリズムが、前記チェックサムを計算するのに使用されることを特徴とする、請求項１から９のいずれか１つに記載の方法。
【請求項１１】
コード実行制御装置に問合せて、前記制御装置が悪質コードを含むか否か判断する、請求項１から１０のいずれか１つに記載の方法の適用が実施可能であるテスト装置。
【発明の詳細な説明】
【０００１】
（技術分野）
本発明は、コード実行制御装置において、悪質コードを検出する方法に関し、特にコンピュータに限定されるものではない。また、本発明は、本方法に従って動作するテスト装置に関する。
【０００２】
（背景技術）
悪質コード、例えば、コンピュータウイルスは、現代のコード実行システムにおいて、深刻な問題を引き起す場合が多い。このような悪質コードは、ロード後当初は潜在的状態にあり、その後、起動されると、システム内に記憶されたデータ及び実行可能なソフトウェアの保全性に広範なダメージを引き起こす可能性がある。
【０００３】
現在、例えば、実行可能コードを暗号化した後に使用前に復号化する、及び、秘密鍵又は公開鍵暗号法を使用した認証署名の使用など、実行可能コードの信頼性を検証する幾つかの技法が利用可能である。これらの技法は、無許可のコードがシステム内にロードされ、その中で実行されるのを防止するために採用されている。しかしながら、暗号化コード又は秘密鍵が、正規の所有者から盗まれて、第三者の所有となった場合、その第三者は、復号化コード及び対応する公開鍵に対して正しく検証する悪質コードを生成することができる。
【０００４】
発明者らは、悪質コードが第１及び第２の問題を引き起こすことを理解している。第１の問題は、悪質コードがコード実行システム内にロードされるのを防止する対策に関するものである。第２の問題は、実行可能コードがロードされたコード実行制御装置に、そのコードの信頼性に関する疑念が存在する場合、危殆化されたか否かを判断することに関するものである。例えば、悪質コードがコード実行システム内にロードされたことが疑われる状況において、そのコードを実行し続けると、コード実行システムからアクセス可能な貴重なデータベースに、高額な損害をもたらし兼ねない。逆に、コード実行システムをリセットし、その後再プログラムすると、メーカーへのシステムの返送を伴う、それ自体が高価な訓練となり兼ねない。更に、多くの状況において、例えば、悪質コードを含む装置の消去などの、他の保護対策を遂行することができるように、公開鍵などの認証手続きを通過した悪質コードを配信しようとしたか否かを知ることが不可欠となるであろう。
【０００５】
また、発明者らは、悪質コードは、該悪質コードがアクティブであるときに、コード実行制御装置内で非常に僅かなメモリスペースを占有した、及び重要な内部装置メモリ、又は該制御装置からアクセス可能な外部メモリのみを使用した巧妙な方法で構築することができる場合が多いことを理解している。このような悪質コードを検出しようとすることは、特に、大部分の時間の間はほぼ正常に機能しているように見える、外見上は正規の実行可能コードで埋め込まれたときには、非常に困難となる。
【０００６】
（発明の開示）
従って、本発明は、いつ悪質コードがコード実行制御装置内にロードされたかを検出する方法を提供しようとするものである。
【０００７】
本発明の第１の態様によれば、コード実行制御装置において悪質コードを検出する方法が提供されており、該方法は、（ａ）情報量を低減することなく実質的に圧縮を受けないテストデータを生成し、制御装置の外部記憶装置に該テストデータをイメージデータとして記憶する段階と、（ｂ）テストデータを制御装置の記憶装置内にロードする段階と、（ｃ）制御装置の記憶装置内に記憶されたテストデータに基づいて、チェックサム計算を実行して第１のチェックサム値を生成し、イメージデータに基づいて、対応するチェックサム計算を実行して第２のチェックサム値を生成し、次に、第１のチェックサム値を第２のチェックサム値と比較して、制御装置の記憶装置内にあるテストデータが、改ざんされているかどうかを判断する段階と、（ｄ）悪質コードが制御装置内に存在するかどうかを判断するために、制御装置の記憶装置内にある十分なテストデータが、チェックサムテストされるまで、段階（ｃ）を繰り返す段階とを含む。
【０００８】
本発明には、制御装置の記憶装置内のテストデータに関するチェックサム値を計算して、イメージデータに関して計算された対応するチェックサム値と比較することによって、制御装置の記憶装置内に存在する悪質コードを検出することができるという利点がある。
【０００９】
テストデータが圧縮を受けつけないことによって、制御装置の記憶装置に存在する任意の悪質コードは、テストデータを圧縮することによりその存在を隠すことができない。このテストデータは、１つ又はそれ以上の乱数シーケンスを含むことが特に好ましく、これは、乱数シーケンスが、その性質上、関連の情報を損失することなく圧縮することができないためである。
【００１０】
好都合には、本発明は更に、該装置内に記憶されたソフトウェア・アプリケーションの名称を明らかにするように問合せされた後、段階（ｂ）を実行して、前記制御装置の記憶装置内の前記アプリケーションを上書きする段階を含む。
【００１１】
制御装置に悪質コードがないことを確立するために、本発明が適用される場合、制御装置によって明らかにされたソフトウェア・アプリケーションの改ざんされていないバージョンが、段階（ｄ）の後に制御装置にロードされることが好ましい。このような改ざんされていないソフトウェアのロードによって、制御装置は、本方法を適用する前の以前の状態に戻すことができる。
【００１２】
制御装置内にある悪質コードが、本方法を実行するときに必要とされるチェックサム値を予測することをより困難にするために、段階（ｃ）において行われるチェックサム計算は、制御装置の記憶装置のメモリ・ロケーションの１つ又はそれ以上のシーケンス上に基づいて、制御装置に発行されたチャレンジに応じて実行され、各チャレンジは、暗号チェックサム計算を用いてチェックサムされる制御装置のメモリ・ロケーションと、及びまた、計算を開始する１つ又はそれ以上の関連付けられた初期設定ベクトルとを指定することが有益である。悪質コードは、選択されたメモリ・ロケーション又は本方法で使用される初期設定ベクトルを予測することはできないので、悪質コードがチェックサム値を予め計算してその後にテストデータを圧縮して、悪質コードの存在を隠すことは更に困難である。
【００１３】
有利には、悪質コードが自身を隠すのを更に困難にするために、上述の１つ又はそれ以上のシーケンスが、その中でメモリ・ロケーションをスキップすることができる。このようなロケーションのスキップは、制御装置の記憶装置を幾つかの異なる方法でテストすることができ、その結果、悪質コードが自身を隠すことが更に困難になるという利点を提供する。
【００１４】
段階（ｃ）における少なくとも１つのチェックサム計算は、制御装置の記憶装置内にあるインタフェースソフトウェア上で行われ、このインタフェースソフトウェアが、テストデータを制御装置の記憶装置に通信し、且つ、制御装置の記憶装置からデータを出力するように動作することができ、また、このインタフェースソフトウェアは、比較のためのイメージデータ内に含まれることが好ましい。インタフェースソフトウェアのこのようなテストは、その中に悪質コードが存在する危険を低減するのに役立つ。
【００１５】
有益なことには、本方法は、制御装置の記憶装置が悪質コードを含むか否かを判断するのに、制御装置がチェックサム計算を出力する迅速性を利用することができる。悪質コードが存在する場合、悪質コードがチェックサム計算からその正体を隠すには、更に多くの段階を必要とすることが多い。
【００１６】
本方法に従って制御装置をテストするとき、制御装置は、段階（ｃ）のチェックサム計算中に、制御装置の外部記憶装置へのアクセスを禁止するのが好ましい。制御装置がそのような外部記憶装置と通信することができる場合、悪質コードは、このような外部記憶装置内に存在することによってその正体を隠すことができ、或いは、外部記憶装置にテストデータを記憶して、悪質コードの存在を制御装置内に隠すことが可能である。
【００１７】
段階（ｃ）において、暗号ハッシュアルゴリズムがチェックサムの計算に使用されることが好ましい。暗号ハッシュアルゴリズムによって生成されたチェックサムは模擬することが困難であり、従って、このようなアルゴリズムの使用によって、悪質コードが、その存在を制御装置内で隠すことがさらに困難になる。適切な暗号ハッシュアルゴリズムの例は、以下である。
（ａ）インターネット技術特別調査委員会（ＩＥＴＦ）文書、ＲＦＣ  １３２１、「ＭＤ５  Ｍｅｓｓａｇｅ−Ｄｉｇｅｓｔ  Ａｌｇｏｒｉｔｈｍ」（１９９２年）で定義された「ＭＤ５」、及び（ｂ）米国国立標準技術研究所（ＮＩＳＴ）文書、「ＦＩＰＳ  Ｐｕｂｌｉｃａｔｉｏｎ  １８０：Ｓｅｃｕｒｅ  Ｈａｓｈ  Ｓｔａｎｄａｒｄ（ＳＨＳ）」（１９９３年）、及び「Ａｎｎｏｕｎｃｅｍｅｎｔ  ｏｆ  Ｗｅａｋｎｅｓｓ  ｉｎ  ｔｈｅ  Ｓｅｃｕｒｅ  Ｈａｓｈ  Ｓｔａｎｄａｒｄ」（１９９４）で定義された「ＳＨＡ−１」
【００１８】
本発明の第２の態様において、コード実行制御装置に問合せて、制御装置が悪質コードを含むか否か判断する本発明の第１の態様による方法を適用可能なテスト装置を提供する。
【００１９】
ここで、本発明の実施形態について例証としてのみ、以下の図を参照しながら説明する。
【００２０】
（発明を実施するための最良の形態）
ここで図１によれば、１０で表されたコード実行制御装置のハードウェアが示されている。該制御装置１０は、筐体２０、主記憶装置３０、コード実行プロセッサ４０、及び関連する随時読取り/書込みメモリ（ＲＡＭ）５０を含む。ＲＡＭ５０、プロセッサ４０、及び主記憶装置３０は、プロセッサ４０がＲＡＭ５０及び記憶装置３０内のデータにアクセスし、又データを記憶することができるように電気的に又は光学的に相互接続されている。更に、制御装置１０は、該制御装置１０の外部にあるネットワーク７０と通信するための電気的又は光学的なインタフェース６０を含む。ネットワーク７０は、例えば、テスト制御装置、又は替わりに、相互接続されたコンピュータ装置のネットワークとすることができる。
【００２１】
制御装置１０が携帯用コード実行制御装置である場合、ＲＡＭ５０は、通常２５６バイトのデータ記憶容量を含む。更に、主記憶装置３０は、通常８Ｍバイトのデータ記憶容量を含むＥ2ＲＯＭ不揮発性メモリの形で提供される。更に、プロセッサ４０は、通常、インタフェース６０を与える双方向バッファポートを含む、８ビット又は１６ビットマイクロコントローラとして提供される。
【００２２】
また、制御装置１０は、替わりに、プロセッサ４０が相互接続されたデジタル・プロセッサ・アレイを備え、ＲＡＭ５０が多くのギガバイトの半導体データ記憶容量を備え、主記憶装置３０が多くのギガバイトの記憶容量を有する光学的、磁気的、及び半導体のデータ記憶媒体を含む大規模コンピュータとすることができる。
【００２３】
動作においては、外部ネットワーク７０は、インタフェース６０を介して制御装置１０と通信する。ネットワーク７０が実行可能コードを制御装置１０に送ると、制御装置１０は、該コードを主記憶装置３０に記憶する。更に、プロセッサ４０には、状況に応じて適用された処理の有無を問わず、データの特定項目の記憶、又は、データの特定項目の主記憶装置３０からの出力を指示することができる。主記憶装置３０は、例えば、取り外されている制御装置１０に電力が供給されている場合でさえ、中に記憶されているデータを保持するように動作可能である。
【００２４】
ここで、実行可能コード、即ちソフトウェアに関して制御装置１０が構成されている方法について、図１及び図２を参照しながら説明する。実行可能コード、即ちアプリケーション１からｎまでが、ここで、ｎは０を含まない正の整数、主記憶装置３０に記憶されており、ハンドラとして知られている実行可能コードオブジェクト１００のソフトウェア制御の下で動作するインタフェース６０を介して制御装置１０にロードされる。ハンドラ１００は、ネットワーク７０と、主記憶装置３０と、ＲＡＭ５０との間のデータ及び実行可能コードの全てのフローを処理する。
【００２５】
制御装置１０が、ネットワーク７０と共に動作しているとき、ネットワーク７０は、ハンドラ１００を介して主記憶装置３０にアクセスすることができる。或いは、ネットワーク７０は、プロセッサ４０の１つ又はそれ以上のアプリケーションの実行を開始するように、ハンドラ１００に指示することができ、ハンドラ１００は、同時に、制御装置１０とのデータフローのやりとりを処理するための１つ又はそれ以上のアプリケーションを実行する。
【００２６】
従って、通常の状況においては、ネットワーク７０は、ハンドラ１００を介して制御装置１０と通信することのみが可能である。
【００２７】
アプリケーションを制御装置１０にロードする前に、該アプリケーションは、その信頼性を保証するための供給側当事者の秘密鍵を使用して、該当事者によって署名される。その後、ネットワーク７０及び、また必要であればハンドラ１００は、秘密鍵に対応する公開鍵を使用してアプリケーションを検証することができる。このような認証手順によって、制御装置１０が無許可の悪質アプリケーションをその主記憶装置３０にロードするリスクが低減される。
【００２８】
ソフトウェアを認証するための秘密鍵と対応する公開鍵のペアの使用は公知であり、この鍵はコードからなる。該コードは、ペアの一方のコードが、単にそのペアの他方のコードの知識からは合理的に生成することはできないものとなっている。供給側当事者が、制御装置１０内に記録するためのソフトウェア・アプリケーションをネットワーク７０に供給する場合、供給側当事者は、その鍵の１つを使用してアプリケーションに「署名」し、ネットワーク７０には明かされない「秘密鍵」としてこの鍵を秘密に保つ。しかしながら、供給側当事者は、ペアの鍵の他方をネットワーク７０に、そして、そこから制御装置１０に明らかにするが、これは、供給側当事者の「公開鍵」として知られている。従って、供給側当事者によって供給された公開鍵は、供給側当事者が所有する秘密鍵を使用して署名されたアプリケーションの信頼性を検証するために、ネットワーク７０及び制御装置１０により使用されることができる。
【００２９】
秘密鍵及び公開鍵の生成は、米国特許第４，２００，７７０号から知られており、相補的な鍵の生成に関して、引用により本明細書に組み込まれる。秘密鍵及び公開鍵は、通常、約２００バイトの長さがであり、該米国特許で説明されている数学的変換を用いて生成することができる。
【００３０】
ここで、秘密鍵を使用するソフトウェア・アプリケーションの従来の「署名」について更に詳細に説明する。
【００３１】
第１のアプローチにおいて、「署名」は、対応する暗号化アプリケーションを生成するための秘密鍵を使用した、ソフトウェア・アプリケーション全体の暗号化を含む。暗号化アプリケーションは、秘密鍵に対応する公開鍵を使用して復号化することができる。他の関係のない公開鍵では、暗号化ソフトウェア・アプリケーションの復号化に成功して、制御装置１０で使用される実行可能な実行可能コードを生成することはできない。ハンドラ１００が、復号化を行うときにこのような実行不能な実行可能コードを発見した場合、ハンドラ１００は、それによりこの実行可能コードは信頼できず、主記憶装置３０内で実行又は保持すべきではないと判断する。
【００３２】
第２のアプローチにおいて、「署名」は、供給側当事者と、ネットワーク７０及び制御装置１０との両方に既知のチェックサム生成プログラムを使用して、ソフトウェア・アプリケーションの暗号チェックサムを計算する。公知の暗号チェックサム生成プログラムには、「Ｍｅｓｓａｇｅ  Ｄｉｇｅｓｔ５」（ＭＤ５）及び「Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ」（ＳＨＡ又はＳＨＡ−１）などがある。チェックサムは、比較的短く、通常、長さが１６バイトから２０バイトまでの範囲にある。供給側当事者は、秘密鍵を使用して、ソフトウェア・アプリケーションの周知のチェックサム生成プログラムを用いて生成されたチェックサムを暗号化し、次に、メッセージ認証コード（ＭＡＣ）とも呼ばれる暗号化されたチェックサムと共に暗号化されていないソフトウェア・アプリケーションをネットワーク７０に、及びそこから制御装置１０に供給することができる。ネットワーク７０が、ソフトウェア・アプリケーションを供給側当事者から受け取ると、ネットワーク７０、同様に制御装置１０は、周知のチェックサム生成プログラムを適用して、暗号化されていないソフトウェア・アプリケーション用のオペレータ・チェックサムを生成することができる。次に、ネットワーク７０及び制御装置１０は、供給側当事者によって供給された暗号チェックサムを、供給側当事者の公開鍵を使用して復号化して復号化チェックサムを生成することができ、次に、ネットワーク７０及び制御装置１０は、復号化チェックサムをオペレータチェックサムと比較する。復号化チェックサムがオペレータチェックサムと全く同じである場合、ネットワーク７０及び制御装置１０は、それによりそのソフトウェア・アプリケーションを信頼できると判断することになる。復号化されたチェックサムとオペレータチェックサムが同じではない場合、ネットワーク７０及び制御装置１０は、そのソフトウェア・アプリケーションは疑わしいと特定したことになる。
【００３３】
ソフトウェア・アプリケーションに「署名」する第２のアプローチの方が、第１のアプローチよりも速く且つ計算量が少いが、これは、チェックサム生成が実行上で計算的に短時間の作業であり、１６バイトから２０バイトのチェックサムの暗号化は、例えば、数十メガバイトのサイズになり兼ねないソフトウェア及びデータ全体の暗号化よりも簡単であるからである。
【００３４】
「署名」という用語は、発明者らによって発明を説明するために使用される場合、上述のように、第１のアプローチによる署名又は第２のアプローチによる署名をいうことを意図する。
【００３５】
ネットワーク７０へ、及びそこから制御装置１０へソフトウェア・アプリケーションを供給する当事者の秘密鍵が、第三者によって盗まれた場合には問題が起こる可能性がある。この後、この第三者は、悪質なコードを作成し、秘密鍵を用いて署名して、その悪質コードをソフトウェア・アプリケーションとして、ネットワーク７０に供給することができる。ネットワーク７０及び制御装置１０はいずれも、対応する公開鍵を使用してそのアプリケーションの信頼性をチェックする際、悪質なコードを検出することはできない。
【００３６】
後に秘密鍵が盗まれたことが明らかになった場合、秘密鍵によって署名されたソフトウェア・アプリケーションは、悪質なコードとして疑われるようになる。この際に、主記憶装置３０内に記憶された、１つ又はそれ以上のソフトウェア・アプリケーションに悪質コードが含まれているか否かを判断するために、如何にして制御装置１０をテストするかという問題が生じる。
【００３７】
悪質コードが、インタフェース６０及びプロセッサ４０を介して装置内にロードされたとき、幾つかの方法でこの悪質コードを記憶することができる。即ち、（ａ）悪質コードは、ハンドラ１００を上書き又は主記憶装置３０内でハンドラ１００と共存して、ハンドラ１００の動作を模擬する、また更に、例えば、制御装置１０の正当な所有者の銀行口座から第三者が持つ銀行口座へ送金するような、第三者に利益をもたらす機能を実行する、悪質ハンドラとして機能することができる。
（ｂ）悪質コードは、ソフトウェア・アプリケーションとして記憶され、ハンドラ１００を経由してネットワーク７０から呼び出し可能であり、ソフトウェア・アプリケーションは、制御装置１０の所有者の損害の原因となる無許可の機能を実行するように動作可能である。
（ｃ）悪質コードは、主記憶装置３０内に記憶された正規のアプリケーション及びハンドラ１００によって操作されるデータとして記憶することができ、このデータにより、結果的に無許可の機能が実行されることになる。
【００３８】
ハンドラ１００が悪質ハンドラによって置き換えられた場合、この悪質ハンドラは、ネットワーク７０からインタフェース６０を介して問合された際に、記憶装置３０内に記憶された１つ又はそれ以上の第三者の悪質アプリケーションの存在を隠匿することができる。そのような状況においては、制御装置１０は、ネットワーク７０から見ると正しく機能しているかのように見える。制御装置１０が引続き使用されると、例えば、ネットワーク７０及び関連のデータベースの高額な不正行為につながる可能性がある。従って、いつ疑わしい悪質コードが制御装置１０にロードされたか、特に、いつ秘密鍵と公開鍵による認証手順が、秘密鍵の盗難によって回避されたかを検出する方法が必要とされている。
【００３９】
ここで、いつ悪質コードが制御装置１０内にロードされたかを検出する本発明による方法について、図３及び図４を参照して説明する。図３において、制御装置１０は、インタフェース６０を介してテスト装置２００に接続された構成で示されている。この構成において、制御装置１０は、意図的に、テスト装置２００とのみ通信することができるように配置されている。このような制限された通信は、制御装置１０内に存在する悪質コードが、テスト装置２００から自身を隠すために他の装置と通信するか、又は制御装置の外部の記憶装置を使用するのを防止するために使用される。
【００４０】
本方法の段階Ａにおいて、ハンドラ１００及び１つ又はそれ以上のソフトウェア・アプリケーションを含む制御装置１０は、テスト装置２００に接続されている。このとき、テスト装置２００は、インタフェース６０を介してハンドラ１００と通信し、ハンドラ内に記憶されたアプリケーションのリスト２１０を明らかにするように要求する。特定の状況においては、ネットワーク７０自体が、制御装置１０内にロードされたアプリケーションの記録を保持する。しかしながら、このような記録は、本発明の方法を実行する上では不可欠なものではない。このようにして、ハンドラ１００は、制御装置１０内に記憶されたアプリケーションのリストを伝達することによって装置２００に応答する。
【００４１】
ハンドラ１００が悪質ハンドラになるように改ざんされていた場合、ハンドラは、テスト装置２００に偽って、正規のアプリケーションと同様に制御装置１０内に記憶された１つ又はそれ以上の悪質アプリケーションの存在を隠すことができる。
【００４２】
テスト装置２００がリスト２１０をハンドラ１００から受け取ったとき、テスト装置２００は、リスト２１０を自らの記憶装置に記憶する。
【００４３】
本発明の段階Ｂにおいて、テスト装置２００は、テストハンドラ２２０として知られているソフトウェア・アプリケーションを、インタフェース６０を介して制御装置１０に送り、該制御装置は、このテストハンドラを主記憶装置３０の特定のロケーションに記憶する。この段階では、制御装置１０は、ハンドラ１００と、テストハンドラ２２０と、及び該制御装置がリスト２１０内でテスト装置２００に公表したアプリケーションのみを含んでいるはずである。
【００４４】
制御装置１０が悪質コードにより危殆化されていた場合、テスト装置２００に対してリスト２１０内で公表されていないアプリケーションを含む可能性があり、ハンドラ１００自体が悪質コードを含む可能性がある。
【００４５】
ネットワーク７０が、制御装置１０内に記憶されているべきアプリケーションの独自のリストを有し、このネットワーク７０のリストが、前記リスト２１０と一致しない場合、テスト装置２００は、そこから、推定される悪質追加コードの介入によって、制御装置１０が危殆化されていたと判断する。
【００４６】
次に、テスト装置２００は、制御装置１０にテストハンドラ２２０を実行するように指示を続ける。更に、テスト装置２００は、ハンドラ１００及びテストハンドラ２２０が占有すべき主記憶装置３０のロケーションを、予め認識している。従って、これらのハンドラ１００、２００によって占有されていない記憶装置３０のロケーションは、ソフトウェア・アプリケーションを記憶するのに利用可能であるはずである。
【００４７】
次に、テスト装置２００は、制御装置１０の主記憶装置３０がどのように表示されるべきかを示す参照イメージ２３０を該テスト装置の記憶装置内に生成する。参照イメージ２３０を生成後、テスト装置２００は、乱数Ｒ0からＲmまでのシーケンスを生成して、ハンドラ１００、２００によって占有されていない参照イメージ２３０のロケーションを乱数で埋める。また、テスト装置２００は、インタフェース６０を介してこれらの乱数をテストハンドラに受け渡し、該乱数を参照イメージ２３０のロケーションに対応する主記憶装置３０内のロケーションに記憶するように指示する。
【００４８】
乱数には、情報量を減らすことなく圧縮することができない特性がある。従って、悪質アプリケーションが、制御装置１０の主記憶装置３０内に記憶されており、ハンドラ１００が、悪質ハンドラである場合、該悪質ハンドラは、乱数を圧縮して、悪質アプリケーションの存在を隠すことはできず、これは、後述するように、乱数を圧縮しようとするこのような試みは、テスト装置２００によって検出されることができるからである。
【００４９】
テスト装置２００は、ハンドラ１００、２００によって占有されているロケーションを除く主記憶装置３０の全てのロケーションが埋まるまで、テストハンドラ２２０を介して制御装置１０に乱数を供給し続ける。
【００５０】
本方法の段階Ｃにおいて、テスト装置２００は、初期設定ベクトル（ＩＶ）を含む手順を用いて、乱数Ｒ０からＲｍまでが主記憶装置３０内に正しく記録されたか否かをテストするために、制御装置１０に問合せる。番号の不正な記録が特定された場合、このような不正な記録は、悪質アプリケーションの行為、即ち、ハンドラ１００が危殆化されたことを示すものである。
【００５１】
制御装置１０に問合せたとき、テスト装置２００は、インタフェース６０を介してチャレンジ（ｃｈａｌｌｅｎｇｅ）をテストハンドラ２２０に送る。チャレンジは、主記憶装置３０内の開始ロケーションのシーケンス及び初期設定ベクトル（ＩＶ）を指定するものである。次に、テストハンドラ２２０は、供給されたＩＶ（初期設定ベクトル）を使用して、暗号ハッシュアルゴリズムを初期化した後に、指定されたロケーションのシーケンスの内容を順番にこのアルゴリズムに送る。テストハンドラ２２０のアルゴリズムは、長さが通常１２８又は１６０ビットオーダーであり、結果として得られた第１のチェックサムを計算する。次に、テストハンドラ２２０は、テストハンドラ２２０に供給されたのと同一のＩＶ及び同一の暗号ハッシュアルゴリズムを使用して、参照イメージ２３０内に記憶されたデータに基づいて、対応する第２のチェックサムを計算する。第１及び第２のチェックサムが同一でない場合、テスト装置２００は、それにより制御装置１０が危殆化されていると判断する。逆に、第１及び第２のチェックサムが同一である場合、テスト装置２００は、別のチャレンジを使用して制御装置１０に問合せる。必要であれば、テスト装置２００は、１つ又はそれ以上のハンドラ１００及びテストハンドラ２２０によって占有されているロケーションを含む主記憶装置３０全体に問合せることができる。ハンドラ１００が危殆化されて悪質ハンドラとなっている場合、テスト装置２００は、このような危殆化を検出することができる。
【００５２】
テスト装置２００は、多くの異なる初期設定ベクトルを使用して制御装置１０に問合せて、また、必要であれば、関連するチェックサムを計算する際に使用される変化する長さのシーケンスを指定することが好ましい。このような複数の問合せは、装置内の悪質ハンドラが、悪質アプリケーションの存在を隠そうとして、チェックサムを予め計算し、次に、乱数が制御装置１０に供給されたときに該乱数を圧縮しようとするのを防止するのに効果的である。
【００５３】
これらのシーケンスは、少なくとも１つのハンドラ１００及びテストハンドラ２２０によって占有されたロケーションを含むのが好ましい。更に、該シーケンスは、任意選択的に１つ又はそれ以上のロケーションを交互にスキップして、悪質コードが制御装置１０内で自身を隠すのを更に困難にすることができる。このようなスキップは、図４においてシーケンス１及び３で示されている。図４のシーケンス２は、主記憶装置３０内の連続的なメモリ・ロケーションに対応するものである。シーケンス３は、ハンドラ１００、２００によって占有されたロケーションを含む。
【００５４】
多くの互いに異なる初期設定ベクトルで制御装置１０に問合せた後、制御装置１０が危殆化されていないと判断された場合、本方法は段階Ｄに進む。制御装置１０が危殆化されている場合には、アラームが起動する。
【００５５】
本方法の段階Ｄにおいて、テスト装置２００は、任意選択的に制御装置１０内に記憶されたテストハンドラ２２０を上書きして、このハンドラ２２０の実行可能コードが、その後制御装置１０上で実行されるアプリケーションに開示されるのを防ぎ、次に、リスト２１０内に記録されているアプリケーションの正規に承認されたバージョンをロードする。このようなロードにより、結果的に、制御装置１０にはハンドラ１００の危殆化されていないバージョン、即ち１つ又はそれ以上の正規のアプリケーションを含み、主記憶装置３０内の残りのロケーションは、乱数で埋められる。本テスト装置は、必要であれば、１つ又はそれ以上の正規のアプリケーションをロードする前に、乱数を有する主記憶装置３０を任意選択的に消去することができる。
【００５６】
本方法は、たとえ制御装置１０内に記憶された公開鍵に対応する盗まれた秘密鍵によって署名されたアプリケーションが、制御装置１０内にロードされたとしても、制御装置１０内の悪質コードの存在を検出することができるという利点をもたらす。更にまた、本方法によって、正規の危殆化されていないアプリケーションを、本方法の終了時に制御装置１０内に再ロードすることができ、その結果、制御装置１０が改めて使用可能になる。
【００５７】
本発明の方法は、全ての起こり得る悪質コードを検出できるわけではない。例えば、悪質コードが、危殆化されていない形態にあるハンドラ１００上で動作してハンドラを圧縮し、次に、圧縮されていないハンドラ１００によって元々占有されていた記憶装置のスペースに、圧縮されたハンドラ１００及び悪質コードを記憶することができる場合、本方法を回避することができる。しかしながら、この悪質コードは、本方法の段階Ｃ中にテストされるとき、テストハンドラと接続して、圧縮されていないハンドラ１００によって通常占有されているロケーションの値のシーケンスを、テストハンドラに供給することが可能でなければならない。テスト装置２００は、必要であれば、制御装置１０からの問合せに対する応答性を時間調整することによって、このような圧縮に敏感にすることができ、即ち、圧縮されていないコードは、より多くの時間を要するため、このような方法で動作する悪質コードは、通常よりも遅い応答に基づいて検出することができる。
【００５８】
上述したように、制御装置１０は多くの異なる形態を取ることができることが理解されるであろう。本発明の上述の方法は、制御装置１０が、携帯用個人用品目である場合、並びに、複雑なコンピュータ設備である場合の両方に適用可能である。
【００５９】
また、本発明の範囲から逸脱することなく、本発明の方法に対して変更を行うことができることを当業者には理解されるであろう。例えば、段階Ｂにおいて、制御装置１０の主記憶装置３０は、提供される乱数以外の他のデータで埋めることができるが、この他のデータは、制御装置１０内に存在することができる任意の悪質コードによって、検出不能に圧縮されないものであり、これは、他のデータが圧縮されれば、悪質コードにその存在を持続するメモリスペースを提供する可能性があるからである。更に、段階Ｃにおいて、チェックサムを生成するために読み取られるロケーションのシーケンスは、制御装置１０の問合せがより少なくても容認できる場合には、必ずしも主記憶装置３０全体に綿密に策定される必要はない。更に、段階Ｃにおいてチェックサムを生成するための暗号ハッシュアルゴリズムの使用が説明されているが、暗号ハッシュアルゴリズムと組み合わせて又はその代わりに、チェックサムを生成するための他のアプローチを使用することができる。
【００６０】
制御装置１０内へのテストハンドラ２２０のロードが説明されているが、段階Ｂにおいてテスト装置２００から供給される乱数を、ハンドラ１００自体が主記憶装置３０にロードできるように構成されることが可能であり、これにより、テストハンドラ２２０を制御装置１０にロードする必要が無くなる。
【図面の簡単な説明】
【図１】  携帯用コード実行制御装置のハードウェアの概略図である。
【図２】  ソフトウェア・アプリケーション及び図１の装置の記憶装置内にロードされたハンドラの図である。
【図３】  本発明によるテスト装置に接続された図１及び図２に示す制御装置の図である。
【図４】  いつ悪質コードが図１から図３までの装置内にロードされたかを検出する方法の段階を示す図である。
【図１】
0004739644.tif 000002
【図２】
0004739644.tif 000003
【図３】
0004739644.tif 000004
【図４】
0004739644.tif 000005