APIを保護するための深掘り:WAFとAPI Gatewayの統合

January 30, 2024

Ecosystem

現代のデジタル時代において、APIは私たちの日常生活に欠かせない存在となっています。APIは、異なるアプリケーションやサービス間でデータにアクセスし、交換することを可能にします。しかし、公開されるAPIエンドポイントの数が増えるにつれて、サイバー攻撃やデータ漏洩のリスクも増大しています。そのため、APIを悪意のある攻撃から保護するために、堅牢なセキュリティ対策を実施することが重要です。

WAFとAPI Gatewayを統合してAPIを保護するメリット

Webアプリケーションファイアウォール(WAF)とAPI Gatewayは、APIを攻撃から保護するための最も効果的な技術の2つです。WAFは、インターネットとAPIサーバーの間に位置し、受信リクエストを分析して悪意のあるトラフィックをブロックするセキュリティソリューションです。一方、API Gatewayは、APIサーバーとクライアントの間に位置するミドルウェア層で、アクセス制御、トラフィックルーティング、レート制限を管理します。

Apache APISIXは、人気のあるオープンソースのAPIゲートウェイで、強力なセキュリティプラグインを提供しています。しかし、CVE(Common Vulnerabilities and Exposures)やゼロデイエクスプロイトのような高度な攻撃に対しては、これらのプラグインだけに依存するとAPIが脆弱になる可能性があります。APISIXとプロフェッショナルなWAFを統合することで、多層防御戦略を実現し、現代の脅威に対する包括的な保護を確保できます。

APISIXのセキュリティ機能の理解

  1. 認証と認可: APISIXは、JWTbasic authkey auth、およびOpenID Connectプロバイダーとの統合をサポートし、アクセス制御を強化します。

  2. レート制限: limit-connlimit-reqlimit-countなどのプラグインを使用して、悪意のあるトラフィックスパイクやDoS攻撃を防ぎます。

  3. IP制限とユーザーエージェントフィルタリング: IPアドレスやユーザーエージェントに基づいて、受信リクエストを細かく制御します。

  4. CSRF保護: クロスサイトリクエストフォージェリ(CSRF)攻撃を防ぎます。

API Gatewayの限界

  1. シグネチャベースの検出: APISIXのプラグインは主に既知の攻撃シグネチャに依存しており、定義されたパターンがないゼロデイエクスプロイトに対しては効果がありません。

  2. ルール更新の不足: セキュリティルールは常に変化しており、専門のセキュリティエキスパートや企業によるメンテナンスが必要です。

  3. 範囲の限界: APISIXはゲートウェイ層を保護しますが、WAFはアプリケーション層全体を保護します。

WAFとAPI Gateway統合のメリット

  1. プロアクティブな脅威検出: 高度なWAFは機械学習や行動分析を活用して、脆弱性に関する事前知識がなくても異常なトラフィックを検出します。

  2. リアルタイムのルール更新: クラウドベースのWAFは、新たな脅威に対応するためにルールを迅速に更新し、暴露時間を最小限に抑えます。

  3. 深いアプリケーション保護: WAFはアプリケーション層で悪意のあるトラフィックをフィルタリングおよびブロックし、APIゲートウェイをバイパスする攻撃から保護します。

  4. コンプライアンスと規制遵守: 特定の業界では、データセキュリティ規制に準拠するためにWAFの使用が義務付けられています。

統合プロセスの詳細

WAFとAPI Gatewayを統合するには、適切なツールを選択する必要があります。Apache APISIXは、APIを管理するためのスケーラブルで柔軟なプラットフォームを提供する人気のあるAPI Gatewayソリューションです。Chaitin SafeLineCorazaは、高度なセキュリティ機能とカスタマイズ可能なルールセットを提供するWAFソリューションです。

APISIXとChaitin SafeLine

Chaitin SafeLine WAFは、APISIX 3.5以降に組み込まれたプラグインです。chaitin-wafプラグインを有効にすると、トラフィックはChaitin WAFサービスに転送され、さまざまなWebアプリケーション攻撃を検出して防止し、アプリケーションとユーザーデータのセキュリティを保護します。

WAF_APISIX_1

Apache APISIXとSafeLineがインストールされていると仮定すると、以下のコマンドラインで両者を統合できます:

