ヘッダーをスキップ

Oracle® Database Firewall管理ガイド リリース5.0 B65097-01 |
| 目次 | 索引

前 | 次 |

# 11 Oracle Database FirewallとBIG-IP ASMの併用

この付録の内容は、次のとおりです。

- Oracle Database FirewallとBIG-IP ASMの統合の概要

- Oracle Database FirewallとBIG-IP ASMの統合の主な利点

- 統合による動作

- Oracle Database FirewallとBIG-IP ASMの統合のデプロイ

- Oracle Database Firewallのデータの表示

## Oracle Database FirewallとBIG-IP ASMの統合の概要

この章では、Oracle Database Firewall、BIG-IP Application Security Manager(ASM)、WebクライアントおよびWebアプリケーション・サーバーの統合について説明し、統合による動作とその主な利点についても説明します。

F5 Networks社のBIG-IP Application Security Manager(ASM)は高度なWebアプリケーション・ファイアウォール(WAF)で、Webベースの様々な攻撃に対してネットワークのエッジで包括的な保護を実現します。

図11-1に示すように、BIG-IP ASMはWebクライアントとWebアプリケーション・サーバーの間にデプロイされます。これによって、各HTTPおよびHTTPSリクエストが分析され、攻撃がWebアプリケーション・サーバーに達する前に潜在的な攻撃をブロックします。BIG-IP ASMは様々なBIG-IPプラットフォームにインストールできます(「Oracle Database FirewallとBIG-IP ASMの統合のデプロイ」を参照)。

Oracle Database FirewallとBIG-IP ASMの統合は、ArcSight SIEMを統合するとさらに機能が向上します。詳細は、第12章「Oracle Database FirewallとArcSight SIEMの併用」を参照してください。

図11-1 Oracle Database FirewallとF5 BIG-IP ASMのデータ・フロー・ユニット

「図11-1 Oracle Database FirewallとF5 BIG-IP ASMのデータ・フロー・ユニット」の説明

Oracle Database FirewallはWebアプリケーション・サーバーとデータベースの間にデプロイされます。これによって、データベースに送信されたSQL文の目的が分析され、ネットワーク内外からの攻撃に対してデータベースが保護されます。セキュリティ上の既知の脅威の構文を認識するだけでなく、それまで認知されていなかった攻撃(組織を標的にした攻撃を含む)もブロックします。

BIG-IP ASMとOracle Database Firewallの両方を含むデプロイメントによって、両方の製品が持つセキュリティ機能の利点をすべて利用でき、2つのシステムが連携して機能して比類なきレベルのデータ・セキュリティを実現します。

この統合の主な利点は、BIG-IP ASMからOracle Database Firewallに、データベースに送信されたSQL文に関する追加情報(SQL文を送信したWebユーザーの実際の名前やIPアドレスを含む)を渡すことができることです。この情報は、Webアプリケーション・サーバーで生成されたSQL文からは直接取得できません。

BIG-IP ASMおよびOracle Database Firewallシステム自体から取得された情報は、Oracle Database Firewallによって該当する文の属性としてログに記録されます。データがログに記録されるとトラフィック・ログのビューに取り込むことができるため、あらゆる攻撃のソースと特性を完全に視覚化できます。

## Oracle Database FirewallとBIG-IP ASMの統合の主な利点

統合の主な利点は、次のとおりです。

- 2つのシステムが連携することによってセキュリティが向上します。

- Oracle Database Firewallでは、Webアプリケーション層からのSQL文の作成元と内容に関する詳細情報を提供できます。

- Oracle Database Firewallは、BIG-IP ASMで生成されたデータのログ・ストアとして機能できます。

- ネットワークのエッジ、およびデータベース周りにおいて階層化されたセキュリティを提供できます。

## 統合による動作

統合によって、syslogメッセージ・システムを使用してWebアプリケーション・ファイアウォールからアラートを配信できます。標準のBIG-IP ASM syslogメッセージは、ASMロギング・プロファイルを使用して有効化され、ユーザーのソースIPアドレス、セッションのその他の属性など各アラートの詳細を提供します。

