API Shield の API Discovery を試す
前回の記事でREST APIのエンドポイントを保護するSchema Validationが無償化されたことを受け、その設定方法をまとめました。
Cloudflareの調査によると、企業に存在いているAPIの3割強はアジャイル開発により細かいデプロイが繰り返された結果セキュリティアセスメントを受けていないか、ウェブ管理者が把握できていないことがわかっています。これらのAPIの方がSchema Validationで保護されるAPIより本質的に組織に危険をもたらす可能性がはるかに高いことが想定されます。特定ドメインに対して認識されていないAPIコールを発見する機能がAPI Discoveryです。
さっそくやってみる
この機能はEnterpriseプラン限定です。Cloudflare側で機能をオンにした時点で動作が開始されます。
1. APIコールの作成
前回同様http://httpbin.org/ に対してDNSを設定しCloudflare経由で通信を行えるようにします。
以下の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"
については後で解説します。
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
のリンクをクリックすると以下のように自動でget
がEndpoint Management
のタブで認識されるようになります。
以下のようにget
APIコールの分析が開始されます。
Discussion