(57)【特許請求の範囲】
【請求項１】
コンピュータシステムの挙動を標準化する方法であって、
コンピュータのプロセッサが、呼び出し命令を取得し、前記呼び出し命令によって呼び出されるコードセグメントの情報を前記呼び出し命令に基づいて取得し、コードセグメント呼び出しデータ構造を構築し、
前記コードセグメント呼び出しデータ構造は、前記呼び出し命令がノードとして配置されているコードセグメントを取り込むとともに、前記呼び出し命令によって構築された、前記呼び出し命令を起動するコードセグメントと、呼び出しパスとして呼び出されるコードセグメントとの間の呼び出し関係を取り込むことによって構築され、前記コードセグメント呼び出しデータ構造は数個のサブデータ構造を備えており、
前記プロセッサが、現在の操作要求に関連したサブデータ構造を前記データ構造から取得して、前記現在の操作要求のイニシエータ、操作方法、及び操作対象を前記サブデータ構造に基づいて決定し、
前記プロセッサが、前記コンピュータシステムの挙動を標準化するための規則を取得し、決定された前記現在の操作要求のイニシエータ、操作方法、及び操作対象を前記規則と比較して、前記現在の操作要求が許容できるかどうかを判定する、方法。
【請求項２】
前記コンピュータシステムの挙動を標準化するための規則は、前記呼び出し命令のイニシエータ、前記呼び出し命令の操作方法、及び前記呼び出し命令の操作対象である３つの要素を備えており、
前記コンピュータシステムの挙動を標準化するための規則は、前記現在の操作要求の前記イニシエータが前記規則の要件を満たしている場合、前記現在の操作要求は実施が許可され、また、前記現在の操作要求の前記イニシエータ及び前記操作方法が前記規則の要件を満たしている場合、前記現在の操作要求は実施が許可され、さらに、前記現在の操作要求の前記イニシエータ及び前記操作対象が前記規則の要件を満たしている場合、前記現在の操作要求は実施が許可され、前記現在の操作要求の前記イニシエータ、前記操作方法、及び前記操作対象が前記規則の要件を満たしている場合、前記現在の操作要求は実施が許可される、請求項１記載のコンピュータシステムの挙動を標準化する方法。
【請求項３】
前記イニシエータは、前記現在の操作要求よりも前にあり、前記現在の操作要求に関連している全てのノード及び呼び出しパスで構成されているサブデータ構造である、請求項１または２に記載のコンピュータシステムの挙動を標準化する方法。
【請求項４】
前記操作対象は、前記現在の操作要求に対して呼び出される前記コードセグメントによって前記プロセッサの処理により操作される内容である、請求項１記載のコンピュータシステムの挙動を標準化する方法。
【請求項５】
前記操作方法は、前記現在の操作要求に対して呼び出される前記コードセグメントによって前記プロセッサにより実施される操作である、請求項１記載のコンピュータシステムの挙動を標準化する方法。
【請求項６】
前記プロセッサが、前記現在の操作要求に関連したサブデータ構造をデータ構造から取得することは、前記プロセッサが、
前記サブデータ構造を取得するための条件を事前設定し、
前記現在の操作要求が前記事前設定条件を満たしている場合には、前記データ構造に基づいて、前記現在の操作要求に関連した前記ノード及び前記呼び出しパスを後戻りして、前記現在の操作要求に関連した前記サブデータ構造を取得することを含む、請求項１記載のコンピュータシステムの挙動を標準化する方法。
【請求項７】
さらに、コンピュータの動作領域は少なくとも２つのサブ領域に分割され、
サブデータ構造を取得するための前記事前設定条件は、１つのサブ領域内にある操作要求が他のサブ領域内にあるコードセグメントを呼び出すという条件である、請求項６記載のコンピュータシステムの挙動を標準化する方法。
【請求項８】
前記プロセッサが前記データ構造を構築することは、前記プロセッサが、
前記呼び出し命令を取得し、
前記呼び出し命令を起動する前記コードセグメント及び前記呼び出されるコードセグメントを取得し、
取得された前記呼び出し命令を起動する前記コードセグメント及び取得された前記呼び出されるコードセグメントを用いることによって、呼び出しノード及び被呼び出しノードをそれぞれ構築し、
前記呼び出し命令を起動する前記コードセグメントと前記呼び出されるコードセグメントとの間の呼び出し関係を構築し、前記構築された呼び出し関係を前記呼び出しノードと前記被呼び出しノードの間にある呼び出しパスとして取り込むことを含む、請求項１記載のコンピュータシステムの挙動を標準化する方法。
【請求項９】
前記呼び出し命令はアセンブラ命令であり、前記プロセッサが前記呼び出し命令を取得することは、前記プロセッサが、動作しているコンピュータコードに対してバイナリ変換を行って、前記呼び出し命令を取得することを含む、請求項８記載のコンピュータシステムの挙動を標準化する方法。
【請求項１０】
前記プロセッサが、前記呼び出し命令を起動する前記コードセグメント及び前記呼び出されるコードセグメントを取得することは、前記プロセッサが、
前記呼び出されるコードセグメントのアドレスを呼び出しパラメータから取得し、
前記呼び出し命令が配置されている前記コードセグメントが前記呼び出し命令を起動する前記コードセグメントである状態で、前記呼び出されるコードセグメントを前記呼び出されるコードセグメントのアドレスに基づいて取得することを含む、請求項８記載のコンピュータシステムの挙動を標準化する方法。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
［技術分野］
本開示はコンピュータ分野に関し、詳細にはコンピュータシステムの挙動を標準化する方法に関する。
［背景技術］
既存のコンピュータセキュリティ技術には主に、１．例えばウィルス除去ソフトウェアやファイアウォール等のソフトウェアといった、「スキャンして除去する」メカニズムに基づくコンピュータセキュリティシステム  ２．例えば「タイムマシン」や「サンドボックス」等のセキュリティシステムといった、「遮る」メカニズムに基づくコンピュータセキュリティシステム  ３．「セキュアなオペレーションシステム（略してセキュアなＯＳとする）」といった、「システムを強化する」理論に基づくコンピュータセキュリティシステムがある。
【０００２】
上述の「スキャンして除去する」メカニズムと「遮る」メカニズムとは、コンピュータシステムのセキュリティを確実なものにすることは理論上できない。また、「システムを強化する」メカニズムは、実質的にはコンピュータの挙動を制限することによってコンピュータ操作のセキュリティを確実なものにするものであり、このメカニズムに基づいた製品には主として、セキュアなオペレーションシステムや他の積極防御型製品が含まれる。しかし、この種の製品は、コンピュータのいくつかの挙動を個々に制限することでしかシステムに対してセキュリティ制御を行うことができず、その結果コンピュータのアプリケーションは大幅に制限される。
【０００３】
実際には、コンピュータの構造、挙動、及び状態変化が複雑なために、コンピュータのある挙動によって、コンピュータには若干の状態変化しか生じないこともあるし、コンピュータに一連の反応が生じてしまった結果、状態が連続して変化してしまうこともある。従って、コンピュータの挙動の正当性を現在のコンピュータの挙動に照らすのみで判断するということでは、コンピュータシステムのセキュリティを効果的に確保することはできない。これが、積極防衛型ソフトウェアを補助的なセキュリティシステムとしてしか使用できない理由である。
【０００４】
さらには、コンピュータ操作が複雑なために、コンピュータのある特殊な挙動が、許可されたプログラムによって引き起こされることもあれば、不正なコードによって引き起こされることもある。ある特殊な挙動の正当性をある特殊な挙動自体のみで判断する場合、「何にでも適合する（ｏｎｅ−ｓｉｚｅ−ｆｉｔｓ−ａｌｌ）」現象が生じるので、許容挙動と不正なコードによって引き起こされる許容外挙動とが同じように処理されてしまい、その結果「正常なもの」と「不正なもの」を効果的に区別するというセキュリティの目的を達成することができない。
【０００５】
コンピュータのセキュリティは組織的なものでなければならず、局所的な問題を解決することでコンピュータシステムのセキュリティを確保することはできない。例えば、静的なテキストコードを確実に変更されないようにしたときに、記憶コードや記憶パラメータが不正に変更された場合には、コンピュータシステムのセキュリティを確保することができない。動作プロセス中におけるコンピュータの操作はいずれもコンピュータが所有する機能であり、コンピュータの各操作は個々では「正常」でも「不正」でもない。つまり、例えば、ファイル削除、記録変更、及び命令の再組み換えは、個々では「正常」または「不正」と判断することはできない。
【０００６】
よって、コンピュータシステムセキュリティは現在、主として２つの問題に直面している。第１の問題は、コンピュータの挙動の正当性を判断するための根拠を得ることである。具体的には、コンピュータシステムの挙動の正当性を判断する際に、決定条件として形成される効果的な「証拠の連鎖」がなく、このためコンピュータシステムのセキュリティにとっての根本的な問題は「連続的」かつ「効果的な」決定メカニズムを確立することである。第２の問題は、「正常な」挙動と「不正な」挙動とをいかに効果的に区別するかである。すなわち、コンピュータシステムの動作プロセス中、挙動自体は「正常」でも「不正」でもなく、ある挙動が不正に使用された場合にだけ不正な挙動になる。このため、コンピュータシステムの動作中のセキュリティにとっての最重要問題は、「正常な」挙動を「不正な」挙動と区別する手法である。
［発明の概要］
本開示は、コンピュータシステムの挙動を標準化する方法を提供する。これは、コンピュータシステムの動作の挙動及び状況に対して全体的かつ連続的な監視を実現することによって、コンピュータシステムの挙動に対して全体的かつ連続的な制御を実現し、これによりコンピュータシステムの挙動のセキュリティを確保するという目的を達成するものである。コンピュータの挙動を完全に監視することもコンピュータシステムの挙動を制御することもできないという既存の情報セキュリティ技術における不利益は克服される。
【０００７】
上述の問題を解決するために、コンピュータシステムの挙動を標準化する方法を本開示の一実施形態において提供する。本実施形態によれば、本方法は以下のとおりである。
呼び出し命令を取得し、呼び出し命令によって呼び出されるコードセグメントの情報を呼び出し命令に基づいて取得し、コードセグメント呼び出しデータ構造を構築し、コードセグメント呼び出しデータ構造は、呼び出し命令がノードとして配置されているコードセグメントを取り込むとともに、呼び出し命令によって構築された、呼び出し命令を起動するコードセグメントと、呼び出しパスとして呼び出されるコードセグメントとの間の呼び出し関係を取り込むことによって構築され、コードセグメント呼び出しデータ構造は数個のサブデータ構造を有している。
【０００８】
現在の操作要求に関連したサブデータ構造をデータ構造から取得して、現在の操作要求が現在の呼び出し命令の実行動作である状態で、現在の操作要求のイニシエータ、操作方法、及び操作対象をサブデータ構造に基づいて決定する。
【０００９】
コンピュータシステムの挙動を標準化するための規則を取得し、決定された現在の操作要求のイニシエータ、操作方法、及び操作対象を規則と比較して、現在の操作要求が許容できるかどうかを判定する。
【００１０】
任意に、コンピュータシステムの挙動を標準化するための規則は、操作要求のイニシエータ、操作要求の操作方法、及び操作要求の操作対象である３つの要素を有している。
規則は、決定されたイニシエータが規則の要件を満たしている場合、現在の操作要求は実施が許可され、また、決定されたイニシエータ及び決定された操作方法が規則の要件を満たしている場合、現在の操作要求は実施が許可され、さらに、決定されたイニシエータ及び決定された操作対象が規則の要件を満たしている場合、現在の操作要求は実施が許可され、決定されたイニシエータ、決定された操作方法、及び決定された操作対象が規則の要件を満たしている場合、現在の操作要求は実施が許可される。
【００１１】
任意に、イニシエータは、現在の操作要求よりも前にあり、現在の操作要求に関連している全てのノード及び呼び出しパスで構成されているサブデータ構造である。
任意に、操作対象は、現在の操作要求に対して呼び出されるコードセグメントによって操作される内容である。
【００１２】
任意に、操作方法は、現在の操作要求に対して呼び出されるコードセグメントによって実施される操作である。
任意に、現在の操作要求に関連したサブデータ構造をデータ構造から取得することは、サブデータ構造を取得するための条件を事前設定することを含む。
【００１３】
現在の操作要求が事前設定条件を満たしている場合には、データ構造に基づいて、現在の操作要求に関連したノード及び呼び出しパスを後戻りして、現在の操作要求に関連したサブデータ構造を取得する。
【００１４】
任意に、本方法はさらに以下を含む。
コンピュータの動作領域を少なくとも２つのサブ領域に分割する。
サブデータ構造を取得するための事前設定条件は、１つのサブ領域内にある操作要求が他のサブ領域内にある対象を操作するという条件である。
【００１５】
任意に、データ構造の構築は以下のように行う。
呼び出し命令を取得する。
呼び出し命令を起動するコードセグメント及び呼び出されるコードセグメントを取得する。
【００１６】
取得された呼び出し命令を起動するコードセグメント及び取得された呼び出されるコードセグメントを用いることによって、呼び出しノード及び被呼び出しノードをそれぞれ構築する。
【００１７】
呼び出し命令を起動するコードセグメントと呼び出されるコードセグメントとの間の呼び出し関係を構築し、構築された呼び出し関係を呼び出しノードと被呼び出しノードとの間にある呼び出しパスとして取り込む。
【００１８】
任意に、呼び出し命令はアセンブラ命令であり、呼び出し命令の取得は以下を含む。
動作しているコンピュータコードに対してバイナリ変換を行って、呼び出し命令を取得する。
【００１９】
任意に、呼び出し命令を起動するコードセグメント及び呼び出されるコードセグメントを取得することは、以下を含む。
呼び出されるコードセグメントのアドレスを呼び出しパラメータから取得する。
【００２０】
呼び出し命令が配置されているコードセグメントが呼び出し命令を起動するコードセグメントである状態で、呼び出されるコードセグメントを呼び出されるコードセグメントのアドレスに基づいて取得する。
【００２１】
従来技術と比較して、本開示は次のような効果がある。
本開示の技術的解決法を用いることにより、現在の操作要求に関連したサブデータ構造を、構築されたコードセグメント呼び出しデータ構造から取得し、現在の操作要求のイニシエータ、操作方法、及び操作対象をサブデータ構造に基づいて決定する。したがって、現在の操作要求は実施が許可されるかどうかを、サブデータ構造及び規則によって決定されたイニシエータ、操作方法、及び操作対象の間の比較結果によって判定する。上述の解決法により、現在の操作要求を実施前に分析可能になり、従来技術と比べて、現在の操作の危険性に対する分析が動作実行結果に依存せず、危険が発生する前に防御が可能になる。その上、従来技術において現在の操作それぞれを個々に分析するのとは違い、現在の操作要求に関連している動的かつ連続的なサブデータ構造を用いて現在の操作要求を記述する。よって、現在の操作要求を、現在の操作要求の前にあり、かつ現在の操作要求に関連している挙動と関連付けることにより、現在の操作要求が「正常」か「不正」かを効果的に判定することができる。よって、コンピュータシステムの挙動はイベント後でしか監視・分析できないという従来における不利益を解決し、現在の操作要求が「正常」か「不正」かを判断するために操作の挙動を「判定」することができないという従来における不利益を解決する。
【００２２】
さらに、本開示の特定の実施形態において、コンピュータシステムの挙動を標準化するための規則は、操作要求のイニシエータが規則の要件を満たしている場合、現在の操作要求は実施が許可され、また、操作要求のイニシエータ及び操作方法が規則の要件を満たしている場合、現在の操作要求は実施が許可され、さらに、操作要求のイニシエータ及び操作対象が規則の要件を満たしている場合、現在の操作要求は実施が許可され、操作要求のイニシエータ、操作方法、及び操作対象が規則の要件を満たしている場合、現在の操作要求は実施が許可されるものであり得る。このコンピュータシステムの挙動を標準化する規則は実際の状況に応じて決定可能であり、非常に順応性がある。
【図面の簡単な説明】
【００２３】
【図１】本開示のある特定の実施形態に係るコンピュータシステムの挙動を標準化する方法のフローチャートである。
【図２】コードセグメント呼び出しデータ構造を構築する方法のフローチャートである。
【図３】本開示のある特定の実施形態に係るコードセグメントの呼び出し関係の概略図である。
【図４】本開示のある特定の実施形態において構築されたコードセグメント呼び出しデータ構造の概略図である。
【発明を実施するための形態】
【００２４】
本開示のある特定の実施形態の範囲内において、現在の操作要求に関連するサブデータ構造はデータ構造から得られ、現在の操作要求のイニシエータ、操作方法及び操作対象は、サブデータ構造を基にして決定される。つまり、現在の操作要求の実行が許可されるかどうかは、サブデータ構造及び規則によって決定されたイニシエータと操作方法と操作対象との間の比較結果によって判断される。上述の解決方法によって、現在の操作要求の実行前にその現在の操作要求を分析することができるとともに、従来技術と比べて現在の操作の危険性分析が動作実行結果に依存しなくなり、危険が生じる前に防御が可能になる。さらに、従来技術において現在の操作の各々に対して別々に分析していたのとは異なり、現在の操作要求に関連した動的かつ連続的なサブデータ構造を用いて現在の操作要求を記述する。よって、現在の操作要求と、現在の操作要求より前にある、現在の操作要求に関連する挙動とを関連付けることにより、現在の操作要求を生じさせた理由が特定できるので、現在の操作要求が「正常」なのか「不正」なのかが、現在の操作要求を生じさせた関連する関係が「正常」か「不正」かを確認することで判断できる。これにより、コンピュータシステムの挙動はイベント後でしか監視・分析できないという従来技術の不利益が解決されるとともに、現在の操作要求が「正常」か「不正」かを判断するために操作の挙動を認識することができないという従来技術の不利益が解決される。
【００２５】
図１は、本開示のある特定の実施形態に係るコンピュータシステムの挙動を標準化する方法のフローチャートである。図１を参照すると、本開示のある特定の実施形態に係るコンピュータシステムの挙動を標準化する方法は、以下のステップを有している。
【００２６】
ステップＳ１０では、呼び出し命令を取得し、呼び出し命令によって呼び出されるコードセグメントの情報を呼び出し命令に基づいて取得して、コードセグメント呼び出しデータ構造を構築する。ここで、コードセグメント呼び出しデータ構造は、呼び出し命令がノードとして配置されているコードセグメントを取り込むとともに、呼び出し命令によって構築された、呼び出し命令を起動するコードセグメントと、呼び出しパスとして呼び出されるコードセグメントとの間の呼び出し関係を取り込むことによって構築される。また、コードセグメント呼び出しデータ構造は数個のサブデータ構造を有している。
【００２７】
ステップＳ２０では、現在の操作要求に関連したサブデータ構造をデータ構造から取得して、現在の操作要求が現在の呼び出し命令の実行動作である状態で、現在の操作要求のイニシエータ、操作方法、及び操作対象をサブデータ構造に基づいて決定する。
【００２８】
ステップＳ３０では、コンピュータシステムの挙動を標準化するための規則を取得して、決定された現在の操作要求のイニシエータ、操作方法、及び操作対象を規則と比較して、現在の操作要求が許容可能かもしくは正当かどうかを判定する。
【００２９】
以下に、本開示の特定の実施形態に係るコンピュータシステムの挙動を標準化する方法を、特定の実施形態及び後述する図面と共に詳細に説明する。これにより、当業者であれば本開示の精神をよりよく理解できるであろう。
【００３０】
ステップＳ１０において、呼び出し命令を取得し、呼び出し命令によって呼び出されるコードセグメントの情報を呼び出し命令に基づいて取得して、コードセグメント呼び出しデータ構造を構築する。ここで、コードセグメント呼び出しデータ構造は、呼び出し命令がノードとして配置されているコードセグメントを取り込むとともに、呼び出し命令によって構築された、呼び出し命令を起動するコードセグメントと、呼び出しパスとして呼び出されるコードセグメントとの間の呼び出し関係を取り込むことによって構築される。また、コードセグメント呼び出しデータ構造は数個のサブデータ構造を有している。
【００３１】
コンピュータは、順次実施するコードからなるセグメントをコードセグメントとして定義した状態で、コードを実行して機能間で呼び出しを行うことによってある機能を実現する。そして、コードセグメントを順次実施した後は、呼び出し命令を介して次のコードセグメントへとジャンプする。この原理に基づいて、コンピュータコードの動作プロセスを記述するためのデータ構造、すなわち本開示におけるコードセグメント呼び出しデータ構造が構築される。
【００３２】
コンピュータが操作中であるとき、コードセグメント呼び出しデータ構造は、呼び出し命令がノードとして配置されているコードセグメントを取り込むとともに、呼び出し命令によって構築された、呼び出し命令を起動するコードセグメントと、呼び出しパスとして呼び出されるコードセグメントとの間の呼び出し関係を取り込むことによって構築される。したがって、コードセグメント呼び出しデータ構造は、対応するノード及び呼び出しノードと被呼び出しノードとの間にそれぞれある呼び出しパスを有している。この呼び出しノードは、呼び出し命令を起動するコードセグメントを用いることによって構築されたノードのことを指し、被呼び出しノードは、呼び出し命令によって呼び出されるコードセグメント（すなわち被呼び出しコードセグメント）を用いることによって構築されたノードのことを指す。つまり、隣接する２つのノードを順に構築する際に、呼び出しノードは最初に構築されたノードのことを指し、被呼び出しノードは後で構築されたノードのことを指す。本開示におけるコードセグメント呼び出しデータ構造は、数個のサブデータ構造を有している。同期間で同時に数個の呼び出し命令を実施可能なので、数個の呼び出し命令は対応する次の数個のコードセグメントを呼び出す。よって、構築されたコードセグメント呼び出しデータ構造は、数個のサブデータ構造で構成されているデータ網になる。
【００３３】
図２は、コードセグメント呼び出しデータ構造を構築する方法のフローチャートである。図２によれば、コードセグメント呼び出しデータ構造を構築する方法は後述のステップで実施される。
【００３４】
ステップＳ２１で、呼び出し命令を取得する。
ステップＳ２２で、呼び出し命令を起動するコードセグメントと被呼び出しコードセグメントとを取得する。
【００３５】
ステップＳ２３で、取得した呼び出し命令起動コードセグメントと取得した被呼び出しコードセグメントとを用いることによって、それぞれに対応する呼び出しノードと被呼び出しノードとを構築する。
【００３６】
ステップＳ２４で、呼び出し命令を起動するコードセグメントと被呼び出しコードセグメントとの間で呼び出し関係を構築し、構築した呼び出し関係を呼び出しノードと被呼び出しノードとの間にある呼び出しパスとして取り込む。
【００３７】
コードセグメント呼び出しデータ構造を構築する方法を詳細に説明する。ステップＳ２１では、呼び出し命令を取得する。本開示の特定の実施形態において、呼び出し命令はアセンブラ命令であり、コンピュータ上で動作しているコードは全て機械コードである。したがって、本開示の特定の実施形態において、呼び出し命令を取得することは、コンピュータ上で動作している機械コードに対してバイナリ変換を行って呼び出し命令を取得することを含む。具体的には、コンピュータ上で動作している機械コードに対してバイナリ変換行うことにより、機械コードをアセンブリ言語に変換する。このプロセスは逆アセンブリプロセスであり、アセンブラコードの取得後、アセンブラコード内の呼び出し命令を取得する。
【００３８】
図３は、本開示のある特定の実施形態に係るコードセグメントの呼び出し関係の概略図である。図３によれば、図３は複数のコードセグメントを示しており、それぞれは、Ａ１〜Ａｎコード行からなるコードセグメント１１、Ｂ１〜Ｂｎコード行からなるコードセグメント１２、Ｃ１〜Ｃｎコード行からなるコードセグメント１３、Ｍ１〜Ｍｎコード行からなるコードセグメント２１、Ｌ１〜Ｌｎコード行からなるコードセグメント３１、Ｅ１〜Ｅｎコード行からなるコードセグメント４１、Ｆ１〜Ｆｎコード行からなるコードセグメント４２、Ｇ１〜Ｇｎコード行からなるコードセグメント４３、Ｒ１〜Ｒｎコード行からなるコードセグメント６１、及びＳ１〜Ｓｎコード行からなるコードセグメント５１である。ここで、Ａｎコード行、Ｂｎコード行、Ｃｎコード行、Ｍｎコード行、Ｌｎコード行、Ｅｎコード行、Ｆｎコード行、Ｇｎコード行、Ｒｎコード行、Ｓｎコード行は全て呼び出し命令であり、Ａｎコード行、Ｂｎコード行、Ｃｎコード行、Ｍｎコード行、Ｌｎコード行、Ｅｎコード行、Ｆｎコード行、Ｇｎコード行、Ｒｎコード行、及びＳｎコード行によって、図３に示されたコンピュータコードは複数のコードセグメント、すなわち、コードセグメント１１、コードセグメント１２、コードセグメント１３、コードセグメント２１、コードセグメント３１、コードセグメント４１、コードセグメント４２、コードセグメント４３、コードセグメント５１、及びコードセグメント６１に分割されている。コードセグメント１１、コードセグメント１２、コードセグメント１３、コードセグメント２１、及びコードセグメント３１が、互いに関連しているコードセグメントのグループを形成し、それぞれの間にある呼び出し関係によってサブデータ構造が形成できる。同様に、コードセグメント４１、コードセグメント４２、コードセグメント４３、コードセグメント５１、及びコードセグメント６１が互いに関連しているコードセグメントの別のグループを形成し、それぞれの間にある呼び出し関係によってサブデータ構造が形成できる。図３に示す本開示の本実施形態では、コンピュータは、コードセグメント１１の実行後にＡｎコード行を用いてコードセグメント２１を呼び出している。同様に、コードセグメント２１の実行後にＭｎコード行を用いてコードセグメント３１を、コードセグメント３１の実行後にＬｎコード行を用いてコードセグメント１２を、そしてコードセグメント１２の実行後にＢｎコード行を用いてコードセグメント１３を呼び出している。また、コンピュータは、コードセグメント４１の実行後にＥｎコード行を用いてコードセグメント５１を、コードセグメント５１の実行後にＳｎコード行を用いてコードセグメント６１を、コードセグメント６１の実行後にＲｎコード行を用いてコードセグメント４２を、そしてコードセグメント４２の実行後にＦｎコード行を用いてコードセグメント４３を呼び出す。理解しやすいように、図３は数例のコードセグメントのみを模式的に示しているが、当業者なら呼び出し命令のデータ構造の構築もよく理解している。
【００３９】
本開示の本特定の実施形態において、Ａｎコード行、Ｂｎコード行、Ｃｎコード行、Ｍｎコード行、Ｌｎコード行、Ｅｎコード行、Ｆｎコード行、Ｇｎコード行、Ｒｎコード行、及びＳｎコード行は全て機械コードであり、これらの機械コードに対してバイナリ変換を行うことにより、アセンブリ言語での呼び出し命令を取得する。
【００４０】
ステップＳ２１の後にステップＳ２２を実施し、このステップで呼び出し命令を起動するコードセグメントと被呼び出しコードセグメントとが取得される。例えば、ステップＳ２１で取得した呼び出し命令がＡｎコード行によって表される呼び出し命令である場合、ステップＳ２２でこの呼び出し命令を起動するコードセグメント１１と被呼び出しコードセグメント２１とが取得される。ステップＳ２１で取得した呼び出し命令がＭｎコード行によって表される呼び出し命令である場合、ステップＳ２２で呼び出し命令を起動するコードセグメント２１と被呼び出しコードセグメント３１とが取得される。
【００４１】
ステップＳ２３は、取得された呼び出し命令起動コードセグメントと取得された被呼び出しコードセグメントとを用いてノードを構築するようにして実施される。以下において、ステップＳ２３を図３及び図４とともに説明する。コードセグメント１１の実施後、コードセグメント１１を用いてノードＰ１１を構築する。その後、Ａｎコード行で表されている呼び出し命令によってコードセグメント２１を呼び出し、コードセグメント２１の実施後に、コードセグメント２１を用いてノードＰ２１を構築する。その後、Ｍｎコード行で表されている呼び出し命令によってコードセグメント３１を呼び出し、コードセグメント３１の実施後に、コードセグメント３１を用いてノードＰ３１を構築する。その後、Ｌｎコード行で表されている呼び出し命令によってコードセグメント１２を呼び出し、コードセグメント１２の実施後に、コードセグメント１２を用いてノードＰ１２を構築する。その後、Ｂｎコード行で表されている呼び出し命令によってコードセグメント１３を呼び出し、コードセグメント１３の実施後に、コードセグメント１３を用いてノードＰ１３を構築する。もう一方のコードセグメントグループに対しても、コードセグメント４１の実施後、コードセグメント４１を用いてノードＮ４１を構築する。その後、Ｅｎコード行で表されている呼び出し命令によってコードセグメント５１を呼び出し、コードセグメント５１の実施後、コードセグメント５１を用いてノードＮ５１を構築する。その後、Ｓｎコード行で表されている呼び出し命令によってコードセグメント６１を呼び出し、コードセグメント６１の実施後、コードセグメント６１を用いてノードＮ６１を構築する。その後、Ｒｎコード行で表されている呼び出し命令によってコードセグメント４２を呼び出し、コードセグメント４２の実施後、コードセグメント４２を用いてノードＮ４２を構築する。その後、Ｆｎコード行で表されている呼び出し命令によってコードセグメント４３を呼び出し、コードセグメント４３の実施後、コードセグメント４３を用いてノードＮ４１３を構築する。
【００４２】
ステップＳ２４において、呼び出し命令を起動するコードセグメントと被呼び出しコードセグメントとの間の呼び出し関係を構築し、構築された呼び出し関係を、呼び出しノードと被呼び出しノードとの間にある呼び出しパスとして取り込む。引き続き図３を一例として用いて、図４とともに説明を行う。コードセグメント１１のノードＰ１１とコードセグメント２１のノードＰ２１の間にある呼び出しパスＴ１を、コードセグメント１１（Ａｎコード行に対応する呼び出し命令のイニシエータ）からコードセグメント２１（Ａｎコード行に対応する呼び出し命令の呼び出し対象、Ｍｎコード行に対応する呼び出し命令のイニシエータ）への呼び出し関係を用いて構築し、コードセグメント２１のノードＰ２１とコードセグメント３１のノードＰ３１の間にある呼び出しパスＴ２を、コードセグメント２１からコードセグメント３１への呼び出し関係を用いて構築し、コードセグメント３１のノードＰ３１とコードセグメント１２のノードＰ１２との間にある呼び出しパスＴ３を、コードセグメント３１からコードセグメント１２への呼び出し関係を用いて構築し、コードセグメント１２のノードＰ１２とコードセグメント１３のノードＰ１３の間にある呼び出しパスＴ４を、コードセグメント１２からコードセグメント１３への呼び出し関係を用いて構築することによって、根ノードから現ノードまでの各ノードの間にある全呼び出しパスが構築される。また、コードセグメント４１のノードＮ４１とコードセグメント５１のノードＮ５１の間にある呼び出しパスＫ１を、コードセグメント４１（Ｅｎコード行に対応する呼び出し命令のイニシエータ）からコードセグメント５１（Ｅｎコード行に対応する呼び出し命令の呼び出し対象、Ｓｎコード行に対応する呼び出し命令のイニシエータ）への呼び出し関係を用いて構築し、コードセグメント５１のノードＮ５１とコードセグメント６１のノードＮ６１の間にある呼び出しパスＫ２を、コードセグメント５１からコードセグメント６１への呼び出し関係を用いて構築し、コードセグメント６１のノードＮ６１とコードセグメント４２のノードＮ４２の間にある呼び出しパスＫ３を、コードセグメント６１からコードセグメント４２への呼び出し関係を用いて構築し、コードセグメント４２のノードＮ４２とコードセグメント４３のノードＮ３との間にある呼び出しパスＫ４を、コードセグメント４２からコードセグメント４３への呼び出し関係を用いて構築することによって、根ノードから現ノードまでの各ノードの間にある全呼び出しパスが構築される。
【００４３】
上述した２つのコードセグメントグループの呼び出し関係において、コードセグメント１１、コードセグメント１２、コードセグメント１３、コードセグメント２１、及びコードセグメント３１のそれぞれの間の呼び出し関係は、ノードＰ１１、Ｐ２１、Ｐ３１、Ｐ１２、Ｐ１３及び呼び出しパスＴ１、Ｔ２、Ｔ３、Ｔ４を有するサブデータ構造を構築する。一方、コードセグメント４１、コードセグメント４２、コードセグメント４３、コードセグメント５１、及びコードセグメント６１のそれぞれの間の呼び出し関係は、ノードＮ４１、Ｎ５１、Ｎ６１、Ｎ４２、Ｎ４３及び呼び出しパスＫ１、Ｋ２、Ｋ３、Ｋ４を有する別のサブデータ構造を構築する。当業者が理解しやすいように、図３及び図４は一例を示したにすぎない。つまり、本開示におけるコードセグメント呼び出しデータ構造は数個のサブデータ構造を含むデータ網であり、各サブデータ構造内のコードセグメントは互いに関連付けられている。
【００４４】
このようにして、いったんコードセグメントを実施すると、すなわち、いったん呼び出し命令を実行すると、この呼び出し命令を起動するコードセグメントを用いてノードを構築するので、根ノードから現ノードまでの全ノードの構築が可能であるとともに、呼び出しノードと被呼び出しノードとは構築された呼び出しパスによって結び付けられている。
【００４５】
なお、このデータ構造を構築する方法は動的プロセスであり、いったん呼び出し命令を取得すると、この呼び出し命令を起動するコードセグメントと呼び出されるコードセグメントとが取得され、その後、取得されたこの呼び出し命令を起動するコードセグメントと取得された被呼び出しコードセグメントとを用いてノードを構築する。呼び出しノードと被呼び出しノードとの間にある呼び出しパスは、この呼び出し命令を起動するコードセグメントと被呼び出しコードセグメントとの間の呼び出し関係を用いて構築される。
【００４６】
既存のコンピュータはスタック型コンピュータであり、スタック領域はコンパイラによって自動的に割り当て・解放が行われて、呼び出し命令の呼び出しパラメータを格納する。よって、呼び出しパラメータは、呼び出し命令によって呼び出される次のコードセグメント（すなわち被呼び出しコードセグメント）のアドレス、次のコードセグメントの操作方法及び操作内容を含んでいる。ここで、操作方法とは操作を完了させる方法であり、操作内容は操作に関係する対象である。次の、ファイルを削除するというコードセグメントを例にとると、操作方法は削除すること、操作内容はファイルである。
【００４７】
本開示の特定の実施形態において、呼び出されるコードセグメントのアドレスは、被呼び出しコードセグメント内の例えば１番目のコード行のアドレスといった呼び出しパラメータから取得される。図３を一例として、呼び出されるコードセグメントがコードセグメント２１である場合、呼び出されるコードセグメントの取得されたアドレスはＭ１コード行のアドレス、つまり、コードセグメント２１内の１番目のコード行のアドレスである。したがって、呼び出されるコードセグメントは呼び出されるコードセグメントのアドレスに基づいて取得され、呼び出し命令が配置されているコードセグメントは呼び出し命令を起動するコードセグメントである。
【００４８】
上記で説明したデータ構造を用いて、コンピュータの動作状態を記述することができる。このデータ構造は非常に大きなデータ構造網であり、その中にはたくさんのデータ構造が、各サブデータ構造が関連するコードセグメントの中の呼び出し関係に対応している状態で含まれている。
【００４９】
ステップＳ２０では、現在の操作要求に関連したサブデータ構造をデータ構造から取得し、現在の操作要求のイニシエータ、操作方法、及び操作対象をそのサブデータ構造に基づいて決定する。言い換えると、動的かつ連続的なサブデータ構造を用いて現在の操作要求の特徴、つまり、現在の操作要求の特徴を記述する。この操作要求は呼び出し命令によってコードを呼び出す実行動作を、操作方法は呼び出し命令のために呼び出されるコードセグメントの属性、つまり、操作を実現する方法を、そして操作対象は呼び出されるコードセグメントが実行動作を行う対象、つまり、操作される内容をそれぞれ指す。例えば、現在の操作要求がファイルを削除するコードセグメントを呼び出すことである場合、現在の操作要求に対する操作方法は「消去する」という実行動作であり、操作内容は削除されるファイル、すなわち、操作が行われる内容である。
【００５０】
本開示の特定の実施形態において、サブデータ構造を取得するための条件を事前設定することが可能であり、現在の操作要求が事前設定条件を満たしている場合に、現在の操作要求に関連したサブデータ構造が取得される。したがって、本開示の特定の実施形態において、現在の操作要求に関連したサブデータ構造をデータ構造から取得することは、サブデータ構造を取得するための条件を事前設定し、現在の操作要求が事前設定条件を満たす場合に、現在の操作要求に関連したサブデータ構造を、現在の操作要求に関連したノード及び呼び出しパスをデータ構造に基づいて後戻りすることによって取得することを含む。図３及び図４に示されている例を一例とすると、現在の操作要求がＢｎコード行で表されている呼び出し命令によって実施される実行動作とＦｎコード行で表されている呼び出し命令によって実施される実行動作である場合、構築されたデータ構造に基づいて、Ｂｎコード行に対応する現在の操作要求に対して、現在の操作要求に関連したノード及び呼び出しパスを後戻りして取得することによって、現在の操作要求に関連したサブデータ構造を取得する。ここでサブデータ構造はノードＰ１１、Ｐ２１、Ｐ３１、Ｐ１２と呼び出しパスＴ１、Ｔ２、Ｔ３とを含んでいる。Ｆｎコード行に対応する現在の操作要求に対しては、現在の操作要求に関連したノード及び呼び出しパスを後戻りして取得することによって、現在の操作要求に関連したサブデータ構造を取得する。ここでサブデータ構造はノードＮ４１、Ｎ５１、Ｎ６１、Ｎ４２及び呼び出しパスＫ１、Ｋ２、Ｋ３を含んでいる。現在の操作要求より前にある、関連しているノードを、現在の操作要求を最初に起動するノードまで後戻りすることによって、現在の操作要求のサブデータ構造を取得する。
【００５１】
本開示の特定の実施形態において、現在の操作要求はアセンブラ命令であり、コンピュータ上で動作するコードは全て機械コードである。よって、コンピュータ上で動作しているコードに対してバイナリ変換を行って現在の呼び出し命令を取得すことによって、現在の操作要求を取得しなければならない。その後、事前設定条件に従って、取得された現在の操作要求が事前設定条件を満たしているかどうかを判定し、事前設定条件を満たしている場合に現在の操作要求に関連したサブデータ構造を取得する。具体的には、動作しているコンピュータコードに対してバイナリ変換を行うことによって、機械コードをアセンブリ言語に変換する。このプロセスは逆アセンブリプロセスである。そしてアセンブラコードの取得後に、アセンブラコード内の呼び出し命令を取得することによって現在の操作要求を取得する。その後、取得した現在の操作要求が事前設定条件を満たしているかどうかを判定し、事前設定条件を満たしている場合に現在の操作要求に関連したサブデータ構造を取得する。
【００５２】
本開示の特定の実施形態において、コンピュータの動作領域は少なくとも２つのサブ領域に分割可能であり、サブデータ構造を取得するための事前設定条件は、１つのサブ領域内の操作要求は別のサブ領域内のコードセグメントを呼び出すことである。次のコードセグメント（操作要求として解釈可能）を呼び出すためにコンピュータは頻繁に操作され、また、ある程度の操作要求によって次のコードセグメントを呼び出してもコンピュータの動作には実体的な影響を及ぼさないので、コンピュータの動作領域は少なくとも２つのサブ領域、例えば８個のサブ領域に分割可能である。また、各サブ領域は他の２つのサブ領域に隣接しているとして定義可能であり、各サブ領域はさらに、各操作要求に対して分割されるまで、つまり、各操作要求に対して有効性判定を行うまで、任意に無限に分割可能である。ある操作要求がサブ領域の間の境界を越えることである場合に、操作要求に対する有効性検証メカニズムが生じる。すなわち、コンピュータの動作のための領域を複数のサブ領域に分割する場合、サブデータ構造を取得する条件を以下のように設定可能である。あるサブ領域内の呼び出し命令が別のサブ領域内のコードセグメントを呼び出すことである場合に、現在の操作要求に関連しているサブデータ構造を取得する。
【００５３】
その後、取得された現在の操作要求に関連したサブデータ構造に基づいて、現在の操作要求のイニシエータを決定するとともに、現在の操作要求の操作方法及び操作対象を決定する。具体的には、取得された現在の操作要求に関連したサブデータ構造に基づいて、取得された現在の操作要求に関連したサブデータ構造を現在の操作要求のイニシエータとして決定する。例えば、現在の操作要求がＢｎコード行で表されている呼び出し命令によって実施される実行動作である場合に、ノードＰ１１、Ｐ２１、Ｐ３１、Ｐ１２及びこれらのノードの間の呼び出しパスＴ１、Ｔ２、Ｔ３を含んでいるデータ構造が現在の操作要求に関連しているサブステート構造である。現在の操作要求に対する呼び出しパラメータに基づいて、現在の操作要求によって呼び出される次のコードセグメント（呼び出されるコードセグメント）に対する操作方法及び操作対象、つまり、現在の操作要求の操作方法及び操作対象を決定する。
【００５４】
現在の操作要求のイニシエータ、操作方法、及び操作対象の決定後、コンピュータシステムの挙動を標準化する規則を取得するステップＳ３０を実施して、決定された現在の操作要求及び規則のイニシエータ、操作方法、及び操作対象の間で照合操作または比較操作を行うことにより、現在の操作要求が許容できるかどうかを判定する。本開示の特定の実施形態では、コンピュータシステムの挙動を標準化する規則は、操作要求のイニシエータ、操作要求の操作方法、及び操作要求の操作対象という３つの要素を有している。よって、コンピュータシステムの挙動を標準化する規則は、現在の操作要求のイニシエータが規則の要件を満たしている場合、現在の操作要求は実施が許可され、また、現在の操作要求のイニシエータ及び操作方法が規則の要件を満たしている場合には、現在の操作要求は実施が許可され、現在の操作要求のイニシエータ及び操作対象が規則の要件を満たしている場合、現在の操作要求は実施が許可され、現在の操作要求のイニシエータ、操作方法、及び操作対象が規則の要件を満たしている場合には、現在の操作要求は実施が許可される。具体的には、４つの事例が存在し得る。第１の事例では、操作要求のイニシエータによって、現在の操作要求の動作を許可するかどうか判定する。第２の事例では、操作要求のイニシエータ及び操作要求の操作方法によって、現在の操作要求の動作を許可するかどうか判定する。第３の事例では、操作要求のイニシエータ及び操作要求の操作対象によって、現在の操作要求の動作を許可するかどうか判定する。第４の事例では、操作要求のイニシエータ、操作要求の操作方法、及び操作要求の操作対象によって、現在の操作要求の動作を許可するかどうか判定する。
【００５５】
以下に、本開示の方法を具体例と共に例示する。
「サブデータ構造を取得するための事前設定条件」は、メモリ実行コードのサブ領域（システムコードマッピングのメカニズムにより、システムマッピング構造における実行コードの範囲、つまり、メモリ実行コードのサブ領域を決定する）と、持続型デバイスの構造的データのサブ領域（持続型デバイスは記憶装置であり、構造的データはファイル形式で存在するデータを指す）を有している。
【００５６】
第１例
以下に説明する本開示の方法を用いることによって、メモリ実行コードが書き換えられたり組み替えられたりすることを抑制する。
【００５７】
バイナリ変換を行うことによって現在の操作要求を判定し、現在の操作要求がメモリ実行コードに対して操作するものか、もしくはメモリ実行コードを操作するものであれば、「不正な」分析を作動させる（つまり、サブデータ構造を取得する事前設定条件を作動させる）。
【００５８】
現在の操作要求に関連したノード及び呼び出しパスを後戻りすることによって、現在の操作要求に関連したサブデータ構造を取得する。
取得された現在の操作要求のサブデータ構造にしたがって、現在の操作要求のイニシエータ、つまり、現在の操作要求を生成する全ての呼び出しプロセスまたは引用プロセス、すなわち、現在の操作要求に関連している全てのノード及び呼び出しパスを決定する。
【００５９】
後戻りすることによって取得した現在の操作要求のサブデータ構造を現在の操作要求のイニシエータとして取り込み、イニシエータ及び規則に対して照合操作または比較操作を行い、現在の操作要求が初期化または引用によって起動した再マッピングであるかどうかを判定することによって、実行コードを書き換えまたは組み替え可能である現在の操作要求の動作を許可するかどうかを判定する。ここで、許容外の操作が発生している場合には、書き換え及び組み替え動作が生じないようにすることができる。
【００６０】
第２例
以下に説明するように、操作要求のイニシエータを分析することにより、持続型デバイス（記憶装置）の構造的データ（ファイル形式で存在するデータ）が侵入によって破壊されることを抑制する。
【００６１】
バイナリ変換を行うことによって現在の操作要求を判定し、現在の操作要求が持続型デバイスの構造的データに対して操作するものであれば、「不正な」分析を作動させる（つまり、サブデータ構造を取得する事前設定条件を作動させる）。
【００６２】
現在の操作要求の生成プロセスを後戻りすることによって、つまり、現在の操作要求に関連したノード及び呼び出しパスを後戻りすることによって、現在の操作要求に関連したサブデータ構造を取得する。
【００６３】
取得された現在の操作要求のサブデータ構造にしたがって、現在の操作要求のイニシエータ、つまり、現在の操作要求を生成する全ての呼び出しプロセスまたは引用プロセス、すなわち、現在の操作要求に関連している全てのノード及び呼び出しパスを決定する。
【００６４】
取得した現在の操作要求のサブデータ構造を現在の操作要求のイニシエータとして取り込み、イニシエータ及び規則に対して照合操作を行い、現在の操作要求の動作を許可するかどうかを判定する。ここで、構造的データの書き込み操作の生成プロセスは、コンピュータのスタックデバイスのスタック層に応じて順次下方に送るプロセスである（規則に対応して、操作要求のイニシエータは連続的なノード及び呼び出しパスで構成されているサブデータ構造である）。現在の操作要求の生成プロセスが非連続プロセスである（つまり、呼び出しパスが連続していない）場合、現在の操作要求はあるデバイスに侵入するための操作要求であり、現在の操作要求は許容外の操作要求である。したがって、現在の操作要求の実行または動作は許可されないので、持続型デバイス（記憶装置）の構造的データが侵入によって破壊されることを防止する。
【００６５】
本開示を用いることによって、コンピュータの動作中に、コードセグメント呼び出しデータ構造を構築し、データ構造は数個のサブデータ構造を、各サブデータ構造内のノードが互いに関連している状態で有している。すなわち、それらの間には呼び出し関係が存在していて、構築されたデータ構造は動的で、コンピュータの動作とともに構築されることにより、データ構造は動的で連続したデータ構造になる。現在の操作要求の取得後、現在の操作要求に関連しているサブデータ構造は、後戻りして効果的な「証拠となる連係」を形成することによって取得可能である。したがって、現在の操作要求のイニシエータ、操作方法、及び操作対象をサブデータ構造にしたがって決定する（効果的な「証拠となる連係」）ことにより、現在の操作要求を関連性のないプロセスではなく動的で連続したプロセスととらえるので、このような動的かつ連続的なサブデータ構造と規則によって決定されたイニシエータ、操作方法及び操作対象の間での比較を判定することによって、現在の操作要求が「正常」か「不正」かを判定することが可能になり、この結果、コンピュータシステムの挙動を標準化できる。さらに、本開示におけるコンピュータシステムの挙動の標準化は、事前に防止することによって行うものであり、従来技術のようにイベントが起こった後に修復することによって行うものではない。本開示をコンピュータセキュリティ分野に適用すると、コンピュータシステムのセキュリティを確保でき、従来技術において、ある特定の挙動の正当性をある特定の挙動自体のみによって判断する場合に「何にでも適合する（ｏｎｅ−ｓｉｚｅ−ｆｉｔｓ−ａｌｌ）」現象が生じてしまい、正常な挙動と不正なコードによって引き起こされる挙動を両方とも制限する、あるいは制限しないでおくせいでコンピュータシステムのセキュリティを制御できなくなるということを回避できる。
【００６６】
さらに、本開示の特定の実施形態では、コンピュータシステムの挙動を標準化する規則は以下のようになり得る。操作要求のイニシエータが規則の要件を満たしている場合に、現在の操作要求は実施が許可される。一方、操作要求のイニシエータ及び操作方法が規則の要件を満たしている場合、現在の操作要求は実施が許可されるし、また、操作要求のイニシエータ及び操作対象が規則の要件を満たしている場合も、現在の操作要求は実施が許可される。さらには、操作要求のイニシエータ、操作方法、及び操作対象が規則の要件を満たしている場合、現在の操作要求は実施が許可される。コンピュータシステムの挙動を標準化する規則は実際の状況に応じて決定可能であり、非常に順応性がある。
【００６７】
上述の各例は本開示の特定の実施形態に過ぎず、当業者が本開示の精神をよりよく理解するためのものである。しかしながら、本開示の保護範囲はこれら特定の実施形態によって限定されるものではなく、本開示の精神から逸脱することなく、当業者による本開示の特定の実施形態の変更が可能であり、それもまた本開示の保護範囲に含まれる。
【図１】
0005615444.tif 000002
【図２】
0005615444.tif 000003
【図３】
0005615444.tif 000004
【図４】
0005615444.tif 000005