さらに、オプションのBIG-IP ASM iRule(tm)を設定すると、ユーザーのログイン中にsyslogメッセージが生成され、Webユーザー名を特定できます。Oracle Database FirewallにはサンプルのiRuleが用意されており、Webアプリケーションの特定のログイン手順に一致するようにカスタマイズできます。「BIG-IP ASM iRuleの開発」を参照してください。

デプロイメント手順の間、BIG-IP ASMはすべてのsyslogメッセージをOracle Database Firewallにルーティングするように設定されます。Oracle Database Firewallでは、関連する各BIG-IP ASM syslogメッセージと、Webアプリケーション・サーバーで生成された該当するSQL文が照合されます。一致が検出されると、BIG-IP ASM syslogメッセージに含まれている情報が抽出され、ログに記録されたSQL文の属性としてその情報が格納されます。一致が検出されなかった場合は、別のレコードがトラフィック・ログに追加され、syslogメッセージに含まれる属性が格納されます。

このソフトウェアでは、Cookieを使用してSQL文とWebユーザーが照合されます。ユーザーがログインすると、BIG-IP ASMでは一意のCookieがそのユーザーに割り当てられます(通常は「TS」Cookie)。そのCookieとユーザー名は、Oracle Database Firewall iRuleで生成されたsyslogメッセージによってOracle Database Firewallに送信されます。ユーザーのアクションによってアラートまたは他のイベントが発生した場合、BIG-IP ASMでは同じ識別Cookieを含む追加のsyslogメッセージが生成され、ソフトウェアでそのsyslogメッセージと特定のユーザーを照合できます。Oracle Database FirewallシステムでもsyslogメッセージとSQL文を照合できるため、潜在的な脅威に関連するSQL文を特定のユーザーに結び付けることができます。

Oracle Database Firewallでは、BIG-IP ASMから受信したすべてのsyslogメッセージを外部のsyslogサーバーに自動的にリレーできます(最大サイズは2KB)。必要な場合は、Oracle Database Firewall自体で生成されたsyslogメッセージも同じ宛先にルーティングできます。Oracle Database FirewallがBIG-IP ASM syslogのトラフィックを変更することはありません。

Oracle Database FirewallではBIG-IP ASMとの接続の状態を監視し、接続が検出されない場合または接続が失われた場合は、syslogメッセージが2分ごとに生成されます。

関連項目: syslog形式の詳細は、付録C「syslogメッセージ形式」を参照してください。

## Oracle Database FirewallとBIG-IP ASMの統合のデプロイ

この項で説明する項目は、次のとおりです。

- デプロイメントの概要

- システム要件

- Oracle Database Firewallの構成

- BIG-IP ASMの構成

- BIG-IP ASM iRuleの開発

### デプロイメントの概要

BIG-IP ASMをOracle Database Firewall とともにデプロイするには、両方のシステムでいくつかの簡単な設定を構成し、必要に応じて、Webアプリケーション・ユーザーの名前を提供するようにiRuleをカスタマイズする必要があります。BIG-IP ASMをOracle Database Firewallとともにデプロイするには、両方のシステムでいくつかの簡単な設定を構成し、必要に応じて、Webアプリケーション・ユーザーの名前を提供するようにiRuleをカスタマイズする必要があります。

### システム要件

統合には次の製品が必要です。

- Oracle Database Firewall

- F5 BIG-IP ASMバージョン9.4.5およびバージョン10。FirePass®、BIG-IP LTM(tm)、BIG-IP GTM(tm)、WebAccelerator(tm)、WANJet®など他のF5製品は、現在サポートされていません。

このガイドが発行された時点でBIG-IP ASMがサポートされているのは、BIG-IP 3600、4100、6900、8400および8800ハードウェア・プラットフォームです。必要に応じて、F5のWebサイトで最新情報を閲覧してください。URLは次のとおりです。

`http://www.f5.com/`

### Oracle Database Firewallの構成

