(57)【特許請求の範囲】
【請求項１】
ソフトウェアプログラムのソースコードから、該ソフトウェアプログラムの中のエンティティインスタンスのセットを決定するステップであって、前記エンティティインスタンスのセットの中の各々のエンティティインスタンスはプログラムエンティティに対応し、前記プログラムエンティティを通じて、前記ソフトウェアプログラムは前記ソフトウェアプログラムの外部にある外部エンティティと相互作用を実行する、ステップと、
前記ソースコードから、前記エンティティインスタンスのセットと関連する各々の外部エンティティの識別情報を決定するステップと、
前記ソースコードから、並びに前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの前記識別情報に基づき、前記ソフトウェアプログラムにより満たされる及びそれぞれが前記ソフトウェアプログラムを通じて２以上の外部エンティティの間の情報のデータフローを示すデータフロー述語のセットを決定するステップと、
前記ソースコードから、並びに前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの前記識別情報に基づき、前記ソフトウェアプログラムにより満たされる及び１又は複数の外部エンティティに関する前記ソフトウェアプログラムの動作の制御を示す制御フロー述語のセットを決定するステップと、
前記データフロー述語のセット及び前記制御フロー述語のセットを、１又は複数の悪質ソフトウェア署名を含む署名ライブラリと比較するステップと、
前記データフロー述語のセット及び前記制御フロー述語のセットが前記署名ライブラリに含まれる１又は複数の悪質ソフトウェア署名に一致することに応答して、前記ソフトウェアプログラムは悪質であると決定するステップと、
を有する方法。
【請求項２】
前記エンティティインスタンスのセットを決定するステップは、エンティティ初期化メソッドのリストに基づく、請求項１に記載の方法。
【請求項３】
各々の外部エンティティの識別情報を決定するステップは、
前記エンティティインスタンスのセットのうちの特定のエンティティインスタンスについてエンティティ初期化を決定するステップと、
前記エンティティ初期化の識別情報パラメータを決定するステップと、
前記識別情報パラメータに基づき前記特定のエンティティインスタンスに対応する特定の外部エンティティの識別情報を決定するステップと、
を有する、請求項１に記載の方法。
【請求項４】
前記データフロー述語のセットを決定するステップは、
データのソースとして前記外部エンティティのうちの１又は複数を使用する前記ソフトウェアプログラムのソースメソッドのリストを決定するステップと、
データのシンクとして前記外部エンティティのうちの１又は複数を使用する前記ソフトウェアプログラムのシンクメソッドのリストを決定するステップと、
前記ソースメソッドのリスト及び前記シンクメソッドのリストからデータフローのセットを決定するステップと、
前記データフローのセットのうちの各々のデータフローについて、対応する情報フローの対応するソースメソッドに基づき、及び前記対応する情報フローの対応するシンクメソッドに基づき、ソースエンティティ識別情報及びシンクエンティティ識別情報を決定するステップと、
各々のデータフローについて、前記対応するデータフローの目的を示すデータフロー種類を決定するステップと、
対応するデータフロー種類、対応するソースエンティティ識別情報、及び対応するシンクエンティティ識別情報に基づき、各々のデータフローについてデータフロー述語を決定するステップと、
を有する、請求項１に記載の方法。
【請求項５】
前記データフロー述語のセットは、それぞれ前記対応するデータフローの目的を示す以下の種類のうちの１又は複数の１又は複数のデータフロー述語を有する、「transmit」データフロー述語、「initiate」データフロー述語、及び「config」データフロー述語、請求項１に記載の方法。
【請求項６】
前記制御フロー述語のセットは、以下の種類のうちの１又は複数の１又は複数の制御フロー述語を有する、「trigger」制御フロー述語及び「control」制御フロー述語、請求項１に記載の方法。
【請求項７】
悪質ソフトウェアのコマンド及び命令動作を指定するシンタックスを含む署名仕様言語に基づき、前記データフロー述語のセット及び前記制御フロー述語のセットを決定するステップ、を更に有する請求項１に記載の方法。
【請求項８】
前記１又は複数の悪質ソフトウェア署名は、前記署名仕様言語に基づき決定される、請求項７に記載の方法。
【請求項９】
前記制御フロー述語のセットを決定するステップは、外部エンティティに関連する前記ソフトウェアプログラムの動作をトリガする前記ソフトウェアプログラムの１又は複数のイベントをそれぞれ示す１又は複数の「trigger」制御フロー述語を決定するステップを有する、請求項１に記載の方法。
【請求項１０】
前記制御フロー述語を決定するステップは、それぞれ制御外部エンティティ、ターゲット外部エンティティ、及び前記ターゲット外部エンティティのアクションを示す１又は複数の「control」制御フロー述語を決定するステップを有し、前記制御外部エンティティの前記ソフトウェアプログラムとの第１の相互作用は、前記ソフトウェアプログラムの前記ターゲット外部エンティティとの第２の相互作用を指示し、前記ターゲット外部エンティティによるアクションの性能は、前記第１の相互作用により前記ソフトウェアプログラムを通じて前記制御外部エンティティにより指示されるとき前記第２の相互作用に応答する、請求項１に記載の方法。
【請求項１１】
システムに工程を実行させるよう構成されるコンピュータ実行可能命令を有するコンピュータ可読記憶媒体であって、前記工程は、ソフトウェアプログラムのソースコードから、該ソフトウェアプログラムの中のエンティティインスタンスのセットを決定するステップであって、前記エンティティインスタンスのセットの中の各々のエンティティインスタンスはプログラムエンティティに対応し、前記プログラムエンティティを通じて、前記ソフトウェアプログラムは前記ソフトウェアプログラムの外部にある外部エンティティと相互作用を実行する、ステップと、
前記ソースコードから、前記エンティティインスタンスのセットと関連する各々の外部エンティティの識別情報を決定するステップと、
前記ソースコードから、並びに前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの前記識別情報に基づき、前記ソフトウェアプログラムにより満たされる及びそれぞれが前記ソフトウェアプログラムを通じて２以上の外部エンティティの間の情報のデータフローを示すデータフロー述語のセットを決定するステップと、
前記ソースコードから、並びに前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの前記識別情報に基づき、前記ソフトウェアプログラムにより満たされる及び１又は複数の外部エンティティに関する前記ソフトウェアプログラムの動作の制御を示す制御フロー述語のセットを決定するステップと、
前記データフロー述語のセット及び前記制御フロー述語のセットを、１又は複数の悪質ソフトウェア署名を含む署名ライブラリと比較するステップと、
前記データフロー述語のセット及び前記制御フロー述語のセットが前記署名ライブラリに含まれる１又は複数の悪質ソフトウェア署名に一致することに応答して、前記ソフトウェアプログラムは悪質であると決定するステップと、
を有する、コンピュータ可読記憶媒体。
【請求項１２】
前記エンティティインスタンスのセットを決定するステップは、エンティティ初期化メソッドのリストに基づく、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１３】
各々の外部エンティティの識別情報を決定するステップは、
前記エンティティインスタンスのセットのうちの特定のエンティティインスタンスについてエンティティ初期化を決定するステップと、
前記エンティティ初期化の識別情報パラメータを決定するステップと、
前記識別情報パラメータに基づき前記特定のエンティティインスタンスに対応する特定の外部エンティティの識別情報を決定するステップと、
を有する、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記データフロー述語のセットを決定するステップは、
データのソースとして前記外部エンティティのうちの１又は複数を使用する前記ソフトウェアプログラムのソースメソッドのリストを決定するステップと、
データのシンクとして前記外部エンティティのうちの１又は複数を使用する前記ソフトウェアプログラムのシンクメソッドのリストを決定するステップと、
前記ソースメソッドのリスト及び前記シンクメソッドのリストからデータフローのセットを決定するステップと、
前記データフローのセットのうちの各々のデータフローについて、対応する情報フローの対応するソースメソッドに基づき、及び前記対応する情報フローの対応するシンクメソッドに基づき、ソースエンティティ識別情報及びシンクエンティティ識別情報を決定するステップと、
各々のデータフローについて、前記対応するデータフローの目的を示すデータフロー種類を決定するステップと、
対応するデータフロー種類、対応するソースエンティティ識別情報、及び対応するシンクエンティティ識別情報に基づき、各々のデータフローについてデータフロー述語を決定するステップと、
を有する、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記データフロー述語のセットは、それぞれ前記対応するデータフローの目的を示す以下の種類のうちの１又は複数の１又は複数のデータフロー述語を有する、「transmit」データフロー述語、「initiate」データフロー述語、及び「config」データフロー述語、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１６】
前記制御フロー述語のセットは、以下の種類のうちの１又は複数の１又は複数の制御フロー述語を有する、「trigger」制御フロー述語及び「control」制御フロー述語、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１７】
前記工程は、悪質ソフトウェアのコマンド及び命令動作を指定するシンタックスを含む署名仕様言語に基づき、前記データフロー述語のセット及び前記制御フロー述語のセットを決定するステップ、を更に有する請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１８】
前記１又は複数の悪質ソフトウェア署名は、前記署名仕様言語に基づき決定される、請求項１７に記載のコンピュータ可読記憶媒体。
【請求項１９】
前記制御フロー述語のセットを決定するステップは、外部エンティティに関連する前記ソフトウェアプログラムの動作をトリガする前記ソフトウェアプログラムの１又は複数のイベントをそれぞれ示す１又は複数の「trigger」制御フロー述語を決定するステップを有する、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記制御フロー述語を決定するステップは、それぞれ制御外部エンティティ、ターゲット外部エンティティ、及び前記ターゲット外部エンティティのアクションを示す１又は複数の「control」制御フロー述語を決定するステップを有し、前記制御外部エンティティの前記ソフトウェアプログラムとの第１の相互作用は、前記ソフトウェアプログラムの前記ターゲット外部エンティティとの第２の相互作用を指示し、前記ターゲット外部エンティティによるアクションの性能は、前記第１の相互作用により前記ソフトウェアプログラムを通じて前記制御外部エンティティにより指示されるとき前記第２の相互作用に応答する、請求項１１に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願明細書で議論する実施形態は、署名に基づく静的解析を用いた悪質ソフトウェアの動作の検出に関する。
【背景技術】
【０００２】
一般的に「マルウェア」と呼ばれる悪質ソフトウェアは、特に装置に格納され又は入力される情報を抽出するために及び装置の性能を低下させるために該装置で密かに実施される場合が多い。悪質ソフトウェアは、構文的アプローチを用いて検出される場合が多い。構文的アプローチではソフトウェアプログラムのコードの少なくとも一部が知られている悪質ソフトウェアプログラムのコードと一致するか否かを決定するために、ソフトウェアプログラムのコードは知られている悪質ソフトウェアのコードと比較される。しかしながら、幾つかの場合には、構文的検出は、実質的に同一の動作を示しながら知られている悪質ソフトウェアのコードと一致しないようにする、コードに対する簡単な変更により回避されてしまう。
【０００３】
本願明細書で請求される主題は、上述のような欠点を解決する実施形態や上述のような環境でのみ機能する実施形態に限定されない。むしろ、この背景技術は、単に、本願明細書に記載される複数の実施形態が実施される技術分野の一例を説明するために提供される。
【発明の概要】
【０００４】
一実施形態の一態様によると、方法は、ソフトウェアプログラムのソースコードから、前記ソフトウェアプログラムの中のエンティティインスタンスのセットを決定するステップを有しても良い。前記エンティティインスタンスのセットの中の各々のエンティティインスタンスは、プログラムエンティティに対応しても良い。該プログラムエンティティを通じて、前記ソフトウェアプログラムは、該ソフトウェアプログラムの外部にある外部エンティティとの相互作用を実行する。前記方法は、前記ソースコードから、前記エンティティインスタンスのセットと関連する各々の外部エンティティの識別情報を決定するステップも有しても良い。さらに、前記方法は、前記ソースコードから、及び前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの識別情報に基づき、前記ソフトウェアプログラムにより満たされる及び前記ソフトウェアプログラムを通じる２以上の外部エンティティの間の情報のデータフローをそれぞれ示すデータフローのセットを決定するステップを有しても良い。さらに、前記方法は、前記ソースコードから、及び前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの識別情報に基づき、前記ソフトウェアプログラムにより満たされる及び１又は複数の外部エンティティに関して前記ソフトウェアプログラムの動作の制御を示す制御フローのセットを決定するステップを有しても良い。さらに、前記方法は、前記データフロー述語のセット及び前記制御フロー述語のセットを、１又は複数の悪質ソフトウェア署名を有する署名ライブラリと比較するステップを有しても良い。さらに、前記方法は、前記データフロー述語のセット及び前記制御フロー述語のセットが前記署名ライブラリに含まれる１又は複数の悪質ソフトウェア署名と一致することに応答して、前記ソフトウェアプログラムが悪質であると決定するステップを更に有しても良い。
【０００５】
実施形態の目的及び利点が理解され、少なくとも特に特許請求の範囲で指摘された要素、特徴及び組合せを用いて達成されるだろう。
【０００６】
上述の全体的説明及び以下の詳細な説明の両方は、例示及び説明のためであり、本発明の範囲を限定しない。
【図面の簡単な説明】
【０００７】
例示的な実施形態は、添付の図面を用いて、更なる特異性及び詳細事項と共に記載され説明される。
【図１】悪質ソフトウェアの検出に関連する例示的な環境を表す図である。
【図２】悪質ソフトウェアを検出するために構成され得る例示的なコンピューティングシステムを示す。
【図３】悪質ソフトウェアを検出する例示的な方法のフローチャートである。
【図４】ソフトウェアプログラムと相互作用する外部エンティティの識別情報を決定する例示的な方法のフローチャートである。
【図５】ソフトウェアプログラムにより満たされ得るデータフロー述語のセットを決定する例示的な方法のフローチャートである。
【図６】ソフトウェアプログラムにより満たされる「トリガ」制御フロー述語のセットを決定する例示的な方法のフローチャートである。
【図７】ソフトウェアプログラムにより満たされる「制御」制御フロー述語のセットを決定する例示的な方法のフローチャートである。
【発明を実施するための形態】
【０００８】
本願明細書に記載の幾つかの実施形態は、悪質ソフトウェアプログラムを分析する方法及びシステムに関する。以下に詳述するように、検出は、悪質な性質であり得るソフトウェアプログラムの動作を決定するために、ソフトウェアプログラムの静的分析に基づいても良い。幾つかの実施形態では、静的分析は、ソフトウェアプログラムの悪質なコマンド及び制御（command−and−control：Ｃ＆Ｃ）動作を検出するために用いられても良い。
【０００９】
用語「Ｃ＆Ｃ動作」の使用は、携帯電話機又はデスクトップコンピュータのようなユーザの装置にローカルにインストールされたソフトウェアプログラムが、１又は複数のリモートコンピューティングシステムにより発行されるコマンドに基づき工程を実行し、該ソフトウェアプログラムが該リモートコンピューティングシステムにより制御され得る、動作を表しても良い。コマンド及び制御サーバと呼ばれることが多い各々のリモートコンピューティングシステムは、一方で、ボットマスタ（botmaster）と呼ばれることの多い人間の管理者により制御される場合がある。ボットネット（botnet）と呼ばれることの多いこの設定を用いて、ボットマスタは、ユーザの装置にインストールされたボットバイナリと呼ばれる悪質ソフトウェアプログラムを通じて、事実上、数千台ものユーザ装置（ボットと呼ばれる）の工程（operation）に対して支配力を行使し得る。
【００１０】
特に、ソフトウェアプログラムの中のエンティティインスタンスのセットは、ソフトウェアプログラムのソースコードから決定され得る。ソフトウェアプログラムの中のエンティティインスタンスは、プログラムエンティティ（例えば、ソフトウェアプログラムの中の変数又はオブジェクト）を含んでも良い。該プログラムエンティティを通じて、ソフトウェアプログラムは、ソフトウェアプログラムの外部にあっても良い外部エンティティと相互作用し得る。外部エンティティは、ソフトウェアプログラムがロードされ得るローカル装置に又はリモートに格納され得るファイルを有しても良い。追加又は代替で、外部エンティティは、ソフトウェアプログラムとリモートコンピューティングシステムとの間の通信を確立するために用いることができるウェブアドレス又はネットワーク上の位置（例えば、ＵＲＬ（Uniform  Resource  Locator））を有しても良い。
【００１１】
幾つかの実施形態では、エンティティインスタンスと関連する外部エンティティの識別情報は、ソフトウェアプログラムのソースコードに基づき決定されても良い。エンティティインスタンスの識別情報及び外部エンティティの対応する識別情報は、外部エンティティに関連し得るＣ＆Ｃ動作の識別を可能にし得る。
【００１２】
さらに、幾つかの実施形態では、ソフトウェアプログラムにより満たされ得るデータフロー述語のセットが決定されても良い。幾つかの実施形態では、データフロー述語は、データのフローがソフトウェアプログラムにより開始され得る２以上の外部エンティティの間のデータのフロー（「データフロー」）を示し得る。以下に詳述するように、幾つかの実施形態では、データフロー述語は、ソフトウェアプログラムのソースコードから、及びエンティティインスタンスのセット及び外部エンティティの対応する識別情報に基づき、決定されても良い。
【００１３】
上述の又は他の実施形態では、ソフトウェアプログラムにより満たされ得る制御フロー述語のセットが決定されても良い。制御フロー述語は、ソフトウェアプログラムの動作を制御し得るイベント又は外部エンティティを示しても良い。以下に詳述するように、幾つかの実施形態では、制御フロー述語は、ソフトウェアプログラムのソースコードから、及びエンティティインスタンスのセット及び外部エンティティの対応する識別情報に基づき、決定されても良い。
【００１４】
さらに、幾つかの実施形態では、データフロー述語のセット及び制御フロー述語のセットは、悪質ソフトウェアの１又は複数の署名（「悪質ソフトウェア署名」）を有し得る署名ライブラリと比較されても良い。悪質ソフトウェア署名は、それぞれ、１又は複数の悪質ソフトウェアに対応し得る１又は複数のデータフロー述語及び／又は１又は複数の制御フロー述語を有しても良い。
【００１５】
したがって、データフロー述語のセット及び制御フロー述語のセットが署名ライブラリの中の悪質ソフトウェア署名のうちの１又は複数と一致するか否かを決定することにより、ソフトウェアプログラムが悪質か否かが決定できる。例えば、データフロー述語のセット及び制御フロー述語のセットが署名ライブラリの中の悪質ソフトウェア署名のうちの１又は複数と一致することに応答して、ソフトウェアプログラムが悪質であると決定できる。これと対照的に、データフロー述語のセット及び制御フロー述語のセットが署名ライブラリの中の悪質ソフトウェア署名のうちのいずれにも一致しないことに応答して、ソフトウェアプログラムが悪質ではないと決定できる。
【００１６】
本願明細書に記載の方法でソフトウェアプログラムが悪質か否かを決定することは、どの外部エンティティが関連し得るか、どのイベントがセキュリティに影響される動作をトリガし得るか、及びどのようにセキュリティに影響される動作が構成されるか、に関してソフトウェアプログラムの動作（「セマンティック」とも呼ばれる）分析に基づいても良い。これに対して、ソフトウェアプログラムが悪質か否かを決定するために使用される他の方法は、単に、ソフトウェアプログラムのコードが悪質ソフトウェアプログラムのコードと正確に一致するか否かを分析するだけである（「構文解析」とも呼ばれる）。さらに、他の方法は、どの外部エンティティがセキュリティに影響される動作に関連し得るか、どのイベントがセキュリティに影響される動作をトリガし得るか、及びソフトウェアプログラムの中でどのようにセキュリティに影響される動作が構成されるか、を決定することに関連しない単純な意味論的アプローチを使用し得る。ここで議論される意味論的アプローチは、上述の他の方法に対して、悪質Ｃ＆Ｃソフトウェアの良好な検出を提供できる。
【００１７】
本開示の実施形態を、添付の図面を参照して以下に説明する。
【００１８】
図１は、本願明細書に記載の少なくとも１つの実施形態により構成される、悪質ソフトウェアの検出に関連する例示的な環境１００を示す図である。環境１００は、ソフトウェアプログラムの被検査コード１０４が悪質か否かを決定するよう構成される分析モジュール１０６を有しても良い。
【００１９】
被検査コード１０４は、例えばソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は処理装置による実行のための他のロジック若しくは命令のような、電子データを有しても良い。幾つかの実施形態では、被検査コード１０４は、ソフトウェアプログラムの完全なインスタンスを有しても良い。追加又は代替で、被検査コード１０４は、ソフトウェアプログラムの一部を有しても良い。被検査コード１０４は、ソフトウェアプログラムのために使用され得る任意の適切な種類のコンピュータ言語で書かれても良い。
【００２０】
幾つかの実施形態では、ソフトウェアプログラムは、ＧＵＩ（graphical  user  interface）に基づくソフトウェアプログラム又はウェブベースのソフトウェアプログラムのようなイベント駆動型ソフトウェアプログラムを有しても良い。イベント駆動型ソフトウェアプログラムでは、ソフトウェアプログラムのフローは、ユーザ動作（例えば、マウスクリック、キー押下）、センサ出力、又は他のプログラム若しくはコードのスレッドからのメッセージようなイベントにより決定されても良い。
【００２１】
分析モジュール１０６は、コンピューティング装置に被検査コード１０４が悪質か否かを決定させるよう構成されるコード及びルーチンを有しても良い。追加又は代替で、分析モジュール１０６は、（例えば、１又は複数の工程を実行する又はその性能を制御する）プロセッサ、マイクロプロセッサ、ＦＰＧＡ（field−programmable  gate  array）又はＡＳＩＣ（application−specific  integrated  circuit）を含むハードウェアを用いて実装できる。幾つかの他の例では、分析モジュール１０６は、ハードウェア及びソフトウェアの組み合わせを用いて実装されても良い。本開示では、分析モジュール１０６により実行されるとして記載される工程は、分析モジュール１０６が対応するシステムに実行するよう指示し得る工程を有しても良い。
【００２２】
以下に詳述するように、分析モジュール１０６は、被検査コード１０４が悪質か否かを決定するために使用され得る被検査コード１０４に関する一連の工程を実行するよう構成されても良い。例えば、分析モジュール１０６は、被検査コード１０４に含まれるエンティティインスタンスと、該エンティティインスタンスに対応し得る及び被検査コード１０４と相互作用し得る外部エンティティの識別情報と、を決定するよう構成されても良い。追加又は代替で、分析モジュール１０６は、エンティティインスタンスに基づき及び外部エンティティ識別情報に対応して、被検査コード１０４により満たされ得るデータフロー述語のセット及び制御フロー述語のセットを決定するよう構成されても良い。
【００２３】
幾つかの実施形態では、以下に詳述するように、分析モジュール１０６は、エンティティインスタンス、データフロー述語のセット、及び制御フロー述語のセットを、分析ライブラリ１１２に基づき決定するよう構成されても良い。分析ライブラリ１１２は、悪質ソフトウェアの署名を指定するために使用されるシンタックスを含み得る署名仕様言語（「仕様言語」）を有しても良い。なお、仕様言語は、分析モジュール１０６により被検査コード１０４から抽出されたデータフロー及び制御フロー述語を表し得るシンタックスを有しても良い。具体的には、シンタックスは、リストエンティティ種類、アクション種類、イベント種類、並びに被検査コード１０４の可能なＣ＆Ｃ動作及び悪質ソフトウェアのＣ＆Ｃ動作を表し得るデータフロー述語及び制御フロー述語のリスト、を有しても良い。
【００２４】
幾つかの実施形態では、仕様言語は、Ｃ＆Ｃ動作に関連し得る１又は複数の外部エンティティ種類のリストを有しても良い。エンティティ種類は、Ｃ＆Ｃ動作に関与し得るオブジェクトを定めるために使用され得る抽象データ型のセットを有しても良い。これらの抽象型は、特定のプログラミング言語又はソフトウェア開発プラットフォームにおける実際のソフトウェアコードの中でインスタンス化され得る具体的なオブジェクト種類の膨大なセットのための速記参照として機能し得る。例えば、幾つかの実施形態では、外部エンティティ種類のリストは、以下のうちの１又は複数を有しても良い。「NetworkConnection」抽象型、「File」抽象型、及び「SMSManager」抽象型。
【００２５】
抽象型「File」は、ファイルシステムにおける実際のファイルと相互作用するためにプログラムにより使用されても良く、Ｊａｖａ(登録商標)プログラミング言語の中で「File」、「InputStream」、「OutputStream」等のような幾つかのクラスのうちのいずれかのオブジェクトを参照するために使用されても良い。同様に、抽象型「NetworkConnection」は、ＵＲＬにより定められるような外部ネットワーク位置と通信するためにソフトウェアプログラムの中で使用され得る、（Ｊａｖａにおける「HttpUrlConnection」のような）幾つかの具体的なクラス種類のうちの任意のものを参照するために用いられても良い。このリストの中に含むべきエンティティ種類の選択は、ソフトウェアプログラムによるＩ／Ｏ工程のために一般的に使用され得るオブジェクトの広範なクラスの選択に基づいても良い。追加又は代替で、エンティティ種類の選択は、コマンド及び制御サーバのような外部エージェントによる制御又は使用の影響を受けやすいオブジェクトの特定のクラスを有しても良い。特定のクラスは、知られている悪質ソフトウェアの構造及びそれらがそれ自体の動作を編成する方法を分析することにより決定されても良い。
【００２６】
仕様言語は、１又は複数の抽象アクション型のリストも有しても良い。アクション型は、ソフトウェアコードに含まれ得る、及びＣ＆Ｃ動作と関連し得る、（特定のプログラム機能により実装される）特定のアクションを参照するために使用され得る。幾つかの実施形態では、アクション種類は、外部エンティティに関して実行され得る顕著な工程を示すアクションを有しても良い。どのアクションをこのリストに含むべきかの決定は、悪質ソフトウェアの知られている見本のソフトウェア実装の分析、及びそれらがＣ＆Ｃ動作を編成するために使用する工程を、特に外部エンティティといつ通信するかを観察すること、に基づき行われても良い。
【００２７】
幾つかの実施形態では、これらのアクションは、ソフトウェアプログラムが外部エンティティ（例えば、Ｉ／Ｏ（入力／出力）アクション）と共に行い得る幾つかの一般的な種類の通信アクションのうちの１つとして識別され表されても良い。例えば、幾つかの実施形態では、アクション種類のリストは、以下のうちの１又は複数を有しても良い。「送信」工程、「受信」工程、「リード」工程、及び「ライト」工程である。幾つかの実施形態では、仕様言語は、各種類のアクションが例えばＪａｖａのような特定の言語のなかで対応する特定のオブジェクト種類の特定の方法のリストと一緒に、アクションリストの中のアクションのアクション種類の対応する指定を有する１又は複数のアクションのリスト（「アクションリスト」）を有しても良い。
【００２８】
追加又は代替で、仕様言語は、ソフトウェアコードの実行中に生じ得る具体的なイベントの特定のセットを参照するために使用され得る及びＣ＆Ｃ動作に関連し得る１又は複数の抽象イベント型のリストを有しても良い。イベント種類は、外部エンティティに関連する工程をトリガし又は開始し得るイベントを有しても良い。
【００２９】
どのイベントをイベント種類のリストに含むべきかの決定は、悪質ソフトウェアの知られている見本のソフトウェア実装の分析、及びそれらの悪質ソフトウェアにより実行されるＣ＆Ｃ動作において、特に外部エンティティとの通信においてどのイベントが役立つかを観察すること、に基づき行われても良い。したがって、幾つかの実施形態では、これらのイベントは、ソフトウェアプログラムの実行中に生じ得る抽象イベント型の幾つかの一般的な種類のうちの１つとして識別され表されても良い。
【００３０】
例えば、幾つかの実施形態では、イベント種類のリストは、以下のうちの１又は複数を有しても良い。「SysUIEvent」、「StartEvent」、及び「StopEvent」。Ａｎｄｒｏｉｄ（登録商標）モバイルプラットフォームの環境では、「StartEvent」はＡｎｄｒｏｉｄアプリの中の「Activity」コンポーネントを開始するイベントを表し、「StopEvent」はＡｎｄｒｏｉｄアプリの中の「Activity」コンポーネントを終了するイベントを表し得る。さらに、「SysUIEvent」は、スマートフォンにおいてＡｎｄｒｏｉｄ（登録商標）アプリのウィジェットをタップするようなユーザインタフェース（ＵＩ）を通じた人間のユーザのＡｎｄｒｏｉｄ（登録商標）アプリとの相互作用に対応するイベントを表し得る。幾つかの実施形態では、仕様言語は、イベントリストの中のイベントのイベント種類の対応する指定を含み得る１又は複数のイベントのリスト（「イベントリスト」）も有しても良い。
【００３１】
上述の及び他の実施形態では、仕様言語は、Ｃ＆Ｃ動作のデータフロー特徴を記述するために使用され得る１又は複数のデータフロー述語のリストを有しても良い。データフロー述語は、ソフトウェアコードの実行を通じて実行され得る及びデータフローの特定の目的を明示し得る情報の特定のフロー（「データフロー」）を示しても良い。幾つかの実施形態では、データフロー述語の種類は、「transmit」データフロー述語、「config」データフロー述語、及び「initiate」データフロー述語を有しても良い。
【００３２】
「transmit」データフロー述語は、ソフトウェアコードがソース外部エンティティから対応するターゲット外部エンティティへのデータの転送を実行する場合、ソフトウェアコードに含まれるデータフローを示しても良い。幾つかの実施形態では、「transmit」データフロー述語は、次のように構成されても良い。「transmit(Esource,  Etarget)」、ここで、「Esource」はソース外部エンティティの識別情報を示し、「Etarget」は対応するターゲット外部エンティティを示しても良い。幾つかの実施形態では、仕様言語は、「transmit」データフロー述語の構成も有しても良い。
【００３３】
「config」データフロー述語は、ターゲット外部エンティティの動作を構成する目的で、ソース外部エンティティからターゲット外部エンティティへの、ソフトウェアコードの中の情報のフローを示しても良い。「config」データフロー述語は、構成に含まれるアクションを示しても良い。この構成の中では、該アクションは、このデータフローを通じて動作が構成され得るターゲット外部エンティティのアクションであっても良い。幾つかの実施形態では、「config」データフロー述語は、次のように構成されても良い。「config(Esource,  Etarget,  A)」、ここで、「Esource」はソース外部エンティティの識別情報を示し、「Etarget」は対応するターゲット外部エンティティを示し、「A」はアクションを示しても良い。幾つかの実施形態では、仕様言語は、「config」データフロー述語の構成も有しても良い。
【００３４】
「initiate」データフロー述語は、データフローに関連する開始外部エンティティ及び対応するターゲット外部エンティティを示しても良い。開始外部エンティティは、命令がソフトウェアコードに対応するソフトウェアプログラムにより受信され得る外部エンティティであっても良い。幾つかの実施形態では、これらの命令は、ターゲット外部エンティティと相互作用するためにソフトウェアプログラムにより使用され得るエンティティインスタンスの生成を指示しても良い。幾つかの実施形態では、「initiate」データフロー述語は、次のように構成されても良い。「initiate(Einitiate,  Etarget)」、ここで、「Einitiate」はソース外部エンティティの識別情報を示し、「Etarget」は対応するターゲット外部エンティティを示しても良い。幾つかの実施形態では、仕様言語は、「initiate」データフロー述語の構成も有しても良い。
【００３５】
追加又は代替で、仕様言語は、Ｃ＆Ｃ動作に関連し得る１又は複数の種類の制御フロー述語のリストを有しても良い。制御フロー述語は、ソフトウェアプログラムの動作を制御し又は指示し得るイベント又は外部エンティティを示しても良い。幾つかの実施形態では、制御フロー述語の種類は、「trigger」制御フロー述語（「trigger述語」）、及び「control」制御フロー述語（「control述語」）を有しても良い。
【００３６】
trigger述語は、ターゲット外部エンティティとの相互作用に関連し得るソフトウェアプログラムの動作（例えば、１又は複数のアクション）をトリガし得る、ソフトウェアプログラムに関連するイベントを示しても良い。「trigger」述語は、イベントにより最終的にトリガされ得る及びソフトウェアプログラムを通じてターゲット外部エンティティで又はそれにより実行され得るアクションも示しても良い。幾つかの実施形態では、アクションは、セキュリティの影響を受けても良く又はＣ＆Ｃ動作の実行に関連しても良い。
【００３７】
幾つかの実施形態では、「trigger」述語は、次のように構成されても良い。「trigger(Evtrigger,  Etarget,  A)」、ここで、「Evtrigger」はトリガイベントを示し、「Etarget」はターゲット外部エンティティを示し、「A」は外部エンティティで又はそれにより実行されるアクションを示しても良い。通常、このアクションは、外部エンティティとソフトウェアプログラムとの間のデータの転送を含み得るリード又はライト型のアクションであっても良い。幾つかの実施形態では、仕様言語は、「trigger」述語の構成も有しても良い。
【００３８】
「control」述語は、制御外部エンティティ及び対応するターゲット外部エンティティを示しても良い。制御外部エンティティは、ソフトウェアプログラムが第１の相互作用により相互作用し得る外部エンティティを有しても良い。第１の相互作用は、ソフトウェアプログラムの対応するターゲット外部エンティティとの第２の相互作用を指示しても良い。「control」述語は、ソフトウェアプログラムとの第２の相互作用に応答して、ターゲット外部エンティティにより実行され得るアクションも示しても良い。アクションのこのような実行は、第１の相互作用によりソフトウェアプログラムを通じて制御外部エンティティにより指示されても良い。
【００３９】
幾つかの実施形態では、「control」述語は、次のように構成されても良い。「control(Econtrol,  Etarget,  A)」、ここで、「Econtrol」は制御外部エンティティの識別情報を示し、「Etarget」は対応するターゲット外部エンティティを示し、「A」はアクションを示しても良い。幾つかの実施形態では、仕様言語は、「control」述語の構成も有しても良い。
【００４０】
幾つかの実施形態では、分析ライブラリ１１２は、プログラムの中でエンティティインスタンスを初期化し又は生成するために使用され得るソフトウェアプログラムのメソッドを含み得る１又は複数のエンティティ初期化メソッドのリスト（「エンティティ初期化リスト」）も有しても良い。幾つかの実施形態では、エンティティ初期化メソッドは、異なるエンティティ種類のための構築又はメソッドを有しても良い。エンティティ初期化リストは、エンティティ初期化リストに含まれるエンティティ初期化メソッドと関連するエンティティインスタンスに対応し得るエンティティ種類の対応する指定も有しても良い。幾つかの実施形態では、どの構築又は設定メソッドをエンティティ初期化リストに含むべきかは、どのエンティティ種類が仕様言語に含まれ得るかに基づいても良い。
【００４１】
例えば、メソッド「java.io.FileInputStream:<init>(java.io.File)」及び「java.io.File:<init>(java.lang.String)」は、それぞれ、Ｊａｖａ言語において「FileInputStream」オブジェクト及び「File」オブジェクトのための設定メソッドである。したがって、幾つかの実施形態では、それらは、エンティティ初期化リストに含まれても良い。上述のように、「FileInputStream」及び「File」は、抽象エンティティ型「File」のインスタンスを生成しても良く、エンティティ初期化リストの中でのように指定されても良い。
【００４２】
幾つかの実施形態では、分析ライブラリ１１２は、データフローに対応するソフトウェアプログラムの１又は複数のソースメソッドのリスト（「ソースメソッドリスト」）及びソフトウェアプログラムの１又は複数のシンクメソッド（「シンクメソッドリスト」）を有しても良い。ソースメソッドは、ソフトウェアプログラムの中で識別され得る任意のデータフローの開始ポイントを表し得る。幾つかの実施形態では、ソースメソッドは、ファイル、ネットワーク接続、等のような標準的なＩ／Ｏ（入力／出力）オブジェクトのクラスの「read」メソッドを有しても良い。Ｊａｖａ言語のソースメソッドの幾つかの例は、<java.io.InputStream:  int  read(byte[]  b)>、<java.io.FileInputStream:  int  read(byte[]  b)>、及び<java.io.AudioInputStream:  int  read(byte[]  b)>を含み得る。シンクメソッドは、ソフトウェアプログラムの中で識別されるデータフローのうちの任意のものの終了ポイントを表す。
【００４３】
幾つかの実施形態では、シンクメソッドは、ファイル、ネットワーク接続、等のような標準的なＩ／Ｏ（入力／出力）オブジェクトのクラスの「write」メソッドを有しても良い。Ｊａｖａ言語のシンクメソッドの幾つかの例は、<java.io.ByteArrayOutputStream:  void  write(byte[]  b)>、<java.io.FilterOutputStream:  void  write(byte[]  b)>、及び<java.io.FileOutputStream:  void  write(byte[]  b)>を含み得る。
【００４４】
分析モジュール１０６は、被検査コード１０４の中で真であり得るデータフロー述語のセット及び制御フロー述語のセットを抽出するよう構成されても良い。分析モジュール１０６は、それらを、環境１００の署名ライブラリ１１０の中に含まれ得る１又は複数の悪質ソフトウェア署名１１１と比較するようにも構成されても良い。上述のように、悪質ソフトウェア署名１１１は、それぞれ、１又は複数の悪質ソフトウェアの動作に対応し得る１又は複数のデータフロー述語及び／又は１又は複数の制御フロー述語を有しても良い。分析モジュール１０６は、被検査コード１０４の動作が、署名ライブラリ１１０に格納された署名により表され得る悪質ソフトウェアの動作と実質的に同様であるかどうかをはっきりさせるために、これを行うよう構成されても良い。
【００４５】
幾つかの実施形態では、悪質ソフトウェア署名１１１は、１又は複数の知られている悪質ソフトウェアプログラム（「マルウェア」）１１４の分析に基づき、署名仕様言語を用いて、生成されても良い。例えば、マルウェア１１４により満たされるデータフロー述語及び／又は制御フロー述語は、署名仕様言語に含まれ得る、エンティティ種類、アクション種類、イベント種類、データフロー述語、及び制御フロー述語に基づき決定されても良い。マルウェア１１４の特定のインスタンスについて決定され得るデータフロー述語及び制御フロー述語は、悪質ソフトウェア署名１１１として使用されても良い。幾つかの実施形態では、悪質ソフトウェア署名１１１は、セキュリティアナリスト１１６により又は分析モジュール１０６により決定されても良い。
【００４６】
分析モジュール１０６は、比較に基づき決定１０８を出力するよう構成されても良い。ここで、決定１０８は、被検査コード１０４が悪質であるか否かに関する決定を示し得る。例えば、分析モジュール１０６は、データフロー述語のセット及び制御フロー述語のセットが署名ライブラリの中の悪質ソフトウェア署名のうちの１又は複数と一致することに応答して、被検査コード１０４が悪質であることの指示として決定１０８を出力しても良い。別の例として、分析モジュール１０６は、データフロー述語のセット及び制御フロー述語のセットが署名ライブラリの中の悪質ソフトウェア署名のうちのいずれにも一致しないことに応答して、被検査コード１０４が悪質ではないことの指示として決定１０８を出力しても良い。
【００４７】
本開示の範囲から逸脱することなく図１に対し変更、追加又は省略が行われても良い。例えば、環境１００は、本開示で示され説明されたものより多くの又は少ない要素を有しても良い。
【００４８】
図２は、本開示の特定の少なくとも一実施形態による例示的なコンピューティングシステム２０２のブロック図を示す。コンピューティングシステム２０２は、幾つかの実施形態において分析モジュールと関連する１又は複数の工程を実施するよう構成されても良い。コンピューティングシステム２０２は、プロセッサ２５０、メモリ２５２、及びデータ記憶装置２５４を有しても良い。プロセッサ２５０、メモリ２５２、及びデータ記憶装置２５４は、通信可能に結合されても良い。
【００４９】
概して、プロセッサ２５０は、任意の適切な特定用途向け又は汎用コンピュータ、コンピューティングエンティティ、又は種々のコンピュータハードウェア若しくはソフトウェアモジュールを有しても良く、任意の適切なコンピュータ可読媒体に格納された命令を実行するよう構成され得る処理装置を用いて実施されても良い。例えば、プロセッサ２５０は、マイクロプロセッサ、マイクロコントローラ、デジタシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（FPGA）又はプログラム命令を解釈し及び／若しくは実行し並びに／又はデータを処理するよう構成された任意の他のデジタル若しくはアナログ回路を有しても良い。図２には単一のプロセッサを示したが、プロセッサ２５０は、本開示で説明される任意の数の工程を個々に又は共同で実行するよう構成される任意の数のプロセッサを有しても良い。さらに、プロセッサのうちの１又は複数は、異なるサーバのような１又は複数の異なる電子装置に存在しても良い。
【００５０】
幾つかの実施形態では、プロセッサ２５０は、プログラム命令を解釈し及び／又は実行し、及び／又はメモリ２５２、データ記憶２５４又はメモリ２５２及びデータ記憶装置２５４に格納されたデータを処理してもよい。幾つかの実施形態では、プロセッサ２５０は、データ記憶２５４からプログラム命令をフェッチし、該プログラム命令をメモリ２５２にロードしても良い。プログラム命令がメモリ２５２にロードされた後、プロセッサ２５０は該プログラム命令を実行しても良い。
【００５１】
例えば、幾つかの実施形態では、分析モジュールは、プログラム命令としてデータ記憶装置２５４に含まれても良い。プロセッサ２５０は、データ記憶装置２５４から分析モジュールのプログラム命令をフェッチしても良く、分析モジュールのプログラム命令をメモリ２５２にロードしても良い。分析モジュールのプログラム命令がメモリ２５２にロードされた後、プロセッサ２５０は、コンピューティングシステムが命令により指示されるように分析モジュールと関連する工程を実施できるように、プログラム命令を実行しても良い。
【００５２】
メモリ２５２及びデータ記憶装置２５４は、コンピュータ実行可能命令又はデータ構造を伝える又は格納しているコンピュータ可読記憶媒体を含み得る。このようなコンピュータ可読媒体は、プロセッサ２５０のような汎用又は特定目的コンピュータによりアクセスできる任意の利用可能な媒体を含み得る。例として且つ限定ではなく、このようなコンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ又は他の光ディスク記憶装置、磁気ディスク記憶装置又は他の磁気記憶装置、フラッシュメモリ装置（例えば、固体メモリ素子）を含む有形又は非一時的コンピュータ可読記憶媒体、又はコンピュータにより実行可能な命令若しくはデータ構造の形式で所望のプログラムコード手段を伝える若しくは格納するために用いられ汎用若しくは特定目的コンピュータによりアクセス可能な他の記憶媒体を有し得る。上述の組合せも、コンピュータ可読記憶媒体の範囲に包含され得る。コンピュータ実行可能命令は、例えば、プロセッサ２５０に特定の工程又は工程のグループを実行させるよう構成される命令及びデータを含み得る。
【００５３】
本開示の範囲から逸脱することなくコンピューティングシステム２０２に対し変更、追加又は省略が行われても良い。例えば、幾つかの実施形態では、コンピューティングシステム２０２は、明示的に示され又は記載されてない任意の数の他のコンポーネントを有しても良い。
【００５４】
図３は、本開示で説明される少なくとも一実施形態による、悪質ソフトウェアを検出する例示的な方法３００のフローチャートである。方法３００は、任意の適切なシステム、機器、又は装置により実行されても良い。例えば、図１の分析モジュール１０６又は（分析モジュールにより指示されるとき）コンピューティングシステム２０２は、方法３００に関連する工程のうちの１又は複数を実行しても良い。別個のブロックとして示したが、所望の実装に依存して、方法３００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
【００５５】
方法３００は、ブロック３０２で開始しても良い。ここで、悪質ソフトウェアライブラリがリードされても良い。幾つかの実施形態では、悪質ソフトウェアライブラリは、図１に関して説明した悪質ソフトウェアライブラリ１１０と同様であっても良い。追加又は代替で、幾つかの実施形態では、ブロック３０２で、分析ライブラリ１１２のような分析ライブラリがリードされても良い。
【００５６】
ブロック３０４で、被検査コード「Ａｐｐ」がリードされても良い。被検査コードは、図１の被検査コード１０４と同様であっても良い。
【００５７】
ブロック３０６で、「Ａｐｐ」に含まれる外部エンティティインスタンスが決定されても良い。ブロック３０８で、ブロック３０６で決定された外部エンティティインスタンスに対応する外部エンティティの識別情報が決定されても良い。幾つかの実施形態では、ブロック３０６及び３０８で、外部エンティティインスタンス及び外部エンティティの対応する識別情報のセットは、図４に関して以下に詳述する方法４００に従って決定されても良い。
【００５８】
ブロック３１０で、「Ａｐｐ」により満たされ得るデータフロー述語のセットが決定されても良い。幾つかの実施形態では、データフロー述語のセットは、分析ライブラリに含まれ得る署名仕様言語、外部エンティティインスタンスのセット、及び対応する外部エンティティの識別情報に基づき決定されても良い。幾つかの実施形態では、ブロック３１０で、データフロー述語のセットは、図５に関して以下に詳述する方法５００に従って決定されても良い。
【００５９】
ブロック３１２で、「Ａｐｐ」により満たされ得る制御フロー述語のセットが決定されても良い。幾つかの実施形態では、制御フロー述語のセットは、分析ライブラリ、エンティティインスタンスのセット、及び対応する外部エンティティの識別情報に基づき決定されても良い。幾つかの実施形態では、制御フロー述語のセットの決定は、「Ａｐｐ」により満たされ得る「trigger」述語のセットの決定及び／又は「control」述語のセットの決定を有しても良い。幾つかの実施形態では、「trigger」述語のセットは、図６に関して以下に詳述する方法６００に従って決定されても良い。追加又は代替で、「control」述語のセットは、図７に関して以下に詳述する方法７００に従って決定されても良い。
【００６０】
ブロック３１４で、「Ａｐｐ」により満たされるデータフロー述語のセット及び制御フロー述語のセットが、悪質署名ライブラリ（例えば、図１の悪質署名ライブラリ１１０）の中の１又は複数の悪質ソフトウェア署名（例えば、図１の悪質ソフトウェア署名）に一致するか否かが決定されても良い。データフロー述語のセット及び制御フロー述語のセットが悪質署名ライブラリに含まれるいかなる悪質ソフトウェア署名にも一致しないことに応答して、ブロック３１６で、「Ａｐｐ」は良性であるという出力が生成されても良い。これに対し、データフロー述語のセット及び制御フロー述語のセットが悪質署名ライブラリに含まれる悪質ソフトウェア署名のうちの１又は複数と一致することに応答して、ブロック３１８で、「Ａｐｐ」は悪質であるという出力が生成されても良い。
【００６１】
したがって、方法３００は、ソフトウェアプログラムが悪質か良性かに関する決定を行うために使用できる。本開示の範囲から逸脱することなく方法３００に対し変更、追加又は省略が行われても良い。例えば、方法３００の工程は、異なる順序で実施されても良い。追加又は代替で、２以上の工程が同時に実行されても良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されても良い。
【００６２】
図４は、本開示で説明される少なくとも一実施形態による、ソフトウェアプログラムと相互作用する外部エンティティの識別情報を決定する例示的な方法４００のフローチャートである。方法４００は、任意の適切なシステム、機器、又は装置により実行されても良い。例えば、図１の分析モジュール１０６又は（分析モジュールにより指示されるとき）コンピューティングシステム２０２は、方法４００に関連する工程のうちの１又は複数を実行しても良い。さらに、幾つかの実施形態では、方法４００は、図３に関して説明した方法３００のブロック３０６及び３０８に関して実行されても良い。本開示では、方法４００は、図３に関して説明した被検査コード「Ａｐｐ」に関して説明される。別個のブロックとして示したが、所望の実装に依存して、方法４００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
【００６３】
方法４００は、ブロック４０２で開始しても良い。ここで、「Ａｐｐ」のソースコードに含まれるエンティティ初期化メソッド「ｎ」のインスタンスのリスト「Ｎ」が「Ａｐｐ」から抽出されても良い。幾つかの実施形態では、全てのエンティティ初期化メソッドが「Ａｐｐ」から抽出されても良い。幾つかの実施形態では、「Ａｐｐ」のエンティティ初期化メソッドのリスト「Ｎ」は、図３のブロック３０２でリードされ得る分析ライブラリに含まれ得るエンティティ初期化リスト「Ｍ」から決定されても良い。例えば、「Ａｐｐ」のソースコードは、パースされ、分析ライブラリのエンティティ初期化リスト「Ｍ」と比較されても良い。「Ａｐｐ」の特定のメソッドが分析ライブラリのエンティティ初期化リスト「Ｍ」の特定のエンティティ初期化メソッド「ｍ」と一致することに応答して、該特定のメソッドは、エンティティ初期化インスタンス「ｎ」としてリスト「Ｎ」に追加されても良い。
【００６４】
ブロック４０４で、エンティティインスタンス「ｅｉ」は、リスト「Ｎ」に含まれ得る各々のエンティティ初期化メソッドインスタンス「ｎ」について、生成されても良い。エンティティインスタンスは、それぞれ、対応するエンティティ初期化メソッドインスタンスにより初期化され得る特定のオブジェクトの名前を有しても良い。幾つかの実施形態では、エンティティインスタンス「ｅｉ」は、エンティティインスタンスのセット「ＥＩ」に含まれても良い。
【００６５】
ブロック４０６で、エンティティ種類は、エンティティインスタンス「ｅｉ」の各々に割り当てられても良い。幾つかの実施形態では、エンティティ種類は、仕様言語のエンティティ初期化リストに基づき決定されても良い。例えば、ブロック４０４で、特定のエンティティ初期化インスタンス「ｅｉ」は、リスト「Ｎ」の中の特定のエンティティ初期化メソッドインスタンス「ｎ」について生成されても良い。さらに、特定のエンティティ初期化メソッドインスタンス「ｎ」は、初期化リスト「Ｍ」に含まれ得る特定のエンティティ初期化メソッド「ｍ」に対応しても良い。さらに、特定のエンティティ種類は、初期化リスト「Ｍ」の中の特定のエンティティ初期化メソッド「ｍ」に相関されても良い。特定のエンティティ種類は、一方で、特定のエンティティ初期化メソッド「ｎ」が特定のエンティティ初期化メソッド「ｍ」に対応し得るので、特定の初期化メソッド「ｎ」に対応する特定のエンティティインスタンス「ｅｉ」を割り当てられても良い。
【００６６】
幾つかの実施形態では、エンティティ種類は、図３の方法３００のブロック３１４で実行され得る述語の照合で用いられても良い。例えば、ブロック３１４における、「Ａｐｐ」により満たされ得るデータフロー述語及び制御フロー述語の、悪質署名ライブラリに含まれ得るデータフロー述語及び制御フロー述語との照合は、述語に関連するエンティティ種類の照合を有しても良い。
【００６７】
ブロック４０８で、識別情報パラメータ「ｐ」は、リスト「Ｎ」に含まれ得る各々のエンティティ初期化メソッドインスタンス「ｎ」から得られても良い。識別情報パラメータは、オブジェクトが対応するエンティティ初期化メソッドインスタンスにより初期化され得る外部エンティティの識別情報を定めても良い。
【００６８】
本開示で記載されるブロック４１０、４１２、４１４、４１６、４１８は、ブロック４０８で得られる各々の識別情報パラメータ「ｐ」に関して実行されても良いことに留意する。したがって、ブロック４１０、４１２、４１４、４１６、４１８に関して識別情報パラメータ「ｐ」への参照は、ブロック４０８で得られる識別情報パラメータ「ｐ」のうちの任意の１つを参照し得る。
【００６９】
ブロック４１０で、任意の適切な技術を用いて識別情報パラメータ「ｐ」が一定であるか否かが決定されても良い。識別情報パラメータ「ｐ」が一定である場合、方法４００はブロック４１２に進み得る。識別情報パラメータ「ｐ」が一定でない場合、方法４００はブロック４１４に進み得る。
【００７０】
ブロック４１２で、識別情報パラメータ「ｐ」の値は、外部エンティティ「ｅ」の識別情報として割り当てられても良い。外部エンティティ「ｅ」の識別情報は、識別情報パラメータ「ｐ」が得られるエンティティ初期化メソッド「ｎ」に対応し得るエンティティインスタンス「ｅｉ」にリンクされても良い。ブロック４１２に続き、方法４００はブロック４２０に進み得る。
【００７１】
ブロック４１４で、識別情報パラメータ「ｐ」の識別情報が利用可能か否かが決定されても良い。幾つかの例では、識別情報パラメータ「ｐ」は、現在のエンティティ初期化メソッドのために利用可能になるように、別のエンティティ初期化メソッドに関して前に決定されていても良い。識別情報パラメータ「ｐ」の識別情報が利用可能であるとき、方法４００はブロック４１６に進み得る。識別情報パラメータ「ｐ」の識別情報が利用可能でないとき、方法４００はブロック４１８に進み得る。
【００７２】
ブロック４１６で、識別情報パラメータ「ｐ」の識別情報は、外部エンティティ「ｅ」の識別情報として割り当てられても良い。外部エンティティ「ｅ」の識別情報は、識別情報パラメータ「ｐ」が得られるエンティティ初期化メソッド「ｎ」に対応し得るエンティティインスタンス「ｅｉ」にリンクされても良い。ブロック４１６に続き、方法４００はブロック４２０に進み得る。
【００７３】
識別情報パラメータ「ｐ」は、幾つかの可能な外部エンティティのうちの１つを参照し得る変数なので、幾つかの例では識別可能ではない場合がある。したがって、ブロック４１８で、エンティティ初期化メソッド「ｎ」は、それが依存し得るエンティティ初期化メソッドを決定するために、逆に辿られても良い（followed  backwards）。これは、識別情報パラメータ「ｐ」の識別情報が前の決定から利用可能になるまで又は定数に基づき決定されるまで、再帰的に実行されても良い。識別情報パラメータ「ｐ」の識別情報が利用可能であるとき、方法４００はブロック４１６に進み得る。
【００７４】
ブロック４２０で、エンティティインスタンスのセット「ＥＩ」が出力されても良い。さらに、外部エンティティ識別情報及びエンティティインスタンスのセット「ＥＩ」に含まれるエンティティインスタンス「ｅｉ’ｓ」へのそれらの対応するリンクは、ブロック４２０で出力されても良い。
【００７５】
したがって、方法４００は、ソフトウェアプログラムと相互作用する外部エンティティの識別情報を決定するために用いることができる。本開示の範囲から逸脱することなく方法４００に対し変更、追加又は省略が行われても良い。例えば、方法４００の工程は、異なる順序で実施されても良い。追加又は代替で、２以上の工程が同時に実行されても良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されても良い。
【００７６】
図５は、本開示で説明される少なくとも一実施形態による、ソフトウェアプログラムにより満たされ得るデータフロー述語のセットを決定する例示的な方法５００のフローチャートである。方法５００は、任意の適切なシステム、機器、又は装置により実行されても良い。例えば、図１の分析モジュール１０６又は（分析モジュールにより指示されるとき）コンピューティングシステム２０２は、方法５００に関連する工程のうちの１又は複数を実行しても良い。さらに、幾つかの実施形態では、方法５００は、図３に関して説明した方法３００のブロック３１０に関して実行されても良い。本開示では、方法５００は、図３に関して説明したソフトウェアプログラムの被検査コード「Ａｐｐ」に関して説明される。別個のブロックとして示したが、所望の実装に依存して、方法５００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
【００７７】
方法５００は、ブロック５０２で開始しても良い。ここで、「Ａｐｐ」のソースコードに含まれるソースメソッド「ｏ」のリスト「Ｏ」が「Ａｐｐ」から抽出されても良い。幾つかの実施形態では、全てのソースメソッドが「Ａｐｐ」から抽出されても良い。幾つかの実施形態では、「Ａｐｐ」のソースメソッドのリスト「Ｏ」は、幾つかの実施形態では図３のブロック３０２でリードされ得る分析ライブラリに含まれ得るソースメソッドリスト「ＳＯ」から決定されても良い。例えば、「Ａｐｐ」のソースコードは、パースされ、分析ライブラリのソースメソッドリスト「ＳＯ」と比較されても良い。「Ａｐｐ」の特定のメソッドがソースメソッドリスト「ＳＯ」の特定のソースメソッド「ｓｏ」と一致することに応答して、該特定のメソッドは、ソースメソッド「ｏ」としてソースリスト「Ｏ」に追加されても良い。
【００７８】
ブロック５０４で、「Ａｐｐ」のソースコードに含まれるシンクメソッド「ｔ」のリスト「Ｔ」が「Ａｐｐ」から抽出されても良い。幾つかの実施形態では、全てのシンクメソッドが「Ａｐｐ」から抽出されても良い。幾つかの実施形態では、「Ａｐｐ」のシンクメソッドのリスト「Ｔ」は、分析ライブラリに含まれ得るシンクメソッドリスト「ＳＩ」から決定されても良い。例えば、「Ａｐｐ」のソースコードは、パースされ、分析ライブラリのシンクメソッドリスト「ＳＩ」と比較されても良い。「Ａｐｐ」の特定のメソッドがシンクメソッドリスト「ＳＩ」の特定のシンクメソッド「ｓｉ」と一致することに応答して、該特定のメソッドは、シンクメソッド「ｔ」としてシンクリスト「Ｔ」に追加されても良い。
【００７９】
ブロック５０６で、可能なソース−シンク対のリストは、ソースリスト「Ｏ」及びシンクリスト「Ｔ」から生成されても良い。例えば、各々のソースメソッド「ｏ」は、ソース−シンク対のリストを生成するために、各々のシンクメソッド「ｔ」と対にされても良い。
【００８０】
ブロック５０８で、データフロー「ｆ」のデータフローセット「ｆｌｏｗｓ」は、任意の適切な技術を用いて各々のソース−シンク対について決定されても良い。例えば、幾つかの実施形態では、データフローセット「ｆｌｏｗｓ」は、幾つかの実施形態では静的「テイント解析（taint−analysis）」に基づき決定されても良い。
【００８１】
ブロック５１０で、ソースエンティティ識別情報「ｒ１」及びシンクエンティティ識別情報「ｒ２」は、各々のセット「ｆｌｏｗｓ」の中の各々のデータフロー「ｆ」について決定されても良い。ソースエンティティ識別情報「ｒ１」は、対応するフロー「ｆ」に関してデータのソース（「ソースエンティティ」）であり得る外部エンティティの識別情報を有しても良い。シンクエンティティ識別情報「ｒ２」は、対応するフロー「ｆ」に関してデータのターゲット（「シンクエンティティ」）であり得る外部エンティティの識別情報を有しても良い。幾つかの実施形態では、ソースエンティティ識別情報「ｒ１」及びシンクエンティティ識別情報「ｒ２」は、図４に関して説明した方法４００により決定されるとき、対応するフロー「ｆ」のソース及びシンクメソッドに対応し得るＩ／Ｏクラスオブジェクトから、及びこれらのＩ／Ｏオブジェクトに関連する外部エンティティの識別情報から、識別されても良い。
【００８２】
ブロック５１１で、データフロー種類は、各々のデータフロー「ｆ」について決定されても良い。幾つかの実施形態では、この決定は、分析ライブラリに基づき行われても良い。この種類の決定は、各々のフローが幾つかのデータフロー種類（例えば、「transmit」、「initiate」、「config」）のうちの１つとして指定されるようにし得る。この分類を実行するために、対応するデータフロー「ｆ」のソース及びシンクメソッドが注目され（note）、対応するデータフロー「ｆ」が入って行くシンクメソッドの引数が注目される（note）。対応するデータフロー「ｆ」が特定のシンクメソッドの特定の引数に入って行く場合（例えば、メソッドの動作を構成するために使用されるもの）、それは、「config」型のフローとして指定されても良い。代替で、対応するデータフロー「ｆ」が幾つかの他のシンクメソッドに入って行く場合（例えば、外部エンティティオブジェクトを初期化する又は生成するために使用されるもの）、それは、「initiate」型のフローとして指定されても良い。その他の場合、対応するデータフロー「ｆ」は「transmit」型のフローとして指定されても良い。本開示で記載するブロック５１２、５１４、５１６、５１８、５２０、５２２は、各々のデータフロー「ｆ」に関して実行されても良い。したがって、ブロック５１２、５１４、５１６、５１８、５２０、５２２に関してデータフロー「ｆ」への参照は、データフロー「ｆ」のうちの任意の１つを参照し得る。
【００８３】
ブロック５１２で、データフロー「ｆ」が「transmit」データフローか否かが決定されても良い。データフロー「ｆ」が「transmit」データフローであるとき、方法５００はブロック５１４に進み得る。データフロー「ｆ」が「transmit」データフローでないとき、方法５００はブロック５１６に進み得る。
【００８４】
ブロック５１４で、「transmit」データフロー述語は、対応するソースエンティティ識別情報「ｒ１」及び対応するシンクエンティティ識別情報「ｒ２」に基づき、データフロー「ｆ」について生成されても良い。幾つかの実施形態では、「transmit」データフロー述語は、仕様言語に含まれ得る「transmit」データフロー述語の構成に従って生成されても良い。例えば、データフロー「ｆ」の「transmit」データフロー述語は、データフロー「ｆ」の対応するソースエンティティ識別情報「ｒ１」及び対応するシンクエンティティ識別情報「ｒ２」に関して、フローとして生成されても良い。「transmit(r１,r２)」である。幾つかの実施形態では、ブロック５１４でも、「transmit」データフロー述語は、データフロー述語セット「ＤＰ」に追加されても良い。ブロック５１４に続き、方法５００はブロック５２４に進み得る。
【００８５】
ブロック５１６で、データフロー「ｆ」が「initiate」データフローか否かが決定されても良い。データフロー「ｆ」が「initiate」データフローであるとき、方法５００はブロック５１８に進み得る。データフロー「ｆ」が「initiate」データフローでないとき、方法５００はブロック５２０に進み得る。
【００８６】
ブロック５１８で、「initiate」データフロー述語は、対応するソースエンティティ識別情報「ｒ１」及び対応するシンクエンティティ識別情報「ｒ２」に基づき、データフロー「ｆ」について生成されても良い。幾つかの実施形態では、「initiate」データフロー述語は、仕様言語に含まれ得る「initiate」データフロー述語の構成に従って生成されても良い。例えば、データフロー「ｆ」の「initiate」データフロー述語は、データフロー「ｆ」の対応するソースエンティティ識別情報「ｒ１」及び対応するシンクエンティティ識別情報「ｒ２」に関して、フローとして生成されても良い。「initiate(r１,r２)」である。幾つかの実施形態では、ブロック５１８でも、「initiate」データフロー述語は、データフロー述語セット「ＤＰ」に追加されても良い。ブロック５１８に続き、方法５００はブロック５２４に進み得る。
【００８７】
ブロック５２０で、データフロー「ｆ」に対応するシンクメソッド「ｔ」のアクション「ａｃｔ」が決定されても良い。幾つかの実施形態では、アクションは、シンクメソッドリスト「ＳＩ」の中の異なるシンクメソッドの各々について前に決定されても良い。したがって、シンクメソッド「ｔ」のアクション「ａｃｔ」は、「ＳＩ」の中のどのシンクメソッドにシンクメソッド「ｔ」が対し得るかに基づき、決定できる。
【００８８】
ブロック５２２で、「config」データフロー述語は、アクション「ａｃｔ」、対応するソースエンティティ識別情報「ｒ１」及び対応するシンクエンティティ識別情報「ｒ２」に基づき、データフロー「ｆ」について生成されても良い。幾つかの実施形態では、「config」データフロー述語は、仕様言語に含まれ得る「config」データフロー述語の構成に従って生成されても良い。例えば、データフロー「ｆ」の「config」データフロー述語は、データフロー「ｆ」の対応するソースエンティティ識別情報「ｒ１」及び対応するシンクエンティティ識別情報「ｒ２」に関して、フローとして生成されても良い。「config(r１,r２)」である。幾つかの実施形態では、ブロック５２２でも、「config」データフロー述語は、データフロー述語セット「ＤＰ」に追加されても良い。
【００８９】
上述のように、ブロック５１２、５１４、５１６、５１８、５２０、５２２のうちの１又は複数に関連する工程は、データフロー述語セット「ＤＰ」を生成するために、各々のデータフロー「ｆ」に関して実行されても良い。ブロック５２４で、推移閉包が、データフロー述語セット「ＤＰ」に含まれるデータフロー述語に関して実行されても良い。推移閉包は、ブロック５１２、５１４、５１６、５１８、５２０、５２２のうちの１又は複数に関連する工程を用いて見付かったデータフロー述語に基づき「Ａｐｐ」により満たされ得る追加のデータフロー述語を推測するために、実行されても良い。さらに、推移閉包に基づき推測され得るデータフロー述語は、ブロック５２４で、データフロー述語セット「ＤＰ」に追加されても良い。
【００９０】
幾つかの実施形態では、推移閉包工程は、ｔ１がｓ２と同じ場合に及びその場合のみp１(s１,t１)及びp２(s２,t２)を述語p３(s１,t２)に連鎖させるように、２つのデータフロー述語を推移的に連鎖させる（chaining）ことにより実行されても良い。ここで、ｓ１はｐ１のソースであり、ｔ１はそのシンクであり、ｓ２はｐ２のソースであり、ｔ２はそのシンクである。したがって、第１のフローｐ１はシンクで終了し、該シンクから第２のフローｐ２が生じ得る。このように、一連の「transmit」フローは連鎖され「transmit*」述語を与え、「initiate」フローが後に続く一連の「transmit」フローは「initiate*」述語を生じ、「config」フローが後に続く一連の「transmit」フローは「config*」述語を生じ得る。「*」による記号表記は、対応する述語が推移閉包工程に基づき決定され推測され得ることを示し得る。
【００９１】
ブロック５２６で、データフロー述語セット「ＤＰ」が出力されても良い。幾つかの実施形態では、データフロー述語セット「ＤＰ」が出力されても良い。該出力に含まれるデータフロー述語は、上述のように方法３００のブロック３１４において比較及び分析のために使用されても良い。
【００９２】
したがって、方法５００は、ソフトウェアプログラムにより満たされ得るデータフロー述語を決定するために用いることができる。本開示の範囲から逸脱することなく方法５００に対し変更、追加又は省略が行われても良い。例えば、方法５００の工程は、異なる順序で実施されても良い。追加又は代替で、２以上の工程が同時に実行されても良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されても良い。
【００９３】
図６は、本開示で説明される少なくとも一実施形態による、ソフトウェアプログラムにより満たされ得る「trigger」制御フロー述語のセットを決定する例示的な方法６００のフローチャートである。方法６００は、任意の適切なシステム、機器、又は装置により実行されても良い。例えば、図１の分析モジュール１０６又は（分析モジュールにより指示されるとき）コンピューティングシステム２０２は、方法６００に関連する工程のうちの１又は複数を実行しても良い。
【００９４】
「trigger」述語は制御フロー述語と共に含まれるので、幾つかの実施形態では、方法６００は、図３に関して説明した方法３００のブロック３１２に関して実行されても良い。本開示では、方法６００は、図３に関して説明したソフトウェアプログラムの被検査コード「Ａｐｐ」に関して説明される。別個のブロックとして示したが、所望の実装に依存して、方法６００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
【００９５】
方法６００は、ブロック６０２で開始しても良い。ここで、「App」の拡張呼び出しグラフ（call  graph）「ＥＣＧ」が決定されても良い。拡張呼び出しグラフ「ＥＣＧ」は、「Ａｐｐ」の中の関数同士の呼び出し関係を表し及び示し得る呼び出しグラフと同様であっても良い。拡張呼び出しグラフは、「Ａｐｐ」のソースコードの中に明示的に示され得る関数同士の明示的な呼び出し関係を示すだけでなく、（Ａｐｐのユーザインタフェースを通じて）ユーザにより又は「Ａｐｐ」のソースコードの中で明示的に示されない実行中システムにより開始された所与のイベントに応答して、どの関数（イベントハンドラ）が呼び出されるかを示す暗黙的関係も示す点が、他の呼び出しグラフと異なり得る。拡張呼び出しグラフを決定することの更なる議論及び説明は、WeiYang他による文献「AppContext:  Differentiating  Malicious  and  Benign  Mobile  App  Behaviors  Using  Context」から分かる。この文献の全内容は参照することにより本開示に組み込まれる。
【００９６】
ブロック６０４で、「Ａｐｐ」とインタフェースし得る外部エンティティ「ｅ」のセット「Ｅ」が決定されても良い。幾つかの実施形態では、外部エンティティ「ｅ」は、それらの識別情報に従ってセット「Ｅ」に含まれても良い。ここで、識別情報は、幾つかの例では上述の方法４００の１又は複数の工程に従って決定されても良い。
【００９７】
ブロック６０６で、エンティティインスタンス「ｅｉ」のセット「Ｉ」は、セット「Ｅ」に含まれ得る各々の外部エンティティ「ｅ」について、決定されても良い。幾つかの実施形態では、セット「Ｉ」は、上述の方法４００の１又は複数の工程に従って決定されても良い。
【００９８】
ブロック６０８で、セキュリティに影響されるメソッド呼び出し「ｃ」のセット「Ｃ」は、各々のセット「Ｉ」の中の各々のエンティティインスタンス「ｅｉ」について決定されても良い。セキュリティに影響されるメソッド呼び出し「ｃ」は、エンティティインスタンス「ｅｉ」により行われ得る及びソフトウェアプログラムのセキュリティに影響される工程を開始する呼び出しであっても良い。例えば、幾つかの実施形態では、セキュリティに影響される工程は、（例えばモバイルプラットフォームにおいて）ランタイムが、リード／ライト工程であって、ソフトウェアプログラムが該工程の実行を許可される前に有する必要のある特定の許可／特権を制定し得る、リード／ライト工程を含み得る。例えば、ＳＭＳの送信、ユーザの連絡先リストの読み取り、外部ネットワーク位置への接続、等はセキュリティの影響を受けるので、資格を得る必要があることがある。
【００９９】
ブロック６１０で、エントリポイント「ｅｐ」のセット「ＥＰ」は、各々のセット「Ｃ」の各々の呼び出し「ｃ」について決定されても良い。エントリポイント「ｅｐ」は、実行されると最終的に呼び出し「ｃ」を生じるイベントハンドラ関数を有しても良い。幾つかの実施形態では、エントリポイント「ｅｐ」のセット「ＥＰ」は、「ＥＣＧ」を分析し及び「ＥＣＧ」の中の「ｃ」に対応するノードに至る経路のソースノードを識別することにより、拡張呼び出しグラフ「ＥＣＧ」から決定されても良い。
【０１００】
ブロック６１２で、イベント「ｅｖ」のセット「Ｖ」は、各々のセット「ＥＰ」の各々のエントリポイント「ｅｐ」について決定されても良い。特定のセット「Ｖ」のイベント「ｅｖ」は、エントリポイントノード「ｅｐ」に対応するイベントハンドラ関数により処理され得るイベントを有しても良い。幾つかの実施形態では、イベント「ｅｖ」は、拡張呼び出しグラフ「ＥＣＧ」から決定されても良い。特定のターゲット外部エンティティは、特定の呼び出し「ｃ」が行われる特定のエンティティインスタンス「ｅｉ」に関連する特定の外部エンティティ「ｅ」であっても良い。
【０１０１】
ブロック６１４で、アクション「ａｃｔ」は、呼び出し「ｃ」の各々について決定されても良い。幾つかの実施形態では、アクションは、異なるセキュリティに影響されるメソッド呼び出しについて前に決定されても良い。したがって、対応するメソッド呼び出し「ｃ」のアクション「ａｃｔ」は、対応するメソッド呼び出し「ｃ」が対応するセキュリティに影響されるメソッド呼び出しに基づき決定されても良い。
【０１０２】
ブロック６１６で、「trigger」制御フロー述語は、各々のセット「Ｖ」に含まれ得る各々のイベント「ｅｖ」について生成されても良い。幾つかの実施形態では、「trigger」制御フロー述語は、仕様言語に含まれ得る「trigger」制御フロー述語の構成に従って生成されても良い。
【０１０３】
例えば、それぞれイベント「ｅｖ」をトリガする「trigger」制御フロー述語は、次のように生成されても良い。「trigger(ev,e,act)」、ここで、「ｅｖ」はトリガイベント「ｅｖ」を示し、「ｅ」は対応するターゲット外部エンティティ「ｅ」を示し（例えば、「ｅ」は外部エンティティの識別情報を有しても良い）、「ａｃｔ」はターゲット外部エンティティ「ｅ」に対応するエンティティインスタンス「ｅｉ」に関連し得る呼び出し「ｃ」に対応し得るアクション「ａｃｔ」を示し得る。幾つかの実施形態では、ブロック６１６でも、「trigger」制御フロー述語は、「trigger」制御フロー述語のセット「ＴＰ」に追加されても良い。
【０１０４】
ブロック６１８で、「trigger」制御フロー述語セット「ＴＰ」が出力されても良い。幾つかの実施形態では、「trigger」制御フロー述語セット「ＴＰ」が出力されても良い。該出力に含まれる「trigger」制御フロー述語は、上述のように方法３００のブロック３１４において比較及び分析のために使用されても良い。
【０１０５】
したがって、方法６００は、ソフトウェアプログラムにより満たされ得る「trigger」制御フロー述語を決定するために用いることができる。本開示の範囲から逸脱することなく方法６００に対し変更、追加又は省略が行われても良い。例えば、方法６００の工程は、異なる順序で実施されても良い。追加又は代替で、２以上の工程が同時に実行されても良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されても良い。
【０１０６】
図７は、本開示で説明される少なくとも一実施形態による、ソフトウェアプログラムにより満たされ得る「control」制御フロー述語のセットを決定する例示的な方法７００のフローチャートである。方法７００は、任意の適切なシステム、機器、又は装置により実行されても良い。例えば、図１の分析モジュール１０６又は（分析モジュールにより指示されるとき）コンピューティングシステム２０２は、方法７００に関連する工程のうちの１又は複数を実行しても良い。
【０１０７】
「control」述語は制御フロー述語と共に含まれるので、幾つかの実施形態では、方法７００は、図３に関して説明した方法３００のブロック３１２に関して実行されても良い。本開示では、方法７００は、図３に関して説明したソフトウェアプログラムの被検査コード「Ａｐｐ」に関して説明される。別個のブロックとして示したが、所望の実装に依存して、方法７００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
【０１０８】
方法７００は、ブロック７０２で開始しても良い。ここで、「App」の拡張呼び出しグラフ（call  graph）「ＥＣＧ」が決定されても良い。拡張呼び出しグラフ「ＥＣＧ」は、方法６００のブロック６０２に関して記載されたように決定されても良い。
【０１０９】
ブロック７０４で、「Ａｐｐ」とインタフェースし得る外部エンティティ「ｅ」のセット「Ｅ」が決定されても良い。幾つかの実施形態では、外部エンティティ「ｅ」は、それらの識別情報に従ってセット「Ｅ」に含まれても良い。ここで、識別情報は、幾つかの例では上述の方法４００の１又は複数の工程に従って決定されても良い。ブロック７０４における工程は、方法６００のブロック６０４に関して実行された工程と同様であり得る。
【０１１０】
ブロック７０６で、エンティティインスタンス「ｅｉ」のセット「Ｉ」は、セット「Ｅ」に含まれ得る各々の外部エンティティ「ｅ」について、決定されても良い。幾つかの実施形態では、セット「Ｉ」は、上述の方法４００の１又は複数の工程に従って決定されても良い。ブロック７０６における工程は、方法６０６のブロック６０４に関して実行された工程と同様であり得る。
【０１１１】
ブロック７０８で、セキュリティに影響されるメソッド呼び出し「ｃ」のセット「Ｃ」は、各々のセット「Ｉ」の中の各々のエンティティインスタンス「ｅｉ」について決定されても良い。セキュリティに影響されるメソッド呼び出し「ｃ」は、エンティティインスタンス「ｅｉ」に対して又はそれにより行われ得る及びソフトウェアプログラムのセキュリティに影響される工程を開始する呼び出しであっても良い。ブロック７０８における工程は、方法６０８のブロック６０４に関して実行された工程と同様であり得る。
【０１１２】
ブロック７１０で、呼び出し経路「ｃｐ」のセット「ＣＰ」は、各々のセット「Ｃ」の各々の呼び出し「ｃ」について決定されても良い。呼び出し経路「ｃｐ」のの各々は、何らかのノードから対応する呼び出し「ｃ」を示す「ＥＣＧ」の中のノードへの、「ＥＣＧ」の中の経路に対応しても良い。したがって、特定の呼び出し経路は、何らかのイベントハンドラの実行で開始して、最終的に関与する対応するメソッド「ｃ」に至る、特定のメソッド呼び出しシーケンスを示し得る。幾つかの実施形態では、呼び出し経路「ｃｐ」のセット「ＣＰ」は、拡張呼び出しグラフ「ＥＣＧ」から決定されても良い。
【０１１３】
ブロック７１２で、プロシジャ間（inter−procedural）制御フローグラフ「ＩＣＦＧ」は、各々のセット「ＣＰ」の各々の呼び出し経路「ｃｐ」について決定されても良い。特定の呼び出し経路「ｃｐ」（例えば、メソッド呼び出しの特定のシーケンス）に対応するプロシジャ間制御フローグラフ「ＩＣＦＧ」は、実行があるメソッド呼び出しから次のメソッド呼び出しへと進むとき、メソッド呼び出しの対応するシーケンスの制御フロー構造を表し得る。ＩＣＦＧは、対応する呼び出し経路「ｃｐ」の中の各々のメソッド呼び出しの制御フローグラフを考慮し、対応する呼び出し経路「ｃｐ」の中の関数の各連続対の制御フローグラフ（例えば、ｃ１及びｃ２）を、ｃ１の制御フローグラフの中のｃ２の対応する呼び出しサイト（例えば、対応するステートメント）に対応するノードをｃ２の制御フローグラフのソースノードと接続するエッジにより接続することにより、各々の呼び出し経路「ｃｐ」について構成されても良い。
【０１１４】
ブロック７１４で、条件文「ｓ」のセット「Ｓ」は、ブロック７１２で決定され得るプロシジャ間制御フローグラフから決定されても良い。幾つかの実施形態では、異なるセット「Ｓ」は、各々のプロシジャ間制御フローグラフ「ＩＣＦＧ」から決定されても良い。ここで、特定のセット「Ｓ」に含まれる条件文「ｓ」は、呼び出し経路「ｃｐ」に対応する呼び出し「ｃ」を避けて（ガードし又は防ぎ又は保護して）も良い。この呼び出し経路「ｃｐ」から、関連するプロシジャ間制御フローグラフ「ＩＣＦＧ」が決定され得る。これは、本例では、呼び出し「ｃ」のソースノードから呼び出しサイトへの経路にある任意の条件文「ｓ」を、分析中のＩＣＦＧに含むことにより行われても良い。特定の条件文「ｓ」は、呼び出し「ｃ」が該特定の条件文「ｓ」の評価により影響を受け得るとき、対応する呼び出し「ｃ」を避けても良い。例えば、呼び出し「ｃ」は、条件文が実行中に「真」又は「偽」と評価するかに基づき行われても良くそうでなくても良い。幾つかの例では、条件文の「真」評価が呼び出し「ｃ」を可能にするか又は「偽」評価かの特定の決定は必ずしも必要ない。
【０１１５】
ブロック７１６で、データフロー「ｆ」のセット「ｆｌｏｗｓ」は、各々のセット「Ｓ」の各々の条件文「ｓ」について決定されても良い。幾つかの実施形態では、データフロー「ｆ」の各々は、ソースメソッドリスト「ＳＯ」からの何らかのソースノードで生じ、条件文「ｓ」で終了しても良い。
【０１１６】
ブロック７１８で、アクション「ａｃｔ」は、呼び出し「ｃ」の各々について決定されても良い。さらに、呼び出し「ｃ」の各々について、呼び出し「ｃ」に対応し得るターゲット外部エンティティ「ｅｃ」の識別情報は、ブロック７１８で決定されても良い。ターゲット外部エンティティ「ｅｃ」が、外部エンティティを含み、又はそれを通じて対応する呼び出し「ｃ」が行われても良い。
【０１１７】
ブロック７２０で、制御外部エンティティ「ｅｓ」は、各々のセット「ｆｌｏｗｓ」の各々のフロー「ｆ」について決定されても良い。幾つかの実施形態では、（方法５００に関して説明したように）対応するフロー「ｆ」の制御外部エンティティ「ｅｓ」は、ソースエンティティが制御外部エンティティであると決定される対応するフロー「ｆ」のソースエンティティの識別情報に基づき決定されても良い。
【０１１８】
ブロック７２２で、「control」制御フロー述語は、各々のセット「ｆｌｏｗｓ」に含まれ得る各々の呼び出し「ｆ」について生成されても良い。幾つかの実施形態では、「control」制御フロー述語は、仕様言語に含まれ得る「control」制御フロー述語の構成に従って生成されても良い。
【０１１９】
例えば、各々のデータフロー「ｆ」の「control」制御フロー述語は、「control(es,ec,act)」のように生成されても良い。ここで、「ｅｓ」は対応するデータフロー「ｆ」から導出され得る制御外部エンティティを示し、「ｅｃ」は、対応するデータフロー「ｆ」が決定され得る条件文「ｓ」により避けられ得る呼び出し「ｃ」に対応し得るターゲット外部エンティティを示し、「ａｃｔ」は対応するデータフロー「ｆ」が決定され得る条件文「ｓ」により避けられ得る呼び出し「ｃ」に対応し得るアクション「ａｃｔ」を示し得る。幾つかの実施形態では、ブロック７２２でも、「control」制御フロー述語は、「control」制御フロー述語のセット「ＣＰｒ」に追加されても良い。
【０１２０】
ブロック７２４で、「control」制御フロー述語セット「ＣＰｒ」が出力されても良い。幾つかの実施形態では、「control」制御フロー述語セット「ＣＰｒ」が出力されても良い。該出力に含まれる「control」制御フロー述語は、上述のように方法３００のブロック３１４において比較及び分析のために使用されても良い。
【０１２１】
したがって、方法７００は、ソフトウェアプログラムにより満たされ得る「control」制御フロー述語を決定するために用いることができる。本開示の範囲から逸脱することなく方法７００に対し変更、追加又は省略が行われても良い。例えば、方法７００の工程は、異なる順序で実施されても良い。追加又は代替で、２以上の工程が同時に実行されても良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されても良い。
【０１２２】
上述のように、本開示で記載した実施形態は、以下に更に詳細に議論するように、種々のコンピュータハードウェア又はソフトウェアモジュールを備えた特定用途又は汎用コンピュータ（例えば、図２のプロセッサ２５０）の使用を含み得る。さらに、上述のように、本開示に記載の実施形態は、コンピュータ実行可能命令又はデータ構造を伝える又はそれを格納されたコンピュータ可読媒体（例えば、図２のメモリ２５２）を用いて実施されても良い。
【０１２３】
本開示で用いられるように、用語「モジュール」又は「コンポーネント」は、モジュール若しくはコンポーネントのアクションを実行するよう構成される特定ハードウェア実装、及び／又はコンピューティングシステムの汎用ハードウェア（例えばコンピュータ可読媒体、処理装置、等）に格納され及び／又はそれらにより実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを表しても良い。幾つかの実施形態では、本開示に記載されたのと異なるコンポーネント、モジュール、エンジン及びサービスは、（例えば、別個のスレッドとして）コンピューティングシステムで実行されるオブジェクト又は処理として実施されても良い。本開示に記載のシステム及び方法の幾つかは概して（汎用ハードウェアに格納される及び／又はそれにより実行される）ソフトウェアで実装されるように記載されたが、専用ハードウェアの実装又はソフトウェアと専用ハードウェアの組み合わせの実装も可能であり考えられる。この説明では、「コンピュータエンティティ」は、本開示で先に定められたようにコンピューティングシステム、又はコンピューティングシステムで実行されるモジュール若しくはモジュールの組合せであっても良い。
【０１２４】
本開示で及び特に添付の特許請求の範囲（例えば、添付の特許請求の範囲の本体）で使用される用語は、概して、広義の（open）用語と考えられる（例えば、用語「含む（including）」は「含むが、限定されない」と解釈されるべきであり、用語「有する（having）」は「少なくとも有する」と解釈されるべきであり、用語「含む（includes）」は「含むが、限定されない」と解釈されるべきである）。
【０１２５】
さらに、特定数の導入された請求項の引用が意図される場合、このような意図は、請求項の中に明示的に示され、このような引用が存在しない場合はこのような意図が存在しない。例えば、理解の助けとして、以下の添付の特許請求の範囲は、請求項の引用を導入するために、「少なくとも１つの」及び「１又は複数の」をいう前置語句の使用を含み得る。しかしながら、このような語句の使用は、同じ請求項が前置語句「１又は複数」又は「少なくとも１つの」及び「ａ又はａｎ」のような不定冠詞を含むときでも、不定冠詞「ａ、ａｎ」による請求項引用の導入がこのような導入された請求項引用を含む任意の特定の請求項をこのような引用を１つだけ含む実施形態に限定することを示すと考えられてはならない（例えば、「ａ」及び／又は「ａｎ」は「少なくとも１つの」又は「１又は複数の」を意味すると解釈されるべきである）。同様のことは、請求項引用を導入するために使用される定冠詞の使用についても該当する。
【０１２６】
さらに、特定数の導入された請求項引用が明示的に引用される場合、当業者は、このような引用が少なくとも引用された番号を意味することと解釈されるべきであることを認識するだろう（例えば、「２つの引用」はそのままで、他の変更が無ければ、少なくとも２つの引用、又は２以上の引用を意味する）。さらに、「Ａ、Ｂ、Ｃ、等のうちの少なくとも１つ」又は「Ａ、Ｂ、Ｃ、等のうちの１又は複数」に類似する慣例が用いられる例では、通常、このような構成は、Ａのみ、Ｂのみ、Ｃのみ、Ａ及びＢを一緒に、Ａ及びＣを一緒に、Ｂ及びＣを一緒に、又はＡ、Ｂ、Ｃを一緒に、等を含むと意図される。
【０１２７】
さらに、２以上の代替用語を表す任意の離接語又は語句は、説明、請求項、又は図面の中であるかに係わらず、用語のうちの１つ、用語のうちのいずれか、又は両方の用語を含む可能性を包含すると理解されるべきである。例えば、語句「Ａ又はＢ」は、「Ａ」又は「Ｂ」又は「Ａ及びＢ」の可能性を含むと理解されるべきである。
【０１２８】
本開示に記載された全ての例及び条件文は、教育上の目的で、読者が本発明の原理及び発明者により考案された概念を理解するのを助け、技術を促進させるためであり、これらの特に記載された例及び条件に限定されないものと考えられるべきである。本開示の実施形態が詳細に記載されたが、種々の変更、置換及び修正が本開示の精神及び範囲から逸脱することなく行われ得る。
【０１２９】
以上の実施形態に加えて、更に以下の付記を開示する。
（付記１）  ソフトウェアプログラムのソースコードから、該ソフトウェアプログラムの中のエンティティインスタンスのセットを決定するステップであって、前記エンティティインスタンスのセットの中の各々のエンティティインスタンスはプログラムエンティティに対応し、前記プログラムエンティティを通じて、前記ソフトウェアプログラムは前記ソフトウェアプログラムの外部にある外部エンティティと相互作用を実行する、ステップと、
前記ソースコードから、前記エンティティインスタンスのセットと関連する各々の外部エンティティの識別情報を決定するステップと、
前記ソースコードから、並びに前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの前記識別情報に基づき、前記ソフトウェアプログラムにより満たされる及びそれぞれが前記ソフトウェアプログラムを通じて２以上の外部エンティティの間の情報のデータフローを示すデータフロー述語のセットを決定するステップと、
前記ソースコードから、並びに前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの前記識別情報に基づき、前記ソフトウェアプログラムにより満たされる及び１又は複数の外部エンティティに関する前記ソフトウェアプログラムの動作の制御を示す制御フロー述語のセットを決定するステップと、
前記データフロー述語のセット及び前記制御フロー述語のセットを、１又は複数の悪質ソフトウェア署名を含む署名ライブラリと比較するステップと、
前記データフロー述語のセット及び前記制御フロー述語のセットが前記署名ライブラリに含まれる１又は複数の悪質ソフトウェア署名に一致することに応答して、前記ソフトウェアプログラムは悪質であると決定するステップと、
を有する方法。
（付記２）  前記エンティティインスタンスのセットを決定するステップは、エンティティ初期化メソッドのリストに基づく、付記１に記載の方法。
（付記３）  各々の外部エンティティの識別情報を決定するステップは、
前記エンティティインスタンスのセットのうちの特定のエンティティインスタンスについてエンティティ初期化を決定するステップと、
前記エンティティ初期化の識別情報パラメータを決定するステップと、
前記識別情報パラメータに基づき前記特定のエンティティインスタンスに対応する特定の外部エンティティの識別情報を決定するステップと、
を有する、付記１に記載の方法。
（付記４）  前記データフロー述語のセットを決定するステップは、
データのソースとして前記外部エンティティのうちの１又は複数を使用する前記ソフトウェアプログラムのソースメソッドのリストを決定するステップと、
データのシンクとして前記外部エンティティのうちの１又は複数を使用する前記ソフトウェアプログラムのシンクメソッドのリストを決定するステップと、
前記ソースメソッドのリスト及び前記シンクメソッドのリストからデータフローのセットを決定するステップと、
前記データフローのセットのうちの各々のデータフローについて、対応する情報フローの対応するソースメソッドに基づき、及び前記対応する情報フローの対応するシンクメソッドに基づき、ソースエンティティ識別情報及びシンクエンティティ識別情報を決定するステップと、
各々のデータフローについて、前記対応するデータフローの目的を示すデータフロー種類を決定するステップと、
対応するデータフロー種類、対応するソースエンティティ識別情報、及び対応するシンクエンティティ識別情報に基づき、各々のデータフローについてデータフロー述語を決定するステップと、
を有する、付記１に記載の方法。
（付記５）  前記データフロー述語のセットは、それぞれ前記対応するデータフローの目的を示す以下の種類のうちの１又は複数の１又は複数のデータフロー述語を有する、「transmit」データフロー述語、「initiate」データフロー述語、及び「config」データフロー述語、付記１に記載の方法。
（付記６）  前記データフロー述語のセットは、以下の種類のうちの１又は複数の１又は複数の制御フロー述語を有する、「trigger」制御フロー述語及び「control」制御フロー述語、付記１に記載の方法。
（付記７）  悪質ソフトウェアのコマンド及び命令動作を指定するシンタックスを含む署名仕様言語に基づき、前記データフロー述語のセット及び前記制御フロー述語のセットを決定するステップ、を更に有する付記１に記載の方法。
（付記８）  前記１又は複数の悪質ソフトウェア署名は、前記署名仕様言語に基づき決定される、付記７に記載の方法。
（付記９）  前記制御フロー述語のセットを決定するステップは、外部エンティティに関連する前記ソフトウェアプログラムの動作をトリガする前記ソフトウェアプログラムの１又は複数のイベントをそれぞれ示す１又は複数の「trigger」制御フロー述語を決定するステップを有する、付記１に記載の方法。
（付記１０）  前記制御フロー述語を決定するステップは、それぞれ制御外部エンティティ、ターゲット外部エンティティ、及び前記ターゲット外部エンティティのアクションを示す１又は複数の「control」制御フロー述語を決定するステップを有し、前記制御外部エンティティの前記ソフトウェアプログラムとの第１の相互作用は、前記ソフトウェアプログラムの前記ターゲット外部エンティティとの第２の相互作用を指示し、前記ターゲット外部エンティティによるアクションの性能は、前記第１の相互作用により前記ソフトウェアプログラムを通じて前記制御外部エンティティにより指示されるとき前記第２の相互作用に応答する、付記１に記載の方法。
（付記１１）  システムに工程を実行させるよう構成されるコンピュータ実行可能命令を有するコンピュータ可読記憶媒体であって、前記工程は、ソフトウェアプログラムのソースコードから、該ソフトウェアプログラムの中のエンティティインスタンスのセットを決定するステップであって、前記エンティティインスタンスのセットの中の各々のエンティティインスタンスはプログラムエンティティに対応し、前記プログラムエンティティを通じて、前記ソフトウェアプログラムは前記ソフトウェアプログラムの外部にある外部エンティティと相互作用を実行する、ステップと、
前記ソースコードから、前記エンティティインスタンスのセットと関連する各々の外部エンティティの識別情報を決定するステップと、
前記ソースコードから、並びに前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの前記識別情報に基づき、前記ソフトウェアプログラムにより満たされる及びそれぞれが前記ソフトウェアプログラムを通じて２以上の外部エンティティの間の情報のデータフローを示すデータフロー述語のセットを決定するステップと、
前記ソースコードから、並びに前記エンティティインスタンスのセット及び前記エンティティインスタンスのセットに関連する各々の外部エンティティの前記識別情報に基づき、前記ソフトウェアプログラムにより満たされる及び１又は複数の外部エンティティに関する前記ソフトウェアプログラムの動作の制御を示す制御フロー述語のセットを決定するステップと、
前記データフロー述語のセット及び前記制御フロー述語のセットを、１又は複数の悪質ソフトウェア署名を含む署名ライブラリと比較するステップと、
前記データフロー述語のセット及び前記制御フロー述語のセットが前記署名ライブラリに含まれる１又は複数の悪質ソフトウェア署名に一致することに応答して、前記ソフトウェアプログラムは悪質であると決定するステップと、
を有する、コンピュータ可読記憶媒体。
（付記１２）  前記エンティティインスタンスのセットを決定するステップは、エンティティ初期化メソッドのリストに基づく、付記１１に記載のコンピュータ可読記憶媒体。
（付記１３）  各々の外部エンティティの識別情報を決定するステップは、
前記エンティティインスタンスのセットのうちの特定のエンティティインスタンスについてエンティティ初期化を決定するステップと、
前記エンティティ初期化の識別情報パラメータを決定するステップと、
前記識別情報パラメータに基づき前記特定のエンティティインスタンスに対応する特定の外部エンティティの識別情報を決定するステップと、
を有する、付記１１に記載のコンピュータ可読記憶媒体。
（付記１４）  前記データフロー述語のセットを決定するステップは、
データのソースとして前記外部エンティティのうちの１又は複数を使用する前記ソフトウェアプログラムのソースメソッドのリストを決定するステップと、
データのシンクとして前記外部エンティティのうちの１又は複数を使用する前記ソフトウェアプログラムのシンクメソッドのリストを決定するステップと、
前記ソースメソッドのリスト及び前記シンクメソッドのリストからデータフローのセットを決定するステップと、
前記データフローのセットのうちの各々のデータフローについて、対応する情報フローの対応するソースメソッドに基づき、及び前記対応する情報フローの対応するシンクメソッドに基づき、ソースエンティティ識別情報及びシンクエンティティ識別情報を決定するステップと、
各々のデータフローについて、前記対応するデータフローの目的を示すデータフロー種類を決定するステップと、
対応するデータフロー種類、対応するソースエンティティ識別情報、及び対応するシンクエンティティ識別情報に基づき、各々のデータフローについてデータフロー述語を決定するステップと、
を有する、付記１１に記載のコンピュータ可読記憶媒体。
（付記１５）  前記データフロー述語のセットは、それぞれ前記対応するデータフローの目的を示す以下の種類のうちの１又は複数の１又は複数のデータフロー述語を有する、「transmit」データフロー述語、「initiate」データフロー述語、及び「config」データフロー述語、付記１１に記載のコンピュータ可読記憶媒体。
（付記１６）  前記データフロー述語のセットは、以下の種類のうちの１又は複数の１又は複数の制御フロー述語を有する、「trigger」制御フロー述語及び「control」制御フロー述語、付記１１に記載のコンピュータ可読記憶媒体。
（付記１７）  前記工程は、悪質ソフトウェアのコマンド及び命令動作を指定するシンタックスを含む署名仕様言語に基づき、前記データフロー述語のセット及び前記制御フロー述語のセットを決定するステップ、を更に有する付記１１に記載のコンピュータ可読記憶媒体。
（付記１８）  前記１又は複数の悪質ソフトウェア署名は、前記署名仕様言語に基づき決定される、付記１７に記載のコンピュータ可読記憶媒体。
（付記１９）  前記制御フロー述語のセットを決定するステップは、外部エンティティに関連する前記ソフトウェアプログラムの動作をトリガする前記ソフトウェアプログラムの１又は複数のイベントをそれぞれ示す１又は複数の「trigger」制御フロー述語を決定するステップを有する、付記１１に記載のコンピュータ可読記憶媒体。
（付記２０）  前記制御フロー述語を決定するステップは、それぞれ制御外部エンティティ、ターゲット外部エンティティ、及び前記ターゲット外部エンティティのアクションを示す１又は複数の「control」制御フロー述語を決定するステップを有し、前記制御外部エンティティの前記ソフトウェアプログラムとの第１の相互作用は、前記ソフトウェアプログラムの前記ターゲット外部エンティティとの第２の相互作用を指示し、前記ターゲット外部エンティティによるアクションの性能は、前記第１の相互作用により前記ソフトウェアプログラムを通じて前記制御外部エンティティにより指示されるとき前記第２の相互作用に応答する、付記１１に記載のコンピュータ可読記憶媒体。
【符号の説明】
【０１３０】
１１１  悪質ソフトウェア署名
１１０  悪質署名ライブラリ
１０４  被検査コード
１０６  分析モジュール
１０８  決定
１１２  分析ライブラリ
１１４  悪質ソフトウェアプログラム
１１６  セキュリティアナリスト
２０２  コンピューティングシステム
２５０  プロセッサ
２５２  メモリ
２５４  データ記憶装置
【図１】
0006662117.tif 000002
【図２】
0006662117.tif 000003
【図３】
0006662117.tif 000004
【図４】
0006662117.tif 000005
【図５】
0006662117.tif 000006
【図６】
0006662117.tif 000007
【図７】
0006662117.tif 000008