(57)【特許請求の範囲】
【請求項１】
顧客の利用法を取得するためにソフトウェア開発キットインターフェースを解析するためのコンピュータによって実行される方法であって、
実行可能な命令で構成された１つ以上のコンピュータシステムの制御の下で、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリを、セキュリティプラットフォームにロードすることと、
リモートエンドポイントと接続する際に用いられるように構成されたアクセス証明書を含む、前記リモートアプリケーションプログラミングインターフェースの最上位のオブジェクトを生成することと、
前記リモートアプリケーションプログラミングインターフェースに対して最初の関数呼び出しを実行して、前記最上位のオブジェクトから前記最上位のオブジェクトのためのメソッドの参照名を読み出すことと、読み出されたメソッドの参照名は特定の関数の将来の呼び出しを特定するために有用な名称であり、
前記リモートアプリケーションプログラミングインターフェースに対して続く関数呼び出しを再帰的に実行することと、
先に読み出された参照名を用いて前記実行された関数呼び出しの各メソッドからデータを再帰的に読み出すことと、
読み出されたデータをデータストア内に記憶することと、を含む、方法。
【請求項２】
前記読み出すことが、所定のオブジェクトが読み出されるまで実行される、請求項１に記載の方法。
【請求項３】
前記最上位のオブジェクトに基づいて最後のオブジェクトを検出することと、
前記検出された最後のオブジェクトに少なくとも部分的に基づいて、前記再帰的読み出しを完了することと、をさらに含む、請求項１に記載の方法。
【請求項４】
前記リモートアプリケーションプログラミングインターフェースがクラウドインフラストラクチャサービスのためのアプリケーションプログラミングインターフェースである、請求項１に記載の方法。
【請求項５】
１つ以上のサービスを実装するように構成された少なくとも１つのコンピューティングデバイスを含むシステムであって、前記１つ以上のサービスが、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリをロードすることと、
最上位のオブジェクトを生成することであって、前記最上位のオブジェクトが、前記リモートアプリケーションプログラミングインターフェースの顧客と関連付けられたアクセスキーを含み、前記アクセスキーが、リモートエンドポイントとの通信チャネルを認証する際に用いられるように構成される、生成することと、
少なくとも１つの呼び出しを実行して、前記最上位のオブジェクトから前記最上位のオブジェクトのためのメソッドの名前を読み出すことと、読み出されたメソッドの参照名は特定の関数の将来の呼び出しを特定するために有用な名称であり、
前記メソッドの前記読み出された名前をフィルタ処理することであって、前記呼び出しが安全でない可能性があるとき、前記メソッドの前記読み出された名前を取り除くことを含む、フィルタ処理することと、
先に読み出された参照名を用いて前記読み出されたメソッドの各メソッドを実行することであって、各メソッドに関するデータの集合を戻す、各々のメソッドを実行することと、
前記データの集合をデータストア内に記憶することと、を行うように構成される、前記システム。
【請求項６】
安全でない呼び出しが、実行された場合、前記呼び出しに関連付けられたオブジェクトに関するデータを変更するか、改変するか、修正するか、または削除するであろう呼び出しを含み得る、請求項５に記載の前記システム。
【請求項７】
各メソッドが順番に実行され、前記順番が、第１のメソッドを実行することと、前記実行された第１のメソッドに関連付けられたデータを読み出すことと、第２のメソッドを実行することと、を含む、請求項５に記載の前記システム。
【請求項８】
前記データの集合が、前記アプリケーションプログラミングインターフェースのリモートエンドポイント上に記憶されたデータのツリー表現を含む、請求項５に記載の前記システム。
【請求項９】
前記１つ以上のサービスが、前記最上位のオブジェクト及び少なくとも１つの追加のオブジェクトに関するメタデータを読み出すようにさらに構成される、請求項５に記載の前記システム。
【請求項１０】
前記リモートアプリケーションプログラミングインターフェースの前記顧客に関連付けられた前記アクセスキーが、一時的なセキュリティ証明書を含み、前記一時的なセキュリティ証明書が、アクセスキー識別子、秘密アクセスキー、及びセッショントークンを含む、請求項５に記載の前記システム。
【請求項１１】
前記リモートアプリケーションプログラミングインターフェースが、クラウドインフラストラクチャサービスのためのアプリケーションプログラミングインターフェースである、請求項５に記載の前記システム。
【請求項１２】
前記１つ以上のサービスが、前記データの集合に少なくとも部分的に基づいてセキュリティリスク評価を実施するようにさらに構成される、請求項５に記載の前記システム。
【請求項１３】
実行可能な命令が上に記憶される非一過性コンピュータ可読記憶媒体であって、コンピュータシステムの１つ以上のプロセッサによって実行されたとき、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリをロードすることと、
第１のオブジェクトを作成することであって、前記第１のオブジェクトが、前記リモートアプリケーションプログラミングインターフェースの顧客と関連付けられた認証証明書を含み、前記認証証明書が、前記リモートアプリケーションプログラミングインターフェースとの通信チャネルを認証する際に用いられるように構成される、作成することと、
呼び出しを実行して、前記第１のオブジェクトから前記第１のオブジェクトのためのメソッドの名前を読み出すことと、
前記読み出されたメソッドの各メソッドを実行することであって、各メソッドに関するデータの集合を戻す、各メソッドを実行することと、読み出されたメソッドの参照名は特定の関数の将来の呼び出しを特定するために有用な名称であり、
各メソッドを実行することに応答して、複数のオブジェクトを受信することと、
前記複数のオブジェクトの各々に関連付けられたデータを読み出すことであって、先に読み出された参照名を用いて前記複数のオブジェクトにおける各メソッドのために続く呼び出しを再帰的に実行することを含む、前記複数のオブジェクトの各々に関連付けられた前記データを読み出すことと、
前記読み出されたデータを記憶することと、を前記コンピュータシステムに少なくとも行わせる、前記非一過性コンピュータ可読記憶媒体。
【請求項１４】
前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、リアルタイムまたは準リアルタイムで前記リモートアプリケーションプログラミングインターフェースを連続的に監視させる命令をさらに含む、請求項１３に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項１５】
前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、各オブジェクトに対するセキュリティ及び／または構成の設定置換をスキャンさせる命令をさらに含む、請求項１３に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項１６】
前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、前記第１のオブジェクト及び前記複数のオブジェクトに関連付けられた前記読み出されたデータを表示するためのグラフィカルユーザインタフェース出力を提供させる命令をさらに含む、請求項１３に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項１７】
前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、前記読み出されたデータに署名を適用させる命令をさらに含む、請求項１３に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項１８】
前記コンピュータシステムに、前記読み出されたデータに前記署名を適用させる前記命令が、前記コンピュータシステムに、前記署名の結果に少なくとも部分的に基づいて警報を提供させる命令をさらに含む、請求項１７に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項１９】
前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、セキュリティ規則分析に従って前記読み出されたデータを解釈させる命令をさらに含む、請求項１３に記載の前記非一過性コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、コンピュータシステムのセキュリティ評価の一部としてシステム開発キットインターフェースを自動的に処理することに関する。
【０００２】
優先権及び関連出願の相互参照
本出願は、「ＡＵＴＯＭＡＴＥＤ  ＳＤＫ  ＩＮＧＥＳＴＩＯＮ」と題された、２０１３年１１月１３日に出願された米国仮特許出願第６１／９０３，８６４号からの優先権を主張し、かつその非仮出願である。上記出願の全開示は、あらゆる目的のために、本書において完全に記載されているのと同様に、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【０００３】
会社、個人、顧客は、１つ以上のウェブベースのサービスを彼らのユーザに提供するために、コンピューティングデバイスのネットワークをしばしば利用し、それらのネットワークは、複数の地理的境界を越えて多くの場合拡張する。多くの状況では、顧客は、インフラストラクチャコストを下げて、ウェブサービスを用いて、顧客の製品、ユーティリティ、及び他の利点を活用するために、他の会社によって管理されたハードウェア及びソフトウェアアプリケーションを用いてリモートネットワークを構成して、動作し得る。
【０００４】
ウェブサービス及びリモートコンピューティングアプリケーションが近年全盛で、リソースプロバイダは、サービスされる無数のセキュリティオプション及び構成で、様々なアプリケーション及びウェブサービスにアクセスする能力を、顧客に可能にしている。セキュリティは、コンピュータシステムにおいて重要であるが、多くの場合、コンピュータシステムの範囲と構成は、予め完全に知られているわけではなく、頻繁に変更していて、アップグレードされている。顧客コンピュータシステムのいくつかまたはすべての部分がクラウドベースのリソースの使用を伴うので、コンピュータシステムのセキュリティ及び使用量テストのプロセスは複雑になっている。ソフトウェアセキュリティパッチが既知の脆弱性及び他のリスクを解決しようとする一方、 
【図面の簡単な説明】
【０００５】
本開示に従う様々な実施形態は、図面を参照して以下に説明される。
【０００６】
【図１】少なくとも１つの実施形態に従う環境の例示的な例である。
【図２】様々な実施形態が実装され得る環境の例示的な例である。
【図３】少なくとも１つの実施形態に従うブロック図の例示的な例である。
【図４】少なくとも１つの実施形態に従ってオブジェクト／方法ツリーの走査からデータ報告を生成するためのプロセスの例示的な例である。
【図５】少なくとも１つの実施形態に従う、ソフトウェア開発キットオブジェクトの走査方法のためのプロセスの例示的な例である。
【図６】少なくとも１つの実施形態に従ってリモートエンドポイントＡＰＩデータをスキャンするためのプロセスの例示的な例である。
【図７】少なくとも１つの実施形態に従う環境の例示的な例である。
【０００７】
付属書類Ａは、本開示に従うプログラミングコードスクレイプ結果の例示の抜粋であり、その内容は、米国著作権法の下で保護されている。
【０００８】
付属書類Ｂは、本開示に従う、スクレイプされた結果を後処理するためのプログラミングコードの例示の抜粋であり、その内容は、米国著作権法の下で保護されている。
【発明を実施するための形態】
【０００９】
以下の説明では、様々な実施形態が説明される。説明の目的で、特定の構成及び詳細が、実施形態の完全な理解を提供するために述べられる。しかしながら、実施形態が特定の詳細なしで実施され得ることも、当業者にとって明らかになるだろう。さらに、周知の特徴は、説明されている実施形態を不明瞭にしないために、省略または単純化される場合がある。
【００１０】
本明細書に説明及び示唆された技法は、データをスクレイプして、ウェブサービスの制御システム内で可能な構成エラーまたは異常を判定するために、顧客アプリケーションを走査するように構成された、方法、システム、及びコンピュータ可読媒体を含む。本開示に従うセキュリティプラットフォーム及び構成部品は、すべてのウェブサービスに関するウェブサービスのアプリケーションプログラミングインターフェース（「ＡＰＩ」）から情報及びデータを抽出するために、ウェブサービスソフトウェア開発キット（「ＳＤＫ」）を活用するように構成される。ウェブサービスは、例えば、コンピューティングサービス、ネットワークサービス、コンテンツ配信サービス、データベースサービス、配備サービス、管理サービス、アプリケーションサービス等を含み得る。
【００１１】
本開示に従う例示の実施形態は、ＳＤＫインターフェースを走査するか「ウォーク」して、ＳＤＫインターフェースによって提供されたＡＰＩに情報の要求を適用することによって顧客の利用法、構成、及びセキュリティ情報を取得するように構成されるスキャンクライアントを含む。顧客は、ダッシュボード等のユーザインターフェース（「ＵＩ」）を提供され得、それは、顧客または顧客のオペレータが、グローバルに、顧客クラウドインフラストラクチャのリスク分析を実施することを可能にする。クラウドインフラストラクチャの例としては、Ａｍａｚｏｎ．ｃｏｍのクラウドインフラストラクチャ、Ａｍａｚｏｎ  Ｗｅｂ  Ｓｅｒｖｉｃｅｓ（登録商標）（「ＡＷＳ」）、Ｇｏｏｇｌｅ（登録商標）Ａｐｐ  Ｅｎｇｉｎｅ、ＤｉｇｉｔａｌＯｃｅａｎ（登録商標）等の構造、または、サービスとしてのソフトウェアプロバイダ、サービスとしてのプラットフォームプロバイダ、サービスとしてのインフラストラクチャプロバイダ等の他のコンピューティングリソースサービスプロバイダのインフラストラクチャが挙げられる。本明細書に提示された多くの例示の実施形態では、ＡＷＳ（登録商標）サービスは、例示の種類の利用可能なクラウドインフラストラクチャウェブサービスとして参照される。しかしながら、類似の目的に叶っている代替のコンピューティングリソースサービスプロバイダまたはクラウドプロバイダは、当業者にとって明らかとなるように用いられ得る。
【００１２】
図１は、様々な実施形態に従って態様を実装するための環境１００の例示の実施形態である。理解されるように、インターネット環境１００が説明のために用いられるが、必要に応じて、異なる環境が用いられて、様々な実施形態を実装し得る。
【００１３】
図１の例示の実施形態としては、少なくとも１つの実施形態に従って、Ａｍａｚｏｎ  ＡＷＳ（登録商標）等の第三者ウェブサービス１２０に接続された顧客デバイス１０３の例が挙げられる。ウェブサービス１２０は、様々なサービスを顧客１０１に提供し得、顧客デバイス１０３は、ウェブサービスインターフェースまたは任意の他の種類の顧客インターフェースであり得るＡＰＩ等のインターフェースを介してウェブサービス１２０と通信し得る。顧客１０１は、様々な地理的位置に位置し得る第三者ウェブサービス１２０によって提供されたサービスのうちの１つ以上を利用する組織または会社であり得る。
【００１４】
例示の実施形態に従う解析エンジン１１５は、表現状態転送（「ＲＥＳＴ」）ＡＰＩ１０５を介して等のように、クラウドＡＰＩを介してデータを読み出すように構成され得る。解析エンジンの一次機能の１つは、例示されたオブジェクト１１３を言語ネイティブＳＤＫから取って、ＳＤＫの後のデータを新しいデータ構造に生産することである可能性がある。解析エンジン１１５は、いくつかの実施形態では、署名エンジン１１７を介して、まず例示されたオブジェクト１１３を取って、次いでオブジェクトを調べることで、そのオブジェクトがどの方法を有するのかを判定することによって、このことを行う。署名エンジン１１７は、次いで、ある特定の種類及び同等基準と一致する方法を検索する。
【００１５】
解析エンジン１１５は、ＲＥＳＴ  ＡＰＩ１０５によって定義される要求１２２のようなＡＰＩ呼び出し等の関数呼び出しを実行するようにさらに構成され、これによって、その解析エンジンは、そのオブジェクトの各方法に対して第三者ウェブサービス１２０からサービスを要求し得る。ＡＰＩ呼び出しは、新しいプロセスを作成及び実行して、ならびに／または積分核サービスと通信するハードウェア関連サービス（例えば、ハードディスクにアクセスする）を含み得る。その呼び出しに応答して、各方法がデータを戻すとき、パーサは、その方法の戻り値（複数可）をそのオブジェクトタイプを求めて調べるように構成される。パーサは、次いで、新たに生産されたオブジェクトをどう処理するべきかについて決定する。例えば、パーサがオブジェクトを受信するとき、パーサは、新しいオブジェクトを解析フォーマットに再帰的に戻して、そのため、オブジェクトツリー全体が最終的に走査されて、スクレイプされて、分析のために新しいデータ構造に入れられる。方法一覧は、認証方法を説明している順次な一覧または非順次な一覧であり得、それは、ユーザを認証するために、もしくは、変数、データ構造、もしくは機能等のオブジェクトのセキュリティ及び／または構成方針を判定するために、問い合わせる。いくつかの例示の実施形態では、方法一覧は、顧客が、または、その顧客に代わって、そのセキュリティプラットフォームが、認証のために用いられる１つ以上のセキュリティプロトコルを指定することを可能にする。
【００１６】
上記方法を用いている解析エンジンは、単にＡＰＩプロバイダが公表するもの以上のものを発見することができる。多くの場合、パーサ、他のプログラム、またはオペレータがクラウドプロバイダからＡＰＩ関して有している最良の情報は、ＳＤＫ内のネイティブオブジェクト結合によって提供された情報である。したがって、解析エンジンは、このインターフェースから始めることができ、この方法走査機構を介して所望のデータを抽出するための多くのメタプログラミング技法を用いることができる。このデータは、最終的に脆弱性に関して分析されて、警報と報告を生産する前に、次いで、様々な後処理基準によってフィルタ処理され得る。
【００１７】
図２は、例示の実施形態に従って、顧客２０１と、サービスとしてのソフトウェア（「ＳａａＳ」）アプリケーション２２０と、ウェブサービス２１５との間の通信チャネルを示している環境の例示的な例である。本明細書に説明されるように、サービスの各々は、１つ以上のウェブサービスインターフェースを含み得、それらは、ＳａａＳアプリケーション２２０が、顧客２０１に代わって、適切に構成されたＡＰＩ呼び出し２１４を様々なサービス（ウェブサービス要求を通して顧客の１つ以上のウェブサービスアカウント２０５と関連付けられ得るウェブサービス２１５等）に提示することを可能にする。
【００１８】
顧客２０１は、アクセスキー識別子、秘密アクセスキー、セッショントークン等の認証証明書２０６を、ＳａａＳアプリケーション２２０に提供し得、ＳａａＳアプリケーション２２０は、セキュリティプラットフォーム２２５を含むかそれに操作可能に相互接続され得、ウェブサービスアプリケーションプログラミングインターフェース（「ＡＰＩ」）２１０を介して、ウェブサービス２１５とも操作可能に相互接続される。
【００１９】
セキュリティプラットフォーム２２５は、スキャンサービス２２６を含むか、それに操作可能に相互接続され得、それは、サーバ内で実装され得るか、ハードウェア装置（例えば、コンピュータまたはコンピュータシステム）であり得、及び／または、コンピュータまたはコンピュータシステム上で動作しているソフトウェアアプリケーションまたはプロセスとして実装され得る。コンピュータデバイス２０３上で動作しているクライアントアプリケーション等の１つ以上のデバイスは、ネットワークまたは中間ネットワークを介して、１つ以上のサーバまたはクラスタに操作可能に相互接続され得る。１つ以上のデバイスは、１つ以上のクライアントを介してサーバに接続し得、ここで、それらのクライアントは同一のまたは異なるアプリケーションであり得、そのネットワークまたは中間ネットワークに結合した他の宛先デバイスと同様に通信し得る。
【００２０】
セキュリティエンジン２２７は、一連の署名を動作するように構成され得、ここで、各署名は、単一の種類の構成エラーを特徴付ける。そのような署名は、同時に複数の顧客の構成に対して動作され、脆弱性報告は、顧客ごとに収集され、ソフトウェアスタックのウェブフロントエンドを通して配信されるか、セキュリティプラットフォームに関係付けられ得る。セキュリティプラットフォームの構成部品は、抽出されたデータに対して異なるレベルのセキュリティ分析を実施するために、抽出された情報について一連の署名または指紋を実装し得る。
【００２１】
署名は、ウェブサービスＡＰＩスクレイプから生データを受信して、その情報を用いて、セキュリティのレベルに基づいて、顧客のアプリケーションのセキュリティリスクを判定するように構成され得る。例えば、署名エンジンは、スクレイプされたデータを分析して、不合格、合格、警告、エラー等のリスク評価レベルを判定し得る。代替の例示の実施形態では、顧客は、セキュリティプラットフォームを介して用いられ得るカスタム署名を作成し得る。そのようなカスタム署名は、ＪａｖａＳｃｒｉｐｔ（登録商標）署名を実行するように構成されたセキュリティプラットフォームバックエンドの構成部品の用途に、ＪａｖａＳｃｒｉｐｔ（登録商標）で作成され得る。カスタム署名とプラットフォーム署名との両方の種類の署名は、リスク要因を判定するのに必要がある情報を受信するために、スクレイプされた、キャッシュされたデータか、ウェブサービスＡＰＩへの実の、エンドポイントデータのどちらかを用いるように構成され得る。
【００２２】
ウェブサービスがユーザを認証する場合、ウェブサービスは、ＳａａＳアプリケーションサーバにＰＡＳＳ応答を出し得、ＳａａＳアプリケーションは、顧客に代わってウェブサービスにアクセスすることを許可される。ウェブサービスがＦＡＩＬ応答を戻す場合、ＳａａＳアプリケーションはアクセスを許されず、セッションは終端される。ウェブサービスが応答しない場合、ＳａａＳアプリケーションサーバは、ＥＲＲＯＲとして、及び顧客２０１に戻る可能な認証情報変化のための問い合わせとして、それを処理するか、認証の異なる形態を要求する。このパターンは、ＳａａＳアプリケーションサーバが認証されるか、拒絶されるまで、あるいは、セッションが終端されるまで、残りの指定された方法を通して続くだろう。ＦＡＩＬの応答はＥＲＲＯＲとは異なる。ＦＡＩＬは、ＳａａＳアプリケーションサーバが、成功裏に認証されるために適用可能な認証データベースに含まれる基準を満たさなかったことを意味する。認証はＦＡＩＬ応答で終了する。ＥＲＲＯＲは、セキュリティサーバが認証問い合わせに応答しなかったことを意味する。
【００２３】
スクレイプされたデータ及び実データは、交換可能に用いられ得る。例えば、特定の署名を実施するために必要があるスクレイプされたデータが失われた場合、それは、自動的に実ＡＰＩエンドポイントを用いて、ウェブサービスから所望のデータを読み出すことになる。例えば、セキュリティプラットフォームは、すべてのネットワークトラフィックを許可しているルーティングパラメータ、構成され、現在まで継続されたバックアップ、作成されたが、参照または使用されていないリソース、サポートするリソース上で有効にされた暗号化、暗号を確保するためだけに制限されたＳＳＬ及びＴＬＳ暗号集合、有効にされた多要素認証、特権ユーザの数に対する制限、一般的に検出可能な一般的に利用可能なリソース、及びさらに数百の検出を提供し得る。ウェブサービスとその構成の詳細に関する追加のメタデータは、スクレイプされる可能性がある。例えば、用いられている仮想機械のサイズ、使用中のメモリ量、利用可能なメモリ量、起動されているオペレーティングシステム、顧客が構成したユーザ、ユーザーアカウント概要の詳細等に関する、構成的及び／または記述的データに関するメタデータである。
【００２４】
スキャンクライアントを用いて、オペレータ（コンピュータ、コンピュータプロセスまたは人、典型的には人）は、サインアップ及び／またはログインして、認証されたセッションを開始するだろう。スキャンクライアントは、次いで、顧客クラウドキーを取得することになり、そこから、オペレータは、警報の購読を管理し、オペレータの詳細（例えば、電子メールアドレス、連絡先等）を管理し、警報履歴を閲覧し、及び／またはリスク報告を閲覧し得る。ＡＷＳ（登録商標）に関して、スキャンクライアントのＵＩは、顧客が、サインアップし、ログインし、彼らのＡＷＳ（登録商標）キーを提供し、彼らの電子メールアドレスを管理し、警報を購読し、報告及び警報履歴を閲覧することを可能にする。
【００２５】
スキャンクライアントのＵＩは、スキャンクライアントがオペレータから取得する読み取り専用ＩＡＭアクセスキーを暗号化するように構成され得る。ＵＩは、いくつかの実施形態に従う署名エンジンと組み合わせて、顧客情報を読み出して／受信して、それを使用して、クラウドＡＰＩを介してグローバルに顧客のクラウドインフラストラクチャのリスク分析を実施するようにさらに構成される。例えば、ＵＩは、オペレータが、ＡＷＳ（登録商標）に対するクラウドＡＰＩを介して、グローバルにオペレータのＡＷＳ（登録商標）インフラストラクチャのリスク分析を実施することを可能にし得る。これは、概して、ちょうどＨｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（「ＨＴＴＰ」）スクレイプだけを行うこと（現在、特定されたサービスにパケットを送信することによって用いられ、そのパケット通信に応答して受信された情報または情報の不足に基づいて、分析を実施している）よりも、リソースに関して、高信頼で、費用効果が高い。ＵＩは、リアルタイムで、準リアルタイムで、または任意の供給された期間で、連続的にバックグラウンドで動作しているセキュリティ分析ジョブを表示するように構成され得、結果は、クライアント設定につき、ＵＩにおいてオペレータに提示される。ＵＩは、顧客が、顧客の警報方法を選択して、電子メールを介してまたは別の様式でそれらを受信するための能力を提供する。
【００２６】
なお、上述のすべての実施形態が、図１を参照して説明されたサービスを含むというわけではなく、追加のサービスが、本明細書に明示的に説明されたサービスに加えて、または、それらの代替として、提供され得る。
【００２７】
図３は、本明細書に提示された例示の実施形態に従ってセキュリティ報告を示すユーザインターフェース３００の例示的な例である。セキュリティ報告は、図１に関連して説明及び図解されたコンピュータデバイス１０３上で動作しているクライアント上等のように、ユーザデバイス上で生成され得る。セキュリティ報告は、第三者ウェブサービスクラウドアーキテクチャで動作している顧客のアプリケーションに基づく、走査及び分析されたセキュリティプラットフォームの結果であり得る。セキュリティ報告は、世界中の異なる地域３０２、ウェブサービスの異なるサービス３０４、突き止められた問題の異なる重大度３０６、及び、セキュリティ分析の結果に基づいて顧客に警報が出されるべきかどうかに関するステータス判定３０８を提供し得る。
【００２８】
本開示の例示の実施形態によると、ウェブサービス３０４は、例えば、Ａｍａｚｏｎ（登録商標）ＡｐｐＳｔｒｅａｍ、ＣｌｏｕｄＦｒｏｎｔ、ＣｌｏｕｄＳｅａｒｃｈ、ＣｌｏｕｄＷａｔｃｈ、Ｃｏｇｎｉｔｏ  Ｉｄｅｎｔｉｔｙ、Ｃｏｇｎｉｔｏ  Ｓｙｎｃ、ＤｅｖＰａｙ、ＤｙｎａｍｏＤＢ、ＥＣ２、Ｅｌａｓｔｉｃ  ＭａｐＲｅｄｕｃｅ、Ｅｌａｓｔｉｃ  Ｔｒａｎｓｃｏｄｅｒ、ＥｌａｓｔｉＣａｃｈｅ、Ｇｌａｃｉｅｒ、Ｋｉｎｅｓｉｓ、Ｍｅｃｈａｎｉｃａｌ  Ｔｕｒｋ、Ｍｏｂｉｌｅ  Ａｎａｌｙｔｉｃｓ、Ｒｅｄｓｈｉｆｔ、Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａｂａｓｅ  Ｓｅｒｖｉｃｅ、Ｒｏｕｔｅ  ５３、Ｓｉｍｐｌｅ  Ｅｍａｉｌ  Ｓｅｒｖｉｃｅ、ＳｉｍｐｌｅＤＢ、Ｓｉｍｐｌｅ  Ｎｏｔｉｆｉｃａｔｉｏｎ  Ｓｅｒｖｉｃｅ、Ｓｉｍｐｌｅ  Ｑｕｅｕｅ  Ｓｅｒｖｉｃｅ、Ｓｉｍｐｌｅ  Ｓｔｏｒａｇｅ  Ｓｅｒｖｉｃｅ（「Ｓ３」）、Ｓｉｍｐｌｅ  Ｗｏｒｋｆｌｏｗ  Ｓｅｒｖｉｃｅ、ＶＰＣ、Ａｕｔｏ  Ｓｃａｌｉｎｇを含み得る。追加の例は、ＡＷＳ（登録商標）ＣｌｏｕｄＴｒａｉｌ、ＣｌｏｕｄＦｏｒｍａｔｉｏｎ、Ｄａｔａ  Ｐｉｐｅｌｉｎｅ、Ｄｉｒｅｃｔ  Ｃｏｎｎｅｃｔ、Ｅｌａｓｔｉｃ  Ｂｅａｎｓｔａｌｋ、Ｉｄｅｎｔｉｔｙ  ａｎｄ  Ａｃｃｅｓｓ  Ｍａｎａｇｅｍｅｎｔ（「ＩＡＭ」）、Ｉｍｐｏｒｔ／Ｅｘｐｏｒｔ、ＯｐｓＷｏｒｋｓ、Ｓｅｃｕｒｉｔｙ  Ｔｏｋｅｎ  Ｓｅｒｖｉｃｅ（「ＳＴＳ」）、Ｓｔｏｒａｇｅ  Ｇａｔｅｗａｙ、Ｓｕｐｐｏｒｔ、Ｅｌａｓｔｉｃ  Ｌｏａｄ  Ｂａｌａｎｃｉｎｇ、及び追加のサービスを含み得る。
【００２９】
図４は、本明細書に提示された例示の実形態に従って、方法／オブジェクトツリーを走査するための高レベルプロセスであるプロセス４００の例示的な例である。プロセス４００は、図２に関連して説明及び図解されるようなＳａａＳアプリケーションサーバ２２０、ならびに／またはその任意の好適なシステムもしくは構成部品等の任意の好適なシステムによって実施され得る。図４に戻って、プロセス４００に従って、セキュリティプラットフォームのスキャンサービスは、ＡＷＳ（登録商標）等のウェブサービスに要求を送信して、一時的なセキュリティ証明書が、顧客に代わってリモートＡＰＩにアクセスすることを要求する（４０２）。認証が発生するとすれば、そのスキャンサービスは、ウェブサービスソフトウェア開発キット（「ＳＤＫ」）オブジェクトを生成して（４０４）、生成されたＳＤＫオブジェクトからオブジェクト／方法ツリーを走査する（４０６）。スキャンサービスは、結果集合をさらに生成して（４０８）、結果集合を記憶する（４１０）。最後に、スキャンサービスは、結果に基づいて報告データを生成して（４１２）、データベース内にその報告を記憶する（４１４）。
【００３０】
図５は、本明細書に提示された例示の実施形態に従って、ソフトウェア開発キットオブジェクトを走査するのに用いられ得るプロセス５００の例示的な例である。プロセス５００は、図１に関連して説明及び図解されるようなアプリケーションサーバ１１０、ならびに／またはその任意の好適なシステムもしくは構成部品等の任意の好適なシステムによって実施され得る。図５に戻って、プロセス５００に従って、スクレイピングエンジンは、ソフトウェア開発キット（「ＳＤＫ」）オブジェクトを走査して（５０２）、そのオブジェクト上で方法の一覧を受信する（５０４）ように構成され得る。スクレイピングエンジンは、オブジェクトに対して方法の再帰的スクレイプを実施し、これによって、方法がスクレイプされるごとに、受信されたデータは追加のオブジェクトであり得、それが事実である場合、スクレイピングエンジンは、別の方法が存在するかどうかを判定する（５０６）。追加の方法が見出されるならば、次の方法へのＡＰＩ呼び出しが行われ（５１４）、そのＡＰＩ呼び出しから生じているデータは処理される（５１６）。一旦結果として生じるデータが処理されるならば、スクレイピングエンジンは、データのそのレベルに関連付けられた別のオブジェクトがあるかどうかを判定し、「はい」ならば、その再帰は開始に戻り、「いいえ」ならば、そのプロセスは終了する。
【００３１】
追加方法が見出されないならば、スクレイピングエンジンは、スクレイプされた結果を記憶し（５０８）、スクレイプされたデータに対して署名分析を実施し（５１０）、スクレイプされたデータの署名分析に基づいて、終了セキュリティ報告を記憶する（５１２）。
【００３２】
図６は、本明細書に提示された例示の実施形態に従って、顧客のソフトウェア開発キットオブジェクトを解析するのに用いられ得るプロセス６００の例示的な例である。プロセス６００は、図２に関連して説明及び図解されるようなＳａａＳアプリケーションサーバ２２０、ならびに／またはその任意の好適なシステムもしくは構成部品等の任意の好適なシステムによって実施され得る。図６に戻って、プロセス６００に従って、サーバは、スキャンクライアントにライブラリをロードするように構成され得、スキャンクライアントでは、ライブラリが、リモートアプリケーションプログラミングインターフェースへのインターフェースであり得る（６０２）。ライブラリが追加された後、セキュリティプラットフォームは、最上位のオブジェクトを作成して（６０４）、そのオブジェクトに証明書を送り込んで、リモートエンドポイントとの通信チャネルを作成するように構成される（６０６）。証明書は、アクセスキー識別子及び秘密キーを含むアクセスキー証明書等のように、ウェブアプリケーションサービスに対して行われるＡＰＩ呼び出しのためにデジタル署名するように構成されるアクセスキーを含み得る。秘密キー部は、ウェブサービスアカウント顧客、またはウェブサービスアカウントユーザが前もって付与したフェデレーションユーザによって確保されなければならない。セキュリティプラットフォームアプリケーションまたはサーバとウェブサービスとの間の認証のための代替の方法は、例えば、クロスアカウントアクセスまたはクロスオリジンリソース共用等のように、同様に適用され得る。
【００３３】
図６に戻って、リモートＡＰＩとの通信接続が証明書を用いて確立された後、サーバは、最上位のオブジェクトを、そのオブジェクトと関連付けられた方法の名前を参照することによって走査し（６０８）、すべての見出されたオブジェクトのすべての方法の名前を受信する（６１０）。セキュリティプラットフォーム、またはそれに操作可能に相互接続するサブクラススクレイパーは、ＡＰＩにおいてデータに潜在的に影響を及ぼすか、データ上に書き込む可能性のある任意の呼び出しを無視するか、削除する等、危険な関数呼び出しのために、参照された方法の名前をフィルタ処理する（６１２）。セキュリティプラットフォームは、参照された方法のうちのすべてに対してＡＰＩ呼び出しをさらに実施して（６１４）、各々の呼び出された方法の後でデータを受信する（６１６）。データは、呼び出しと同調して受信され、最上位のオブジェクト内で見出されたすべてのオブジェクトのうちの各方法は、呼び出され、ＡＰＩのリモートエンドポイント上に記憶されたデータを表すデータのツリーを作成する（６１８〜６２０）。セキュリティプラットフォームは、リモートエンドポイントデータベースのローカルコピーをキャッシュし（６２２）、さらなる処理、署名適用、報告生成のために、記憶されたデータを分析エンジンに提供する（６２４）。
【００３４】
図７は、様々な実施形態に従って、態様を実装するための例示の環境７００の態様を図解する。理解されるように、ウェブベースの環境が説明のために用いられるが、必要に応じて、異なる環境が用いられて、様々な実施形態を実装し得る。環境は、ウェブクライアント７１０等の電子クライアントデバイスを含み、それは、適切なネットワーク７７４上で要求、メッセージ、もしくは情報を送信及び／または受信し、いくつかの実施形態では、そのデバイスのユーザに情報を戻して伝達するように動作可能な任意の適切なデバイスを含み得る。そのようなクライアントデバイスの例としては、パーソナルコンピュータ、携帯電話、ラップトップコンピュータ、タブレットコンピュータ、埋込式コンピュータシステム、電子ブックリーダー等が挙げられる。この例では、環境が、要求を受信して、それに応答して、コンテンツを供給するためのウェブサーバ７７６と、少なくとも１つのアプリケーションサーバ７７７とを含むように、ネットワークはインターネットを含む。いくつかのアプリケーションサーバがあり得ることが理解されるべきである。サーバは、本明細書に用いられる場合、ハードウェアデバイスまたは仮想コンピュータシステム等の様々な方法で実装され得る。いくつかの文脈では、サーバは、コンピュータシステム上で実行されているプログラミングモジュールを参照し得る。その例は、データベース問い合わせを含むか受容して、それらに応答し得るデータサーバ７７８と通信しているデータベースサーバ７８０をさらに図解する。
【００３５】
本明細書に記載されるブロック図及び流れ図の要素が、ソフトウェア、ハードウェア、ファームウェア、または将来判定される他の類似の実装内において、実装され得ることが理解されるべきである。加えて、本明細書に記載されたブロック図及び流れ図の要素は、ソフトウェア、ハードウェア、またはファームウェアにおいて、任意の様式で、組み合わされるか、分割される可能性がある。ソフトウェアにおいて実装される場合、ソフトウェアは、本明細書に開示された例示の実施形態をサポートし得る任意の言語において書き込まれ得る。ソフトウェアは、ランダムアクセスメモリ（「ＲＡＭ」）、読み出し専用メモリ（「ＲＯＭ」）、コンパクトディスク読み出し専用メモリ（「ＣＤ−ＲＯＭ」）等のコンピュータ可読媒体の任意の形態で記憶され得る。動作において、汎用または特定用途向けプロセッサは、当業界でよく理解された様式で、ソフトウェアをロードして、実行する。ブロック図及び流れ図が、より多くのまたはより少ない要素を含み、異なるように配置もしくは配向されるか、または異なるように表現され得ることが理解されるべきである。実装が、ブロック図、流れ図、及び／またはネットワーク図、ならびに、本開示の実施形態の実行を図解しているブロック図及び流れ図の数を指令し得ることが理解されるべきである。
【００３６】
前述の例は、他の実施形態、変形、及び修正が当業者にとって明らかとなる本開示のある特定の例示の実施形態を図解する。したがって、本開示は、上述の特定の実施形態に限定されるべきではないが、特許請求の範囲によってむしろ定義される。
【００３７】
本開示は特にその例示の実施形態を参照して示され、説明されたが、添付の特許請求の範囲によって包含される本開示の範囲を逸脱することなく、形態及び詳細における様々な変化が行われ得ることが、当業者によって理解されるだろう。
【００３８】
本開示の様々な実施形態は、Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ（「ＴＣＰ／ＩＰ」）、Ｏｐｅｎ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ（「ＯＳＩ」）モデルの様々な層で動作しているプロトコル、Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（「ＦＴＰ」）、Ｕｎｉｖｅｒｓａｌ  Ｐｌｕｇ  ａｎｄ  Ｐｌａｙ（「ＵｐｎＰ」）、Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ（「ＮＦＳ」）、Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ（「ＣＩＦＳ」）、及びＡｐｐｌｅ  Ｔａｌｋ等の様々な市販のプロトコルのうちのいずれか用いて通信をサポートすることで、当業者によく知られている場合がある少なくとも１つのネットワークを利用する。ネットワークは、例えば、ローカルエリアネットワーク、広域ネットワーク、仮想私設ネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話ネットワーク、赤外線ネットワーク、無線ネットワーク、及びそれらの任意の組み合わせであり得る。
【００３９】
ウェブサーバを利用している実施形態では、ウェブサーバは、Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＨＴＴＰ）サーバ、ＦＴＰサーバ、データサーバ、Ｊａｖａサーバ、及び業務アプリケーションサーバを含む様々なサーバまたは中間階層アプリケーションのうちのいずれかを動作し得る。サーバ（複数可）はまた、Ｊａｖａ（登録商標）、Ｃ、Ｃ＃、もしくはＣ＋＋等の任意のプログラム言語、またはＰｅｒｌ、Ｐｙｔｈｏｎ、もしくはＴＣＬ等の任意のスクリプト言語、ならびにそれらの組み合わせで書き込まれた１つ以上のスクリプトまたはプログラムとして実装され得る１つ以上のウェブアプリケーションを実行することによって等、ユーザデバイスからの要求に応答して、プログラムまたはスクリプトを実行することができ得る。
【００４０】
「Ａ、Ｂ、及びＣのうちの少なくとも１つ」または「Ａ、Ｂ及びＣのうちの少なくとも１つ）」の形態の句等の連言的文言は、特に別段に記載されない限り、または文脈によって別段に明確に否定されない限り、項目、用語等が、ＡまたはＢまたはＣ、または、Ａ及びＢ及びＣの集合の任意の非空部分集合であり得ることを提示するために概して用いられるような文脈と共に、特に理解される。例えば、３つの部分を有する集合の例示的な例において、「Ａ、Ｂ、及びＣのうちの少なくとも１つ」及び「Ａ、Ｂ及びＣのうちの少なくとも１つ」の連言的句は、以下の集合のうちのいずれかを参照する：｛Ａ｝、｛Ｂ｝、｛Ｃ｝、｛Ａ、Ｂ｝、｛Ａ、Ｃ｝、｛Ｂ、Ｃ｝、｛Ａ、Ｂ、Ｃ｝。よって、そのような連言的文言は、概して、ある特定の実施形態が、Ａの少なくとも１つ、Ｂの少なくとも１つ、Ｃの少なくとも１つの各々を必要とすることを意味することを意図されない。
【００４１】
本明細書に説明されたプロセスの動作は、本明細書に別段に明記しない限り、または文脈によって別段にはっきりと否定されない限り、任意の好適な順番で実施され得る。本明細書に説明されたプロセス（または変形及び／もしくはその組み合わせ）は、実行可能な命令で構成された１つ以上のコンピュータシステムの制御の下で実施され得、ハードウェアまたはその組み合わせによって、１つ以上のプロセッサ上でまとめて実行しているコード（例えば、実行可能な命令、１つ以上のコンピュータプログラムまたは１つ以上のアプリケーション）として実装され得る。コードは、例えば、１つ以上のプロセッサによって実行可能な複数の命令を含むコンピュータプログラムの形態で、コンピュータ可読記憶媒体上に記憶され得る。コンピュータ可読記憶媒体は、非一過性である可能性がある。
【００４２】
一切の例、または本明細書に提供された典型的な文言（例えば、「等」）の使用は、本発明の実施形態をよりよく明らかにすることを単に意図され、別段に特許請求の範囲に記載されない限り、本発明の範囲に対して制限を与えない。明細書のどの文言も、本発明の実施に本質的なものとして任意の特許請求の範囲に記載されていない要素を指示しているものとして解釈されるべきではない。
【００４３】
さらなる実施形態が、本開示の読後、当業者によって想定され得る。他の実施形態では、上に開示された本発明の組み合わせまたは下位組み合わせが、有利に行われ得る。構成部品の例示の配置は説明のために示され、組み合わせ、追加、再配置等が本発明の代替の実施形態で企図されることが理解されるべきである。したがって、本発明は典型的な実施形態に関して説明されたが、当業者は、多数の修正が可能であることを認識することになる。
【００４４】
例えば、本明細書に記載されたプロセスは、ハードウェア構成部品、ソフトウェア構成部品、及び／またはそれらの任意の組み合わせを用いて実装され得る。それに応じて、明細書及び図面は、限定的な意味よりもむしろ例示的な意味で考えられるべきである。しかしながら、様々な修正及び変化が、特許請求の範囲に記載したような本発明のより広い趣旨及び範囲から逸脱することなく行われ得、本発明が、以下の特許請求の範囲内ですべての修正及び同等物を網羅することが意図されることは、明白であろう。
【００４５】
本明細書に引用された刊行物、特許出願、及び特許を含むすべての参照は、各参照が、参照によって組み込まれるように個別にかつ特に指示され、本明細書にその全体が記載されるかのように、同程度に参照によって本明細書によって組み込まれる。
適用例１：顧客の利用法を取得するためにソフトウェア開発キットインターフェースを解析するためのコンピュータ実装方法であって、
実行可能な命令で構成された１つ以上のコンピュータシステムの制御の下で、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリを、セキュリティプラットフォームにロードすることと、
リモートエンドポイントと接続するように構成されたアクセス証明書を含む最上位のオブジェクトを生成することと、
関数呼び出しを実行して、前記最上位のオブジェクトのための方法の参照名を読み出すことと、
前記実行された関数呼び出しの各方法からデータを再帰的に読み出すことと、
読み出されたデータをデータストア内に記憶することと、を含む、前記コンピュータ実装方法。
適用例２：前記読み出すことが、所定のオブジェクトが読み出されるまで実行される、適用例１に記載の前記コンピュータ実装方法。
適用例３：前記最上位のオブジェクトに基づいて最後のオブジェクトを検出することと、
前記検出された最後のオブジェクトに少なくとも部分的に基づいて、前記再帰的読み出しを完了することと、をさらに含む、適用例１に記載の前記コンピュータ実装方法。
適用例４：前記リモートアプリケーションプログラミングインターフェースが、Ａｍａｚｏｎ（登録商標）Ｗｅｂ  Ｓｅｒｖｉｃｅのためのアプリケーションプログラミングインターフェースである、適用例１に記載の前記コンピュータ実装方法。
適用例５：１つ以上のサービスを実装するように構成された少なくとも１つのコンピューティングデバイスを含むシステムであって、前記１つ以上のサービスが、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリをロードすることと、
最上位のオブジェクトを生成することであって、前記最上位のオブジェクトが、前記リモートアプリケーションプログラミングインターフェースの顧客と関連付けられたアクセスキーを含み、前記アクセスキーが、リモートエンドポイントとの通信チャネルを認証するように構成される、生成することと、
少なくとも１つの呼び出しを実行して、前記最上位のオブジェクトのための方法の名前を読み出すことと、
前記方法の前記読み出された名前をフィルタ処理することであって、前記呼び出しが安全でない可能性があるとき、前記方法の前記読み出された名前を取り除くことを含む、フィルタ処理することと、
前記読み出された方法の各方法を実行することであって、各方法に関するデータの集合を戻す、各々の方法を実行することと、
前記データの集合をデータストア内に記憶することと、を行うように構成される、前記システム。
適用例６：安全でない呼び出しが、実行された場合、前記呼び出しに関連付けられたオブジェクトに関するデータを変更するか、改変するか、修正するか、または削除するであろう呼び出しを含み得る、適用例５に記載の前記システム。
適用例７：各方法が順番に実行され、前記順番が、第１の方法を実行することと、前記実行された第１の方法に関連付けられたデータを読み出すことと、第２の方法を実行することと、を含む、適用例５に記載の前記システム。
適用例８：前記データの集合が、前記アプリケーションプログラミングインターフェースのリモートエンドポイント上に記憶されたデータの表現を含む、適用例５に記載の前記システム。
適用例９：前記１つ以上のサービスが、前記最上位のオブジェクト及び少なくとも１つの追加のオブジェクトに関するメタデータを読み出すようにさらに構成される、適用例５に記載の前記システム。
適用例１０：前記リモートアプリケーションプログラミングインターフェースの前記顧客に関連付けられた前記アクセスキーが、一時的なセキュリティ証明書を含み、前記一時的なセキュリティ証明書が、アクセスキー識別子、秘密アクセスキー、及びセッショントークンを含む、適用例５に記載の前記システム。
適用例１１：前記リモートアプリケーションプログラミングインターフェースが、Ａｍａｚｏｎ（登録商標）Ｗｅｂ  Ｓｅｒｖｉｃｅｓサービスのためのアプリケーションプログラミングインターフェースである、適用例５に記載の前記システム。
適用例１２：前記１つ以上のサービスが、前記データの集合に少なくとも部分的に基づいてセキュリティリスク評価を実施するようにさらに構成される、適用例５に記載の前記システム。
適用例１３：実行可能な命令が上に記憶される非一過性コンピュータ可読記憶媒体であって、コンピュータシステムの１つ以上のプロセッサによって実行されたとき、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリをロードすることと、
第１のオブジェクトを作成することであって、前記第１のオブジェクトが、前記リモートアプリケーションプログラミングインターフェースの顧客と関連付けられた認証証明書を含み、前記認証証明書が、前記リモートアプリケーションプログラミングインターフェースとの通信チャネルを認証するように構成される、作成することと、
呼び出しを実行して、前記第１のオブジェクトのための方法の名前を読み出すことと、
前記読み出された方法の各方法を実行することであって、各方法に関するデータの集合を戻す、各方法を実行することと、
各方法を実行することに応答して、複数のオブジェクトを受信することと、
前記複数のオブジェクトの各々に関連付けられたデータを読み出すことであって、前記複数のオブジェクトにおける各方法のために呼び出しを再帰的に実行することを含む、前記複数のオブジェクトの各々に関連付けられた前記データを読み出すことと、
前記読み出されたデータを記憶することと、を前記コンピュータシステムに少なくとも行わせる、前記非一過性コンピュータ可読記憶媒体。
適用例１４：前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、リアルタイムまたは準リアルタイムで前記リモートアプリケーションプログラミングインターフェースを連続的に監視させる命令をさらに含む、適用例１３に記載の前記非一過性コンピュータ可読記憶媒体。
適用例１５：前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、各オブジェクトに対するセキュリティ及び／または構成の設定置換をスキャンさせる命令をさらに含む、適用例１３に記載の前記非一過性コンピュータ可読記憶媒体。
適用例１６：前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、前記第１のオブジェクト及び前記複数のオブジェクトに関連付けられた前記読み出されたデータを表示するためのグラフィカルユーザインタフェース出力を提供させる命令をさらに含む、適用例１３に記載の前記非一過性コンピュータ可読記憶媒体。
適用例１７：前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、前記読み出されたデータに署名を適用させる命令をさらに含む、適用例１３に記載の前記非一過性コンピュータ可読記憶媒体。
適用例１８：前記コンピュータシステムに、前記読み出されたデータに前記署名を適用させる前記命令が、前記コンピュータシステムに、前記署名の結果に少なくとも部分的に基づいて警報を提供させる命令をさらに含む、適用例１７に記載の前記非一過性コンピュータ可読記憶媒体。
適用例１９：前記命令が、前記１つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、セキュリティ規則分析に従って前記読み出されたデータを解釈させる命令をさらに含む、適用例１３に記載の前記非一過性コンピュータ可読記憶媒体。
【００４６】
付属書類Ａ
パブリッククラウド環境（複数可）の仮想サーバ配備に関する出力
{
"Reservations": [
{
"OwnerId": "613698206329", 
"ReservationId": "r-ee73f9c4", 
"Groups": [], 
"RequesterId": "226008221399", 
"Instances": [
{
"Monitoring": {
"State": "enabled"
}, 
"PublicDnsName": "ec2-54-208-198-221.compute-1.cloud.example.com", 
"RootDeviceType": "ebs", 
"State": {
"Code": 16, 
"Name": "running"
}, 
"EbsOptimized": false, 
"LaunchTime": "2014-09-28T09:45:54.000Z", 
"PublicIpAddress": "54.208.198.221", 
"PrivateIpAddress": "10.100.1.114", 
"ProductCodes": [], 
"VpcId": "vpc-181ad07d", 
"StateTransitionReason": null, 
"InstanceId": "i-da68f437", 
"ImageId": "ami-de45f1b6", 
"PrivateDnsName": "ip-10-100-1-114.ec2.internal", 
"KeyName": "devshell", 
"SecurityGroups": [
{
"GroupName": "corpweb-092614-EC2SecurityGroup-D2T0WUN7S5TL", 
"GroupId": "sg-d82a1fbd"
}
], 
"ClientToken": "211c70e0-2602-4266-9702-4f0a191902d5_us-east-1b_1", 
"SubnetId": "subnet-9f6269d9", 
"InstanceType": "m3.medium", 
"NetworkInterfaces": [
{
"Status": "in-use", 
"SourceDestCheck": true, 
"VpcId": "vpc-181ad07d", 
"Description": null, 
"Association": {
"PublicIp": "54.208.198.221", 
"PublicDnsName": "ec2-54-208-198-221.compute-1.cloud.example.com", 
"IpOwnerId": "cloudprovider"
}, 
"NetworkInterfaceId": "eni-64ac573c", 
"PrivateIpAddresses": [
{
"PrivateDnsName": "ip-10-100-1-114.ec2.internal", 
"Association": {
"PublicIp": "54.208.198.221", 
"PublicDnsName": "ec2-54-208-198-221.compute-1. cloud.example.com", 
"IpOwnerId": "cloudprovider"
}, 
"Primary": true, 
"PrivateIpAddress": "10.100.1.114"
}
], 
"PrivateDnsName": "ip-10-100-1-114.ec2.internal", 
"Attachment": {
"Status": "attached", 
"DeviceIndex": 0, 
"DeleteOnTermination": true, 
"AttachmentId": "eni-attach-5531e733", 
"AttachTime": "2014-09-28T09:45:54.000Z"
}, 
"Groups": [
{
"GroupName": "corpweb-092614-EC2SecurityGroup-D2T0WUN7S5TL", 
"GroupId": "sg-d82a1fbd"
}
], 
"SubnetId": "subnet-9f6269d9", 
"OwnerId": "613698206329", 
"PrivateIpAddress": "10.100.1.114"
}
], 
"SourceDestCheck": true, 
"Placement": {
"Tenancy": "default", 
"GroupName": null, 
"AvailabilityZone": "us-east-1b"
}, 
"Hypervisor": "xen", 
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sda1", 
"Ebs": {
"Status": "attached", 
"DeleteOnTermination": true, 
"VolumeId": "vol-46dedf03", 
"AttachTime": "2014-09-28T09:45:58.000Z"
}
}
], 
"Architecture": "x86_64", 
"KernelId": "aki-919dcaf8", 
"IamInstanceProfile": {
"Id": "AIPAJEKMMO3DADC7XWORA", 
"Arn": "arn:aws:iam::613698206329:instance-profile/InstanceCorpWebRole"
}, 
"RootDeviceName": "/dev/sda1", 
"VirtualizationType": "paravirtual", 
"Tags": [
{
"Value": "CorpWebAutoScalingGroup", 
"Key": "aws:cloudformation:logical-id"
}, 
{
"Value": "corpweb-092614", 
"Key": "Name"
}, 
{
"Value": "corpweb-092614", 
"Key": "aws:cloudformation:stack-name"
}, 
{
"Value": "arn:aws:cloudformation:us-east-1:613698206329:stack/corpweb-092614/13253180-45d6-11e4-b2d0-50e2416294a8", 
"Key": "aws:cloudformation:stack-id"
}, 
{
"Value": "corpweb-092614-CorpWebAutoScalingGroup-14SI2S6VXFUDE", 
"Key": "aws:autoscaling:groupName"
}
], 
"AmiLaunchIndex": 0
}
]
}, 
【００４７】
付属書類Ｂ
スクレイプ結果を後処理し、強さと正当性のためにセキュリティ対策を列挙するための署名。
＃エンコーディング：ｕｔｆ−８
module DSL
class Signatures
class SecurityGroupInstanceMap < DSL::InternalDSL
def initialize
configure do |c|
c.module            = 'security_group_instance_map'
c.description       = 'Check for flaws in security groups as mapped to EC2 instances'
c.identifier        = 'AWS:EC2-033'
c.usage             = 'metascrape.signatures.security_group_instance_map.perform metascrape.customers.evident.aws.us_east_1'
c.tags              = [:ec2, :signature]
c.deep_inspection   = [:security_group_name, :protocol, :port, :instance_id]
c.unique_identifier = [:security_group_name, :protocol, :port, :instance_id]
end
@ports = [[22, :tcp], [23, :tcp], [3389, :tcp], [135, :tcp], [445, :tcp], [3306, :tcp], [5432, :tcp], [1433, :tcp], [1434, :udp], [4333, :tcp], [5500, :tcp], [5900, :tcp], [137, :udp], [138, :udp], [445, :udp], [21, :tcp], [20, :tcp], [25, :tcp], [53, :udp], [53, :tcp]]
@ranges = ['0.0.0.0/0']
end
def perform(aws)
alerts  = []
used_by = {}
＃＃＃すべてのアクティブなセキュリティグループのハッシュを記憶する
security_groups = aws.ec2.describe_security_groups
if security_groups.respond_to?('security_groups') && security_groups.security_groups.is_a?(Array)
security_groups.security_groups.each do |security_group|
used_by[security_group.group_name] = Array.new
end
end
＃＃＃各ＥＣ２実例を通して反復し、どのｓｅｃｕｒｉｔｙ＿ｇｒｏｕｐｓを各々が用いるのかを記憶する
ec2_instances = aws.ec2.describe_instances
if ec2_instances.respond_to?('reservations') && ec2_instances.reservations.is_a?(Array)
ec2_instances.reservations.each do |reservation|
if reservation.respond_to?('instances') && reservation.instances.is_a?(Array)
reservation.instances.each do |instance|
if instance.respond_to?('security_groups') && instance.security_groups.is_a?(Array)
instance.security_groups.each do |security_group|
used_by[security_group.group_name] ||= []
used_by[security_group.group_name].push(instance.instance_id)
end
end
end
end
end
end
＃＃＃問題のあるオープンポートに対してセキュリティグループを調査する
if security_groups.respond_to?('security_groups') && security_groups.security_groups.is_a?(Array)
security_groups.security_groups.each do |security_group|
if security_group.respond_to?('ip_permissions') && security_group.ip_permissions.is_a?(Array)
security_group.ip_permissions.each do |ip_permission|
@ports.each do |port|
if port[0] == ip_permission.to_port && port[1].to_s == ip_permission.ip_protocol
ip_permission.ip_ranges.each do |ip_range|
@ranges.each do |r|
if ip_range.cidr_ip == r
result = {
ip_permission: ip_permission,
port: port,
ip_range: ip_range.cidr_ip,
range: r,
security_group: security_group.group_name
}
if used_by[security_group.group_name].length == 0
result[:message] = "Security Group #{security_group.group_name} has #{ip_permission.ip_protocol} port #{ip_permission.to_port} exposed globally. No instances impacted."
report = {
security_group_name: security_group.group_name,
protocol: ip_permission.ip_protocol,
port: ip_permission.to_port
}
set_data(report)
alerts.push fail(result)
else
used_by[security_group.group_name].each do |instance_id|
result[:instance_id] = instance_id
result[:message] = "Instance #{instance_id} has #{ip_permission.ip_protocol} port #{ip_permission.to_port} exposed globally by Security Group #{security_group.group_name}."
report = {
security_group_name: security_group.group_name,
protocol: ip_permission.ip_protocol,
port: ip_permission.to_port,
instance_id: instance_id
}
set_data(report)
alerts.push fail(result)
end
end
end
end
end
end
end
end
end
end
end
alerts
end
end
end
end
【図１】
0006559694.tif 000002
【図２】
0006559694.tif 000003
【図３】
0006559694.tif 000004
【図４】
0006559694.tif 000005
【図５】
0006559694.tif 000006
【図６】
0006559694.tif 000007
【図７】
0006559694.tif 000008