🤖

API Shield の API Discovery を試す

2024/11/04に公開

前回の記事でREST APIのエンドポイントを保護するSchema Validationが無償化されたことを受け、その設定方法をまとめました。
https://zenn.dev/kameoncloud/articles/cdc891ed63f4b7
Cloudflareの調査によると、企業に存在いているAPIの3割強はアジャイル開発により細かいデプロイが繰り返された結果セキュリティアセスメントを受けていないか、ウェブ管理者が把握できていないことがわかっています。これらのAPIの方がSchema Validationで保護されるAPIより本質的に組織に危険をもたらす可能性がはるかに高いことが想定されます。

特定ドメインに対して認識されていないAPIコールを発見する機能がAPI Discoveryです。

さっそくやってみる

この機能はEnterpriseプラン限定です。Cloudflare側で機能をオンにした時点で動作が開始されます。

1. APIコールの作成

前回同様http://httpbin.org/ に対してDNSを設定しCloudflare経由で通信を行えるようにします。
https://zenn.dev/kameoncloud/articles/cdc891ed63f4b7
以下のgetコマンドを実行しResponse200が戻ってくれば設定成功です。

2. cronの設定

API Discovery は機械学習を活用しAPIの通信パターンを特定します。このため、ある程度の通信量が特定に必要となります。このため上記で設定したAPIコールをcronで設定します。Amazon Linux 2023 の場合cronがインストールされていないため以下のコマンドになります。

インストール
sudo yum install cronie
crontab -e
こちらを記載して保存
* * * * * /usr/bin/curl -X GET "https://a.harunobukameda.com/get" -H "accept: application/json" -H "test: your_value" > /dev/null 2>&1

-H "test: your_value" については後で解説します。

cronの起動
sudo systemctl start crond
sudo systemctl enable crond

これで1分単位でgetが実行されます。

3. Session Identifier の設定(オプション)

APIコールがある特定の通信パターンを持っていることがわかる場合、その通信パターンを設定しておくことでAPIコールを特定できやすくする機能です。設定しなくてもAPIコールは特定でいますが、設定しておくとその通信パターンに合致する通信数をカウントできます。
Settingsタブをクリックします。

Manage Identifiersをクリックします。

APIコールの際にクライアントからAPIに提出されるであろう通信パターンを設定します。先ほどのcronで設定した例ですと、-H "test: your_value" がそれにあたります。以下のように設定してSaveをクリックします。

4. 最大24時間この状態を維持

不明なAPIの特定には最大24時間を要すため、この状態で24時間経過させます。

Discoveryタブをクリックします。
以下のように不明なAPIコールが特定されています。

Endpoint Managementのタブではpostのみが設定されていますのでgetは定義されていないAPIコールとして認識されています。

Saveのリンクをクリックすると以下のように自動でgetEndpoint Managementのタブで認識されるようになります。

以下のようにgetAPIコールの分析が開始されます。

Discussion