curl http://127.0.0.1:9180/apisix/admin/plugin_metadata/chaitin-waf -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
  "nodes":[
     {
       "host": "192.168.99.11",
       "port": 8000
     }
  ]
}'

192.168.99.11はSafeLineサービスのIPです。次に、APISIXでルートを作成します:

curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "uri": "/*",
   "plugins": {
       "chaitin-waf": {}
    },
   "upstream": {
       "type": "roundrobin",
       "nodes": {
           "192.168.99.12:80": 1
       }
   }
}'

192.168.99.12はアップストリームサービスのIPです。統合が完了しました。

次に、SQLインジェクションをシミュレートして効果を確認します:

curl http://127.0.0.1:9080 -d 'a=1 and 1=1'

HTTP 403エラーが返され、エラーメッセージからChaitin SafeLineが攻撃を防いだことがわかります。

{"code":403,"success":false,"message":"blocked by Chaitin SafeLine Web Application Firewall","event_id":"18e0f220f7a94127acb21ad3c1b4ac47"}

APISIXとCoraza-proxy-wasm

APISIXはWebAssembly(Wasm)を使用してプラグインを開発することをサポートしており、CorazaもWasmプラグインを提供しています。そのため、CorazaとAPISIXを統合するコストは比較的低くなります。

Wasmはクロスプラットフォームで利用できるため、APISIXとCorazaは追加の大規模な変更や適応なしに動作します。これにより、大規模なコード変更や適応が不要になります。

CorazaもApache APISIXの組み込みプラグインであり、conf/config-default.yamlファイルを変更して有効にできます:

wasm:
  plugins:
    - name: coraza-filter
      priority: 7999
      file: /home/ubuntu/coraza-proxy-wasm/build/main.wasm

次に、Corazaのルールを使用してAPISIXでルートを作成します:

curl -i http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{
  "uri": "/anything",
  "plugins": {
    "coraza-filter": {
      "conf": {
        "directives_map": {
          "default": [
            "SecDebugLogLevel 9",
            "SecRuleEngine On",
            "SecRule REQUEST_URI \"@beginsWith /anything\" \"id:101,phase:1,t:lowercase,deny\""
          ]
        },
        "default_directives": "default"
      }
    }
  },
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "httpbin.org:80": 1
    }
  }
}'

次に、リクエストを送信して効果を確認します:

curl http://localhost:9080/anything -v

logs/error.logでログを確認します:

2023/08/31 09:20:39 [info] 126240#126240: *23933 Transaction interrupted tx_id="JVhHVfDuGjVbfgvDjik" context_id=2 action="deny" phase="http_request_headers", client: 127.0.0.1, server: _, request: "GET /anything HTTP/1.1", host: "localhost:9080"
2023/08/31 09:20:39 [debug] 126240#126240: *23933 Interruption already handled, sending downstream the local response tx_id="JVhHVfDuGjVbfgvDjik" context_id=2 interruption_handled_phase="http_request_headers"

WAFとAPI Gateway統合を使用したAPIセキュリティのベストプラクティス

APIのセキュリティを確保するためには、以下のベストプラクティスに従う必要があります:

  1. 複数のセキュリティ制御層を含む多層防御戦略を実施する。
  2. SSL/TLS暗号化を使用して、転送中のデータを保護する。
  3. WAFのルールセットを定期的に更新し、最新の脅威に対応する。
  4. APIトラフィックとログを監視し、セキュリティインシデントを迅速に検出して対応する。

APIセキュリティと保護の将来のトレンドと進化

使用されるAPIの数が増えるにつれて、それらを保護するための高度なセキュリティ対策の必要性が高まります。APIセキュリティと保護の将来のトレンドと進化には、以下のようなものがあります:

  1. 脅威を自動的に検出して対応するAI駆動のセキュリティソリューション。
  2. ブロックチェーンベースの認証とアクセス制御メカニズム。
  3. より柔軟でスケーラブルなマイクロサービスベースのAPIアーキテクチャ。

まとめ

結論として、WAFとAPI Gatewayの統合はAPIセキュリティの重要な要素です。ベストプラクティスに従い、適切なツールを展開することで、幅広い攻撃からAPIを保護する堅牢なセキュリティ層を作成できます。適切なアプローチを取ることで、APIとそれらが交換するデータの可用性、完全性、機密性を確保できます。

Tags: