APIインベントリの探索
¶
API Discoveryモジュールがエンドポイント(APIインベントリ)のカタログを構築すると、Wallarm ConsoleのAPI Discoveryセクションで探索できます。本記事では、検出されたデータの見方を説明します。
エンドポイント¶
検出済みのAPIインベントリは、USまたはEU CloudのAPI Discoveryセクションで探索します。
API Discoveryセクションを開くたびに、直近1週間に検出されたすべてのエンドポイントとその変更が表示されます。Changes sinceフィルタで、Last week
を他の期間に変更できます。
デフォルトでは、エンドポイントはホスト/エンドポイント名でソートされ(ホストごとにグループ化)されます。HitsまたはRiskでソートするとグループ化は解除されます。デフォルトに戻すには、hosts/endpoint列をもう一度クリックします。
外部と内部¶
外部ネットワークから到達可能なエンドポイントは主な攻撃経路です。したがって、外部から利用可能なものを把握し、まずはこれらのエンドポイントに注意を向けることが重要です。
Wallarmは検出したAPIを外部と内部に自動で分類します。以下のいずれかに該当する場合、ホスト(およびその配下のすべてのエンドポイント)は内部と見なされます:
-
プライベートIPまたはローカルIPアドレス
-
汎用トップレベルドメイン(例: localhost、dashboardなど)
それ以外の場合、ホストは外部と見なされます。
デフォルトでは、すべてのAPIホスト(外部・内部)が一覧表示されます。作成されたAPIインベントリでは、内部APIと外部APIを個別に表示できます。これには、ExternalまたはInternalをクリックします。
フィルタリング¶
多様なAPIエンドポイント用フィルタの中から、分析目的に応じて選択できます。例えば次のような条件があります:
-
攻撃を受けたエンドポイントのみを対象にし、Hitsの数でソートする。
-
機微データを処理し、かつ高いリスクレベルのアクティブな脆弱性を持つ、最も脆弱なエンドポイントを特定する。高リスクレベルの脆弱性を悪用されると、そのエンドポイントが処理・保存する機微データの窃取を含む多くの悪意ある操作を攻撃者に許してしまいます。
-
ローグエンドポイント(shadow、orphan、zombie)を特定する。
-
直近1週間に変更された、または新たに検出され、かつPIIデータを処理しているエンドポイントを見つける。このような照会は、APIの重要な変更を常に把握するのに役立ちます。
-
PUTまたはPOST呼び出しでサーバーへデータをアップロードするために使用されているエンドポイントを見つける。この種のエンドポイントは攻撃対象になりやすいため、十分に保護されている必要があります。このような照会により、該当エンドポイントがチームで把握され、攻撃から適切に保護されていることを確認できます。
-
顧客のクレジットカードデータを処理しているエンドポイントを見つける。この照会によって、機微データが保護されたエンドポイントでのみ処理されていることを確認できます。
-
非推奨のAPIバージョンのエンドポイント(例:
/v1
で検索)を見つけ、クライアントに使用されていないことを確認する。
フィルタ済みデータは、追加分析のためOpenAPI v3としてエクスポートできます。
エンドポイントの詳細¶
エンドポイントをクリックすると、リクエスト統計、リクエスト/レスポンスのヘッダーおよびパラメータ(関連するデータ型を含む)などの詳細も確認できます:
各リクエスト/レスポンスパラメータの情報には次が含まれます:
-
パラメータ名と、このパラメータが属するリクエスト/レスポンスの位置
-
パラメータの変更情報(新規、未使用)
-
このパラメータで送信される機微データの有無と種類。例:
- IPやMACアドレスなどの技術的データ
- シークレットキーやパスワードなどのログイン認証情報
- クレジットカード番号などの金融データ
- 医療免許番号などの医療データ
- 氏名、パスポート番号、SSNなどの個人を特定できる情報(PII)
-
このパラメータで送信されるデータの型/形式
-
パラメータ情報が最後に更新された日時
レスポンスパラメータの利用可否
レスポンスパラメータは、ノード4.10.1以上を使用している場合にのみ利用できます。
形式とデータ型¶
Type列には、トラフィック解析で特定されたデータの形式、または特定できない場合は一般的なデータ型が表示されます。
Wallarmは、Int32
、Int64
、Float
、Double
、Datetime
、IPv4
/IPv6
など、さまざまなデータ形式の検出を試みます。どの既知のデータ形式にも合致しない値は、Integer
、Number
、String
、Boolean
のような一般的なデータ型として分類されます。
この情報により、各パラメータに期待された形式の値が渡されているかを確認できます。不整合がある場合、攻撃またはAPIのスキャンが原因である可能性があります。例:
-
IP
のフィールドにString
の値が渡されている -
Int32
以下であるべきフィールドにDouble
の値が渡されている
可変性¶
URLには、ユーザーIDのような多様な要素が含まれることがあります。例:
-
/api/articles/author/author-a-0001
-
/api/articles/author/author-a-1401
-
/api/articles/author/author-b-1401
API Discoveryモジュールは、このような要素をエンドポイントパス内で{parameter_X}形式に正規化します。したがって上記の例は3つのエンドポイントではなく、次の1つに統合されます:
/api/articles/author/{parameter_1}
エンドポイントをクリックしてパラメータを展開し、可変パラメータに自動検出された型を確認します。
アルゴリズムは新しいトラフィックを解析します。統合されるべきアドレスが表示されているのにまだ統合されていない場合は、少し時間を置いてください。十分なデータが集まると、システムは新たに見つかったパターンと適切な件数の一致アドレスに基づいてエンドポイントを統合します。
エンドポイントのアクティビティ¶
攻撃¶
過去7日間のAPIエンドポイントへの攻撃件数はHits列に表示されます。フィルタでOthers → Attacked endpointsを選択すると、攻撃を受けたエンドポイントのみを表示できます。
特定のエンドポイントへの攻撃を確認するには、Hits列の数値をクリックします:
Attacksセクションが、フィルタ適用済みの状態で表示されます:
エンドポイントのURLをクリップボードにコピーして、イベントの検索に使用することもできます。これを行うには、該当エンドポイントのメニューでCopy URLを選択します。
すべてのアクティビティ¶
そのエンドポイントに関連するすべてのリクエスト数はRequests列に表示されます。この数値をクリックすると、直近1週間のそれらのリクエストを含むユーザーセッションの一覧が、API Sessionsセクションで開きます。
各セッション内では、最初は該当エンドポイントへのリクエストのみが表示されます。コンテキストを把握するために全リクエストを見たい場合は、セッション内でエンドポイントによるフィルタを外してください。
セッションアクティビティの構造化ビューは、悪意のある活動と正当な活動の中で当該エンドポイントがどの位置付けにあるか、機微なビジネスフローとの関係、および必要な保護策の理解に役立ちます。
APIエンドポイント向けルールの作成¶
APIインベントリ内の任意のエンドポイントから、すばやく新しいカスタムルールを作成できます:
-
該当エンドポイントのメニューでCreate ruleを選択します。ルール作成ウィンドウが表示され、エンドポイントアドレスは自動で解析されて入力されます。
-
ルール作成ウィンドウでルール情報を指定し、Createをクリックします。
APIインベントリデータのエクスポート¶
API DiscoveryのUIでは、現在のフィルタ済みエンドポイント一覧をOpenAPI v3の仕様またはCSVファイルとしてエクスポートできます。
エクスポートするには、Wallarm Console → API DiscoveryでOAS/CSVオプションを使用します。次の点に留意してください:
-
OASでは、フィルタ済みエンドポイントを含む
swagger.json
が返されます。個別のエンドポイントメニューのDownload OASボタンも使用できますダウンロードした仕様をPostmanのような他アプリケーションで利用することで、エンドポイントの脆弱性検査や各種テストを実施できます。加えて、機微データの処理や非公開パラメータの有無など、エンドポイントの機能を詳細に検証できます。
-
CSVでは、フィルタ済みエンドポイントのデータがテキストのカンマ区切り形式で返され、他のプログラムへのエクスポートが容易です。
ダウンロードしたSwaggerファイルのAPIホスト情報
検出されたAPIインベントリに複数のAPIホストが含まれている場合、すべてのAPIホストのエンドポイントがダウンロードファイルに含まれます。現在、APIホスト情報はファイルに含まれていません。