Oracle Database Firewall は、保護対象データベースに強制ポイントを設定した後にのみ、F5 BIG-IP ASMとともに動作するように構成できます。

Oracle Database FirewallがF5 BIG-IP ASMとともに動作するように構成する手順は、次のとおりです。

1. Management Serverの管理コンソールにログインします。

   詳細は、「管理コンソールへのログイン」を参照してください。

2. 保護対象データベースに強制ポイントが定義されていることを確認します。

3. 「Monitoring」タブをクリックします。

   次のように、強制ポイントがリストされます。

   図f5_002.gifの説明

4. 保護対象データベースを監視する強制ポイントで「Advanced」をクリックします。

5. オプションを設定します。

   - System Address: この情報は読取り専用で、「System Settings」ページで設定したOracle Database FirewallのIPアドレスが表示されます。BIG-IP ASMは、syslogメッセージをこのアドレスとポートに送信する必要があります。

   - WAF Addresses: syslogメッセージを生成してOracle Database Firewallに送信する各BIG-IP ASMシステムのIPアドレスを入力します。各IPアドレスは空白で区切ります。

   - Destination Host and TCP Port: Oracle Database Firewallから転送されたBIG-IP ASM syslogメッセージを受信するsyslogサーバーのIPアドレスとポート番号を指定します。Oracle Database Firewallは、これらのメッセージを変更せずにリレーします。

     このIPアドレスは、Oracle Database Firewall自体で生成されるsyslogメッセージのsyslog宛先と同じである必要はありません。

   - Disable WAF Alert Forwarding: Oracle Database Firewallでsyslogメッセージの転送を停止する場合は、このチェック・ボックスを選択します。アラート転送の現在のステータスがこのオプションの下に表示されます。

   - Enhance reports with WAF logging data: Oracle Database Firewallのトラフィック・ログに、syslogメッセージから取得したBIG-IP ASM属性(IPアドレス、Webアプリケーション・ユーザーの名前など)を記録する場合は、このチェック・ボックスを選択します。

   - Session Idle Timeout: このフィールドに指定した時間の長さだけユーザーのCookieが保存されます。このため、ここで指定した時間が経過すると、同じCookieを別のユーザーが使用できるようになります。

   - Exclude Addresses: レポート作成の目的で無視する、Webアプリケーション・サーバーまたは他のSQL生成ソースのIPアドレスのリストを指定できます。たとえば、内部Webアプリケーション・サーバーのIPアドレスを追加できます。

### BIG-IP ASMの構成

この項では、ロギング・プロファイルの作成方法とポリシー設定の記述方法について説明します。

#### ロギング・プロファイル

BIG-IP ASM syslogメッセージをOracle Database Firewallに送信するように、Webアプリケーションのロギング・プロファイルを構成します。「Server IP」と「Server Port」を使用して、Oracle Database FirewallのIPアドレス(管理コンソールへの接続に使用するIPアドレスと同じ)とポート番号5514を指定します。プロトコルは「TCP」を選択します。

「Selected Items」には、次の属性が含まれている必要があります。

- `violations`

- `unit_hostname`

- `management_ip_address`

- `policy_name`

- `policy_apply_date`

- `x_forwarded_for_header_value`

- `support_id`

- `request_blocked`

- `response_code`

- `method`

- `protocol`

- `uri`

- `query_string`

- `ip`

- `web_application_name`

- `request`

注意: 属性は、ここに示した順序で「Selected Items」ボックスに表示される必要があります。

#### ポリシー設定

ポリシー設定によって、必要なイベントを有効にしてsyslogを送信します(この方法が不明な場合は、ASMのヘルプを参照してください)。

Oracle Database Firewallでは、次のイベントが認識されます。

- `Evasion technique detected`

- `Request length exceeds defined buffer size`

- `Illegal dynamic parameter value`

- `Illegal meta character in header`

- `Illegal meta character in parameter value`

- `Illegal parameter data type`

- `Illegal parameter numeric value`

- `Illegal parameter value length`

- `Illegal query string or POST data`

- `Illegal static parameter value`

- `Parameter value does not comply with regular expression`

