REST APIについて3回のシリーズで解説しています。本日は最終回をお届けします。第1回2回の記事はリンクをクリックしてください。

これまでの記事(第1回と第2回)では、APIの普及と、それによってAPIが直面するセキュリティ上の課題について説明しました。今日は、REST APIのセキュリティ保護に、Barracuda Web Application Firewall(BWAF)を活用する方法を解説します。BWAFは、Webアプリケーションを保護する業界最先端のテクノロジを使用して、悪意のあるデータ入力を検知します。さまざまなチェック機能を備えていますが、難読化の解除やプロトコルのサニタイズももちろん含まれます。そしてその多くは、AJAXベースのWebアプリケーションにも適用されます。

信頼性の低いユーザによるJSON/XML入力から悪意のあるデータをフィルタリング

プログラミングフレームワークやカスタムソフトウェアの開発者は、従来のWebインターフェースでデータサニタイズを適用しているにもかかわらず、JSONやXMLからの入力のサニタイズを省略することがあります。たとえば、RubyのJSON gemではSQLインジェクションに対する脆弱性が発見されましたし、PerlモジュールのSQL Makerも同様です。このような脆弱性はWebインターフェースで防御していても、OWASP Top 10攻撃はすべてAPIで開始できてしまいます。

信頼性の低いユーザによるURLパス入力から悪意のあるデータをフィルタリング

URL全体(URLクエリパス以外も含む)をチェックして悪意のある入力がないか検証します。このチェックはデフォルトで有効になっており、[SECURITY POLICIES(セキュリティポリシー)]>[URL Protection(URL保護)]のページで設定できます。

API攻撃の標的全体を保護

BWAFは、リバースプロキシとして機能し、APIの攻撃対象全体をインターセプトおよび保護します。対象としては、動的に生成されたURL、ディレクトリにリソース名(ユーザ名や動画名)を使用するURLなどがあります。

仮想パッチを使った継続的なAPIデリバリ

インラインで使用するBWAFでは、仮想パッチを適用することにより、APIまたはそのフレームワークの脆弱性(RubyのJSON gemにあるSQLiまたは新たなSSL脆弱性など)に即時対応できます。担当者は、脆弱性を検出/修正/テスト/再導入というサイクルから解放され、APIのダウンタイムとビジネスへの影響が発生する時間を短縮できます。

コンシューマによる不正利用からAPIを保護(ファーミング対策)

RESTful WebサービスAPIの多くは、サードパーティアグリゲータによるファーミングの対象になっています。たとえば、価格マッチングWebサイトは、eコマースサービスのREST APIに過度な負荷を与える可能性があります。スロットリングが適切に行われていないと、APIバックエンドに過剰な負荷がかかり、他のユーザに対するサービス品質が低下し、課金しているコンシューマにサービスを提供できなくなる恐れがあります。BWAFのブルートフォースポリシーとDDoS対策ポリシーは、APIへのアクセスを適切に制御します。

ビジネスパートナーに対するSLAを達成

REST APIでは、リソースごとにサービスレベルが異なることがあります。たとえば、製品カタログ(/api/products/)のSLAは製品オーダー(/api/orders/)と異なり、さらに/api/searchとも異なる場合があります。また、パートナーごとに異なるSLAを適用することもあります。このような課題には、BWAFのレートコントロールとブルートフォース対策が対応できます。

XML/JSONパーサを保護

BWAFはXML/JSONコンテンツを検証することで、APIサービスのダウンを引き起こすパーサへのDoS攻撃を防止します。有効なXMLに似せたXML爆弾をブロックしますが、指数関数的にエンティティを展開する攻撃などが発生した場合にはXMLパーサが暴走する危険があります。

API認証と承認

BWAFでは、APIサービスの事前認証や、DMZでの完全なオフロードが可能です。基本認証、LDAP、RADIUS以外にも、クライアント証明書、CRL、OCSPをサポートします。さらに、APIキーをホワイトリスト化し、ヘッダなど要求の一部で検証することも可能です。

APIセッションセキュリティ

BWAFには、URL、ヘッダ、Cookieなどを対象とするセッショントークンを対象にした厳格なセキュリティ機能が付属します。これには、セッショントークンの暗号化、署名、MITM攻撃を防御するリプレイ保護が含まれています。また、CSRFトークンインジェクション、リファラの検証、HTTPヘッダチェックも、API要求で完全に適用可能です。

動詞ベースのセキュリティ制約とアクセス制御

前回の記事で説明したように、RESTアプリケーションはHTTP(動詞)メソッドを運用ポリシーやロールベースのアクセス制御(VBAACなど)にリンクすることがあります。ところが、動詞はどのリソースでも使用できるわけではありません。そこでBWAFは、きめ細かいポジティブプロファイリング機能を使って、どのリソースでどのメソッドを許可するかを指定できます。

APIサービスにセキュアなTLSフロントを提供

BWAFは、平文や資格情報(基本認証ヘッダやAPIキーなど)のMITM盗聴を防止するTLSスタックをセキュリティ保護します。強力な暗号方式とPFS(Perfect Forward Secrecy)のみをサポートします。RESTは非常にチャッティなので、TLS/SSLをBWAFにオフロードすることにより、APIインフラの負担を軽減して拡張性を高めます。

APIのデリバリとスケーラビリティ

REST(およびAJAX)はチャッティなので、接続の確立と切断を頻繁に実行します。これにより、サーバに非常に大きなオーバーヘッドが発生することがあります。そこで、BWAFとバックエンドサーバ間の接続を多重化し、このような呼び出しのパフォーマンスを大幅に最適化しています。WAFとバックエンド間で接続プールを常に維持することで、クライアント要求が多重化されます。その結果、接続の確立と切断に時間がかからないので、サーバ上のネットワーク処理を合理化できます。

REST APIのキャッシングと圧縮

RESTでは、キャッシングを効率化する方法として、ステートレスという考え方を提唱しています。APIのキャッシングに関するベストプラクティスは、リバースプロキシです。これにより、APIのデリバリを高速化し、サーバ負荷を軽減します。HTTP対応のBWAFは、安全なメソッド(GETなど)をチェックし、それに対する応答のみをキャッシュします。さらに、安全でないメソッド(POSTなど)はキャッシュせず、APIバックエンドに渡します。

圧縮モジュールは、XMLまたはJSONの応答データを圧縮することにより、不安定なモバイルネットワークの通信帯域幅を大幅に節約できるだけでなく、APIデリバリを高速化します。

API監査と分析の一元化

BWAFは、あらゆるHTTP要求を網羅した幅広いロギング機能とレポーティング機能を備え、SEIMの大手ベンダとの統合にも対応しています。監査や法規制コンプライアンスの一元的なフレームワークとして、PIIや機密性の高いデータを扱う企業APIサービスにも対応できます。

豊富なレポーティング機能では、APIの使用状況を即時で確認でき、クライアントやサーバに関する各種メトリックを使ったドリルダウンも可能です。

Barracuda Web Application Firewallについて詳しくは、製品ページをご覧ください。

※本内容はBarracuda Product Blog 2015年7月14日Securely Delivering Your APIs using the Barracuda Web Application Firewallを翻訳したものです。

Neeraj Khandelwal

本稿は、バラクーダネットワークスのWebサイトに掲載されている『バラクーダラボ』8月3日付の記事の転載です。