特許第6559694号(P6559694)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ パロ・アルト・ネットワークス・インコーポレーテッドの特許一覧

<>
  • 特許6559694-自動SDK受容 図000002
  • 特許6559694-自動SDK受容 図000003
  • 特許6559694-自動SDK受容 図000004
  • 特許6559694-自動SDK受容 図000005
  • 特許6559694-自動SDK受容 図000006
  • 特許6559694-自動SDK受容 図000007
  • 特許6559694-自動SDK受容 図000008
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6559694
(24)【登録日】2019年7月26日
(45)【発行日】2019年8月14日
(54)【発明の名称】自動SDK受容
(51)【国際特許分類】
   G06F 21/57 20130101AFI20190805BHJP
   G06F 8/70 20180101ALI20190805BHJP
【FI】
   G06F21/57 370
   G06F8/70
【請求項の数】19
【全頁数】23
(21)【出願番号】特願2016-554318(P2016-554318)
(86)(22)【出願日】2014年11月13日
(65)【公表番号】特表2017-503288(P2017-503288A)
(43)【公表日】2017年1月26日
(86)【国際出願番号】US2014065544
(87)【国際公開番号】WO2015073719
(87)【国際公開日】20150521
【審査請求日】2017年11月13日
(31)【優先権主張番号】61/903,864
(32)【優先日】2013年11月13日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】513293740
【氏名又は名称】パロ・アルト・ネットワークス・インコーポレーテッド
【氏名又は名称原語表記】PALO ALTO NETWORKS INCORPORATED
(74)【代理人】
【識別番号】110000028
【氏名又は名称】特許業務法人明成国際特許事務所
(72)【発明者】
【氏名】クレア メディロス
(72)【発明者】
【氏名】ジャスティン ランディ
【審査官】 金沢 史明
(56)【参考文献】
【文献】 特開2006−293417(JP,A)
【文献】 特開2006−236336(JP,A)
【文献】 特開2012−234273(JP,A)
【文献】 特開2012−243061(JP,A)
【文献】 米国特許出願公開第2008/0276102(US,A1)
【文献】 米国特許出願公開第2005/0251863(US,A1)
【文献】 米国特許出願公開第2012/0185913(US,A1)
【文献】 米国特許第06055637(US,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/57
G06F 8/70
G06F 9/44
(57)【特許請求の範囲】
【請求項1】
顧客の利用法を取得するためにソフトウェア開発キットインターフェースを解析するためのコンピュータによって実行される方法であって、
実行可能な命令で構成された1つ以上のコンピュータシステムの制御の下で、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリを、セキュリティプラットフォームにロードすることと、
リモートエンドポイントと接続する際に用いられるように構成されたアクセス証明書を含む、前記リモートアプリケーションプログラミングインターフェースの最上位のオブジェクトを生成することと、
前記リモートアプリケーションプログラミングインターフェースに対して最初の関数呼び出しを実行して、前記最上位のオブジェクトから前記最上位のオブジェクトのためのメソッドの参照名を読み出すことと、読み出されたメソッドの参照名は特定の関数の将来の呼び出しを特定するために有用な名称であり、
前記リモートアプリケーションプログラミングインターフェースに対して続く関数呼び出しを再帰的に実行することと、
先に読み出された参照名を用いて前記実行された関数呼び出しの各メソッドからデータを再帰的に読み出すことと、
読み出されたデータをデータストア内に記憶することと、を含む、方法。
【請求項2】
前記読み出すことが、所定のオブジェクトが読み出されるまで実行される、請求項1に記載の方法。
【請求項3】
前記最上位のオブジェクトに基づいて最後のオブジェクトを検出することと、
前記検出された最後のオブジェクトに少なくとも部分的に基づいて、前記再帰的読み出しを完了することと、をさらに含む、請求項1に記載の方法。
【請求項4】
前記リモートアプリケーションプログラミングインターフェースがクラウドインフラストラクチャサービスのためのアプリケーションプログラミングインターフェースである、請求項1に記載の方法。
【請求項5】
1つ以上のサービスを実装するように構成された少なくとも1つのコンピューティングデバイスを含むシステムであって、前記1つ以上のサービスが、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリをロードすることと、
最上位のオブジェクトを生成することであって、前記最上位のオブジェクトが、前記リモートアプリケーションプログラミングインターフェースの顧客と関連付けられたアクセスキーを含み、前記アクセスキーが、リモートエンドポイントとの通信チャネルを認証する際に用いられるように構成される、生成することと、
少なくとも1つの呼び出しを実行して、前記最上位のオブジェクトから前記最上位のオブジェクトのためのメソッドの名前を読み出すことと、読み出されたメソッドの参照名は特定の関数の将来の呼び出しを特定するために有用な名称であり、
前記メソッドの前記読み出された名前をフィルタ処理することであって、前記呼び出しが安全でない可能性があるとき、前記メソッドの前記読み出された名前を取り除くことを含む、フィルタ処理することと、
先に読み出された参照名を用いて前記読み出されたメソッドの各メソッドを実行することであって、各メソッドに関するデータの集合を戻す、各々のメソッドを実行することと、
前記データの集合をデータストア内に記憶することと、を行うように構成される、前記システム。
【請求項6】
安全でない呼び出しが、実行された場合、前記呼び出しに関連付けられたオブジェクトに関するデータを変更するか、改変するか、修正するか、または削除するであろう呼び出しを含み得る、請求項5に記載の前記システム。
【請求項7】
メソッドが順番に実行され、前記順番が、第1のメソッドを実行することと、前記実行された第1のメソッドに関連付けられたデータを読み出すことと、第2のメソッドを実行することと、を含む、請求項5に記載の前記システム。
【請求項8】
前記データの集合が、前記アプリケーションプログラミングインターフェースのリモートエンドポイント上に記憶されたデータのツリー表現を含む、請求項5に記載の前記システム。
【請求項9】
前記1つ以上のサービスが、前記最上位のオブジェクト及び少なくとも1つの追加のオブジェクトに関するメタデータを読み出すようにさらに構成される、請求項5に記載の前記システム。
【請求項10】
前記リモートアプリケーションプログラミングインターフェースの前記顧客に関連付けられた前記アクセスキーが、一時的なセキュリティ証明書を含み、前記一時的なセキュリティ証明書が、アクセスキー識別子、秘密アクセスキー、及びセッショントークンを含む、請求項5に記載の前記システム。
【請求項11】
前記リモートアプリケーションプログラミングインターフェースが、クラウドインフラストラクチャサービスのためのアプリケーションプログラミングインターフェースである、請求項5に記載の前記システム。
【請求項12】
前記1つ以上のサービスが、前記データの集合に少なくとも部分的に基づいてセキュリティリスク評価を実施するようにさらに構成される、請求項5に記載の前記システム。
【請求項13】
実行可能な命令が上に記憶される非一過性コンピュータ可読記憶媒体であって、コンピュータシステムの1つ以上のプロセッサによって実行されたとき、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリをロードすることと、
第1のオブジェクトを作成することであって、前記第1のオブジェクトが、前記リモートアプリケーションプログラミングインターフェースの顧客と関連付けられた認証証明書を含み、前記認証証明書が、前記リモートアプリケーションプログラミングインターフェースとの通信チャネルを認証する際に用いられるように構成される、作成することと、
呼び出しを実行して、前記第1のオブジェクトから前記第1のオブジェクトのためのメソッドの名前を読み出すことと、
前記読み出されたメソッドの各メソッドを実行することであって、各メソッドに関するデータの集合を戻す、各メソッドを実行することと、読み出されたメソッドの参照名は特定の関数の将来の呼び出しを特定するために有用な名称であり、
メソッドを実行することに応答して、複数のオブジェクトを受信することと、
前記複数のオブジェクトの各々に関連付けられたデータを読み出すことであって、先に読み出された参照名を用いて前記複数のオブジェクトにおける各メソッドのために続く呼び出しを再帰的に実行することを含む、前記複数のオブジェクトの各々に関連付けられた前記データを読み出すことと、
前記読み出されたデータを記憶することと、を前記コンピュータシステムに少なくとも行わせる、前記非一過性コンピュータ可読記憶媒体。
【請求項14】
前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、リアルタイムまたは準リアルタイムで前記リモートアプリケーションプログラミングインターフェースを連続的に監視させる命令をさらに含む、請求項13に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項15】
前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、各オブジェクトに対するセキュリティ及び/または構成の設定置換をスキャンさせる命令をさらに含む、請求項13に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項16】
前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、前記第1のオブジェクト及び前記複数のオブジェクトに関連付けられた前記読み出されたデータを表示するためのグラフィカルユーザインタフェース出力を提供させる命令をさらに含む、請求項13に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項17】
前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、前記読み出されたデータに署名を適用させる命令をさらに含む、請求項13に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項18】
前記コンピュータシステムに、前記読み出されたデータに前記署名を適用させる前記命令が、前記コンピュータシステムに、前記署名の結果に少なくとも部分的に基づいて警報を提供させる命令をさらに含む、請求項17に記載の前記非一過性コンピュータ可読記憶媒体。
【請求項19】
前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、セキュリティ規則分析に従って前記読み出されたデータを解釈させる命令をさらに含む、請求項13に記載の前記非一過性コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して、コンピュータシステムのセキュリティ評価の一部としてシステム開発キットインターフェースを自動的に処理することに関する。
【0002】
優先権及び関連出願の相互参照
本出願は、「AUTOMATED SDK INGESTION」と題された、2013年11月13日に出願された米国仮特許出願第61/903,864号からの優先権を主張し、かつその非仮出願である。上記出願の全開示は、あらゆる目的のために、本書において完全に記載されているのと同様に、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【0003】
会社、個人、顧客は、1つ以上のウェブベースのサービスを彼らのユーザに提供するために、コンピューティングデバイスのネットワークをしばしば利用し、それらのネットワークは、複数の地理的境界を越えて多くの場合拡張する。多くの状況では、顧客は、インフラストラクチャコストを下げて、ウェブサービスを用いて、顧客の製品、ユーティリティ、及び他の利点を活用するために、他の会社によって管理されたハードウェア及びソフトウェアアプリケーションを用いてリモートネットワークを構成して、動作し得る。
【0004】
ウェブサービス及びリモートコンピューティングアプリケーションが近年全盛で、リソースプロバイダは、サービスされる無数のセキュリティオプション及び構成で、様々なアプリケーション及びウェブサービスにアクセスする能力を、顧客に可能にしている。セキュリティは、コンピュータシステムにおいて重要であるが、多くの場合、コンピュータシステムの範囲と構成は、予め完全に知られているわけではなく、頻繁に変更していて、アップグレードされている。顧客コンピュータシステムのいくつかまたはすべての部分がクラウドベースのリソースの使用を伴うので、コンピュータシステムのセキュリティ及び使用量テストのプロセスは複雑になっている。ソフトウェアセキュリティパッチが既知の脆弱性及び他のリスクを解決しようとする一方、
【図面の簡単な説明】
【0005】
本開示に従う様々な実施形態は、図面を参照して以下に説明される。
【0006】
図1】少なくとも1つの実施形態に従う環境の例示的な例である。
図2】様々な実施形態が実装され得る環境の例示的な例である。
図3】少なくとも1つの実施形態に従うブロック図の例示的な例である。
図4】少なくとも1つの実施形態に従ってオブジェクト/方法ツリーの走査からデータ報告を生成するためのプロセスの例示的な例である。
図5】少なくとも1つの実施形態に従う、ソフトウェア開発キットオブジェクトの走査方法のためのプロセスの例示的な例である。
図6】少なくとも1つの実施形態に従ってリモートエンドポイントAPIデータをスキャンするためのプロセスの例示的な例である。
図7】少なくとも1つの実施形態に従う環境の例示的な例である。
【0007】
付属書類Aは、本開示に従うプログラミングコードスクレイプ結果の例示の抜粋であり、その内容は、米国著作権法の下で保護されている。
【0008】
付属書類Bは、本開示に従う、スクレイプされた結果を後処理するためのプログラミングコードの例示の抜粋であり、その内容は、米国著作権法の下で保護されている。
【発明を実施するための形態】
【0009】
以下の説明では、様々な実施形態が説明される。説明の目的で、特定の構成及び詳細が、実施形態の完全な理解を提供するために述べられる。しかしながら、実施形態が特定の詳細なしで実施され得ることも、当業者にとって明らかになるだろう。さらに、周知の特徴は、説明されている実施形態を不明瞭にしないために、省略または単純化される場合がある。
【0010】
本明細書に説明及び示唆された技法は、データをスクレイプして、ウェブサービスの制御システム内で可能な構成エラーまたは異常を判定するために、顧客アプリケーションを走査するように構成された、方法、システム、及びコンピュータ可読媒体を含む。本開示に従うセキュリティプラットフォーム及び構成部品は、すべてのウェブサービスに関するウェブサービスのアプリケーションプログラミングインターフェース(「API」)から情報及びデータを抽出するために、ウェブサービスソフトウェア開発キット(「SDK」)を活用するように構成される。ウェブサービスは、例えば、コンピューティングサービス、ネットワークサービス、コンテンツ配信サービス、データベースサービス、配備サービス、管理サービス、アプリケーションサービス等を含み得る。
【0011】
本開示に従う例示の実施形態は、SDKインターフェースを走査するか「ウォーク」して、SDKインターフェースによって提供されたAPIに情報の要求を適用することによって顧客の利用法、構成、及びセキュリティ情報を取得するように構成されるスキャンクライアントを含む。顧客は、ダッシュボード等のユーザインターフェース(「UI」)を提供され得、それは、顧客または顧客のオペレータが、グローバルに、顧客クラウドインフラストラクチャのリスク分析を実施することを可能にする。クラウドインフラストラクチャの例としては、Amazon.comのクラウドインフラストラクチャ、Amazon Web Services(登録商標)(「AWS」)、Google(登録商標)App Engine、DigitalOcean(登録商標)等の構造、または、サービスとしてのソフトウェアプロバイダ、サービスとしてのプラットフォームプロバイダ、サービスとしてのインフラストラクチャプロバイダ等の他のコンピューティングリソースサービスプロバイダのインフラストラクチャが挙げられる。本明細書に提示された多くの例示の実施形態では、AWS(登録商標)サービスは、例示の種類の利用可能なクラウドインフラストラクチャウェブサービスとして参照される。しかしながら、類似の目的に叶っている代替のコンピューティングリソースサービスプロバイダまたはクラウドプロバイダは、当業者にとって明らかとなるように用いられ得る。
【0012】
図1は、様々な実施形態に従って態様を実装するための環境100の例示の実施形態である。理解されるように、インターネット環境100が説明のために用いられるが、必要に応じて、異なる環境が用いられて、様々な実施形態を実装し得る。
【0013】
図1の例示の実施形態としては、少なくとも1つの実施形態に従って、Amazon AWS(登録商標)等の第三者ウェブサービス120に接続された顧客デバイス103の例が挙げられる。ウェブサービス120は、様々なサービスを顧客101に提供し得、顧客デバイス103は、ウェブサービスインターフェースまたは任意の他の種類の顧客インターフェースであり得るAPI等のインターフェースを介してウェブサービス120と通信し得る。顧客101は、様々な地理的位置に位置し得る第三者ウェブサービス120によって提供されたサービスのうちの1つ以上を利用する組織または会社であり得る。
【0014】
例示の実施形態に従う解析エンジン115は、表現状態転送(「REST」)API105を介して等のように、クラウドAPIを介してデータを読み出すように構成され得る。解析エンジンの一次機能の1つは、例示されたオブジェクト113を言語ネイティブSDKから取って、SDKの後のデータを新しいデータ構造に生産することである可能性がある。解析エンジン115は、いくつかの実施形態では、署名エンジン117を介して、まず例示されたオブジェクト113を取って、次いでオブジェクトを調べることで、そのオブジェクトがどの方法を有するのかを判定することによって、このことを行う。署名エンジン117は、次いで、ある特定の種類及び同等基準と一致する方法を検索する。
【0015】
解析エンジン115は、REST API105によって定義される要求122のようなAPI呼び出し等の関数呼び出しを実行するようにさらに構成され、これによって、その解析エンジンは、そのオブジェクトの各方法に対して第三者ウェブサービス120からサービスを要求し得る。API呼び出しは、新しいプロセスを作成及び実行して、ならびに/または積分核サービスと通信するハードウェア関連サービス(例えば、ハードディスクにアクセスする)を含み得る。その呼び出しに応答して、各方法がデータを戻すとき、パーサは、その方法の戻り値(複数可)をそのオブジェクトタイプを求めて調べるように構成される。パーサは、次いで、新たに生産されたオブジェクトをどう処理するべきかについて決定する。例えば、パーサがオブジェクトを受信するとき、パーサは、新しいオブジェクトを解析フォーマットに再帰的に戻して、そのため、オブジェクトツリー全体が最終的に走査されて、スクレイプされて、分析のために新しいデータ構造に入れられる。方法一覧は、認証方法を説明している順次な一覧または非順次な一覧であり得、それは、ユーザを認証するために、もしくは、変数、データ構造、もしくは機能等のオブジェクトのセキュリティ及び/または構成方針を判定するために、問い合わせる。いくつかの例示の実施形態では、方法一覧は、顧客が、または、その顧客に代わって、そのセキュリティプラットフォームが、認証のために用いられる1つ以上のセキュリティプロトコルを指定することを可能にする。
【0016】
上記方法を用いている解析エンジンは、単にAPIプロバイダが公表するもの以上のものを発見することができる。多くの場合、パーサ、他のプログラム、またはオペレータがクラウドプロバイダからAPI関して有している最良の情報は、SDK内のネイティブオブジェクト結合によって提供された情報である。したがって、解析エンジンは、このインターフェースから始めることができ、この方法走査機構を介して所望のデータを抽出するための多くのメタプログラミング技法を用いることができる。このデータは、最終的に脆弱性に関して分析されて、警報と報告を生産する前に、次いで、様々な後処理基準によってフィルタ処理され得る。
【0017】
図2は、例示の実施形態に従って、顧客201と、サービスとしてのソフトウェア(「SaaS」)アプリケーション220と、ウェブサービス215との間の通信チャネルを示している環境の例示的な例である。本明細書に説明されるように、サービスの各々は、1つ以上のウェブサービスインターフェースを含み得、それらは、SaaSアプリケーション220が、顧客201に代わって、適切に構成されたAPI呼び出し214を様々なサービス(ウェブサービス要求を通して顧客の1つ以上のウェブサービスアカウント205と関連付けられ得るウェブサービス215等)に提示することを可能にする。
【0018】
顧客201は、アクセスキー識別子、秘密アクセスキー、セッショントークン等の認証証明書206を、SaaSアプリケーション220に提供し得、SaaSアプリケーション220は、セキュリティプラットフォーム225を含むかそれに操作可能に相互接続され得、ウェブサービスアプリケーションプログラミングインターフェース(「API」)210を介して、ウェブサービス215とも操作可能に相互接続される。
【0019】
セキュリティプラットフォーム225は、スキャンサービス226を含むか、それに操作可能に相互接続され得、それは、サーバ内で実装され得るか、ハードウェア装置(例えば、コンピュータまたはコンピュータシステム)であり得、及び/または、コンピュータまたはコンピュータシステム上で動作しているソフトウェアアプリケーションまたはプロセスとして実装され得る。コンピュータデバイス203上で動作しているクライアントアプリケーション等の1つ以上のデバイスは、ネットワークまたは中間ネットワークを介して、1つ以上のサーバまたはクラスタに操作可能に相互接続され得る。1つ以上のデバイスは、1つ以上のクライアントを介してサーバに接続し得、ここで、それらのクライアントは同一のまたは異なるアプリケーションであり得、そのネットワークまたは中間ネットワークに結合した他の宛先デバイスと同様に通信し得る。
【0020】
セキュリティエンジン227は、一連の署名を動作するように構成され得、ここで、各署名は、単一の種類の構成エラーを特徴付ける。そのような署名は、同時に複数の顧客の構成に対して動作され、脆弱性報告は、顧客ごとに収集され、ソフトウェアスタックのウェブフロントエンドを通して配信されるか、セキュリティプラットフォームに関係付けられ得る。セキュリティプラットフォームの構成部品は、抽出されたデータに対して異なるレベルのセキュリティ分析を実施するために、抽出された情報について一連の署名または指紋を実装し得る。
【0021】
署名は、ウェブサービスAPIスクレイプから生データを受信して、その情報を用いて、セキュリティのレベルに基づいて、顧客のアプリケーションのセキュリティリスクを判定するように構成され得る。例えば、署名エンジンは、スクレイプされたデータを分析して、不合格、合格、警告、エラー等のリスク評価レベルを判定し得る。代替の例示の実施形態では、顧客は、セキュリティプラットフォームを介して用いられ得るカスタム署名を作成し得る。そのようなカスタム署名は、JavaScript(登録商標)署名を実行するように構成されたセキュリティプラットフォームバックエンドの構成部品の用途に、JavaScript(登録商標)で作成され得る。カスタム署名とプラットフォーム署名との両方の種類の署名は、リスク要因を判定するのに必要がある情報を受信するために、スクレイプされた、キャッシュされたデータか、ウェブサービスAPIへの実の、エンドポイントデータのどちらかを用いるように構成され得る。
【0022】
ウェブサービスがユーザを認証する場合、ウェブサービスは、SaaSアプリケーションサーバにPASS応答を出し得、SaaSアプリケーションは、顧客に代わってウェブサービスにアクセスすることを許可される。ウェブサービスがFAIL応答を戻す場合、SaaSアプリケーションはアクセスを許されず、セッションは終端される。ウェブサービスが応答しない場合、SaaSアプリケーションサーバは、ERRORとして、及び顧客201に戻る可能な認証情報変化のための問い合わせとして、それを処理するか、認証の異なる形態を要求する。このパターンは、SaaSアプリケーションサーバが認証されるか、拒絶されるまで、あるいは、セッションが終端されるまで、残りの指定された方法を通して続くだろう。FAILの応答はERRORとは異なる。FAILは、SaaSアプリケーションサーバが、成功裏に認証されるために適用可能な認証データベースに含まれる基準を満たさなかったことを意味する。認証はFAIL応答で終了する。ERRORは、セキュリティサーバが認証問い合わせに応答しなかったことを意味する。
【0023】
スクレイプされたデータ及び実データは、交換可能に用いられ得る。例えば、特定の署名を実施するために必要があるスクレイプされたデータが失われた場合、それは、自動的に実APIエンドポイントを用いて、ウェブサービスから所望のデータを読み出すことになる。例えば、セキュリティプラットフォームは、すべてのネットワークトラフィックを許可しているルーティングパラメータ、構成され、現在まで継続されたバックアップ、作成されたが、参照または使用されていないリソース、サポートするリソース上で有効にされた暗号化、暗号を確保するためだけに制限されたSSL及びTLS暗号集合、有効にされた多要素認証、特権ユーザの数に対する制限、一般的に検出可能な一般的に利用可能なリソース、及びさらに数百の検出を提供し得る。ウェブサービスとその構成の詳細に関する追加のメタデータは、スクレイプされる可能性がある。例えば、用いられている仮想機械のサイズ、使用中のメモリ量、利用可能なメモリ量、起動されているオペレーティングシステム、顧客が構成したユーザ、ユーザーアカウント概要の詳細等に関する、構成的及び/または記述的データに関するメタデータである。
【0024】
スキャンクライアントを用いて、オペレータ(コンピュータ、コンピュータプロセスまたは人、典型的には人)は、サインアップ及び/またはログインして、認証されたセッションを開始するだろう。スキャンクライアントは、次いで、顧客クラウドキーを取得することになり、そこから、オペレータは、警報の購読を管理し、オペレータの詳細(例えば、電子メールアドレス、連絡先等)を管理し、警報履歴を閲覧し、及び/またはリスク報告を閲覧し得る。AWS(登録商標)に関して、スキャンクライアントのUIは、顧客が、サインアップし、ログインし、彼らのAWS(登録商標)キーを提供し、彼らの電子メールアドレスを管理し、警報を購読し、報告及び警報履歴を閲覧することを可能にする。
【0025】
スキャンクライアントのUIは、スキャンクライアントがオペレータから取得する読み取り専用IAMアクセスキーを暗号化するように構成され得る。UIは、いくつかの実施形態に従う署名エンジンと組み合わせて、顧客情報を読み出して/受信して、それを使用して、クラウドAPIを介してグローバルに顧客のクラウドインフラストラクチャのリスク分析を実施するようにさらに構成される。例えば、UIは、オペレータが、AWS(登録商標)に対するクラウドAPIを介して、グローバルにオペレータのAWS(登録商標)インフラストラクチャのリスク分析を実施することを可能にし得る。これは、概して、ちょうどHypertext Transfer Protocol(「HTTP」)スクレイプだけを行うこと(現在、特定されたサービスにパケットを送信することによって用いられ、そのパケット通信に応答して受信された情報または情報の不足に基づいて、分析を実施している)よりも、リソースに関して、高信頼で、費用効果が高い。UIは、リアルタイムで、準リアルタイムで、または任意の供給された期間で、連続的にバックグラウンドで動作しているセキュリティ分析ジョブを表示するように構成され得、結果は、クライアント設定につき、UIにおいてオペレータに提示される。UIは、顧客が、顧客の警報方法を選択して、電子メールを介してまたは別の様式でそれらを受信するための能力を提供する。
【0026】
なお、上述のすべての実施形態が、図1を参照して説明されたサービスを含むというわけではなく、追加のサービスが、本明細書に明示的に説明されたサービスに加えて、または、それらの代替として、提供され得る。
【0027】
図3は、本明細書に提示された例示の実施形態に従ってセキュリティ報告を示すユーザインターフェース300の例示的な例である。セキュリティ報告は、図1に関連して説明及び図解されたコンピュータデバイス103上で動作しているクライアント上等のように、ユーザデバイス上で生成され得る。セキュリティ報告は、第三者ウェブサービスクラウドアーキテクチャで動作している顧客のアプリケーションに基づく、走査及び分析されたセキュリティプラットフォームの結果であり得る。セキュリティ報告は、世界中の異なる地域302、ウェブサービスの異なるサービス304、突き止められた問題の異なる重大度306、及び、セキュリティ分析の結果に基づいて顧客に警報が出されるべきかどうかに関するステータス判定308を提供し得る。
【0028】
本開示の例示の実施形態によると、ウェブサービス304は、例えば、Amazon(登録商標)AppStream、CloudFront、CloudSearch、CloudWatch、Cognito Identity、Cognito Sync、DevPay、DynamoDB、EC2、Elastic MapReduce、Elastic Transcoder、ElastiCache、Glacier、Kinesis、Mechanical Turk、Mobile Analytics、Redshift、Relational Database Service、Route 53、Simple Email Service、SimpleDB、Simple Notification Service、Simple Queue Service、Simple Storage Service(「S3」)、Simple Workflow Service、VPC、Auto Scalingを含み得る。追加の例は、AWS(登録商標)CloudTrail、CloudFormation、Data Pipeline、Direct Connect、Elastic Beanstalk、Identity and Access Management(「IAM」)、Import/Export、OpsWorks、Security Token Service(「STS」)、Storage Gateway、Support、Elastic Load Balancing、及び追加のサービスを含み得る。
【0029】
図4は、本明細書に提示された例示の実形態に従って、方法/オブジェクトツリーを走査するための高レベルプロセスであるプロセス400の例示的な例である。プロセス400は、図2に関連して説明及び図解されるようなSaaSアプリケーションサーバ220、ならびに/またはその任意の好適なシステムもしくは構成部品等の任意の好適なシステムによって実施され得る。図4に戻って、プロセス400に従って、セキュリティプラットフォームのスキャンサービスは、AWS(登録商標)等のウェブサービスに要求を送信して、一時的なセキュリティ証明書が、顧客に代わってリモートAPIにアクセスすることを要求する(402)。認証が発生するとすれば、そのスキャンサービスは、ウェブサービスソフトウェア開発キット(「SDK」)オブジェクトを生成して(404)、生成されたSDKオブジェクトからオブジェクト/方法ツリーを走査する(406)。スキャンサービスは、結果集合をさらに生成して(408)、結果集合を記憶する(410)。最後に、スキャンサービスは、結果に基づいて報告データを生成して(412)、データベース内にその報告を記憶する(414)。
【0030】
図5は、本明細書に提示された例示の実施形態に従って、ソフトウェア開発キットオブジェクトを走査するのに用いられ得るプロセス500の例示的な例である。プロセス500は、図1に関連して説明及び図解されるようなアプリケーションサーバ110、ならびに/またはその任意の好適なシステムもしくは構成部品等の任意の好適なシステムによって実施され得る。図5に戻って、プロセス500に従って、スクレイピングエンジンは、ソフトウェア開発キット(「SDK」)オブジェクトを走査して(502)、そのオブジェクト上で方法の一覧を受信する(504)ように構成され得る。スクレイピングエンジンは、オブジェクトに対して方法の再帰的スクレイプを実施し、これによって、方法がスクレイプされるごとに、受信されたデータは追加のオブジェクトであり得、それが事実である場合、スクレイピングエンジンは、別の方法が存在するかどうかを判定する(506)。追加の方法が見出されるならば、次の方法へのAPI呼び出しが行われ(514)、そのAPI呼び出しから生じているデータは処理される(516)。一旦結果として生じるデータが処理されるならば、スクレイピングエンジンは、データのそのレベルに関連付けられた別のオブジェクトがあるかどうかを判定し、「はい」ならば、その再帰は開始に戻り、「いいえ」ならば、そのプロセスは終了する。
【0031】
追加方法が見出されないならば、スクレイピングエンジンは、スクレイプされた結果を記憶し(508)、スクレイプされたデータに対して署名分析を実施し(510)、スクレイプされたデータの署名分析に基づいて、終了セキュリティ報告を記憶する(512)。
【0032】
図6は、本明細書に提示された例示の実施形態に従って、顧客のソフトウェア開発キットオブジェクトを解析するのに用いられ得るプロセス600の例示的な例である。プロセス600は、図2に関連して説明及び図解されるようなSaaSアプリケーションサーバ220、ならびに/またはその任意の好適なシステムもしくは構成部品等の任意の好適なシステムによって実施され得る。図6に戻って、プロセス600に従って、サーバは、スキャンクライアントにライブラリをロードするように構成され得、スキャンクライアントでは、ライブラリが、リモートアプリケーションプログラミングインターフェースへのインターフェースであり得る(602)。ライブラリが追加された後、セキュリティプラットフォームは、最上位のオブジェクトを作成して(604)、そのオブジェクトに証明書を送り込んで、リモートエンドポイントとの通信チャネルを作成するように構成される(606)。証明書は、アクセスキー識別子及び秘密キーを含むアクセスキー証明書等のように、ウェブアプリケーションサービスに対して行われるAPI呼び出しのためにデジタル署名するように構成されるアクセスキーを含み得る。秘密キー部は、ウェブサービスアカウント顧客、またはウェブサービスアカウントユーザが前もって付与したフェデレーションユーザによって確保されなければならない。セキュリティプラットフォームアプリケーションまたはサーバとウェブサービスとの間の認証のための代替の方法は、例えば、クロスアカウントアクセスまたはクロスオリジンリソース共用等のように、同様に適用され得る。
【0033】
図6に戻って、リモートAPIとの通信接続が証明書を用いて確立された後、サーバは、最上位のオブジェクトを、そのオブジェクトと関連付けられた方法の名前を参照することによって走査し(608)、すべての見出されたオブジェクトのすべての方法の名前を受信する(610)。セキュリティプラットフォーム、またはそれに操作可能に相互接続するサブクラススクレイパーは、APIにおいてデータに潜在的に影響を及ぼすか、データ上に書き込む可能性のある任意の呼び出しを無視するか、削除する等、危険な関数呼び出しのために、参照された方法の名前をフィルタ処理する(612)。セキュリティプラットフォームは、参照された方法のうちのすべてに対してAPI呼び出しをさらに実施して(614)、各々の呼び出された方法の後でデータを受信する(616)。データは、呼び出しと同調して受信され、最上位のオブジェクト内で見出されたすべてのオブジェクトのうちの各方法は、呼び出され、APIのリモートエンドポイント上に記憶されたデータを表すデータのツリーを作成する(618〜620)。セキュリティプラットフォームは、リモートエンドポイントデータベースのローカルコピーをキャッシュし(622)、さらなる処理、署名適用、報告生成のために、記憶されたデータを分析エンジンに提供する(624)。
【0034】
図7は、様々な実施形態に従って、態様を実装するための例示の環境700の態様を図解する。理解されるように、ウェブベースの環境が説明のために用いられるが、必要に応じて、異なる環境が用いられて、様々な実施形態を実装し得る。環境は、ウェブクライアント710等の電子クライアントデバイスを含み、それは、適切なネットワーク774上で要求、メッセージ、もしくは情報を送信及び/または受信し、いくつかの実施形態では、そのデバイスのユーザに情報を戻して伝達するように動作可能な任意の適切なデバイスを含み得る。そのようなクライアントデバイスの例としては、パーソナルコンピュータ、携帯電話、ラップトップコンピュータ、タブレットコンピュータ、埋込式コンピュータシステム、電子ブックリーダー等が挙げられる。この例では、環境が、要求を受信して、それに応答して、コンテンツを供給するためのウェブサーバ776と、少なくとも1つのアプリケーションサーバ777とを含むように、ネットワークはインターネットを含む。いくつかのアプリケーションサーバがあり得ることが理解されるべきである。サーバは、本明細書に用いられる場合、ハードウェアデバイスまたは仮想コンピュータシステム等の様々な方法で実装され得る。いくつかの文脈では、サーバは、コンピュータシステム上で実行されているプログラミングモジュールを参照し得る。その例は、データベース問い合わせを含むか受容して、それらに応答し得るデータサーバ778と通信しているデータベースサーバ780をさらに図解する。
【0035】
本明細書に記載されるブロック図及び流れ図の要素が、ソフトウェア、ハードウェア、ファームウェア、または将来判定される他の類似の実装内において、実装され得ることが理解されるべきである。加えて、本明細書に記載されたブロック図及び流れ図の要素は、ソフトウェア、ハードウェア、またはファームウェアにおいて、任意の様式で、組み合わされるか、分割される可能性がある。ソフトウェアにおいて実装される場合、ソフトウェアは、本明細書に開示された例示の実施形態をサポートし得る任意の言語において書き込まれ得る。ソフトウェアは、ランダムアクセスメモリ(「RAM」)、読み出し専用メモリ(「ROM」)、コンパクトディスク読み出し専用メモリ(「CD−ROM」)等のコンピュータ可読媒体の任意の形態で記憶され得る。動作において、汎用または特定用途向けプロセッサは、当業界でよく理解された様式で、ソフトウェアをロードして、実行する。ブロック図及び流れ図が、より多くのまたはより少ない要素を含み、異なるように配置もしくは配向されるか、または異なるように表現され得ることが理解されるべきである。実装が、ブロック図、流れ図、及び/またはネットワーク図、ならびに、本開示の実施形態の実行を図解しているブロック図及び流れ図の数を指令し得ることが理解されるべきである。
【0036】
前述の例は、他の実施形態、変形、及び修正が当業者にとって明らかとなる本開示のある特定の例示の実施形態を図解する。したがって、本開示は、上述の特定の実施形態に限定されるべきではないが、特許請求の範囲によってむしろ定義される。
【0037】
本開示は特にその例示の実施形態を参照して示され、説明されたが、添付の特許請求の範囲によって包含される本開示の範囲を逸脱することなく、形態及び詳細における様々な変化が行われ得ることが、当業者によって理解されるだろう。
【0038】
本開示の様々な実施形態は、Transmission Control Protocol/Internet Protocol(「TCP/IP」)、Open System Interconnection(「OSI」)モデルの様々な層で動作しているプロトコル、File Transfer Protocol(「FTP」)、Universal Plug and Play(「UpnP」)、Network File System(「NFS」)、Common Internet File System(「CIFS」)、及びApple Talk等の様々な市販のプロトコルのうちのいずれか用いて通信をサポートすることで、当業者によく知られている場合がある少なくとも1つのネットワークを利用する。ネットワークは、例えば、ローカルエリアネットワーク、広域ネットワーク、仮想私設ネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話ネットワーク、赤外線ネットワーク、無線ネットワーク、及びそれらの任意の組み合わせであり得る。
【0039】
ウェブサーバを利用している実施形態では、ウェブサーバは、Hypertext Transfer Protocol(HTTP)サーバ、FTPサーバ、データサーバ、Javaサーバ、及び業務アプリケーションサーバを含む様々なサーバまたは中間階層アプリケーションのうちのいずれかを動作し得る。サーバ(複数可)はまた、Java(登録商標)、C、C#、もしくはC++等の任意のプログラム言語、またはPerl、Python、もしくはTCL等の任意のスクリプト言語、ならびにそれらの組み合わせで書き込まれた1つ以上のスクリプトまたはプログラムとして実装され得る1つ以上のウェブアプリケーションを実行することによって等、ユーザデバイスからの要求に応答して、プログラムまたはスクリプトを実行することができ得る。
【0040】
「A、B、及びCのうちの少なくとも1つ」または「A、B及びCのうちの少なくとも1つ)」の形態の句等の連言的文言は、特に別段に記載されない限り、または文脈によって別段に明確に否定されない限り、項目、用語等が、AまたはBまたはC、または、A及びB及びCの集合の任意の非空部分集合であり得ることを提示するために概して用いられるような文脈と共に、特に理解される。例えば、3つの部分を有する集合の例示的な例において、「A、B、及びCのうちの少なくとも1つ」及び「A、B及びCのうちの少なくとも1つ」の連言的句は、以下の集合のうちのいずれかを参照する:{A}、{B}、{C}、{A、B}、{A、C}、{B、C}、{A、B、C}。よって、そのような連言的文言は、概して、ある特定の実施形態が、Aの少なくとも1つ、Bの少なくとも1つ、Cの少なくとも1つの各々を必要とすることを意味することを意図されない。
【0041】
本明細書に説明されたプロセスの動作は、本明細書に別段に明記しない限り、または文脈によって別段にはっきりと否定されない限り、任意の好適な順番で実施され得る。本明細書に説明されたプロセス(または変形及び/もしくはその組み合わせ)は、実行可能な命令で構成された1つ以上のコンピュータシステムの制御の下で実施され得、ハードウェアまたはその組み合わせによって、1つ以上のプロセッサ上でまとめて実行しているコード(例えば、実行可能な命令、1つ以上のコンピュータプログラムまたは1つ以上のアプリケーション)として実装され得る。コードは、例えば、1つ以上のプロセッサによって実行可能な複数の命令を含むコンピュータプログラムの形態で、コンピュータ可読記憶媒体上に記憶され得る。コンピュータ可読記憶媒体は、非一過性である可能性がある。
【0042】
一切の例、または本明細書に提供された典型的な文言(例えば、「等」)の使用は、本発明の実施形態をよりよく明らかにすることを単に意図され、別段に特許請求の範囲に記載されない限り、本発明の範囲に対して制限を与えない。明細書のどの文言も、本発明の実施に本質的なものとして任意の特許請求の範囲に記載されていない要素を指示しているものとして解釈されるべきではない。
【0043】
さらなる実施形態が、本開示の読後、当業者によって想定され得る。他の実施形態では、上に開示された本発明の組み合わせまたは下位組み合わせが、有利に行われ得る。構成部品の例示の配置は説明のために示され、組み合わせ、追加、再配置等が本発明の代替の実施形態で企図されることが理解されるべきである。したがって、本発明は典型的な実施形態に関して説明されたが、当業者は、多数の修正が可能であることを認識することになる。
【0044】
例えば、本明細書に記載されたプロセスは、ハードウェア構成部品、ソフトウェア構成部品、及び/またはそれらの任意の組み合わせを用いて実装され得る。それに応じて、明細書及び図面は、限定的な意味よりもむしろ例示的な意味で考えられるべきである。しかしながら、様々な修正及び変化が、特許請求の範囲に記載したような本発明のより広い趣旨及び範囲から逸脱することなく行われ得、本発明が、以下の特許請求の範囲内ですべての修正及び同等物を網羅することが意図されることは、明白であろう。
【0045】
本明細書に引用された刊行物、特許出願、及び特許を含むすべての参照は、各参照が、参照によって組み込まれるように個別にかつ特に指示され、本明細書にその全体が記載されるかのように、同程度に参照によって本明細書によって組み込まれる。
適用例1:顧客の利用法を取得するためにソフトウェア開発キットインターフェースを解析するためのコンピュータ実装方法であって、
実行可能な命令で構成された1つ以上のコンピュータシステムの制御の下で、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリを、セキュリティプラットフォームにロードすることと、
リモートエンドポイントと接続するように構成されたアクセス証明書を含む最上位のオブジェクトを生成することと、
関数呼び出しを実行して、前記最上位のオブジェクトのための方法の参照名を読み出すことと、
前記実行された関数呼び出しの各方法からデータを再帰的に読み出すことと、
読み出されたデータをデータストア内に記憶することと、を含む、前記コンピュータ実装方法。
適用例2:前記読み出すことが、所定のオブジェクトが読み出されるまで実行される、適用例1に記載の前記コンピュータ実装方法。
適用例3:前記最上位のオブジェクトに基づいて最後のオブジェクトを検出することと、
前記検出された最後のオブジェクトに少なくとも部分的に基づいて、前記再帰的読み出しを完了することと、をさらに含む、適用例1に記載の前記コンピュータ実装方法。
適用例4:前記リモートアプリケーションプログラミングインターフェースが、Amazon(登録商標)Web Serviceのためのアプリケーションプログラミングインターフェースである、適用例1に記載の前記コンピュータ実装方法。
適用例5:1つ以上のサービスを実装するように構成された少なくとも1つのコンピューティングデバイスを含むシステムであって、前記1つ以上のサービスが、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリをロードすることと、
最上位のオブジェクトを生成することであって、前記最上位のオブジェクトが、前記リモートアプリケーションプログラミングインターフェースの顧客と関連付けられたアクセスキーを含み、前記アクセスキーが、リモートエンドポイントとの通信チャネルを認証するように構成される、生成することと、
少なくとも1つの呼び出しを実行して、前記最上位のオブジェクトのための方法の名前を読み出すことと、
前記方法の前記読み出された名前をフィルタ処理することであって、前記呼び出しが安全でない可能性があるとき、前記方法の前記読み出された名前を取り除くことを含む、フィルタ処理することと、
前記読み出された方法の各方法を実行することであって、各方法に関するデータの集合を戻す、各々の方法を実行することと、
前記データの集合をデータストア内に記憶することと、を行うように構成される、前記システム。
適用例6:安全でない呼び出しが、実行された場合、前記呼び出しに関連付けられたオブジェクトに関するデータを変更するか、改変するか、修正するか、または削除するであろう呼び出しを含み得る、適用例5に記載の前記システム。
適用例7:各方法が順番に実行され、前記順番が、第1の方法を実行することと、前記実行された第1の方法に関連付けられたデータを読み出すことと、第2の方法を実行することと、を含む、適用例5に記載の前記システム。
適用例8:前記データの集合が、前記アプリケーションプログラミングインターフェースのリモートエンドポイント上に記憶されたデータの表現を含む、適用例5に記載の前記システム。
適用例9:前記1つ以上のサービスが、前記最上位のオブジェクト及び少なくとも1つの追加のオブジェクトに関するメタデータを読み出すようにさらに構成される、適用例5に記載の前記システム。
適用例10:前記リモートアプリケーションプログラミングインターフェースの前記顧客に関連付けられた前記アクセスキーが、一時的なセキュリティ証明書を含み、前記一時的なセキュリティ証明書が、アクセスキー識別子、秘密アクセスキー、及びセッショントークンを含む、適用例5に記載の前記システム。
適用例11:前記リモートアプリケーションプログラミングインターフェースが、Amazon(登録商標)Web Servicesサービスのためのアプリケーションプログラミングインターフェースである、適用例5に記載の前記システム。
適用例12:前記1つ以上のサービスが、前記データの集合に少なくとも部分的に基づいてセキュリティリスク評価を実施するようにさらに構成される、適用例5に記載の前記システム。
適用例13:実行可能な命令が上に記憶される非一過性コンピュータ可読記憶媒体であって、コンピュータシステムの1つ以上のプロセッサによって実行されたとき、
リモートアプリケーションプログラミングインターフェースへのインターフェースであるライブラリをロードすることと、
第1のオブジェクトを作成することであって、前記第1のオブジェクトが、前記リモートアプリケーションプログラミングインターフェースの顧客と関連付けられた認証証明書を含み、前記認証証明書が、前記リモートアプリケーションプログラミングインターフェースとの通信チャネルを認証するように構成される、作成することと、
呼び出しを実行して、前記第1のオブジェクトのための方法の名前を読み出すことと、
前記読み出された方法の各方法を実行することであって、各方法に関するデータの集合を戻す、各方法を実行することと、
各方法を実行することに応答して、複数のオブジェクトを受信することと、
前記複数のオブジェクトの各々に関連付けられたデータを読み出すことであって、前記複数のオブジェクトにおける各方法のために呼び出しを再帰的に実行することを含む、前記複数のオブジェクトの各々に関連付けられた前記データを読み出すことと、
前記読み出されたデータを記憶することと、を前記コンピュータシステムに少なくとも行わせる、前記非一過性コンピュータ可読記憶媒体。
適用例14:前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、リアルタイムまたは準リアルタイムで前記リモートアプリケーションプログラミングインターフェースを連続的に監視させる命令をさらに含む、適用例13に記載の前記非一過性コンピュータ可読記憶媒体。
適用例15:前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、各オブジェクトに対するセキュリティ及び/または構成の設定置換をスキャンさせる命令をさらに含む、適用例13に記載の前記非一過性コンピュータ可読記憶媒体。
適用例16:前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、前記第1のオブジェクト及び前記複数のオブジェクトに関連付けられた前記読み出されたデータを表示するためのグラフィカルユーザインタフェース出力を提供させる命令をさらに含む、適用例13に記載の前記非一過性コンピュータ可読記憶媒体。
適用例17:前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、前記読み出されたデータに署名を適用させる命令をさらに含む、適用例13に記載の前記非一過性コンピュータ可読記憶媒体。
適用例18:前記コンピュータシステムに、前記読み出されたデータに前記署名を適用させる前記命令が、前記コンピュータシステムに、前記署名の結果に少なくとも部分的に基づいて警報を提供させる命令をさらに含む、適用例17に記載の前記非一過性コンピュータ可読記憶媒体。
適用例19:前記命令が、前記1つ以上のプロセッサによって実行されたとき、前記コンピュータシステムに、セキュリティ規則分析に従って前記読み出されたデータを解釈させる命令をさらに含む、適用例13に記載の前記非一過性コンピュータ可読記憶媒体。
【0046】
付属書類A
パブリッククラウド環境(複数可)の仮想サーバ配備に関する出力
{
"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
}
]
},
【0047】
付属書類B
スクレイプ結果を後処理し、強さと正当性のためにセキュリティ対策を列挙するための署名。
#エンコーディング:utf−8
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実例を通して反復し、どのsecurity_groupsを各々が用いるのかを記憶する
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
図1
図2
図3
図4
図5
図6
図7