- `Attack signature detected`

- `Illegal HTTP status in response`

### BIG-IP ASM iRuleの開発

オプションで、iRuleを使用すると、ログイン・ページを監視し、ユーザーがWebアプリケーションにログインするたびにsyslogメッセージを生成できます。syslogメッセージには、Webアプリケーション・ユーザーのユーザー名、およびそのユーザーに関連付けられたCookieが含まれます。メッセージはOracle Database Firewallにルーティングされ、Webアプリケーション・サーバーで生成されたSQL文に対してユーザー名がログに記録されます。

Oracle Database Firewallで提供されるサンプルのiRuleには、syslogメッセージの必要な形式が含まれていますが、使用するWebアプリケーションの特定のログイン要件にあわせてカスタマイズする必要があります。

    # F5 BIG-IP example iRule
    # Description: Capture username and cookies from user login to web application
    #
    # Global variable definitions and other initialisation logic goes here
    when RULE_INIT {
            ### Customise this to suit your application
            # The page that user logins from
            set ::login_page "/login.asp"
            # The name of the field holding the user name
            set ::login_parameter_name "Uname"
            # The method of authentiaction which will be sent to  Oracle Database Firewall
            set ::auth_method "webforms"
            # HTTP protocol methods that is used by the login form
            set ::login_method "POST"
            ### Don't change these
            # Limit the length of the HTTP request for safety
            set ::max_header_content_length 5242880
            # Log iRule trace messages to /var/log/ltm? 1=yes, 0=no
            # Must be set to 0 for production systems
            set ::payload_debug 0
    }
    # HTTP request received, check if it's a login request and start assembling the
    # data
    when HTTP_REQUEST {
            # Log the debug message if trace is enabled
            if {$::payload_debug}{log local3. "[IP::client_addr]:[TCP::client_port]:
                     New HTTP
            [HTTP::method] request to [HTTP::host][HTTP::uri]"}
            # Reset cookies to empty, later used as an indicator of the fact that
            # login HTTP
            request has been received
            set cookie_all ""
            # If the request is to the login page populate cookie_all variable with
            # all the cookies received
            if {[HTTP::path] starts_with $::login_page and [HTTP::method] eq
                    $::login_method}
            {
                    set cookie_name [HTTP::cookie names]
            for {set c 0}{$c < [HTTP::cookie count]}{incr c}{
                    set cookie_string [split [lindex $cookie_name $c] " "]
                    set cookie_list $cookie_string=[HTTP::cookie [lindex
                    $cookie_string 0]]
                    append cookie_all "," $cookie_list
            }
            # Log the debug message if trace is enabled
            if {$::payload_debug}{log local3. "[IP::client_addr]:[TCP::client_port]:

            Matched path and method check"}
            # Validate the Content-Length value and set the content_length variable
            if {[HTTP::header value Content-Length] > $::max_header_content_length }
                {set content_length $::max_header_content_length
            } else {
            set content_length [HTTP::header value Content-Length]
            }
            # Get the payload data
            if {$content_length > 0}{
            HTTP::collect $content_length
            # Log the debug message if trace is enabled
            if {$::payload_debug}{log local3.
            "[IP::client_addr]:[TCP::client_port]: Collecting $content_length
            bytes"}
    }
           }
    }
    # Got the data, parse them and generate the syslog message
    when HTTP_REQUEST_DATA {
            # If cookies are present this is a login request, get the user name
            if {$cookie_all != "" } {
                    # Log the debug message if trace is enabled
                    if {$::payload_debug}{log local3. "[IP::client_addr]:
                            [TCP::client_port]:
            Collected request data: [HTTP::payload]"}
            # Reset the error flag to 0
            set uname_logged 0
            # Find the $::login_parameter_name among the parameters in the request and
            extrat its value
            set param_value_pairs [split [HTTP::payload] "&"]
            for {set i 0} {$i < [llength $param_value_pairs]} {incr i} {
                    set params [split [lindex $param_value_pairs $i] "="]
                    if { [lindex $params 0] equals $::login_parameter_name } {
                            # User name was found, generate the syslog message
                            # which includes IP, port, all the cookies, user name and
                            # the auth_method string
                            set username [lindex $params 1]
                            log local3. "DBFIREWALL:CLIENT=[IP::client_
                                 addr]:[TCP::client_port]$cookie_all,
                                 USERNAME=$username,AUTHMETHOD=$::auth_method"
                            # Set the flag so not to trigger the error reporting log
                            message below
                            set uname_logged 1
                            break
                    }
            }
            # If user name has not been found in parameters log an error
            if {$uname_logged == 0 } {
                    log local0. "ERROR: iRule failed to extract user name from
                    page $login_page with parameter $login_parameter_name"
           }
    }
    }

#### syslogメッセージの必要な形式

カスタムiRuleで生成されるsyslogメッセージの必要な形式は、次のとおりです。

    Rule [iRuleName] HTTP_REQUEST_DATA:
    DBFIREWALL:CLIENT=[ClientIPAddress]:[ClientPort],[Cookies],
    USERNAME=[Name],AUTHMETHOD=[AuthMethod]

詳細は、次のとおりです。

- [`iRuleName`]は、`iRule`の名前です。

- [`ClientIPAddress`]は、WebクライアントのソースIPアドレスです。

- [`ClientPort`]は、Webクライアントのソース・ポート番号です。

- [`Cookies`]は、BIG-IP ASM HTTPオブジェクトから使用可能なCookieのリストです。

- [`Name`]は、ユーザー名です。

- [`AuthMethod`]は、F5 WebサーバーとそのWebクライアントの間で使用される認証の方法で、BIG-IP ASMで設定されます。Oracle Database Firewallでは、使用される認証方法をレポートするとき以外はこの情報を使用しません。

  次に例を示します。

      Rule capture_login_rule HTTP_REQUEST_DATA:
      DBFIREWALL:CLIENT=10.190.0.1:443,ASPSESSIONIDSASSBSCD=1234,TS10da7b=23545,
        USERNAME=FredBloggs,AUTHMETHOD=webforms

#### syslog-ng.confの構成

iRule syslogメッセージがOracle Database Firewallに転送されるようにするには、BIG-IPハードウェア・プラットフォームにログインし、次のBIG-IP ASMコマンドを実行して`/etc/syslog-ng /syslog-ng.conf`を変更する必要があります(直接変更するとシステムの再起動後に変更が保持されないため、ファイルを直接変更しないでください): bigpipe syslog include

    "destination d_dbfw { tcp(\"dbfw_ip_address\" port(dbfw_port));};log { source(local); filter(f_local3); destination(d_dbfw);};"

`dbfw_ip_address`と`dbfw_port`は、Oracle Database FirewallのIPアドレスとポート番号です。次に例を示します。

bigpipe syslog include

     '"destination d_dbfw { tcp(\"192.168.0.181\" port(5514));};log { source(local); filter(f_local3); destination(d_dbfw);};"'

syslog宛先名(`d_dbfw`)の2つのインスタンスを変更する必要があるのは、万一宛先名がすでに使用されている場合のみです。通常、ポート番号は5514です。

## Oracle Database Firewallのデータの表示

この項で説明する項目は、次のとおりです。

- 管理コンソールのダッシュボード

- BIG-IP ASMで生成されたトラフィック・ログの表示

- Webアプリケーション・ファイアウォール(WAF)のレポート

### 管理コンソールのダッシュボード

Oracle Database Firewall管理コンソールの「Dashboard」ページには、Webユーザー別の上位10件の脅威、ブロックされた文に関する統計、およびBIG-IP ASMへのリンクの現行ステータスの概要が表示されます。この情報を表示すると、脅威の概要を把握し、システムが動作していることを確認できます。

情報を表示するには、Oracle Database Firewall管理コンソールにログインし、「Dashboard」ページを表示します。

WAF情報は、「Dashboard」ページの2つの領域に表示されます。

- WAF Status: ここには、BIG-IP ASMへのリンク(最上行)の現行ステータス、および次の統計が表示されます。

  - Policy Confirmed: 過去1時間に、SQL文と一致してOracle Database Firewallの「ブロック」または「警告」が生成されたBIG-IP ASM syslogメッセージの数。

  - Policy Conflict: 過去1時間に、SQL文と一致したがOracle Database Firewallの「ブロック」または「警告」が生成されなかったBIG-IP ASM syslogメッセージの数。

  - Matched: 過去1時間に、SQL文と正常に一致したBIG-IP ASM syslogメッセージの数。

  - Unmatched: 過去1時間に、SQL文と正常に一致しなかったBIG-IP ASM syslogメッセージの数。

  - Events in Last Hour: 過去1時間におけるBIG-IP ASMからのsyslogメッセージの合計数。

- Top Ten Threats by Web User: 指定した期間内で最も重大な脅威がリストされます。Webユーザー名別に脅威がリストされます。1名のユーザーに対して1行が使用されます。

  ユーザーをクリックすると、そのユーザーによる攻撃がすべてリストされます。

  注意: WAF設定が構成されている場合は、「Dashboard」にWAFセクションが表示されます(「Webアプリケーション・ファイアウォール(WAF)のレポート」を参照)。

### BIG-IP ASMで生成されたトラフィック・ログの表示

Oracle Database Firewall管理コンソールでトラフィック・ログを表示すると、BIG-IP ASMから収集されたデータを表示できます。トラフィック・ログに格納される内容は、次のとおりです。

- Oracle Database Firewallによってログに記録された各SQL文、および各文に関連付けられた属性。属性には、Oracle Database Firewallシステムからのデータ(脅威の重大度、アクション・レベルなど)、およびSQL文と一致したBIG-IP ASM syslogメッセージから取得したデータ(使用可能な場合)が含まれます。

- SQL文と一致しなかったBIG-IP ASM syslogメッセージによって報告された各違反。

ログ・トラフィックを表示する手順は、次のとおりです。

1. Management Serverの管理コンソールにログインします。

   詳細は、「管理コンソールへのログイン」を参照してください。

2. 「Reporting」タブをクリックします。

3. 「Traffic Log」メニューから「Search Log」を選択します。次に示すページが表示されます。

   図f5_008.gifの説明

4. タイトルを入力し、トラフィック・ログから必要なレコードを取得するために使用する検索条件を指定します。「Search」をクリックします。

   「Search Traffic Log」ページへのアクセス方法の詳細は、『Oracle Database Firewallセキュリティ管理ガイド』を参照してください。

5. 「Searches」ページに検索が完了したことを示すメッセージが表示されたら、レポート・タイトルをクリックします。

   「Search Results」ページに、検出された文が表示されます。

#### 属性の理解

Oracle Database Firewallロゴとともに表示される属性は、Oracle Database Firewallシステムから取得されます。F5ロゴとともに表示されるのは、BIG-IP ASMから取得または導出されたものです。属性の詳細は、付録D「トラフィック・ログの属性」を参照してください。

### Webアプリケーション・ファイアウォール(WAF)のレポート

Oracle Database Firewall管理コンソールからは、次のようないくつかのレポートを生成できます。

- F5 Alerts Blocked by F5: BIG-IP ASMによってブロックされたすべてのアラート。

- F5 Confirmed Alert: BIG-IP ASMで検出され、Oracle Database Firewallで「ブロック」または「警告」が生成されるアラート。

- F5 Incident Report: すべてのインシデントの時間別リスト。

- F5 Incident Summary by User: ユーザー別にグループ化されたインシデントのリスト。

- F5 Incident Summary by Cluster: SQL文のクラスタ別にグループ化されたインシデントのリスト。

- F5 No WAF Match: BIG-IP ASMで検出され、Oracle Database FirewallでSQL文と一致しなかったアラート。

- F5 Policy Conflict: BIG-IP ASMで検出され、Oracle Database Firewallで「ブロック」または「警告」が発生しないアラート。

- F5 Policy Conflict by User: ユーザー別にグループ化されたポリシー競合レポート。