(57)【要約】  取得部（９１）は、受信データ（１０３）を取得する。第１の抽出部（９２）は、ダウンロードドメイン名であるドメイン名（１０８）を受信データ（１０３）から抽出する。第２の抽出部（９３）は、受信データ（１０３）に含まれる公開鍵証明書の所有者を示す所有者情報（１０７）を抽出する。検索部（１６）は、所有者情報（１０７）を検索キーとしてドメイン情報検索サービス（６）を検索し、所有者情報（１０７）の示す所有者が管理する管理ドメイン名（２０２）を取得する。判定部（１８）は、管理ドメイン名（２０２）と、ドメイン名（１０８）との照合により、受信データ（１０３）に含まれるプログラムが不正か判定する。
2019053882.tif 000002
【特許請求の範囲】
【請求項１】
公開鍵を含む公開鍵証明書と、プログラムと、前記プログラムに付された電子署名とを含む受信データを取得する取得部と、
前記受信データの送信元のドメイン名を示すダウンロードドメイン名を、前記受信データから抽出する第１の抽出部と、
前記受信データに含まれる前記公開鍵証明書から、前記公開鍵証明書の所有者を示す所有者情報を抽出する第２の抽出部と、
前記所有者情報を検索キーとしてドメイン情報検索サービスを検索することにより、前記所有者情報の示す前記所有者が管理する管理ドメイン名を、前記ドメイン情報検索サービスから取得する検索部と、
前記検索部によって取得された前記管理ドメイン名と、前記第１の抽出部によって抽出された前記ダウンロードドメイン名とを照合し、照合結果に基づいて、前記受信データに含まれる前記プログラムが不正かどうかを判定する判定部と
を備える検証装置。
【請求項２】
前記検索部は、
前記第１の抽出部によって抽出された前記ダウンロードドメイン名を検索キーとして前記ドメイン情報検索サービスを検索することにより、前記ドメイン情報検索サービスにおいて前記ダウンロードドメイン名に対応付けられている管理者名を、前記ドメイン情報検索サービスから取得し、
前記判定部は、
前記検索部によって取得された前記管理者名と、前記第２の抽出部によって抽出された前記所有者情報とを照合し、照合結果に基づいて、前記受信データに含まれる前記プログラムが不正かどうかを判定する請求項１に記載の検証装置。
【請求項３】
前記受信データは、
Ｗｅｂサイトからダウンロードされる請求項１または請求項２に記載の検証装置。
【請求項４】
前記受信データは、
電子メールによって送信される請求項１または請求項２に記載の検証装置。
【請求項５】
公開鍵を含む公開鍵証明書と、プログラムと、前記プログラムに付された電子署名とを含む受信データを取得する取得部と、
前記受信データの送信元のドメイン名を示すダウンロードドメイン名を、前記受信データから抽出する第１の抽出部と、
前記受信データに含まれる前記公開鍵証明書から、前記公開鍵証明書の所有者を示す所有者情報を抽出する第２の抽出部と、
前記第１の抽出部によって抽出された前記ダウンロードドメイン名を検索キーとしてドメイン情報検索サービスを検索することにより、前記ドメイン情報検索サービスにおいて前記ダウンロードドメイン名に対応付けられている管理者名を、前記ドメイン情報検索サービスから取得する検索部と、
前記検索部によって取得された前記管理者名と、前記第２の抽出部によって抽出された前記所有者情報とを照合し、照合結果に基づいて、前記受信データに含まれる前記プログラムが不正かどうかを判定する判定部と
を備える検証装置。
【請求項６】
コンピュータに、
公開鍵を含む公開鍵証明書と、プログラムと、前記プログラムに付された電子署名とを含む受信データを取得する処理と、
前記受信データの送信元のドメイン名を示すダウンロードドメイン名を、前記受信データから抽出する処理と、
前記受信データに含まれる前記公開鍵証明書から、前記公開鍵証明書の所有者を示す所有者情報を抽出する処理と、
前記所有者情報を検索キーとしてドメイン情報検索サービスを検索することにより、前記所有者情報の示す前記所有者が管理する管理ドメイン名を、前記ドメイン情報検索サービスから取得する処理と、
取得された前記管理ドメイン名と、抽出された前記ダウンロードドメイン名とを照合し、照合結果に基づいて、前記受信データに含まれる前記プログラムが不正かどうかを判定する判定処理と
を実行させるための検証プログラム。
【請求項７】
コンピュータに、
公開鍵を含む公開鍵証明書と、プログラムと、前記プログラムに付された電子署名とを含む受信データを取得する処理と、
前記受信データの送信元のドメイン名を示すダウンロードドメイン名を、前記受信データから抽出する処理と、
前記受信データに含まれる前記公開鍵証明書から、前記公開鍵証明書の所有者を示す所有者情報を抽出する処理と、
抽出された前記ダウンロードドメイン名を検索キーとしてドメイン情報検索サービスを検索することにより、前記ドメイン情報検索サービスにおいて前記ダウンロードドメイン名に対応付けられている管理者名を、前記ドメイン情報検索サービスから取得する処理と、
取得された前記管理者名と、抽出された前記所有者情報とを照合し、照合結果に基づいて、前記受信データに含まれる前記プログラムが不正かどうかを判定する処理と
を実行させる検証プログラム。
【請求項８】
コンピュータが、
公開鍵を含む公開鍵証明書と、プログラムと、前記プログラムに付された電子署名とを含む受信データを取得し、
前記受信データの送信元のドメイン名を示すダウンロードドメイン名を、前記受信データから抽出し、
前記受信データに含まれる前記公開鍵証明書から、前記公開鍵証明書の所有者を示す所有者情報を抽出し、
前記所有者情報を検索キーとしてドメイン情報検索サービスを検索することにより、前記所有者情報の示す前記所有者が管理する管理ドメイン名を、前記ドメイン情報検索サービスから取得し、
取得された前記管理ドメイン名と、抽出された前記ダウンロードドメイン名とを照合し、照合結果に基づいて、前記受信データに含まれる前記プログラムが不正かどうかを判定する検証方法。
【請求項９】
コンピュータが、
公開鍵を含む公開鍵証明書と、プログラムと、前記プログラムに付された電子署名とを含む受信データを取得し、
前記受信データの送信元のドメイン名を示すダウンロードドメイン名を、前記受信データから抽出し、
前記受信データに含まれる前記公開鍵証明書から、前記公開鍵証明書の所有者を示す所有者情報を抽出し、
抽出された前記ダウンロードドメイン名を検索キーとしてドメイン情報検索サービスを検索することにより、前記ドメイン情報検索サービスにおいて前記ダウンロードドメイン名に対応付けられている管理者名を、前記ドメイン情報検索サービスから取得し
取得された前記管理者名と、抽出された前記所有者情報とを照合し、照合結果に基づいて、前記受信データに含まれる前記プログラムが不正かどうかを判定する検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コード署名が付されたプログラムが真正か検証する、検証装置、検証プログラム及び検証方法に関する。
【背景技術】
【０００２】
ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）でマルウェアが活動する際に、マルウェアは例えばドライバの形態をとる。以下ではドライバを例に説明する。最近のＯＳは、ドライバに、正式なコード署名を要求する。ところが、サイバー攻撃に使用される現在のマルウェアには、盗まれた「コード署名鍵及び公開鍵証明書」による、正規のコード署名が付与さる場合があり、盗まれたものであることを検知する手段がない。このため、ユーザは、ドライバを装ったプログラムをインストールし、端末はマルウェアに感染する。攻撃者は、事前に、企業または組織から、サイバー攻撃により、コード署名鍵及び公開鍵証明書を盗み、マルウェアへ署名して別のサイバー攻撃に悪用すると考えられている。【０００３】
秘密鍵であるコード署名鍵は、正規の所有者において安全に運用すべきである。コード署名鍵を安全に保存し、入力されたデータに署名を付与する専用ハードウェア（ＨＳＭ：Ｈａｒｄｗａｒｅ  Ｓｅｃｕｒｉｔｙ  Ｍｏｄｕｌｅ）がある。ＨＳＭからコード署名鍵は外部に抽出できないため、サイバー攻撃によるコード署名鍵の抽出は不可能である。しかし、ＨＳＭを運用するためには購入及び保守の費用がかかるため、利用されないこともある。その場合、コード署名鍵及び公開鍵証明書は、ＯＳ上にファイルとして保存され管理されていると思われる。【０００４】
サイバー攻撃の報告においては、鍵及び公開鍵証明書を保存した、拡張子が「．ｐ１２」のファイルを検索する例が多く報告されている。攻撃者は、ＯＳ上にファイルとして保存された鍵及び公開鍵証明書を狙っていることが分かる。この場合、必ずしもコード署名用の鍵と公開鍵証明書とは限らないが、攻撃者は、コード署名用のデータも狙っていると思われる。【０００５】
コード署名鍵及び公開鍵証明書の盗難防止として、拡張子「ｐ１２」のファイルを検索している不審なプロセスをイベントログで見つけることで、盗難を検知する方法が考えられる。しかし、これは、コード署名鍵及び公開鍵証明書の所有者側の対策であり、ＨＳＭと同じく、必ず所有者が対策として実施する保証は無い。従って、コード署名付きマルウェアに感染しない対策として必要なのは、コード署名付きマルウェアを受け入れる側のチェック機能である。【０００６】
従来技術として、コード署名の正しさを検証するために使用する、コード署名鍵と対となる公開鍵証明書が有効かをチェックする技術がある（例えば、非特許文献１及び非特許文献２）。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Ｃｅｒｔｉｆｉｃａｔｅ  Ｒｅｖｏｃａｔｉｏｎ  Ｌｉｓｔ（ＣＲＬ），ＩＥＴＦ  ＲＦＣ  ５２８０，Ｉｎｔｅｒｎｅｔ  Ｘ．５０９  Ｐｕｂｌｉｃ  Ｋｅｙ  Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  Ｃｅｒｔｉｆｉｃａｔｅ  ａｎｄ  Ｃｅｒｔｉｆｉｃａｔｅ  Ｒｅｖｏｃａｔｉｏｎ  Ｌｉｓｔ  （ＣＲＬ）  Ｐｒｏｆｉｌｅ．
【非特許文献２】Ｏｎｌｉｎｅ  Ｃｅｒｔｉｆｉｃａｔｅ  Ｓｔａｔｕｓ  Ｐｒｏｔｏｃｏｌ（ＯＣＳＰ），ＩＥＴＦ  ＲＦＣ２５６０，  Ｘ．５０９  Ｉｎｔｅｒｎｅｔ  Ｐｕｂｌｉｃ  Ｋｅｙ  Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  Ｏｎｌｉｎｅ  Ｃｅｒｔｉｆｉｃａｔｅ  Ｓｔａｔｕｓ  Ｐｒｏｔｏｃｏｌ  −  ＯＣＳＰ．
【０００８】
ＣＲＬ（Ｃｅｒｔｉｆｉｃａｔｅ  Ｒｅｖｏｃａｔｉｏｎ  Ｌｉｓｔ）は失効した公開鍵証明書の情報が掲載された失効リストであり、ＯＣＳＰは公開鍵証明書の失効状態をオンラインで問い合わせるプロトコルであるが、これらは、「失効されている公開鍵証明書しか」無効と判断できない。失効は、第三者か所有者による申告で成り立つので、誰かが盗難に気づくか、所有者が気づかない限り、この申告は発生しない。また、攻撃者が失効を申告することは考えにくい。よって、コード署名付きマルウェアへの対策として、これらの技術は有効ではない。
よって従来技術では、攻撃者により盗まれたコード署名鍵及び公開鍵証明書によるコード署名付きマルウェアの不正なインストールを防ぐことができない。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
この発明は、攻撃者により盗まれた「コード署名鍵及び公開鍵証明書」による不正なコード署名が付されたプログラムを検知できる検証装置の提供を目的とする。
【課題を解決するための手段】
【００１０】
この発明の検証装置は、
公開鍵を含む公開鍵証明書と、プログラムと、前記プログラムに付された電子署名とを含む受信データを取得する取得部と、
前記受信データの送信元のドメイン名を示すダウンロードドメイン名を、前記受信データから抽出する第１の抽出部と、
前記受信データに含まれる前記公開鍵証明書から、前記公開鍵証明書の所有者を示す所有者情報を抽出する第２の抽出部と、
前記所有者情報を検索キーとしてドメイン情報検索サービスを検索することにより、前記所有者情報の示す前記所有者が管理する管理ドメイン名を、前記ドメイン情報検索サービスから取得する検索部と、
前記検索部によって取得された前記管理ドメイン名と、前記第１の抽出部によって抽出された前記ダウンロードドメイン名とを照合し、照合結果に基づいて、前記受信データに含まれる前記プログラムが不正かどうかを判定する判定部と
を備える。
【発明の効果】
【００１１】
この発明の検証装置は、検索部によって取得された管理ドメイン名と、第１の抽出部によって抽出されたダウンロードドメイン名とを照合し、照合結果に基づいて、受信データに含まれるプログラムが不正かどうかを判定する判定部を備える。よって本発明の検証装置によれば、攻撃者により盗まれたコード署名鍵及び公開鍵証明書による不正なコード署名が付されたプログラムを検知できる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１の図で、検証装置１の運用形態を示す図。
【図２】実施の形態１の図で、検証装置１の機能構成図。
【図３】実施の形態１の図で、検証装置１のハードウェア構成図。
【図４】実施の形態１の図で、検証装置１の動作の概要を表すフローチャート。
【図５】実施の形態１の図で、解析部１２とドメイン名抽出部１７との処理を示すフローチャート。
【図６】実施の形態１の図で、プログラム情報抽出部１３による、コンテンツ１０４ｂからプログラム情報１０５を抽出する処理を示すフローチャート。
【図７】実施の形態１の図で、プログラム情報１０５を示す図。
【図８】実施の形態１の図で、証明書抽出部１４が、プログラム情報１０５から証明書１０５ｄを抽出する処理を示すフローチャート。
【図９】実施の形態１の図で、判定部１８が、ドメイン名をチェックする処理を示すフローチャート。
【図１０】実施の形態１の図で、検証装置１の変形例を示す図。
【図１１】実施の形態２の図で、検証装置１の機能構成図。
【図１２】実施の形態２の図で、判定部１８が、証明書の所有者をチェックする処理を示すフローチャート。
【図１３】実施の形態３の図で、証明書抽出部１４の処理を示すフローチャート。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。
【００１４】
実施の形態１．
図１から図１０を参照して、実施の形態１の、コード署名検証装置１を説明する。コード署名検証装置１は、コード署名されたプログラムが真正かどうかを検証する装置である。以下、コード署名検証装置１は検証装置１と記す。
検証装置１は、公開鍵を含む公開鍵証明書と、プログラムと、プログラムに対する署名とを含むプログラム情報を取得し、プログラムが真正か検証する。公開鍵証明書は以下、証明書という。
【００１５】
図１は、検証装置１の運用形態を示す図である。図１を参照して、検証装置１の運用形態を説明する。攻撃者２は、Ｗｅｂサイトにコード署名付き不正プログラムを配置する。
以下、コード署名付き不正プログラムは不正プログラム情報４００と記す。図１に示すように、不正プログラム情報４００は、以下の（ａ）（ｂ）（ｃ）で構成される。
（ａ）図１でファイル４０１と記載している、不正なプログラムの本体。
（ｂ）図１で署名４０２と記載している、コード署名。
（ｃ）公開鍵４０３ａを含んでいる、コード署名の正当性を検証する証明書４０３。
【００１６】
端末装置５（以下、端末５と記す）を使用するユーザ７は、攻撃者２から送られるプログラムサポートを装ったメールに記載されたＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）にアクセスする。ここで、このＵＲＬは、不正プログラム情報４００が配置されたＷｅｂサイトのＵＲＬである。或いは、このＷｅｂサイトがプログラムのダウンロードサイトを装い、ユーザ７が検索サービスで検索した結果、このＷｅｂサイトが示され、ユーザ７が偶然このＷｅｂサイトにアクセスする。その結果、端末５へ不正プログラム情報４００が到達する。
【００１７】
あるいは、攻撃者２は、プログラムサポートを装い、添付メールによって、不正プログラム情報４００を、ユーザ７へ送付する場合もある。その結果、端末５へ不正プログラム情報４００が到達する。つまり、ユーザ７に不正プログラム情報４００が配布されるルートとして、Ｗｅｂサイトからのダウンロードと、添付メールの送信とがある。結果として、端末５に、不正プログラム情報４００が到達する。不正プログラム情報４００をインストールする際には端末５にコード署名の警告が出ないため、ユーザ７は、不審に思わずファイル４０１をインストールする。その結果、端末５はマルウェアであるファイル４０１に感染する。この様にして、端末５は不正プログラム情報４００に感染する。
【００１８】
図１を参照して、検証装置１の動作の概要を説明する。
（１）検証装置１は、組織の有するメールサーバ３またはプロキシサーバ４が受信したパケットを受信する。
メールサーバ３の場合はユーザ７向けのメールの受信が該当し、プロキシサーバ４の場合はＷｅｂコンテンツの受信が該当する。メールサーバ３からのデータ１０２であるパケットの中には、添付メールのファイルに、不正プログラム情報４００が含まれる。プロキシサーバ４からのデータ１０１であるパケットの中には、ダウンロードしたＷｅｂコンテンツに、不正プログラム情報４００が含まれる。
（２）検証装置１は、パケットの中から不正プログラム情報４００の送信元であるダウンロードドメイン名１０８（以下、ドメイン名１０８と記す）を抽出する。また、検証装置１は、パケットから不正プログラム情報４００を抽出し、さらに証明書４０３を抽出する。
（３）検証装置１は、証明書４０３に含まれ、証明書４０３の所有者を示す所有者情報１０７を抽出する。
（４）検証装置１は、所有者情報１０７を検索キーとして、後述するドメイン情報検索サービス６で検索を行い、管理ドメイン名２０２を得る。
（５）検証装置１は、取得した管理ドメイン名２０２に、抽出されたドメイン名１０８が含まれるか検証し、署名が付されたプログラムが真正かどうかを判定する。
【００１９】
図２及び図３を参照して検証装置１の構成を説明する。
図２は、実施の形態１の検証装置１の機能構成図である。
図３は、実施の形態１における、検証装置１のハードウェア構成図である。
【００２０】
検証装置１は、コンピュータである。検証装置１は、プロセッサ３０１を備えるとともに、メモリ３０２、通信インタフェース３０３、補助記憶装置３０４、及び入出力インタフェース３０５といった他のハードウェアを備える。プロセッサ３０１は、信号線３０６を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００２１】
検証装置１は、機能要素として、入力部１１と、解析部１２と、プログラム情報抽出部１３と、証明書抽出部１４と、証明書属性抽出部１５と、検索部１６と、ドメイン名抽出部１７と、判定部１８と、出力部１９とを備える。入力部１１と、解析部１２と、プログラム情報抽出部１３と、証明書抽出部１４と、証明書属性抽出部１５と、検索部１６と、ドメイン名抽出部１７と、判定部１８と、出力部１９との機能は、ソフトウェアにより実現される。
【００２２】
プロセッサ３０１は、検証プログラムを実行する装置である。検証プログラムは、入力部１１と、解析部１２と、プログラム情報抽出部１３と、証明書抽出部１４と、証明書属性抽出部１５と、検索部１６と、ドメイン名抽出部１７と、判定部１８と、出力部１９との機能を実現するプログラムである。プロセッサ３０１は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ３０１の具体例は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００２３】
メモリ３０２は、データを一時的に記憶する記憶装置である。メモリ３０２の具体例は、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。メモリ３０２は、プロセッサ３０１の演算結果を保持する。
【００２４】
通信インタフェース３０３は、メールサーバ３、プロキシサーバ４のようなサーバから、通信パケットデータを受け付ける。通信インタフェース３０３は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続されるポートであってもよい。
【００２５】
補助記憶装置３０４は、データを保管する記憶装置である。補助記憶装置３０４の具体例は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。また、補助記憶装置３０４は、ＳＤ（登録商標）（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、ＣＦ（ＣｏｍｐａｃｔＦｌａｓｈ）、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）といった可搬記憶媒体であってもよい。
【００２６】
入出力インタフェース３０５には、データ及び結果を入出力するための装置が接続される。データ及び結果を入出力するための装置の例としては、マウス、キーボード及びディスプレイである。
【００２７】
検証プログラムは、プロセッサ３０１に読み込まれ、プロセッサ３０１によって実行される。メモリ３０２には、検証プログラムだけでなく、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。プロセッサ３０１は、ＯＳを実行しながら、検証プログラムを実行する。検証プログラム及びＯＳは、補助記憶装置３０４に記憶されていてもよい。補助記憶装置３０４に記憶されている検証プログラム及びＯＳは、メモリ３０２にロードされ、プロセッサ３０１によって実行される。なお、検証プログラムの一部または全部がＯＳに組み込まれていてもよい。
【００２８】
検証装置１は、プロセッサ３０１を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、検証プログラムの実行を分担する。それぞれのプロセッサは、プロセッサ３０１と同じように、検証プログラムを実行する装置である。
【００２９】
検証プログラムにより利用、処理または出力されるデータ、情報、信号値及び変数値は、メモリ３０２、補助記憶装置３０４、または、プロセッサ３０１内のレジスタあるいはキャッシュメモリに記憶される。
【００３０】
検証プログラムは、入力部１１と、解析部１２と、プログラム情報抽出部１３と、証明書抽出部１４と、証明書属性抽出部１５と、検索部１６と、ドメイン名抽出部１７と、判定部１８と、出力部１９との各部の「部」を「処理」、「手順」あるいは「工程」に読み替えた各処理、各手順あるいは各工程をコンピュータに実行させるプログラムである。また、検証方法は、コンピュータである検証装置１が検証プログラムを実行することにより行われる方法である。検証プログラムは、コンピュータ読取可能な記憶媒体に記録されて提供されてもよいし、プログラムプロダクトとして提供されてもよい。
【００３１】
＊＊＊動作の説明＊＊＊
図２及び図４から図９を参照して、検証装置１の動作を説明する。
図４は、検証装置１の動作の概要を示すフローチャートである。図２に示すように、入力部１１は、プロキシサーバ４からのデータ１０１と、メールサーバ３からのデータ１０２を、通信インタフェース３０３を介して、ネットワークから受信し、受信データ１０３として解析部１２へ出力する。
【００３２】
解析部１２は受信データ１０３を受信する。解析部１２は取得部９１である。受信データ１０３は、公開鍵を含む公開鍵証明書と、プログラムと、このプログラムに付された電子署名とを含む。取得部９１は受信データ１０３を取得する。
解析部１２は、メール及びＷｅｂ通信データのフォーマットに従い、受信データ１０３を、ヘッダ１０４ａとコンテンツ１０４ｂとに分離して抽出する。メール及びＷｅｂ通信で送受信するフォーマットは一般的に標準的なフォーマットで決められているため、ヘッダ１０４ａとコンテンツ１０４ｂとに分離する抽出処理が可能である。次に、解析部１２は、コンテンツ１０４ｂをプログラム情報抽出部１３へ出力し、ヘッダ１０４ａをドメイン名抽出部１７へ出力する。
【００３３】
ドメイン名抽出部１７は第１の抽出部９２である。第１の抽出部９２は、受信データ１０３の送信元のドメイン名を示すダウンロードドメイン名であるドメイン名１０８を、受信データ１０３から抽出する。具体的には以下のようである。
ドメイン名抽出部１７は、ヘッダ１０４ａから、受信データ１０３のダウンロード元の情報を抽出する。Ｗｅｂサイトからファイルをダウンロードした場合は、ドメイン名抽出部１７はＨＴＴＰ（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）ヘッダにおけるＨｏｓｔからＷｅｂサイトのドメイン名を抽出できる。また、添付メールを受信した場合は、ドメイン名抽出部１７は、メールの送信元メールアドレスの＠以降からドメイン名を抽出できる。図４のステップＳ１０１に示すように、ドメイン名抽出部１７は、受信データ１０３の発信元のドメイン名を抽出する。ドメイン名抽出部１７は、抽出したドメイン名をドメイン名１０８として、判定部１８へ出力する。
【００３４】
＜解析部１２及びドメイン名抽出部１７の動作＞
図５は、解析部１２とドメイン名抽出部１７との処理を示すフローチャートである。図５を参照して、解析部１２とドメイン名抽出部１７との処理を説明する。括弧で示す解析部１２及びドメイン名抽出部１７は、動作の主体であることを示す。
ステップＳ２０１において、解析部１２は、受信データ１０３のフォーマットを判定する。この処理では、解析部１２は、メールサーバ１０２からのデータであればメールと判定し、プロキシサーバからのデータであればＨＴＴＰによるＷｅｂ通信と判定する。
ステップＳ２０２において、解析部１２は、メールか判定する。
ステップＳ２０３において、解析部１２は、受信データ１０３にＣｏｎｔｅｎｔ−Ｄｉｓｐｏｓｉｔｉｏｎ：ａｔｔａｃｈｅｍｅｎｔがあるか調べる。解析部１２は、Ｃｏｎｔｅｎｔ−Ｄｉｓｐｏｓｉｔｉｏｎ：ａｔｔａｃｈｅｍｅｎｔがあれば、受信データ１０３からヘッダを抽出する。
ステップＳ２０４において、この抽出に関して、解析部１２は、データの先頭から、２個のダッシュ「−−」までを抽出する。解析部１２は、この抽出結果を、ヘッダ１０４ａとする。
ステップＳ２０５において、ドメイン名抽出部１７は、ヘッダ１０４ａのＦｒｏｍから、送信元メールアドレスを抽出する。
ステップＳ２０６において、ドメイン名抽出部１７は、送信元メールアドレスの＠より右を抽出する。これを、ドメイン名１０８とする。
ステップＳ２０７において、解析部１２は、Ｃｏｎｔｅｎｔ−Ｄｉｓｐｏｓｉｔｉｏｎ：ａｔｔａｃｈｅｍｅｎｔの次の空白行の次の行から２個のダッシュ「−−」直前の空白行の直前のデータまでを、コンテンツ１０４ｂとして抽出する。
ステップＳ２０８において、解析部１２は、メールでない場合はＷｅｂ通信か判定する。Ｗｅｂ通信でない場合は、処理は終わる。
ステップＳ２０９において、解析部１２は、ＨＴＴＰリクエストを抽出し、先頭から最初の空行までをヘッダ１０４ａとして抽出する。
ステップＳ２１０において、ドメイン名抽出部１７は、ヘッダ１０４ａ内のＨｏｓｔヘッダの値を抽出し、ドメイン名１０８とする。
ステップＳ２１１において、解析部１２は、プロキシサーバ４からのデータを監視し、ＨＴＴＰリクエストに対するＨＴＴＰレスポンスを抽出する。
ステップＳ２１２において、解析部１２は、ＨＴＴＰレスポンスにＣｏｎｔｅｎｔ−Ｄｉｓｐｏｓｉｔｉｏｎがあるか調べる。
ステップＳ２１３において、解析部１２は、Ｃｏｎｔｅｎｔ−Ｄｉｓｐｏｓｉｔｉｏｎがあれば、レスポンス内の空白の行以降のボディ部を抽出する。解析部１２は、抽出結果をコンテンツ１０４ｂとする。
ステップＳ２０７、又は、ステップＳ２１３の処理を実施した場合は、その過程で、ドメイン名１０８が抽出されている。
【００３５】
プログラム情報抽出部１３は、コンテンツ１０４ｂから、コード署名付きデータを抽出する。コード署名付きデータは、後述のように不正プログラム情報４００と同じ構成である。コード署名付きデータは後述のようにプログラム情報１０５と記す場合がある。メールであれば、添付ファイルに該当し、Ｗｅｂ通信であればダウンロードしたファイルが該当する。この処理も、フォーマットは標準的なフォーマットで決められているため、抽出の処理が可能である。標準的なフォーマットの例としてＲＦＣ３８５２のＣＭＳ（Ｃｒｙｐｔｇｒａｐｈｉｃ  Ｍｅｓｓａｇｅ  Ｓｙｎｔａｘ）がある。
なお、以下に述べる、メールの場合にコード署名付きデータを抽出する方法、及びＷｅｂ通信の場合にコード署名付きデータを抽出する方法は、いずれも一例である。よって、メールにおける抽出方法、及びＷｅｂ通信の場合の抽出方法は、以下に説明する方法に限定されない。
【００３６】
プログラム情報抽出部１３、証明書抽出部１４及び証明書属性抽出部１５は、第２の抽出部９３を構成する。第２の抽出部９３は、受信データ１０３に含まれる証明書から、証明書の所有者を示す所有者情報１０７を抽出する。以下に具体的に説明する。
【００３７】
＜プログラム情報抽出部１３の動作＞
図６は、プログラム情報抽出部１３による、コンテンツ１０４ｂからコード署名付きデータを抽出する処理を示すフローチャートである。コード署名付きデータは、プログラム情報１０５と記す場合がある。プログラム情報１０５は、図１の不正プログラム情報４００の構成と同じである。
図７は、プログラム情報１０５を示す図である。図７に示すように、プログラム情報１０５は、以下の（ａ）（ｂ）（ｃ）を含む。
（ａ）プログラム１０５ａ、
（ｂ）署名１０５ｂ、
（ｃ）公開鍵１０５ｃを含む証明書１０５ｄ
【００３８】
図６を参照して説明する。以下ではＣＭＳを例にして説明する。プログラム情報抽出部１３は、コンテンツ１０４ｂがＣＭＳでフォーマットされているかを判定する。例えば、ＣＭＳではＡＳＮ．１でコンテンツ１０４ｂがエンコードされている。プログラム情報抽出部１３は、ＡＳＮ．１でコンテンツ１０４ｂがデコードできるかチェックする。
デコードできた場合、ステップＳ３０１及びステップＳ３０２において、プログラム情報抽出部１３は、デコードされたコンテンツ１０４ｂに、オブジェクト識別子＝１．２．８４０．１１３５４９．１．７．２が付されているｓｉｇｎｅｄ−ｄａｔａである署名データが、含まれるかをチェックする。
署名データが含まれていれば、ステップＳ３０３において、プログラム情報抽出部１３は、プログラム情報１０５として、署名データを抽出する。含まれていなければ、プログラム情報抽出部１３は処理を終了する。
【００３９】
＜証明書抽出部１４の動作＞
図８は、証明書抽出部１４が、プログラム情報１０５から、コード署名証明書である証明書１０５ｄを抽出する処理を示すフローチャートである。図８を参照して、証明書抽出部１４の処理を説明する。
証明書抽出部１４は、プログラム情報１０５から、コード署名証明書として証明書１０５ｄを抽出する。プログラム情報１０５であるｓｉｇｎｅｄ−ｄａｔａには、署名者のデータとして、署名を検証するためのｃｅｒｔｉｆｉｃａｔｅｓがある。
ステップＳ４０１において、証明書抽出部１４は、プログラム情報１０５から、ｃｅｒｔｉｆｉｃａｔｅｓを抽出する。
ステップＳ４０２において、証明書抽出部１４は、プログラム情報１０５から、署名者の情報であるｓｉｇｎｅｒＩｎｆｏｓを抽出する。
ステップＳ４０３において、証明書抽出部１４は、ｓｉｇｎｅｒＩｎｆｏｒｓ中のｓｉｇｎｅｒＩｎｆｏから、ＳｉｇｎｅｒＩｄｅｎｔｉｆｉｅｒを抽出する。
ＳｉｇｎｅｒＩｄｅｎｔｉｆｉｅｒは、署名に使用した証明書を特定する情報である。
ステップＳ４０４において、証明書抽出部１４は、ｃｅｒｔｉｆｉｃａｔｅｓから、ＳｉｇｎｅｒＩｄｅｎｔｉｆｉｅｒに一致するｃｅｒｔｉｆｉｃａｔｅを抽出する。証明書抽出部１４は、抽出されたｃｅｒｔｉｆｉｃａｔｅを、署名に使用されたコード署名証明書である証明書１０５ｄとして、証明書属性抽出部１５へ出力する。
【００４０】
＜証明書属性抽出部１５の動作＞
図２を参照して、証明書属性抽出部１５の動作を説明する。証明書属性抽出部１５は、証明書１０５ｄから、証明書１０５ｄの所有者を示す属性である、Ｓｕｂｊｅｃｔ又はＳｕｂｊｅｃｔＡｌｔＮａｍｅを含む、証明書属性を抽出する。証明書属性は、証明書１０５ｄの所有者を示す所有者情報１０７である。図４のステップＳ１０２に示すように、証明書属性抽出部１５は証明書属性を抽出する。コード署名証明書は非特許文献１に記載されているように、一般的に、Ｘ．５０９の形式である。Ｘ．５０９の形式は標準フォーマット化されているため、証明書属性の抽出が可能である。証明書属性抽出部１５は、証明書属性である所有者情報１０７を、検索部１６へ出力する。
【００４１】
＜検索部１６の動作＞
検索部１６は、所有者情報１０７を検索キーとしてドメイン情報検索サービス６を検索することにより、所有者情報１０７の示す所有者が管理する管理ドメイン名を、ドメイン情報検索サービス６から取得する。以下に具体的に説明する。
図４のステップＳ１０３に示すように、検索部１６は、所有者情報１０７を検索キーワードとして、所有者情報１０７を、通信インタフェース３０３を介して、ドメイン情報検索サービス６へ送信する。ドメイン情報検索サービス６はＷｅｂサーバ装置である。具体的には、ドメイン情報検索サービス６は、Ｗｅｂサーバで動作するドメイン情報検索プログラムである。所有者情報１０７として抽出されたＳｕｂｊｅｃｔには、ＣｏｍｍｏｎＮａｍｅと呼ばれる、証明書の持ち主の名前に相当する情報が含まれている。この他に、Ｓｕｂｊｅｃｔには、Ｏｒｇａｎａｉｚａｔｉｏｎ、ＯｒｇａｎａｉｚａｔｉｏｎＵｎｉｔのような、証明書の持ち主が属する、組織の名称または部署の名称に相当する属性が含まれる。なお、会社の名称は、ＣｏｍｍｏｎＮａｍｅに含まれる場合がある。例えば、「ＣｏｍｍｏｎＮａｍｅ＝Ｅｘａｍｐｌｅ  Ｓｙｓｔｅｍｓ，Ｉｎｃｏｒｐｏｒａｔｅｄ」のような場合である。
【００４２】
＜ドメイン情報検索サービス６の動作＞
ドメイン情報検索サービス６は、所有者情報１０７を検索キーワードとして入力とし、所有者情報１０７によって管理されているドメインを検索する。ドメイン情報検索サービス６では、ドメインの所有者は、登録者名または管理者名のようないろいろな名称で管理されることがあるが、ここでは、ドメイン情報検索サービス６は管理者名を参照するとする。この結果、ドメイン情報検索サービス６によって検索された情報を管理ドメイン名２０２とする。
管理ドメイン名２０２は、例えば、以下の（１）から（４）のように、１つ以上検索される。
（１）ｅｘａｍｐｌｅ１２３４５６７８９．ｃｏｍ
（２）ｗｗｗ１．ｅｘａｍｐｌｅ１２３４５６７８９．ｃｏｍ
（３）ｗｗｗ２．ｅｘａｍｐｌｅ１２３４５６７８９．ｃｏｍ
（４）ａｂｃｄｅｆｇｈｉｊｋｌｍｎ．ｃｏ．ｊｐ
これらの管理ドメイン名２０２は、Ｗｅｂサイトとメールアドレスとの両方に使用される。組織によっては、一見関係が無い様に見えるドメイン名同士を管理している組織もある。上記の例の場合、（１）から（３）と、（４）とは、ドメイン名だけを見ると関係は無いが、同じ組織により管理されている。これは、組織が企業であれば、複数の会社を運営し様々なビジネスを展開しているような場合に見られる。ドメイン情報検索サービス６は、管理ドメイン名２０２を、検索部１６へ検索結果として送信する。
【００４３】
検索部１６は、管理ドメイン名２０２をドメイン情報検索サービス６から受け取った場合、判定部１８に管理ドメイン名２０２を出力する。
【００４４】
＜判定部１８の動作＞
判定部１８は、検索部１６によって取得された管理ドメイン名２０２と、第１の抽出部９２によって抽出されたダウンロードドメイン名であるドメイン名１０８とを照合し、照合結果に基づいて、受信データ１０３に含まれるプログラムが不正かどうかを判定する。以下に具体的に説明する。
判定部１８は、管理ドメイン名２０２とドメイン名１０８が入力される。図４のステップＳ１０４及びステップＳ１０５に示すように、判定部１８は、ドメイン名１０８を、管理ドメイン名２０２が含むかチェックする。図４のステップＳ１０６に示すように、チェックの結果、ドメイン名１０８を管理ドメイン名２０２が含む場合には、判定部１８は、正当なプログラムの入手と判定する。図４のステップＳ１０６ａに示すように、ドメイン名１０８を、管理ドメイン名２０２が含まない場合、判定部１８は、不正なプログラムと判定する。これは、証明書の所有者が運営しているドメイン以外からプログラムを入手していることになるからである。
【００４５】
図９は、判定部１８が、ドメイン名をチェックする処理を示すフローチャートである。図９を参照して、判定部１８による処理を詳しく説明する。
ステップＳ５０１において、判定部１８は、管理ドメイン名２０２をリストに変換する。リストには一つ以上の管理ドメイン名２０２がある。リストの要素数をｎ、最初のリスト要素をｉ＝１とする。
リストの要素を、管理ドメイン名＿ｉ（ｉ＝１〜ｎ）とする。
ステップＳ５０２において、判定部１８は、ｒｅｓｕｌｔという変数にＮＧを設定する。
ステップＳ５０３において、判定部１８は、リストの終わりかをチェックする。ステップＳ５０３でｎｏであれば、処理はステップＳ５０４へ進む。
ステップＳ５０４において、判定部１８は、ドメイン名１０８が、管理ドメイン名＿ｉに一致するかチェックする。
ステップＳ５０５において、一致すれば（ステップＳ５０４でｙｅｓ）、判定部１８は、変数ｒｅｓｕｌｔにＯＫを設定し、処理は終了する。
一致しなければ（ステップＳ５０４でｎｏ）、処理はステップＳ５０６に進み、ｉが１つインクリメントされ、処理はステップＳ５０３へ進む。
【００４６】
図９のフローチャートに従うと、管理ドメイン名２０２の中にドメイン名１０８が含まれていれば、ｒｅｓｕｌｔ＝ＯＫとして処理はおわり、含まれていなければｒｅｓｕｌｔ＝ＮＧとして処理はおわる。ｒｅｓｕｌｔ＝ＯＫは、判定部１８がプログラムを正当と判定したことを示し、ｒｅｓｕｌｔ＝ＮＧは、判定部１８がプログラムを不正と判定したことを示す。
【００４７】
もし、コード署名鍵及び証明書が攻撃者に盗まれた結果生成された不正プログラム情報４００ならば、不正プログラム情報４００は、攻撃者の管理するドメイン名から、Ｗｅｂサイトまたは添付メールを経由して配布される。このため、攻撃者の管理するドメイン名がドメイン名１０８として抽出された場合、ドメイン情報検索サービス６から取得される管理ドメイン名２０２に、ドメイン名１０８は含まれない。よって、プログラムであるファイル４０１が不正であることがわかる。
【００４８】
判定部１８は、真正または不正を示す判定結果を、判定結果１０９として出力部１９へ出力する。判定結果１０９は、以下の（１）から（４）の情報を含んでよい。
（１）真正または不正を示す判定結果、
（２）ドメイン名１０８、
（３）所有者情報１０７、
（４）プログラム情報１０５
なお、解析部１２がデータを解析する際に、Ｗｅｂサイトからのダウンロードであればダウンロードしたタイムスタンプを抽出し、添付メールであれば受信したタイムスタンプを抽出してもよい。解析部１２は、抽出したタイムスタンプ１１１を判定部１８へ入力する。判定部１８は、入力されたタイムスタンプ１１１を判定結果１０９に含めても良い。上記の様に判定結果１０９を構成することで、タイプスタンプ１１１及びドメイン名１０８により、何時、何処から入手したプログラム情報１０５が不正かを認識できる。
【００４９】
＜出力部１９の動作＞
出力部１９は、判定結果１０９を出力フォーマットに加工し、判定結果１１０として、入出力インタフェース３０５へ出力する。出力フォーマットは、例えばテキストファイルのフォーマットである。出力部１９は、判定結果１１０を、検証装置１の利用者が目視できるように表示装置に画面表示を行う機能を有する表示処理部１９ａを備えても良い。
【００５０】
＊＊＊実施の形態１の効果＊＊＊
実施の形態１の検証装置１は、Ｗｅｂサイトからのダウンロードにより入手され、または添付メールに添付されたファイルとして入手された、プログラム情報１０５について、対応する証明書内の所有者の情報から、その所有者が管理しているドメイン名を調べる。そして、プログラム情報１０５が、そのドメイン名から入手されたかを検証する。この検証により、盗まれたコード署名鍵及び証明書によって、コード署名付きプログラムであるプログラム情報１０５が作成されたか検知できる。
【００５１】
＜変形例＞
実施の形態１では、検証装置１の機能がソフトウェアで実現されるが、変形例として、検証装置１の機能がハードウェアで実現されてもよい。
図１０は、実施の形態１の変形例に係る検証装置１の構成を示す図である。検証装置１は、電子回路９９、補助記憶装置３０４、通信インタフェース３０３、入出力インタフェース３０５を備える。電子回路９９は、入力部１１と、解析部１２と、プログラム情報抽出部１３と、証明書抽出部１４と、証明書属性抽出部１５と、検索部１６と、ドメイン名抽出部１７と、判定部１８と、出力部１９との機能を実現する専用の電子回路である。電子回路９９は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、または、ＦＰＧＡである。ＧＡは、Ｇａｔｅ  Ａｒｒａｙの略語である。ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。ＦＰＧＡは、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。検証装置１の構成要素の機能は、１つの電子回路で実現されてもよいし、複数の電子回路に分散して実現されてもよい。別の変形例として、検証装置１の構成要素の一部の機能が電子回路で実現され、残りの機能がソフトウェアで実現されてもよい。
【００５２】
プロセッサと電子回路の各々は、プロセッシングサーキットリとも呼ばれる。つまり、検証装置１において、入力部１１と、解析部１２と、プログラム情報抽出部１３と、証明書抽出部１４と、証明書属性抽出部１５と、検索部１６と、ドメイン名抽出部１７と、判定部１８と、出力部１９との機能は、プロセッシングサーキットリにより実現される。
【００５３】
検証装置１において、入力部１１と、解析部１２と、プログラム情報抽出部１３と、証明書抽出部１４と、証明書属性抽出部１５と、検索部１６と、ドメイン名抽出部１７と、判定部１８と、出力部１９との「部」を、「工程」に読み替えてもよい。
また、検証装置１の入力部１１と、解析部１２と、プログラム情報抽出部１３と、証明書抽出部１４と、証明書属性抽出部１５と、検索部１６と、ドメイン名抽出部１７と、判定部１８と、出力部１９とによる動作は、検証方法としてとらえることが可能である。
【００５４】
実施の形態２．
以下に実施の形態２の検証装置１を説明する。
図１１は、実施の形態２の検証装置１の機能構成図である。実施の形態２の検証装置１は、以下が、実施の形態１と異なる。これら以外の各部の処理は実施の形態１に同じである。
【００５５】
（１）ドメイン名抽出部１７は、検索部１６へ、ドメイン名１０８を出力する。
（２）検索部１６は、第１の抽出部９２によって抽出されたドメイン名１０８を検索キーとしてドメイン情報検索サービス６を検索することにより、ドメイン情報検索サービス６においてドメイン名１０８に対応付けられている管理者名１１２を、ドメイン情報検索サービス６から取得する。
つまり、検索部１６は、ドメイン情報検索サービス６に対する検索キーワードとして、ドメイン名１０８を使用してドメイン情報検索サービス６を検索する。検索部１６は、検索する情報として、ドメイン名１０８で示されるドメインの管理者名１１２をドメイン情報検索サービス６で検索する。検索部１６は、ドメイン情報検索サービス６に対する検索結果であるドメイン名１０８の管理者名１１２と、証明書属性抽出部１５が抽出した所有者情報１０７とを、判定部１８に出力する。
（３）判定部１８は、検索部１６によって取得された管理者名１１２と、第２の抽出部９３によって抽出された所有者情報１０７とを照合し、照合結果に基づいて、受信データ１０３に含まれるプログラムが不正かどうかを判定する。
つまり、判定部１８は、ドメイン名１０８の管理者名１１２と、所有者情報１０７の示す所有者とが一致していればプログラム情報１０５のプログラム１０５ａは真正、一致しなければプログラム情報１０５のプログラム１０５ａ不正と判定する。
【００５６】
＊＊＊判定部１８の動作＊＊＊
図１２は、判定部１８が、証明書の所有者をチェックする処理を示すフローチャートである。ドメインの管理者名１１２は、別名も検索される可能性があるため、判定部１８は、図１２の様に処理する。
ステップＳ６０１において、判定部１８は、ドメインの管理者名１１２をリストに変換する。リストには１以上の管理者名１１２が記載される。次に、判定部１８は、リストの要素数をｎ、最初のリスト要素をｉ＝１とする。判定部１８はリストの要素を、ドメインの管理者名＿ｉ（ｉ＝１〜ｎ）とする。
ステップＳ６０２において、判定部１８はｒｅｓｕｌｔという変数にＮＧを設定する。
ステップＳ６０３において、判定部１８はリストの終わりかチェックする。ｎｏの場合、処理はステップＳ６０４へ進む。
ステップＳ６０４において、判定部１８は、所有者情報の示す証明書所有者名がドメインの管理者名＿ｉに一致するかチェックする。一致すれば、ステップＳ６０５において、判定部１８はｒｅｓｕｌｔにＯＫを設定し、処理をおわる。一致しなければ、処理はステップＳ６０６に進み、ｉが１つインクリメントされ、処理はステップＳ６０３へ進む。
このフローチャートに従うと、ドメインの管理者名１１２の中に所有者情報１０７の示す所有者が含まれていれば、ｒｅｓｕｌｔ＝ＯＫとして処理はおわり、含まれていなければｒｅｓｕｌｔ＝ＮＧとして処理はおわる。ｒｅｓｕｌｔ＝ＯＫは正当なプログラムであるとの判定であり、ｒｅｓｕｌｔ＝ＮＧは不正なプログラムであるとの判定である。
【００５７】
＊＊＊実施の形態２の効果＊＊＊
コード署名付きプログラムであるプログラム情報１０５について、検証装置１が証明書の所有者とドメイン名１０８の管理者とが一致するか検証する。この検証により、盗まれたコード署名鍵及び証明書によって、コード署名付きプログラムであるプログラム情報１０５が作成されたか検知できる。
【００５８】
実施の形態３．
実施の形態１、２では、コード署名付きプログラムであるプログラム情報１０５には、署名が１つ付与されていることを想定している。しかし、ＣＭＳのＳｉｇｎｅｒｓＩｎｆｏｓを例にとるならば、複数のＳｉｇｎｅｒＩｎｆｏを取りうる場合は、プログラムに対する複数の署名が、コード署名付きプログラムであるプログラム情報１０５に含まれている場合がある。ここでは、ＣＭＳはあくまでフォーマットの一例であり、複数の署名を持つコード署名付きプログラムはありうる。例えば、プログラムに、開発者Ｘ、開発者Ｙの各々が署名を付与する場合もあるし、開発者Ｚが署名アルゴリズムを２種類用いて、それらにより生成した２つの署名を付与する場合も有りうる。実施の形態３では、複数の署名が付与されたコード署名付きプログラムであるプログラム情報１０５に対する処理を含んだ実施形態を示す。
【００５９】
図１３は、実施の形態３における、証明書抽出部１４の処理を示したものである。図１３は図８に対応する。以下の処理は、ＣＭＳの処理を示す。
ステップＳ７０１では、証明書抽出部１４は、ｉ＝１とし、ＳｉｇｎｅｒＩｎｆｏｓ内のｓｉｇｎｅｒＩｎｆｏの数をｎとする。
ステップＳ７０２では、証明書抽出部１４は、ｉ＞ｎかチェックする。ｙｅｓの場合、処理は終わる。ｎｏであれば処理は、ステップＳ７０３に移る。
ステップＳ７０３では、証明書抽出部１４は、ＳｉｎｇｅｒＩｎｆｏｓからｓｉｇｎｅｒＩｎｆｏである、ｓｉｇｎｅｒＩｎｆｏ＿ｉを抽出する。
ステップＳ７０４では、証明書抽出部１４は、ｓｉｇｎｅｒＩｎｆｏ＿ｉを用いて署名を検証する。
署名の検証方法は、ＣＭＳで実施する方法が決まっており、これに従う。
ステップＳ７０５では、証明書抽出部１４は、署名の検証に成功したかチェックする。ｙｅｓであれば、処理はステップＳ７０６に移り、ｎｏであれば、処理はステップＳ７１１に移る。
ステップＳ７０６では、証明書抽出部１４は、ｓｉｇｎｅｒＩｎｆｏ＿ｉ内のＳｉｇｎｅｒＩｄｅｎｔｉｆｉｅｒを抽出する。抽出方法は、図８のステップＳ４０３に同じである。
ステップＳ７０７では、証明書抽出部１４は、ＳｉｇｎｅｒＩｄｅｎｔｉｆｉｅｒに一致するｃｅｒｔｉｆｉｃａｔｅをｃｅｒｔｉｆｉｃａｔｅから抽出する。抽出方法は図８のステップＳ４０４に同じである。
ステップＳ７０８では、証明書抽出部１４は、ｃｅｒｔｉｆｉｃａｔｅを検証する。ｃｅｒｔｉｆｉｃａｔｅの検証方法は、ＣＭＳまたは一般的なＰＫＩ（Ｐｕｂｌｉｃ  Ｋｅｙ  Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）において既存の方法があるため、これに従う。
ステップＳ７０９では、証明書抽出部１４は、ｃｅｒｔｉｆｉｃａｔｅの検証に成功したかチェックする。ｙｅｓであれば、処理はステップＳ７１０に移り、ｎｏであれば、処理はステップＳ７１１に移る。
ステップＳ７１０では、証明書抽出部１４はｃｅｒｔｉｆｉｃａｔｅをチェック対象リストに加える。
ステップＳ７１１では、証明書抽出部１４はｉ＝ｉ＋１とする。
【００６０】
チェック対象リストは、ステップＳ７０１の段階で空である。図１３の処理が完了した後に、証明書抽出部１４は、チェック対象リストに記録されているｃｅｒｔｉｆｉｃａｔｅを、ｃｅｒｔｉｆｉｃａｔｅ＿ｊ（ｊ＝１〜ｋ）とする。つまり、ｋ個のｃｅｒｔｉｆｉｃａｔｅがチェック対象リストに記録されている。次に、証明書抽出部１４は、ｃｅｒｔｉｆｉｃａｔｅ＿ｊそれぞれについて、図２の証明書属性抽出部１５、検索部１６が処理を実行する。この結果、ｃｅｒｔｉｆｉｃａｔｅ＿ｊ（ｊ＝１〜ｋ）ごとの、管理ドメイン名２０２が判明する。さらに、これらの管理ドメイン名について、判定部１８がチェックを行い、判定部１８は、１つ以上、判定結果１０９＝真正となった場合に、コード署名付きプログラムは正当であると判断する。
【００６１】
もし、チェック対象リストが空であれば、どの署名に該当するｃｅｒｔｉｆｉｃａｔｅであるコード署名証明書が無いのだから、判定部１８は、コード署名付きプログラムは不正であると判断する。
【００６２】
＊＊＊実施の形態３の効果＊＊＊
以上のように、検証装置１は、Ｗｅｂサイトからのダウンロード、添付メールに添付されたファイルとして入手した、コード署名付きプログラムについて、複数の署名が付与されていた場合でも、対応する証明書内の所有者の情報から、その所有者が管理しているドメイン名を調べ、そのドメイン名から入手したかを調べることができる。よって、盗まれたコード署名鍵及び証明書によって、コード署名付きプログラムが作成されたか検知が可能である。
【００６３】
実施の形態４．
実施の形態３では、検証装置１の判定部１８は、複数の署名に対応するコード署名証明書がある複数ある場合、そのうち１つ以上、判定結果１０９＝真正となった場合に、コード署名付きプログラムは正当であると判断する。これに対して、実施の形態４では、判定結果１０９＝真正となる数に閾値を設けて判断しても良い。例えば、コード署名証明書がｐ個あった場合、そのｑ％以上について、判定結果１０９＝真正となった場合に、コード署名付きプログラムは正当であると判断する。または、ｒ個以上、判定結果１０９＝真正となった場合に、コード署名付きプログラムは正当であると判断してもよい。但し、ｒは、コード署名証明書の個数以下である。または、全ての判定結果１０９＝真正となった場合に、コード署名付きプログラムは正当であると判断してもよい。
【００６４】
＊＊＊実施の形態４の効果＊＊＊
以上のように、検証装置１は、Ｗｅｂサイトからのダウンロードまたは添付メールに添付されたファイルとして入手した、コード署名付きプログラムについて、複数の署名が付与されていた場合でも、対応する証明書内の所有者の情報から、その所有者が管理しているドメイン名を調べる。そして、検証装置１は、そのドメイン名からコード署名付きプログラムを入手したかを調べ、それらが一致する数が、予め定めた閾値を下回った場合に、盗まれたコード署名鍵及び証明書によって、コード署名付きプログラムが作成されたことの検知が可能である。
【００６５】
以上、実施の形態１から４について説明したが、これらの実施の形態のうち、２つ以上を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、１つを部分的に実施しても構わない。あるいは、これらの実施の形態のうち、２つ以上を部分的に組み合わせて実施しても構わない。なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００６６】
１  検証装置、２  攻撃者、３  メールサーバ、４  プロキシサーバ、５  端末、６  ドメイン情報検索サービス、７  ユーザ、１１  入力部、１２  解析部、１３  プログラム情報抽出部、１４  証明書抽出部、１５  証明書属性抽出部、１６  検索部、１７  ドメイン名抽出部、１８  判定部、１９  出力部、１９ａ  表示処理部、１０１  プロキシサーバ４からのデータ、１０２  メールサーバ３からのデータ、１０３  受信データ、１０４ａ  ヘッダ、１０４ｂ  コンテンツ、１０５  プログラム情報、１０５ａ  プログラム、１０５ｂ  署名、１０５ｃ  公開鍵、１０５ｄ  証明書、１０７  所有者情報、１０８  ドメイン名、１０９  判定結果、１１０  判定結果、１１１  タイムスタンプ、１１２  管理者名、２０２  管理ドメイン名、３０１  プロセッサ、３０２  メモリ、３０３  通信インタフェース、３０４  補助記憶装置、３０５  入出力インタフェース、３０６  信号線、４００  不正プログラム情報、４０１  ファイル、４０２  署名、４０３  証明書、４０３ａ  公開鍵、９１  取得部、９２  第１の抽出部、９３  第２の抽出部、９９  電子回路。
【図１】
2019053882.tif 000003
【図２】
2019053882.tif 000004
【図３】
2019053882.tif 000005
【図４】
2019053882.tif 000006
【図５】
2019053882.tif 000007
【図６】
2019053882.tif 000008
【図７】
2019053882.tif 000009
【図８】
2019053882.tif 000010
【図９】
2019053882.tif 000011
【図１０】
2019053882.tif 000012
【図１１】
2019053882.tif 000013
【図１２】
2019053882.tif 000014
【図１３】
2019053882.tif 000015
【国際調査報告】
2019053882.tif 000016
2019053882.tif 000017